ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpLWRldmljZXMtY2Npc3MKaW5kZXggMGE5MmE3Yy4uNGYyOWU1ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCkBAIC0zMSwzICszMSwzMSBAQAogS2VybmVsIFZlcnNpb246IDIuNi4zMAogQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCiBEZXNjcmlwdGlvbjoJQSBzeW1ib2xpYyBsaW5rIHRvIC9zeXMvYmxvY2svY2Npc3MhY1hkWQorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9yZXNjYW4KK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246CTIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJS2lja3Mgb2YgYSByZXNjYW4gb2YgdGhlIGNvbnRyb2xsZXIgdG8gZGlzY292ZXIgbG9naWNhbAorCQlkcml2ZSB0b3BvbG9neSBjaGFuZ2VzLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL2x1bmlkCitEYXRlOgkJQXVndXN0IDIwMDkKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzEKK0NvbnRhY3Q6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQorRGVzY3JpcHRpb246CURpc3BsYXlzIHRoZSA4LWJ5dGUgTFVOIElEIHVzZWQgdG8gYWRkcmVzcyBsb2dpY2FsCisJCWRyaXZlIFkgb2YgY29udHJvbGxlciBYLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL3JhaWRfbGV2ZWwKK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246IDIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJRGlzcGxheXMgdGhlIFJBSUQgbGV2ZWwgb2YgbG9naWNhbCBkcml2ZSBZIG9mCisJCWNvbnRyb2xsZXIgWC4KKworV2hlcmU6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy88ZGV2Pi9jY2lzc1gvY1hkWS91c2FnZV9jb3VudAorRGF0ZToJCUF1Z3VzdCAyMDA5CitLZXJuZWwgVmVyc2lvbjogMi42LjMxCitDb250YWN0Oglpc3Nfc3RvcmFnZWRldkBocC5jb20KK0Rlc2NyaXB0aW9uOglEaXNwbGF5cyB0aGUgdXNhZ2UgY291bnQgKG51bWJlciBvZiBvcGVucykgb2YgbG9naWNhbCBkcml2ZSBZCisJCW9mIGNvbnRyb2xsZXIgWC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjdmOWQzYi4uNzI2NTFmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMzIsNyArMjMyLDcgQEAKIFdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzcuCiAKIExhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKLW1haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyAzMDAga0IgaW4gc2l6ZSwKIGl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBzdG9yZSB5b3VyIHBhdGNoIG9uIGFuIEludGVybmV0LWFjY2Vzc2libGUKIHNlcnZlciwgYW5kIHByb3ZpZGUgaW5zdGVhZCBhIFVSTCAobGluaykgcG9pbnRpbmcgdG8geW91ciBwYXRjaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0FSTSBUQ00gKFRpZ2h0bHktQ291cGxlZCBNZW1vcnkpIGhhbmRsaW5nIGluIExpbnV4CistLS0tCitXcml0dGVuIGJ5IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisKK1NvbWUgQVJNIFNvQzpzIGhhdmUgYSBzby1jYWxsZWQgVENNIChUaWdodGx5LUNvdXBsZWQgTWVtb3J5KS4KK1RoaXMgaXMgdXN1YWxseSBqdXN0IGEgZmV3ICg0LTY0KSBLaUIgb2YgUkFNIGluc2lkZSB0aGUgQVJNCitwcm9jZXNzb3IuCisKK0R1ZSB0byBiZWluZyBlbWJlZGRlZCBpbnNpZGUgdGhlIENQVSBUaGUgVENNIGhhcyBhCitIYXJ2YXJkLWFyY2hpdGVjdHVyZSwgc28gdGhlcmUgaXMgYW4gSVRDTSAoaW5zdHJ1Y3Rpb24gVENNKQorYW5kIGEgRFRDTSAoZGF0YSBUQ00pLiBUaGUgRFRDTSBjYW4gbm90IGNvbnRhaW4gYW55CitpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgSVRDTSBjYW4gYWN0dWFsbHkgY29udGFpbiBkYXRhLgorVGhlIHNpemUgb2YgRFRDTSBvciBJVENNIGlzIG1pbmltdW0gNEtpQiBzbyB0aGUgdHlwaWNhbAorbWluaW11bSBjb25maWd1cmF0aW9uIGlzIDRLaUIgSVRDTSBhbmQgNEtpQiBEVENNLgorCitBUk0gQ1BVOnMgaGF2ZSBzcGVjaWFsIHJlZ2lzdGVycyB0byByZWFkIG91dCBzdGF0dXMsIHBoeXNpY2FsCitsb2NhdGlvbiBhbmQgc2l6ZSBvZiBUQ00gbWVtb3JpZXMuIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorZGVmaW5lcyBhIENQVUlEX1RDTSByZWdpc3RlciB0aGF0IHlvdSBjYW4gcmVhZCBvdXQgZnJvbSB0aGUKK3N5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAorYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKK3RvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgorZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQorbWFjaGluZS4KKworVGhlcmUgaXMgZnVydGhlciBhIFRDTSByZWdpb24gcmVnaXN0ZXIgKHNlYXJjaCBmb3IgIlRDTSBSZWdpb24KK1JlZ2lzdGVycyIgYXQgdGhlIEFSTSBzaXRlKSB0aGF0IGNhbiByZXBvcnQgYW5kIG1vZGlmeSB0aGUgbG9jYXRpb24KK3NpemUgb2YgVENNIG1lbW9yaWVzIGF0IHJ1bnRpbWUuIFRoaXMgaXMgdXNlZCB0byByZWFkIG91dCBhbmQgbW9kaWZ5CitUQ00gbG9jYXRpb24gYW5kIHNpemUuIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IGEgTU1VIHRhYmxlOiB5b3UKK2FjdHVhbGx5IG1vdmUgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBUQ00gYXJvdW5kLiBBdCB0aGUKK3BsYWNlIHlvdSBwdXQgaXQsIGl0IHdpbGwgbWFzayBhbnkgdW5kZXJseWluZyBSQU0gZnJvbSB0aGUKK0NQVSBzbyBpdCBpcyB1c3VhbGx5IHdpc2Ugbm90IHRvIG92ZXJsYXAgYW55IHBoeXNpY2FsIFJBTSB3aXRoCit0aGUgVENNLgorCitUaGUgVENNIG1lbW9yeSBjYW4gdGhlbiBiZSByZW1hcHBlZCB0byBhbm90aGVyIGFkZHJlc3MgYWdhaW4gdXNpbmcKK3RoZSBNTVUsIGJ1dCBub3RpY2UgdGhhdCB0aGUgVENNIGlmIG9mdGVuIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQordGhlIE1NVSBpcyB0dXJuZWQgb2ZmLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIGN1cnJlbnQgTGludXgKK2ltcGxlbWVudGF0aW9uIHdpbGwgbWFwIHRoZSBUQ00gMSB0byAxIGZyb20gcGh5c2ljYWwgdG8gdmlydHVhbAorbWVtb3J5IGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG1hY2hpbmUuCisKK1RDTSBpcyB1c2VkIGZvciBhIGZldyB0aGluZ3M6CisKKy0gRklRIGFuZCBvdGhlciBpbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBuZWVkIGRldGVybWluaXN0aWMKKyAgdGltaW5nIGFuZCBjYW5ub3Qgd2FpdCBmb3IgY2FjaGUgbWlzc2VzLgorCistIElkbGUgbG9vcHMgd2hlcmUgYWxsIGV4dGVybmFsIFJBTSBpcyBzZXQgdG8gc2VsZi1yZWZyZXNoCisgIHJldGVudGlvbiBtb2RlLCBzbyBvbmx5IG9uLWNoaXAgUkFNIGlzIGFjY2Vzc2libGUgYnkKKyAgdGhlIENQVSBhbmQgdGhlbiB3ZSBoYW5nIGluc2lkZSBJVENNIHdhaXRpbmcgZm9yIGFuCisgIGludGVycnVwdC4KKworLSBPdGhlciBvcGVyYXRpb25zIHdoaWNoIGltcGxpZXMgc2h1dHRpbmcgb2ZmIG9yIHJlY29uZmlndXJpbmcKKyAgdGhlIGV4dGVybmFsIFJBTSBjb250cm9sbGVyLgorCitUaGVyZSBpcyBhbiBpbnRlcmZhY2UgZm9yIHVzaW5nIFRDTSBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZQoraW4gPGFzbS90Y20uaD4uIFVzaW5nIHRoaXMgaW50ZXJmYWNlIGl0IGlzIHBvc3NpYmxlIHRvOgorCistIERlZmluZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiBJVENNIGFuZCBEVENNLgorCistIFRhZyBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgaW50byBJVENNLgorCistIFRhZyBkYXRhIGFuZCBjb25zdGFudHMgdG8gYmUgYWxsb2NhdGVkIHRvIERUQ00gYW5kIElUQ00uCisKKy0gSGF2ZSB0aGUgcmVtYWluaW5nIFRDTSBSQU0gYWRkZWQgdG8gYSBzcGVjaWFsCisgIGFsbG9jYXRpb24gcG9vbCB3aXRoIGdlbl9wb29sX2NyZWF0ZSgpIGFuZCBnZW5fcG9vbF9hZGQoKQorICBhbmQgcHJvdmljZSB0Y21fYWxsb2MoKSBhbmQgdGNtX2ZyZWUoKSBmb3IgdGhpcworICBtZW1vcnkuIFN1Y2ggYSBoZWFwIGlzIGdyZWF0IGZvciB0aGluZ3MgbGlrZSBzYXZpbmcKKyAgZGV2aWNlIHN0YXRlIHdoZW4gc2h1dHRpbmcgb2ZmIGRldmljZSBwb3dlciBkb21haW5zLgorCitBIG1hY2hpbmUgdGhhdCBoYXMgVENNIG1lbW9yeSBzaGFsbCBzZWxlY3QgSEFWRV9UQ00gaW4KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZiwgYW5kIHRoZW4gdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgZGVwZW5kIG9uIHRoZSBwaHlzaWNhbAorbG9jYXRpb24gYW5kIHNpemUgb2YgSVRDTSBhbmQgRFRDTSB0byBiZSBkZWZpbmVkIGluCittYWNoL21lbW9yeS5oIGZvciB0aGUgbWFjaGluZS4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZQorVENNIHNoYWxsICNpbmNsdWRlIDxhc20vdGNtLmg+IElmIHRoZSBUQ00gaXMgbm90IGxvY2F0ZWQKK2F0IHRoZSBwbGFjZSBnaXZlbiBpbiBtZW1vcnkuaCBpdCB3aWxsIGJlIG1vdmVkIHVzaW5nCit0aGUgVENNIFJlZ2lvbiByZWdpc3RlcnMuCisKK0Z1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKKworVmFyaWFibGVzIHRvIGdvIGludG8gZHRjbSBjYW4gYmUgdGFnZ2VkIGxpa2UgdGhpczoKK2ludCBfX3RjbWRhdGEgZm9vOworCitDb25zdGFudHMgY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21jb25zdCBmb287CisKK1RvIHB1dCBhc3NlbWJsZXIgaW50byBUQ00ganVzdCB1c2UKKy5zZWN0aW9uICIudGNtLnRleHQiIG9yIC5zZWN0aW9uICIudGNtLmRhdGEiCityZXNwZWN0aXZlbHkuCisKK0V4YW1wbGUgY29kZToKKworI2luY2x1ZGUgPGFzbS90Y20uaD4KKworLyogVW5pbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y212YXI7CisvKiBJbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y21hc3NpZ25lZCA9IDB4MkJBREJBQkVVOworLyogQ29uc3RhbnQgKi8KK3N0YXRpYyBjb25zdCB1MzIgX190Y21jb25zdCB0Y21jb25zdCA9IDB4Q0FGRUJBQkVVOworCitzdGF0aWMgdm9pZCBfX3RjbWxvY2FsZnVuYyB0Y21fdG9fdGNtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQl0Y212YXIgKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGNtZnVuYyBoZWxsb190Y20odm9pZCkKK3sKKwkvKiBTb21lIGFic3RyYWN0IGNvZGUgdGhhdCBydW5zIGluIElUQ00gKi8KKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJdGNtdmFyICsrOworCX0KKwl0Y21fdG9fdGNtKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X3RjbSh2b2lkKQoreworCXUzMiAqdGNtZW07CisJaW50IGk7CisKKwloZWxsb190Y20oKTsKKwlwcmludGsoIkhlbGxvIFRDTSBleGVjdXRlZCBmcm9tIElUQ00gUkFNXG4iKTsKKworCXByaW50aygiVENNIHZhcmlhYmxlIGZyb20gdGVzdHJ1bjogJXUgQCAlcFxuIiwgdGNtdmFyLCAmdGNtdmFyKTsKKwl0Y212YXIgPSAweERFQURCRUVGVTsKKwlwcmludGsoIlRDTSB2YXJpYWJsZTogMHgleCBAICVwXG4iLCB0Y212YXIsICZ0Y212YXIpOworCisJcHJpbnRrKCJUQ00gYXNzaWduZWQgdmFyaWFibGU6IDB4JXggQCAlcFxuIiwgdGNtYXNzaWduZWQsICZ0Y21hc3NpZ25lZCk7CisKKwlwcmludGsoIlRDTSBjb25zdGFudDogMHgleCBAICVwXG4iLCB0Y21jb25zdCwgJnRjbWNvbnN0KTsKKworCS8qIEFsbG9jYXRlIHNvbWUgVENNIG1lbW9yeSBmcm9tIHRoZSBwb29sICovCisJdGNtZW0gPSB0Y21fYWxsb2MoMjApOworCWlmICh0Y21lbSkgeworCQlwcmludGsoIlRDTSBBbGxvY2F0ZWQgMjAgYnl0ZXMgb2YgVENNIEAgJXBcbiIsIHRjbWVtKTsKKwkJdGNtZW1bMF0gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bMV0gPSAweDJCQURCQUJFVTsKKwkJdGNtZW1bMl0gPSAweENBRkVCQUJFVTsKKwkJdGNtZW1bM10gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bNF0gPSAweDJCQURCQUJFVTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCXByaW50aygiVENNIHRjbWVtWyVkXSA9ICUwOHhcbiIsIGksIHRjbWVtW2ldKTsKKwkJdGNtX2ZyZWUodGNtZW0sIDIwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggNDU1ZDRlNi4uMGIzM2JmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMjI3LDcgKzIyNywxNCBAQAogRWFjaCBjZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNncm91cCBmaWxlIHN5c3RlbQogY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjZ3JvdXA6CiAKLSAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY2dyb3VwCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cC4gIFRoaXMgbGlzdAorICAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkLiAgV3JpdGluZyBhIHRocmVhZCBpZCBpbnRvIHRoaXMgZmlsZQorICAgbW92ZXMgdGhlIHRocmVhZCBpbnRvIHRoaXMgY2dyb3VwLgorIC0gY2dyb3VwLnByb2NzOiBsaXN0IG9mIHRnaWRzIGluIHRoZSBjZ3JvdXAuICBUaGlzIGxpc3QgaXMgbm90CisgICBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBvciBmcmVlIG9mIGR1cGxpY2F0ZSB0Z2lkcywgYW5kIHVzZXJzcGFjZQorICAgc2hvdWxkIHNvcnQvdW5pcXVpZnkgdGhlIGxpc3QgaWYgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4KKyAgIFdyaXRpbmcgYSB0Z2lkIGludG8gdGhpcyBmaWxlIG1vdmVzIGFsbCB0aHJlYWRzIHdpdGggdGhhdCB0Z2lkIGludG8KKyAgIHRoaXMgY2dyb3VwLgogIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIHRoZSByZWxlYXNlIGFnZW50IG9uIGV4aXQ/CiAgLSByZWxlYXNlX2FnZW50OiB0aGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyAodGhpcyBmaWxlCiAgICBleGlzdHMgaW4gdGhlIHRvcCBjZ3JvdXAgb25seSkKQEAgLTM3NCw3ICszODEsNyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHRhc2tzCitjZ3JvdXAucHJvY3Mgbm90aWZ5X29uX3JlbGVhc2UgdGFza3MKIChwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CmluZGV4IGI0MWYzZTUuLmYxYzVjNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CkBAIC0xLDE1ICsxLDI4IEBACiAKLUV4cG9ydCBjcHUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgorRXhwb3J0IENQVSB0b3BvbG9neSBpbmZvIHZpYSBzeXNmcy4gSXRlbXMgKGF0dHJpYnV0ZXMpIGFyZSBzaW1pbGFyCiB0byAvcHJvYy9jcHVpbmZvLgogCiAxKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQ6Ci1yZXByZXNlbnQgdGhlIHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgIGNwdSBYOworCisJcGh5c2ljYWwgcGFja2FnZSBpZCBvZiBjcHVYLiBUeXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbAorCXNvY2tldCBudW1iZXIsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIGlzIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0KKwlkZXBlbmRlbnQuCisKIDIpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9pZDoKLXJlcHJlc2VudCB0aGUgY3B1IGNvcmUgaWQgdG8gY3B1IFg7CisKKwl0aGUgQ1BVIGNvcmUgSUQgb2YgY3B1WC4gVHlwaWNhbGx5IGl0IGlzIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSdzCisJaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKwlhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKwogMykgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS90aHJlYWRfc2libGluZ3M6Ci1yZXByZXNlbnQgdGhlIHRocmVhZCBzaWJsaW5ncyB0byBjcHUgWCBpbiB0aGUgc2FtZSBjb3JlOworCisJaW50ZXJuZWwga2VybmVsIG1hcCBvZiBjcHVYJ3MgaGFyZHdhcmUgdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUKKwljb3JlIGFzIGNwdVgKKwogNCkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9jb3JlX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgcGh5c2ljYWwgcGFja2FnZTsKKworCWludGVybmFsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJcGh5c2ljYWxfcGFja2FnZV9pZC4KIAogVG8gaW1wbGVtZW50IGl0IGluIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsIHdheSwgYSBuZXcgc291cmNlIGZpbGUsCiBkcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYywgaXMgdG8gZXhwb3J0IHRoZSA0IGF0dHJpYnV0ZXMuCkBAIC0zMiwzMiArNDUsMzIgQEAKIDMpIHRocmVhZF9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiA0KSBjb3JlX3NpYmxpbmdzOiBqdXN0IHRoZSBnaXZlbiBDUFUKIAotQWRkaXRpb25hbGx5LCBjcHUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIKK0FkZGl0aW9uYWxseSwgQ1BVIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdSBhbmQgaW5jbHVkZXMgdGhlc2UgZmlsZXMuICBUaGUgaW50ZXJuYWwKIHNvdXJjZSBmb3IgdGhlIG91dHB1dCBpcyBpbiBicmFja2V0cyAoIltdIikuCiAKLSAgICBrZXJuZWxfbWF4OiB0aGUgbWF4aW11bSBjcHUgaW5kZXggYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAga2VybmVsX21heDogdGhlIG1heGltdW0gQ1BVIGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgogCQlbTlJfQ1BVUy0xXQogCi0gICAgb2ZmbGluZToJY3B1cyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KKyAgICBvZmZsaW5lOglDUFVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgogCQlIT1RQTFVHR0VEIG9mZiAoc2VlIGNwdS1ob3RwbHVnLnR4dCkgb3IgZXhjZWVkIHRoZSBsaW1pdAotCQlvZiBjcHVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CisJCW9mIENQVXMgYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXgKIAkJYWJvdmUpLiBbfmNwdV9vbmxpbmVfbWFzayArIGNwdXMgPj0gTlJfQ1BVU10KIAotICAgIG9ubGluZToJY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQorICAgIG9ubGluZToJQ1BVcyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQogCi0gICAgcG9zc2libGU6CWNwdXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCisgICAgcG9zc2libGU6CUNQVXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCiAJCWJyb3VnaHQgb25saW5lIGlmIHRoZXkgYXJlIHByZXNlbnQuIFtjcHVfcG9zc2libGVfbWFza10KIAotICAgIHByZXNlbnQ6CWNwdXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQorICAgIHByZXNlbnQ6CUNQVXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQogCQlzeXN0ZW0uIFtjcHVfcHJlc2VudF9tYXNrXQogCiBUaGUgZm9ybWF0IGZvciB0aGUgYWJvdmUgb3V0cHV0IGlzIGNvbXBhdGlibGUgd2l0aCBjcHVsaXN0X3BhcnNlKCkKIFtzZWUgPGxpbnV4L2NwdW1hc2suaD5dLiAgU29tZSBleGFtcGxlcyBmb2xsb3cuCiAKLUluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IGNwdXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IENQVXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKIHRoZSBrZXJuZWwgbWF4IHdoaWNoIGlzIGxpbWl0ZWQgdG8gMC4uMzEgYnkgdGhlIE5SX0NQVVMgY29uZmlnIG9wdGlvbgotYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBjcHVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCitiZWluZyAzMi4gIE5vdGUgYWxzbyB0aGF0IENQVXMgMiBhbmQgNC0zMSBhcmUgbm90IG9ubGluZSBidXQgY291bGQgYmUKIGJyb3VnaHQgb25saW5lIGFzIHRoZXkgYXJlIGJvdGggcHJlc2VudCBhbmQgcG9zc2libGUuCiAKICAgICAga2VybmVsX21heDogMzEKQEAgLTY3LDggKzgwLDggQEAKICAgICAgICAgcHJlc2VudDogMC0zMQogCiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24gaXMgMTI4LCBidXQgdGhlIGtlcm5lbCB3YXMKLXN0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IGNwdXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgotd2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBjcHUgdGhhdCBjYW4gYmUgYnJvdWdodAorc3RhcnRlZCB3aXRoIHBvc3NpYmxlX2NwdXM9MTQ0LiAgVGhlcmUgYXJlIDQgQ1BVcyBpbiB0aGUgc3lzdGVtIGFuZCBjcHUyCit3YXMgbWFudWFsbHkgdGFrZW4gb2ZmbGluZSAoYW5kIGlzIHRoZSBvbmx5IENQVSB0aGF0IGNhbiBiZSBicm91Z2h0CiBvbmxpbmUuKQogCiAgICAgIGtlcm5lbF9tYXg6IDEyNwpAQCAtNzgsNCArOTEsNCBAQAogICAgICAgICBwcmVzZW50OiAwLTMKIAogU2VlIGNwdS1ob3RwbHVnLnR4dCBmb3IgdGhlIHBvc3NpYmxlX2NwdXM9TlVNIGtlcm5lbCBzdGFydCBwYXJhbWV0ZXIKLWFzIHdlbGwgYXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjcHVtYXNrJ3MuCithcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFza3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAppbmRleCA1OWE5MWU1Li42MTFmNWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKQEAgLTY0LDE0ICs2NCwxNCBAQAogCiBCZXJuaGFyZCBLYWluZGwgZW5oYW5jZWQgZmlyZXNjb3BlIHRvIHN1cHBvcnQgYWNjZXNzaW5nIDY0LWJpdCBtYWNoaW5lcwogZnJvbSAzMi1iaXQgZmlyZXNjb3BlIGFuZCB2aWNlIHZlcnNhOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXNjb3BlLTAuMi4yLnRhci5iejIKIAogYW5kIGhlIGltcGxlbWVudGVkIGZhc3Qgc3lzdGVtIGR1bXAgKGFscGhhIHZlcnNpb24gLSByZWFkIFJFQURNRS50eHQpOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVkdW1wLTAuMS50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZWR1bXAtMC4xLnRhci5iejIKIAogVGhlcmUgaXMgYWxzbyBhIGdkYiBwcm94eSBmb3IgZmlyZXdpcmUgd2hpY2ggYWxsb3dzIHRvIHVzZSBnZGIgdG8gYWNjZXNzCiBkYXRhIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gc3ltYm9scyBmb3VuZCBieSBnZGIgaW4gdm1saW51eDoKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlcHJveHktMC4zMy50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgogCiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBnZGIgcHJveHkgKGZpcmVwcm94eS0wLjM0KSBjYW4gY29tbXVuaWNhdGUgKG5vdAogeWV0IHN0YWJsZSkgd2l0aCBrZ2RiIG92ZXIgYW4gbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb24gbW9kdWxlIChrZ2Rib20pLgpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIE5vdGVzCiAtLS0tLQotRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvZG9jcworRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvCiAKIEZpcmVXaXJlIGlzIGEgdHJhZGVtYXJrIG9mIEFwcGxlIEluYy4gLSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG86CiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpcmVXaXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggODlhNDdiNS4uYmM2OTNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDE4LDYgKzQxOCwxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ1OSwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDU3MGY5YmQuLjA1ZDVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMTIzLDEwICsxMjMsMTggQEAKIAogc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgogCi1xdW90YQotbm9xdW90YQotZ3JwcXVvdGEKLXVzcnF1b3RhCitxdW90YQkJCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIGZpbGVzeXN0ZW0uIFRoZXkKK25vcXVvdGEJCQlhcmUgdXNlZCBvbmx5IGJ5IHF1b3RhIHRvb2xzIHRvIHJlY29nbml6ZSB2b2x1bWVzCitncnBxdW90YQkJd2hlcmUgcXVvdGEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gU2VlIGRvY3VtZW50YXRpb24KK3VzcnF1b3RhCQlpbiB0aGUgcXVvdGEtdG9vbHMgcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KKworanFmbXQ9PHF1b3RhIHR5cGU+CVRoZXNlIG9wdGlvbnMgdGVsbCBmaWxlc3lzdGVtIGRldGFpbHMgYWJvdXQgcXVvdGEKK3VzcmpxdW90YT08ZmlsZT4Jc28gdGhhdCBxdW90YSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvcGVybHkgdXBkYXRlZAorZ3JwanF1b3RhPTxmaWxlPglkdXJpbmcgam91cm5hbCByZXBsYXkuIFRoZXkgcmVwbGFjZSB0aGUgYWJvdmUKKwkJCXF1b3RhIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHRoZSBxdW90YS10b29scworCQkJcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KIAogYmgJCSgqKQlleHQzIGFzc29jaWF0ZXMgYnVmZmVyIGhlYWRzIHRvIGRhdGEgcGFnZXMgdG8KIG5vYmgJCQkoYSkgY2FjaGUgZGlzayBibG9jayBtYXBwaW5nIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCAxOGI1ZWM4Li42ZDk0ZTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTEzNCw5ICsxMzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIAltb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKIAkJICAgICAJd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgogCitqb3VybmFsX2NoZWNrc3VtCUVuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLgorCQkJVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeSBjb2RlIGluIGUyZnNjayBhbmQgdGhlCisJCQlrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKKwkJCWNvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKwogam91cm5hbF9hc3luY19jb21taXQJQ29tbWl0IGJsb2NrIGNhbiBiZSB3cml0dGVuIHRvIGRpc2sgd2l0aG91dCB3YWl0aW5nCiAJCQlmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmIGVuYWJsZWQgb2xkZXIga2VybmVscyBjYW5ub3QKLQkJCW1vdW50IHRoZSBkZXZpY2UuCisJCQltb3VudCB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJworCQkJaW50ZXJuYWxseS4KIAogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0NCBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KQEAgLTI4Miw5ICsyODgsMTYgQEAKIAkJCXRvIHVzZSBmb3IgYWxsb2NhdGlvbiBzaXplIGFuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82CiAJCQlzeXN0ZW1zIHRoaXMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgZGF0YQogCQkJZGlza3MgKiAgUkFJRCBjaHVuayBzaXplIGluIGZpbGUgc3lzdGVtIGJsb2Nrcy4KLWRlbGFsbG9jCSgqKQlEZWZlcnJpbmcgYmxvY2sgYWxsb2NhdGlvbiB1bnRpbCB3cml0ZS1vdXQgdGltZS4KLW5vZGVsYWxsb2MJCURpc2FibGUgZGVsYXllZCBhbGxvY2F0aW9uLiBCbG9ja3MgYXJlIGFsbG9jYXRpb24KLQkJCXdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHRvIHBhZ2UgY2FjaGUuCisKK2RlbGFsbG9jCSgqKQlEZWZlciBibG9jayBhbGxvY2F0aW9uIHVudGlsIGp1c3QgYmVmb3JlIGV4dDQKKwkJCXdyaXRlcyBvdXQgdGhlIGJsb2NrKHMpIGluIHF1ZXN0aW9uLiAgVGhpcworCQkJYWxsb3dzIGV4dDQgdG8gYmV0dGVyIGFsbG9jYXRpb24gZGVjaXNpb25zCisJCQltb3JlIGVmZmljaWVudGx5Lgorbm9kZWxhbGxvYwkJRGlzYWJsZSBkZWxheWVkIGFsbG9jYXRpb24uICBCbG9ja3MgYXJlIGFsbG9jYXRlZAorCQkJd2hlbiB0aGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlCisJCQlwYWdlIGNhY2hlLCBlaXRoZXIgdmlhIHRoZSB3cml0ZSgyKSBzeXN0ZW0gY2FsbAorCQkJb3Igd2hlbiBhbiBtbWFwJ2VkIHBhZ2Ugd2hpY2ggd2FzIHByZXZpb3VzbHkKKwkJCXVuYWxsb2NhdGVkIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgogCiBtYXhfYmF0Y2hfdGltZT11c2VjCU1heGltdW0gYW1vdW50IG9mIHRpbWUgZXh0NCBzaG91bGQgd2FpdCBmb3IKIAkJCWFkZGl0aW9uYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRvIGJlIGJhdGNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNWFlZTc4Li4yYzQ4Zjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTExMTMsNyArMTExMyw2IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwotIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggYjU4Yjg0Yi4uZWVkNTIwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJIHdpbm50OiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgogCQkgbWl4ZWQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheSwKIAkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgotCQkgRGVmYXVsdCBzZXR0aW5nIGlzIGBsb3dlcicuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYG1peGVkJy4KIAogdHo9VVRDICAgICAgICAtLSBJbnRlcnByZXQgdGltZXN0YW1wcyBhcyBVVEMgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4KICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnZlcnNpb24gb2YgdGltZXN0YW1wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNQppbmRleCAyZTZhMjFlLi5jMTk2YTE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1CkBAIC0yMiwxMiArMjIsMTMgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKLW9mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKLXRoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUgdW5mcmllbmRseSB0byBwcm9iaW5nLiBZb3Ugd2lsbCBoYXZlIHRvCitpbnN0YW50aWF0ZSB0aGUgZGV2aWNlcyBleHBsaWNpdGx5LgogCiBFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAogb24gSTJDIGJ1cyAjMDoKLSQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKyQgbW9kcHJvYmUgbHRjNDIxNQorJCBlY2hvIGx0YzQyMTUgMHg0NCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIAogCiBTeXNmcyBlbnRyaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUKaW5kZXggYmFlN2EzYS4uMDI4MzhhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjQ1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDI0NQpAQCAtMjMsMTIgKzIzLDEzIEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgTFRDNDI0NSBkZXZpY2VzLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBzb21lCi1vZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcuIFlvdSB3aWxsIG5lZWQgdG8gdXNlCi10aGUgImZvcmNlIiBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlIHRvIGZpbmQgdGhlIGRldmljZS4KK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgaGF2ZSB0bworaW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseS4KIAogRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYW4gTFRDNDI0NSBhdCBhZGRyZXNzIDB4MjMKIG9uIEkyQyBidXMgIzE6Ci0kIG1vZHByb2JlIGx0YzQyNDUgZm9yY2U9MSwweDIzCiskIG1vZHByb2JlIGx0YzQyNDUKKyQgZWNobyBsdGM0MjQ1IDB4MjMgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMS9uZXdfZGV2aWNlCiAKIAogU3lzZnMgZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkY2JkNTAyLi44MmRlZjg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzUzLDEwICszNTMsMjAgQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCi1wb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWwJUG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwuICBBIHBvbGwKKwkJCQlub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJaGFyZHdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nIGludGVydmFsLgogCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcwogCQkJCVJXCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9tYXgJTWF4aW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKworcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsX21pbglNaW5pbXVtIHBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKKwkJCQlVbml0OiBtaWxsaXNlY29uZHMKKwkJCQlSTworCiBwb3dlclsxLSpdX2F2ZXJhZ2VfaGlnaGVzdAlIaXN0b3JpY2FsIGF2ZXJhZ2UgbWF4aW11bSBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzY1LDYgKzM3NSwxOCBAQAogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9tYXgJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXJpc2VzIGFib3ZlIHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9hdmVyYWdlX21pbgkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvCisJCQkJcG93ZXJbMS0qXV9hdmVyYWdlIHdoZW4gcG93ZXIgdXNlCisJCQkJc2lua3MgYmVsb3cgdGhpcyB2YWx1ZS4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCiBwb3dlclsxLSpdX2lucHV0CQlJbnN0YW50YW5lb3VzIHBvd2VyIHVzZQogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCkBAIC0zODEsNiArNDAzLDM5IEBACiAJCQkJYXZlcmFnZV9oaWdoZXN0IGFuZCBhdmVyYWdlX2xvd2VzdC4KIAkJCQlXTwogCitwb3dlclsxLSpdX2FjY3VyYWN5CQlBY2N1cmFjeSBvZiB0aGUgcG93ZXIgbWV0ZXIuCisJCQkJVW5pdDogUGVyY2VudAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fYWxhcm0JCTEgaWYgdGhlIHN5c3RlbSBpcyBkcmF3aW5nIG1vcmUgcG93ZXIgdGhhbiB0aGUKKwkJCQljYXAgYWxsb3dzOyAwIG90aGVyd2lzZS4gIEEgcG9sbCBub3RpZmljYXRpb24gaXMKKwkJCQlzZW50IHRvIHRoaXMgZmlsZSB3aGVuIHRoZSBwb3dlciB1c2UgZXhjZWVkcyB0aGUKKwkJCQljYXAuICBUaGlzIGZpbGUgb25seSBhcHBlYXJzIGlmIHRoZSBjYXAgaXMga25vd24KKwkJCQl0byBiZSBlbmZvcmNlZCBieSBoYXJkd2FyZS4KKwkJCQlSTworCitwb3dlclsxLSpdX2NhcAkJCUlmIHBvd2VyIHVzZSByaXNlcyBhYm92ZSB0aGlzIGxpbWl0LCB0aGUKKwkJCQlzeXN0ZW0gc2hvdWxkIHRha2UgYWN0aW9uIHRvIHJlZHVjZSBwb3dlciB1c2UuCisJCQkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvIHRoaXMgZmlsZSBpZiB0aGUKKwkJCQljYXAgaXMgY2hhbmdlZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgKl9jYXAKKwkJCQlmaWxlcyBvbmx5IGFwcGVhciBpZiB0aGUgY2FwIGlzIGtub3duIHRvIGJlCisJCQkJZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9jYXBfaHlzdAkJTWFyZ2luIG9mIGh5c3RlcmVzaXMgYnVpbHQgYXJvdW5kIGNhcHBpbmcgYW5kCisJCQkJbm90aWZpY2F0aW9uLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX21heAkJTWF4aW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fY2FwX21pbgkJTWluaW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKICoqKioqKioqKioKICogRW5lcmd5ICoKICoqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CmluZGV4IGM1YjM3YzUuLmFjNTQwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IE9ubHkgYXZhaWxhYmxlIHZpYSBOREEgZnJvbSBTZXJ2ZXJXb3JrcwogICAqIEFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAgYW5kIFNCODAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQotICAqIEFNRCBTQjkwMAorICAqIEFNRCBIdWRzb24tMgogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQogICAqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyAoU01TQykgU0xDOTBFNjYgKFZpY3Rvcnk2Nikgc291dGhicmlkZ2UKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU01TQyB3ZWJzaXRlIGh0dHA6Ly93d3cuc21zYy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCBjNzQwYjdiLi5lODk0OTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xODgsNyArMTg4LDcgQEAKIGRlbGV0ZWQuCiAKIEV4YW1wbGU6Ci0jIGVjaG8gZWVwcm9tIDB4NTAgPiAvc3lzL2NsYXNzL2kyYy1hZGFwdGVyL2kyYy0zL25ld19kZXZpY2UKKyMgZWNobyBlZXByb20gMHg1MCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0zL25ld19kZXZpY2UKIAogV2hpbGUgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGluLWtlcm5lbCBkZXZpY2UgZGVjbGFyYXRpb24KIGNhbid0IGJlIGRvbmUsIHRoZXJlIGlzIGEgdmFyaWV0eSBvZiBjYXNlcyB3aGVyZSBpdCBjYW4gYmUgaGVscGZ1bDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0CmluZGV4IDc0NDY4N2QuLjhhMzY2OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMTI4LDggKzEyOCw4IEBACiAgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKICAgdWRldiwgYSBydWxlIGxpa2UKIAotICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgotICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InVtYWQqIiwgTkFNRT0iaW5maW5pYmFuZC8layIKKyAgICBLRVJORUw9PSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCiAKICAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggZjg0NzUwMS4uYWZlM2Y4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNTgsNyArNTgsNyBAQAogICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCiAgIHVkZXYsIGEgcnVsZSBsaWtlCiAKLSAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgogCiAgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2ZmE3MjkyLi45MTA3YjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjcxLDYgKzY3MSw3IEBACiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCiAJCQllYXJseXByaW50az12Z2EKIAkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKwkJCWVhcmx5cHJpbnRrPXR0eVNuWyxiYXVkcmF0ZV0KIAkJCWVhcmx5cHJpbnRrPWRiZ3BbZGVidWdDb250cm9sbGVyI10KIAogCQkJQXBwZW5kICIsa2VlcCIgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNmQwMzQ4Ny4uYWFmY2FhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMTk5LDE4ICsxOTksMjIgQEAKIAogTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gIE5vdCBhbGwgYml0cyB0aGF0IGNhbiBiZQogbW9kaWZpZWQgZG8gYW55dGhpbmcuICBOb3QgYWxsIGhvdCBrZXlzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZAotYnkgdGhlIG1hc2suICBTb21lIG1vZGVscyBkbyBub3Qgc3VwcG9ydCB0aGUgbWFzayBhdCBhbGwsIGFuZCBpbiB0aG9zZQotbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuICBUaGUgYmVoYXZpb3VyIG9mCi10aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KK2J5IHRoZSBtYXNrLiAgU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQgYWxsLiAgVGhlIGJlaGF2aW91cgorb2YgdGhlIG1hc2sgaXMsIHRoZXJlZm9yZSwgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCisKK1RoZSBkcml2ZXIgd2lsbCBmaWx0ZXIgb3V0IGFueSB1bm1hc2tlZCBob3RrZXlzLCBzbyBldmVuIGlmIHRoZSBmaXJtd2FyZQorZG9lc24ndCBhbGxvdyBkaXNhYmxpbmcgYW4gc3BlY2lmaWMgaG90a2V5LCB0aGUgZHJpdmVyIHdpbGwgbm90IHJlcG9ydAorZXZlbnRzIGZvciB1bm1hc2tlZCBob3RrZXlzLgogCiBOb3RlIHRoYXQgdW5tYXNraW5nIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0IGJlaGF2aW9yLiAgRm9yCiBleGFtcGxlLCBpZiBGbitGNSBpcyB1bm1hc2tlZCwgdGhhdCBrZXkgd2lsbCBubyBsb25nZXIgZW5hYmxlL2Rpc2FibGUKLUJsdWV0b290aCBieSBpdHNlbGYuCitCbHVldG9vdGggYnkgaXRzZWxmIGluIGZpcm13YXJlLgogCi1Ob3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIEFDUEkuCi1Gb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iIGJ1dHRvbnMKLWRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuICBUaGV5ICpjYW4qIGJlIHVzZWQKLXRocm91Z2ggdGhlICJUaGlua1BhZCBCdXR0b25zIiB1dGlsaXR5LCBzZWUgaHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggQUNQSQorZGVwZW5kaW5nIG9uIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgZmlybXdhcmUgdmVyc2lvbi4gIE9uIHRob3NlCitUaGlua1BhZHMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHN1cHBvcnQgc29tZSBleHRyYSBob3RrZXlzIGJ5Citwb2xsaW5nIHRoZSAiQ01PUyBOVlJBTSIgYXQgbGVhc3QgMTAgdGltZXMgcGVyIHNlY29uZC4gIFRoZSBkcml2ZXIKK2F0dGVtcHRzIHRvIGVuYWJsZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF1dG9tYXRpY2FsbHkgd2hlbiByZXF1aXJlZC4KIAogcHJvY2ZzIG5vdGVzOgogCkBAIC0yNTUsMTggKzI1OSwxMSBAQAogCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgotCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCisJCWJpdCBtYXNrIHRvIGVuYWJsZSByZXBvcnRpbmcgKGFuZCBkZXBlbmRpbmcgb24KIAkJdGhlIGZpcm13YXJlLCBBQ1BJIGV2ZW50IGdlbmVyYXRpb24pIGZvciBlYWNoIGhvdCBrZXkKIAkJKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKIAkJbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgogCi0JCU5vdGU6IHdoZW4gTlZSQU0gcG9sbGluZyBpcyBhY3RpdmUsIHRoZSBmaXJtd2FyZSBtYXNrCi0JCXdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JCWhvdGtleV9tYXNrLiAgVGhlIGRyaXZlciB3aWxsIHJldGFpbiBlbmFibGVkIGJpdHMgZm9yCi0JCWhvdGtleXMgdGhhdCBhcmUgdW5kZXIgTlZSQU0gcG9sbGluZyBldmVuIGlmIHRoZQotCQlmaXJtd2FyZSByZWZ1c2VzIHRoZW0sIGFuZCB3aWxsIG5vdCBzZXQgdGhlc2UgYml0cyBvbgotCQl0aGUgZmlybXdhcmUgaG90IGtleSBtYXNrLgotCiAJaG90a2V5X2FsbF9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCB3aGVuIGVjaG9lZCB0byBob3RrZXlfbWFzayBhYm92ZS4KQEAgLTI3OSw3ICsyNzYsOCBAQAogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGFsd2F5cwogCQloYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBhbnl3YXkuICBFY2hvIGl0IHRvCi0JCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuCisJCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1hc2sKKwkJdXNlZCBieSB0aGUgZHJpdmVyLgogCiAJaG90a2V5X3NvdXJjZV9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNlbGVjdHMgd2hpY2ggaG90IGtleXMgd2lsbCB0aGUgZHJpdmVyCkBAIC0yODcsOSArMjg1LDEwIEBACiAJCWJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIEFDUEkgZmlybXdhcmUsCiAJCWJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lLgogCi0JCUhvdCBrZXlzIHdob3NlIGJpdHMgYXJlIHNldCBpbiBib3RoIGhvdGtleV9zb3VyY2VfbWFzawotCQlhbmQgYWxzbyBvbiBob3RrZXlfbWFzayBhcmUgcG9sbGVkIGZvciBpbiBOVlJBTS4gIE9ubHkgYQotCQlmZXcgaG90IGtleXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KKwkJSG90IGtleXMgd2hvc2UgYml0cyBhcmUgc2V0IGluIGhvdGtleV9zb3VyY2VfbWFzayBhcmUKKwkJcG9sbGVkIGZvciBpbiBOVlJBTSwgYW5kIHJlcG9ydGVkIGFzIGhvdGtleSBldmVudHMgaWYKKwkJZW5hYmxlZCBpbiBob3RrZXlfbWFzay4gIE9ubHkgYSBmZXcgaG90IGtleXMgYXJlCisJCWF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KIAogCQlXYXJuaW5nOiB3aGVuIGluIE5WUkFNIG1vZGUsIHRoZSB2b2x1bWUgdXAvZG93bi9tdXRlCiAJCWtleXMgYXJlIHN5bnRoZXNpemVkIGFjY29yZGluZyB0byBjaGFuZ2VzIGluIHRoZSBtaXhlciwKQEAgLTUyNSw2ICs1MjQsNyBAQAogMHgyMzA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gc3VzcGVuZCB0byBlamVjdCBiYXkKIDB4MjQwNAkJU3lzdGVtIGlzIHdha2luZyB1cCBmcm9tIGhpYmVybmF0aW9uIHRvIHVuZG9jawogMHgyNDA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gaGliZXJuYXRpb24gdG8gZWplY3QgYmF5CisweDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZC9jb250cm9sIGV2ZW50CiAKIFRoZSBhYm92ZSBldmVudHMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlci4KIApAQCAtNTMyLDcgKzUzMiw2IEBACiAweDQwMDMJCVVuZG9ja2VkIChzZWUgMHgyeDA0KSwgY2FuIHNsZWVwIGFnYWluCiAweDUwMEIJCVRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBpdHMgc3RvcmFnZSBiYXkKIDB4NTAwQwkJVGFibGV0IHBlbiByZW1vdmVkIGZyb20gaXRzIHN0b3JhZ2UgYmF5Ci0weDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZCAobmV3ZXIgTGVub3ZvIEJJT1NlcykKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBieSB0aGUgZHJpdmVyLgogCkBAIC02MjEsNiArNjIwLDggQEAKIDIuIERvICpOT1QqIGxvYWQgdXAgQUNQSSB2aWRlbywgZW5hYmxlIHRoZSBob3RrZXlzIGluIHRoaW5rcGFkLWFjcGksCiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCisgICBUaGUgZHJpdmVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGlmIGl0IGRldGVjdHMgdGhhdCBBQ1BJIHZpZGVvCisgICBoYXMgYmVlbiBkaXNhYmxlZC4KIAogCiBCbHVldG9vdGgKQEAgLTE0NTksMyArMTQ2MCw4IEBACiAweDAyMDQwMDoJTWFya2VyIGZvciAxNiBMRURzIHN1cHBvcnQuICBBbHNvLCBMRURzIHRoYXQgYXJlIGtub3duCiAJCXRvIG5vdCBleGlzdCBpbiBhIGdpdmVuIG1vZGVsIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCiAJCXRoZSBMRUQgc3lzZnMgY2xhc3MgYW55bW9yZS4KKworMHgwMjA1MDA6CVVwZGF0ZWQgaG90a2V5IGRyaXZlciwgaG90a2V5X21hc2sgaXMgYWx3YXlzIGF2YWlsYWJsZQorCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCisJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzaworCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9lZXByb20gYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL2VlcHJvbQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvZWVwcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1IGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tYXg2ODc1CmluZGV4IDEwY2E0M2MuLjFlODllZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL21heDY4NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIFZhbGlkIGFkZHJlc3NlcyBmb3IgdGhlIE1BWDY4NzUgYXJlIDB4NTAgYW5kIDB4NTIuCiBWYWxpZCBhZGRyZXNzZXMgZm9yIHRoZSBNQVg2ODc0IGFyZSAweDUwLCAweDUyLCAweDU0IGFuZCAweDU2LgotVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBhbnkgYWRkcmVzcywgc28geW91IG11c3QgZm9yY2UgdGhlIGFkZHJlc3MuCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGFueSBhZGRyZXNzLCBzbyB5b3UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMuCiAKIEV4YW1wbGU6Ci0kIG1vZHByb2JlIG1heDY4NzUgZm9yY2U9MCwweDUwCiskIG1vZHByb2JlIG1heDY4NzUKKyQgZWNobyBtYXg2ODc1IDB4NTAgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlCiAKIFRoZSBNQVg2ODc0L01BWDY4NzUgaWdub3JlcyBhZGRyZXNzIGJpdCAwLCBzbyB0aGlzIGRyaXZlciBhdHRhY2hlcyB0byBtdWx0aXBsZQogYWRkcmVzc2VzLiAgRm9yIGV4YW1wbGUsIGZvciBhZGRyZXNzIDB4NTAsIGl0IGFsc28gcmVzZXJ2ZXMgMHg1MS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9ocHRpb3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKaW5kZXggYTZlYjRhZC4uOTYwNTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKQEAgLTMsNiArMywyNSBAQAogQ29udHJvbGxlciBSZWdpc3RlciBNYXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIFJSNDR4eCBJbnRlbCBJT1AgYmFzZWQgYWRhcHRlcnMsIHRoZSBjb250cm9sbGVyIElPUCBpcyBhY2Nlc3NlZCB2aWEgUENJIEJBUjAgYW5kIEJBUjI6CisKKyAgICAgQkFSMCBvZmZzZXQgICAgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MTFDNUMgTGluayBJbnRlcmZhY2UgSVJRIFNldAorICAgICAgICAgICAgMHgxMUM2MCBMaW5rIEludGVyZmFjZSBJUlEgQ2xlYXIKKworICAgICBCQVIyIG9mZnNldCAgICBSZWdpc3RlcgorICAgICAgICAgICAgMHgxMCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMAorICAgICAgICAgICAgMHgxNCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMQorICAgICAgICAgICAgMHgxOCAgICBPdXRib3VuZCBNZXNzYWdlIFJlZ2lzdGVyIDAKKyAgICAgICAgICAgIDB4MUMgICAgT3V0Ym91bmQgTWVzc2FnZSBSZWdpc3RlciAxCisgICAgICAgICAgICAweDIwICAgIEluYm91bmQgRG9vcmJlbGwgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MjQgICAgSW5ib3VuZCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAweDI4ICAgIEluYm91bmQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MzAgICAgT3V0Ym91bmQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgMHgzNCAgICBPdXRib3VuZCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgorICAgICAgICAgICAgMHg0MCAgICBJbmJvdW5kIFF1ZXVlIFBvcnQKKyAgICAgICAgICAgIDB4NDQgICAgT3V0Ym91bmQgUXVldWUgUG9ydAorCiBGb3IgSW50ZWwgSU9QIGJhc2VkIGFkYXB0ZXJzLCB0aGUgY29udHJvbGxlciBJT1AgaXMgYWNjZXNzZWQgdmlhIFBDSSBCQVIwOgogCiAgICAgIEJBUjAgb2Zmc2V0ICAgIFJlZ2lzdGVyCkBAIC05Myw3ICsxMTIsNyBAQAogCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGYxNzA4YjcuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yMDksNiArMjA5LDcgQEAKICAgbGFwdG9wCWxhcHRvcCB3aXRoIEhQIGphY2sgc2Vuc2luZwogICBtb2JpbGUJbW9iaWxlIGRldmljZXMgd2l0aCBIUCBqYWNrIHNlbnNpbmcKICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFgzMDAKKyAgdG91Y2hzbWFydAlIUCBUb3VjaHNtYXJ0CiAKIEFEMTg4NAogPT09PT09CkBAIC0zNTgsNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAppbmRleCA3MGQ2OGNlLi5hODdkYzI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dApAQCAtMSw1ICsxLDUgQEAKIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgSG93IFRvCi09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXcml0dGVuIGJ5IFN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPiwgWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogCkBAIC0xMCwyMCArMTAsMjAgQEAKIAogMC4gSW50cm9kdWN0aW9uCiAKLVRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lIGRldmljZXMgKHNlbnNvcnMpCi1hbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3RlciB3aXRoIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQKLXNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCitUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIHRoZXJtYWwgem9uZQorZGV2aWNlcyAoc2Vuc29ycykgYW5kIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIChmYW4sIHByb2Nlc3Nvci4uLikgdG8gcmVnaXN0ZXIKK3dpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudCBzb2x1dGlvbiBhbmQgdG8gYmUgYSBwYXJ0IG9mIGl0LgogCi1UaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0byBwYXJ0aWNpcGF0ZQotaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgotVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMgYW5kCi1jb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgorVGhpcyBob3ctdG8gZm9jdXNlcyBvbiBlbmFibGluZyBuZXcgdGhlcm1hbCB6b25lIGFuZCBjb29saW5nIGRldmljZXMgdG8KK3BhcnRpY2lwYXRlIGluIHRoZXJtYWwgbWFuYWdlbWVudC4KK1RoaXMgc29sdXRpb24gaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgYW5kIGFueSB0eXBlIG9mIHRoZXJtYWwgem9uZSBkZXZpY2VzCithbmQgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4KIAotVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzIGFzIHdlbGwKLWFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCi1BbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIGlucHV0cwotZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQgdGVtcGVyYXR1cmUpCi1hbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KK1RoZSBtYWluIHRhc2sgb2YgdGhlIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGlzIHRvIGV4cG9zZSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcworYXMgd2VsbCBhcyBjb29saW5nIGRldmljZSBhdHRyaWJ1dGVzIHRvIHRoZSB1c2VyIHNwYWNlLgorQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIGNhbiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgoraW5wdXRzIGZyb20gdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgKHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGFuZCB0cmlwIHBvaW50Cit0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlIGRldmljZXMuCiAKIFswLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKIFsxLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKQEAgLTMxLDc3ICszMSw3NyBAQAogMS4gdGhlcm1hbCBzeXNmcyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucwogCiAxLjEgdGhlcm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCB0cmlwcywKLQkJCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKKzEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCisJCWludCB0cmlwcywgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHMpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlIChzZW5zb3IpIHRvCisgICAgL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhcyB0aGVybWFsX3pvbmVbMC0qXS4gSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlCisgICAgdGhlcm1hbCBjb29saW5nIGRldmljZXMgcmVnaXN0ZXJlZCBhdCB0aGUgc2FtZSB0aW1lLgogCi0JbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgotCXRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgotCWRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKLQlvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KLQkJLmJpbmQ6IGJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJLmdldF9tb2RlOiBnZXQgdGhlIGN1cnJlbnQgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkgICAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCi0JCQkgICAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKLQkJCSAgIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIHRha2UgY2hhcmdlIG9mIHRoZXJtYWwgbWFuYWdlbWVudC4KLQkJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KLQkJLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCQkJCXdpbGwgYmUgZmlyZWQuCisgICAgbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgorICAgIHRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKKyAgICBvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KKwkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkudW5iaW5kOiB1bmJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkgICAgLSAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCisJICAgIC0gInVzZXIiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1hbCBkcml2ZXIgYWN0aW9ucyB1cG9uIHRyaXAgcG9pbnRzCisJICAgICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgorCS5zZXRfbW9kZTogc2V0IHRoZSBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KKwkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50CisJCQl3aWxsIGJlIGZpcmVkLgogCiAxLjEuMiB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCUl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZCB1bmJpbmQgYWxsCi0JdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZS4KKyAgICBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQKKyAgICB1bmJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgogCiAxLjIgdGhlcm1hbCBjb29saW5nIGRldmljZSBpbnRlcmZhY2UKIDEuMi4xIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCi0JCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQorCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCBjb29saW5nIGRldmljZSAoZmFuL3Byb2Nlc3Nvci8uLi4pIHRvCi0JL3N5cy9jbGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4KLQlJdCB0cmllcyB0byBiaW5kIGl0c2VsZiB0byBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHJlZ2lzdGVyIGF0IHRoZSBzYW1lIHRpbWUuCi0JbmFtZTogdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YS4KLQlvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCi0JCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KLQkJLnNldF9jdXJfc3RhdGU6IHNldCB0aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikKKyAgICB0byAvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGl0c2VsZgorICAgIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KKyAgICBkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgorICAgIG9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KKwkuZ2V0X21heF9zdGF0ZTogZ2V0IHRoZSBNYXhpbXVtIHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KIAogMS4yLjIgdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZAotCWl0c2VsZiBmcm9tIGFsbAl0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBpdHNlbGYgZnJvbSBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHVzaW5nIGl0LgogCiAxLjMgaW50ZXJmYWNlIGZvciBiaW5kaW5nIGEgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQogMS4zLjEgaW50IHRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKLQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCSBpbiB0aGlzIHRoZXJtYWwgem9uZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwCisgICAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCisgICAgdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCisgICAgY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQorICAgIHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCisJICBpbiB0aGlzIHRoZXJtYWwgem9uZS4KIAogMS4zLjIgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bmJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGZyb20gdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCW9mIGEgdGhlcm1hbCB6b25lIGRldmljZS4KLQlUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCWluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbgorICAgIHRyaXAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluCisgICAgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAyLiBzeXNmcyBhdHRyaWJ1dGVzIHN0cnVjdHVyZQogCkBAIC0xMTQsMTUzICsxMTQsMTY2IEBACiAKIFRoZXJtYWwgem9uZSBkZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKIC9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKLQl8LS0tLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQotCXwtLS0tLW1vZGU6CQkJV29ya2luZyBtb2RlIG9mIHRoZSB0aGVybWFsIHpvbmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10ZW1wOgkJCUN1cnJlbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tdHJpcF9wb2ludF9bMC0qXV90eXBlOglUcmlwIHBvaW50IHR5cGUKIAogVGhlcm1hbCBjb29saW5nIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlWzAtKl06Ci0JfC0tLS0tdHlwZSA6CQkJVHlwZSBvZiB0aGUgY29vbGluZyBkZXZpY2UocHJvY2Vzc29yL2Zhbi8uLi4pCi0JfC0tLS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQotCXwtLS0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKKyAgICB8LS0tdHlwZToJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKKyAgICB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS1jdXJfc3RhdGU6CQlDdXJyZW50IGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCiAKIAotVGhlc2UgdHdvIGR5bmFtaWMgYXR0cmlidXRlcyBhcmUgY3JlYXRlZC9yZW1vdmVkIGluIHBhaXJzLgotVGhleSByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgdGhlcm1hbCB6b25lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb29saW5nIGRldmljZS4KLVRoZXkgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBmb3IgZWFjaAotdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZSBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KK1RoZW4gbmV4dCB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuIFRoZXkgcmVwcmVzZW50Cit0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgorVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCit0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlLgogCi0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl0KLQl8LS0tLS1jZGV2WzAtKl06CQlUaGUgWzAtKl10aCBjb29saW5nIGRldmljZSBpbiB0aGUgY3VycmVudCB0aGVybWFsIHpvbmUKLQl8LS0tLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKKy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKKyAgICB8LS0tY2RldlswLSpdOgkJWzAtKl10aCBjb29saW5nIGRldmljZSBpbiBjdXJyZW50IHRoZXJtYWwgem9uZQorICAgIHwtLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKIAogQmVzaWRlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZSBzeXNmcyBJL0YgYW5kIGNvb2xpbmcgZGV2aWNlIHN5c2ZzIEkvRiwKLXRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8gb2YKLXRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbiBjbGFzcyBkZXZpY2UKLWFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBBQ1BJIHRoZXJtYWwgem9uZXMuCit0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciBhbHNvIGNyZWF0ZXMgYSBod21vbiBzeXNmcyBJL0YgZm9yIGVhY2ggX3R5cGVfCitvZiB0aGVybWFsIHpvbmUgZGV2aWNlLiBFLmcuIHRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIHJlZ2lzdGVycyBvbmUgaHdtb24KK2NsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29jaWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQKK0FDUEkgdGhlcm1hbCB6b25lcy4KKwogL3N5cy9jbGFzcy9od21vbi9od21vblswLSpdOgotCXwtLS0tLW5hbWU6CQkJVGhlIHR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzLgotCXwtLS0tLXRlbXBbMS0qXV9pbnB1dDoJCVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KLQl8LS0tLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KKyAgICB8LS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMKKyAgICB8LS0tdGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKyAgICB8LS0tdGVtcFsxLSpdX2NyaXRpY2FsOglUaGUgY3JpdGljYWwgdHJpcCBwb2ludCBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKwogUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUaGVybWFsIHpvbmUgYXR0cmlidXRlcyAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotdHlwZQkJCQlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCi0JCQkJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgotCQkJCUVnOiAiYWNwaXR6IiBpbmRpY2F0ZXMgaXQncyBhbiBBQ1BJIHRoZXJtYWwgZGV2aWNlLgotCQkJCUluIG9yZGVyIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIGh3bW9uIHN5cyBhdHRyaWJ1dGUsCi0JCQkJdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbG93ZXJjYXNlIHN0cmluZywKLQkJCQlub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRoZXJtYWwgem9uZSB0eXBlLgorCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKwlFLmc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCisJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZTsgdGhpcyBzaG91bGQKKwliZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLCBub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KKwlSTywgUmVxdWlyZWQKIAotdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0ZW1wCisJQ3VycmVudCB0ZW1wZXJhdHVyZSBhcyByZXBvcnRlZCBieSB0aGVybWFsIHpvbmUgKHNlbnNvcikuCisJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCVJPLCBSZXF1aXJlZAogCi1tb2RlCQkJCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0KLQkJCQlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobQotCQkJCXRoYXQgaXMgY3VycmVudGx5IG1hbmFnaW5nIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkJSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZCBhbGdvcml0aG0KLQkJCQlvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgotCQkJCVJXCi0JCQkJT3B0aW9uYWwKLQkJCQlrZXJuZWwJPSBUaGVybWFsIG1hbmFnZW1lbnQgaW4ga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIuCi0JCQkJdXNlcgk9IFByZXZlbnRpbmcga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIgYWN0aW9ucyB1cG9uCi0JCQkJCSAgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uIGNhbiB0YWtlIGZ1bGwKLQkJCQkJICBjaGFyZ2Ugb2YgdGhlIHRoZXJtYWwgbWFuYWdlbWVudC4KK21vZGUKKwlPbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGluIFtrZXJuZWwsIHVzZXJdLgorCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5CisJbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4gSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZAorCWFsZ29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgorCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KKwl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KKwkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAorCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorCVJXLCBPcHRpb25hbAogCi10cmlwX3BvaW50X1swLSpdX3RlbXAJCVRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0cmlwIHBvaW50IHdpbGwgYmUgZmlyZWQKLQkJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90ZW1wCisJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdHlwZSAJCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQKLQkJCQlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwKLQkJCQkgICAgYWN0aXZlWzAtKl0gZm9yIEFDUEkgdGhlcm1hbCB6b25lLgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK3RyaXBfcG9pbnRfWzAtKl1fdHlwZQorCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCisJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLSpdIGZvciBBQ1BJCisJdGhlcm1hbCB6b25lLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl0JCQlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKLQkJCQlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdCisJU3lzZnMgbGluayB0byB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZSBub2RlIHdoZXJlIHRoZSBzeXMgSS9GCisJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxpbmcgY29udHJvbCByZXByZXNlbnRzLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl1fdHJpcF9wb2ludAkJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwgem9uZQotCQkJCS0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwIHBvaW50LgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK2NkZXZbMC0qXV90cmlwX3BvaW50CisJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwKKwl6b25lOyAtMSBtZWFucyB0aGUgY29vbGluZyBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJpcAorCXBvaW50LgorCVJPLCBPcHRpb25hbAogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29vbGluZyBkZXZpY2UgIGF0dHJpYnV0ZXMgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXNzaXZlCisJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9uZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUgY29vbGluZworCXBvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSB0aGVybWFsIGRyaXZlci4gRGVmYXVsdCBpcyB6ZXJvCisJYW5kIGNhbiBiZSBzZXQgdG8gYSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzKSB0byBlbmFibGUgYQorCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKKwlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KKwlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVJXLCBPcHRpb25hbAogCi10eXBlCQkJCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZQotCQkJCWVnOiBGb3IgZ2VuZXJpYyBBQ1BJOiB0aGlzIHNob3VsZCBiZSAiRmFuIiwKLQkJCQkiUHJvY2Vzc29yIiBvciAiTENEIgotCQkJCWVnLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKLQkJCQl0aGlzIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1tYXhfc3RhdGUJCQlUaGUgbWF4aW11bSBwZXJtaXNzaWJsZSBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAordHlwZQorCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgorCS0gZm9yIGdlbmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvciAiTENEIgorCS0gZm9yIG1lbW9yeSBjb250cm9sbGVyIGRldmljZSBvbiBpbnRlbF9tZW5sb3cgcGxhdGZvcm06CisJICBzaG91bGQgYmUgIk1lbW9yeSBjb250cm9sbGVyIi4KKwlSTywgUmVxdWlyZWQKIAotY3VyX3N0YXRlCQkJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgotCQkJCXRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZSwKLQkJCQljdXJfc3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCi0JCQkJY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgotCQkJCVJXCi0JCQkJUmVxdWlyZWQKK21heF9zdGF0ZQorCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KKwlSTywgUmVxdWlyZWQKKworY3VyX3N0YXRlCisJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZToKKwktIGN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKKwktIGN1cl9zdGF0ZSA9PSBtYXhfc3RhdGUgbWVhbnMgdGhlIG1heGltdW0gY29vbGluZy4KKwlSVywgUmVxdWlyZWQKIAogMy4gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24KIAotQUNQSSB0aGVybWFsIHpvbmUgbWF5IHN1cHBvcnQgbXVsdGlwbGUgdHJpcCBwb2ludHMgbGlrZSBjcml0aWNhbC9ob3QvcGFzc2l2ZS9hY3RpdmUuCi1JZiBhbiBBQ1BJIHRoZXJtYWwgem9uZSBzdXBwb3J0cyBjcml0aWNhbCwgcGFzc2l2ZSwgYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwKLWl0IG1heSByZWdpc3RlciBpdHNlbGYgYXMgYSB0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgotSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMgdGhlcm1hbF9jb29saW5nX2RldmljZS4KLUlmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMCBtZXRob2QsCi10aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CitBQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsLCBob3QsCitwYXNzaXZlLCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLAorYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwgaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhCit0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgorSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMKK3RoZXJtYWxfY29vbGluZ19kZXZpY2UuCisKK0lmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMAorbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CiAKIC9zeXMvY2xhc3MvdGhlcm1hbDoKIAogfHRoZXJtYWxfem9uZTE6Ci0JfC0tLS0tdHlwZToJCQlhY3BpdHoKLQl8LS0tLS10ZW1wOgkJCTM3MDAwCi0JfC0tLS0tbW9kZToJCQlrZXJuZWwKLQl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAotCXwtLS0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfM190eXBlOglhY3RpdmUxCi0JfC0tLS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKLQl8LS0tLS1jZGV2MF90cmlwX3BvaW50OgkJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLwotCXwtLS0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCi0JfC0tLS0tY2RldjFfdHJpcF9wb2ludDoJCTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCisgICAgfC0tLXR5cGU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXA6CQkJMzcwMDAKKyAgICB8LS0tbW9kZToJCQlrZXJuZWwKKyAgICB8LS0tdHJpcF9wb2ludF8wX3RlbXA6CTEwMDAwMAorICAgIHwtLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKKyAgICB8LS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMV90eXBlOglwYXNzaXZlCisgICAgfC0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAorICAgIHwtLS10cmlwX3BvaW50XzNfdGVtcDoJNjAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKKyAgICB8LS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKKyAgICB8LS0tY2RldjBfdHJpcF9wb2ludDoJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLworICAgIHwtLS1jZGV2MToJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMworICAgIHwtLS1jZGV2MV90cmlwX3BvaW50OgkyCS8qIGNkZXYxIGNhbiBiZSB1c2VkIGZvciBhY3RpdmVbMF0qLwogCiB8Y29vbGluZ19kZXZpY2UwOgotCXwtLS0tLXR5cGU6CQkJUHJvY2Vzc29yCi0JfC0tLS0tbWF4X3N0YXRlOgkJOAotCXwtLS0tLWN1cl9zdGF0ZToJCTAKKyAgICB8LS0tdHlwZToJCQlQcm9jZXNzb3IKKyAgICB8LS0tbWF4X3N0YXRlOgkJOAorICAgIHwtLS1jdXJfc3RhdGU6CQkwCiAKIHxjb29saW5nX2RldmljZTM6Ci0JfC0tLS0tdHlwZToJCQlGYW4KLQl8LS0tLS1tYXhfc3RhdGU6CQkyCi0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCUZhbgorICAgIHwtLS1tYXhfc3RhdGU6CQkyCisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogL3N5cy9jbGFzcy9od21vbjoKIAogfGh3bW9uMDoKLQl8LS0tLS1uYW1lOgkJCWFjcGl0egotCXwtLS0tLXRlbXAxX2lucHV0OgkJMzcwMDAKLQl8LS0tLS10ZW1wMV9jcml0OgkJMTAwMDAwCisgICAgfC0tLW5hbWU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXAxX2lucHV0OgkJMzcwMDAKKyAgICB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CmluZGV4IDcyYTIyZjYuLjI2MmQ4ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKQEAgLTUyLDE1ICs1MiwxNSBAQAogcmVhZGFibGUgYnkgYWxsIGJ1dCB3cml0YWJsZSBvbmx5IGJ5IHJvb3Q6CiAKIG1heF9rZXJuZWxfcGFnZXMgLSBzZXQgdG8gbWF4aW11bSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgS1NNIG1heSB1c2UKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vbWF4X2tlcm5lbF9wYWdlcyIKKyAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDEwMDAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgogICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOwogICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCiAgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KLSAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogcXVhcnRlciBvZiBtZW1vcnkgKGNob3NlbiB0byBub3QgcGluIHRvbyBtdWNoKQogCiBwYWdlc190b19zY2FuICAgIC0gaG93IG1hbnkgcHJlc2VudCBwYWdlcyB0byBzY2FuIGJlZm9yZSBrc21kIGdvZXMgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMCA+IC9zeXMva2VybmVsL21tL2tzbS9wYWdlc190b19zY2FuIgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwMCAoY2hvc2VuIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzKQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCiAKIHNsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgogICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgpAQCAtNzAsNyArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgIHNldCAxIHRvIHJ1biBrc21kIGUuZy4gImVjaG8gMSA+IC9zeXMva2VybmVsL21tL2tzbS9ydW4iLAogICAgICAgICAgICAgICAgICAgIHNldCAyIHRvIHN0b3Aga3NtZCBhbmQgdW5tZXJnZSBhbGwgcGFnZXMgY3VycmVudGx5IG1lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgbWVyZ2VhYmxlIGFyZWFzIHJlZ2lzdGVyZWQgZm9yIG5leHQgcnVuCi0gICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMSAoZm9yIGltbWVkaWF0ZSB1c2UgYnkgYXBwcyB3aGljaCByZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwIChtdXN0IGJlIGNoYW5nZWQgdG8gMSB0byBhY3RpdmF0ZSBLU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIENPTkZJR19TWVNGUyBpcyBkaXNhYmxlZCkKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCkBAIC04Niw0ICs4Nyw0IEBACiBwcm9wb3J0aW9uIHRoZXJlIHdvdWxkIGFsc28gaW5kaWNhdGUgcG9vciB1c2Ugb2YgbWFkdmlzZSBNQURWX01FUkdFQUJMRS4KIAogSXppayBFaWR1cywKLUh1Z2ggRGlja2lucywgMzAgSnVseSAyMDA5CitIdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBmYTFhMzBkLi40NzkzYzZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMiw3ICsyLDEwIEBACiAgKiBwYWdlLXR5cGVzOiBUb29sIGZvciBxdWVyeWluZyBwYWdlIGZsYWdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIGNvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgRmVuZ2d1YW5nIDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgorICoKKyAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTY5LDcgKzcyLDkgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAorI2RlZmluZSBLUEZfS1NNCQkJMjEKIAogLyogWzMyLV0ga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMgKi8KICNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgpAQCAtMTE2LDcgKzEyMSw5IEBACiAJW0tQRl9DT01QT1VORF9UQUlMXQk9ICJUOmNvbXBvdW5kX3RhaWwiLAogCVtLUEZfSFVHRV0JCT0gIkc6aHVnZSIsCiAJW0tQRl9VTkVWSUNUQUJMRV0JPSAidTp1bmV2aWN0YWJsZSIsCisJW0tQRl9IV1BPSVNPTl0JCT0gIlg6aHdwb2lzb24iLAogCVtLUEZfTk9QQUdFXQkJPSAibjpub3BhZ2UiLAorCVtLUEZfS1NNXQkJPSAieDprc20iLAogCiAJW0tQRl9SRVNFUlZFRF0JCT0gInI6cmVzZXJ2ZWQiLAogCVtLUEZfTUxPQ0tFRF0JCT0gIm06bWxvY2tlZCIsCkBAIC0xNTIsOSArMTU5LDYgQEAKIHN0YXRpYyBpbnQJCW5yX3ZtYXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19zdGFydFtNQVhfVk1BU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19lbmRbTUFYX1ZNQVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdm9mZnNldDsKLQotc3RhdGljIGludAkJcGFnZW1hcF9mZDsKIAogI2RlZmluZSBNQVhfQklUX0ZJTFRFUlMJNjQKIHN0YXRpYyBpbnQJCW5yX2JpdF9maWx0ZXJzOwpAQCAtMTYzLDkgKzE2NywxNiBAQAogCiBzdGF0aWMgaW50CQlwYWdlX3NpemU7CiAKLSNkZWZpbmUgUEFHRVNfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyBpbnQJCXBhZ2VtYXBfZmQ7CiBzdGF0aWMgaW50CQlrcGFnZWZsYWdzX2ZkOwogCitzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CitzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CisKK3N0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKKwogI2RlZmluZSBIQVNIX1NISUZUCTEzCiAjZGVmaW5lIEhBU0hfU0laRQkoMSA8PCBIQVNIX1NISUZUKQogI2RlZmluZSBIQVNIX01BU0sJKEhBU0hfU0laRSAtIDEpCkBAIC0yMDcsNiArMjE4LDc0IEBACiAJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCitzdGF0aWMgaW50IGNoZWNrZWRfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworCWludCBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKHBhdGhuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXJldHVybiBmZDsKK30KKworLyoKKyAqIHBhZ2VtYXAva3BhZ2VmbGFncyByb3V0aW5lcworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3U2NF9yZWFkKGludCBmZCwgY2hhciAqbmFtZSwKKwkJCQkgdWludDY0X3QgKmJ1ZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlsb25nIGJ5dGVzOworCisJaWYgKGluZGV4ID4gVUxPTkdfTUFYIC8gOCkKKwkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKKworCWlmIChsc2VlayhmZCwgaW5kZXggKiA4LCBTRUVLX1NFVCkgPCAwKSB7CisJCXBlcnJvcihuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWJ5dGVzID0gcmVhZChmZCwgYnVmLCBjb3VudCAqIDgpOworCWlmIChieXRlcyA8IDApIHsKKwkJcGVycm9yKG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChieXRlcyAlIDgpCisJCWZhdGFsKCJwYXJ0aWFsIHJlYWQ6ICVsdSBieXRlc1xuIiwgYnl0ZXMpOworCisJcmV0dXJuIGJ5dGVzIC8gODsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcga3BhZ2VmbGFnc19yZWFkKHVpbnQ2NF90ICpidWYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlyZXR1cm4gZG9fdTY0X3JlYWQoa3BhZ2VmbGFnc19mZCwgUFJPQ19LUEFHRUZMQUdTLCBidWYsIGluZGV4LCBwYWdlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcmVhZCh1aW50NjRfdCAqYnVmLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIGRvX3U2NF9yZWFkKHBhZ2VtYXBfZmQsICIvcHJvYy9waWQvcGFnZW1hcCIsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wZm4odWludDY0X3QgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWYgKHZhbCAmIFBNX1BSRVNFTlQpCisJCXBmbiA9IFBNX1BGUkFNRSh2YWwpOworCWVsc2UKKwkJcGZuID0gMDsKKworCXJldHVybiBwZm47Cit9CisKIAogLyoKICAqIHBhZ2UgZmxhZyBuYW1lcwpAQCAtMjU1LDcgKzMzNCw4IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIHVpbnQ2NF90ICAgICAgZmxhZ3MwOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHZvZmY7CkBAIC0yODEsNyArMzYxLDggQEAKIAljb3VudCAgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCWlmIChvcHRfcGlkKQogCQlwcmludGYoIiVseFx0Iiwgdm9mZnNldCk7CkBAIC0zNjIsNiArNDQzLDYyIEBACiAJcmV0dXJuIGZsYWdzOwogfQogCitzdGF0aWMgdWludDY0X3Qga3BhZ2VmbGFnc19mbGFncyh1aW50NjRfdCBmbGFncykKK3sKKwlmbGFncyA9IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKGZsYWdzKTsKKworCWlmICghb3B0X3JhdykKKwkJZmxhZ3MgPSB3ZWxsX2tub3duX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHBhZ2UgYWN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaHdwb2lzb25fZmQodm9pZCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKG9wdF9od3BvaXNvbiAmJiAhaHdwb2lzb25faW5qZWN0X2ZkKSB7CisJCXNwcmludGYoYnVmLCAiJXMvY29ycnVwdC1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2luamVjdF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9CisKKwlpZiAob3B0X3VucG9pc29uICYmICFod3BvaXNvbl9mb3JnZXRfZmQpIHsKKwkJc3ByaW50ZihidWYsICIlcy9yZW5ldy1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2ZvcmdldF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHdwb2lzb25fcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBvZmZzZXQpOworCWxlbiA9IHdyaXRlKGh3cG9pc29uX2luamVjdF9mZCwgYnVmLCBsZW4pOworCWlmIChsZW4gPCAwKSB7CisJCXBlcnJvcigiaHdwb2lzb24gaW5qZWN0Iik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVucG9pc29uX3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsICIweCVseFxuIiwgb2Zmc2V0KTsKKwlsZW4gPSB3cml0ZShod3BvaXNvbl9mb3JnZXRfZmQsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgMCkgeworCQlwZXJyb3IoImh3cG9pc29uIGZvcmdldCIpOworCQlyZXR1cm4gbGVuOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIHBhZ2UgZnJhbWUgd2Fsa2VyCkBAIC0zOTQsMTA0ICs1MzEsODMgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKK3N0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7Ci0JZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7Ci0KLQlpZiAoIW9wdF9yYXcpCi0JCWZsYWdzID0gd2VsbF9rbm93bl9mbGFncyhmbGFncyk7CisJZmxhZ3MgPSBrcGFnZWZsYWdzX2ZsYWdzKGZsYWdzKTsKIAogCWlmICghYml0X21hc2tfb2soZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAob3B0X2h3cG9pc29uKQorCQlod3BvaXNvbl9wYWdlKG9mZnNldCk7CisJaWYgKG9wdF91bnBvaXNvbikKKwkJdW5wb2lzb25fcGFnZShvZmZzZXQpOworCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlX3JhbmdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCWVsc2UgaWYgKG9wdF9saXN0ID09IDIpCi0JCXNob3dfcGFnZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCiAJbnJfcGFnZXNbaGFzaF9zbG90KGZsYWdzKV0rKzsKIAl0b3RhbF9wYWdlcysrOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGNvdW50KQorI2RlZmluZSBLUEFHRUZMQUdTX0JBVENICSg2NCA8PCAxMCkJLyogNjRrIHBhZ2VzICovCitzdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIHZvZmZzZXQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQogeworCXVpbnQ2NF90IGJ1ZltLUEFHRUZMQUdTX0JBVENIXTsKIAl1bnNpZ25lZCBsb25nIGJhdGNoOwotCXVuc2lnbmVkIGxvbmcgbjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChpbmRleCA+IFVMT05HX01BWCAvIEtQRl9CWVRFUykKLQkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKLQotCWxzZWVrKGtwYWdlZmxhZ3NfZmQsIGluZGV4ICogS1BGX0JZVEVTLCBTRUVLX1NFVCk7Ci0KIAl3aGlsZSAoY291bnQpIHsKLQkJdWludDY0X3Qga3BhZ2VmbGFnc19idWZbS1BGX0JZVEVTICogUEFHRVNfQkFUQ0hdOwotCi0JCWJhdGNoID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIFBBR0VTX0JBVENIKTsKLQkJbiA9IHJlYWQoa3BhZ2VmbGFnc19mZCwga3BhZ2VmbGFnc19idWYsIGJhdGNoICogS1BGX0JZVEVTKTsKLQkJaWYgKG4gPT0gMCkKKwkJYmF0Y2ggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgS1BBR0VGTEFHU19CQVRDSCk7CisJCXBhZ2VzID0ga3BhZ2VmbGFnc19yZWFkKGJ1ZiwgaW5kZXgsIGJhdGNoKTsKKwkJaWYgKHBhZ2VzID09IDApCiAJCQlicmVhazsKLQkJaWYgKG4gPCAwKSB7Ci0JCQlwZXJyb3IoUFJPQ19LUEFHRUZMQUdTKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQogCi0JCWlmIChuICUgS1BGX0JZVEVTICE9IDApCi0JCQlmYXRhbCgicGFydGlhbCByZWFkOiAlbHUgYnl0ZXNcbiIsIG4pOwotCQluID0gbiAvIEtQRl9CWVRFUzsKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspCisJCQlhZGRfcGFnZSh2b2Zmc2V0ICsgaSwgaW5kZXggKyBpLCBidWZbaV0pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCQlhZGRfcGFnZShpbmRleCArIGksIGtwYWdlZmxhZ3NfYnVmW2ldKTsKLQotCQlpbmRleCArPSBiYXRjaDsKLQkJY291bnQgLT0gYmF0Y2g7CisJCWluZGV4ICs9IHBhZ2VzOworCQljb3VudCAtPSBwYWdlczsKIAl9CiB9CiAKLQotI2RlZmluZSBQQUdFTUFQX0JBVENICTQwOTYKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhc2tfcGZuKHVuc2lnbmVkIGxvbmcgcGdvZmYpCisjZGVmaW5lIFBBR0VNQVBfQkFUQ0gJKDY0IDw8IDEwKQorc3RhdGljIHZvaWQgd2Fsa192bWEodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlzdGF0aWMgdWludDY0X3QgYnVmW1BBR0VNQVBfQkFUQ0hdOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXN0YXRpYyBsb25nIGNvdW50OwotCXVpbnQ2NF90IHBmbjsKKwl1aW50NjRfdCBidWZbUEFHRU1BUF9CQVRDSF07CisJdW5zaWduZWQgbG9uZyBiYXRjaDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChwZ29mZiA8IHN0YXJ0IHx8IHBnb2ZmID49IHN0YXJ0ICsgY291bnQpIHsKLQkJaWYgKGxzZWVrNjQocGFnZW1hcF9mZCwKLQkJCSAgICAodWludDY0X3QpcGdvZmYgKiBQTV9FTlRSWV9CWVRFUywKLQkJCSAgICBTRUVLX1NFVCkgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgc2VlayIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCXdoaWxlIChjb3VudCkgeworCQliYXRjaCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCBQQUdFTUFQX0JBVENIKTsKKwkJcGFnZXMgPSBwYWdlbWFwX3JlYWQoYnVmLCBpbmRleCwgYmF0Y2gpOworCQlpZiAocGFnZXMgPT0gMCkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQlwZm4gPSBwYWdlbWFwX3BmbihidWZbaV0pOworCQkJaWYgKHBmbikKKwkJCQl3YWxrX3BmbihpbmRleCArIGksIHBmbiwgMSk7CiAJCX0KLQkJY291bnQgPSByZWFkKHBhZ2VtYXBfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAoY291bnQgPT0gMCkKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgcmVhZCIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JCWlmIChjb3VudCAlIFBNX0VOVFJZX0JZVEVTKSB7Ci0JCQlmYXRhbCgicGFnZW1hcCByZWFkIG5vdCBhbGlnbmVkLlxuIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJY291bnQgLz0gUE1fRU5UUllfQllURVM7Ci0JCXN0YXJ0ID0gcGdvZmY7CisKKwkJaW5kZXggKz0gcGFnZXM7CisJCWNvdW50IC09IHBhZ2VzOwogCX0KLQotCXBmbiA9IGJ1ZltwZ29mZiAtIHN0YXJ0XTsKLQlpZiAocGZuICYgUE1fUFJFU0VOVCkKLQkJcGZuID0gUE1fUEZSQU1FKHBmbik7Ci0JZWxzZQotCQlwZm4gPSAwOwotCi0JcmV0dXJuIHBmbjsKIH0KIAogc3RhdGljIHZvaWQgd2Fsa190YXNrKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JaW50IGkgPSAwOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gaW5kZXggKyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBpID0gMDsKIAogCXdoaWxlIChpbmRleCA8IGVuZCkgewogCkBAIC01MDEsMTUgKzYxNywxMSBAQAogCQlpZiAocGdfc3RhcnRbaV0gPj0gZW5kKQogCQkJcmV0dXJuOwogCi0JCXZvZmZzZXQgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBwZ19zdGFydFtpXSwgaW5kZXgpOwotCQlpbmRleCAgID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOworCQlzdGFydCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIHBnX3N0YXJ0W2ldLCBpbmRleCk7CisJCWluZGV4ID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOwogCi0JCWFzc2VydCh2b2Zmc2V0IDwgaW5kZXgpOwotCQlmb3IgKDsgdm9mZnNldCA8IGluZGV4OyB2b2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFza19wZm4odm9mZnNldCk7Ci0JCQlpZiAocGZuKQotCQkJCXdhbGtfcGZuKHBmbiwgMSk7Ci0JCX0KKwkJYXNzZXJ0KHN0YXJ0IDwgaW5kZXgpOworCQl3YWxrX3ZtYShzdGFydCwgaW5kZXggLSBzdGFydCk7CiAJfQogfQogCkBAIC01MjcsMTggKzYzOSwxNCBAQAogewogCWludCBpOwogCi0Ja3BhZ2VmbGFnc19mZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7Ci0JaWYgKGtwYWdlZmxhZ3NfZmQgPCAwKSB7Ci0JCXBlcnJvcihQUk9DX0tQQUdFRkxBR1MpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCWtwYWdlZmxhZ3NfZmQgPSBjaGVja2VkX29wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiAKIAlpZiAoIW5yX2FkZHJfcmFuZ2VzKQogCQlhZGRfYWRkcl9yYW5nZSgwLCBVTE9OR19NQVgpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2FkZHJfcmFuZ2VzOyBpKyspCiAJCWlmICghb3B0X3BpZCkKLQkJCXdhbGtfcGZuKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKKwkJCXdhbGtfcGZuKDAsIG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIAkJZWxzZQogCQkJd2Fsa190YXNrKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIApAQCAtNTc1LDYgKzY4Myw4IEBACiAiICAgICAgICAgICAgLWx8LS1saXN0ICAgICAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBpbiByYW5nZXNcbiIKICIgICAgICAgICAgICAtTHwtLWxpc3QtZWFjaCAgICAgICAgICAgIFNob3cgcGFnZSBkZXRhaWxzIG9uZSBieSBvbmVcbiIKICIgICAgICAgICAgICAtTnwtLW5vLXN1bW1hcnkgICAgICAgICAgIERvbid0IHNob3cgc3VtbWF5IGluZm9cbiIKKyIgICAgICAgICAgICAtWHwtLWh3cG9pc29uICAgICAgICAgICAgIGh3cG9pc29uIHBhZ2VzXG4iCisiICAgICAgICAgICAgLXh8LS11bnBvaXNvbiAgICAgICAgICAgICB1bnBvaXNvbiBwYWdlc1xuIgogIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKICJhZGRyLXNwZWM6XG4iCiAiICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgcGFnZSBhdCBvZmZzZXQgTiAodW5pdDogcGFnZXMpXG4iCkBAIC02MjQsMTEgKzczNCw3IEBACiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogCiAJc3ByaW50ZihidWYsICIvcHJvYy8lZC9wYWdlbWFwIiwgb3B0X3BpZCk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oYnVmLCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPCAwKSB7Ci0JCXBlcnJvcihidWYpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCXBhZ2VtYXBfZmQgPSBjaGVja2VkX29wZW4oYnVmLCBPX1JET05MWSk7CiAKIAlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL21hcHMiLCBvcHRfcGlkKTsKIAlmaWxlID0gZm9wZW4oYnVmLCAiciIpOwpAQCAtNzg4LDYgKzg5NCw4IEBACiAJeyAibGlzdCIgICAgICAsIDAsIE5VTEwsICdsJyB9LAogCXsgImxpc3QtZWFjaCIgLCAwLCBOVUxMLCAnTCcgfSwKIAl7ICJuby1zdW1tYXJ5IiwgMCwgTlVMTCwgJ04nIH0sCisJeyAiaHdwb2lzb24iICAsIDAsIE5VTEwsICdYJyB9LAorCXsgInVucG9pc29uIiAgLCAwLCBOVUxMLCAneCcgfSwKIAl7ICJoZWxwIiAgICAgICwgMCwgTlVMTCwgJ2gnIH0sCiAJeyBOVUxMICAgICAgICAsIDAsIE5VTEwsIDAgfQogfTsKQEAgLTc5OSw3ICs5MDcsNyBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAotCQkJCSJycDpmOmE6YjpsTE5oIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCQkJInJwOmY6YTpiOmxMTlh4aCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAncic6CiAJCQlvcHRfcmF3ID0gMTsKQEAgLTgyNSw2ICs5MzMsMTQgQEAKIAkJY2FzZSAnTic6CiAJCQlvcHRfbm9fc3VtbWFyeSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlvcHRfaHdwb2lzb24gPSAxOworCQkJcHJlcGFyZV9od3BvaXNvbl9mZCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJb3B0X3VucG9pc29uID0gMTsKKwkJCXByZXBhcmVfaHdwb2lzb25fZmQoKTsKKwkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJCXVzYWdlKCk7CiAJCQlleGl0KDApOwpAQCAtODQ0LDcgKzk2MCw3IEBACiAJd2Fsa19hZGRyX3JhbmdlcygpOwogCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZSgwLCAwKTsgIC8qIGRyYWluIHRoZSBidWZmZXIgKi8KKwkJc2hvd19wYWdlX3JhbmdlKDAsIDAsIDApOyAgLyogZHJhaW4gdGhlIGJ1ZmZlciAqLwogCiAJaWYgKG9wdF9ub19zdW1tYXJ5KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CmluZGV4IDYwMGEzMDQuLmRmMDliOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dApAQCAtNTcsNyArNTcsOSBAQAogICAgIDE2LiBDT01QT1VORF9UQUlMCiAgICAgMTYuIEhVR0UKICAgICAxOC4gVU5FVklDVEFCTEUKKyAgICAxOS4gSFdQT0lTT04KICAgICAyMC4gTk9QQUdFCisgICAgMjEuIEtTTQogCiBTaG9ydCBkZXNjcmlwdGlvbnMgdG8gdGhlIHBhZ2UgZmxhZ3M6CiAKQEAgLTg2LDkgKzg4LDE1IEBACiAxNy4gSFVHRQogICAgIHRoaXMgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBhIEh1Z2VUTEIgcGFnZQogCisxOS4gSFdQT0lTT04KKyAgICBoYXJkd2FyZSBkZXRlY3RlZCBtZW1vcnkgY29ycnVwdGlvbiBvbiB0aGlzIHBhZ2U6IGRvbid0IHRvdWNoIHRoZSBkYXRhIQorCiAyMC4gTk9QQUdFCiAgICAgbm8gcGFnZSBmcmFtZSBleGlzdHMgYXQgdGhlIHJlcXVlc3RlZCBhZGRyZXNzCiAKKzIxLiBLU00KKyAgICBpZGVudGljYWwgbWVtb3J5IHBhZ2VzIGR5bmFtaWNhbGx5IHNoYXJlZCBiZXR3ZWVuIG9uZSBvciBtb3JlIHByb2Nlc3NlcworCiAgICAgW0lPIHJlbGF0ZWQgcGFnZSBmbGFnc10KICAxLiBFUlJPUiAgICAgSU8gZXJyb3Igb2NjdXJyZWQKICAzLiBVUFRPREFURSAgcGFnZSBoYXMgdXAtdG8tZGF0ZSBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgppbmRleCA5MjEwZDZmLi4yOTliOTFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTI0LDggKzI0LDggQEAKIAogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDE4LCAweDE5LCAweDFhLCBhbmQgMHgxYi4KIEhvd2V2ZXIsIHRoZSBkZXZpY2UgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgaTJjIGJ1cywgc28gbm8KLWRldGVjdGlvbiBpcyBkb25lLgotWW91IHNob3VsZCBmb3JjZSB0aGUgZGV2aWNlIGFkZHJlc3MuCitkZXRlY3Rpb24gaXMgZG9uZS4gWW91IHNob3VsZCBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIGV4cGxpY2l0bHkuCiAKLSQgbW9kcHJvYmUgZHMyNDgyIGZvcmNlPTAsMHgxOAorJCBtb2Rwcm9iZSBkczI0ODIKKyQgZWNobyBkczI0ODIgMHgxOCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4ODdiNTBiLi5jODI0YjRkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjUsNDMgKzY1LDUxIEBACiAKIDguCUhhcHB5IGhhY2tpbmcuCiAKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Rlc2NyaXB0aW9ucyBvZiBzZWN0aW9uIGVudHJpZXM6CiAKLU1haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCisJUDogUGVyc29uIChvYnNvbGV0ZSkKKwlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KKwlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKKwlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgorCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgorCSAgIE1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCisJICAgT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbworCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCisJICAgT3JwaGFuOglObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKKwkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgorCSAgIE9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKKwkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91CisJCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KKwlGOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB3aWxkY2FyZCBwYXR0ZXJucy4KKwkgICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgorCSAgIEY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0CisJICAgRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKKwkgICBGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKKwkgICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCisJWDogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYXJlIE5PVCBtYWludGFpbmVkLCBzYW1lIHJ1bGVzIGFzIEY6CisJICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCisJICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6CisJICAgRjoJbmV0LworCSAgIFg6CW5ldC9pcHY2LworCSAgIG1hdGNoZXMgYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBuZXQgZXhjbHVkaW5nIG5ldC9pcHY2LworCUs6IEtleXdvcmQgcGVybCBleHRlbmRlZCByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGNvbnRlbnQgaW4gYQorCSAgIHBhdGNoIG9yIGZpbGUuICBGb3IgaW5zdGFuY2U6CisJICAgSzogb2ZfZ2V0X3Byb2ZpbGUKKwkgICAgICBtYXRjaGVzIHBhdGNoZXMgb3IgZmlsZXMgdGhhdCBjb250YWluICJvZl9nZXRfcHJvZmlsZSIKKwkgICBLOiBcYihwcmludGt8cHJfKGluZm98ZXJyKSlcYgorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIHdvcmRzCisJICAgICAgcHJpbnRrLCBwcl9pbmZvIG9yIHByX2VycgorCSAgIE9uZSByZWdleCBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgSzogbGluZXMgYWNjZXB0YWJsZS4KIAogTm90ZTogRm9yIHRoZSBoYXJkIG9mIHRoaW5raW5nLCB0aGlzIGxpc3QgaXMgbWVhbnQgdG8gcmVtYWluIGluIGFscGhhYmV0aWNhbAogb3JkZXIuIElmIHlvdSBjb3VsZCBhZGQgeW91cnNlbHZlcyB0byBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdGhhdCB3b3VsZCBiZQogc28gbXVjaCBlYXNpZXIgW0VkXQogCi1QOiBQZXJzb24gKG9ic29sZXRlKQotTTogTWFpbCBwYXRjaGVzIHRvOiBGdWxsTmFtZSA8YWRkcmVzc0Bkb21haW4+Ci1MOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKLVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KLVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CitNYWludGFpbmVycyBMaXN0ICh0cnkgdG8gbG9vayBmb3IgbW9zdCBwcmVjaXNlIGFyZWFzIGZpcnN0KQogCi0JU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgotCU1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCi0JT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbwotCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCi0JT3JwaGFuOgkJTm8gY3VycmVudCBtYWludGFpbmVyIFtidXQgbWF5YmUgeW91IGNvdWxkIHRha2UgdGhlCi0JCQlyb2xlIGFzIHlvdSB3cml0ZSB5b3VyIG5ldyBjb2RlXS4KLQlPYnNvbGV0ZToJT2xkIGNvZGUuIFNvbWV0aGluZyB0YWdnZWQgb2Jzb2xldGUgZ2VuZXJhbGx5IG1lYW5zCi0JCQlpdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGJldHRlciBzeXN0ZW0gYW5kIHlvdQotCQkJc2hvdWxkIGJlIHVzaW5nIHRoYXQuCi0KLUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgotICAgQSB0cmFpbGluZyBzbGFzaCBpbmNsdWRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yeSBmaWxlcy4KLQlGOglkcml2ZXJzL25ldC8JYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBkcml2ZXJzL25ldAotCUY6CWRyaXZlcnMvbmV0LyoJYWxsIGZpbGVzIGluIGRyaXZlcnMvbmV0LCBidXQgbm90IGJlbG93Ci0JRjoJKi9uZXQvKgkJYWxsIGZpbGVzIGluICJhbnkgdG9wIGxldmVsIGRpcmVjdG9yeSIvbmV0Ci0gICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCi1YOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKLSAgIEZpbGVzIGV4Y2x1c2lvbnMgYXJlIHRlc3RlZCBiZWZvcmUgZmlsZSBtYXRjaGVzLgotICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6Ci0JRjoJbmV0LwotCVg6CW5ldC9pcHY2LwotICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDNDNTA1IE5FVFdPUksgRFJJVkVSCiBNOglQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CkBAIC0xNzQsNyArMTgyLDcgQEAKIE06CUxhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CiBMOgl2OWZzLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9zd2lrLm5ldC92OWZzCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZXJpY3ZoL3Y5ZnMuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2VyaWN2aC92OWZzLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKIEY6CWZzLzlwLwpAQCAtMjU3LDYgKzI2NSwxMyBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2FjcGkvZmFuLmMKIAorQUNQSSBQUk9DRVNTT1IgQUdHUkVHQVRPUiBEUklWRVIKK006CVNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworCiBBQ1BJIFRIRVJNQUwgRFJJVkVSCiBNOglaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CiBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwpAQCAtNTcwLDYgKzU4NSwxMSBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAorQVJNL0NPTlRFQyBNSUNSTzkgTUFDSElORSBTVVBQT1JUCitNOglIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisKIEFSTS9DT1JHSSBNQUNISU5FIFNVUFBPUlQKIE06CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTY0NiwyNCArNjY2LDI0IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AzM1ggQVJNIEFSQ0hJVEVDVFVSRQogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AxM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElRODEzNDJFWCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYUDIwMDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4Myw3ICs3MDMsNyBAQAogQVJNL0lOVEVMIElYUDRYWCBBUk0gQVJDSElURUNUVVJFCiBNOglJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KIE06CUtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDR4eC8KIApAQCAtNjkxLDcgKzcxMSw3IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JUCBGQUJSSUNTIERPVUJMRSBFU1BSRVNTTyBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC03NDAsMjAgKzc2MCwzNyBAQAogTToJRGlyayBPcGZlciA8ZGlya0BvcGZlci1vbmxpbmUuZGU+CiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyIFNVUFBPUlQKK0FSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyLFBBTE1UQyBTVVBQT1JUCiBNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCiBXOglodHRwOi8vaGFja25kZXYuY29tCiBTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRlMi5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKIAogQVJNL1BBTE0gVFJFTyA2ODAgU1VQUE9SVAogTToJVG9tYXMgQ2VjaCA8c2xlZXBfd2Fsa2VyQHN1c2UuY3o+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90cmVvNjgwLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwogCiBBUk0vUEFMTVo3MiBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG16NzIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCiAKIEFSTS9QTEVCIFNVUFBPUlQKIE06CVBldGVyIENodWJiIDxwbGViQGdlbGF0by51bnN3LmVkdS5hdT4KQEAgLTg2OSw3ICs5MDYsNiBAQAogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwogCiBBU1VTIEFTQjEwMCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgpAQCAtOTYzLDcgKzk5OSw3IEBACiAKIEFUTQogTToJQ2hhcyBXaWxsaWFtcyA8Y2hhc0BjbWYubnJsLm5hdnkubWlsPgotTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0xMjA3LDYgKzEyNDMsMTIgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvdGczLioKIAorQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKK006CUppbmcgSHVhbmcgPGh1YW5nakBicm9jYWRlLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZmEvCisKIEJTRyAoYmxvY2sgbGF5ZXIgZ2VuZXJpYyBzZyB2NCBkcml2ZXIpCiBNOglGVUpJVEEgVG9tb25vcmkgPGZ1aml0YS50b21vbm9yaUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE0NDQsNiArMTQ4Niw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjAzNCw3ICsyMDc3LDcgQEAKIEY6CWZzLyoKIAogRklOVEVLIEY3NTM3NVMgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOglSaWt1IFZvaXBpbyA8cmlrdS52aXBpb0Bpa2kuZmk+CitNOglSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTIxMTUsNyArMjE1OCw3IEBACiBGOglhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi8KIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS8qcWUuaAogCi1GUkVFU0NBTEUgVVNCIFBFUklQSEVSSUFMIERSSVZFUlMKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKQEAgLTIxNjYsMTggKzIyMDksNiBAQAogRjoJZnMvZnNjYWNoZS8KIEY6CWluY2x1ZGUvbGludXgvZnNjYWNoZSouaAogCi1UUkFDSU5HCi1NOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KLU06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLU06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCi1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKLUY6CWFyY2gvKi8qLyovZnRyYWNlLmgKLUY6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKLUY6CWluY2x1ZGUvKi9mdHJhY2UuaCBpbmNsdWRlL3RyYWNlLyBpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCi1GOglrZXJuZWwvdHJhY2UvCi0KIEZVSklUU1UgRlItViAoRlJWKSBQT1JUCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtMjIzNiw5ICsyMjY3LDggQEAKIEY6CWluY2x1ZGUvYXNtLWdlbmVyaWMKIAogR0VORVJJQyBVSU8gRFJJVkVSIEZPUiBQQ0kgREVWSUNFUwotTToJTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy91aW8vdWlvX3BjaV9nZW5lcmljLmMKIApAQCAtMjU3OSw2ICsyNjA5LDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY3OCw3ICsyNzA5LDcgQEAKIAogSU5URUwgSU9QLUFETUEgRE1BIERSSVZFUgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+Ci1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZG1hL2lvcC1hZG1hLmMKIAogSU5URUwgSVhQNFhYIFFNR1IsIE5QRSwgRVRIRVJORVQgYW5kIEhTUyBTVVBQT1JUCkBAIC0yNzkyLDcgKzI4MjMsNyBAQAogCiBJUE1JIFNVQlNZU1RFTQogTToJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgotTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0yOTY3LDggKzI5OTgsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTMwNTMsOSArMzA4NCwxMyBAQAogCiBLTUVNQ0hFQ0sKIE06CVZlZ2FyZCBOb3NzdW0gPHZlZ2FyZG5vQGlmaS51aW8ubm8+Ci1QCVBla2thIEVuYmVyZwotTToJcGVuYmVyZ0Bjcy5oZWxzaW5raS5maQorTToJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPgogUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CitGOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hlY2suaAorRjoJYXJjaC94ODYvbW0va21lbWNoZWNrLworRjoJaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAorRjoJbW0va21lbWNoZWNrLmMKIAogS01FTUxFQUsKIE06CUNhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CkBAIC0zNTg1LDcgKzM2MjAsNyBAQAogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCi1UOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2FiZXIvbmYtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyKgogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvCkBAIC0zNzQ5LDcgKzM3ODQsNyBAQAogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzg1NCw2ICszODg5LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC0zOTU4LDYgKzQwMDIsNyBAQAogUEFSSVNDIEFSQ0hJVEVDVFVSRQogTToJS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KIE06CUhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KK006CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPGplamJAcGFyaXNjLWxpbnV4Lm9yZz4KIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdApAQCAtNDA0MSw2ICs0MDg2LDEzIEBACiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgogUzoJU3VwcG9ydGVkCitGOglrZXJuZWwvcGVyZl9ldmVudC5jCitGOglpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qLyova2VybmVsL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qL2xpYi9wZXJmX2V2ZW50LmMKK0Y6CWFyY2gvKi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworRjoJdG9vbHMvcGVyZi8KIAogUEVSU09OQUxJVFkgSEFORExJTkcKIE06CUNocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KQEAgLTQ0OTIsMTIgKzQ1NDQsMTEgQEAKIEY6CWluY2x1ZGUvbGludXgvc2NoZWQuaAogCiBTQ09SRSBBUkNISVRFQ1RVUkUKLVA6CUNoZW4gTGlxaW4KLU06CWxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbQotUDoJTGVubm94IFd1Ci1NOglsZW5ub3gud3VAZ21haWwuY29tCitNOglDaGVuIExpcWluIDxsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20+CitNOglMZW5ub3ggV3UgPGxlbm5veC53dUBnbWFpbC5jb20+CiBXOglodHRwOi8vd3d3LnN1bnBsdXNjdC5jb20KIFM6CVN1cHBvcnRlZAorRjoJYXJjaC9zY29yZS8KIAogU0NTSSBDRFJPTSBEUklWRVIKIE06CUplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KQEAgLTQ1NzAsMjcgKzQ2MjEsMjcgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBEUklWRVIKLVM6ICAgICBPcnBoYW4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCitTOglPcnBoYW4KK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKIE06CUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIFNBTVNVTkcgRFJJVkVSCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwogCiBTRUNVUklUWSBTVUJTWVNURU0KIE06CUphbWVzIE1vcnJpcyA8am1vcnJpc0BuYW1laS5vcmc+CiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQotVDoJZ2l0IGdpdDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAogVzoJaHR0cDovL3NlY3VyaXR5Lndpa2kua2VybmVsLm9yZy8KIFM6CVN1cHBvcnRlZAogRjoJc2VjdXJpdHkvCkBAIC00NjI1LDYgKzQ2NzYsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvYXRhLmgKIEY6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKIAorU0VSVkVSIEVOR0lORVMgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK006CUpheWFtb2hhbiBLYWxsaWNrYWwgPGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCisKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgogTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KQEAgLTQ2NzgsOCArNDczNiw3IEBACiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCi1QOglMZW4gQnJvd24KLU06CWxlbmJAa2VybmVsLm9yZworTToJTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+CiBMOglzZmktZGV2ZWxAc2ltcGxlZmlybXdhcmUub3JnCiBXOglodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LXNmaS0yLjYuZ2l0CkBAIC01MTI3LDYgKzUxODQsMjAgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci90cG0vCiAKK1RSQUNJTkcKK006CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgorTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorRjoJYXJjaC8qLyovKi9mdHJhY2UuaAorRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYworRjoJaW5jbHVkZS8qL2Z0cmFjZS5oCitGOglpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCitGOglpbmNsdWRlL3RyYWNlLworRjoJa2VybmVsL3RyYWNlLworCiBUUklWSUFMIFBBVENIRVMKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CkBAIC01NjE2LDExICs1Njg3LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3ZseW5xLmgKIAogVk1XQVJFIFZNWE5FVDMgRVRIRVJORVQgRFJJVkVSCi1NOiAgICAgU2hyZXlhcyBCaGF0ZXdhcmEgPHNiaGF0ZXdhcmFAdm13YXJlLmNvbT4KLU06ICAgICBWTXdhcmUsIEluYy4gPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KLUw6ICAgICBuZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOiAgICAgTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbmV0L3ZteG5ldDMvCitNOglTaHJleWFzIEJoYXRld2FyYSA8c2JoYXRld2FyYUB2bXdhcmUuY29tPgorTToJIlZNd2FyZSwgSW5jLiIgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3ZteG5ldDMvCiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwogTToJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KQEAgLTU2OTMsOCArNTc2NCw3IEBACiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAogV0lOQk9ORCBDSVIgRFJJVkVSCi1QOglEYXZpZCBI5HJkZW1hbgotTToJZGF2aWRAaGFyZGVtYW4ubnUKK006CURhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwogCkBAIC01NzUxLDkgKzU4MjEsNyBAQAogRjoJaW5jbHVkZS9saW51eC93bTk3eHguaAogCiBXT0xGU09OIE1JQ1JPRUxFQ1RST05JQ1MgUE1JQyBEUklWRVJTCi1QOglNYXJrIEJyb3duCi1NOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi1hdWRpb3BsdXMKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS84CiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZjkwOGFjYy4uYWEzZTEzYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKLVNVQkxFVkVMID0gMzEKLUVYVFJBVkVSU0lPTiA9CitTVUJMRVZFTCA9IDMyCitFWFRSQVZFUlNJT04gPSAtcmM3CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTE3OSw0NiArMTc5LDkgQEAKICMgQWx0ZXJuYXRpdmVseSBDUk9TU19DT01QSUxFIGNhbiBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgogIyBEZWZhdWx0IHZhbHVlIGZvciBDUk9TU19DT01QSUxFIGlzIG5vdCB0byBwcmVmaXggZXhlY3V0YWJsZXMKICMgTm90ZTogU29tZSBhcmNoaXRlY3R1cmVzIGFzc2lnbiBDUk9TU19DT01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQotIwotIyBUbyBmb3JjZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmdzIGluY2x1ZGUga2VybmVsLiogZmlsZXMKLSMgaW4gdGhlIGtlcm5lbCB0cmVlIC0gZG8gbm90IHBhdGNoIHRoaXMgZmlsZS4KIGV4cG9ydCBLQlVJTERfQlVJTERIT1NUIDo9ICQoU1VCQVJDSCkKLQotIyBLYnVpbGQgc2F2ZSB0aGUgQVJDSCBhbmQgQ1JPU1NfQ09NUElMRSBzZXR0aW5nIGluIGtlcm5lbC4qIGZpbGVzLgotIyBSZXN0b3JlIHRoZXNlIHNldHRpbmdzIGFuZCBjaGVjayB0aGF0IHVzZXIgZGlkIG5vdCBzcGVjaWZ5Ci0jIGNvbmZsaWN0aW5nIHZhbHVlcy4KLQotc2F2ZWRfYXJjaCAgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmFyY2ggIDI+IC9kZXYvbnVsbCkKLXNhdmVkX2Nyb3NzIDo9ICQoc2hlbGwgY2F0IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcyAyPiAvZGV2L251bGwpCi0KLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfY3Jvc3MpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChDUk9TU19DT01QSUxFKSwkKHNhdmVkX2Nyb3NzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICQoZXJyb3IgQ1JPU1NfQ09NUElMRSBjaGFuZ2VkIGZyb20gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJChzYXZlZF9jcm9zcykiIHRvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICIkKENST1NTX0NPTVBJTEUpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICBDUk9TU19DT01QSUxFIDo9ICQoc2F2ZWRfY3Jvc3MpCi1lbmRpZgotCi1pZm5lcSAoJChBUkNIKSwpCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChzYXZlZF9hcmNoKSwkKEFSQ0gpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBBUkNIIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2FyY2gpIiB0byAiJChBUkNIKSIuIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSAibWFrZSBtcnByb3BlciIgdG8gZml4IGl0IHVwKQotICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgIGVuZGlmCi1lbHNlCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBBUkNIIDo9ICQoc2F2ZWRfYXJjaCkKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChTVUJBUkNIKQotICAgICAgICBlbmRpZgotZW5kaWYKK0FSQ0gJCT89ICQoU1VCQVJDSCkKK0NST1NTX0NPTVBJTEUJPz0KIAogIyBBcmNoaXRlY3R1cmUgYXMgcHJlc2VudCBpbiBjb21waWxlLmgKIFVUU19NQUNISU5FIAk6PSAkKEFSQ0gpCkBAIC0yNTgsNyArMjIxLDcgQEAKIAogSE9TVENDICAgICAgID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKLUhPU1RDRkxBR1MgICA9IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCitIT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgogSE9TVENYWEZMQUdTID0gLU8yCiAKICMgRGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGJvdGguCkBAIC00ODMsMTEgKzQ0Niw2IEBACiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL01ha2VmaWxlCiBleHBvcnQgS0JVSUxEX0RFRkNPTkZJRyBLQlVJTERfS0NPTkZJRwogCi0jIHNhdmUgQVJDSCAmIENST1NTX0NPTVBJTEUgc2V0dGluZ3MKLSQoc2hlbGwgbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlY2hvICQoQVJDSCkgICAgICAgICAgPiBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAmJiBcCi0gICAgICAgIGVjaG8gJChDUk9TU19DT01QSUxFKSA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcykKLQogY29uZmlnOiBzY3JpcHRzX2Jhc2ljIG91dHB1dG1ha2VmaWxlIEZPUkNFCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXggaW5jbHVkZS9jb25maWcKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1zY3JpcHRzL2tjb25maWcgJEAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKaW5kZXggOWQwNzI3ZC4uMzY3ZDUzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIGNvbnN0IGNoYXIgKiBwcm9nX25hbWU7CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHVzYWdlICh2b2lkKQogewogICAgIGZwcmludGYoc3RkZXJyLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IGU0MjgyM2UuLjI1ZGEwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTI2LDggKzI2LDYgQEAKICNkZWZpbmUgRl9HRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMwogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkxCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTA3NmE4OC4uODE1NjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTAsMTIgKzUwLDEyIEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCIkOCIpOwogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgIF9fY3VycmVudF90aHJlYWRfaW5mbwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKIC8qIFRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uLiAgKi8KICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgMQogI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCiAKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCAxOWI4NjMyLi42ZjgwY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTMsNiArMTMsNSBAQAogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwogRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwogCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3RocmVhZCIpKSkKLQk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CisJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkYzAzYzMuLjAwM2VmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKQEAgLTMxLDg4ICszMiwyMSBAQAogCX0gOmtlcm5lbAogCiAJUk9EQVRBCi0KLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAkvKiBXaWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLQlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLiA9IEFMSUdOKDgpOwotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgotCi0JLiA9IEFMSUdOKDgpOwotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oOCk7Ci0JU0VDVVJJVFlfSU5JVAotCisJX19pbml0X2JlZ2luID0gQUxJR04oUEFHRV9TSVpFKTsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKFBBR0VfU0laRSkKLQotCS4gPSBBTElHTigyICogUEFHRV9TSVpFKTsKKwkvKiBBbGlnbiB0byBUSFJFQURfU0laRSByYXRoZXIgdGhhbiBQQUdFX1NJWkUgaGVyZSBzbyBhbnkgcGFkZGluZyBwYWdlCisJICAgbmVlZGVkIGZvciB0aGUgVEhSRUFEX1NJWkUgYWxpZ25lZCBpbml0X3Rhc2sgZ2V0cyBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JLyogTm90ZSAyIHBhZ2UgYWxpZ25tZW50IGFib3ZlLiAgKi8KLQkuZGF0YS5pbml0X3RocmVhZCA6IHsKLQkJKiguZGF0YS5pbml0X3RocmVhZCkKLQl9Ci0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQotCX0KLQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCiAJX2RhdGEgPSAuOwotCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oNjQsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkuZ290IDogewogCQkqKC5nb3QpCkBAIC0xMjIsMTYgKzU2LDcgQEAKIAl9CiAJX2VkYXRhID0gLjsJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwotCS5zYnNzIDogewotCQkqKC5zYnNzKQotCQkqKC5zY29tbW9uKQotCX0KLQkuYnNzIDogewotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCX0KLQlfX2Jzc19zdG9wID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCiAJLm1kZWJ1ZyAwIDogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDc3OGE2OS4uMWM0MTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUwogCitjb25maWcgSEFWRV9UQ00KKwlib29sCisJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfVENNCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjI5M2YwYy4uYmQzNmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtODY1LDYgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKIAogaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg4Miw2ICs4ODMsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwogCiBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKIAogdm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQogewpAQCAtOTIwLDYgKzkyMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQogewpAQCAtMTA4NCwxMyArMTA4OCwxMiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CiAKIC8qCiAgKglGcm9udGxpZ2h0IGNvbnRyb2wKICAqLwogCi1zdGF0aWMgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KTsKLQogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExODIsMTEgKzExODUsMTMgQEAKIAlkcml2ZXItPmRydi5idXMgPSAmbG9jb21vX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKIHsKQEAgLTEyMDgsMTEgKzEyMTMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMb0NvTW8gY29yZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4iKTsKLQotRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fc2V0X2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwotRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggZWYxMjc5NC4uOGJhNzA0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3BsbF9jbG9jayk7CiAKIC8qKgogICoJc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlIC0gc2VsZWN0IEkyUyBvciBBQyBsaW5rIG1vZGUKQEAgLTEwNTksNiArMTA2MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlKTsKIAogLyoqCiAgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7CiAKIC8qKgogICoJc2ExMTExX2dldF9hdWRpb19yYXRlIC0gZ2V0IHRoZSBhdWRpbyBzYW1wbGUgcmF0ZQpAQCAtMTEwMCw2ICsxMTAzLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKSAvICgyNTYgKiBkaXYpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOwogCiB2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyLApAQCAtMTEyOCw2ICsxMTMyLDcgQEAKIAlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pb19kaXIpOwogCiB2b2lkIHNhMTExMV9zZXRfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpCiB7CkBAIC0xMTQyLDYgKzExNDcsNyBAQAogCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7CiAKIHZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdikKIHsKQEAgLTExNTYsNiArMTE2Miw3IEBACiAJTU9ESUZZX0JJVFMoZ3BpbyArIFNBMTExMV9HUElPX1BDU1NSLCAoYml0cyA+PiAxNikgJiAyNTUsIHYgPj4gMTYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKIAogLyoKICAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCkBAIC0xMTc2LDYgKzExODMsNyBAQAogCXNhMTExMV93cml0ZWwodmFsIHwgc2FkZXYtPnNrcGNyX21hc2ssIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9lbmFibGVfZGV2aWNlKTsKIAogLyoqCiAgKglzYTExMTFfZGlzYWJsZV9kZXZpY2UgLSBkaXNhYmxlIGFuIG9uLWNoaXAgU0ExMTExIGZ1bmN0aW9uIGJsb2NrCkBAIC0xMTkyLDYgKzEyMDAsNyBAQAogCXNhMTExMV93cml0ZWwodmFsICYgfnNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOwogCiAvKgogICoJU0ExMTExICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKQEAgLTEyNTksMTcgKzEyNjgsMjAgQEAKIAkuc3VzcGVuZAk9IHNhMTExMV9idXNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTExMV9idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKIAogaW50IHNhMTExMV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHNhMTExMV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmRydi5idXMgPSAmc2ExMTExX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTExX2luaXQodm9pZCkKIHsKQEAgLTEyOTAsMTYgKzEzMDIsMyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcnBvcmF0aW9uIFNBMTExMSBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9nZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW9fZGlyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfc2xlZXBfaW8pOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZW5hYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9kaXNhYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9wbGxfY2xvY2spOwotRVhQT1JUX1NZTUJPTChzYTExMTFfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCA5MjBjZWQwLi5mMjMyOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCmluZGV4IDc2NDczMjUuLmU4ZjczODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC01NSwxMCArNTUsMTAgQEAKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjk5LDcgKzI5OSw5IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTY3MCw3ICs2NzIsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NCw2ICs3ODYsNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTgyMCw2ICs4MjMsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODk2LDcgKzkwMCwxMyBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQogCiAjCiAjIEhJRCBEZXZpY2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IDE1MDI5NTcuLmY2YWVkNzc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtOTAsNyArOTAsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IMzYwMD15Ci1DT05GSUdfU0ExMTAwX0gzWFhYPXkKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCmluZGV4IGVlYzQ4ODIuLmVkMmQ1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKQEAgLTEsMjkgKzEsMjYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgV2VkIERlYyAxMiAxNjoxMToyNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFR1ZSBBdWcgMTggMTM6NDE6NDEgMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDIxICszNywzOSBAQAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTY3LDI5ICs4Miw0OCBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwMyw2ICsxMzcsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtMTEyLDE1ICsxNDcsMTUgQEAKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QMzNYPXkKQEAgLTEyOCwxOSArMTYzLDI2IEBACiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU9QM1hYX0FUVT15CiAKICMKICMgSU9QMzN4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKQEAgLTE1MSwxNCArMTkzLDYgQEAKICMKIENPTkZJR19BUkNIX0lRODAzMzE9eQogQ09ORklHX01BQ0hfSVE4MDMzMj15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwogQ09ORklHX1BMQVRfSU9QPXkKIAogIwpAQCAtMTY4LDYgKzIwMiw3IEBACiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKIENPTkZJR19DUFVfQ1AxNT15CkBAIC0xNzgsNyArMjEzLDYgQEAKICMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKIENPTkZJR19YU0NBTEVfUE1VPXkKIApAQCAtMTkwLDQxICsyMjQsNTUgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKICMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY2FjaGVwb2xpY3k9d3JpdGVhbGxvYyBpb3AzeHhfaW5pdF9hdHU9eSIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCiAjCiAKQEAgLTIzOSw2ICsyODcsOCBAQAogIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CkBAIC0yNDcsMTEgKzI5Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTI2NCw2ICszMTAsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zMTAsNiArMzU3LDcgQEAKICMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC0zMTcsNiArMzY1LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzI2LDI0ICszNzUsMzEgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zNTcsNyArNDEzLDkgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zNjYsMTIgKzQyNCwxNCBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00MjEsOSArNDgxLDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0xCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldApAQCAtNDQ3LDYgKzUwNSwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NjMsMTQgKzUyNiwyOSBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00OTIsMTAgKzU3MCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTIsNiArNTg2LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01MjAsMTMgKzU5NiwxOCBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC01NDMsMTUgKzYyNCwxOCBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENl9QUT15CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTU2OCwyNyArNjUyLDM0IEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTk2LDIzICs2ODcsMzQgQEAKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIwLDEzICs3MjIsMTYgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02NzAsMTAgKzc3NSwxMyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTY5MiwxMSArODAwLDEyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzA1LDY3ICs4MTQsOTcgQEAKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSU9QM1hYPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSU9QM1hYPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAKICMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKQEAgLTc3MywxMyArOTEyLDE3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzk0LDE2ICs5MzcsMjMgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTgxMiwyOCArOTYyLDM4IEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODU0LDE1ICsxMDE0LDE2IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIwogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04NzAsMTQgKzEwMzEsMjEgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldApAQCAtODkzLDYgKzEwNjEsMTIgQEAKICMgRE1BIENsaWVudHMKICMKIENPTkZJR19ORVRfRE1BPXkKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTkwMSwxMCArMTA3NSwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC05MTMsMTcgKzEwODgsMjMgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTk0MSwxNSArMTEyMiwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtOTU5LDI5ICsxMTM4LDMxIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTAxMyw5ICsxMTk0LDYgQEAKICMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTAyMyw2ICsxMjAxLDcgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldApAQCAtMTAzMCwxMCArMTIwOSwxNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwNDcsMTYgKzEyMzMsNDEgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAogCkBAIC0xMDY1LDI0ICsxMjc2LDExNyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19YT1JfQkxPQ0tTPXkKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggYWY3NGNjMi4uYmNmYWRlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTEsMTUgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzQKLSMgTW9uIE1heSAgNCAxMTo1ODo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2CisjIFNhdCBOb3YgIDcgMjA6MzE6MTggMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTE4LDEzICsxNiwxMiBAQAogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQ2LDExICs0MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE5CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03Myw3ICs3MSw2IEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTg2LDYgKzgzLDEwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC05NSwxMyArOTYsMTcgQEAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE0LDcgKzExOSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzUsMTkgKzE0MCwyMiBAQAogIwogIyBTeXN0ZW0gVHlwZQogIworQ09ORklHX01NVT15CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE1NiwyNSArMTY0LDI3IEBACiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0tJUktXT09EPXkKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgTWFydmVsbCBLaXJrd29vZCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE4NSw2ICsxOTUsNyBAQAogQ09ORklHX01BQ0hfTVY4OEY2MjgxR1RXX0dFPXkKIENPTkZJR19NQUNIX1NIRUVWQVBMVUc9eQogQ09ORklHX01BQ0hfVFMyMTk9eQorQ09ORklHX01BQ0hfT1BFTlJEX0JBU0U9eQogQ09ORklHX1BMQVRfT1JJT049eQogCiAjCkBAIC0xOTUsNyArMjA2LDcgQEAKICMgQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfRkVST0NFT049eQogQ09ORklHX0NQVV9UTEJfRkVST0NFT049eQpAQCAtMjExLDYgKzIyMiw3IEBACiBDT05GSUdfT1VURVJfQ0FDSEU9eQogQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyPXkKICMgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjM1LDExICsyNDcsMTIgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiAjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CiAjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKQEAgLTI1NCwxMCArMjY3LDEyIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CitDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWT15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0zNDUsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzgzLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODMsMTcgKzQwMCwxOCBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQorIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT15CiAjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9eQotCi0jCi0jIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCi0jCiBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQogIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQpAQCAtNDE0LDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyNSw5ICs0NDQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDk0LDYgKzUxMyw3IEBACiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTTI1UDgwPXkKIENPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRD15CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01NDMsNiArNTYzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTY3LDEwICs1ODgsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTU4Nyw2ICs2MDQsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjE0LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTYxMSw3ICs2MzEsNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjIzLDExICs2NDIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjQ5LDYgKzY3MSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjc2LDYgKzY5OSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY5MywxMyArNzE3LDE2IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTc2OCw2ICs3OTUsOSBAQAogIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03ODksNiArODE5LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKIENPTkZJR19NVjY0M1hYX0VUSD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtNzk3LDEwICs4MjgsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOXzgwMjExPXkKIENPTkZJR19MSUJFUlRBUz15CkBAIC04MjAsOSArODQ4LDcgQEAKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKICMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKICMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRINUsgaXMgbm90IHNldAotIyBDT05GSUdfQVRIOUsgaXMgbm90IHNldAotIyBDT05GSUdfQVI5MTcwX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKQEAgLTgzMiw2ICs4NTgsOCBAQAogIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04NTUsNiArODgzLDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtODc4LDEzICs5MDcsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTk0Myw2ICs5NzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTk4LDEwICsxMDM0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAyMywxMSArMTA1NSw0NyBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDQxLDMzICsxMTA5LDI4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDg3LDcgKzExNTAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMDYsMTAgKzExNjgsMTIgQEAKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKICMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CiBDT05GSUdfSElEX0tFTlNJTkdUT049eQogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMTIzLDkgKzExODcsMTQgQEAKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKICMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKICMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKICMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC0xMTUwLDE4ICsxMjE5LDIxIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEyNTIsMTEgKzEzMjQsMTQgQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAogQ09ORklHX01NQ19NVlNESU89eQogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1ZJQV9TRE1NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CiAKQEAgLTEyNjYsNyArMTM0MSw3IEBACiAjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldApAQCAtMTI3OCwxMSArMTM1MywxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEzMTQsNiArMTM5Miw3IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEzMjUsNiArMTQwNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzYwLDggKzE0NDAsMTEgQEAKICMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMzc5LDEwICsxNDYyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ1NSw3ICsxNTQxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUzMCw2ICsxNjE1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU0Nyw2ICsxNjMzLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU2NywxMiArMTY1NCwxNCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTU4MSwyNSArMTY3MCwxMiBAQAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTYyMyw3ICsxNjk5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNjY1LDExICsxNzQwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNzE0LDYgKzE3OTEsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9saXR0bGV0b25fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9saXR0bGV0b25fZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGI0OTY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbGl0dGxldG9uX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDc4MyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM1Ci0jIEZyaSBEZWMgMjEgMTE6MDY6MTkgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKLSMKLUNPTkZJR19DUFVfUFhBMzAwPXkKLUNPTkZJR19DUFVfUFhBMzEwPXkKLSMgQ09ORklHX0NQVV9QWEEzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotQ09ORklHX01BQ0hfTElUVExFVE9OPXkKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLUNPTkZJR19QWEFfU1NQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0MzPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotQ09ORklHX0lPXzM2PXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJvb3Rmc3R5cGU9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4xLjEwMDovbmZzcm9vdC8gaXA9MTkyLjE2OC4xLjEwMToxOTIuMTY4LjEuMTAwOjoyNTUuMjU1LjI1NS4wOjpldGgwOm9uIGNvbnNvbGU9dHR5UzIsMzg0MDAgbWVtPTY0TSIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZwotIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUFhBPXkKLUNPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLUNPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKaW5kZXggOGRhNzVkZS4uMjY0ZjUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCkBAIC0zMDQsNyArMzA0LDcgQEAKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDEwQzA4MDAwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDEwMjAwMDAwCiAjIENPTkZJR19aQk9PVF9ST00gaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCitDT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKaW5kZXggMzU3ZDQwMi4uYjNjOGNjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpAQCAtOTY5LDcgKzk2OSw2IEBACiAjCiBDT05GSUdfVVNCX09UR19VVElMUz15CiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCmluZGV4IGI1NGFkMmUuLjE1MGRlYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwpAQCAtNjExLDcgKzYxMSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02MzQsNyArNjM0LDggQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTj15CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC04MzQsNyArODM1LDI5IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKK0NPTkZJR19TTkRfRFJJVkVSUz15CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfTUNCU1A9eQorQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19QQU5ET1JBPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKK0NPTkZJR19TTkRfU09DX1RXTDQwMzA9eQorCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CiAjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldApAQCAtMTAyMCw3ICsxMDQzLDEzIEBACiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xMDg0LDkgKzExMTMsMTIgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogCitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRT15CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQorCiAjCiAjIEZpbGUgc3lzdGVtcwogIwpAQCAtMTQwNywzICsxNDM5LDEwIEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKKworIyBhZGRlZCBieSBoYW5kIGZvciBub3cKK0NPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKK0NPTkZJR19UV0w0MDMwX1VTQj15CitDT05GSUdfTU1DX09NQVBfSFM9eQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKaW5kZXggOGE0YTdlMi4uNWEzMDVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwpAQCAtMTcwMyw3ICsxNzAzLDE0IEBACiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwppbmRleCA5ZTIzODUyLi41MzgzY2QwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKQEAgLTEsMTUgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzQKLSMgTW9uIE1heSAgNCAxNDowNzoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2CisjIFNhdCBOb3YgIDcgMjA6NTI6MjEgMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTE4LDEzICsxNiwxMiBAQAogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQ2LDExICs0MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC02OSw3ICs2Nyw2IEBACiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC04Miw2ICs3OSwxMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CkBAIC05MSwxMyArOTIsMTcgQEAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMDksNyArMTE0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzMCwxOSArMTM1LDIyIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTUxLDI1ICsxNTksMjcgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09SSU9ONVg9eQorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBPcmlvbiBJbXBsZW1lbnRhdGlvbnMKQEAgLTE4Nyw2ICsxOTcsOSBAQAogQ09ORklHX01BQ0hfVFM3OFhYPXkKIENPTkZJR19NQUNIX01WMjEyMD15CiBDT05GSUdfTUFDSF9FRE1JTklfVjI9eQorQ09ORklHX01BQ0hfRDJORVQ9eQorQ09ORklHX01BQ0hfQklHRElTSz15CitDT05GSUdfTUFDSF9ORVQyQklHPXkKIENPTkZJR19NQUNIX01TUzI9eQogQ09ORklHX01BQ0hfV05SODU0VD15CiBDT05GSUdfTUFDSF9SRDg4RjUxODFMX0dFPXkKQEAgLTIwMiw3ICsyMTUsNyBAQAogQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfRkVST0NFT049eQogQ09ORklHX0NQVV9UTEJfRkVST0NFT049eQpAQCAtMjE1LDcgKzIyOCw3IEBACiBDT05GSUdfQVJNX1RIVU1CPXkKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTI0MCwxMSArMjUzLDEyIEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogQ09ORklHX09BQklfQ09NUEFUPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjU5LDEyICsyNzMsMTQgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0xFRFM9eQogQ09ORklHX0xFRFNfQ1BVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CitDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWT15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0zMDgsNiArMzI0LDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKQEAgLTM1Niw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszOTYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM5NCwxMSArNDEzLDE1IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTEsNiArNDM0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDIyLDkgKzQ0Niw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MzcsNiArNTYxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKQEAgLTU1Miw3ICs1NzcsOSBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTc2LDEwICs2MDMsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTU5Niw2ICs2MTksOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02MDQsNiArNjI5LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTYyMCw3ICs2NDYsNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjMyLDExICs2NTcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NTgsNiArNjg2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02ODUsNiArNzE0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzAzLDEzICs3MzMsMTYgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzc3LDYgKzgxMCw4IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtNzk4LDYgKzgzMyw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKQEAgLTgwNiwxMCArODQyLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODM1LDYgKzg2OCw3IEBACiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTg1NSwxMyArODg5LDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTkxMiw2ICs5NTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTY3LDIwICsxMDA4LDU1IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDMwLDYgKzExMDYsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA0MSw5ICsxMTE5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNTcsMzMgKzExMzMsMjYgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTA5Nyw3ICsxMTY2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTE2LDEwICsxMTg0LDExIEBACiAjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTExMzAsMTAgKzExOTksMTEgQEAKICMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTE2MCwxOCArMTIzMCwyMSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xMjQ4LDcgKzEzMjEsNiBAQAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CiAKQEAgLTEyNTgsNyArMTMzMCw3IEBACiAjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CiAKQEAgLTEyNjksMTEgKzEzNDEsMTQgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xMzA2LDYgKzEzODEsNyBAQAogQ09ORklHX1JUQ19EUlZfUzM1MzkwQT15CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMzQ0LDggKzE0MjAsMTEgQEAKICMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMzU4LDEwICsxNDM3LDEwIEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz1tCi0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GU19YQVRUUj15CiAjIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pCRDI9bQpAQCAtMTM3MCwxMCArMTQ0OSwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0NDYsNyArMTUyOCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MzcsNiArMTYxOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1NTIsNiArMTYzNCw3IEBACiBDT05GSUdfU0NIRURTVEFUUz15CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE1NzIsNiArMTY1NSw3IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQEAgLTE1NzksNiArMTY2Myw3IEBACiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CkBAIC0xNTg3LDI1ICsxNjcyLDEyIEBACiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjI5LDIwICsxNzAxLDE5IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KLUNPTkZJR19DUllQVE9fQUVBRDI9bQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KLUNPTkZJR19DUllQVE9fSEFTSDI9bQotQ09ORklHX0NSWVBUT19STkcyPW0KLUNPTkZJR19DUllQVE9fUENPTVA9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNjcwLDExICsxNzQxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2OTEsNyArMTc2NCw3IEBACiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApAQCAtMTcxOSw2ICsxNzkyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0NSWVBUT19ERVZfTVZfQ0VTQT15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNiODUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMzMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMQorIyBNb24gSnVsIDEzIDIyOjQ4OjQ5IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX0hBVkVfUFdNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xOAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKworIworIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cworIworQ09ORklHX0NQVV9QWEEzMDA9eQorQ09ORklHX0NQVV9QWEEzMTA9eQorQ09ORklHX0NQVV9QWEEzMjA9eQorQ09ORklHX0NQVV9QWEE5MzA9eQorQ09ORklHX0NQVV9QWEE5MzU9eQorIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NUQVJHQVRFMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRVhFREEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMjAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfWllMT05JVEU9eQorQ09ORklHX01BQ0hfTElUVExFVE9OPXkKK0NPTkZJR19NQUNIX1RBVk9SRVZCPXkKK0NPTkZJR19NQUNIX1NBQVI9eQorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g0NzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ISU1BTEFZQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NTQjcyNiBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEzeHg9eQorQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQzM9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CitDT05GSUdfSU9fMzY9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX09VVEVSX0NBQ0hFPXkKK0NPTkZJR19DQUNIRV9YU0MzTDI9eQorQ09ORklHX0lXTU1YVD15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjEuMTAxOjE5Mi4xNjguMS4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSBkZWJ1ZyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QWEEzeHg9eQorQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOPXkKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EPXkKK0NPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEU9eQorQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9QWEEyN3g9eQorQ09ORklHX0tFWUJPQVJEX1BYQTkzMF9ST1RBUlk9eQorQ09ORklHX0tFWUJPQVJEX0dQSU89eQorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01PVVNFX1BYQTkzMF9UUktCQUxMPXkKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9EQTkwMzQ9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX0dQSU9fTUFYNzMyWD15CitDT05GSUdfR1BJT19QQ0E5NTNYPXkKK0NPTkZJR19HUElPX1BDRjg1N1g9eQorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfR1BJT19NQVg3MzAxPXkKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT15CitDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHPXkKK0NPTkZJR19QREFfUE9XRVI9eQorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CQVRURVJZX0RBOTAzMD15CisjIENPTkZJR19CQVRURVJZX01BWDE3MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CitDT05GSUdfUE1JQ19EQTkwM1g9eQorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorQ09ORklHX0xDRF9URE8yNE09eQorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9QV009eQorQ09ORklHX0JBQ0tMSUdIVF9EQTkwM1g9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfNngxMT15CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89bQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorQ09ORklHX0xFRFNfREE5MDNYPW0KKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BXTSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CitDT05GSUdfUkVHVUxBVE9SX0RFQlVHPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUj15CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfREE5MDNYPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CitDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlk9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDPXkKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0xCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwppbmRleCA3ZDYxYWU2Li45NTNiYTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzMKLSMgVGh1IEp1bCAxNiAyMzozNjoxMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFNhdCBPY3QgMTcgMjM6MzI6MjQgMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQorQ09ORklHX0hBVkVfVENNPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTQ0LDExICs0NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MCwxNyArODEsMTUgQEAKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTMzLDYgKzEzMiw3IEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTY5LDExICsxNzAsMTMgQEAKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1UzMDA9eQogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIFNULUVyaWNzc29uIEFCIFUzMDAvVTMzMC9VMzM1L1UzNjUgUGxhdGZvcm0KQEAgLTE5NSw2ICsxOTgsNyBAQAogQ09ORklHX01BQ0hfVTMwMF9EVUFMX1JBTT15CiBDT05GSUdfVTMwMF9ERUJVRz15CiAjIENPTkZJR19NQUNIX1UzMDBfU0VNSV9JU19TSEFSRUQgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWT15CiAKICMKICMgQWxsIHRoZSBzZXR0aW5ncyBiZWxvdyBtdXN0IG1hdGNoIHRoZSBib290bG9hZGVyJ3Mgc2V0dGluZ3MKQEAgLTIwNyw3ICsyMTEsNyBAQAogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9WNFdCPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKQEAgLTIyMiw2ICsyMjYsNyBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIENPTkZJR19BUk1fVklDPXkKIENPTkZJR19BUk1fVklDX05SPTIKIENPTkZJR19DT01NT05fQ0xLREVWPXkKQEAgLTI0NSw2ICsyNTAsOCBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKQEAgLTI2NSw2ICsyNzIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKICMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldApAQCAtMzEzLDYgKzMyMSw3IEBACiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQogCkBAIC0zNTEsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTEsNiArNDAxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MDIsOSArNDEzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1Myw2ICs0NjQsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUyMCw2ICs1MzIsNyBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtNTQwLDEyICs1NTMsMTYgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01OTcsNiArNjE0LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjI5LDkgKzY0Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjUzLDE2ICs2NjgsMjEgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15CiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX01BWDE3MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC02OTAsMTAgKzcxMCwyNCBAQAogIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogQ09ORklHX0FCMzEwMF9DT1JFPXkKK0NPTkZJR19BQjMxMDBfT1RQPXkKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX0FCMzEwMD15CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03OTIsOSArODI2LDEwIEBACiAjCiBDT05GSUdfTU1DX0FSTU1NQ0k9eQogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtODIwLDEwICs4NTUsMTAgQEAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtODYzLDYgKzg5OCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC04NzgsMjcgKzkxNCwyNSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9BQjMxMDA9eQogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9QTDAzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BMMDMxIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0NPSDkwMTMzMT15CiBDT05GSUdfRE1BREVWSUNFUz15CiAKICMKICMgRE1BIERldmljZXMKICMKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MTMsNiArOTQ3LDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05NzUsNyArMTAxMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzMsNiArMTA2Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY2LDExICsxMTAxLDEzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEyMSw2ICsxMTU4LDcgQEAKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYmI3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTEyOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgorIyBUaHUgQXVnIDIwIDA5OjAyOjM3IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLnhjZXAtaXRlY2giCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CitDT05GSUdfU0xPQj15CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19NQVJLRVJTPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorIyBDT05GSUdfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSU5URUxNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NUQVJHQVRFMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRVhFREEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDQ3MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hJTUFMQVlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNzI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX01BQ0hfWENFUD15CitDT05GSUdfUFhBMjV4PXkKK0NPTkZJR19QWEFfU1NQPXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19YU0NBTEVfUE1VPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9bXRkNCByb290ZnN0eXBlPWpmZnMyIHJvIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9bQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QWEEyWFg9eQorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9bQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPW0KKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049bQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FETTEwMjE9bQorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19NQVg2NjUwPW0KKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPW0KKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TQTExMDA9bQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3p5bG9uaXRlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvenlsb25pdGVfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ5ZDA0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvenlsb25pdGVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzM2ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMwotIyBUdWUgT2N0IDIzIDEzOjMzOjIwIDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE4Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9QWEE9eQotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKLSMKLUNPTkZJR19DUFVfUFhBMzAwPXkKLUNPTkZJR19DUFVfUFhBMzEwPXkKLUNPTkZJR19DUFVfUFhBMzIwPXkKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9aWUxPTklURT15Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotQ09ORklHX1BYQTN4eD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfWFNDMz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLUNPTkZJR19JT18zNj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTAwOi9uZnMvcm9vdGZzLyBpcD0xOTIuMTY4LjEuMTAxOjE5Mi4xNjguMS4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMCwzODQwMCBtZW09NjRNIGRlYnVnIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLUNPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1BYQT15Ci1DT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzZ4MTE9eQotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfTkZTX0RJUkVDVElPPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1VTRVI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggOWVkMjM3Ny4uZDBkYWVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTE5LDMxICsxOSwyMSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisvKgorICogT24gQVJNLCBvcmRpbmFyeSBhc3NpZ25tZW50IChzdHIgaW5zdHJ1Y3Rpb24pIGRvZXNuJ3QgY2xlYXIgdGhlIGxvY2FsCisgKiBzdHJleC9sZHJleCBtb25pdG9yIG9uIHNvbWUgaW1wbGVtZW50YXRpb25zLiBUaGUgcmVhc29uIHdlIGNhbiB1c2UgaXQgZm9yCisgKiBhdG9taWNfc2V0KCkgaXMgdGhlIGNscmV4IG9yIGR1bW15IHN0cmV4IGRvbmUgb24gZXZlcnkgZXhjZXB0aW9uIHJldHVybi4KKyAqLwogI2RlZmluZSBhdG9taWNfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQogCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKIAogLyoKICAqIEFSTXY2IFVQIGFuZCBTTVAgc2FmZSBhdG9taWMgb3BzLiAgV2UgdXNlIGxvYWQgZXhjbHVzaXZlIGFuZAogICogc3RvcmUgZXhjbHVzaXZlIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGFyZSBhdG9taWMuICBXZSBtYXkgbG9vcAotICogdG8gZW5zdXJlIHRoYXQgdGhlIHVwZGF0ZSBoYXBwZW5zLiAgV3JpdGluZyB0byAndi0+Y291bnRlcicKLSAqIHdpdGhvdXQgdXNpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIFdJTEwgYnJlYWsgdGhlIGF0b21pYwotICogbmF0dXJlIG9mIHRoZXNlIG9wcy4KKyAqIHRvIGVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgaGFwcGVucy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljX3NldFxuIgotIjE6CWxkcmV4CSUwLCBbJTFdXG4iCi0iCXN0cmV4CSUwLCAlMiwgWyUxXVxuIgotIgl0ZXEJJTAsICMwXG4iCi0iCWJuZQkxYiIKLQk6ICI9JnIiICh0bXApCi0JOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQotCTogImNjIik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKQEAgLTE2Myw4ICsxNTMsNiBAQAogI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkIG9uIHByZS1BUk12NiBDUFVzCiAjZW5kaWYKIAotI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQotCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNjNhNDgxZi4uMzM4ZmYxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTg0LDcgKzg0LDcgQEAKIAkqcCA9IHJlcyB8IG1hc2s7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiByZXMgJiBtYXNrOworCXJldHVybiAocmVzICYgbWFzaykgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEwMSw3ICsxMDEsNyBAQAogCSpwID0gcmVzICYgfm1hc2s7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiByZXMgJiBtYXNrOworCXJldHVybiAocmVzICYgbWFzaykgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTExOCw3ICsxMTgsNyBAQAogCSpwID0gcmVzIF4gbWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGZlYWE3NWYuLjY2YzE2MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtNCw3ICs0LDcgQEAKICNpZm5kZWYgX19BU01BUk1fQ0FDSEVfSAogI2RlZmluZSBfX0FTTUFSTV9DQUNIRV9ICiAKLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCTUKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCUNPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQKICNkZWZpbmUgTDFfQ0FDSEVfQllURVMJCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGZkMDNmYjYuLjNkMGNkZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTQxNCw5ICs0MTQsMTQgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQogeworI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAorCWV4dGVybiB2b2lkIHY2X2ljYWNoZV9pbnZhbF9hbGwodm9pZCk7CisJdjZfaWNhY2hlX2ludmFsX2FsbCgpOworI2Vsc2UKIAlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEktY2FjaGVcbiIKIAkgICAgOgogCSAgICA6ICJyIiAoMCkpOworI2VuZGlmCiB9CiAKICNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKaW5kZXggYjNlNjU2Yy4uMjBhZTk2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaApAQCAtNjMsNiArNjMsMTEgQEAKIAlyZXR1cm4gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9jb25zdF9fIHJlYWRfY3B1aWRfdGNtc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfY3B1aWQoQ1BVSURfVENNKTsKK30KKwogLyoKICAqIEludGVsJ3MgWFNjYWxlMyBjb3JlIHN1cHBvcnRzIHNvbWUgdjYgZmVhdHVyZXMgKHN1cGVyc2VjdGlvbnMsIEwyKQogICogYnV0IGFkdmVydGlzZXMgaXRzZWxmIGFzIHY1IGFzIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHY2IElTQS4gIEZvcgpAQCAtNzMsNyArNzgsMTAgQEAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBjcHVfaXNfeHNjMyh2b2lkKQogewotCWlmICgocmVhZF9jcHVpZF9pZCgpICYgMHhmZmZmZTAwMCkgPT0gMHg2OTA1NjAwMCkKKwl1bnNpZ25lZCBpbnQgaWQ7CisJaWQgPSByZWFkX2NwdWlkX2lkKCkgJiAweGZmZmZlMDAwOworCS8qIEl0IGNvdmVycyBib3RoIEludGVsIElEIGFuZCBNYXJ2ZWxsIElEICovCisJaWYgKChpZCA9PSAweDY5MDU2MDAwKSB8fCAoaWQgPT0gMHg1NjA1NjAwMCkpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGMzYjkxMWUuLjZhYWMzZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC05OCw2ICs5OCw5IEBACiBleHRlcm4gaW50IGFybV9lbGZfcmVhZF9pbXBsaWVzX2V4ZWMoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqLCBpbnQpOwogI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsc3RrKSBhcm1fZWxmX3JlYWRfaW1wbGllc19leGVjKCYoZXgpLCBzdGspCiAKK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MpOworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyBkdW1wX3Rhc2tfcmVncworCiAjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCmluZGV4IGEwZTM5ZDVkMDAuLjIzNGEzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKQEAgLTEyMCwyNSArMTIwLDM5IEBACiAjZW5kaWYKIAogLyoKLSAqIFByZWZldGNoIGFib3J0IGhhbmRsZXIuICBJZiB0aGUgQ1BVIGhhcyBhbiBJRkFSIHVzZSB0aGF0LCBvdGhlcndpc2UKLSAqIHVzZSB0aGUgYWRkcmVzcyBvZiB0aGUgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoJUHJlZmV0Y2ggQWJvcnQgTW9kZWwKKyAqCT09PT09PT09PT09PT09PT0KKyAqCisgKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206CisgKgkgIGxlZ2FjeQktIG5vIElGU1IsIG5vIElGQVIKKyAqCSAgdjYJCS0gQVJNdjY6IElGU1IsIG5vIElGQVIKKyAqCSAgdjcJCS0gQVJNdjc6IElGU1IgYW5kIElGQVIKICAqLworCiAjdW5kZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCiAjdW5kZWYgTVVMVElfUEFCT1JUCiAKLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX0lGQVIKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWQogIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKICMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSKHJlZywgaW5zbikJbXJjIHAxNSwgMCwgcmVnLCBjcjYsIGNyMCwgMgorIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiBsZWdhY3lfcGFib3J0CiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTk9JRkFSCisjaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9WNgogIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKICMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSKHJlZywgaW5zbikJbW92IHJlZywgaW5zbgorIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2Nl9wYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9WNworIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY3X3BhYm9ydAogIyBlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmgKaW5kZXggNGI4ZTdmNS4uOGQ2MGFkMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oCkBAIC0yMTUsNiArMjE1LDcgQEAKICAqIElPUDNYWCBJL08gYW5kIE1lbSBzcGFjZSByZWdpb25zIGZvciBQQ0kgYXV0b2NvbmZpZ3VyYXRpb24KICAqLwogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX01FTV9QQQkweDgwMDAwMDAwCisjZGVmaW5lIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFCTB4MDgwMDAwMDAKIAogI2RlZmluZSBJT1AzWFhfUENJX0lPX1dJTkRPV19TSVpFCTB4MDAwMTAwMDAKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9JT19QQQkJMHg5MDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMDNlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIEFSTSBzcGVjaWZpYyBTTVAgaGVhZGVyLCB0aGlzIGNvbnRhaW5zIG91ciBpbXBsZW1lbnRhdGlvbgorICogZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTUFSTV9TTVBfUExBVF9ICisjZGVmaW5lIF9fQVNNQVJNX1NNUF9QTEFUX0gKKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisKKy8qIGFsbCBTTVAgY29uZmlndXJhdGlvbnMgaGF2ZSB0aGUgZXh0ZW5kZWQgQ1BVSUQgcmVnaXN0ZXJzICovCitzdGF0aWMgaW5saW5lIGludCB0bGJfb3BzX25lZWRfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjllZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaApAQCAtMCwwICsxLDMxIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBBdXRob3I6IFJpY2thcmQgQW5kZXJzc29uIDxyaWNrYXJkLmFuZGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01BUk1fVENNX0gKKyNkZWZpbmUgX19BU01BUk1fVENNX0gKKworI2lmbmRlZiBDT05GSUdfSEFWRV9UQ00KKyNlcnJvciAiWW91IHNob3VsZCBub3QgYmUgaW5jbHVkaW5nIHRjbS5oIHVubGVzcyB5b3UgaGF2ZSBhIFRDTSEiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIFRhZyB2YXJpYWJsZXMgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtZGF0YSBfX3NlY3Rpb24oLnRjbS5kYXRhKQorLyogVGFnIGNvbnN0YW50cyB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgX190Y21jb25zdCBfX3NlY3Rpb24oLnRjbS5yb2RhdGEpCisvKiBUYWcgZnVuY3Rpb25zIGluc2lkZSBUQ00gY2FsbGVkIGZyb20gb3V0c2lkZSBUQ00gd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtZnVuYyBfX2F0dHJpYnV0ZV9fKChsb25nX2NhbGwpKSBfX3NlY3Rpb24oLnRjbS50ZXh0KSBub2lubGluZQorLyogVGFnIGZ1bmN0aW9uIGluc2lkZSBUQ00gY2FsbGVkIGZyb20gaW5zaWRlIFRDTSAgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtbG9jYWxmdW5jIF9fc2VjdGlvbigudGNtLnRleHQpCisKK3ZvaWQgKnRjbV9hbGxvYyhzaXplX3QgbGVuKTsKK3ZvaWQgdGNtX2ZyZWUodm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYTQ1YWI1ZC4uYzJmMTYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1dCKSkKIAkJZHNiKCk7CiAKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKSkgeworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGdldF9jcHUoKSwgbW1fY3B1bWFzayhtbSkpKSB7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjNfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9GVUxMKSkKQEAgLTM2MCw2ICszNjAsNyBAQAogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJfQorCXB1dF9jcHUoKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCmluZGV4IDA3M2U4NWIuLmJjNjMxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKQEAgLTM1LDcgKzM1LDkgQEAKIAogI2RlZmluZSBBUk0oeC4uLikKICNkZWZpbmUgVEhVTUIoeC4uLikJeAorI2lmZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBXKGluc3RyKQlpbnN0ci53CisjZW5kaWYKICNkZWZpbmUgQlNZTShzeW0pCXN5bSArIDEKIAogI2Vsc2UJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCkBAIC00NSw3ICs0Nyw5IEBACiAKICNkZWZpbmUgQVJNKHguLi4pCXgKICNkZWZpbmUgVEhVTUIoeC4uLikKKyNpZmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgVyhpbnN0cikJaW5zdHIKKyNlbmRpZgogI2RlZmluZSBCU1lNKHN5bSkJc3ltCiAKICNlbmRpZgkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA4OWY3ZWFkLi40ZTUwNmQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNDAzLDYgKzQwMywxNSBAQAogI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzCQkoX19BUk1fTlJfQkFTRSs1KQogCiAvKgorICogKk5PVEUqOiBUaGlzIGlzIGEgZ2hvc3Qgc3lzY2FsbCBwcml2YXRlIHRvIHRoZSBrZXJuZWwuICBPbmx5IHRoZQorICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKKyAqIGV4aXN0ZW5jZS4gIERvbid0IGV2ZXIgdXNlIHRoaXMgZnJvbSB1c2VyIGNvZGUuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJNX05SX2NtcHhjaGcJCShfX0FSTV9OUl9CQVNFKzB4MDBmZmYwKQorI2VuZGlmCisKKy8qCiAgKiBUaGUgZm9sbG93aW5nIHN5c2NhbGxzIGFyZSBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgRUFCSS4KICAqLwogI2lmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAmJiAhZGVmaW5lZChfX0tFUk5FTF9fKQpAQCAtNDU2LDYgKzQ2NSw3IEBACiAgKiBVbmltcGxlbWVudGVkIChvciBhbHRlcm5hdGl2ZWx5IGltcGxlbWVudGVkKSBzeXNjYWxscwogICovCiAjZGVmaW5lIF9fSUdOT1JFX2ZhZHZpc2U2NF82NAkJMQorI2RlZmluZSBfX0lHTk9SRV9taWdyYXRlX3BhZ2VzCQkxCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzQ0NmFlZi4uNzkwODdkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQAogb2JqLSQoQ09ORklHX0FSTV9USFVNQkVFKQkrPSB0aHVtYmVlLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfQVJNX1VOV0lORCkJKz0gdW53aW5kLm8KK29iai0kKENPTkZJR19IQVZFX1RDTSkJCSs9IHRjbS5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggM2Q3MjdhOC4uZDI5MDNlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bWFjaC9lbnRyeS1tYWNyby5TPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgogCkBAIC0yNzIsNyArMjczLDE1IEBACiAJQAogCUAgIHIwIC0gaW5zdHJ1Y3Rpb24KIAlACisjaWZuZGVmCUNPTkZJR19USFVNQjJfS0VSTkVMCiAJbGRyCXIwLCBbcjIsICMtNF0KKyNlbHNlCisJbGRyaAlyMCwgW3IyLCAjLTJdCQkJQCBUaHVtYiBpbnN0cnVjdGlvbiBhdCBMUiAtIDIKKwlhbmQJcjksIHIwLCAjMHhmODAwCisJY21wCXI5LCAjMHhlODAwCQkJQCAzMi1iaXQgaW5zdHJ1Y3Rpb24gaWYgeHggPj0gMAorCWxkcmhocwlyOSwgW3IyXQkJCUAgYm90dG9tIDE2IGJpdHMKKwlvcnJocwlyMCwgcjksIHIwLCBsc2wgIzE2CisjZW5kaWYKIAlhZHIJcjksIEJTWU0oMWYpCiAJYmwJY2FsbF9mcGUKIApAQCAtMzAzLDIyICszMTIsMTYgQEAKIAl0c3QJcjMsICNQU1JfSV9CSVQKIAliaWNlcQlyOSwgcjksICNQU1JfSV9CSVQKIAotCUAKLQlAIHNldCBhcmdzLCB0aGVuIGNhbGwgbWFpbiBoYW5kbGVyCi0JQAotCUAgIHIwIC0gYWRkcmVzcyBvZiBmYXVsdGluZyBpbnN0cnVjdGlvbgotCUAgIHIxIC0gcG9pbnRlciB0byByZWdpc3RlcnMgb24gc3RhY2sKLQlACi0jaWZkZWYgTVVMVElfUEFCT1JUCiAJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisjaWZkZWYgTVVMVElfUEFCT1JUCiAJbGRyCXI0LCAuTENwcm9jZm5zCiAJbW92CWxyLCBwYwogCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KICNlbHNlCi0JQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKwlibAlDUFVfUEFCT1JUX0hBTkRMRVIKICNlbmRpZgogCW1zcgljcHNyX2MsIHI5CQkJQCBNYXliZSBlbmFibGUgaW50ZXJydXB0cwotCW1vdglyMSwgc3AJCQkJQCByZWdzCisJbW92CXIyLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgogCiAJQApAQCAtNjA2LDMzICs2MDksMzMgQEAKICBUSFVNQigJYWRkCXBjLCByOAkJCSkKIAlub3AKIAotCVcobW92KQlwYywgbHIJCQkJQCBDUCMwCisJbW92d19wYwlscgkJCQlAIENQIzAKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzEgKEZQRSkKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzIgKEZQRSkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMworCW1vdndfcGMJbHIJCQkJQCBDUCMzCiAjaWZkZWYgQ09ORklHX0NSVU5DSAogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzQgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzUgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzYgKE1hdmVyaWNrQ3J1bmNoKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNAotCVcobW92KQlwYywgbHIJCQkJQCBDUCM1Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzYKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNAorCW1vdndfcGMJbHIJCQkJQCBDUCM1CisJbW92d19wYwlscgkJCQlAIENQIzYKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCM3Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzgKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOQorCW1vdndfcGMJbHIJCQkJQCBDUCM3CisJbW92d19wYwlscgkJCQlAIENQIzgKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjOQogI2lmZGVmIENPTkZJR19WRlAKIAlXKGIpCWRvX3ZmcAkJCQlAIENQIzEwIChWRlApCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMSAoVkZQKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTAgKFZGUCkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTEgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTAgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTEgKFZGUCkKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMwotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNCAoRGVidWcpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzE1IChDb250cm9sKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMgorCW1vdndfcGMJbHIJCQkJQCBDUCMxMworCW1vdndfcGMJbHIJCQkJQCBDUCMxNCAoRGVidWcpCisJbW92d19wYwlscgkJCQlAIENQIzE1IChDb250cm9sKQogCiAjaWZkZWYgQ09ORklHX05FT04KIAkuYWxpZ24JNgpAQCAtNjc4LDcgKzY4MSw5IEBACiAJLndvcmQJbm9fZnAKIAkucHJldmlvdXMKIAotbm9fZnA6CW1vdglwYywgbHIKK0VOVFJZKG5vX2ZwKQorCW1vdglwYywgbHIKK0VORFBST0Mobm9fZnApCiAKIF9fdW5kX3Vzcl91bmtub3duOgogCWVuYWJsZV9pcnEKQEAgLTY5MSwxNiArNjk2LDE2IEBACiBfX3BhYnRfdXNyOgogCXVzcl9lbnRyeQogCi0jaWZkZWYgTVVMVElfUEFCT1JUCiAJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisjaWZkZWYgTVVMVElfUEFCT1JUCiAJbGRyCXI0LCAuTENwcm9jZm5zCiAJbW92CWxyLCBwYwogCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KICNlbHNlCi0JQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKwlibAlDUFVfUEFCT1JUX0hBTkRMRVIKICNlbmRpZgogCWVuYWJsZV9pcnEJCQkJQCBFbmFibGUgaW50ZXJydXB0cwotCW1vdglyMSwgc3AJCQkJQCByZWdzCisJbW92CXIyLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgogIFVOV0lORCguZm5lbmQJCSkKIAkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTczNCwxMyArNzM5LDYgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXQogI2VuZGlmCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKLSNpZmRlZiBDT05GSUdfQ1BVXzMydjZLCi0JY2xyZXgKLSNlbHNlCi0Jc3RyZXgJcjUsIHI0LCBbaXBdCQkJQCBDbGVhciBleGNsdXNpdmUgbW9uaXRvcgotI2VuZGlmCi0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19IQVNfVExTX1JFRykKIAltY3IJcDE1LCAwLCByMywgYzEzLCBjMCwgMwkJQCBzZXQgVExTIHJlZ2lzdGVyCiAjZWxpZiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQpAQCAtOTExLDEwICs5MDksMTAgQEAKIAkgKiBBIHNwZWNpYWwgZ2hvc3Qgc3lzY2FsbCBpcyB1c2VkIGZvciB0aGF0IChzZWUgdHJhcHMuYykuCiAJICovCiAJc3RtZmQJc3AhLCB7cjcsIGxyfQotCW1vdglyNywgIzB4ZmYwMAkJQCAweGZmZjAgaW50byByNyBmb3IgRUFCSQotCW9ycglyNywgcjcsICMweGYwCi0Jc3dpCSMweDlmZmZmMAorCWxkcglyNywgPTFmCQkJQCBpdCdzIDIwIGJpdHMKKwlzd2kJX19BUk1fTlJfY21weGNoZwogCWxkbWZkCXNwISwge3I3LCBwY30KKzE6CS53b3JkCV9fQVJNX05SX2NtcHhjaGcKIAogI2VsaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggODA3Y2ZlYi4uZjBmZTk1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJY21wIHIwLCByMgogCWJuZSBnbnVfdHJhY2UKIAlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQotCWJ4IGlwCisJbW92IHBjLCBpcAogCiBnbnVfdHJhY2U6CiAJbGRyIHIxLCBbc3AsICMyMF0JCQlAIGxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lCkBAIC0xMzUsNyArMTM1LDcgQEAKIAltb3YgbHIsIHBjCiAJbW92IHBjLCByMgogCWxkbWlhIHNwISwge3IwLXIzLCBpcCwgbHJ9Ci0JYnggaXAKKwltb3YgcGMsIGlwCiAKIEVOVFJZKG1jb3VudCkKIAlzdG1kYiBzcCEsIHtyMC1yMywgbHJ9CkBAIC00MjUsMTMgKzQyNSw2IEBACiAjZW5kaWYKIEVORFBST0Moc3lzX21tYXAyKQogCi1FTlRSWShwYWJvcnRfaWZhcikKLQkJbXJjCXAxNSwgMCwgcjAsIGNyNiwgY3IwLCAyCi1FTlRSWShwYWJvcnRfbm9pZmFyKQotCQltb3YJcGMsIGxyCi1FTkRQUk9DKHBhYm9ydF9pZmFyKQotRU5EUFJPQyhwYWJvcnRfbm9pZmFyKQotCiAjaWZkZWYgQ09ORklHX09BQklfQ09NUEFUCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKaW5kZXggYTRlYWY0Zi4uN2U5ZWQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwpAQCAtNzYsMTMgKzc2LDI3IEBACiAjaWZuZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCiAJLm1hY3JvCXN2Y19leGl0LCBycHNyCiAJbXNyCXNwc3JfY3hzZiwgXHJwc3IKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NkspCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9WNikKKwlsZHIJcjAsIFtzcF0KKwlzdHJleAlyMSwgcjIsIFtzcF0JCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorCWxkbWliCXNwLCB7cjEgLSBwY31eCQkJQCBsb2FkIHIxIC0gcGMsIGNwc3IKKyNlbHNlCisJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorI2VuZGlmCiAJLmVuZG0KIAogCS5tYWNybwlyZXN0b3JlX3VzZXJfcmVncywgZmFzdCA9IDAsIG9mZnNldCA9IDAKIAlsZHIJcjEsIFtzcCwgI1xvZmZzZXQgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCiAJbGRyCWxyLCBbc3AsICNcb2Zmc2V0ICsgU19QQ10hCUAgZ2V0IHBjCiAJbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NkspCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisjZWxpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1Y2KQorCXN0cmV4CXIxLCByMiwgW3NwXQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisjZW5kaWYKIAkuaWYJXGZhc3QKIAlsZG1kYglzcCwge3IxIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjEgLSBscgogCS5lbHNlCkBAIC05Niw4ICsxMTAsMTYgQEAKIAltb3YJXHJkLCBzcCwgbHNyICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwkuZW5kbQogI2Vsc2UJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKKwljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKIAlsZHIJcjAsIFtzcCwgI1NfU1BdCQkJQCB0b3Agb2YgdGhlIHN0YWNrCiAJbGRyCXIxLCBbc3AsICNTX1BDXQkJCUAgcmV0dXJuIGFkZHJlc3MKIAl0c3QJcjAsICM0CQkJCUAgb3JpZyBzdGFjayA4LWJ5dGUgYWxpZ25lZD8KQEAgLTExMCw2ICsxMzIsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MsIGZhc3QgPSAwLCBvZmZzZXQgPSAwCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAJbW92CXIyLCBzcAogCWxvYWRfdXNlcl9zcF9sciByMiwgcjMsIFxvZmZzZXQgKyBTX1NQCUAgY2FsbGluZyBzcCwgbHIKIAlsZHIJcjEsIFtzcCwgI1xvZmZzZXQgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCkBAIC0xMzAsNiArMTUzLDE0IEBACiAJbHNyCVxyZCwgXHJkLCAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJbm9wCisJLmVuZG0KICNlbmRpZgkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKaW5kZXggOTNhZDU3Ni4uYjk1MDVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2RlZmluZSBBVEFHX0NPUkUgMHg1NDQxMDAwMQogI2RlZmluZSBBVEFHX0NPUkVfU0laRSAoKDIqNCArIDMqNCkgPj4gMikKKyNkZWZpbmUgQVRBR19DT1JFX1NJWkVfRU1QVFkgKCgyKjQpID4+IDIpCiAKIAkuYWxpZ24JMgogCS50eXBlCV9fc3dpdGNoX2RhdGEsICVvYmplY3QKQEAgLTk2LDcgKzk3LDcgQEAKIAlibAlwcmludGhleDgKIAlhZHIJcjAsIHN0cl9hMgogCWJsCXByaW50YXNjaWkKLQlhZHIJcjMsIDNmCisJYWRyCXIzLCA0ZgogCWxkbWlhCXIzLCB7cjQsIHI1LCByNn0JCUAgZ2V0IG1hY2hpbmUgZGVzYyBsaXN0CiAJc3ViCXI0LCByMywgcjQJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKIAlhZGQJcjUsIHI1LCByNAkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwpAQCAtMjUxLDcgKzI1Miw4IEBACiAJYm5lCTFmCiAKIAlsZHIJcjUsIFtyMiwgIzBdCQkJQCBpcyBmaXJzdCB0YWcgQVRBR19DT1JFPwotCXN1YnMJcjUsIHI1LCAjQVRBR19DT1JFX1NJWkUKKwljbXAJcjUsICNBVEFHX0NPUkVfU0laRQorCWNtcG5lCXI1LCAjQVRBR19DT1JFX1NJWkVfRU1QVFkKIAlibmUJMWYKIAlsZHIJcjUsIFtyMiwgIzRdCiAJbGRyCXI2LCA9QVRBR19DT1JFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwppbmRleCBmNjkyZWZkLi42MGM2MmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTgzLDEwICs4NCwyNCBAQAogCWZsdXNoX2luc25zKHAtPmFkZHIsIDEpOwogfQogCisvKgorICogVGhlIGFjdHVhbCBkaXNhcm1pbmcgaXMgZG9uZSBoZXJlIG9uIGVhY2ggQ1BVIGFuZCBzeW5jaHJvbml6ZWQgdXNpbmcKKyAqIHN0b3BfbWFjaGluZS4gVGhpcyBzeW5jaHJvbml6YXRpb24gaXMgbmVjZXNzYXJ5IG9uIFNNUCB0byBhdm9pZCByZW1vdmluZworICogYSBwcm9iZSBiZXR3ZWVuIHRoZSBtb21lbnQgdGhlICdVbmRlZmluZWQgSW5zdHJ1Y3Rpb24nIGV4Y2VwdGlvbiBpcyByYWlzZWQKKyAqIGFuZCB0aGUgbW9tZW50IHRoZSBleGNlcHRpb24gaGFuZGxlciByZWFkcyB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gZnJvbQorICogbWVtb3J5LgorICovCitpbnQgX19rcHJvYmVzIF9fYXJjaF9kaXNhcm1fa3Byb2JlKHZvaWQgKnApCit7CisJc3RydWN0IGtwcm9iZSAqa3AgPSBwOworCSprcC0+YWRkciA9IGtwLT5vcGNvZGU7CisJZmx1c2hfaW5zbnMoa3AtPmFkZHIsIDEpOworCXJldHVybiAwOworfQorCiB2b2lkIF9fa3Byb2JlcyBhcmNoX2Rpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKLQkqcC0+YWRkciA9IHAtPm9wY29kZTsKLQlmbHVzaF9pbnNucyhwLT5hZGRyLCAxKTsKKwlzdG9wX21hY2hpbmUoX19hcmNoX2Rpc2FybV9rcHJvYmUsIHAsICZjcHVfb25saW5lX21hcCk7CiB9CiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzkwZmJlZS4uMGQ5NmQwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMjgsNiArMzI4LDE1IEBACiB9CiAKIC8qCisgKiBGaWxsIGluIHRoZSB0YXNrJ3MgZWxmcmVncyBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLgorICovCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKQoreworCWVsZl9jb3JlX2NvcHlfcmVncyhlbGZyZWdzLCB0YXNrX3B0X3JlZ3ModCkpOworCXJldHVybiAxOworfQorCisvKgogICogZmlsbCBpbiB0aGUgZnBlIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuLi4KICAqLwogaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHVzZXJfZnAgKmZwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCBkNGQ0Zjc3Li5jNmM1N2I2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImF0YWdzLmgiCisjaW5jbHVkZSAidGNtLmgiCiAKICNpZm5kZWYgTUVNX1NJWkUKICNkZWZpbmUgTUVNX1NJWkUJKDE2KjEwMjQqMTAyNCkKQEAgLTc0OSw2ICs3NTAsNyBAQAogI2VuZGlmCiAKIAljcHVfaW5pdCgpOworCXRjbV9pbml0KCk7CiAKIAkvKgogCSAqIFNldCB1cCB2YXJpb3VzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwb2ludGVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDE0MjNhMzQuLjJhNTczZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBSdXNzZWxsIEtpbmcKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKICNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCisjZGVmaW5lIFNXSV9TWVNfUkVTVEFSVAkJKDB4ZWYwMDAwMDB8X19OUl9yZXN0YXJ0X3N5c2NhbGx8X19OUl9PQUJJX1NZU0NBTExfQkFTRSkKIAogLyoKICAqIFdpdGggRUFCSSwgdGhlIHN5c2NhbGwgbnVtYmVyIGhhcyB0byBiZSBsb2FkZWQgaW50byByNy4KQEAgLTQ5LDYgKzUwLDE4IEBACiB9OwogCiAvKgorICogRWl0aGVyIHdlIHN1cHBvcnQgT0FCSSBvbmx5LCBvciB3ZSBoYXZlIEVBQkkgd2l0aCB0aGUgT0FCSQorICogY29tcGF0IGxheWVyIGVuYWJsZWQuICBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmCisgKiB1c2VyIHNwYWNlIGlzIEVBQkkgb3Igbm90LCBhbmQgaWYgbm90IHdlIG11c3Qgbm90IGNsb2JiZXIgcjcuCisgKiBBbHdheXMgdXNpbmcgdGhlIE9BQkkgc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCisgKiBhbGwgdGhvc2UgY2FzZXMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl0gPSB7CisJU1dJX1NZU19SRVNUQVJULAkvKiBzd2kJX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KKwkweGU0OWRmMDA0LAkJLyogbGRyCXBjLCBbc3BdLCAjNCAqLworfTsKKworLyoKICAqIGF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrKQpAQCAtNjQ1LDMyICs2NTgsMTIgQEAKIAkJCQlyZWdzLT5BUk1fcGMgLT0gNDsKICNlbHNlCiAJCQkJdTMyIF9fdXNlciAqdXNwOwotCQkJCXUzMiBzd2l2YWwgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAotCQkJCXJlZ3MtPkFSTV9zcCAtPSAxMjsKKwkJCQlyZWdzLT5BUk1fc3AgLT0gNDsKIAkJCQl1c3AgPSAodTMyIF9fdXNlciAqKXJlZ3MtPkFSTV9zcDsKIAotCQkJCS8qCi0JCQkJICogRWl0aGVyIHdlIHN1cHBvcnRzIE9BQkkgb25seSwgb3Igd2UgaGF2ZQotCQkJCSAqIEVBQkkgd2l0aCB0aGUgT0FCSSBjb21wYXQgbGF5ZXIgZW5hYmxlZC4KLQkJCQkgKiBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmIHVzZXIKLQkJCQkgKiBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0Ci0JCQkJICogbm90IGNsb2JiZXIgcjcuICBBbHdheXMgdXNpbmcgdGhlIE9BQkkKLQkJCQkgKiBzeXNjYWxsIHNvbHZlcyB0aGF0IGlzc3VlIGFuZCB3b3JrcyBmb3IKLQkJCQkgKiBhbGwgdGhvc2UgY2FzZXMuCi0JCQkJICovCi0JCQkJc3dpdmFsID0gc3dpdmFsIC0gX19OUl9TWVNDQUxMX0JBU0UgKyBfX05SX09BQklfU1lTQ0FMTF9CQVNFOwotCi0JCQkJcHV0X3VzZXIocmVncy0+QVJNX3BjLCAmdXNwWzBdKTsKLQkJCQkvKiBzd2kgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCQlwdXRfdXNlcigweGVmMDAwMDAwIHwgc3dpdmFsLCAmdXNwWzFdKTsKLQkJCQkvKiBsZHIJcGMsIFtzcF0sICMxMiAqLwotCQkJCXB1dF91c2VyKDB4ZTQ5ZGYwMGMsICZ1c3BbMl0pOwotCi0JCQkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXVzcCwKLQkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSh1c3AgKyAzKSk7Ci0KLQkJCQlyZWdzLT5BUk1fcGMgPSByZWdzLT5BUk1fc3AgKyA0OworCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgdXNwKTsKKwkJCQlyZWdzLT5BUk1fcGMgPSBLRVJOX1JFU1RBUlRfQ09ERTsKICNlbmRpZgogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKaW5kZXggMjdiZWVjZS4uNmZjZmU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaApAQCAtMSwxMiArMSwxNCBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBSdXNzZWxsIEtpbmcuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2RlZmluZSBLRVJOX1NJR1JFVFVSTl9DT0RFCShDT05GSUdfVkVDVE9SU19CQVNFICsgMHgwMDAwMDUwMCkKKyNkZWZpbmUgS0VSTl9SRVNUQVJUX0NPREUJKEtFUk5fU0lHUkVUVVJOX0NPREUgKyBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSkKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc2lncmV0dXJuX2NvZGVzWzddOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggZTBkMzI3NzAuLjU3MTYyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogLyoKICAqIGFzIGZyb20gMi41LCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGFuIGluaXRfdGFza3Mgc3RydWN0dXJlCkBAIC0xNTMsNyArMTU0LDcgQEAKIC8qCiAgKiBfX2NwdV9kaXNhYmxlIHJ1bnMgb24gdGhlIHByb2Nlc3NvciB0byBiZSBzaHV0ZG93bi4KICAqLwotaW50IF9fY3B1ZXhpdCBfX2NwdV9kaXNhYmxlKHZvaWQpCitpbnQgX19jcHVfZGlzYWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtMjAwLDcgKzIwMSw3IEBACiAgKiBjYWxsZWQgb24gdGhlIHRocmVhZCB3aGljaCBpcyBhc2tpbmcgZm9yIGEgQ1BVIHRvIGJlIHNodXRkb3duIC0KICAqIHdhaXRzIHVudGlsIHNodXRkb3duIGhhcyBjb21wbGV0ZWQsIG9yIGl0IGlzIHRpbWVkIG91dC4KICAqLwotdm9pZCBfX2NwdWV4aXQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWlmICghcGxhdGZvcm1fY3B1X2tpbGwoY3B1KSkKIAkJcHJpbnRrKCJDUFUldTogdW5hYmxlIHRvIGtpbGxcbiIsIGNwdSk7CkBAIC0yMTQsNyArMjE1LDcgQEAKICAqIG9mIHRoZSBvdGhlciBob3RwbHVnLWNwdSBjYXBhYmxlIGNvcmVzLCBzbyBwcmVzdW1hYmx5IGNvbWluZwogICogb3V0IG9mIGlkbGUgZml4ZXMgdGhpcy4KICAqLwotdm9pZCBfX2NwdWV4aXQgY3B1X2RpZSh2b2lkKQordm9pZCBfX3JlZiBjcHVfZGllKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtNTg2LDEyICs1ODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGFfZW5kOwogfTsKIAotLyogYWxsIFNNUCBjb25maWd1cmF0aW9ucyBoYXZlIHRoZSBleHRlbmRlZCBDUFVJRCByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRsYl9vcHNfbmVlZF9icm9hZGNhc3Qodm9pZCkKLXsKLQlyZXR1cm4gKChyZWFkX2NwdWlkX2V4dChDUFVJRF9FWFRfTU1GUjMpID4+IDEyKSAmIDB4ZikgPCAyOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9hbGwodm9pZCAqaWdub3JlZCkKIHsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwppbmRleCBkMzgzMWY2Li45YWI0MTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKQEAgLTM3LDYgKzM3LDEwIEBACiAJdTMyIHNjdV9jdHJsOwogCiAJc2N1X2N0cmwgPSBfX3Jhd19yZWFkbChzY3VfYmFzZSArIFNDVV9DVFJMKTsKKwkvKiBhbHJlYWR5IGVuYWJsZWQ/ICovCisJaWYgKHNjdV9jdHJsICYgMSkKKwkJcmV0dXJuOworCiAJc2N1X2N0cmwgfD0gMTsKIAlfX3Jhd193cml0ZWwoc2N1X2N0cmwsIHNjdV9iYXNlICsgU0NVX0NUUkwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwppbmRleCBkOGM4OGM2Li5hNzNhMzRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKQEAgLTE2NiwxMCArMTY2LDEyIEBACiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC8qCiAgKiB0YWtlIGEgbG9jYWwgdGltZXIgZG93bgogICovCi12b2lkIF9fY3B1ZXhpdCB0d2RfdGltZXJfc3RvcCh2b2lkKQordm9pZCB0d2RfdGltZXJfc3RvcCh2b2lkKQogewogCV9fcmF3X3dyaXRlbCgwLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5jIGIvYXJjaC9hcm0va2VybmVsL3RjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IC8qIG1lbWNweSAqLworI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIFBBR0VfU0hJRlQgKi8KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSAidGNtLmgiCisKKy8qIFNjcmVhbSBhbmQgd2FybiBhYm91dCBtaXN1c2UgKi8KKyNpZiAhZGVmaW5lZChJVENNX09GRlNFVCkgfHwgIWRlZmluZWQoSVRDTV9FTkQpIHx8IFwKKyAgICAhZGVmaW5lZChEVENNX09GRlNFVCkgfHwgIWRlZmluZWQoRFRDTV9FTkQpCisjZXJyb3IgIlRDTSBzdXBwb3J0IHNlbGVjdGVkIGJ1dCBvZmZzZXRzIG5vdCBkZWZpbmVkISIKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGdlbl9wb29sICp0Y21fcG9vbDsKKworLyogVENNIHNlY3Rpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgbGlua2VyICovCitleHRlcm4gY2hhciBfX2l0Y21fc3RhcnQsIF9fc2l0Y21fdGV4dCwgX19laXRjbV90ZXh0OworZXh0ZXJuIGNoYXIgX19kdGNtX3N0YXJ0LCBfX3NkdGNtX2RhdGEsIF9fZWR0Y21fZGF0YTsKKworLyoKKyAqIFRDTSBtZW1vcnkgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZHRjbV9yZXMgPSB7CisJLm5hbWUgPSAiRFRDTSBSQU0iLAorCS5zdGFydCA9IERUQ01fT0ZGU0VULAorCS5lbmQgPSBEVENNX0VORCwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpdGNtX3JlcyA9IHsKKwkubmFtZSA9ICJJVENNIFJBTSIsCisJLnN0YXJ0ID0gSVRDTV9PRkZTRVQsCisJLmVuZCA9IElUQ01fRU5ELAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGR0Y21faW9tYXBbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBEVENNX09GRlNFVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERUQ01fT0ZGU0VUKSwKKwkJLmxlbmd0aAkJPSAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpLAorCQkudHlwZQkJPSBNVF9VTkNBQ0hFRAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaXRjbV9pb21hcFtdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElUQ01fT0ZGU0VULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oSVRDTV9PRkZTRVQpLAorCQkubGVuZ3RoCQk9IChJVENNX0VORCAtIElUQ01fT0ZGU0VUICsgMSksCisJCS50eXBlCQk9IE1UX1VOQ0FDSEVECisJfQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgY2h1bmsgb2YgVENNIG1lbW9yeQorICovCit2b2lkICp0Y21fYWxsb2Moc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJaWYgKCF0Y21fcG9vbCkKKwkJcmV0dXJuIE5VTEw7CisKKwl2YWRkciA9IGdlbl9wb29sX2FsbG9jKHRjbV9wb29sLCBsZW4pOworCWlmICghdmFkZHIpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICh2b2lkICopIHZhZGRyOworfQorRVhQT1JUX1NZTUJPTCh0Y21fYWxsb2MpOworCisvKgorICogRnJlZSBhIGNodW5rIG9mIFRDTSBtZW1vcnkKKyAqLwordm9pZCB0Y21fZnJlZSh2b2lkICphZGRyLCBzaXplX3QgbGVuKQoreworCWdlbl9wb29sX2ZyZWUodGNtX3Bvb2wsICh1bnNpZ25lZCBsb25nKSBhZGRyLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTCh0Y21fZnJlZSk7CisKKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RjbV9iYW5rKHU4IHR5cGUsIHUzMiBvZmZzZXQsIHUzMiBleHBlY3RlZF9zaXplKQoreworCWNvbnN0IGludCB0Y21fc2l6ZXNbMTZdID0geyAwLCAtMSwgLTEsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwKKwkJCQkgICAgMjU2LCA1MTIsIDEwMjQsIC0xLCAtMSwgLTEsIC0xIH07CisJdTMyIHRjbV9yZWdpb247CisJaW50IHRjbV9zaXplOworCisJLyogUmVhZCB0aGUgc3BlY2lhbCBUQ00gcmVnaW9uIHJlZ2lzdGVyIGM5LCAwICovCisJaWYgKCF0eXBlKQorCQlhc20oIm1yYwlwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6ICI9ciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogIj1yIiAodGNtX3JlZ2lvbikpOworCisJdGNtX3NpemUgPSB0Y21fc2l6ZXNbKHRjbV9yZWdpb24gPj4gMikgJiAweDBmXTsKKwlpZiAodGNtX3NpemUgPCAwKSB7CisJCXByX2VycigiQ1BVOiAlc1RDTSBvZiB1bmtub3duIHNpemUhXG4iLAorCQkJdHlwZSA/ICJJIiA6ICJEIik7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiQ1BVOiBmb3VuZCAlc1RDTSAlZGsgQCAlMDh4LCAlc2VuYWJsZWRcbiIsCisJCQl0eXBlID8gIkkiIDogIkQiLAorCQkJdGNtX3NpemUsCisJCQkodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSwKKwkJCSh0Y21fcmVnaW9uICYgMSkgPyAiIiA6ICJub3QgIik7CisJfQorCisJaWYgKHRjbV9zaXplICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJcHJfY3JpdCgiQ1BVOiAlc1RDTSB3YXMgZGV0ZWN0ZWQgJWRrIGJ1dCBleHBlY3RlZCAlZGshXG4iLAorCQkgICAgICAgdHlwZSA/ICJJIiA6ICJEIiwKKwkJICAgICAgIHRjbV9zaXplLAorCQkgICAgICAgZXhwZWN0ZWRfc2l6ZSk7CisJCS8qIEFkanVzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZT8gd2hhdCBjYW4gd2UgZG8uLi4gKi8KKwl9CisKKwkvKiBGb3JjZSBtb3ZlIHRoZSBUQ00gYmFuayB0byB3aGVyZSB3ZSB3YW50IGl0LCBlbmFibGUgKi8KKwl0Y21fcmVnaW9uID0gb2Zmc2V0IHwgKHRjbV9yZWdpb24gJiAweDAwMDAwZmZlVSkgfCAxOworCisJaWYgKCF0eXBlKQorCQlhc20oIm1jcglwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6IC8qIE5vIG91dHB1dCBvcGVyYW5kcyAqLworCQkgICAgOiAiciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCisJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOworCisJcHJfZGVidWcoIkNQVTogbW92ZWQgJXNUQ00gJWRrIHRvICUwOHgsIGVuYWJsZWRcbiIsCisJCSB0eXBlID8gIkkiIDogIkQiLAorCQkgdGNtX3NpemUsCisJCSAodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSk7Cit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBUQ00gbWVtb3J5CisgKi8KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCWNoYXIgKnN0YXJ0OworCWNoYXIgKmVuZDsKKwljaGFyICpyYW07CisKKwkvKiBTZXR1cCBEVENNIGlmIHByZXNlbnQgKi8KKwlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgeworCQlzZXR1cF90Y21fYmFuaygwLCBEVENNX09GRlNFVCwKKwkJCSAgICAgICAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChkdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBkYXRhIGZyb20gUkFNIHRvIERUQ00gKi8KKwkJc3RhcnQgPSAmX19zZHRjbV9kYXRhOworCQllbmQgICA9ICZfX2VkdGNtX2RhdGE7CisJCXJhbSAgID0gJl9fZHRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBEVENNOiBjb3BpZWQgZGF0YSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KKworCS8qIFNldHVwIElUQ00gaWYgcHJlc2VudCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlzZXR1cF90Y21fYmFuaygxLCBJVENNX09GRlNFVCwKKwkJCSAgICAgICAoSVRDTV9FTkQgLSBJVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChpdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBjb2RlIGZyb20gUkFNIHRvIElUQ00gKi8KKwkJc3RhcnQgPSAmX19zaXRjbV90ZXh0OworCQllbmQgICA9ICZfX2VpdGNtX3RleHQ7CisJCXJhbSAgID0gJl9faXRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBJVENNOiBjb3BpZWQgY29kZSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyB0aGUgVENNIG1lbW9yeSBwb29sIGFuZCBoYXMgdG8gYmUgZG9uZSBsYXRlciwKKyAqIGR1cmluZyB0aGUgY29yZV9pbml0aWNhbGxzLCBzaW5jZSB0aGUgYWxsb2NhdG9yIGlzIG5vdCB5ZXQKKyAqIHVwIGFuZCBydW5uaW5nIHdoZW4gdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHJ1bnMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3RjbV9wb29sKHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCXUzMiBkdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19lZHRjbV9kYXRhOworCXUzMiBpdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19laXRjbV90ZXh0OworCWludCByZXQ7CisKKwkvKgorCSAqIFNldCB1cCBtYWxsb2MgcG9vbCwgMl4yID0gNCBieXRlcyBncmFudWxhcml0eSBzaW5jZQorCSAqIHRoZSBUQ00gaXMgc29tZXRpbWVzIGp1c3QgNCBLaUIuIE5COiBwYWdlcyBhbmQgY2FjaGUKKwkgKiBsaW5lIGFsaWdubWVudHMgZG9lcyBub3QgbWF0dGVyIGluIFRDTSEKKwkgKi8KKwl0Y21fcG9vbCA9IGdlbl9wb29sX2NyZWF0ZSgyLCAtMSk7CisKKwlwcl9kZWJ1ZygiU2V0dGluZyB1cCBUQ00gbWVtb3J5IHBvb2xcbiIpOworCisJLyogQWRkIHRoZSByZXN0IG9mIERUQ00gdG8gdGhlIFRDTSBwb29sICovCisJaWYgKHRjbV9zdGF0dXMgJiAoMSA8PCAxNikpIHsKKwkJaWYgKGR0Y21fcG9vbF9zdGFydCA8IERUQ01fRU5EKSB7CisJCQlyZXQgPSBnZW5fcG9vbF9hZGQodGNtX3Bvb2wsIGR0Y21fcG9vbF9zdGFydCwKKwkJCQkJICAgRFRDTV9FTkQgLSBkdGNtX3Bvb2xfc3RhcnQgKyAxLCAtMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJDUFUgRFRDTTogY291bGQgbm90IGFkZCBEVENNICIgXAorCQkJCSAgICAgICAicmVtYWluZGVyIHRvIHBvb2whXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJcHJfZGVidWcoIkNQVSBEVENNOiBBZGRlZCAlMDh4IGJ5dGVzIEAgJTA4eCB0byAiIFwKKwkJCQkgInRoZSBUQ00gbWVtb3J5IHBvb2xcbiIsCisJCQkJIERUQ01fRU5EIC0gZHRjbV9wb29sX3N0YXJ0ICsgMSwKKwkJCQkgZHRjbV9wb29sX3N0YXJ0KTsKKwkJfQorCX0KKworCS8qIEFkZCB0aGUgcmVzdCBvZiBJVENNIHRvIHRoZSBUQ00gcG9vbCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlpZiAoaXRjbV9wb29sX3N0YXJ0IDwgSVRDTV9FTkQpIHsKKwkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgaXRjbV9wb29sX3N0YXJ0LAorCQkJCQkgICBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIkNQVSBJVENNOiBjb3VsZCBub3QgYWRkIElUQ00gIiBcCisJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlwcl9kZWJ1ZygiQ1BVIElUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAorCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKKwkJCQkgSVRDTV9FTkQgLSBpdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBpdGNtX3Bvb2xfc3RhcnQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKHNldHVwX3RjbV9wb29sKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90Y20uaCBiL2FyY2gvYXJtL2tlcm5lbC90Y20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE1YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3RjbS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpOworI2Vsc2UKKy8qIE5vIFRDTSBzdXBwb3J0LCBqdXN0IGJsYW5rIGlubGluZXMgdG8gYmUgb3B0aW1pemVkIG91dCAqLworaW5saW5lIHZvaWQgdGNtX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggNGNkYzRhMC4uZDM4Y2RmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggNTdlYjBmNi4uM2YzNjFhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IFJ1c3NlbGwgS2luZwogICogIEZyYWdtZW50cyB0aGF0IGFwcGVhciB0aGUgc2FtZSBhcyBsaW51eC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgKEMpIExpbnVzIFRvcnZhbGRzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ1LDIxICs0NSwyMSBAQAogX19zZXR1cCgidXNlcl9kZWJ1Zz0iLCB1c2VyX2RlYnVnX3NldHVwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCk7CitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKIHZvaWQgZHVtcF9iYWNrdHJhY2VfZW50cnkodW5zaWduZWQgbG9uZyB3aGVyZSwgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGZyYW1lKQogewogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXByaW50aygiWzwlMDhseD5dICIsIHdoZXJlKTsKLQlwcmludF9zeW1ib2woIiglcykgIiwgd2hlcmUpOwotCXByaW50aygiZnJvbSBbPCUwOGx4Pl0gIiwgZnJvbSk7Ci0JcHJpbnRfc3ltYm9sKCIoJXMpXG4iLCBmcm9tKTsKKwljaGFyIHN5bTFbS1NZTV9TWU1CT0xfTEVOXSwgc3ltMltLU1lNX1NZTUJPTF9MRU5dOworCXNwcmludF9zeW1ib2woc3ltMSwgd2hlcmUpOworCXNwcmludF9zeW1ib2woc3ltMiwgZnJvbSk7CisJcHJpbnRrKCJbPCUwOGx4Pl0gKCVzKSBmcm9tIFs8JTA4bHg+XSAoJXMpXG4iLCB3aGVyZSwgc3ltMSwgZnJvbSwgc3ltMik7CiAjZWxzZQogCXByaW50aygiRnVuY3Rpb24gZW50ZXJlZCBhdCBbPCUwOGx4Pl0gZnJvbSBbPCUwOGx4Pl1cbiIsIHdoZXJlLCBmcm9tKTsKICNlbmRpZgogCiAJaWYgKGluX2V4Y2VwdGlvbl90ZXh0KHdoZXJlKSkKLQkJZHVtcF9tZW0oIkV4Y2VwdGlvbiBzdGFjayIsIGZyYW1lICsgNCwgZnJhbWUgKyA0ICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJCWR1bXBfbWVtKCIiLCAiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfQVJNX1VOV0lORApAQCAtODEsOSArODEsMTAgQEAKIC8qCiAgKiBEdW1wIG91dCB0aGUgY29udGVudHMgb2Ygc29tZSBtZW1vcnkgbmljZWx5Li4uCiAgKi8KLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKQorc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqbHZsLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgdG9wKQogewotCXVuc2lnbmVkIGxvbmcgcCA9IGJvdHRvbSAmIH4zMTsKKwl1bnNpZ25lZCBsb25nIGZpcnN0OwogCW1tX3NlZ21lbnRfdCBmczsKIAlpbnQgaTsKIApAQCAtOTUsMzMgKzk2LDM3IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgc3RyLCBib3R0b20sIHRvcCk7CisJcHJpbnRrKCIlcyVzKDB4JTA4bHggdG8gMHglMDhseClcbiIsIGx2bCwgc3RyLCBib3R0b20sIHRvcCk7CiAKLQlmb3IgKHAgPSBib3R0b20gJiB+MzE7IHAgPCB0b3A7KSB7Ci0JCXByaW50aygiJTA0bHg6ICIsIHAgJiAweGZmZmYpOworCWZvciAoZmlyc3QgPSBib3R0b20gJiB+MzE7IGZpcnN0IDwgdG9wOyBmaXJzdCArPSAzMikgeworCQl1bnNpZ25lZCBsb25nIHA7CisJCWNoYXIgc3RyW3NpemVvZigiIDEyMzQ1Njc4IikgKiA4ICsgMV07CiAKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgcCArPSA0KSB7Ci0JCQl1bnNpZ25lZCBpbnQgdmFsOworCQltZW1zZXQoc3RyLCAnICcsIHNpemVvZihzdHIpKTsKKwkJc3RyW3NpemVvZihzdHIpIC0gMV0gPSAnXDAnOwogCi0JCQlpZiAocCA8IGJvdHRvbSB8fCBwID49IHRvcCkKLQkJCQlwcmludGsoIiAgICAgICAgICIpOwotCQkJZWxzZSB7Ci0JCQkJX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCk7Ci0JCQkJcHJpbnRrKCIlMDh4ICIsIHZhbCk7CisJCWZvciAocCA9IGZpcnN0LCBpID0gMDsgaSA8IDggJiYgcCA8IHRvcDsgaSsrLCBwICs9IDQpIHsKKwkJCWlmIChwID49IGJvdHRvbSAmJiBwIDwgdG9wKSB7CisJCQkJdW5zaWduZWQgbG9uZyB2YWw7CisJCQkJaWYgKF9fZ2V0X3VzZXIodmFsLCAodW5zaWduZWQgbG9uZyAqKXApID09IDApCisJCQkJCXNwcmludGYoc3RyICsgaSAqIDksICIgJTA4bHgiLCB2YWwpOworCQkJCWVsc2UKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiA/Pz8/Pz8/PyIpOwogCQkJfQogCQl9Ci0JCXByaW50ayAoIlxuIik7CisJCXByaW50aygiJXMlMDRseDolc1xuIiwgbHZsLCBmaXJzdCAmIDB4ZmZmZiwgc3RyKTsKIAl9CiAKIAlzZXRfZnMoZnMpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX2luc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgZHVtcF9pbnN0cihjb25zdCBjaGFyICpsdmwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CiAJY29uc3QgaW50IHRodW1iID0gdGh1bWJfbW9kZShyZWdzKTsKIAljb25zdCBpbnQgd2lkdGggPSB0aHVtYiA/IDQgOiA4OwogCW1tX3NlZ21lbnRfdCBmczsKKwljaGFyIHN0cltzaXplb2YoIjAwMDAwMDAwICIpICogNSArIDIgKyAxXSwgKnAgPSBzdHI7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTMyLDcgKzEzNyw2IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiQ29kZTogIik7CiAJZm9yIChpID0gLTQ7IGkgPCAxOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZhbCwgYmFkOwogCkBAIC0xNDIsMTMgKzE0NiwxNCBAQAogCQkJYmFkID0gX19nZXRfdXNlcih2YWwsICYoKHUzMiAqKWFkZHIpW2ldKTsKIAogCQlpZiAoIWJhZCkKLQkJCXByaW50ayhpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLCB3aWR0aCwgdmFsKTsKKwkJCXAgKz0gc3ByaW50ZihwLCBpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLAorCQkJCQl3aWR0aCwgdmFsKTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoImJhZCBQQyB2YWx1ZS4iKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAiYmFkIFBDIHZhbHVlIik7CiAJCQlicmVhazsKIAkJfQogCX0KLQlwcmludGsoIlxuIik7CisJcHJpbnRrKCIlc0NvZGU6ICVzXG4iLCBsdmwsIHN0cik7CiAKIAlzZXRfZnMoZnMpOwogfQpAQCAtMjI0LDE4ICsyMjksMTkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCi0JcHJpbnRrKCJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKKwlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJcHJpbnRfbW9kdWxlcygpOwogCV9fc2hvd19yZWdzKHJlZ3MpOwotCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKLQkJdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCB0aHJlYWQgKyAxKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiUHJvY2VzcyAlLipzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAorCQlUQVNLX0NPTU1fTEVOLCB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykgfHwgaW5faW50ZXJydXB0KCkpIHsKLQkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCisJCWR1bXBfbWVtKEtFUk5fRU1FUkcsICJTdGFjazogIiwgcmVncy0+QVJNX3NwLAogCQkJIFRIUkVBRF9TSVpFICsgKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzaykpOwogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KIH0KIApAQCAtMjUwLDEzICsyNTYsMTQgQEAKIAogCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKIAlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKQEAgLTI2NCw3ICsyNzEsNiBAQAogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAKLQlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCkBAIC0zNDksNyArMzU1LDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfVU5ERUZJTkVEKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzICglZCk6IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCiAJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcGMpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fSU5GTywgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTQwMCw3ICs0MDYsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiWyVkXSAlczogb2Jzb2xldGUgc3lzdGVtIGNhbGwgJTA4eC5cbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbik7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FUlIsIHJlZ3MpOwogCX0KICNlbmRpZgogCkBAIC00MTgsMTIgKzQyNCwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBkb19jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsYWdzKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZlX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJaWYgKGVuZCA8IHN0YXJ0IHx8IGZsYWdzKQogCQlyZXR1cm47CiAKLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5hY3RpdmVfbW0sIHN0YXJ0KTsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKIAlpZiAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpIHsKIAkJaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCkKIAkJCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKQEAgLTQzMiw2ICs0NDAsNyBAQAogCiAJCWZsdXNoX2NhY2hlX3VzZXJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTsKIAl9CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIH0KIAogLyoKQEAgLTUxOSw3ICs1MjgsNyBAQAogCSAqIF9fa3VzZXJfY21weGNoZyBjb2RlIGluIGVudHJ5LWFybXYuUyBzaG91bGQgYmUgYXdhcmUgb2YgaXRzCiAJICogZXhpc3RlbmNlLiAgRG9uJ3QgZXZlciB1c2UgdGhpcyBmcm9tIHVzZXIgY29kZS4KIAkgKi8KLQljYXNlIDB4ZmZmMDoKKwljYXNlIE5SKGNtcHhjaGcpOgogCWZvciAoOzspIHsKIAkJZXh0ZXJuIHZvaWQgZG9fRGF0YUFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTU2NCw3ICs1NzMsNyBAQAogCQkgICBpZiBub3QgaW1wbGVtZW50ZWQsIHJhdGhlciB0aGFuIHJhaXNpbmcgU0lHSUxMLiAgVGhpcwogCQkgICB3YXkgdGhlIGNhbGxpbmcgcHJvZ3JhbSBjYW4gZ3JhY2VmdWxseSBkZXRlcm1pbmUgd2hldGhlcgogCQkgICBhIGZlYXR1cmUgaXMgc3VwcG9ydGVkLiAgKi8KLQkJaWYgKG5vIDw9IDB4N2ZmKQorCQlpZiAoKG5vICYgMHhmZmZmKSA8PSAweDdmZikKIAkJCXJldHVybiAtRU5PU1lTOwogCQlicmVhazsKIAl9CkBAIC01NzYsNyArNTg1LDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfU1lTQ0FMTCkgewogCQlwcmludGsoIlslZF0gJXM6IGFybSBzeXNjYWxsICVkXG4iLAogCQkgICAgICAgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIG5vKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cigiIiwgcmVncyk7CiAJCWlmICh1c2VyX21vZGUocmVncykpIHsKIAkJCV9fc2hvd19yZWdzKHJlZ3MpOwogCQkJY19iYWNrdHJhY2UocmVncy0+QVJNX2ZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7CkBAIC02NTMsNyArNjYyLDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfQkFEQUJPUlQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBiYWQgZGF0YSBhYm9ydDogY29kZSAlZCBpbnN0ciAweCUwOGx4XG4iLAogCQkJdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIGNvZGUsIGluc3RyKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cihLRVJOX0VSUiwgcmVncyk7CiAJCXNob3dfcHRlKGN1cnJlbnQtPm1tLCBhZGRyKTsKIAl9CiAjZW5kaWYKQEAgLTc0Miw2ICs3NTEsOCBAQAogCSAqLwogCW1lbWNweSgodm9pZCAqKUtFUk5fU0lHUkVUVVJOX0NPREUsIHNpZ3JldHVybl9jb2RlcywKIAkgICAgICAgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpOworCW1lbWNweSgodm9pZCAqKUtFUk5fUkVTVEFSVF9DT0RFLCBzeXNjYWxsX3Jlc3RhcnRfY29kZSwKKwkgICAgICAgc2l6ZW9mKHN5c2NhbGxfcmVzdGFydF9jb2RlKSk7CiAKIAlmbHVzaF9pY2FjaGVfcmFuZ2UodmVjdG9ycywgdmVjdG9ycyArIFBBR0VfU0laRSk7CiAJbW9kaWZ5X2RvbWFpbihET01BSU5fVVNFUiwgRE9NQUlOX0NMSUVOVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKaW5kZXggMzliYWYxMS4uNzg2YWMyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpAQCAtMjYsNiArMjYsMTUgQEAKICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5zdWJzZXQuc3dkZXYuYWJpL2luZGV4Lmh0bWwKICAqLwogCisjaWYgIWRlZmluZWQgKF9fQVJNX0VBQklfXykKKyN3YXJuaW5nIFlvdXIgY29tcGlsZXIgZG9lcyBub3QgaGF2ZSBFQUJJIHN1cHBvcnQuCisjd2FybmluZyAgICBBUk0gdW53aW5kIGlzIGtub3duIHRvIGNvbXBpbGUgb25seSB3aXRoIEVBQkkgY29tcGlsZXJzLgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZWxpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8PSAyKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBpcyB0b28gYnVnZ3k7IGl0IGlzIGtub3duIHRvIG5vdCBjb21waWxlIEFSTSB1bndpbmQgc3VwcG9ydC4KKyN3YXJuaW5nICAgIENoYW5nZSBjb21waWxlciBvciBkaXNhYmxlIEFSTV9VTldJTkQgb3B0aW9uLgorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDVjYzQ4MTIuLmFlY2Y4N2RmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTk5LDYgKzE5OSw2MyBAQAogCX0KIAlfZWRhdGFfbG9jID0gX19kYXRhX2xvYyArIFNJWkVPRiguZGF0YSk7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KKyAgICAgICAgLyoKKwkgKiBXZSBhbGlnbiBldmVyeXRoaW5nIHRvIGEgcGFnZSBib3VuZGFyeSBzbyB3ZSBjYW4KKwkgKiBmcmVlIGl0IGFmdGVyIGluaXQgaGFzIGNvbW1lbmNlZCBhbmQgVENNIGNvbnRlbnRzIGhhdmUKKwkgKiBiZWVuIGNvcGllZCB0byBpdHMgZGVzdGluYXRpb24uCisJICovCisJLnRjbV9zdGFydCA6IHsKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJCV9fdGNtX3N0YXJ0ID0gLjsKKwkJX19pdGNtX3N0YXJ0ID0gLjsKKwl9CisKKwkvKgorCSAqIExpbmsgdGhlc2UgdG8gdGhlIElUQ00gUkFNCisJICogUHV0IFZNQSB0byB0aGUgVENNIGFkZHJlc3MgYW5kIExNQSB0byB0aGUgY29tbW9uIFJBTQorCSAqIGFuZCB3ZSdsbCB1cGxvYWQgdGhlIGNvbnRlbnRzIGZyb20gUkFNIHRvIFRDTSBhbmQgZnJlZQorCSAqIHRoZSB1c2VkIFJBTSBhZnRlciB0aGF0LgorCSAqLworCS50ZXh0X2l0Y20gSVRDTV9PRkZTRVQgOiBBVChfX2l0Y21fc3RhcnQpCisJeworCQlfX3NpdGNtX3RleHQgPSAuOworCQkqKC50Y20udGV4dCkKKwkJKigudGNtLnJvZGF0YSkKKwkJLiA9IEFMSUdOKDQpOworCQlfX2VpdGNtX3RleHQgPSAuOworCX0KKworCS8qCisJICogUmVzZXQgdGhlIGRvdCBwb2ludGVyLCB0aGlzIGlzIG5lZWRlZCB0byBjcmVhdGUgdGhlCisJICogcmVsYXRpdmUgX19kdGNtX3N0YXJ0IGJlbG93ICh0byBiZSB1c2VkIGFzIGV4dGVybiBpbiBjb2RlKS4KKwkgKi8KKwkuID0gQUREUigudGNtX3N0YXJ0KSArIFNJWkVPRigudGNtX3N0YXJ0KSArIFNJWkVPRigudGV4dF9pdGNtKTsKKworCS5kdGNtX3N0YXJ0IDogeworCQlfX2R0Y21fc3RhcnQgPSAuOworCX0KKworCS8qIFRPRE86IGFkZCByZW1haW5kZXIgb2YgSVRDTSBhcyB3ZWxsLCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkYXRhISAqLworCS5kYXRhX2R0Y20gRFRDTV9PRkZTRVQgOiBBVChfX2R0Y21fc3RhcnQpCisJeworCQkuID0gQUxJR04oNCk7CisJCV9fc2R0Y21fZGF0YSA9IC47CisJCSooLnRjbS5kYXRhKQorCQkuID0gQUxJR04oNCk7CisJCV9fZWR0Y21fZGF0YSA9IC47CisJfQorCisJLyogUmVzZXQgdGhlIGRvdCBwb2ludGVyIG9yIHRoZSBsaW5rZXIgZ2V0cyBjb25mdXNlZCAqLworCS4gPSBBRERSKC5kdGNtX3N0YXJ0KSArIFNJWkVPRiguZGF0YV9kdGNtKTsKKworCS8qIEVuZCBtYXJrZXIgZm9yIGZyZWVpbmcgVENNIGNvcHkgaW4gbGlua2VkIG9iamVjdCAqLworCS50Y21fZW5kIDogQVQoQUREUiguZHRjbV9zdGFydCkgKyBTSVpFT0YoLmRhdGFfZHRjbSkpeworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkJX190Y21fZW5kID0gLjsKKwl9CisjZW5kaWYKKwogCS5ic3MgOiB7CiAJCV9fYnNzX3N0YXJ0ID0gLjsJLyogQlNTCQkJCSovCiAJCSooLmJzcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUwppbmRleCA2YWUwNGRiLi42ZWUyZjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY29weV9wYWdlLlMKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCkBAIC0xMiw4ICsxMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAotI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaLzY0IFBMRCggLTEgKSkKKyNkZWZpbmUgQ09QWV9DT1VOVCAoUEFHRV9TWiAvICgyICogTDFfQ0FDSEVfQllURVMpIFBMRCggLTEgKSkKIAogCQkudGV4dAogCQkuYWxpZ24JNQpAQCAtMjYsMTcgKzI3LDE2IEBACiBFTlRSWShjb3B5X3BhZ2UpCiAJCXN0bWZkCXNwISwge3I0LCBscn0JCQlACTIKIAlQTEQoCXBsZAlbcjEsICMwXQkJKQotCVBMRCgJcGxkCVtyMSwgIzMyXQkJKQorCVBMRCgJcGxkCVtyMSwgI0wxX0NBQ0hFX0JZVEVTXQkJKQogCQltb3YJcjIsICNDT1BZX0NPVU5UCQkJQAkxCiAJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLTE6CVBMRCgJcGxkCVtyMSwgIzY0XQkJKQotCVBMRCgJcGxkCVtyMSwgIzk2XQkJKQotMjoJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0Ci0JCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLQkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorMToJUExEKAlwbGQJW3IxLCAjMiAqIEwxX0NBQ0hFX0JZVEVTXSkKKwlQTEQoCXBsZAlbcjEsICMzICogTDFfQ0FDSEVfQllURVNdKQorMjoKKwkucmVwdAkoMiAqIEwxX0NBQ0hFX0JZVEVTIC8gMTYgLSAxKQogCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAogCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAorCS5lbmRyCiAJCXN1YnMJcjIsIHIyLCAjMQkJCUAJMQogCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAogCQlsZG1ndGlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGUzNWQ1NGQuLjJmZDg4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0yODksMTMgKzI4OSw2IEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgogCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKLQlib29sICJBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdCBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgUmV2IEEgb3IgQiBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMuCi0KIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzIyLDcgKzMxNSwxNiBAQAogCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IgogCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcyMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgdGhhdCBlbWJlZHMgb25seSBvbmUgU0QvTU1DIHNsb3QuCisKK2NvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQworCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IHdpdGggMiBTRC9NTUMgU2xvdHMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgd2l0aCAyIFNEL01NQyBTbG90cy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgQVQ5MVNBTTlHMjAtRUsgcmV2LiBDIGFuZAorCSAgb253YXJkcy4KIAogY29uZmlnIE1BQ0hfQ1BVOUcyMAogCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgpAQCAtMzkyLDcgKzM5NCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgZGF0YSBidXMgaW50ZXJmYWNlIHRvIE5BTkQgZmxhc2giCi0JZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0FUOTFTQU05RzQ1RUtFUyB8fCBNQUNIX0FUOTFDQVA5QURLKQorCWRlcGVuZHMgb24gKE1BQ0hfQVQ5MVNBTTkyNjBFSyB8fCBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOUcxMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMgfHwgTUFDSF9BVDkxU0FNOUc0NUVLRVMgfHwgTUFDSF9BVDkxQ0FQOUFESykKIAloZWxwCiAJICBPbiBBVDkxU0FNOTI2eCBib2FyZHMgYm90aCB0eXBlcyBvZiBOQU5EIGZsYXNoIGNhbiBiZSBwcmVzZW50CiAJICAoOCBhbmQgMTYgYml0IGRhdGEgYnVzIHdpZHRoKS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCmluZGV4IDQxMmFhNDkuLmQxZjc3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYwpAQCAtNzcxLDkgKzc3MSw5IEBACiAgKiAgQUM5NwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTdfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDX01PRFVMRSkKIHN0YXRpYyB1NjQgYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGFjOTdfZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBhYzk3X2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWM5N19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC03ODksNyArNzg5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFjYXA5X2FjOTdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhYzk3YyIsCisJLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKQEAgLTgwMCw3ICs4MDAsNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCiB9OwogCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CkBAIC04MTgsNyArODE4LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFjYXA5X2FjOTdfZGV2aWNlKTsKIH0KICNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwppbmRleCBkNzQ2ZTg2Li4zMzJiNzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKQEAgLTI0LDExICsyNCw1OSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0X2hkbWFjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmF0ZG1hX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0gaGRtYWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1hY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpCit7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgVVNCIEhvc3QgKE9IQ0kpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01NTAsNiArNTk4LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9BQzk3QywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9hYzk3YyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZhYzk3X2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWM5N19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYWM5N19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsJLyogQUM5N0ZTICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ5LCAwKTsJLyogQUM5N0NLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ3LCAwKTsJLyogQUM5N1RYICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsJLyogQUM5N1JYICovCisKKwkvKiByZXNldCAqLworCWlmIChkYXRhLT5yZXNldF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJlc2V0X3BpbiwgMCk7CisKKwlhYzk3X2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTczNSw3ICs4MzgsNyBAQAogICogIFdhdGNoZG9nCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV93ZHRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJhdDkxX3dkdCIsCiAJLmlkCQk9IC0xLApAQCAtMTIyMCw2ICsxMzIzLDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogeworCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwogCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKaW5kZXggNzI4MTg2NS4uZDM0NWY1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpAQCAtMjEsMTEgKzIxLDU3IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0lEX0RNQSwKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfRE1BLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRfaGRtYWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdF9oZG1hYyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmaGRtYWNfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhdGRtYV9wZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQoreworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGF0ZG1hX3BkYXRhLmNhcF9tYXNrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0X2hkbWFjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpIHt9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0zOTgsNiArNDQ0LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0lEX0FDOTdDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9hYzk3X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMCk7CS8qIEFDOTdGUyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMCk7CS8qIEFDOTdDSyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIEFDOTdUWCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMCk7CS8qIEFDOTdSWCAqLworCisJLyogcmVzZXQgKi8KKwlpZiAoZGF0YS0+cmVzZXRfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOworCisJYWM5N19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExMDMsNiArMTIwNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKKwlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKaW5kZXggODNhMWEwZi4uZDY5NDA4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIC8qCiAgKiBBQzk3CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0geworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0gewogLy8JLnJlc2V0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYwppbmRleCA4YzBiNzFjLi43YzFlMzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKQEAgLTM0MCw3ICszNDAsNyBAQAogLyoKICAqIEFDOTcKICAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CiAJLnJlc2V0X3Bpbgk9IEFUOTFfUElOX1BBMTMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwppbmRleCBhMjhlNTNmLi5hNDEwMmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAqIFNQSSBkZXZpY2VzLgogICovCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkKKyNpZiAhKGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTEpKQogCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KIAkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAogCQkuY2hpcF9zZWxlY3QJPSAxLApAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBNQUNCIEV0aGVybmV0IGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMxMiwKKwkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjAsCiAJLmlzX3JtaWkJPSAxLAogfTsKIApAQCAtMTk0LDI0ICsxOTQsMjcgQEAKIAogLyoKICAqIE1DSSAoU0QvTU1DKQotICogZGV0X3BpbiBhbmQgd3BfcGluIGFyZSBub3QgY29ubmVjdGVkCisgKiB3cF9waW4gaXMgbm90IGNvbm5lY3RlZAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0lfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewogCS5zbG90WzBdID0gewogCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRU5PREVWLAorCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDMiwKIAkJLndwX3BpbgkJPSAtRU5PREVWLAogCX0sCiAJLnNsb3RbMV0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEM5LAogCQkud3BfcGluCQk9IC1FTk9ERVYsCiAJfSwKIAogfTsKICNlbHNlCi1zdGF0aWMgc3RydWN0IGFtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBhdDkxX21tY19kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CisJLnNsb3RfYgkJPSAxLAkvKiBPbmx5IG9uZSBzbG90IHNvIHVzZSBzbG90IEIgKi8KKwkud2lyZTQJCT0gMSwKKwkuZGV0X3Bpbgk9IEFUOTFfUElOX1BDOSwKIH07CiAjZW5kaWYKIApAQCAtMjIxLDEzICsyMjQsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewogCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwogCQkubmFtZQkJCT0gImRzNSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEyLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAogCQkuYWN0aXZlX2xvdwkJPSAxLAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAogCX0sCiAJewkvKiAicG93ZXIiIGxlZCwgeWVsbG93ICovCiAJCS5uYW1lCQkJPSAiZHMxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTMsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjksCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKIAl9CiB9OwpAQCAtMjU0LDcgKzI1NywxMSBAQAogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKIAkvKiBNTUMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCiAJYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbW1jX2RhdGEpOworI2Vsc2UKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CisjZW5kaWYKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CiAJLyogTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCmluZGV4IGI4NTU4ZWEuLjY0YzM4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKQEAgLTMxMSw2ICszMTEsMTQgQEAKIAogCiAvKgorICogQUM5NworICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKKyAqLworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKK307CisKKworLyoKICAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcwogICovCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKQEAgLTM3Miw2ICszODAsOCBAQAogCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOwogCS8qIFB1c2ggQnV0dG9ucyAqLwogCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOworCS8qIEFDOTcgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWM5NygmZWtfYWM5N19kYXRhKTsKIAkvKiBMRURzICovCiAJYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7CiAJYXQ5MV9wd21fbGVkcyhla19wd21fbGVkLCBBUlJBWV9TSVpFKGVrX3B3bV9sZWQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggOTRmZmI1Yy4uYmQyOGU5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTIxMSw2ICsyMTEsMTQgQEAKIAogCiAvKgorICogQUM5NworICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKKyAqLworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKK307CisKKworLyoKICAqIExFRHMKICAqLwogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CkBAIC0yOTksNiArMzA3LDggQEAKIAlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CiAJLyogTENEIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfbGNkYygmZWtfbGNkY19kYXRhKTsKKwkvKiBBQzk3ICovCisJYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7CiAJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCk7CiAJLyogTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggMzRhOTUwMi4uYzIyZGYzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHMjAJMHgwMTk5MDVhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05Ukw2NAkweDAxOWIwM2EwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDUJMHg4MTliMDVhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1TVJMCTB4ODE5YjA1YTIJLyogYWthIDlHNDUtRVMyICYgbm9uIEVTIGxvdHMgKi8KKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NUVTCTB4ODE5YjA1YTEJLyogOUc0NS1FUyAoRW5naW5lZXJpbmcgU2FtcGxlKSAqLwogI2RlZmluZSBBUkNIX0lEX0FUOTFDQVA5CTB4MDM5QTAzQTAKIAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUxMjgJMHgzMjk5NzNhMApAQCAtNDEsNiArNDMsMTEgQEAKIAlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpICYgfkFUOTFfQ0lEUl9WRVJTSU9OKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KHZvaWQpCit7CisJcmV0dXJuIGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpOworfQorCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMQkweDAwMDAwMDAxCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMAkweDAwMDAwMDAyCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NQkweDAwMDAwMDA0CkBAIC0xMTgsOCArMTI1LDEwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOUc0NQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1KQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCShhdDkxX2NwdV9mdWxseV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDVFUykKICNlbHNlCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCSgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxQ0FQOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggNDkyYzY0OS4uZTU5MGJiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KIApAQCAtMjczLDEyICsyNzEsMTIgQEAKIAkuaGFuZGxlciA9IGJjbXJpbmdfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMSh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CiAKLXN0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjModm9pZCkKK3N0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gfnJlYWRsKFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggY2RiZjkzYy4uMzhiMzcwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yOSw3ICsyOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjaGFyICpjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlwcmludGsoImFyY2hfcmVzZXQ6JWMgJXhcbiIsIG1vZGUsIGJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwppbmRleCBhMWQ1ZTdkLi41MmRkODA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwppbmRleCBkNzI5MWM2Li45MTY3YzNkMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTcsMTMgKzE3LDMxIEBACiAJYm9vbCAiMHgwMDAwMDAwMCAtIFNEQ0UzL1N5bmNCb290IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCi0JICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHgwMDAwMDAwMC4KIAogY29uZmlnIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAogCWJvb2wgIjB4YzAwMDAwMDAgLSBTRENFTyIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4YzAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQKKwlib29sICIweGQwMDAwMDAwIC0gU0RDRTEiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhkMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFMl9QSFlTX09GRlNFVAorCWJvb2wgIjB4ZTAwMDAwMDAgLSBTRENFMiIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGUwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhmMDAwMDAwMCAtIFNEQ0UzL0FzeW5jQm9vdCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGYwMDAwMDAwLgogCiBlbmRjaG9pY2UKIApAQCAtMTEyLDI4ICsxMzAsMzYgQEAKIAlib29sCiAKIGNvbmZpZyBNQUNIX01JQ1JPOUgKLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LUhpZ2giCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktSGlnaCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TQotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIKLQlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LU1pZCIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktTWlkIGJvYXJkLgogCiBjb25maWcgTUFDSF9NSUNSTzlMCi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1MaXRlIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisJICBDb250ZWMgTWljcm85LUxpdGUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX01JQ1JPOVMKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktU2xpbSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCXNlbGVjdCBNQUNIX01JQ1JPOQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAppbmRleCAyN2EwODVhLi4wYWQzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKQEAgLTMsMyArMywxMiBAQAogCiAgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDA4MDAwCiBwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkJOj0gMHhmMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZGRhMTljZDcuLjFkMGY5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTYsMTMgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCiBzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgY2xrCSpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJaW50CQlzd19sb2NrZWQ7CkBAIC0zOSw0MCArNDIsNjAgQEAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfeHRhbGkgPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQzID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2hvc3QgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BsbDIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU4sCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2tleXBhZCA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCiAJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCiB9OwogCkBAIC04NSw1MCArMTA4LDYyIEBACiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAyLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDMsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA1LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDYsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNywKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA4LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0xLAogfTsKQEAgLTEzNyw2ICsxNzIsNyBAQAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soTlVMTCwJCQkieHRhbGkiLAkmY2xrX3h0YWxpKSwKIAlJTklUX0NLKCJhcGI6dWFydDEiLAkJTlVMTCwJCSZjbGtfdWFydDEpLAogCUlOSVRfQ0soImFwYjp1YXJ0MiIsCQlOVUxMLAkJJmNsa191YXJ0MiksCiAJSU5JVF9DSygiYXBiOnVhcnQzIiwJCU5VTEwsCQkmY2xrX3VhcnQzKSwKQEAgLTE2Myw0OCArMTk5LDg0IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsay0+dXNlcnMrKykgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgfD0gY2xrLT5lbmFibGVfbWFzazsKKwkJCWlmIChjbGstPnN3X2xvY2tlZCkKKwkJCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIWNsay0+dXNlcnMrKyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSB8PSBjbGstPmVuYWJsZV9tYXNrOwotCQlpZiAoY2xrLT5zd19sb2NrZWQpCi0JCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghLS1jbGstPnVzZXJzKSB7CisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgJj0gfmNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIS0tY2xrLT51c2VycyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSAmPSB+Y2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fUFdSQ05UKTsKIAlpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRCkKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCXJldHVybiByYXRlOwogCWVsc2UKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAyOworCQlyZXR1cm4gcmF0ZSAvIDI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTI0NCwxNiArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfY2xrX2Rpdih1bnNpZ25lZCBsb25nIHJhdGUsIGludCAqcHNlbCwgaW50ICplc2VsLAotCQkJCSAgaW50ICpwZGl2LCBpbnQgKmRpdikKK3N0YXRpYyBpbnQgY2FsY19jbGtfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJaW50ICpwc2VsLCBpbnQgKmVzZWwsIGludCAqcGRpdiwgaW50ICpkaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYmVzdF9yYXRlID0gMCwKLQkJYWN0dWFsX3JhdGUgPSAwLCBtY2xrX3JhdGUgPSAwLCByYXRlX2VyciA9IC0xOworCXN0cnVjdCBjbGsgKm1jbGs7CisJdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0ZV9lcnIgPSAtMTsKIAlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CiAKIAkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLwogCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCQkgICAgICAgY2xrX3h0YWxpLnJhdGUgLyA0KTsKIAlyYXRlID0gbWluKHJhdGUsIG1heF9yYXRlKTsKIAogCS8qCkBAIC0yNjcsMTEgKzMzOSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKLQkJCW1jbGtfcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEUgKiAyOworCQkJbWNsayA9ICZjbGtfeHRhbGk7CiAJCWVsc2UgaWYgKGkgPT0gMSkKLQkJCW1jbGtfcmF0ZSA9IGNsa19wbGwxLnJhdGUgKiAyOwotCQllbHNlIGlmIChpID09IDIpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMi5yYXRlICogMjsKKwkJCW1jbGsgPSAmY2xrX3BsbDE7CisJCWVsc2UKKwkJCW1jbGsgPSAmY2xrX3BsbDI7CisJCW1jbGtfcmF0ZSA9IG1jbGstPnJhdGUgKiAyOwogCiAJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KIAkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKQEAgLTI4Niw3ICszNTksOCBAQAogCQkJCSpkaXYgPSBfX2RpdjsKIAkJCQkqcHNlbCA9IChpID09IDIpOwogCQkJCSplc2VsID0gKGkgIT0gMCk7Ci0JCQkJYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7CisJCQkJY2xrLT5wYXJlbnQgPSBtY2xrOworCQkJCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOwogCQkJCXJhdGVfZXJyID0gYWJzKGFjdHVhbF9yYXRlIC0gcmF0ZSk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMjk0LDIxICszNjgsMTkgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYmVzdF9yYXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbF9yYXRlOwotCWludCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOworCWludCBlcnIsIHBzZWwgPSAwLCBlc2VsID0gMCwgcGRpdiA9IDAsIGRpdiA9IDA7CiAJdTMyIHZhbDsKIAotCWFjdHVhbF9yYXRlID0gY2FsY19jbGtfZGl2KHJhdGUsICZwc2VsLCAmZXNlbCwgJnBkaXYsICZkaXYpOwotCWlmIChhY3R1YWxfcmF0ZSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKKwllcnIgPSBjYWxjX2Nsa19kaXYoY2xrLCByYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCiAJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKQEAgLTM0NCw3ICs0MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXRlOwogCWludCBpOwogCi0JcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJcmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiAxMSkgJiAweDFmKSArIDE7CQkvKiBYMUZCRCAqLwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiA1KSAmIDB4M2YpICsgMTsJCS8qIFgyRkJEICovCiAJZG9fZGl2KHJhdGUsIChjb25maWdfd29yZCAmIDB4MWYpICsgMSk7CQkJLyogWDJJUEQgKi8KQEAgLTM3Nyw3ICs0NDksNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwogCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDEucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgewogCQljbGtfcGxsMS5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfQpAQCAtMzg4LDcgKzQ2MCw3IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwotCQljbGtfcGxsMi5yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKKwkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLwogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmN2ViZWQ5Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CkBAIC01NTAsMTMgKzU0OSwxMSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgZXA5M3h4X2kyY19kYXRhID0gewotCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKLQkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnVkZWxheQkJCT0gMiwKLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCkBAIC01NjQsOCArNTYxLDI1IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKIH07CiAKLXZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pCiB7CisJLyoKKwkgKiBTZXQgdGhlIEVFUFJPTSBpbnRlcmZhY2UgcGluIGRyaXZlIHR5cGUgY29udHJvbC4KKwkgKiBEZWZpbmVzIHRoZSBkcml2ZXIgdHlwZSBmb3IgdGhlIEVFQ0xLIGFuZCBFRURBVCBwaW5zIGFzIGVpdGhlcgorCSAqIG9wZW4gZHJhaW4sIHdoaWNoIHdpbGwgcmVxdWlyZSBhbiBleHRlcm5hbCBwdWxsLXVwLCBvciBhIG5vcm1hbAorCSAqIENNT1MgZHJpdmVyLgorCSAqLworCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCisJX19yYXdfd3JpdGVsKChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiA8PCAxKSB8CisJCSAgICAgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluIDw8IDApLAorCQkgICAgIEVQOTNYWF9HUElPX0VFRFJJVkUpOworCisJZXA5M3h4X2kyY19kYXRhID0gKmRhdGE7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnVtKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9pMmNfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA3MzE0NWFlLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC03NiwxMyArNzgsMjYgQEAKIAkucGh5X2lkCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2RhdGFbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIGtIeiAqLworCS50aW1lb3V0CQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIG1zICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4X2kyY19kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAogCX0sCkBAIC05MiwxMiArMTA3LDE0IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKIAkgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoZWRiOTN4eGFfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvKSk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCQkgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4X2kyY19kYXRhKSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKKwkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDBmYmY4N2IuLmIxZjkzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01MiwyNSArNTIsMjcgQEAKICNkZWZpbmUgRVA5M1hYX0FIQl9WSVJUX0JBU0UJCTB4ZmVmMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FIQl9TSVpFCQkJMHgwMDEwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BSEJfUEhZUyh4KQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQUhCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArICh4KSkKIAogI2RlZmluZSBFUDkzWFhfQVBCX1BIWVNfQkFTRQkJMHg4MDgwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1NJWkUJCQkweDAwMjAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTKHgpCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCUVQOTNYWF9BSEJfUEhZUygweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJRVA5M1hYX0FIQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUkFTVEVSX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0xMTIsMjEgKzExNCwxMCBAQAogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA0MDAwMCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDRjKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4NTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4NTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg1OCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweDVjKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4OTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg5NCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg5OCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDljKQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHhhYykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweGIwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweGI0KQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4YjgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHhiYykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRUVEUklWRQkJRVA5M1hYX0dQSU9fUkVHKDB4YzgpCiAKICNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCkBAIC0xMzQsMTMgKzEyNSwxMyBAQAogCiAjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBjMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBjMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGQwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBkMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBkMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGUwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBlMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBlMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfS0VZX01BVFJJWF9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZjAwMDApCkBAIC0xNDgsMTAgKzEzOSwxMCBAQAogI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDExMDAwMCkKICNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9SVENfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTIwMDAwKQorI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEzMDAwMCkKQEAgLTIxOCw2ICsyMDksMTcgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTgkoMTw8MTUpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDljKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19SRVZfTUFTSwkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX1NISUZUCSgyOCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfU0JPT1QJKDE8PDgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043CSgxPDw3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONgkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEFTRE8JKDE8PDUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xFRURBCSgxPDw0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVDTEsJKDE8PDMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU04yCSgxPDwxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMQkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKICNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDE0MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBhMTQ5OGEuLmM5OTFiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTE0LDE3ICsxMTQsOSBAQAogICogICAgICAgICAgQjAuLkI3ICAoNy4uMTUpIHRvIGlycSA3Mi4uNzksIGFuZAogICogICAgICAgICAgRjAuLkY3ICgxNi4uMjQpIHRvIGlycSA4MC4uODcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKQotCQlyZXR1cm4gNjQgKyBncGlvOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlcCisJKCgoZ3BpbykgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSA/ICg2NCArIChncGlvKSkgOiAtRUlOVkFMKQogCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gZ3Bpb190b19pcnEoMCk7Ci19CisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gZ3Bpb190b19pcnEoMCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDkyNWIxMmUuLjU1NDA2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTksNiArOSwxMiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4YzAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGQwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhlMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZjAwMDAwMDApCiAjZWxzZQogI2Vycm9yICJLY29uZmlnIGJ1ZzogTm8gRVA5M3h4IFBIWVNfT0ZGU0VUIHNldCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCAwMWEwZjA4Li40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbzsKQEAgLTE2LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CkBAIC0zMyw3ICszMyw4IEBACiB9CiAKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX2V0aChzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhLCBpbnQgY29weV9hZGRyKTsKLXZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAwYTMxM2U4Li5mMzc1N2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMiw3ICsyLDkgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKLSAqICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+CisgKiAgICAgICAgICAgICAgICAgICAgTWFuZnJlZCBHcnViZXIgPG0uZ3J1YmVyQHRpcm9sLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKKyAqICAgICAgICAgICAgICAgICAgICBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yMCwxMDQgKzIzLDEyNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogCi1zdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pZAkJPSAweDFmLAotfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaWNybzkgTk9SIEZsYXNoCisgKgorICogTWljcm85LUhpZ2ggaGFzIHVwIHRvIDY0TUIgb2YgMzItYml0IGZsYXNoIG9uIENTMQorICogTWljcm85LU1pZCBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKKyAqIE1pY3JvOS1MaXRlIHVzZXMgYSBzZXBlcmF0ZSBNVEQgbWFwIGRyaXZlciBmb3IgZmxhc2ggc3VwcG9ydAorICogTWljcm85LVNsaW0gaGFzIHVwIHRvIDY0TUIgb2YgZWl0aGVyIDMyLWJpdCBvciAxNi1iaXQgZmxhc2ggb24gQ1MxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOV9mbGFzaF9kYXRhOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXQodm9pZCkKLXsKLQllcDkzeHhfcmVnaXN0ZXJfZXRoKCZtaWNybzlfZXRoX2RhdGEsIDEpOwotfQotCi0vKgotICogTWljcm85LUgKLSAqLwotI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOWhfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85aF9mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85X2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAkJPSBFUDkzWFhfQ1MxX1BIWVNfQkFTRSwKIAkuZW5kCQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFICsgU1pfNjRNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzloX2ZsYXNoID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85X2ZsYXNoID0gewogCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbWljcm85aF9mbGFzaF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtaWNybzlfZmxhc2hfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbWljcm85X2ZsYXNoX3Jlc291cmNlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWhfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKHVuc2lnbmVkIGludCB3aWR0aCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOWhfZmxhc2gpOworCW1pY3JvOV9mbGFzaF9kYXRhLndpZHRoID0gd2lkdGg7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOV9mbGFzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXRfbWFjaGluZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgbWljcm85X2RldGVjdF9ib290d2lkdGgodm9pZCkKK3sKKwl1MzIgdjsKKworCS8qIERldGVjdCB0aGUgYnVzIHdpZHRoIG9mIHRoZSBleHRlcm5hbCBmbGFzaCBtZW1vcnkgKi8KKwl2ID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9TWVNDRkcpOworCWlmICh2ICYgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTENTTjcpCisJCXJldHVybiA0OyAvKiAzMi1iaXQgKi8KKwllbHNlCisJCXJldHVybiAyOyAvKiAxNi1iaXQgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9yZWdpc3Rlcl9mbGFzaCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX21pY3JvOSgpKQorCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaCg0KTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX21pY3JvOW0oKSB8fCBtYWNoaW5lX2lzX21pY3JvOXMoKSkKKwkJX19taWNybzlfcmVnaXN0ZXJfZmxhc2gobWljcm85X2RldGVjdF9ib290d2lkdGgoKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pY3JvOSBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJPSAweDFmLAorfTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotCW1pY3JvOWhfaW5pdCgpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJm1pY3JvOV9ldGhfZGF0YSwgMSk7CisJbWljcm85X3JlZ2lzdGVyX2ZsYXNoKCk7CiB9CiAKLU1BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KKworI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKK01BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIE1pY3JvOS1IaWdoIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzloX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAotLyoKLSAqIE1pY3JvOS1NCi0gKi8KICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlNCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bV9pbml0X21hY2hpbmUodm9pZCkKLXsKLQllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLX0KLQotTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KK01BQ0hJTkVfU1RBUlQoTUlDUk85TSwgIkNvbnRlYyBNaWNybzktTWlkIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85bV9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKLS8qCi0gKiBNaWNybzktTAotICovCiAjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWxfaW5pdF9tYWNoaW5lKHZvaWQpCi17Ci0JZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwiKQotCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCitNQUNISU5FX1NUQVJUKE1JQ1JPOUwsICJDb250ZWMgTWljcm85LUxpdGUiKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOWxfaW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85UworTUFDSElORV9TVEFSVChNSUNSTzlTLCAiQ29udGVjIE1pY3JvOS1TbGltIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDJiMmU3YTEuLjQ4OTE4MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjgsNSArMjgsNiBAQAogI2RlZmluZSBCVVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUICsgQlVTX09GRlNFVCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpIC0gQlVTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJCSgoKHgpIDw8IFBBR0VfU0hJRlQpICsgQlVTX09GRlNFVCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCAyYTMxOGViLi4zZjM1MjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEva21pLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXJldHVybiBzdGF0dXMgJiA4OwogfQogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCmluZGV4IGYxZDcyYjIuLjE0OGQyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICpwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpX3YzX29wcywgc3lzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaAppbmRleCBhYmQ5ZWI0Li45NDFmMzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oCkBAIC0zMSw3ICszMSw1IEBACiAjZGVmaW5lIElPUDMyWF9NQVhfUkFNX1NJWkUgICAgICAgICAgICAweDQwMDAwMDAwVUwKICNkZWZpbmUgSU9QM1hYX01BWF9SQU1fU0laRSAgICAgICAgICAgIElPUDMyWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSU9QMzJYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIElPUDMyWF9QQ0lfTUVNX1dJTkRPV19TSVpFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oCmluZGV4IDI0NTY3MzEuLmE4OWMwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmgKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgSU9QMzNYX01BWF9SQU1fU0laRQkJMHg4MDAwMDAwMFVMCiAjZGVmaW5lIElPUDNYWF9NQVhfUkFNX1NJWkUJCUlPUDMzWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEJKFBIWVNfT0ZGU0VUICsgSU9QMzNYX01BWF9SQU1fU0laRSkKLSNkZWZpbmUgSU9QMzNYX1BDSV9NRU1fV0lORE9XX1NJWkUJMHgwODAwMDAwMAotI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQlJT1AzM1hfUENJX01FTV9XSU5ET1dfU0laRQogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCmluZGV4IDFkYTVkMWMuLjJlNjkxNjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzZXR1cF9jcHVfd2luKDAsIEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX0lPX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUVfSU8sIEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0UpOwogCXNldHVwX2NwdV93aW4oMSwgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX01FTV9TSVpFLAotCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgLTEpOworCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UpOwogCiAJLyoKIAkgKiBTZXR1cCB3aW5kb3cgZm9yIE5BTkQgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBhY2I2MWYuLjI0MmRkMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJcmV0dXJuIDE2NjY2NjY2NzsKIH0KIAotc3RhdGljIHZvaWQga2lya3dvb2RfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKIHsKIAlraXJrd29vZF90Y2xrID0ga2lya3dvb2RfZmluZF90Y2xrKCk7CiAJb3Jpb25fdGltZV9pbml0KElSUV9LSVJLV09PRF9CUklER0UsIGtpcmt3b29kX3RjbGspOwpAQCAtOTE1LDYgKzkxNSwxNCBAQAogCWtpcmt3b29kX3VhcnQwX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAJa2lya3dvb2RfdWFydDFfZGF0YVswXS51YXJ0Y2xrID0ga2lya3dvb2RfdGNsazsKIAorCS8qCisJICogRGlzYWJsZSBwcm9wYWdhdGlvbiBvZiBtYnVzIGVycm9ycyB0byB0aGUgQ1BVIGxvY2FsIGJ1cywKKwkgKiBhcyB0aGlzIGNhdXNlcyBtYnVzIGVycm9ycyAod2hpY2ggY2FuIG9jY3VyIGZvciBleGFtcGxlCisJICogZm9yIFBDSSBhYm9ydHMpIHRvIHRocm93IENQVSBhYm9ydHMsIHdoaWNoIHdlJ3JlIG5vdCBzZXQKKwkgKiB1cCB0byBkZWFsIHdpdGguCisJICovCisJd3JpdGVsKHJlYWRsKENQVV9DT05GSUcpICYgfkNQVV9DT05GSUdfRVJST1JfUFJPUCwgQ1BVX0NPTkZJRyk7CisKIAlraXJrd29vZF9zZXR1cF9jcHVfbWJ1cygpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCA5ZTgwZDkyLi40MThmNTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTEzLDYgKzEzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KIAorI2RlZmluZSBDUFVfQ09ORklHCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwMCkKKyNkZWZpbmUgQ1BVX0NPTkZJR19FUlJPUl9QUk9QCTB4MDAwMDAwMDQKKwogI2RlZmluZSBDUFVfQ09OVFJPTAkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMDQpCiAjZGVmaW5lIENQVV9SRVNFVAkJMHgwMDAwMDAwMgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBhNjQzYTg0Li40NGU4YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW8odW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKChhZGRyIC0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0UpCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKGFkZHIgLSBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKQogCQkJCQkrIEtJUktXT09EX1BDSUVfSU9fVklSVF9CQVNFKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggNTRjMTMyNy4uYTE1Y2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEtJUktXT09EX1JFR1NfU0laRQkJU1pfMU0KIAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0UJMHhlMDAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRQkweGUwMDAwMDAwCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYwppbmRleCA5NDdkZmI4Li43NzYxN2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCkBAIC03MCw4ICs3MCwyMCBAQAogCWtpcmt3b29kX2dlMDBfaW5pdCgmb3BlbnJkX2Jhc2VfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9iYXNlX3NhdGFfZGF0YSk7CiAJa2lya3dvb2Rfc2Rpb19pbml0KCZvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSk7CisKKwlraXJrd29vZF9pMmNfaW5pdCgpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBvcGVucmRfYmFzZV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdCgpOworCisJcmV0dXJuIDA7CisgfQorc3Vic3lzX2luaXRjYWxsKG9wZW5yZF9iYXNlX3BjaV9pbml0KTsKKworCiBNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLwogCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGQ5MGI5YWEuLmE2MDRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQga2lya3dvb2RfcGNpZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCBraXJrd29vZF9jbGtfY3RybDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSAqLwogCXJlc1swXS5uYW1lID0gIlBDSWUgSS9PIFNwYWNlIjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFOworCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0U7CiAJcmVzWzBdLmVuZCA9IHJlc1swXS5zdGFydCArIEtJUktXT09EX1BDSUVfSU9fU0laRSAtIDE7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqLwogCXJlc1sxXS5uYW1lID0gIlBDSWUgTWVtb3J5IFNwYWNlIjsKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0U7CisJcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0U7CiAJcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIEtJUktXT09EX1BDSUVfTUVNX1NJWkUgLSAxOwogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaCBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCmluZGV4IDU2ZDEyZTguLjk3ZThhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEtTODY5NV9TRUMxCQkoMHgwNCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAxICovCiAjZGVmaW5lIEtTODY5NV9TRUMyCQkoMHgwOCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAyICovCiAKLSNkZWZpbmUgS1M4Njk1X1AoeClfQyh6KQkoMHhjMCArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEtTODY5NV9TRVBYQ1ooeCx6KQkoMHgwYyArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgS1M4Njk1X1NFUDEyQU4JCSgweDQ4KQkJLyogUG9ydCAxICYgMiBBdXRvLU5lZ290aWF0aW9uICovCiAjZGVmaW5lIEtTODY5NV9TRVAzNEFOCQkoMHg0YykJCS8qIFBvcnQgMyAmIDQgQXV0by1OZWdvdGlhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKaW5kZXggYmYxMTg5ZmYuLjdlOGE4MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaApAQCAtMTYwLDcgKzE2MCw3IEBACiAjZGVmaW5lIE1NQzFfV1BfTU1DMV9XUAkJTUZQX0NGR19EUlYoTU1DMV9XUCwgQUYwLCBNRURJVU0pCiAKIC8qIFBXTSAqLwotI2RlZmluZSBHUElPMjcgUFdNMyBBRjIJCU1GUF9DRkcoR1BJTzI3LCBBRjIpCisjZGVmaW5lIEdQSU8yN19QV00zX0FGMgkJTUZQX0NGRyhHUElPMjcsIEFGMikKICNkZWZpbmUgR1BJTzUxX1BXTTJfT1VUCQlNRlBfQ0ZHKEdQSU81MSwgQUYyKQogI2RlZmluZSBHUElPMTE3X1BXTTFfT1VUCU1GUF9DRkcoR1BJTzExNywgQUYyKQogI2RlZmluZSBHUElPMTE4X1BXTTJfT1VUCU1GUF9DRkcoR1BJTzExOCwgQUYyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCmluZGV4IDFiMjJlNGEuLjA4NDY1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKQEAgLTg0NSw2ICs4NDUsOCBAQAogCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgxMDBfREVWX0lEKSB7CiAJCWlmIChyZXYgPT0gTVY3ODEwMF9SRVZfQTApCiAJCQlyZXR1cm4gIk1WNzgxMDAtQTAiOworCQllbHNlIGlmIChyZXYgPT0gTVY3ODEwMF9SRVZfQTEpCisJCQlyZXR1cm4gIk1WNzgxMDAtQTEiOwogCQllbHNlCiAJCQlyZXR1cm4gIk1WNzgxMDAtUmV2LVVuc3VwcG9ydGVkIjsKIAl9IGVsc2UgaWYgKGRldiA9PSBNVjc4MjAwX0RFVl9JRCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmggYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaAppbmRleCBkNzE1YjkyLi43ODhiZGFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaApAQCAtMTEyLDYgKzExMiw3IEBACiAKICNkZWZpbmUgTVY3ODEwMF9ERVZfSUQJCTB4NzgxMAogI2RlZmluZSBNVjc4MTAwX1JFVl9BMAkJMQorI2RlZmluZSBNVjc4MTAwX1JFVl9BMQkJMgogCiAjZGVmaW5lIE1WNzgyMDBfREVWX0lECQkweDc4MjAKICNkZWZpbmUgTVY3ODIwMF9SRVZfQTAJCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCmluZGV4IDQwODk5NTEuLmZmNWUzMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwpAQCAtNjM4LDkgKzYzOCw5IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjIiLCBOVUxMLCBzZGhjM19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMSIsIGNzcGkxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkyIiwgY3NwaTJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTMiLCBjc3BpM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrKQpAQCAtNjY1LDcgKzY2NSw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzYWhhcmEyIiwgc2FoYXJhMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdGEiLCBhdGFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW9fY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKaW5kZXggZWU2NWRkYS4uOTA2ZDU5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKQEAgLTIzLDYgKzIzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zNSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9pb211eC5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKIApAQCAtNzgsOCArODMsNiBAQAogCVBDNl9QRl9JMkMyX1NDTCwKIAkvKiBTUEkxICovCiAJUEQyNV9QRl9DU1BJMV9SRFksCi0JUEQyN19QRl9DU1BJMV9TUzEsCi0JUEQyOF9QRl9DU1BJMV9TUzAsCiAJUEQyOV9QRl9DU1BJMV9TQ0xLLAogCVBEMzBfUEZfQ1NQSTFfTUlTTywKIAlQRDMxX1BGX0NTUEkxX01PU0ksCkBAIC0xOTYsNiArMTk5LDg2IEBACiAJfQogfTsKIAorc3RhdGljIGludCBwY20wMzhfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4fTsKKworc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY20wMzhfc3BpXzBfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdCA9IHBjbTAzOF9zcGlfY3MsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzhfc3BpX2NzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjMV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSAmbXhjX3NkaGNfZGV2aWNlMS5kZXYsCisJCS5zdXBwbHkJPSAic2RoY192Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoYzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc2RoYzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjMV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9IE5VTEwsCisJCS5zdXBwbHkJPSAiaW14X2NhbV92Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMzAwMDAwMCwKKwkJLm1heF91ViA9IDM0MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCit9OworCitzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHBjbTAzOF9yZWd1bGF0b3JzW10gPSB7CisJeworCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKKwkJLmluaXRfZGF0YSA9ICZjYW1fZGF0YSwKKwl9LCB7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKKwkucmVndWxhdG9ycyA9IHBjbTAzOF9yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocGNtMDM4X3JlZ3VsYXRvcnMpLAorCS5mbGFncyA9IE1DMTM3ODNfVVNFX0FEQyB8IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8CisJCSBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYzEzNzgzIiwKKwkJLmlycSA9IElSUV9HUElPQigyMyksCisJCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3BtaWMsCisJCS5tb2RlID0gU1BJX0NTX0hJR0gsCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCiB7CiAJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzhfcGlucywgQVJSQVlfU0laRShwY20wMzhfcGlucyksCkBAIC0yMTksNiArMzAyLDE1IEBACiAJLyogUEUxOCBmb3IgdXNlci1MRUQgRDQwICovCiAJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRFIHwgMTggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CiAKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKworCS8qIE1DMTM3ODMgSVJRICovCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRCIHwgMjMgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zcGlfZGV2aWNlMCwgJnBjbTAzOF9zcGlfMF9kYXRhKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwY20wMzhfc3BpX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShwY20wMzhfc3BpX2JvYXJkX2luZm8pKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCmluZGV4IGMyNjFmNTkuLjNjYjdmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKQEAgLTM5LDcgKzM5LDYgQEAKIAlQQjdfUEZfU0QyX0QzLAogCVBCOF9QRl9TRDJfQ01ELAogCVBCOV9QRl9TRDJfQ0xLLAotCUdQSU9fUE9SVEMgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sIC8qIGNhcmQgZGV0ZWN0ICovCiAJLyogZGlzcGxheSAqLwogCVBBNV9QRl9MU0NMSywKIAlQQTZfUEZfTEQwLApAQCAtMjI4LDYgKzIyNyw3IEBACiAJCQkiUENNOTcwIik7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmcGNtMDM4X2ZiX2RhdGEpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTcwX3NqYTEwMDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKaW5kZXggZWIxMmRlMS4uNjM1MTFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCkBAIC0xLDQgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL214MjUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCmluZGV4IDkyYWE0ZmQuLmQyM2FlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwpAQCAtMSwzICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC0yMywxOSArNDEsMTIgQEAKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG5hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfaW5pdCh2b2lkKQogewogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsIE5VTEwpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJm5hbmRfYm9hcmRfaW5mbyk7CiB9CiAKLQogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQogewogCW14MjVfY2xvY2tzX2luaXQoMjYwMDAwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKaW5kZXggZmU1YzQyMS4uYzU5NTI2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiIiwgdXNib3RnX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNib3RnX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JvdGdfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjX3dkdC4wIiwgTlVMTCwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1heCIsIG1heF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhZG11eCIsIGFkbXV4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwppbmRleCAwNmJkNjE4Li5iMmEzYmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKQEAgLTUzMCw3ICs1MzAsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4yIiwgTlVMTCwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0YyIsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQyX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwppbmRleCA4YTU3N2YzLi5lNmFiZTE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCkBAIC00NTksNyArNDU5LDcgQEAKICAqIFNQSSBtYXN0ZXIgY29udHJvbGxlcgogICogMyBjaGFubmVscwogICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8wX3Jlc291cmNlc1tdID0gewogCXsKIAkgICAgICAgLnN0YXJ0ID0gQ1NQSTFfQkFTRV9BRERSLAogCSAgICAgICAuZW5kID0gQ1NQSTFfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDcxLDcgKzQ3MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8xX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzFfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSBDU1BJMl9CQVNFX0FERFIsCiAJCS5lbmQgPSBDU1BJMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00ODMsNyArNDgzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzJfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMl9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ5NSwyNSArNDk1LDI1IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UwID0geworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7CiAJLm5hbWUgPSAic3BpX2lteCIsCiAJLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NwaV8wX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gaW14X3NwaV8wX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV8wX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3NwaV8wX3Jlc291cmNlcywKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UxID0geworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTEgPSB7CiAJLm5hbWUgPSAic3BpX2lteCIsCiAJLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NwaV8xX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gaW14X3NwaV8xX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV8xX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3NwaV8xX3Jlc291cmNlcywKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UyID0geworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTIgPSB7CiAJLm5hbWUgPSAic3BpX2lteCIsCiAJLmlkID0gMiwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NwaV8yX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gaW14X3NwaV8yX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV8yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3NwaV8yX3Jlc291cmNlcywKIH07CiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKaW5kZXggNzlmMmJlNC4uYWI4NzQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaApAQCAtMjAsNyArMjAsNyBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3JuZ2FfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwppbmRleCBhZDVhMTEyLi5iZWRmNWI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKQEAgLTgxLDYgKzgxLDcgQEAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KIAorI2lmZGVmIENPTkZJR19BUkNIX01YMzUKIHZvaWQgX19pbml0IG14MzVfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzUpOwpAQCAtODksNiArOTAsNyBAQAogCiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CisjZW5kaWYKIAogdm9pZCBfX2luaXQgbXgzMV9pbml0X2lycSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKaW5kZXggNDRlZDIwZC4uY2Y4MWNiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY2xrX2RlYnVnZnNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNsa19kZWJ1Z2ZzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbGtfZGVidWdmc19vcGVyYXRpb25zID0gewogCS5vcGVuID0gY2xrX2RlYnVnZnNfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwppbmRleCA0MjkyMGY5Li44YWQ1Y2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTIxOSw2ICsyMTksMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFtc19kZWx0YV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwogCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOwpAQCAtMjMxLDYgKzIzNSw4IEBACiAKIAlvbWFwX3VzYl9pbml0KCZhbXNfZGVsdGFfdXNiX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW1zX2RlbHRhX2RldmljZXMsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2RldmljZXMpKTsKKworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAweDAwMDQsIEFSTV9SU1RDVDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGFtc19kZWx0YV9tb2RlbV9wb3J0c1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBmYjQ3MjM5Li42YzhhNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtNjQsNiArNjQsMTQgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2MyYWJiYi4uY2Q2YzM5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zNzYsNiArMzc2LDI2IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJdW5zaWduZWQgY2hhciByZWc7CisKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCiAJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE1MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2RldmljZXMpKTsKIAkJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggOTBkZDA0My4uNGRlMjU4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0zNDIsNiArMzQyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggODI1NjEzOS4uZDk3MmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yODksNiArMjg5LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10dF9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdHRfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCA4MWI2YmRlMS4uOTg2YmQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTMwNyw2ICszMDcsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogb21hcF9wYWxtejcxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGFsbXo3MV9ncGlvX3NldHVwKDEpOwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCAwMmM4NWNhLi4wNTZhZTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTM3Nyw2ICszNzcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfc3gxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc3gxX2RldmljZXMsIEFSUkFZX1NJWkUoc3gxX2RldmljZXMpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc3gxX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IGMwNmU3YTUuLjA3YjA3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUyLDYgKzE1MiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJLyogV2F0Y2hkb2cgKi8KIAlncGlvX3JlcXVlc3QoMCwgIldhdGNoZG9nIik7CiAJLyogc21jOTF4IHJlc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKaW5kZXggNGVmMjZmYS4uZTVkY2RmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwpAQCAtMzgsNyArMzgsNyBAQAogCXsgLmp0YWdfaWQgPSAweGI1NzQsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMTAzMTUsIC50eXBlID0gMHgwMzEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4MzU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMTAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAzMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjYyYywgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDUwMCwgLnR5cGUgPSAweDA4NTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNDcwLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzEwMTAwLCAudHlwZSA9IDB4MTUxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgxNjEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggYmQ1N2VjNy4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpAQCAtNTQsNyArNTQsNyBAQAogCiAjZGVmaW5lIFRXTDQwMzBfTVNFQ1VSRV9HUElPIDIyCiAKLXN0YXRpYyBpbnQgc2RwMzQzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtODgsMTEgKzg4LDE1IEBACiAJMAogfTsKIAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgc2RwMzQzMF9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA1LAogCS5jb2xzCQk9IDYsCi0JLmtleW1hcAkJPSBzZHAzNDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoc2RwMzQzMF9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggZWIzN2M0MC4uNjA5YTVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTU4LDYgKzU4LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0X2lycSh2b2lkKQogeworCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOwogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCW9tYXAyX2dwX2Nsb2NrZXZlbnRfc2V0X2dwdGltZXIoMSk7CkBAIC03MCw4ICs3Miw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHA0NDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwNDQzMF9kZXZpY2VzKSk7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBlYzY4NTRjLi5kNTdlYzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTgwLDcgKzgwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBsZHBfdHdsNDAzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV8xKSwKIAlLRVkoMSwgMCwgS0VZXzIpLAogCUtFWSgyLCAwLCBLRVlfMyksCkBAIC0xMDEsMTEgKzEwMSwxNSBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIGxkcF9rcF90d2w0MDMwX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IGxkcF90d2w0MDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUobGRwX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggNTAwYzk5NS4uMDhiMDgxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMTM5LDggKzEzOSwxMyBAQAogc3RhdGljIGludCBiZWFnbGVfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKKwlpZiAoc3lzdGVtX3JldiA+PSAweDIwICYmIHN5c3RlbV9yZXYgPD0gMHgzNDMwMTAwMCkgeworCQlvbWFwX2NmZ19yZWcoQUc5XzM0WFhfR1BJTzIzKTsKKwkJbW1jWzBdLmdwaW9fd3AgPSAyMzsKKwl9IGVsc2UgeworCQlvbWFwX2NmZ19yZWcoQUg4XzM0WFhfR1BJTzI5KTsKKwl9CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCi0Jb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAKQEAgLTE1Nyw3ICsxNjIsNyBAQAogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDAgPT0gbGVkQSwgRUhDSSBuRU5fVVNCX1BXUiAob3V0LCBhY3RpdmUgbG93KSAqLwogCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIm5FTl9VU0JfUFdSIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOwogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCiAJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKaW5kZXggZDUwYjliZS4uNGM0ZDdmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCkBAIC0xNTksNyArMTU5LDcgQEAKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKIAotc3RhdGljIGludCBvbWFwM2V2bV9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtMTc4LDExICsxNzgsMTUgQEAKIAlLRVkoMywgMywgS0VZX1ApCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBvbWFwM2V2bV9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA0LAogCS5jb2xzCQk9IDQsCi0JLmtleW1hcAkJPSBvbWFwM2V2bV9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG9tYXAzZXZtX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYjQzZjZlMy4uNzUxOWVkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKQEAgLTEzMyw1OCArMTMzLDYyIEBACiAJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKDMyICogNSwgR1BJT19ERUJPVU5DRV9USU1FKTsKIH0KIAotc3RhdGljIGludCBwYW5kb3JhX2tleXBhZF9tYXBbXSA9IHsKLQkvKiBjb2wsIHJvdywgY29kZSAqLworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKKwkvKiByb3csIGNvbCwgY29kZSAqLwogCUtFWSgwLCAwLCBLRVlfOSksCi0JS0VZKDAsIDEsIEtFWV8wKSwKLQlLRVkoMCwgMiwgS0VZX0JBQ0tTUEFDRSksCi0JS0VZKDAsIDMsIEtFWV9PKSwKLQlLRVkoMCwgNCwgS0VZX1ApLAotCUtFWSgwLCA1LCBLRVlfSyksCi0JS0VZKDAsIDYsIEtFWV9MKSwKLQlLRVkoMCwgNywgS0VZX0VOVEVSKSwKLQlLRVkoMSwgMCwgS0VZXzgpLAorCUtFWSgwLCAxLCBLRVlfOCksCisJS0VZKDAsIDIsIEtFWV9JKSwKKwlLRVkoMCwgMywgS0VZX0opLAorCUtFWSgwLCA0LCBLRVlfTiksCisJS0VZKDAsIDUsIEtFWV9NKSwKKwlLRVkoMSwgMCwgS0VZXzApLAogCUtFWSgxLCAxLCBLRVlfNyksCi0JS0VZKDEsIDIsIEtFWV82KSwKLQlLRVkoMSwgMywgS0VZXzUpLAotCUtFWSgxLCA0LCBLRVlfNCksCi0JS0VZKDEsIDUsIEtFWV8zKSwKLQlLRVkoMSwgNiwgS0VZXzIpLAotCUtFWSgxLCA3LCBLRVlfMSksCi0JS0VZKDIsIDAsIEtFWV9JKSwKLQlLRVkoMiwgMSwgS0VZX1UpLAorCUtFWSgxLCAyLCBLRVlfVSksCisJS0VZKDEsIDMsIEtFWV9IKSwKKwlLRVkoMSwgNCwgS0VZX0IpLAorCUtFWSgxLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMiwgMSwgS0VZXzYpLAogCUtFWSgyLCAyLCBLRVlfWSksCi0JS0VZKDIsIDMsIEtFWV9UKSwKLQlLRVkoMiwgNCwgS0VZX1IpLAotCUtFWSgyLCA1LCBLRVlfRSksCi0JS0VZKDIsIDYsIEtFWV9XKSwKLQlLRVkoMiwgNywgS0VZX1EpLAotCUtFWSgzLCAwLCBLRVlfSiksCi0JS0VZKDMsIDEsIEtFWV9IKSwKLQlLRVkoMywgMiwgS0VZX0cpLAorCUtFWSgyLCAzLCBLRVlfRyksCisJS0VZKDIsIDQsIEtFWV9WKSwKKwlLRVkoMiwgNSwgS0VZX0ZOKSwKKwlLRVkoMywgMCwgS0VZX08pLAorCUtFWSgzLCAxLCBLRVlfNSksCisJS0VZKDMsIDIsIEtFWV9UKSwKIAlLRVkoMywgMywgS0VZX0YpLAotCUtFWSgzLCA0LCBLRVlfRCksCi0JS0VZKDMsIDUsIEtFWV9TKSwKLQlLRVkoMywgNiwgS0VZX0EpLAotCUtFWSgzLCA3LCBLRVlfTEVGVFNISUZUKSwKLQlLRVkoNCwgMCwgS0VZX04pLAotCUtFWSg0LCAxLCBLRVlfQiksCi0JS0VZKDQsIDIsIEtFWV9WKSwKLQlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSgzLCA0LCBLRVlfQyksCisJS0VZKDQsIDAsIEtFWV9QKSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfUiksCisJS0VZKDQsIDMsIEtFWV9EKSwKIAlLRVkoNCwgNCwgS0VZX1gpLAotCUtFWSg0LCA1LCBLRVlfWiksCi0JS0VZKDQsIDYsIEtFWV9ET1QpLAotCUtFWSg0LCA3LCBLRVlfQ09NTUEpLAotCUtFWSg1LCAwLCBLRVlfTSksCi0JS0VZKDUsIDEsIEtFWV9TUEFDRSksCi0JS0VZKDUsIDIsIEtFWV9GTiksCisJS0VZKDUsIDAsIEtFWV9LKSwKKwlLRVkoNSwgMSwgS0VZXzMpLAorCUtFWSg1LCAyLCBLRVlfRSksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX1opLAorCUtFWSg2LCAwLCBLRVlfTCksCisJS0VZKDYsIDEsIEtFWV8yKSwKKwlLRVkoNiwgMiwgS0VZX1cpLAorCUtFWSg2LCAzLCBLRVlfQSksCisJS0VZKDYsIDQsIEtFWV9ET1QpLAorCUtFWSg3LCAwLCBLRVlfRU5URVIpLAorCUtFWSg3LCAxLCBLRVlfMSksCisJS0VZKDcsIDIsIEtFWV9RKSwKKwlLRVkoNywgMywgS0VZX0xFRlRTSElGVCksCisJS0VZKDcsIDQsIEtFWV9DT01NQSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBwYW5kb3JhX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IHBhbmRvcmFfa2V5cGFkX21hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocGFuZG9yYV9rZXlwYWRfbWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU2ZTgyOTAuLmUzNGQ5NmE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL29uZW5hbmQuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMtc21jOTF4Lmg+CiAKQEAgLTM2LDU4ICszNiw2MiBAQAogI2RlZmluZSBTWVNURU1fUkVWX0JfVVNFU19WQVVYMwkweDE2OTkKICNkZWZpbmUgU1lTVEVNX1JFVl9TX1VTRVNfVkFVWDMgMHg4CiAKLXN0YXRpYyBpbnQgcng1MV9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9RKSwKLQlLRVkoMCwgMSwgS0VZX1cpLAotCUtFWSgwLCAyLCBLRVlfRSksCi0JS0VZKDAsIDMsIEtFWV9SKSwKLQlLRVkoMCwgNCwgS0VZX1QpLAotCUtFWSgwLCA1LCBLRVlfWSksCi0JS0VZKDAsIDYsIEtFWV9VKSwKLQlLRVkoMCwgNywgS0VZX0kpLAotCUtFWSgxLCAwLCBLRVlfTyksCisJS0VZKDAsIDEsIEtFWV9PKSwKKwlLRVkoMCwgMiwgS0VZX1ApLAorCUtFWSgwLCAzLCBLRVlfQ09NTUEpLAorCUtFWSgwLCA0LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMCwgNiwgS0VZX0EpLAorCUtFWSgwLCA3LCBLRVlfUyksCisJS0VZKDEsIDAsIEtFWV9XKSwKIAlLRVkoMSwgMSwgS0VZX0QpLAotCUtFWSgxLCAyLCBLRVlfRE9UKSwKLQlLRVkoMSwgMywgS0VZX1YpLAotCUtFWSgxLCA0LCBLRVlfRE9XTiksCi0JS0VZKDIsIDAsIEtFWV9QKSwKLQlLRVkoMiwgMSwgS0VZX0YpLAorCUtFWSgxLCAyLCBLRVlfRiksCisJS0VZKDEsIDMsIEtFWV9HKSwKKwlLRVkoMSwgNCwgS0VZX0gpLAorCUtFWSgxLCA1LCBLRVlfSiksCisJS0VZKDEsIDYsIEtFWV9LKSwKKwlLRVkoMSwgNywgS0VZX0wpLAorCUtFWSgyLCAwLCBLRVlfRSksCisJS0VZKDIsIDEsIEtFWV9ET1QpLAogCUtFWSgyLCAyLCBLRVlfVVApLAotCUtFWSgyLCAzLCBLRVlfQiksCi0JS0VZKDIsIDQsIEtFWV9SSUdIVCksCi0JS0VZKDMsIDAsIEtFWV9DT01NQSksCi0JS0VZKDMsIDEsIEtFWV9HKSwKLQlLRVkoMywgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMiwgMywgS0VZX0VOVEVSKSwKKwlLRVkoMiwgNSwgS0VZX1opLAorCUtFWSgyLCA2LCBLRVlfWCksCisJS0VZKDIsIDcsIEtFWV9DKSwKKwlLRVkoMywgMCwgS0VZX1IpLAorCUtFWSgzLCAxLCBLRVlfViksCisJS0VZKDMsIDIsIEtFWV9CKSwKIAlLRVkoMywgMywgS0VZX04pLAotCUtFWSg0LCAwLCBLRVlfQkFDS1NQQUNFKSwKLQlLRVkoNCwgMSwgS0VZX0gpLAotCUtFWSg0LCAzLCBLRVlfTSksCisJS0VZKDMsIDQsIEtFWV9NKSwKKwlLRVkoMywgNSwgS0VZX1NQQUNFKSwKKwlLRVkoMywgNiwgS0VZX1NQQUNFKSwKKwlLRVkoMywgNywgS0VZX0xFRlQpLAorCUtFWSg0LCAwLCBLRVlfVCksCisJS0VZKDQsIDEsIEtFWV9ET1dOKSwKKwlLRVkoNCwgMiwgS0VZX1JJR0hUKSwKIAlLRVkoNCwgNCwgS0VZX0xFRlRDVFJMKSwKLQlLRVkoNSwgMSwgS0VZX0opLAotCUtFWSg1LCAyLCBLRVlfWiksCi0JS0VZKDUsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDUsIDQsIEtFWV9MRUZUU0hJRlQpLAotCUtFWSg2LCAwLCBLRVlfQSksCi0JS0VZKDYsIDEsIEtFWV9LKSwKLQlLRVkoNiwgMiwgS0VZX1gpLAotCUtFWSg2LCAzLCBLRVlfU1BBQ0UpLAotCUtFWSg2LCA0LCBLRVlfRk4pLAotCUtFWSg3LCAwLCBLRVlfUyksCi0JS0VZKDcsIDEsIEtFWV9MKSwKLQlLRVkoNywgMiwgS0VZX0MpLAotCUtFWSg3LCAzLCBLRVlfTEVGVCksCi0JS0VZKDB4ZmYsIDAsIEtFWV9GNiksCi0JS0VZKDB4ZmYsIDEsIEtFWV9GNyksCi0JS0VZKDB4ZmYsIDIsIEtFWV9GOCksCi0JS0VZKDB4ZmYsIDQsIEtFWV9GOSksCi0JS0VZKDB4ZmYsIDUsIEtFWV9GMTApLAorCUtFWSg0LCA1LCBLRVlfUklHSFRBTFQpLAorCUtFWSg0LCA2LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgS0VZX1kpLAorCUtFWSg2LCAwLCBLRVlfVSksCisJS0VZKDcsIDAsIEtFWV9JKSwKKwlLRVkoNywgMSwgS0VZX0Y3KSwKKwlLRVkoNywgMiwgS0VZX0Y4KSwKKwlLRVkoMHhmZiwgMiwgS0VZX0Y5KSwKKwlLRVkoMHhmZiwgNCwgS0VZX0YxMCksCisJS0VZKDB4ZmYsIDUsIEtFWV9GMTEpLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgcng1MV9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSByeDUxX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocng1MV9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKQEAgLTQ0MCw3ICs0NDQsNyBAQAogCQlyeDUxX3R3bGRhdGEudmF1eDMgPSAmcng1MV92YXV4M19jYW07CiAJCXJ4NTFfdHdsZGF0YS52bW1jMiA9ICZyeDUxX3ZtbWMyOwogCX0KLQlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xLAorCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyMjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCiAJCQlBUlJBWV9TSVpFKHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSkpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCAxMDAsIE5VTEwsIDApOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwppbmRleCBmOTE5NmMzLi43ODg2OWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKaW5kZXggMzI0MDA5ZS4uNTFlMGIzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgpAQCAtMjIsNzEgKzIzLDc0IEBACiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKIC8qIFpvb20yIGhhcyBRd2VydHkga2V5Ym9hcmQqLwotc3RhdGljIGludCB6b29tMl90d2w0MDMwX2tleW1hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0UpLAotCUtFWSgxLCAwLCBLRVlfUiksCi0JS0VZKDIsIDAsIEtFWV9UKSwKLQlLRVkoMywgMCwgS0VZX0hPTUUpLAotCUtFWSg2LCAwLCBLRVlfSSksCi0JS0VZKDcsIDAsIEtFWV9MRUZUU0hJRlQpLAotCUtFWSgwLCAxLCBLRVlfRCksCisJS0VZKDAsIDEsIEtFWV9SKSwKKwlLRVkoMCwgMiwgS0VZX1QpLAorCUtFWSgwLCAzLCBLRVlfSE9NRSksCisJS0VZKDAsIDYsIEtFWV9JKSwKKwlLRVkoMCwgNywgS0VZX0xFRlRTSElGVCksCisJS0VZKDEsIDAsIEtFWV9EKSwKIAlLRVkoMSwgMSwgS0VZX0YpLAotCUtFWSgyLCAxLCBLRVlfRyksCi0JS0VZKDMsIDEsIEtFWV9TRU5EKSwKLQlLRVkoNiwgMSwgS0VZX0spLAotCUtFWSg3LCAxLCBLRVlfRU5URVIpLAotCUtFWSgwLCAyLCBLRVlfWCksCi0JS0VZKDEsIDIsIEtFWV9DKSwKKwlLRVkoMSwgMiwgS0VZX0cpLAorCUtFWSgxLCAzLCBLRVlfU0VORCksCisJS0VZKDEsIDYsIEtFWV9LKSwKKwlLRVkoMSwgNywgS0VZX0VOVEVSKSwKKwlLRVkoMiwgMCwgS0VZX1gpLAorCUtFWSgyLCAxLCBLRVlfQyksCiAJS0VZKDIsIDIsIEtFWV9WKSwKLQlLRVkoMywgMiwgS0VZX0VORCksCi0JS0VZKDYsIDIsIEtFWV9ET1QpLAotCUtFWSg3LCAyLCBLRVlfQ0FQU0xPQ0spLAotCUtFWSgwLCAzLCBLRVlfWiksCi0JS0VZKDEsIDMsIEtFWV9LUFBMVVMpLAotCUtFWSgyLCAzLCBLRVlfQiksCisJS0VZKDIsIDMsIEtFWV9FTkQpLAorCUtFWSgyLCA2LCBLRVlfRE9UKSwKKwlLRVkoMiwgNywgS0VZX0NBUFNMT0NLKSwKKwlLRVkoMywgMCwgS0VZX1opLAorCUtFWSgzLCAxLCBLRVlfS1BQTFVTKSwKKwlLRVkoMywgMiwgS0VZX0IpLAogCUtFWSgzLCAzLCBLRVlfRjEpLAotCUtFWSg2LCAzLCBLRVlfTyksCi0JS0VZKDcsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDAsIDQsIEtFWV9XKSwKLQlLRVkoMSwgNCwgS0VZX1kpLAotCUtFWSgyLCA0LCBLRVlfVSksCi0JS0VZKDMsIDQsIEtFWV9GMiksCisJS0VZKDMsIDYsIEtFWV9PKSwKKwlLRVkoMywgNywgS0VZX1NQQUNFKSwKKwlLRVkoNCwgMCwgS0VZX1cpLAorCUtFWSg0LCAxLCBLRVlfWSksCisJS0VZKDQsIDIsIEtFWV9VKSwKKwlLRVkoNCwgMywgS0VZX0YyKSwKIAlLRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKSwKLQlLRVkoNiwgNCwgS0VZX0wpLAotCUtFWSg3LCA0LCBLRVlfTEVGVCksCi0JS0VZKDAsIDUsIEtFWV9TKSwKLQlLRVkoMSwgNSwgS0VZX0gpLAotCUtFWSgyLCA1LCBLRVlfSiksCi0JS0VZKDMsIDUsIEtFWV9GMyksCisJS0VZKDQsIDYsIEtFWV9MKSwKKwlLRVkoNCwgNywgS0VZX0xFRlQpLAorCUtFWSg1LCAwLCBLRVlfUyksCisJS0VZKDUsIDEsIEtFWV9IKSwKKwlLRVkoNSwgMiwgS0VZX0opLAorCUtFWSg1LCAzLCBLRVlfRjMpLAogCUtFWSg1LCA1LCBLRVlfVk9MVU1FRE9XTiksCi0JS0VZKDYsIDUsIEtFWV9NKSwKLQlLRVkoNCwgNSwgS0VZX0VOVEVSKSwKLQlLRVkoNywgNSwgS0VZX1JJR0hUKSwKLQlLRVkoMCwgNiwgS0VZX1EpLAotCUtFWSgxLCA2LCBLRVlfQSksCi0JS0VZKDIsIDYsIEtFWV9OKSwKLQlLRVkoMywgNiwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDUsIDYsIEtFWV9NKSwKKwlLRVkoNSwgNywgS0VZX0VOVEVSKSwKKwlLRVkoNiwgMCwgS0VZX1EpLAorCUtFWSg2LCAxLCBLRVlfQSksCisJS0VZKDYsIDIsIEtFWV9OKSwKKwlLRVkoNiwgMywgS0VZX0JBQ0tTUEFDRSksCiAJS0VZKDYsIDYsIEtFWV9QKSwKLQlLRVkoNywgNiwgS0VZX1VQKSwKIAlLRVkoNiwgNywgS0VZX1NFTEVDVCksCi0JS0VZKDcsIDcsIEtFWV9ET1dOKSwKLQlLRVkoMCwgNywgS0VZX1BST0cxKSwJLypNQUNSTyAxIDxVc2VyIGRlZmluZWQ+ICovCi0JS0VZKDEsIDcsIEtFWV9QUk9HMiksCS8qTUFDUk8gMiA8VXNlciBkZWZpbmVkPiAqLwotCUtFWSgyLCA3LCBLRVlfUFJPRzMpLAkvKk1BQ1JPIDMgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoMywgNywgS0VZX1BST0c0KSwJLypNQUNSTyA0IDxVc2VyIGRlZmluZWQ+ICovCi0JMAorCUtFWSg3LCAwLCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgMSwgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCisJS0VZKDcsIDIsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCAzLCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgNSwgS0VZX1JJR0hUKSwKKwlLRVkoNywgNiwgS0VZX1VQKSwKKwlLRVkoNywgNywgS0VZX0RPV04pCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB6b29tMl9rcF90d2w0MDMwX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHpvb20yX3R3bDQwMzBfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRSh6b29tMl90d2w0MDMwX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApAQCAtMjA5LDcgKzIxMyw4IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSB6b29tMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoem9vbTJfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJCSBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCmluZGV4IGJjNWQzYWMuLmUyZGJlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwpAQCAtNzY5LDYgKzc2OSw3IEBACiAJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgewogCQkJY2xrZGV2X2FkZCgmYy0+bGspOwogCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCQl9CiAKIAkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IGZhZmNkMzIuLjdjNWMwMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtMzM4LDYgKzMzOCwxMyBAQAogICovCiAjZGVmaW5lIFNEUkNfTVBVUkFURV9MT09QUwkJOTYKIAorLyoKKyAqIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1Q6IFVTQkhPU1QgYW5kIFVTQlRMTCBhcmUgdGhlIG9ubHkgY2xvY2tzCisgKiB0aGF0IGFyZSBzb3VyY2VkIGJ5IERQTEw1LCBhbmQgYm90aCBvZiB0aGVzZSByZXF1aXJlIHRoaXMgY2xvY2sKKyAqIHRvIGJlIGF0IDEyMCBNSHogZm9yIHByb3BlciBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVAkJMTIwMDAwMDAwCisKIC8qKgogICogb21hcDM0MzBlczJfY2xrX3NzaV9maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgU1NJCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZApAQCAtNDY2LDcgKzQ3Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmaW50OwogCXUxNiBmID0gMDsKIAotCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIChuICsgMSk7CisJZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gbjsKIAogCXByX2RlYnVnKCJjbG9jazogZmludCBpcyAlbHVcbiIsIGZpbnQpOwogCkBAIC0xMDU2LDYgKzEwNjMsMjggQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQoreworCXN0cnVjdCBjbGsgKmRwbGw1X2NsazsKKwlzdHJ1Y3QgY2xrICpkcGxsNV9tMl9jbGs7CisKKwlkcGxsNV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsNV9jayIpOworCWNsa19zZXRfcmF0ZShkcGxsNV9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCWNsa19lbmFibGUoZHBsbDVfY2xrKTsKKworCS8qIEVuYWJsZSBhdXRvaWRsZSB0byBhbGxvdyBpdCB0byBlbnRlciBsb3cgcG93ZXIgYnlwYXNzICovCisJb21hcDNfZHBsbF9hbGxvd19pZGxlKGRwbGw1X2Nsayk7CisKKwkvKiBQcm9ncmFtIGRwbGw1X20yX2NsayBkaXZpZGVyIGZvciBubyBkaXZpc2lvbiAqLworCWRwbGw1X20yX2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X20yX2NrIik7CisJY2xrX2VuYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19zZXRfcmF0ZShkcGxsNV9tMl9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCisJY2xrX2Rpc2FibGUoZHBsbDVfbTJfY2xrKTsKKwljbGtfZGlzYWJsZShkcGxsNV9jbGspOworCXJldHVybjsKK30KKwogLyogUkVWSVNJVDogTW92ZSB0aGlzIGluaXQgc3R1ZmYgb3V0IGludG8gY2xvY2suYyAqLwogCiAvKgpAQCAtMTE0OCw2ICsxMTc3LDEyIEBACiAJICovCiAJY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOwogCisJLyoKKwkgKiBMb2NrIERQTEw1IGFuZCBwdXQgaXQgaW4gYXV0b2lkbGUuCisJICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMl8wKQorCQlvbWFwM19jbGtfbG9ja19kcGxsNSgpOworCiAJLyogQXZvaWQgc2xlZXBpbmcgZHVyaW5nIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKSAqLwogCS8qIFJFVklTSVQ6IG5vdCB5ZXQgcmVhZHkgZm9yIDM0M3ggKi8KICNpZiAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCBjODExOTc4Li45NTY1YzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTQ4OSw5ICs0ODksOSBAQAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfeDJfY2ssCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCiAJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggNGVmN2I0Zi4uNThhZmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMTM3LDYgKzEzNywzNiBAQAogCX0KIH0KIAorLyoKKyAqIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAgLSBzZXQgdGhlIGh3c3VwIGlkbGUgdHJhbnNpdGlvbiBiaXQKKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqIEBlbmFibGU6IGludCAwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlCisgKgorICogSW50ZXJuYWwgaGVscGVyIGZvciBhY3R1YWxseSBzd2l0Y2hpbmcgdGhlIGJpdCB0aGF0IGNvbnRyb2xzIGh3c3VwCisgKiBpZGxlIHRyYW5zaXRpb25zIGZvciBjbGtkbS4KKyAqLworc3RhdGljIHZvaWQgX29tYXAyX2Nsa2RtX3NldF9od3N1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBpbnQgZW5hYmxlKQoreworCXUzMiB2OworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CisKKwljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKKwkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCisJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworfQogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpfY2xrZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC00NTYsOCArNDg2LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9hbGxvd19pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0JdTMyIHY7Ci0KIAlpZiAoIWNsa2RtKQogCQlyZXR1cm47CiAKQEAgLTQ3MywxOCArNTAxLDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQlfY2xrZG1fYWRkX2F1dG9kZXBzKGNsa2RtKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQllbHNlCi0JCUJVRygpOwotCi0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJICAgIENNX0NMS1NUQ1RSTCk7CisJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CiAKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogfQpAQCAtNTAwLDggKzUxNyw2IEBACiAgKi8KIHZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0JdTMyIHY7Ci0KIAlpZiAoIWNsa2RtKQogCQlyZXR1cm47CiAKQEAgLTUxNCwxNiArNTI5LDcgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGRpc2FibGluZyBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBmb3IgJXNcbiIsCiAJCSBjbGtkbS0+bmFtZSk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKLQllbHNlCi0JCUJVRygpOwotCi0JY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCi0JCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwpAQCAtNTY5LDEwICs1NzUsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKKwl9CiAKIAlwd3JkbV93YWl0X3RyYW5zaXRpb24oY2xrZG0tPnB3cmRtLnB0cik7CiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKQEAgLTYyMywxMCArNjMzLDE0IEBACiAJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8Ci0JICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpIHsKKwkJLyogRGlzYWJsZSBIVyB0cmFuc2l0aW9ucyB3aGVuIHdlIGFyZSBjaGFuZ2luZyBkZXBzICovCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKLQllbHNlCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDEpOworCX0gZWxzZSB7CiAJCW9tYXAyX2Nsa2RtX3NsZWVwKGNsa2RtKTsKKwl9CiAKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYwppbmRleCBlNGViZDZkLi40YWY3NmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtNHh4eC5oIgogCiAvKiBYWFggbW92ZSB0aGlzIHRvIGNtLmggKi8KIC8qIE1BWF9NT0RVTEVfUkVBRFlfVElNRTogbWF4IG1pbGxpc2Vjb25kcyBmb3IgbW9kdWxlIHRvIGxlYXZlIGlkbGUgKi8KQEAgLTUwLDE5ICs0OSw3IEBACiAgKi8KIGludCBvbWFwNF9jbV93YWl0X2lkbGVzdF9yZWFkeSh1MzIgcHJjbV9tb2QsIHU4IHByY21fZGV2X29mZnMpCiB7Ci0JaW50IGkgPSAwOwotCXU4IGNtX2lkOwotCXUxNiBwcmNtX21vZF9vZmZzOwotCXUzMiBtYXNrID0gT01BUDRfUFJDTV9DTV9DTEtDVFJMX0lETEVTVF9NQVNLOwotCi0JY21faWQgPSBwcmNtX21vZCA+PiBPTUFQNF9QUkNNX01PRF9DTV9JRF9TSElGVDsKLQlwcmNtX21vZF9vZmZzID0gcHJjbV9tb2QgJiBPTUFQNF9QUkNNX01PRF9PRkZTX01BU0s7Ci0KLQl3aGlsZSAoKChvbWFwNF9jbV9yZWFkX21vZF9yZWcoY21faWQsIHByY21fbW9kX29mZnMsIHByY21fZGV2X29mZnMsCi0JCQkJICAgICAgIE9NQVA0X0NNX0NMS0NUUkxfRFJFRykgJiBtYXNrKSAhPSAwKSAmJgotCSAgICAgICAoaSsrIDwgTUFYX01PRFVMRV9SRUFEWV9USU1FKSkKLQkJdWRlbGF5KDEpOwotCi0JcmV0dXJuIChpIDwgTUFYX01PRFVMRV9SRUFEWV9USU1FKSA/IDAgOiAtRUJVU1k7CisJLyogRklYTUU6IEFkZCBjbG9jayBtYW5hZ2VyIHJlbGF0ZWQgY29kZSAqLworCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IGJjZmNmYzcuLmZhZjdhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0zNTUsMjkgKzM1NSw2MCBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X21jc3BpX2ZpeHVwKHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCW9tYXAyX21jc3BpMV9yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTFfQkFTRTsKLQkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTFfQkFTRSArIDB4ZmY7Ci0JCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTJfQkFTRTsKLQkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTJfQkFTRSArIDB4ZmY7Ci0JCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTNfQkFTRTsKLQkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTNfQkFTRSArIDB4ZmY7Ci0JCW9tYXAyX21jc3BpNF9yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTRfQkFTRTsKLQkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTRfQkFTRSArIDB4ZmY7Ci0JfQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOworCW9tYXAyX21jc3BpMV9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkxX0JBU0UgKyAweGZmOworCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTJfQkFTRTsKKwlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKKwlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkzX0JBU0U7CisJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTNfQkFTRSArIDB4ZmY7CisJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOworCW9tYXAyX21jc3BpNF9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEk0X0JBU0UgKyAweGZmOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwNF9tY3NwaV9maXh1cCh2b2lkKQoreworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbWNzcGkzX2luaXQodm9pZCkKK3sKK30KICNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGk0KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGk0KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbWNzcGk0X2luaXQodm9pZCkKK3sKK30KICNlbmRpZgorCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkKK3sKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXA0X21jc3BpX2ZpeHVwKCk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTIpOworCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzQzeCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKQorCQlvbWFwMl9tY3NwaTNfaW5pdCgpOworCisJaWYgKGNwdV9pc19vbWFwMzQzeCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKQorCQlvbWFwMl9tY3NwaTRfaW5pdCgpOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCAxNTg3NjgyOC4uZjNjOTkyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTM2Niw3ICszNjYsNyBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWdwbWNfY3NfZW5hYmxlX21lbShjcywgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAkqYmFzZSA9IHJlcy0+c3RhcnQ7CiAJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDEpOwogb3V0OgpAQCAtMzc4LDcgKzM3OCw3IEBACiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpCiB7CiAJc3Bpbl9sb2NrKCZncG1jX21lbV9sb2NrKTsKLQlpZiAoY3MgPj0gR1BNQ19DU19OVU0gfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CisJaWYgKGNzID49IEdQTUNfQ1NfTlVNIHx8IGNzIDwgMCB8fCAhZ3BtY19jc19yZXNlcnZlZChjcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBub24tcmVzZXJ2ZWQgR1BNQyBDUyVkXG4iLCBjcyk7CiAJCUJVRygpOwogCQlzcGluX3VubG9jaygmZ3BtY19tZW1fbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggNzU3NGI2Zi4uNTZiZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMjk0LDE1ICsyOTQsMTcgQEAKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJaHdtb2RzID0gb21hcDM0eHhfaHdtb2RzOwogCi0Jb21hcF9od21vZF9pbml0KGh3bW9kcyk7Ci0Jb21hcDJfbXV4X2luaXQoKTsKICNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgdGhlIGNsa2RldiBpcyByZWFkeSAqLwogCS8qIFRoZSBPUFAgdGFibGVzIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCBiZWZvcmUgYSBjbGsgaW5pdCAqLworCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOworCW9tYXAyX211eF9pbml0KCk7CiAJb21hcF9wbV9pZl9lYXJseV9pbml0KG1wdV9vcHBzLCBkc3Bfb3BwcywgbDNfb3Bwcyk7CiAJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CiAJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwogCW9tYXAyX2Nsa19pbml0KCk7CisjZW5kaWYKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CiAJb21hcF9od21vZF9sYXRlX2luaXQoKTsKIAlvbWFwX3BtX2lmX2luaXQoKTsKIAlvbWFwMl9zZHJjX2luaXQoc2RyY19jczAsIHNkcmNfY3MxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCmluZGV4IDJkOWI1Y2MuLjRhMGUxY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwpAQCAtNzksNyArNzksNyBAQAogCQlsID0gaW9tbXVfcmVhZF9yZWcob2JqLCBNTVVfU1lTU1RBVFVTKTsKIAkJaWYgKGwgJiBNTVVfU1lTX1JFU0VURE9ORSkKIAkJCWJyZWFrOwotCX0gd2hpbGUgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKIAogCWlmICghKGwgJiBNTVVfU1lTX1JFU0VURE9ORSkpIHsKIAkJZGV2X2VycihvYmotPmRldiwgImNhbid0IHRha2UgbW11IG91dCBvZiByZXNldFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IDZmNzFmMzcuLmVmNTdiMzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMzAsNiArMzAsMTQgQEAKICNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKHUpCQkoMSA8PCAoMiAqICh1KSkpCiAjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwodSkJCSgxIDw8ICgyICogKHUpICsgMSkpCiAKKy8qIFNZU0NPTkZJRzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQVVUT0lETEUJKDEgPDwgMCkKKyNkZWZpbmUgU09GVFJFU0VUCSgxIDw8IDEpCisjZGVmaW5lIFNNQVJUSURMRQkoMiA8PCAzKQorCisvKiBTWVNTVEFUVVM6IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFU0VURE9ORQkoMSA8PCAwKQorCiAjZGVmaW5lIE1CT1hfUkVHX1NJWkUJCQkweDEyMAogI2RlZmluZSBNQk9YX05SX1JFR1MJCQkoTUJPWF9SRUdfU0laRSAvIHNpemVvZih1MzIpKQogCkBAIC02OSwyMSArNzcsMzMgQEAKIC8qIE1haWxib3ggSC9XIHByZXBhcmF0aW9ucyAqLwogc3RhdGljIGludCBvbWFwMl9tYm94X3N0YXJ0dXAoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKLQl1bnNpZ25lZCBpbnQgbDsKKwl1MzIgbDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CiAJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7Ci0JCXByaW50aygiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBnZXQgbWFpbGJveGVzX2lja1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljbGtfZW5hYmxlKG1ib3hfaWNrX2hhbmRsZSk7CiAKKwltYm94X3dyaXRlX3JlZyhTT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvIHsKKwkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNTVEFUVVMpOworCQlpZiAobCAmIFJFU0VURE9ORSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWlmICghKGwgJiBSRVNFVERPTkUpKSB7CisJCXByX2VycigiQ2FuJ3QgdGFrZSBtbXUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CiAJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KLQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JbCB8PSAweDAwMDAwMDExOworCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKIAltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7CiAKIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKQEAgLTE1Niw2ICsxNzYsOSBAQAogCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CiAKIAltYm94X3dyaXRlX3JlZyhiaXQsIHAtPmlycXN0YXR1cyk7CisKKwkvKiBGbHVzaCBwb3N0ZWQgd3JpdGUgZm9yIGlycSBzdGF0dXMgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLworCW1ib3hfcmVhZF9yZWcocC0+aXJxc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBvbWFwMl9tYm94X2lzX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LApAQCAtMjc3LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFtYm94X2Jhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCAyZGFhNTk1Li5iNWZhYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQ2MCw2ICs0NjAsOCBAQAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFHOV8zNFhYX0dQSU8yMyIsIDB4NWVlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LApAQCAtNDcyLDYgKzQ3NCw4IEBACiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNF8zNFhYX0dQSU8xMzVfT1VUIiwgMHgxNjIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxYjRjMTYwLi4yZmM0ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb25seSBPTUFQMyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKKwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBtX2RlYnVnIiwgTlVMTCk7CiAJaWYgKElTX0VSUihkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZCk7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaF9ub2xvY2socHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDBmZjVhNmMuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNTEsOTcgKzUxLDExMiBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07CiAKLS8qIFBSQ00gSW50ZXJydXB0IEhhbmRsZXIgZm9yIHdha2V1cHMgKi8KKy8qCisgKiBQUkNNIEludGVycnVwdCBIYW5kbGVyIEhlbHBlciBGdW5jdGlvbgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2xlYXIgYW55IHdha2UtdXAgZXZlbnRzIGxhdGNoZWQKKyAqIGluIHRoZSBQUkNNIFBNX1dLU1RfeCByZWdpc3RlcnMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSB3YWtlLXVwIGV2ZW50CisgKiBtYXkgb2NjdXIgd2hpbHN0IGF0dGVtcHRpbmcgdG8gY2xlYXIgYSBQTV9XS1NUX3ggcmVnaXN0ZXIgYW5kIHRodXMKKyAqIHNldCBhbm90aGVyIGJpdCBpbiB0aGlzIHJlZ2lzdGVyLiBBIHdoaWxlIGxvb3AgaXMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHBlcmlwaGVyYWwgd2FrZS11cCBldmVudHMgb2NjdXJyaW5nIHdoaWxlIGF0dGVtcHRpbmcgdG8KKyAqIGNsZWFyIHRoZSBQTV9XS1NUX3ggYXJlIGRldGVjdGVkIGFuZCBjbGVhcmVkLgorICovCitzdGF0aWMgaW50IHByY21fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncykKK3sKKwl1MzIgd2tzdCwgZmNsaywgaWNsaywgY2xrZW47CisJdTE2IHdrc3Rfb2ZmID0gKHJlZ3MgPT0gMykgPyBPTUFQMzQzMEVTMl9QTV9XS1NUMyA6IFBNX1dLU1QxOworCXUxNiBmY2xrX29mZiA9IChyZWdzID09IDMpID8gT01BUDM0MzBFUzJfQ01fRkNMS0VOMyA6IENNX0ZDTEtFTjE7CisJdTE2IGljbGtfb2ZmID0gKHJlZ3MgPT0gMykgPyBDTV9JQ0xLRU4zIDogQ01fSUNMS0VOMTsKKwl1MTYgZ3Jwc2VsX29mZiA9IChyZWdzID09IDMpID8KKwkJT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyA6IE9NQVAzNDMwX1BNX01QVUdSUFNFTDsKKwlpbnQgYyA9IDA7CisKKwl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIHdrc3Rfb2ZmKTsKKwl3a3N0ICY9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCBncnBzZWxfb2ZmKTsKKwlpZiAod2tzdCkgeworCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWNsa19vZmYpOworCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZmNsa19vZmYpOworCQl3aGlsZSAod2tzdCkgeworCQkJY2xrZW4gPSB3a3N0OworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CisJCQkvKgorCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgorCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKKwkJCSAqLworCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKKwkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJYysrOworCQl9CisJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgX3ByY21faW50X2hhbmRsZV93YWtldXAodm9pZCkKK3sKKwlpbnQgYzsKKworCWMgPSBwcmNtX2NsZWFyX21vZF9pcnFzKFdLVVBfTU9ELCAxKTsKKwljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDEpOworCWMgKz0gcHJjbV9jbGVhcl9tb2RfaXJxcyhPTUFQMzQzMF9QRVJfTU9ELCAxKTsKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDMpOworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIDEpOworCX0KKworCXJldHVybiBjOworfQorCisvKgorICogUFJDTSBJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIFRoZSBQUk1fSVJRU1RBVFVTX01QVSByZWdpc3RlciBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIFBSQ00gZm9yIHRoZSBNUFUuIFRoZXNlIGJpdHMgbXVzdCBiZSBjbGVhcmVkIGluCisgKiBvcmRlciB0byBjbGVhciB0aGUgUFJDTSBpbnRlcnJ1cHQuIFRoZSBQUkNNIGludGVycnVwdCBoYW5kbGVyIGlzCisgKiBpbXBsZW1lbnRlZCB0byBzaW1wbHkgY2xlYXIgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIGluIG9yZGVyIHRvIGNsZWFyCisgKiB0aGUgUFJDTSBpbnRlcnJ1cHQuIFBsZWFzZSBub3RlIHRoYXQgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVCisgKiByZWdpc3RlciBpbmRpY2F0ZXMgdGhhdCBhIHdha2UtdXAgZXZlbnQgaXMgcGVuZGluZyBmb3IgdGhlIE1QVSBhbmQKKyAqIHRoaXMgYml0IGNhbiBvbmx5IGJlIGNsZWFyZWQgaWYgdGhlIGFsbCB0aGUgd2FrZS11cCBldmVudHMgbGF0Y2hlZAorICogaW4gdGhlIHZhcmlvdXMgUE1fV0tTVF94IHJlZ2lzdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGRvLXdoaWxlIGxvb3Agc28gdGhhdCBpZiBhIHdha2UtdXAKKyAqIGV2ZW50IG9jY3VycmVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJjbSBpbnRlcnJ1cHQgaGFuZGxlcgorICogKHNldHRpbmcgYSBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgUE1fV0tTVF94IHJlZ2lzdGVyIGFuZCB0aHVzCisgKiBwcmV2ZW50aW5nIHVzIGZyb20gY2xlYXJpbmcgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIHJlZ2lzdGVyKQorICogdGhpcyB3b3VsZCBiZSBoYW5kbGVkLgorICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHJjbV9pbnRlcnJ1cHRfaGFuZGxlciAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXUzMiB3a3N0LCBpcnFzdGF0dXNfbXB1OwotCXUzMiBmY2xrLCBpY2xrOworCXUzMiBpcnFzdGF0dXNfbXB1OworCWludCBjID0gMDsKIAotCS8qIFdLVVAgKi8KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJZmNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJcHJtX3dyaXRlX21vZF9yZWcod2tzdCwgV0tVUF9NT0QsIFBNX1dLU1QpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQl9CisJZG8geworCQlpcnFzdGF0dXNfbXB1ID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAorCQkJCQlPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwogCi0JLyogQ09SRSAqLwotCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIENPUkVfTU9ELCBDTV9JQ0xLRU4xKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fRkNMS0VOMSk7Ci0JCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCX0KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCWlmICh3a3N0KSB7Ci0JCWljbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fSUNMS0VOMyk7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpKQotCQkJY3B1X3JlbGF4KCk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQl9CisJCWlmIChpcnFzdGF0dXNfbXB1ICYgKE9NQVAzNDMwX1dLVVBfU1QgfCBPTUFQMzQzMF9JT19TVCkpIHsKKwkJCWMgPSBfcHJjbV9pbnRfaGFuZGxlX3dha2V1cCgpOwogCi0JLyogUEVSICovCi0Jd2tzdCA9IHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS1NUKTsKLQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JfQotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJLyogVVNCSE9TVCAqLwotCQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tTVCk7Ci0JCWlmICh3a3N0KSB7Ci0JCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgICAgQ01fSUNMS0VOKTsKLQkJCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSAgICAgICBDTV9GQ0xLRU4pOwotCQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJICAgIENNX0lDTEtFTik7Ci0JCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgQ01fRkNMS0VOKTsKLQkJCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgIFBNX1dLU1QpOwotCQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQlQTV9XS1NUKSkKLQkJCQljcHVfcmVsYXgoKTsKLQkJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSBDTV9JQ0xLRU4pOwotCQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7CisJCQkvKgorCQkJICogSXMgdGhlIE1QVSBQUkNNIGludGVycnVwdCBoYW5kbGVyIHJhY2luZyB3aXRoIHRoZQorCQkJICogSVZBMiBQUkNNIGludGVycnVwdCBoYW5kbGVyID8KKwkJCSAqLworCQkJV0FSTihjID09IDAsICJwcmNtOiBXQVJOSU5HOiBQUkNNIGluZGljYXRlZCBNUFUgd2FrZXVwICIKKwkJCSAgICAgImJ1dCBubyB3YWtldXAgc291cmNlcyBhcmUgbWFya2VkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFhYWCB3ZSBuZWVkIHRvIGV4cGFuZCBvdXIgUFJDTSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJV0FSTigxLCAicHJjbTogV0FSTklORzogUFJDTSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIGJ1dCAiCisJCQkgICAgICJubyBjb2RlIHRvIGhhbmRsZSBpdCAoJTA4eClcbiIsIGlycXN0YXR1c19tcHUpOwogCQl9Ci0JfQogCi0JaXJxc3RhdHVzX21wdSA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKLQkJCQkJIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKLQkJCSAgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwkJcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKKwkJCQkJT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAotCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCkpCi0JCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC02MjQsNiArNjM5LDE3IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfSU9fRU4gfCBPTUFQMzQzMF9XS1VQX0VOLAogCQkJICBPQ1BfTU9ELCBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwogCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCisJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CisJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9FTl9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAorCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKKwkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMiB8IE9NQVAzNDMwX0VOX0dQSU8zIHwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzYgfCBPTUFQMzQzMF9FTl9VQVJUMywKKwkJCSAgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fTVBVR1JQU0VMKTsKKwogCS8qIERvbid0IGF0dGFjaCBJVkEgaW50ZXJydXB0cyAqLwogCXBybV93cml0ZV9tb2RfcmVnKDAsIFdLVVBfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwogCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCAyNTk0Y2JmLi5mMDAyODlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0yNzMsMzUgKzI3Myw1MCBAQAogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoIC0gY2FsbCBmdW5jdGlvbiBvbiBlYWNoIHJlZ2lzdGVyZWQgY2xvY2tkb21haW4KKyAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCiAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCiAgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCi0gKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKLSAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KLSAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKLSAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KLSAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKKyAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgorICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpCitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCQl2b2lkICp1c2VyKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqdGVtcF9wd3JkbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX3B3cmRtLCAmcHdyZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKSh0ZW1wX3B3cmRtLCB1c2VyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyAncHdyZG1fZm9yX2VhY2hfbm9sb2NrKCknLCBidXQga2VlcHMgdGhlCisgKiAmcHdyZG1fcndsb2NrIGxvY2tlZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlIG1hbmlwdWxhdGlvbgorICogZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoIGhhcmR3YXJlIHBvd2VyZG9tYWluCisgKiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXJldCA9IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhmbiwgdXNlcik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggM2E1MjljNy4uNTRkZmViNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksMTYgKzEwOSw2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgewotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKLQkJLmlycQkJPSA3MCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAotCX0sIHsKLSNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CkBAIC0xMjYsNyArMTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKIAkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCiAJCS5pcnEJCT0gNzAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKQEAgLTU3OSw3ICs1NjksNyBAQAogCXsKIAkJLnBkZXYgPSB7CiAJCQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCQkJLmlkCQkJPSAzCisJCQkuaWQJCQk9IDMsCiAJCQkuZGV2CQkJPSB7CiAJCQkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YTMsCiAJCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggODljOTkyYi4uYTZmOGVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxMSBAQAogCiBjb25maWcgQ1BVX1BYQTkzNQogCWJvb2wgIlBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAorCitjb25maWcgQ1BVX1BYQTk1MAorCWJvb2wgIlBYQTk1MCAoY29kZW5hbWUgVGF2b3ItUFYyKSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAogCiBlbmRtZW51CiAKQEAgLTc5LDYgKzg0LDEyIEBACiAJYm9vbCAiTmVjIE1vYmlsZXBybyA5MDAvYyIKIAlzZWxlY3QgUFhBMjV4CiAKK2NvbmZpZyBNQUNIX0JBTExPT04zCisJYm9vbCAiQmFsbG9vbiAzIGJvYXJkIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IFBYQV9IQVZFX0JPQVJEX0lSUVMKKwogY29uZmlnIEFSQ0hfUFhBX0lEUAogCWJvb2wgIkFjY2VsZW50IFhzY2FsZSBJRFAiCiAJc2VsZWN0IFBYQTI1eApAQCAtMzcxLDYgKzM4MiwxNSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHVuZ3N0ZW58RTIKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgTUFDSF9QQUxNVEMKKwlib29sICJQYWxtIFR1bmdzdGVufEMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI1eAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufEMKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQUxNVDUKIAlib29sICJQYWxtIFR1bmdzdGVufFQ1IgogCWRlZmF1bHQgeQpAQCAtNDU4LDYgKzQ3OCw3IEBACiAJc2VsZWN0IFBYQTI3eAogCXNlbGVjdCBJV01NWFQKIAlzZWxlY3QgSEFWRV9QV00KKwlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCiBjb25maWcgTUFDSF9FWlhfQTc4MAogCWJvb2wgIk1vdG9yb2xhIEVaWCBBNzgwIgpAQCAtNDg5LDYgKzUxMCwyMSBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gUFhBX0VaWAogCitjb25maWcgTUFDSF9YQ0VQCisJYm9vbCAiSXNrcmF0ZWwgRWxlY3Ryb25pY3MgWENFUCIKKwlzZWxlY3QgUFhBMjV4CisJc2VsZWN0IE1URAorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCXNlbGVjdCBNVERfUEhZU01BUAorCXNlbGVjdCBNVERfQ0ZJX0lOVEVMRVhUCisJc2VsZWN0IE1URF9DRkkKKwlzZWxlY3QgTVREX0NIQVIKKwlzZWxlY3QgU01DOTFYCisJc2VsZWN0IFBYQV9TU1AKKwloZWxwCisJICBQWEEyNTUgYmFzZWQgU2luZ2xlIEJvYXJkIENvbXB1dGVyIHdpdGggU01DIDkxQzExMSBldGhlcm5ldCBjaGlwIGFuZCA2NCBNQiBvZiBmbGFzaC4KKwkgIFR1bmVkIGZvciB1c2FnZSBpbiBMaWJlcmEgaW5zdHJ1bWVudHMgZm9yIHBhcnRpY2xlIGFjY2VsZXJhdG9ycy4KKwogZW5kbWVudQogCiBjb25maWcgUFhBMjV4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGQ0YzYxMjIuLmYxMGUxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubworb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCSs9IGJhbGxvb24zLm8KIG9iai0kKENPTkZJR19NQUNIX01QOTAwQykJKz0gbXA5MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkJKz0gaWRwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCkBAIC01OCw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9FNDAwKQkJKz0gZTQwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVEUyKQkrPSBwYWxtdGUyLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1UQykJKz0gcGFsbXRjLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UNSkJKz0gcGFsbXQ1Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJKz0gcGFsbXR4Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJKz0gcGFsbWxkLm8KQEAgLTc4LDYgKzgwLDggQEAKIG9iai0kKENPTkZJR19NQUNIX0NNX1gzMDApICAgICAgKz0gY20teDMwMC5vCiBvYmotJChDT05GSUdfUFhBX0VaWCkgICAgICAgICAgICs9IGV6eC5vCiAKK29iai0kKENPTkZJR19NQUNIX1hDRVApICAgICAgICAgKz0geGNlcC5vCisKIG9iai0kKENPTkZJR19NQUNIX0lOVEVMTU9URTIpICAgKz0gaW1vdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJKz0gc3RhcmdhdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgQmFsbG9vbmJvYXJkLm9yZyBCYWxsb29uMyBib2FyZC4KKyAqCisgKiAgQXV0aG9yOglOaWNrIEJhbmUsIFdvb2tleSwgSm9uYXRoYW4gTWNEb3dlbGwKKyAqICBDcmVhdGVkOglKdW5lLCAyMDA2CisgKiAgQ29weXJpZ2h0OglUb2J5IENodXJjaGlsbCBMdGQKKyAqICBEZXJpdmVkIGZyb20gbWFpbnN0b25lLmMsIGJ5IE5pY28gUGl0cmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9iYWxsb29uMy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2lycV9lbmFibGVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19mZWF0dXJlc19wcmVzZW50ID0KKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9PSENJKSB8ICgxIDw8IEJBTExPT04zX0ZFQVRVUkVfQ0YpIHwKKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9BVURJTykgfAorCQkoMSA8PCBCQUxMT09OM19GRUFUVVJFX1RPUFBPTFkpOworCitpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSkKK3sKKwlyZXR1cm4gKGJhbGxvb24zX2ZlYXR1cmVzX3ByZXNlbnQgJiAoMSA8PCBmZWF0dXJlKSkgPyAxIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJhbGxvb24zX2hhcyk7CisKK2ludCBfX2luaXQgcGFyc2VfYmFsbG9vbjNfZmVhdHVyZXMoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzdHJpY3Rfc3RydG91bChhcmcsIDAsICZiYWxsb29uM19mZWF0dXJlc19wcmVzZW50KTsKK30KK2Vhcmx5X3BhcmFtKCJiYWxsb29uM19mZWF0dXJlcyIsIHBhcnNlX2JhbGxvb24zX2ZlYXR1cmVzKTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYmFsbG9vbjNfaXJxID0gKGlycSAtIEJBTExPT04zX0lSUSgwKSk7CisJYmFsbG9vbjNfaXJxX2VuYWJsZWQgJj0gfigxIDw8IGJhbGxvb24zX2lycSk7CisJX19yYXdfd3JpdGVsKH5iYWxsb29uM19pcnFfZW5hYmxlZCwgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYmFsbG9vbjNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBiYWxsb29uM19pcnEgPSAoaXJxIC0gQkFMTE9PTjNfSVJRKDApKTsKKwliYWxsb29uM19pcnFfZW5hYmxlZCB8PSAoMSA8PCBiYWxsb29uM19pcnEpOworCV9fcmF3X3dyaXRlbCh+YmFsbG9vbjNfaXJxX2VuYWJsZWQsIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmFsbG9vbjNfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkZQR0EiLAorCS5hY2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLm1hc2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLnVubWFzawkJPSBiYWxsb29uM191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGxvbmcgcGVuZGluZyA9IF9fcmF3X3JlYWRsKEJBTExPT04zX0lOVF9DT05UUk9MX1JFRykgJgorCQkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKworCWRvIHsKKwkJLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKEJBTExPT04zX0FVWF9OSVJRKTsKKwkJd2hpbGUgKHBlbmRpbmcpIHsKKwkJCWlycSA9IEJBTExPT04zX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJCQlwZW5kaW5nICY9IHBlbmRpbmcgLSAxOworCQl9CisJCXBlbmRpbmcgPSBfX3Jhd19yZWFkbChCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcpICYKKwkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXB4YTI3eF9pbml0X2lycSgpOworCS8qIHNldHVwIGV4dHJhIEJhbGxvb24zIGlycXMgKi8KKwlmb3IgKGlycSA9IEJBTExPT04zX0lSUSgwKTsgaXJxIDw9IEJBTExPT04zX0lSUSg3KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmJhbGxvb24zX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQkFMTE9PTjNfQVVYX05JUlEsIGJhbGxvb24zX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX3R5cGUoQkFMTE9PTjNfQVVYX05JUlEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYWluZWQgaGFuZGxlciBpbnN0YWxsZWQgLSBpcnEgJWQgYXV0b21hdGljYWxseSAiCisJCSJlbmFibGVkXG4iLCBfX2Z1bmNfXywgQkFMTE9PTjNfQVVYX05JUlEpOworfQorCitzdGF0aWMgdm9pZCBiYWxsb29uM19iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQoreworCXByX2RlYnVnKCIlczogcG93ZXIgaXMgJXNcbiIsIF9fZnVuY19fLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCBvbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2xjZF9waW5fY29uZmlnW10gPSB7CisJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJR1BJTzk5X0dQSU8sCQkvKiBCYWNrbGlnaHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGJhbGxvb24zX2xjZF9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrCQk9IDM4MDAwLAorCQkueHJlcwkJCT0gNDgwLAorCQkueXJlcwkJCT0gNjQwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmhzeW5jX2xlbgkJPSA4LAorCQkubGVmdF9tYXJnaW4JCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgkJPSA4LAorCQkudnN5bmNfbGVuCQk9IDIsCisJCS51cHBlcl9tYXJnaW4JCT0gNCwKKwkJLmxvd2VyX21hcmdpbgkJPSA1LAorCQkuc3luYwkJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gYmFsbG9vbjNfcHhhZmJfaW5mbyA9IHsKKwkubW9kZXMJCQk9IGJhbGxvb24zX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfbW1jX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKK307CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOworCQkvKiBGSVhNRSBzb21ldGhpbmcgdG8gcHJvZCBoZXJlPyAqLworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CisJCS8qIEZJWE1FIHNvbWV0aGluZyB0byBwcm9kIGhlcmU/ICovCisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIgCT0gYmFsbG9vbjNfbWNpX3NldHBvd2VyLAorfTsKKworc3RhdGljIGludCBiYWxsb29uM191ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcHJfZGVidWcoIiVzOiB1ZGMgY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCVVQMk9DUiB8PSAoVVAyT0NSX0RQUFVFICsgVVAyT0NSX0RQUFVCRSk7CisJCXByX2RlYnVnKCIlczogY29ubmVjdFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+VVAyT0NSX0RQUFVFOworCQlwcl9kZWJ1ZygiJXM6IGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGJhbGxvb24zX3VkY19pbmZvID0geworCS51ZGNfaXNfY29ubmVjdGVkID0gYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCwKKwkudWRjX2NvbW1hbmQgICAgICA9IGJhbGxvb24zX3VkY19jb21tYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19vaGNpX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCit9OworCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9QRVJQT1JUX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2VsZWN0IEJUVUFSVCAnQ09NMS90dHlTMCcgYXMgSU8gb3B0aW9uIGZvciBwaW5zIDQyLzQzLzQ0LzQ1ICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBXYWtldXAgR1BJTyAqLworCUdQSU8xX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAorCisJLyogTkFORCAmIElETEUgTEVEIEdQSU9zICovCisJR1BJTzlfR1BJTywKKwlHUElPMTBfR1BJTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgYmFsbG9vbjNfZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmlkbGUiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9JRExFLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOm5hbmQiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9OQU5ELAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZ3Bpb19sZWRzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmxlZHMJCT0gYmFsbG9vbjNfZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zbGVkX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkluaXRpYWxpc2luZyBCYWxsb29uM1xuIik7CisKKwkvKiBzeXN0ZW0gYnVzIGFyYml0ZXIgc2V0dGluZworCSAqIC0gQ29yZV9QYXJrCisJICogLSBMQ0Rfd3Q6RE1BX3d0OkNPUkVfV3QgPSAyOjM6NAorCSAqLworCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX0FVRElPKSkKKwkJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisKKwlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKKwkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKKwkJZ3Bpb19yZXF1ZXN0KEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwKKwkJCSJMQ0QgQmFja2xpZ2h0IFBvd2VyIik7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOworCQlzZXRfcHhhX2ZiX2luZm8oJmJhbGxvb24zX3B4YWZiX2luZm8pOworCX0KKworCWlmIChiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9NTUMpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX21tY19waW5fY29uZmlnKSk7CisJCXB4YV9zZXRfbWNpX2luZm8oJmJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF9maWNwX2luZm8oJmJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX09IQ0kpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX29oY2lfcGluX2NvbmZpZykpOworCQlweGFfc2V0X29oY2lfaW5mbygmYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF91ZGNfaW5mbygmYmFsbG9vbjNfdWRjX2luZm8pOworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGluX2NvbmZpZykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM2xlZF9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhbGxvb24zX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsJLyogQ1BMRC9GUEdBICovCisJCS52aXJ0dWFsCT0gIEJBTExPT04zX0ZQR0FfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBTExPT04zX0ZQR0FfUEhZUyksCisJCS5sZW5ndGgJCT0gQkFMTE9PTjNfRlBHQV9MRU5HVEgsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoYmFsbG9vbjNfaW9fZGVzYywgQVJSQVlfU0laRShiYWxsb29uM19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQkFMTE9PTjMsICJCYWxsb29uMyIpCisJLyogTWFpbnRhaW5lcjogTmljayBCYW5lLiAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IGJhbGxvb24zX21hcF9pbywKKwkuaW5pdF9pcnEJPSBiYWxsb29uM19pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gYmFsbG9vbjNfaW5pdCwKKwkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDU1OTliY2UuLjk3OGEzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMTIsNyArMTIsNiBAQAogCXVuc2lnbmVkIGludAkJY2tlbjsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5OwogCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKLQlzdHJ1Y3QgY2xrCQkqb3RoZXI7CiB9OwogCiAjZGVmaW5lIElOSVRfQ0xLUkVHKF9jbGssX2Rldm5hbWUsX2Nvbm5hbWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggMWQyY2VjMi4uZWVhNzhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTMsMTMgKzEzLDE4IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKwogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMzQsNiArMzksMTAgQEAKIC8qIE1NQyBwb3dlciBlbmFibGUgKi8KICNkZWZpbmUgR1BJTzEwNV9NTUNfUE9XRVIJKDEwNSkKIAorLyogV0xBTiBHUElPUyAqLworI2RlZmluZSBHUElPMTlfV0xBTl9TVFJBUAkoMTkpCisjZGVmaW5lIEdQSU8xMDJfV0xBTl9SU1QJKDEwMikKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY214MjcwX3Bpbl9jb25maWdbXSA9IHsKIAkvKiBBQyc5NyAqLwogCUdQSU8yOF9BQzk3X0JJVENMSywKQEAgLTk0LDggKzEwMyw4IEBACiAJR1BJTzI2X1NTUDFfUlhELAogCiAJLyogU1NQMiAqLwotCUdQSU8xOV9TU1AyX1NDTEssCi0JR1BJTzE0X1NTUDJfU0ZSTSwKKwlHUElPMTlfR1BJTywJLyogU1NQMiBjbG9jayBpcyB1c2VkIGFzIEdQSU8gZm9yIExpYmVydGFzIHBpbi1zdHJhcCAqLworCUdQSU8xNF9HUElPLAogCUdQSU84N19TU1AyX1RYRCwKIAlHUElPODhfU1NQMl9SWEQsCiAKQEAgLTEyMyw2ICsxMzIsNyBAQAogCUdQSU8wX0dQSU8JfCBXQUtFVVBfT05fRURHRV9CT1RILAogCUdQSU8xMDVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTU1DL1NEIHBvd2VyICovCiAJR1BJTzUzX0dQSU8sCQkJCS8qIFBDIGNhcmQgcmVzZXQgKi8KKwlHUElPMTAyX0dQSU8sCQkJCS8qIFdMQU4gcmVzZXQgKi8KIAogCS8qIE5BTkQgY29udHJvbHMgKi8KIAlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KQEAgLTEzMSw2ICsxNDEsNyBAQAogCS8qIGludGVycnVwdHMgKi8KIAlHUElPMTBfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogCUdQSU84M19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogV0xBTiBpbnRlcnJ1cHQgKi8KIH07CiAKIC8qIFYzMDIwIFJUQyAqLwpAQCAtMjcxLDU2ICsyODIsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQotc3RhdGljIGludCBjbXgyNzBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgaXJxX2hhbmRsZXJfdCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTA1X01NQ19QT1dFUiwgIk1NQy9TRCBwb3dlciIpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oZGV2LCAicG93ZXIgZ3BpbyB1bmF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDVfTU1DX1BPV0VSLCAwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKENNWDI3MF9NTUNfSVJRLCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOwotCQlkZXZfZXJyKGRldiwgImNteDI3MF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCIKLQkJCSIgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjbXgyNzBfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlkZXZfZGJnKGRldiwgInBvd2VyIG9uXG4iKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDApOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTU1DX1BPV0VSLCAxKTsKLQkJZGV2X2RiZyhkZXYsICJwb3dlciBvZmZcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY214MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDTVgyNzBfTU1DX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU8xMDVfTU1DX1BPV0VSKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbXgyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbXgyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGNteDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gY214MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODNfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU8xMDVfTU1DX1BPV0VSLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0zMzEsNiArMjk4LDEwMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgY21feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorCS5lbmFibGVfZG1hCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNtX3gyNzBfbGliZXJ0YXNfY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkCT0gMSwKKwkudHhfdGhyZXNob2xkCT0gMSwKKwkudGltZW91dAk9IDEwMDAsCisJLmdwaW9fY3MJPSAxNCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtX3gyNzBfbGliZXJ0YXNfcGluX2NvbmZpZ1tdID0geworCS8qIFNTUDIgKi8KKwlHUElPMTlfU1NQMl9TQ0xLLAorCUdQSU8xNF9HUElPLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKK307CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBncGlvX3JlcXVlc3QoR1BJTzE5X1dMQU5fU1RSQVAsICJXTEFOIFNUUkFQIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTAyX1dMQU5fUlNULCAiV0xBTiBSU1QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3N0cmFwOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzE5X1dMQU5fU1RSQVAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjbV94MjcwX2xpYmVydGFzX3Bpbl9jb25maWcpKTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDEpOworCW1zbGVlcCgxMDApOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX3NldHVwKHNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfc3RyYXA6CisJZ3Bpb19mcmVlKEdQSU8xOV9XTEFOX1NUUkFQKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc190ZWFyZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWdwaW9fZnJlZShHUElPMTAyX1dMQU5fUlNUKTsKKwlncGlvX2ZyZWUoR1BJTzE5X1dMQU5fU1RSQVApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSBjbV94MjcwX2xpYmVydGFzX3BkYXRhID0geworCS51c2VfZHVtbXlfd3JpdGVzCT0gMSwKKwkuc2V0dXAJCQk9IGNtX3gyNzBfbGliZXJ0YXNfc2V0dXAsCisJLnRlYXJkb3duCQk9IGNtX3gyNzBfbGliZXJ0YXNfdGVhcmRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJsaWJlcnRhc19zcGkiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEzMDAwMDAwLAorCQkuYnVzX251bQkJPSAyLAorCQkuaXJxCQkJPSBncGlvX3RvX2lycSg5NSksCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmNtX3gyNzBfbGliZXJ0YXNfY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNtX3gyNzBfbGliZXJ0YXNfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9zcGkodm9pZCkKK3sKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZjbV94MjcwX3NwaV9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjbV94MjcwX3NwaV9kZXZpY2VzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKQEAgLTM0Myw0ICs0MDQsNSBAQAogCWNteDI3MF9pbml0X21tYygpOwogCWNteDI3MF9pbml0X29oY2koKTsKIAljbXgyNzBfaW5pdF8yNzAwRygpOworCWNteDI3MF9pbml0X3NwaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDQ2NWRhMjYuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsODIgKzI5MiwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCi0gICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbV94MzAwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNtX3gzMDBfbWNpX2luaXQsCi0JLmV4aXQJCT0gY21feDMwMF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODJfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUNfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU84NV9NTUMyX1dQKTsKLX0KLQorLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKKyAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCiBzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBDTS1YMzAwIE1NQyBjb250cm9sbGVyCi0JICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU84Ml9NTUMyX0lSUSwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJTzgyX01NQzJfSVJRKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPODVfTU1DMl9XUCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPODVfTU1DMl9XUCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDTV9YMzAwX01NQzJfSVJRLCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTU1DL1NEL1NESU86ICIKLQkJCQkiY2FuJ3QgcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCiAJcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoR1BJTzg1X01NQzJfV1ApOwotZXJyX3JlcXVlc3Rfd3A6Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoQ01fWDMwMF9NTUMyX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci0JZ3Bpb19mcmVlKEdQSU84NV9NTUMyX1dQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbV94MzAwX21jaTJfaW5pdCwKLQkuZXhpdAkJPSBjbV94MzAwX21jaTJfZXhpdCwKLQkuZ2V0X3JvCQk9IGNtX3gzMDBfbWNpMl9ybywKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3gzMDBfaW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDdjOWMzNGMuLjM3YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiB7CiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhMThkMzdiLi5lYzBlMTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE0NSw3ICsxNDYsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU05EX0FDOTdfQ09ERUMpIHx8IGRlZmluZWQoU05EX0FDOTdfQ09ERUNfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX1NORF9BQzk3X0NPREVDKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUNfTU9EVUxFKQogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU8zNF9BQzk3X1NZU0NMSywKIAlHUElPMzVfQUM5N19TREFUQV9JTl8wLApAQCAtMTY0LDE1ICsxNjYsNDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KICNlbmRpZgogCisvKgorICogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGlzIHZlcmlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgVG9yYWRleCBPcmNoaWQKKyAqIGNhcnJpZXIgYm9hcmQKKyAqLworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQgMSBjb25maWd1cmF0aW9uIChtYXkgYmUgc2V0IGJ5IGJvb3Rsb2FkZXIpICovCisJR1BJTzk5X1VBUlQxX0NUUywKKwlHUElPMTA0X1VBUlQxX1JUUywKKwlHUElPOTdfVUFSVDFfUlhELAorCUdQSU85OF9VQVJUMV9UWEQsCisJR1BJTzEwMV9VQVJUMV9EVFIsCisJR1BJTzEwM19VQVJUMV9EU1IsCisJR1BJTzEwMF9VQVJUMV9EQ0QsCisJR1BJTzEwMl9VQVJUMV9SSSwKKworCS8qIFVBUlQgMiBjb25maWd1cmF0aW9uICovCisJR1BJTzEwOV9VQVJUMl9DVFMsCisJR1BJTzExMl9VQVJUMl9SVFMsCisJR1BJTzExMF9VQVJUMl9SWEQsCisJR1BJTzExMV9VQVJUMl9UWEQsCisKKwkvKiBVQVJUIDMgY29uZmlndXJhdGlvbiAqLworCUdQSU8zMF9VQVJUM19SWEQsCisJR1BJTzMxX1VBUlQzX1RYRCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X3VhcnQodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWcpKTsKK30KKwogdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdCh2b2lkKQogewogCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKIAkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOworCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCmluZGV4IGVhMzRlMzQuLmVmZWJhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4X25hbmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC05NSwxMCArOTYsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTN4eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2luaXQsCi0JLmV4aXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAorCS5leGl0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQpAQCAtMTU0LDMgKzE1OCw0MyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29saWJyaV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgID0gMCwKKwkJLnNpemUgICAgICAgID0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICA9IFNaXzRNLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUgICAgICAgID0gInJlc2VydmVkIiwKKwkJLm9mZnNldCAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgPSBTWl8xTSwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJmcyIsCisJCS5vZmZzZXQgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLmtlZXBfY29uZmlnCT0gMSwKKwkucGFydHMJCT0gY29saWJyaV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xpYnJpX25hbmRfcGFydGl0aW9ucyksCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkKK3sKKwlweGEzeHhfc2V0X25hbmRfaW5mbygmY29saWJyaV9uYW5kX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDUzNjNlMWEuLmI1MzZiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xMDQsNiArMTA1LDI4IEBACiAJR1BJTzZfTU1DX0NMSywKIAlHUElPOF9NTUNfQ1MwLAogCisJLyogR1BJTyBNYXRyaXggS2V5cGFkICovCisJR1BJTzY2X0dQSU8sCS8qIGNvbHVtbiAwICovCisJR1BJTzY3X0dQSU8sCS8qIGNvbHVtbiAxICovCisJR1BJTzY4X0dQSU8sCS8qIGNvbHVtbiAyICovCisJR1BJTzY5X0dQSU8sCS8qIGNvbHVtbiAzICovCisJR1BJTzcwX0dQSU8sCS8qIGNvbHVtbiA0ICovCisJR1BJTzcxX0dQSU8sCS8qIGNvbHVtbiA1ICovCisJR1BJTzcyX0dQSU8sCS8qIGNvbHVtbiA2ICovCisJR1BJTzczX0dQSU8sCS8qIGNvbHVtbiA3ICovCisJR1BJTzc0X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzc1X0dQSU8sCS8qIGNvbHVtbiA5ICovCisJR1BJTzc2X0dQSU8sCS8qIGNvbHVtbiAxMCAqLworCUdQSU83N19HUElPLAkvKiBjb2x1bW4gMTEgKi8KKwlHUElPNThfR1BJTywJLyogcm93IDAgKi8KKwlHUElPNTlfR1BJTywJLyogcm93IDEgKi8KKwlHUElPNjBfR1BJTywJLyogcm93IDIgKi8KKwlHUElPNjFfR1BJTywJLyogcm93IDMgKi8KKwlHUElPNjJfR1BJTywJLyogcm93IDQgKi8KKwlHUElPNjNfR1BJTywJLyogcm93IDUgKi8KKwlHUElPNjRfR1BJTywJLyogcm93IDYgKi8KKwlHUElPNjVfR1BJTywJLyogcm93IDcgKi8KKwogCS8qIEdQSU8gKi8KIAlHUElPOV9HUElPLAkvKiBDT1JHSV9HUElPX25TRF9ERVRFQ1QgKi8KIAlHUElPN19HUElPLAkvKiBDT1JHSV9HUElPX25TRF9XUCAqLwpAQCAtMjY3LDkgKzI5MCwxMTUgQEAKIC8qCiAgKiBDb3JnaSBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBDT1JHSV9LRVlfQ0FMRU5ERVIJS0VZX0YxCisjZGVmaW5lIENPUkdJX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBDT1JHSV9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBDT1JHSV9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBDT1JHSV9LRVlfT0ZGCQlLRVlfU1VTUEVORAorI2RlZmluZSBDT1JHSV9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIENPUkdJX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIENPUkdJX0tFWV9KQVAxCQlLRVlfTEVGVENUUkwKKyNkZWZpbmUgQ09SR0lfS0VZX0pBUDIJCUtFWV9MRUZUQUxUCisjZGVmaW5lIENPUkdJX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIENPUkdJX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBDT1JHSV9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgY29yZ2lrYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEsIDEsIEtFWV8yKSwKKwlLRVkoMSwgMiwgS0VZXzQpLAorCUtFWSgxLCAzLCBLRVlfUiksCisJS0VZKDEsIDQsIEtFWV9ZKSwKKwlLRVkoMSwgNSwgS0VZXzgpLAorCUtFWSgxLCA2LCBLRVlfSSksCisJS0VZKDEsIDcsIEtFWV9PKSwKKwlLRVkoMSwgOCwgS0VZX1ApLAorCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBDT1JHSV9LRVlfQ0FMRU5ERVIpLAorCUtFWSgzLCAxLCBLRVlfVyksCisJS0VZKDMsIDIsIEtFWV9TKSwKKwlLRVkoMywgMywgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfViksCisJS0VZKDMsIDUsIEtFWV9IKSwKKwlLRVkoMywgNiwgS0VZX00pLAorCUtFWSgzLCA3LCBLRVlfTCksCisJS0VZKDMsIDksIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoNCwgMCwgQ09SR0lfS0VZX0FERFJFU1MpLAorCUtFWSg0LCAxLCBLRVlfQSksCisJS0VZKDQsIDIsIEtFWV9EKSwKKwlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSg0LCA0LCBLRVlfQiksCisJS0VZKDQsIDUsIEtFWV9OKSwKKwlLRVkoNCwgNiwgS0VZX0RPVCksCisJS0VZKDQsIDgsIEtFWV9FTlRFUiksCisJS0VZKDQsIDEwLCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgQ09SR0lfS0VZX01BSUwpLAorCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTEsIENPUkdJX0tFWV9GTiksCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIENPUkdJX0tFWV9KQVAxKSwKKwlLRVkoNiwgMiwgQ09SR0lfS0VZX0pBUDIpLAorCUtFWSg2LCAzLCBDT1JHSV9LRVlfQ0FOQ0VMKSwKKwlLRVkoNiwgNCwgQ09SR0lfS0VZX09LKSwKKwlLRVkoNiwgNSwgQ09SR0lfS0VZX01FTlUpLAorCUtFWSg2LCA2LCBLRVlfTEVGVCksCisJS0VZKDYsIDcsIEtFWV9ET1dOKSwKKwlLRVkoNiwgOCwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMCwgQ09SR0lfS0VZX09GRiksCisJS0VZKDcsIDEsIENPUkdJX0tFWV9FWE9LKSwKKwlLRVkoNywgMiwgQ09SR0lfS0VZX0VYQ0FOQ0VMKSwKKwlLRVkoNywgMywgQ09SR0lfS0VZX0VYSk9HRE9XTiksCisJS0VZKDcsIDQsIENPUkdJX0tFWV9FWEpPR1VQKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGNvcmdpa2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gY29yZ2lrYmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29yZ2lrYmRfcm93X2dwaW9zW10gPQorCQl7IDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSB9Oworc3RhdGljIGNvbnN0IGludCBjb3JnaWtiZF9jb2xfZ3Bpb3NbXSA9CisJCXsgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NyB9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBjb3JnaWtiZF9wZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJCT0gJmNvcmdpa2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gY29yZ2lrYmRfcm93X2dwaW9zLAorCS5jb2xfZ3Bpb3MJCT0gY29yZ2lrYmRfY29sX2dwaW9zLAorCS5udW1fcm93X2dwaW9zCQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX2NvbF9ncGlvcyksCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gMTAsCisJLmRlYm91bmNlX21zCQk9IDEwLAorCS53YWtldXAJCQk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWtiZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb3JnaWtiZF9wZGF0YSwKKwl9LAogfTsKIAogLyoKQEAgLTMwNywxMTEgKzQzNiwyMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IGNvcmdpX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBjb3JnaV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMjsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ09SR0lfR1BJT19uU0RfV1ApOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT1JHSV9HUElPX1NEX1BXUiwgMCk7Ci0KLQljb3JnaV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBjb3JnaV9kZXRlY3RfaW50LAotCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzM6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fU0RfUFdSKTsKLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcmdpX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX1NEX1BXUiwgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENPUkdJX0dQSU9fblNEX1dQKTsKLX0KLQotc3RhdGljIHZvaWQgY29yZ2lfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKENPUkdJX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShDT1JHSV9HUElPX1NEX1BXUik7Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNvcmdpX21jaV9pbml0LAotCS5nZXRfcm8JCT0gY29yZ2lfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gY29yZ2lfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGNvcmdpX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IENPUkdJX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IENPUkdJX0dQSU9fU0RfUFdSLAogfTsKIAogCiAvKgogICogSXJkYQogICovCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IGNvcmdpX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX0lSX09OLCAiSVJfT04iKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPUkdJX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19JUl9PTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gQ09SR0lfR1BJT19JUl9PTiwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IGNvcmdpX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBjb3JnaV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IGNvcmdpX2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTYzNiw2ICs2NzQsNyBAQAogCWNvcmdpX2luaXRfc3BpKCk7CiAKICAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCWNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJmNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IDNhOGVlMjIuLjk4M2NjOGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiBzdGF0aWMgcHhhX2ZyZXFzX3QgcHhhMjd4X2ZyZXFzW10gPSB7CiAJezEwNDAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgMiksIDAsIENDTEtDRkcyKDEsIDAsIDEpLCAgOTAwMDAwLCAxNzA1MDAwIH0sCi0JezE1NjAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgNiksIDAsIENDTEtDRkcyKDEsIDEsIDEpLCAxMDAwMDAwLCAxNzA1MDAwIH0sCisJezE1NjAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgMyksIDAsIENDTEtDRkcyKDEsIDAsIDEpLCAxMDAwMDAwLCAxNzA1MDAwIH0sCiAJezIwODAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigwLCAxNiwgMiksIDEsIENDTEtDRkcyKDAsIDAsIDEpLCAxMTgwMDAwLCAxNzA1MDAwIH0sCiAJezMxMjAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigxLCAxNiwgMyksIDEsIENDTEtDRkcyKDEsIDAsIDEpLCAxMjUwMDAwLCAxNzA1MDAwIH0sCiAJezQxNjAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigxLCAxNiwgNCksIDEsIENDTEtDRkcyKDEsIDAsIDEpLCAxMzUwMDAwLCAxNzA1MDAwIH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCmluZGV4IDdkM2UxYjQuLjk2NTQ4MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCkBAIC0xMzAsNjEgKzEzMCwxNyBAQAogc3RhdGljIGludCBjc2I3MjZfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlpcnFfaGFuZGxlcl90IGRldGVjdCwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCiAJY3NiNzI2X21jaV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDU0I3MjZfR1BJT19NTUNfREVURUNULCAiTU1DIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2RldF9yZXE7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChDU0I3MjZfR1BJT19NTUNfREVURUNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9kZXRfZGlyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19STywgIk1NQyBybyIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JvX3JlcTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19STyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcm9fZGlyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCksIGRldGVjdCwKLQkJCUlSUUZfRElTQUJMRUQsICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9pcnE7Ci0KIAlyZXR1cm4gMDsKLQotZXJyX2lycToKLWVycl9yb19kaXI6Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7Ci1lcnJfcm9fcmVxOgotZXJyX2RldF9kaXI6Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwotZXJyX2RldF9yZXE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBjc2I3MjZfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENTQjcyNl9HUElPX01NQ19STyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNzYjcyNl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCksIGRhdGEpOwotCWdwaW9fZnJlZShDU0I3MjZfR1BJT19NTUNfUk8pOwotCWdwaW9fZnJlZShDU0I3MjZfR1BJT19NTUNfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjc2I3MjZfbWNpID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdAkJPSBjc2I3MjZfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBjc2I3MjZfbWNpX2dldF9ybywKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0CQkJPSBjc2I3MjZfbWNpX2luaXQsCiAJLyogRklYTUUgc2V0cG93ZXIgKi8KLQkuZXhpdAkJPSBjc2I3MjZfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBDU0I3MjZfR1BJT19NTUNfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gQ1NCNzI2X0dQSU9fTU1DX1JPLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTI4Miw3ICsyMzgsNyBAQAogfTsKIAogc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBjc2I3MjZfbGFuX2NvbmZpZyA9IHsKLQkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCiAJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAogCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCiAJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGVjYzA4ZjM2Li40NmZhYmUxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYwpAQCAtOTM1LDYgKzkzNSwzMyBAQAogewogCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YTN4eF9kZXZpY2VfbmFuZCwgaW5mbyk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhM3h4X3Jlc291cmNlc19nY3VbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTQwMDAwMDAsCisJCS5lbmQJPSAweDU0MDAwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX0dDVSwKKwkJLmVuZAk9IElSUV9HQ1UsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHB4YTN4eF9nY3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9nY3UgPSB7CisJLm5hbWUJCT0gInB4YTN4eC1nY3UiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19nY3UpLAorCS5yZXNvdXJjZQk9IHB4YTN4eF9yZXNvdXJjZXNfZ2N1LAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmcHhhM3h4X2djdV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCit9OworCiAjZW5kaWYgLyogQ09ORklHX1BYQTN4eCAqLwogCiAvKiBweGEyeHgtc3BpIHBsYXRmb3JtLWRldmljZSBJRCBlcXVhbHMgcmVzcGVjdGl2ZSBTU1AgcGxhdGZvcm0tZGV2aWNlIElEICsgMS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAppbmRleCBlY2MyNGE0Li45MzgxN2Q5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCkBAIC0zNSw0ICszNSw2IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX25hbmQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX2kyY19wb3dlcjsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9nY3U7CisKIHZvaWQgX19pbml0IHB4YV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCBhMzZmYzE3Li40OWFjZGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0xOTksNyArMTk5LDYgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwogCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOwotCWU3eHhfaXJkYV9pbml0KCk7CiAJcHhhX3NldF9maWNwX2luZm8oJmU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCmluZGV4IDFkMDAxMTAuLjQwNTJlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKQEAgLTIwMCw3ICsyMDAsNiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7CiAJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Ci0JZTd4eF9pcmRhX2luaXQoKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKaW5kZXggOWNkMDk0Ni4uYWVjN2Y0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtNjQ2LDEzICs2NDYsMTYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBlbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMjBfMjF8TU1DX1ZERF8yMV8yMnxNTUNfVkREXzIyXzIzfAotCQkJICBNTUNfVkREXzI0XzI1fE1NQ19WRERfMjVfMjZ8TU1DX1ZERF8yNl8yN3wKLQkJCSAgTU1DX1ZERF8yN18yOHxNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8Ci0JCQkgIE1NQ19WRERfMzBfMzF8TU1DX1ZERF8zMV8zMiwKLQkuaW5pdCAJCT0gZW1feDI3MF9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gZW1feDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gZW1feDI3MF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8yMF8yMXxNTUNfVkREXzIxXzIyfE1NQ19WRERfMjJfMjN8CisJCQkJICBNTUNfVkREXzI0XzI1fE1NQ19WRERfMjVfMjZ8TU1DX1ZERF8yNl8yN3wKKwkJCQkgIE1NQ19WRERfMjdfMjh8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfAorCQkJCSAgTU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyLAorCS5pbml0IAkJCT0gZW1feDI3MF9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCQk9IGVtX3gyNzBfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBlbV94MjcwX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0xMDIyLDIyICsxMDI1LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwKLQkucG93ZXIgPSBlbV94MjcwX3NlbnNvcl9wb3dlciwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZW1feDI3MF9pMmNfY2FtX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDltMTExIiwgMHg0OCksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCQk9IDAsCisJLnBvd2VyCQk9IGVtX3gyNzBfc2Vuc29yX3Bvd2VyLAorCS5ib2FyZF9pbmZvCT0gJmVtX3gyNzBfaTJjX2NhbV9pbmZvWzBdLAorCS5pMmNfYWRhcHRlcl9pZAk9IDAsCisJLm1vZHVsZV9uYW1lCT0gIm10OW0xMTEiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1feDI3MF9jYW1lcmEgPSB7CisJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCiAJfSwKIH07CiAKIHN0YXRpYyB2b2lkICBfX2luaXQgZW1feDI3MF9pbml0X2NhbWVyYSh2b2lkKQogewotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGVtX3gyNzBfaTJjX2NhbV9pbmZvKSk7CiAJcHhhX3NldF9jYW1lcmFfaW5mbygmZW1feDI3MF9jYW1lcmFfcGxhdGZvcm1fZGF0YSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX2NhbWVyYSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkge30KQEAgLTExMDMsNiArMTExNiw3IEBACiBSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTAsICZweGFfZGV2aWNlX21jaS5kZXYsICJ2Y2Mgc2RpbyIpOwogUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEyLCBOVUxMLCAidmNjIHVzYiIpOwogUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzE5LCAmZW1feDI3MF9ncHJzX3VzZXJzcGFjZV9jb25zdW1lci5kZXYsICJ2Y2MgZ3BycyIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGJ1Y2syLCBOVUxMLCAidmNjX2NvcmUiKTsKIAogI2RlZmluZSBSRUdVTEFUT1JfSU5JVChfbGRvLCBfbWluX3VWLCBfbWF4X3VWLCBfb3BzX21hc2spCQlcCiAJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIF9sZG8jI19kYXRhID0gewkJXApAQCAtMTEyNSw2ICsxMTM5LDcgQEAKIAkgICAgICAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMgfCBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UpOwogUkVHVUxBVE9SX0lOSVQobGRvMTIsIDMwMDAwMDAsIDMwMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKIFJFR1VMQVRPUl9JTklUKGxkbzE5LCAzMjAwMDAwLCAzMjAwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyk7CitSRUdVTEFUT1JfSU5JVChidWNrMiwgMTAwMDAwMCwgMTY1MDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKTsKIAogc3RydWN0IGxlZF9pbmZvIGVtX3gyNzBfbGVkX2luZm8gPSB7CiAJLm5hbWUgPSAiZW0teDI3MDpvcmFuZ2UiLApAQCAtMTE5NCw2ICsxMjA5LDggQEAKIAlEQTkwMzBfTERPKDEyKSwKIAlEQTkwMzBfTERPKDE5KSwKIAorCURBOTAzMF9TVUJERVYocmVndWxhdG9yLCBCVUNLMiwgJmJ1Y2syX2RhdGEpLAorCiAJREE5MDMwX1NVQkRFVihsZWQsIExFRF9QQywgJmVtX3gyNzBfbGVkX2luZm8pLAogCURBOTAzMF9TVUJERVYoYmFja2xpZ2h0LCBXTEVELCAmZW1feDI3MF9sZWRfaW5mbyksCiAJREE5MDMwX1NVQkRFVihiYXR0ZXJ5LCBCQVQsICZlbV94MjcwX2JhdHRlcnR5X2luZm8pLApAQCAtMTI0NSw3ICsxMjYyLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfbW9kdWxlX2luaXQodm9pZCkKIHsKLQlwcl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOwogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGVtX3gyNzBfcGluX2NvbmZpZykpOwogCiAJbW1jX2NkID0gR1BJTzEzX01NQ19DRDsKQEAgLTEyNTcsNyArMTI3Myw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2V4ZWRhX2luaXQodm9pZCkKIHsKLQlwcl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOwogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGV4ZWRhX3Bpbl9jb25maWcpKTsKIAogCW1tY19jZCA9IEdQSU8xMTRfTU1DX0NEOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCmluZGV4IGM2MGRhZGYuLjkxNDE3ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKQEAgLTQ3LDQ0ICs0Nyw5IEBACiAJLmdwaW9fcHVsbHVwX2ludmVydGVkID0gMQogfTsKIAotc3RhdGljIHZvaWQgZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlpZiAobW9kZSAmIElSX09GRikgewotCQlncGlvX3NldF92YWx1ZShHUElPX0U3WFhfSVJfT0ZGLCAxKTsKLQkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLQl9IGVsc2UgewotCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotCQlncGlvX3NldF92YWx1ZShHUElPX0U3WFhfSVJfT0ZGLCAwKTsKLQl9Ci19Ci0KLWludCBlN3h4X2lyZGFfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FN1hYX0lSX09GRiwgIklyREEgcG93ZXIiKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3WFhfSVJfT0ZGLCAwKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCWU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKE5VTEwsIElSX1NJUk1PREUgfCBJUl9PRkYpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGU3eHhfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoZGV2LCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKLQlncGlvX2ZyZWUoR1BJT19FN1hYX0lSX09GRik7Ci19Ci0KIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnNodXRkb3duID0gZTd4eF9pcmRhX3NodXRkb3duLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX0U3WFhfSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogaW50IGVzZXJpZXNfdG1pb19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCmluZGV4IGNhOTkxMmUuLjE3MDhjMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKQEAgLTg4LDcgKzg4LDEwIEBACiAKICNpZmRlZiBDT05GSUdfTU1DX1BYQQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBndW1zdGl4X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0IAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ3Vtc3RpeF9tbWNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYwppbmRleCA4MTM1OWQ1Li44M2JkM2M2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogCisjaW5jbHVkZSA8dmlkZW8vcGxhdGZvcm1fbGNkLmg+CiAjaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0xNzQsMTQgKzE3NSw5IEBACiAgKiBJUkRBCiAgKi8KIAotc3RhdGljIHZvaWQgaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9IWDQ3MDBfbklSX09OLCBtb2RlICYgSVJfT0ZGKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IGlyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJTzEwNV9IWDQ3MDBfbklSX09OLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoKQEAgLTM2OCw4ICszNjQsNiBAQAogICogTENEIC0gU29ueSBkaXNwbGF5IGNvbm5lY3RlZCB0byBBVEkgSW1hZ2VvbiB3MzIyMAogICovCiAKLXN0YXRpYyBpbnQgbGNkX3Bvd2VyOwotCiBzdGF0aWMgdm9pZCBzb255X2xjZF9pbml0KHZvaWQpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJTzg0X0hYNDcwMF9MQ0RfU1FOLCAxKTsKQEAgLTQxMCwzNSArNDA0LDYgQEAKIAlncGlvX3NldF92YWx1ZShHUElPMTEwX0hYNDcwMF9MQ0RfTFZERF8zVjNfT04sIDApOwogfQogCi1zdGF0aWMgaW50IGh4NDcwMF9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBsY2RfZGV2aWNlICpsZGV2LCBpbnQgbGV2ZWwpCi17Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLQkJc29ueV9sY2RfaW5pdCgpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQlzb255X2xjZF9vZmYoKTsKLQkJYnJlYWs7Ci0JfQotCWxjZF9wb3dlciA9IGxldmVsOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGh4NDcwMF9sY2RfZ2V0X3Bvd2VyKHN0cnVjdCBsY2RfZGV2aWNlICpsbSkKLXsKLQlyZXR1cm4gbGNkX3Bvd2VyOwotfQotCi1zdGF0aWMgc3RydWN0IGxjZF9vcHMgaHg0NzAwX2xjZF9vcHMgPSB7Ci0JLmdldF9wb3dlciA9IGh4NDcwMF9sY2RfZ2V0X3Bvd2VyLAotCS5zZXRfcG93ZXIgPSBoeDQ3MDBfbGNkX3NldF9wb3dlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGNkX2RldmljZSAqaHg0NzAwX2xjZF9kZXZpY2U7Ci0KICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIHczMjIwX2xjZF9zdXNwZW5kKHN0cnVjdCB3MTAwZmJfcGFyICp3ZmIpCiB7CkBAIC01NzMsNiArNTM4LDI3IEBACiAJLnJlc291cmNlICAgICAgPSB3MzIyMF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgdm9pZCBoeDQ3MDBfbGNkX3NldF9wb3dlcihzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsIHVuc2lnbmVkIGludCBwb3dlcikKK3sKKwlpZiAocG93ZXIpCisJCXNvbnlfbGNkX2luaXQoKTsKKwllbHNlCisJCXNvbnlfbGNkX29mZigpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRfbGNkX2RhdGEgaHg0NzAwX2xjZF9kYXRhID0geworCS5zZXRfcG93ZXIgPSBoeDQ3MDBfbGNkX3NldF9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGh4NDcwMF9sY2QgPSB7CisJLm5hbWUgPSAicGxhdGZvcm0tbGNkIiwKKwkuaWQgICA9IC0xLAorCS5kZXYgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZoeDQ3MDBfbGNkX2RhdGEsCisJCS5wYXJlbnQgICAgICAgID0gJnczMjIwLmRldiwKKwl9LAorfTsKKwogLyoKICAqIEJhY2tsaWdodAogICovCkBAIC02MTgsNyArNjA0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIHRzYzIwNDZfaW5mbyA9IHsKIAkubW9kZWwgICAgICAgICAgICA9IDc4NDYsCiAJLnZyZWZfZGVsYXlfdXNlY3MgPSAxMDAsCi0JLnByZXNzdXJlX21heCAgICAgPSA1MTIsCisJLnByZXNzdXJlX21heCAgICAgPSAxMDI0LAogCS5kZWJvdW5jZV9tYXggICAgID0gMTAsCiAJLmRlYm91bmNlX3RvbCAgICAgPSAzLAogCS5kZWJvdW5jZV9yZXAgICAgID0gMSwKQEAgLTg3Miw5ICs4NTgsNiBAQAogCXB4YTJ4eF9zZXRfc3BpX2luZm8oMiwgJnB4YV9zc3AyX21hc3Rlcl9pbmZvKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRSh0c2MyMDQ2X2JvYXJkX2luZm8pKTsKIAotCWh4NDcwMF9sY2RfZGV2aWNlID0gbGNkX2RldmljZV9yZWdpc3RlcigidzEwMGZiIiwgTlVMTCwKLQkJCQkJKHZvaWQgKikmdzMyMjBfaW5mbywgJmh4NDcwMF9sY2Rfb3BzKTsKLQogCWdwaW9fc2V0X3ZhbHVlKEdQSU83MV9IWDQ3MDBfQVNJQzNfblJFU0VULCAwKTsKIAltZGVsYXkoMTApOwogCWdwaW9fc2V0X3ZhbHVlKEdQSU83MV9IWDQ3MDBfQVNJQzNfblJFU0VULCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKaW5kZXggYjYyNDNiNS4uYjY0ODZlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKQEAgLTE2OCw3ICsxNjgsMTAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaWRwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpZHBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwppbmRleCA5NjE4MDdkLi4yYTQ5NDVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwpAQCAtMzg5LDYgKzM4OSw5IEBACiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGltb3RlMl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKIAkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwgLyogZGVmYXVsdCBhbnl3YXkgKi8KIAkuZ2V0X3JvID0gaW1vdGUyX21jaV9nZXRfcm8sCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIgPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpbW90ZTJmbGFzaF9wYXJ0aXRpb25zW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWMwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYmFsbG9vbjMuaAorICoKKyAqICBBdXRob3JzOglOaWNrIEJhbmUgYW5kIFdvb2tleQorICogIENyZWF0ZWQ6CU9jdCwgMjAwNQorICogIENvcHlyaWdodDoJVG9ieSBDaHVyY2hpbGwgTHRkCisgKiAgQ3JpYmJlZCBmcm9tIG1haW5zdG9uZS5jLCBieSBOaWNob2xhcyBQaXRyZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBU01fQVJDSF9CQUxMT09OM19ICisjZGVmaW5lIEFTTV9BUkNIX0JBTExPT04zX0gKKworZW51bSBiYWxsb29uM19mZWF0dXJlcyB7CisJQkFMTE9PTjNfRkVBVFVSRV9PSENJLAorCUJBTExPT04zX0ZFQVRVUkVfTU1DLAorCUJBTExPT04zX0ZFQVRVUkVfQ0YsCisJQkFMTE9PTjNfRkVBVFVSRV9BVURJTywKKwlCQUxMT09OM19GRUFUVVJFX1RPUFBPTFksCit9OworCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfUEhZUwlQWEFfQ1M0X1BIWVMKKyNkZWZpbmUgQkFMTE9PTjNfRlBHQV9WSVJUCSgweGYxMDAwMDAwKQkvKiBhcyBwZXIgYmFsbG9vbjIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfRlBHQV9MRU5HVEgJMHgwMTAwMDAwMAorCisvKiBGUEdBL0NQTEQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQTBfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwOCkKKy8qIGZpeG1lIC0gc2FtZSBmb3Igbm93ICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQTFfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwOCkKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0lPX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDApCisvKiBmcGdhL2NwbGQgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDBDKQorI2RlZmluZSBCQUxMT09OM19OQU5ESU9fQ1RMMl9SRUcgCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDEwKQorI2RlZmluZSBCQUxMT09OM19OQU5ESU9fQ1RMX1JFRyAJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMTQpCisjZGVmaW5lIEJBTExPT04zX1ZFUlNJT05fUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxYykKKworI2RlZmluZSBCQUxMT09OM19TQU1PU0FfQUREUl9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMDApCisjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9EQVRBX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGMwMDAwNCkKKyNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX1NUQVRVU19SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMWMpCisKKy8qIEdQSU9zIGZvciBpcnFzICovCisjZGVmaW5lIEJBTExPT04zX0dQSU9fQVVYX05JUlEJCSg5NCkKKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEJCSg5NSkKKworLyogVGltZXIgYW5kIElkbGUgTEVEIGxvY2F0aW9ucyAqLworI2RlZmluZSBCQUxMT09OM19HUElPX0xFRF9OQU5ECQkoOSkKKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19MRURfSURMRQkJKDEwKQorCisvKiBiYWNrbGlnaHQgY29udHJvbCAqLworI2RlZmluZSBCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQJKDk5KQorCisjZGVmaW5lIEJBTExPT04zX0dQSU9fUzBfQ0QJCSgxMDUpCisKKy8qIEZQR0EgSW50ZXJydXB0IE1hc2svQWNrbm93bGVkZ2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX1MwX0lSUQkJKDEgPDwgMCkgIC8qIFBDTUNJQSAwIElSUSAqLworI2RlZmluZSBCQUxMT09OM19JTlRfUzBfU1RTQ0hHCQkoMSA8PCAxKSAgLyogUENNQ0lBIDAgc3RhdHVzIGNoYW5nZWQgKi8KKworLyogQ0YgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9uSVJRCQkoMSA8PCAwKSAgLyogSVJRIC8gcmVhZHkgc2lnbmFsICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9uU1RTQ0hHX0JWRDEJKDEgPDwgMSkKKwkJCQkJLyogVkREIHNlbnNlIC8gY2FyZCBzdGF0dXMgY2hhbmdlZCAqLworCisvKiBDRiBjb250cm9sIHJlZ2lzdGVyICh3cml0ZSkgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX1JFU0VUCQkoMSA8PCAwKSAgIC8qIENhcmQgcmVzZXQgc2lnbmFsICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9FTkFCTEUJCSgxIDw8IDEpCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9BRERfRU5BQkxFCSgxIDw8IDIpCisKKy8qIENQTEQgKGFuZCBGUEdBKSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ1BMRF9MQ0QwX0RBVEFfU0VUICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BMRF9MQ0QwX0RBVEFfQ0xSICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQ1BMRF9MQ0QwX0NPTU1BTkRfU0VUICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BMRF9MQ0QwX0NPTU1BTkRfQ0xSICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQ1BMRF9MQ0QxX0RBVEFfU0VUICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BMRF9MQ0QxX0RBVEFfQ0xSICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgQ1BMRF9MQ0QxX0NPTU1BTkRfU0VUICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQ1BMRF9MQ0QxX0NPTU1BTkRfQ0xSICAgICAgICAgIDB4MTMKKworI2RlZmluZSBDUExEX01JU0NfU0VUICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBDUExEX01JU0NfQ0xSICAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBDUExEX01JU0NfTE9PTl9OUkVTRVRfQklUICAgICAgMAorI2RlZmluZSBDUExEX01JU0NfTE9PTl9VTlNVU1BfQklUICAgICAgMQorI2RlZmluZSBDUExEX01JU0NfUlVOXzVWX0JJVCAgICAgICAgICAgMgorI2RlZmluZSBDUExEX01JU0NfQ0hHX0QwX0JJVCAgICAgICAgICAgMworI2RlZmluZSBDUExEX01JU0NfQ0hHX0QxX0JJVCAgICAgICAgICAgNAorI2RlZmluZSBDUExEX01JU0NfREFDX05DU19CSVQgICAgICAgICAgNQorCisjZGVmaW5lIENQTERfTENEX1NFVCAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIENQTERfTENEX0NMUiAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIENQTERfTENEX0JBQ0tMSUdIVF9FTl8wX0JJVCAgICAwCisjZGVmaW5lIENQTERfTENEX0JBQ0tMSUdIVF9FTl8xX0JJVCAgICAxCisjZGVmaW5lIENQTERfTENEX0xFRF9SRURfQklUICAgICAgICAgICA0CisjZGVmaW5lIENQTERfTENEX0xFRF9HUkVFTl9CSVQgICAgICAgICA1CisjZGVmaW5lIENQTERfTENEX05SRVNFVF9CSVQgICAgICAgICAgICA3CisKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fU0VUICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fQ0xSICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fTENEMF9uV0FJVF9CSVQgICAgIDAKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fTENEMV9uV0FJVF9CSVQgICAgIDEKKworI2RlZmluZSBDUExEX1NFUklBTF9TRVQgICAgICAgICAgICAgICAgMHgwYQorI2RlZmluZSBDUExEX1NFUklBTF9DTFIgICAgICAgICAgICAgICAgMHgxYQorI2RlZmluZSBDUExEX1NFUklBTF9HU01fUklfQklUICAgICAgICAgMAorI2RlZmluZSBDUExEX1NFUklBTF9HU01fQ1RTX0JJVCAgICAgICAgMQorI2RlZmluZSBDUExEX1NFUklBTF9HU01fRFRSX0JJVCAgICAgICAgMgorI2RlZmluZSBDUExEX1NFUklBTF9MUFJfQ1RTX0JJVCAgICAgICAgMworI2RlZmluZSBDUExEX1NFUklBTF9UQzIzMl9DVFNfQklUICAgICAgNAorI2RlZmluZSBDUExEX1NFUklBTF9UQzIzMl9EU1JfQklUICAgICAgNQorCisjZGVmaW5lIENQTERfU1JPVVRJTkdfU0VUICAgICAgICAgICAgICAweDBiCisjZGVmaW5lIENQTERfU1JPVVRJTkdfQ0xSICAgICAgICAgICAgICAweDFiCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX0xQUiAgICAgICAwCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX1RDMjMyICAgICAxCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX0dTTSAgICAgICAyCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTE9PTl9MUFIgICAgICAgICAoMCA8PCA0KQorI2RlZmluZSBDUExEX1NST1VUSU5HX0xPT05fVEMyMzIgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19MT09OX0dTTSAgICAgICAgICgyIDw8IDQpCisKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19TRVQgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19DTFIgICAgICAgICAgICAgIDB4MWMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19NSUMyUEhPTkVfQklUICAgIDAKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19QSE9ORTJJTlRfQklUICAgIDEKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19QSE9ORTJFWFRfQklUICAgIDIKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OTDJJTlRfQklUICAgIDMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OTDJFWFRfQklUICAgIDQKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJQSE9ORV9CSVQgIDUKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJJTlRfQklUICAgIDYKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJFWFRfQklUICAgIDcKKworZXh0ZXJuIGludCBiYWxsb29uM19oYXMoZW51bSBiYWxsb29uM19mZWF0dXJlcyBmZWF0dXJlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAppbmRleCBhODhkN2NhLi44MTE3NDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKQEAgLTIzLDYgKzIzLDEyIEBACiBleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X2V0aChzdHJ1Y3QgYXhfcGxhdF9kYXRhICpwbGF0X2RhdGEpOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbmFuZCh2b2lkKSB7fQorI2VuZGlmCisKIC8qIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zICovCiAjZGVmaW5lIENPTElCUklfU0RSQU1fQkFTRQkweGEwMDAwMDAwICAgICAgLyogU0RSQU0gcmVnaW9uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggZjZiNGJmMy4uYTczYmM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTI0LDM0ICsyNCwyOCBAQAogCQltb3YJXHRtcCwgXHRtcCwgbHNyICMxMwogCQlhbmQJXHRtcCwgXHRtcCwgIzB4NwkJQCBDb3JlIEcKIAkJY21wCVx0bXAsICMxCi0JCWJoaQkxMDA0ZgorCQliaGkJMTAwMmYKIAorCQlAIENvcmUgR2VuZXJhdGlvbiAxIChQWEEyNXgpCiAJCW1vdglcYmFzZSwgI2lvX3AydigweDQwMDAwMDAwKQlAIElJUiBDdGwgPSAweDQwZDAwMDAwCiAJCWFkZAlcYmFzZSwgXGJhc2UsICMweDAwZDAwMDAwCiAJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMF0JCUAgSUNJUAogCQlsZHIJXGlycW5yLCBbXGJhc2UsICM0XQkJQCBJQ01SCi0JCWIJMTAwMmYKIAotMTAwNDoKLQkJbXJjCXA2LCAwLCBcaXJxc3RhdCwgYzYsIGMwLCAwCUAgSUNJUDIKLQkJbXJjCXA2LCAwLCBcaXJxbnIsIGM3LCBjMCwgMAlAIElDTVIyCi0JCWFuZHMJXGlycW5yLCBcaXJxc3RhdCwgXGlycW5yCi0JCWJlcQkxMDAzZgotCQlyc2IJXGlycXN0YXQsIFxpcnFuciwgIzAKLQkJYW5kCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCi0JCWNseglcaXJxbnIsIFxpcnFzdGF0Ci0JCXJzYglcaXJxbnIsIFxpcnFuciwgIzMxCi0JCWFkZAlcaXJxbnIsIFxpcnFuciwgIygzMiArIFBYQV9JUlEoMCkpCi0JCWIJMTAwMWYKLTEwMDM6Ci0JCW1yYwlwNiwgMCwgXGlycXN0YXQsIGMwLCBjMCwgMAlAIElDSVAKLQkJbXJjCXA2LCAwLCBcaXJxbnIsIGMxLCBjMCwgMAlAIElDTVIKLTEwMDI6CiAJCWFuZHMJXGlycW5yLCBcaXJxc3RhdCwgXGlycW5yCiAJCWJlcQkxMDAxZgogCQlyc2IJXGlycXN0YXQsIFxpcnFuciwgIzAKIAkJYW5kCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCiAJCWNseglcaXJxbnIsIFxpcnFzdGF0CiAJCXJzYglcaXJxbnIsIFxpcnFuciwgIygzMSArIFBYQV9JUlEoMCkpCisJCWIJMTAwMWYKKzEwMDI6CisJCUAgQ29yZSBHZW5lcmF0aW9uIDIgKFBYQTI3eCkgb3IgQ29yZSBHZW5lcmF0aW9uIDMgKFBYQTN4eCkKKwkJbXJjCXA2LCAwLCBcaXJxc3RhdCwgYzUsIGMwLCAwCUAgSUNIUAorCQl0c3QJXGlycXN0YXQsICMweDgwMDAwMDAwCisJCWJlcQkxMDAxZgorCQliaWMJXGlycXN0YXQsIFxpcnFzdGF0LCAjMHg4MDAwMDAwMAorCQltb3YJXGlycW5yLCBcaXJxc3RhdCwgbHNyICMxNgorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMoUFhBX0lSUSgwKSkKIDEwMDE6CiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDE2YWI3OTUuLmFhM2Q5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xOTcsNiArMTk3LDE2IEBACiAjZGVmaW5lIF9fY3B1X2lzX3B4YTkzNShpZCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfUFhBOTUwCisjZGVmaW5lIF9fY3B1X2lzX3B4YTk1MChpZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXVuc2lnbmVkIGludCBfaWQgPSAoaWQpID4+IDQgJiAweGZmZjsJXAorCQlpZCA9PSAweDY5NzsJCQkJXAorCSB9KQorI2Vsc2UKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTUwKGlkKQkoMCkKKyNlbmRpZgorCiAjZGVmaW5lIGNwdV9pc19weGEyMTAoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyMTAocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMjQ5LDYgKzI1OSwxMyBAQAogCQlfX2NwdV9pc19weGE5MzUoaWQpOwkJCVwKIAkgfSkKIAorI2RlZmluZSBjcHVfaXNfcHhhOTUwKCkJCQkJCVwKKwkoewkJCQkJCVwKKwkJdW5zaWduZWQgaW50IGlkID0gcmVhZF9jcHVpZChDUFVJRF9JRCk7CVwKKwkJX19jcHVfaXNfcHhhOTUwKGlkKTsJCQlcCisJIH0pCisKKwogLyoKICAqIENQVUlEIENvcmUgR2VuZXJhdGlvbiBCaXQKICAqIDw9IDB4MiBmb3IgcHhhMjF4L3B4YTI1eC9weGEyNngvcHhhMjd4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaAppbmRleCAwYTUwYzNjLi4zY2Q0MWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmgKQEAgLTEyLDYgKzEyLDggQEAKIAl2b2lkICgqdHJhbnNjZWl2ZXJfbW9kZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSk7CiAJaW50ICgqc3RhcnR1cCkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50IGdwaW9fcHdkb3duOwkJLyogcG93ZXJkb3duIEdQSU8gZm9yIHRoZSBJckRBIGNoaXAgKi8KKwlib29sIGdwaW9fcHdkb3duX2ludmVydGVkOwkvKiBncGlvX3B3ZG93biBpcyBpbnZlcnRlZCAqLwogfTsKIAogZXh0ZXJuIHZvaWQgcHhhX3NldF9maWNwX2luZm8oc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA2YTFkOTU5Li4zNjc3YTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTY4LDkgKzY4LDEwIEBACiAjaWZkZWYgQ09ORklHX1BYQTN4eAogI2RlZmluZSBJUlFfU1NQNAlQWEFfSVJRKDEzKQkvKiBTU1A0IHNlcnZpY2UgcmVxdWVzdCAqLwogI2RlZmluZSBJUlFfQ0lSCQlQWEFfSVJRKDM0KQkvKiBDb25zdW1lciBJUiAqLworI2RlZmluZSBJUlFfQ09NTV9XRFQJUFhBX0lSUSgzNSkgCS8qIENvbW0gV0RUIGludGVycnVwdCAqLwogI2RlZmluZSBJUlFfVFNJCQlQWEFfSVJRKDM2KQkvKiBUb3VjaCBTY3JlZW4gSW50ZXJmYWNlIChQWEEzMjApICovCiAjZGVmaW5lIElSUV9VU0lNMglQWEFfSVJRKDM4KQkvKiBVU0lNMiBDb250cm9sbGVyICovCi0jZGVmaW5lIElSUV9HUlBISUNTCVBYQV9JUlEoMzkpCS8qIEdyYXBoaWNzIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX0dDVQkJUFhBX0lSUSgzOSkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfTU1DMglQWEFfSVJRKDQxKQkvKiBNTUMyIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRXzFXSVJFCVBYQV9JUlEoNDQpCS8qIDEtV2lyZSBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV9OQU5ECVBYQV9JUlEoNDUpCS8qIE5BTkQgQ29udHJvbGxlciAqLwpAQCAtODEsOCArODIsMzEgQEAKICNkZWZpbmUgSVJRX01NQzMJUFhBX0lSUSg1NSkJLyogTU1DMyBDb250cm9sbGVyIChQWEEzMTApICovCiAjZW5kaWYKIAotI2RlZmluZSBQWEFfR1BJT19JUlFfQkFTRQlQWEFfSVJRKDY0KQotI2RlZmluZSBQWEFfR1BJT19JUlFfTlVNCSgxMjgpCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5MzUKKyNkZWZpbmUgSVJRX1UyTwkJUFhBX0lSUSg2NCkJLyogVVNCIE9URyAyLjAgQ29udHJvbGxlciAoUFhBOTM1KSAqLworI2RlZmluZSBJUlFfVTJICQlQWEFfSVJRKDY1KQkvKiBVU0IgSG9zdCAyLjAgQ29udHJvbGxlciAoUFhBOTM1KSAqLworCisjZGVmaW5lIElSUV9NTUMzX1BYQTkzNQlQWEFfSVJRKDcyKQkvKiBNTUMzIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX01NQzRfUFhBOTM1CVBYQV9JUlEoNzMpCS8qIE1NQzQgQ29udHJvbGxlciAoUFhBOTM1KSAqLworI2RlZmluZSBJUlFfTU1DNV9QWEE5MzUJUFhBX0lSUSg3NCkJLyogTU1DNSBDb250cm9sbGVyIChQWEE5MzUpICovCisKKyNkZWZpbmUgSVJRX1UyUAkJUFhBX0lSUSg5MykJLyogVVNCIFBIWSBEKy9ELSBMaW5lcyAoUFhBOTM1KSAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkzMAorI2RlZmluZSBJUlFfRU5IUk9UCVBYQV9JUlEoMzcpCS8qIEVuaGFuY2VkIFJvdGFyeSAoUFhBOTMwKSAqLworI2RlZmluZSBJUlFfQUNJUEMwCVBYQV9JUlEoNSkKKyNkZWZpbmUgSVJRX0FDSVBDMQlQWEFfSVJRKDQwKQorI2RlZmluZSBJUlFfQUNJUEMyCVBYQV9JUlEoMTkpCisjZGVmaW5lIElSUV9UUktCQUxMCVBYQV9JUlEoNDMpCS8qIFRyYWNrIEJhbGwgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5NTAKKyNkZWZpbmUgSVJRX0dDNTAwCVBYQV9JUlEoNzApCS8qIEdyYXBoaWNzIENvbnRyb2xsZXIgKFBYQTk1MCkgKi8KKyNlbmRpZgorCisjZGVmaW5lIFBYQV9HUElPX0lSUV9CQVNFCVBYQV9JUlEoOTYpCisjZGVmaW5lIFBYQV9HUElPX0lSUV9OVU0JKDE5MikKIAogI2RlZmluZSBHUElPXzJfeF9UT19JUlEoeCkJKFBYQV9HUElPX0lSUV9CQVNFICsgKHgpKQogI2RlZmluZSBJUlFfR1BJTyh4KQkoKCh4KSA8IDIpID8gKElSUV9HUElPMCArICh4KSkgOiBHUElPXzJfeF9UT19JUlEoeCkpCkBAIC0xMDUsNiArMTI5LDggQEAKICNkZWZpbmUgSVJRX0JPQVJEX0VORAkJKElSUV9CT0FSRF9TVEFSVCArIDcwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9aWUxPTklURSkKICNkZWZpbmUgSVJRX0JPQVJEX0VORAkJKElSUV9CT0FSRF9TVEFSVCArIDMyKQorI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBX0VaWCkKKyNkZWZpbmUgSVJRX0JPQVJEX0VORAkJKElSUV9CT0FSRF9TVEFSVCArIDIzKQogI2Vsc2UKICNkZWZpbmUgSVJRX0JPQVJEX0VORAkJKElSUV9CT0FSRF9TVEFSVCArIDE2KQogI2VuZGlmCkBAIC0yMzcsNiArMjYzLDE2IEBACiAjZGVmaW5lIE1BSU5TVE9ORV9TMV9TVFNDSEdfSVJRCU1BSU5TVE9ORV9JUlEoMTQpCiAjZGVmaW5lIE1BSU5TVE9ORV9TMV9JUlEJTUFJTlNUT05FX0lSUSgxNSkKIAorLyogQmFsbG9vbjMgSW50ZXJydXB0cyAqLworI2RlZmluZSBCQUxMT09OM19JUlEoeCkJCShJUlFfQk9BUkRfU1RBUlQgKyAoeCkpCisKKyNkZWZpbmUgQkFMTE9PTjNfQlBfQ0ZfTlJEWV9JUlEJQkFMTE9PTjNfSVJRKDApCisjZGVmaW5lIEJBTExPT04zX0JQX05TVFNDSEdfSVJRCUJBTExPT04zX0lSUSgxKQorCisjZGVmaW5lIEJBTExPT04zX0FVWF9OSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fQVVYX05JUlEpCisjZGVmaW5lIEJBTExPT04zX0NPREVDX0lSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX0NPREVDX0lSUSkKKyNkZWZpbmUgQkFMTE9PTjNfUzBfQ0RfSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fUzBfQ0QpCisKIC8qIExvQ29NbyBJbnRlcnJ1cHRzIChDT05GSUdfU0hBUlBfTE9DT01PKSAqLwogI2RlZmluZSBJUlFfTE9DT01PX0tFWV9CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAwKQogI2RlZmluZSBJUlFfTE9DT01PX0dQSU9fQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaAppbmRleCA0ODIxODUwLi4yNzFlMjQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oCkBAIC0xNiwzMDUgKzE2LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfSAogI2RlZmluZSBfX0FTTV9BUkNIX01GUF9ICiAKLSNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDEyOCkKLQotLyogbGlzdCBvZiBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBNRlAgcGlucyAqLwotZW51bSB7Ci0JTUZQX1BJTl9JTlZBTElEID0gLTEsCi0KLQlNRlBfUElOX0dQSU8wID0gMCwKLQlNRlBfUElOX0dQSU8xLAotCU1GUF9QSU5fR1BJTzIsCi0JTUZQX1BJTl9HUElPMywKLQlNRlBfUElOX0dQSU80LAotCU1GUF9QSU5fR1BJTzUsCi0JTUZQX1BJTl9HUElPNiwKLQlNRlBfUElOX0dQSU83LAotCU1GUF9QSU5fR1BJTzgsCi0JTUZQX1BJTl9HUElPOSwKLQlNRlBfUElOX0dQSU8xMCwKLQlNRlBfUElOX0dQSU8xMSwKLQlNRlBfUElOX0dQSU8xMiwKLQlNRlBfUElOX0dQSU8xMywKLQlNRlBfUElOX0dQSU8xNCwKLQlNRlBfUElOX0dQSU8xNSwKLQlNRlBfUElOX0dQSU8xNiwKLQlNRlBfUElOX0dQSU8xNywKLQlNRlBfUElOX0dQSU8xOCwKLQlNRlBfUElOX0dQSU8xOSwKLQlNRlBfUElOX0dQSU8yMCwKLQlNRlBfUElOX0dQSU8yMSwKLQlNRlBfUElOX0dQSU8yMiwKLQlNRlBfUElOX0dQSU8yMywKLQlNRlBfUElOX0dQSU8yNCwKLQlNRlBfUElOX0dQSU8yNSwKLQlNRlBfUElOX0dQSU8yNiwKLQlNRlBfUElOX0dQSU8yNywKLQlNRlBfUElOX0dQSU8yOCwKLQlNRlBfUElOX0dQSU8yOSwKLQlNRlBfUElOX0dQSU8zMCwKLQlNRlBfUElOX0dQSU8zMSwKLQlNRlBfUElOX0dQSU8zMiwKLQlNRlBfUElOX0dQSU8zMywKLQlNRlBfUElOX0dQSU8zNCwKLQlNRlBfUElOX0dQSU8zNSwKLQlNRlBfUElOX0dQSU8zNiwKLQlNRlBfUElOX0dQSU8zNywKLQlNRlBfUElOX0dQSU8zOCwKLQlNRlBfUElOX0dQSU8zOSwKLQlNRlBfUElOX0dQSU80MCwKLQlNRlBfUElOX0dQSU80MSwKLQlNRlBfUElOX0dQSU80MiwKLQlNRlBfUElOX0dQSU80MywKLQlNRlBfUElOX0dQSU80NCwKLQlNRlBfUElOX0dQSU80NSwKLQlNRlBfUElOX0dQSU80NiwKLQlNRlBfUElOX0dQSU80NywKLQlNRlBfUElOX0dQSU80OCwKLQlNRlBfUElOX0dQSU80OSwKLQlNRlBfUElOX0dQSU81MCwKLQlNRlBfUElOX0dQSU81MSwKLQlNRlBfUElOX0dQSU81MiwKLQlNRlBfUElOX0dQSU81MywKLQlNRlBfUElOX0dQSU81NCwKLQlNRlBfUElOX0dQSU81NSwKLQlNRlBfUElOX0dQSU81NiwKLQlNRlBfUElOX0dQSU81NywKLQlNRlBfUElOX0dQSU81OCwKLQlNRlBfUElOX0dQSU81OSwKLQlNRlBfUElOX0dQSU82MCwKLQlNRlBfUElOX0dQSU82MSwKLQlNRlBfUElOX0dQSU82MiwKLQlNRlBfUElOX0dQSU82MywKLQlNRlBfUElOX0dQSU82NCwKLQlNRlBfUElOX0dQSU82NSwKLQlNRlBfUElOX0dQSU82NiwKLQlNRlBfUElOX0dQSU82NywKLQlNRlBfUElOX0dQSU82OCwKLQlNRlBfUElOX0dQSU82OSwKLQlNRlBfUElOX0dQSU83MCwKLQlNRlBfUElOX0dQSU83MSwKLQlNRlBfUElOX0dQSU83MiwKLQlNRlBfUElOX0dQSU83MywKLQlNRlBfUElOX0dQSU83NCwKLQlNRlBfUElOX0dQSU83NSwKLQlNRlBfUElOX0dQSU83NiwKLQlNRlBfUElOX0dQSU83NywKLQlNRlBfUElOX0dQSU83OCwKLQlNRlBfUElOX0dQSU83OSwKLQlNRlBfUElOX0dQSU84MCwKLQlNRlBfUElOX0dQSU84MSwKLQlNRlBfUElOX0dQSU84MiwKLQlNRlBfUElOX0dQSU84MywKLQlNRlBfUElOX0dQSU84NCwKLQlNRlBfUElOX0dQSU84NSwKLQlNRlBfUElOX0dQSU84NiwKLQlNRlBfUElOX0dQSU84NywKLQlNRlBfUElOX0dQSU84OCwKLQlNRlBfUElOX0dQSU84OSwKLQlNRlBfUElOX0dQSU85MCwKLQlNRlBfUElOX0dQSU85MSwKLQlNRlBfUElOX0dQSU85MiwKLQlNRlBfUElOX0dQSU85MywKLQlNRlBfUElOX0dQSU85NCwKLQlNRlBfUElOX0dQSU85NSwKLQlNRlBfUElOX0dQSU85NiwKLQlNRlBfUElOX0dQSU85NywKLQlNRlBfUElOX0dQSU85OCwKLQlNRlBfUElOX0dQSU85OSwKLQlNRlBfUElOX0dQSU8xMDAsCi0JTUZQX1BJTl9HUElPMTAxLAotCU1GUF9QSU5fR1BJTzEwMiwKLQlNRlBfUElOX0dQSU8xMDMsCi0JTUZQX1BJTl9HUElPMTA0LAotCU1GUF9QSU5fR1BJTzEwNSwKLQlNRlBfUElOX0dQSU8xMDYsCi0JTUZQX1BJTl9HUElPMTA3LAotCU1GUF9QSU5fR1BJTzEwOCwKLQlNRlBfUElOX0dQSU8xMDksCi0JTUZQX1BJTl9HUElPMTEwLAotCU1GUF9QSU5fR1BJTzExMSwKLQlNRlBfUElOX0dQSU8xMTIsCi0JTUZQX1BJTl9HUElPMTEzLAotCU1GUF9QSU5fR1BJTzExNCwKLQlNRlBfUElOX0dQSU8xMTUsCi0JTUZQX1BJTl9HUElPMTE2LAotCU1GUF9QSU5fR1BJTzExNywKLQlNRlBfUElOX0dQSU8xMTgsCi0JTUZQX1BJTl9HUElPMTE5LAotCU1GUF9QSU5fR1BJTzEyMCwKLQlNRlBfUElOX0dQSU8xMjEsCi0JTUZQX1BJTl9HUElPMTIyLAotCU1GUF9QSU5fR1BJTzEyMywKLQlNRlBfUElOX0dQSU8xMjQsCi0JTUZQX1BJTl9HUElPMTI1LAotCU1GUF9QSU5fR1BJTzEyNiwKLQlNRlBfUElOX0dQSU8xMjcsCi0JTUZQX1BJTl9HUElPMF8yLAotCU1GUF9QSU5fR1BJTzFfMiwKLQlNRlBfUElOX0dQSU8yXzIsCi0JTUZQX1BJTl9HUElPM18yLAotCU1GUF9QSU5fR1BJTzRfMiwKLQlNRlBfUElOX0dQSU81XzIsCi0JTUZQX1BJTl9HUElPNl8yLAotCU1GUF9QSU5fR1BJTzdfMiwKLQlNRlBfUElOX0dQSU84XzIsCi0JTUZQX1BJTl9HUElPOV8yLAotCU1GUF9QSU5fR1BJTzEwXzIsCi0JTUZQX1BJTl9HUElPMTFfMiwKLQlNRlBfUElOX0dQSU8xMl8yLAotCU1GUF9QSU5fR1BJTzEzXzIsCi0JTUZQX1BJTl9HUElPMTRfMiwKLQlNRlBfUElOX0dQSU8xNV8yLAotCU1GUF9QSU5fR1BJTzE2XzIsCi0JTUZQX1BJTl9HUElPMTdfMiwKLQotCU1GUF9QSU5fVUxQSV9TVFAsCi0JTUZQX1BJTl9VTFBJX05YVCwKLQlNRlBfUElOX1VMUElfRElSLAotCi0JTUZQX1BJTl9uWENWUkVOLAotCU1GUF9QSU5fREZfQ0xFX25PRSwKLQlNRlBfUElOX0RGX25BRFYxX0FMRSwKLQlNRlBfUElOX0RGX1NDTEtfRSwKLQlNRlBfUElOX0RGX1NDTEtfUywKLQlNRlBfUElOX25CRTAsCi0JTUZQX1BJTl9uQkUxLAotCU1GUF9QSU5fREZfbkFEVjJfQUxFLAotCU1GUF9QSU5fREZfSU5UX1JuQiwKLQlNRlBfUElOX0RGX25DUzAsCi0JTUZQX1BJTl9ERl9uQ1MxLAotCU1GUF9QSU5fbkxVQSwKLQlNRlBfUElOX25MTEEsCi0JTUZQX1BJTl9ERl9uV0UsCi0JTUZQX1BJTl9ERl9BTEVfbldFLAotCU1GUF9QSU5fREZfblJFX25PRSwKLQlNRlBfUElOX0RGX0FERFIwLAotCU1GUF9QSU5fREZfQUREUjEsCi0JTUZQX1BJTl9ERl9BRERSMiwKLQlNRlBfUElOX0RGX0FERFIzLAotCU1GUF9QSU5fREZfSU8wLAotCU1GUF9QSU5fREZfSU8xLAotCU1GUF9QSU5fREZfSU8yLAotCU1GUF9QSU5fREZfSU8zLAotCU1GUF9QSU5fREZfSU80LAotCU1GUF9QSU5fREZfSU81LAotCU1GUF9QSU5fREZfSU82LAotCU1GUF9QSU5fREZfSU83LAotCU1GUF9QSU5fREZfSU84LAotCU1GUF9QSU5fREZfSU85LAotCU1GUF9QSU5fREZfSU8xMCwKLQlNRlBfUElOX0RGX0lPMTEsCi0JTUZQX1BJTl9ERl9JTzEyLAotCU1GUF9QSU5fREZfSU8xMywKLQlNRlBfUElOX0RGX0lPMTQsCi0JTUZQX1BJTl9ERl9JTzE1LAotCi0JLyogYWRkaXRpb25hbCBwaW5zIG9uIFBYQTkzMCAqLwotCU1GUF9QSU5fR1NJTV9VSU8sCi0JTUZQX1BJTl9HU0lNX1VDTEssCi0JTUZQX1BJTl9HU0lNX1VERVQsCi0JTUZQX1BJTl9HU0lNX25VUlNULAotCU1GUF9QSU5fUE1JQ19JTlQsCi0JTUZQX1BJTl9SRFksCi0KLQlNRlBfUElOX01BWCwKLX07Ci0KLS8qCi0gKiBhIHBvc3NpYmxlIE1GUCBjb25maWd1cmF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IGludGVnZXIKLSAqCi0gKiBiaXQgIDAuLiA5IC0gTUZQIFBpbiBOdW1iZXIgKDEwMjQgUGlucyBNYXhpbXVtKQotICogYml0IDEwLi4xMiAtIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3Rpb24KLSAqIGJpdCAxMy4uMTUgLSBEcml2ZSBTdHJlbmd0aAotICogYml0IDE2Li4xOCAtIExvdyBQb3dlciBNb2RlIFN0YXRlCi0gKiBiaXQgMTkuLjIwIC0gTG93IFBvd2VyIE1vZGUgRWRnZSBEZXRlY3Rpb24KLSAqIGJpdCAyMS4uMjIgLSBSdW4gTW9kZSBQdWxsIFN0YXRlCi0gKgotICogdG8gZmFjaWxpdGF0ZSB0aGUgZGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHByb3ZpZGVkCi0gKgotICogTUZQX0NGR19ERUZBVUxUIC0gZGVmYXVsdCBNRlAgY29uZmlndXJhdGlvbiB2YWx1ZSwgd2l0aAotICogCQkgIGFsdGVybmF0ZSBmdW5jdGlvbiA9IDAsCi0gKiAJCSAgZHJpdmUgc3RyZW5ndGggPSBmYXN0IDNtQSAoTUZQX0RTMDNYKQotICogCQkgIGxvdyBwb3dlciBtb2RlID0gZGVmYXVsdAotICogCQkgIGVkZ2UgZGV0ZWN0aW9uID0gbm9uZQotICoKLSAqIE1GUF9DRkcJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24KLSAqIE1GUF9DRkdfRFJWCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uIGFuZAotICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aAotICogTUZQX0NGR19MUE0JLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCi0gKiAJCSAgbG93IHBvd2VyIG1vZGUKLSAqIE1GUF9DRkdfWAktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiwKLSAqIAkJICBwaW4gZHJpdmUgc3RyZW5ndGggYW5kIGxvdyBwb3dlciBtb2RlCi0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1mcF9jZmdfdDsKLQotI2RlZmluZSBNRlBfUElOKHgpCQkoKHgpICYgMHgzZmYpCi0KLSNkZWZpbmUgTUZQX0FGMAkJCSgweDAgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjEJCQkoMHgxIDw8IDEwKQotI2RlZmluZSBNRlBfQUYyCQkJKDB4MiA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGMwkJCSgweDMgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjQJCQkoMHg0IDw8IDEwKQotI2RlZmluZSBNRlBfQUY1CQkJKDB4NSA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNgkJCSgweDYgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjcJCQkoMHg3IDw8IDEwKQotI2RlZmluZSBNRlBfQUZfTUFTSwkJKDB4NyA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGKHgpCQkoKCh4KSA+PiAxMCkgJiAweDcpCi0KLSNkZWZpbmUgTUZQX0RTMDFYCQkoMHgwIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwMlgJCSgweDEgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzAzWAkJKDB4MiA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDRYCQkoMHgzIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwNlgJCSgweDQgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzA4WAkJKDB4NSA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMTBYCQkoMHg2IDw8IDEzKQotI2RlZmluZSBNRlBfRFMxM1gJCSgweDcgPDwgMTMpCi0jZGVmaW5lIE1GUF9EU19NQVNLCQkoMHg3IDw8IDEzKQotI2RlZmluZSBNRlBfRFMoeCkJCSgoKHgpID4+IDEzKSAmIDB4NykKLQotI2RlZmluZSBNRlBfTFBNX0RFRkFVTFQJCSgweDAgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fRFJJVkVfTE9XCSgweDEgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fRFJJVkVfSElHSAkoMHgyIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1BVTExfTE9XCSgweDMgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fUFVMTF9ISUdICSgweDQgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fRkxPQVQJCSgweDUgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fSU5QVVQJCSgweDYgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fU1RBVEVfTUFTSwkoMHg3IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1NUQVRFKHgpCSgoKHgpID4+IDE2KSAmIDB4NykKLQotI2RlZmluZSBNRlBfTFBNX0VER0VfTk9ORQkoMHgwIDw8IDE5KQotI2RlZmluZSBNRlBfTFBNX0VER0VfUklTRQkoMHgxIDw8IDE5KQotI2RlZmluZSBNRlBfTFBNX0VER0VfRkFMTAkoMHgyIDw8IDE5KQotI2RlZmluZSBNRlBfTFBNX0VER0VfQk9USAkoMHgzIDw8IDE5KQotI2RlZmluZSBNRlBfTFBNX0VER0VfTUFTSwkoMHgzIDw8IDE5KQotI2RlZmluZSBNRlBfTFBNX0VER0UoeCkJCSgoKHgpID4+IDE5KSAmIDB4MykKLQotI2RlZmluZSBNRlBfUFVMTF9OT05FCQkoMHgwIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCi0KLSNkZWZpbmUgTUZQX0NGR19ERUZBVUxUCQkoTUZQX0FGMCB8IE1GUF9EUzAzWCB8IE1GUF9MUE1fREVGQVVMVCB8XAotCQkJCSBNRlBfTFBNX0VER0VfTk9ORSB8IE1GUF9QVUxMX05PTkUpCi0KLSNkZWZpbmUgTUZQX0NGRyhwaW4sIGFmKQkJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfk1GUF9BRl9NQVNLKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmKSkKLQotI2RlZmluZSBNRlBfQ0ZHX0RSVihwaW4sIGFmLCBkcnYpCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSykpIHxcCi0JIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYpKQotCi0jZGVmaW5lIE1GUF9DRkdfTFBNKHBpbiwgYWYsIGxwbSkJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCi0JIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfTFBNXyMjbHBtKSkKLQotI2RlZmluZSBNRlBfQ0ZHX1gocGluLCBhZiwgZHJ2LCBscG0pCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCi0JIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYgfCBNRlBfTFBNXyMjbHBtKSkKKyNpbmNsdWRlIDxwbGF0L21mcC5oPgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NRlBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oCmluZGV4IDZkMTMwNGMuLjAyYTY5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTE0LDYgKzE0LDExIEBACiAJaW50ICgqZ2V0X3JvKShzdHJ1Y3QgZGV2aWNlICopOwogCXZvaWQgKCpzZXRwb3dlcikoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKik7CisJaW50IGdwaW9fY2FyZF9kZXRlY3Q7CQkJLyogZ3BpbyBkZXRlY3RpbmcgY2FyZCBpbnNlcnRpb24gKi8KKwlpbnQgZ3Bpb19jYXJkX3JvOwkJCS8qIGdwaW8gZGV0ZWN0aW5nIHJlYWQgb25seSB0b2dnbGUgKi8KKwlib29sIGdwaW9fY2FyZF9yb19pbnZlcnQ7CQkvKiBncGlvIHJvIGlzIGludmVydGVkICovCisJaW50IGdwaW9fcG93ZXI7CQkJCS8qIGdwaW8gcG93ZXJpbmcgdXAgTU1DIGJ1cyAqLworCWJvb2wgZ3Bpb19wb3dlcl9pbnZlcnQ7CQkJLyogZ3BpbyBwb3dlciBpcyBpbnZlcnRlZCAqLwogfTsKIAogZXh0ZXJuIHZvaWQgcHhhX3NldF9tY2lfaW5mbyhzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzliMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYWxtdGMtZ3Bpby5oCisgKgorICogR1BJT3MgYW5kIGludGVycnVwdHMgZm9yIFBhbG0gVHVuZ3N0ZW58QyBIYW5kaGVsZCBDb21wdXRlcgorICoKKyAqIEF1dGhvcnM6CUFsZXggT3Nib3JuZSA8Ym9ib2Zkb29tQGdtYWlsLmNvbT4KKyAqCQlNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoJCUhvbGdlciBCb2NrbGV0IDxiaXR6LmVtYWlsQGdteC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfSU5DTFVERV9QQUxNVENfSF8KKyNkZWZpbmUgX0lOQ0xVREVfUEFMTVRDX0hfCisKKy8qKiBIRVJFIEFSRSBHUElPcyAqKi8KKworLyogR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfRUFSUEhPTkVfREVURUNUCTIKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfQ1JBRExFX0RFVEVDVAk1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0hPVFNZTkNfQlVUVE9OCTcKKworLyogU0QvTU1DICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NEX0RFVEVDVF9OCTEyCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NEX1BPV0VSCQkzMgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19TRF9SRUFET05MWQk1NAorCisvKiBXTEFOICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWQkxMworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFkJMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMQkxNQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyCTMzCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMJNTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUCTc4CisKKy8qIFVEQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19VU0JfREVURUNUX04JNAorI2RlZmluZSBHUElPX05SX1BBTE1UQ19VU0JfUE9XRVIJMzYKKworLyogTENEL0JBQ0tMSUdIVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19CTF9QT1dFUgkJMTYKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfTENEX1BPV0VSCTQ0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0xDRF9CTEFOSwkzOAorCisvKiBVQVJUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1JTMjMyX1BPV0VSCTM3CisKKy8qIElSREEgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfSVJfRElTQUJMRQk0NQorCisvKiBJUlFzICovCisjZGVmaW5lIElSUV9HUElPX1BBTE1UQ19TRF9ERVRFQ1RfTglJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19TRF9ERVRFQ1RfTikKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRDX1dMQU5fUkVBRFkJSVJRX0dQSU8oR1BJT19OUl9QQUxNVENfV0xBTl9SRUFEWSkKKworLyogVUNCMTQwMCBHUElPcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QT1dFUl9ERVRFQ1QJKDB4ODAgfCAweDAwKQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19IRUFEUEhPTkVfREVURUNUCSgweDgwIHwgMHgwMSkKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU1BFQUtFUl9FTkFCTEUJKDB4ODAgfCAweDAzKQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19WSUJSQV9QT1dFUgkoMHg4MCB8IDB4MDUpCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0xFRF9QT1dFUgkoMHg4MCB8IDB4MDcpCisKKy8qKiBIRVJFIEFSRSBJTklUIFZBTFVFUyAqKi8KKyNkZWZpbmUgUEFMTVRDX1VDQjE0MDBfR1BJT19PRkZTRVQJMHg4MAorCisvKiBCQVRURVJZICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUFYX1ZPTFRBR0UJCTQwMDAJLyogNC4wMFYgbWF4aW11bSB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUlOX1ZPTFRBR0UJCTM1NTAJLyogMy41NVYgY3JpdGljYWwgdm9sdGFnZSAqLworI2RlZmluZSBQQUxNVENfQkFUX01BWF9DVVJSRU5UCQkwCS8qIHVua25va24gKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NSU5fQ1VSUkVOVAkJMAkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUFYX0NIQVJHRQkJMQkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUlOX0NIQVJHRQkJMQkvKiB1bmtub3duICovCisjZGVmaW5lIFBBTE1UQ19NQVhfTElGRV9NSU5TCQkyNDAJLyogb24tbGlmZSBpbiBtaW51dGVzICovCisKKyNkZWZpbmUgUEFMTVRDX0JBVF9NRUFTVVJFX0RFTEFZCShIWiAqIDEpCisKKy8qIEJBQ0tMSUdIVCAqLworI2RlZmluZSBQQUxNVENfTUFYX0lOVEVOU0lUWQkJMHhGRQorI2RlZmluZSBQQUxNVENfREVGQVVMVF9JTlRFTlNJVFkJMHg3RQorI2RlZmluZSBQQUxNVENfTElNSVRfTUFTSwkJMHg3RgorI2RlZmluZSBQQUxNVENfUFJFU0NBTEVSCQkweDNGCisjZGVmaW5lIFBBTE1UQ19QRVJJT0RfTlMJCTM1MDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKaW5kZXggZTc0MDgyYy4uMWJlMGRiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaApAQCAtODIsNiArODIsMTEgQEAKICNkZWZpbmUgUEFMTVRYX1BIWVNfRkxBU0hfU1RBUlQJUFhBX0NTMF9QSFlTCS8qIENoaXBTZWxlY3QgMCAqLwogI2RlZmluZSBQQUxNVFhfUEhZU19OQU5EX1NUQVJUCVBYQV9DUzFfUEhZUwkvKiBDaGlwU2VsZWN0IDEgKi8KIAorI2RlZmluZSBQQUxNVFhfTkFORF9BTEVfUEhZUwkoUEFMTVRYX1BIWVNfTkFORF9TVEFSVCB8ICgxIDw8IDI0KSkKKyNkZWZpbmUgUEFMTVRYX05BTkRfQ0xFX1BIWVMJKFBBTE1UWF9QSFlTX05BTkRfU1RBUlQgfCAoMSA8PCAyNSkpCisjZGVmaW5lIFBBTE1UWF9OQU5EX0FMRV9WSVJUCTB4ZmYxMDAwMDAKKyNkZWZpbmUgUEFMTVRYX05BTkRfQ0xFX1ZJUlQJMHhmZjIwMDAwMAorCiAvKiBUT1VDSFNDUkVFTiAqLwogI2RlZmluZSBBQzk3X0xJTktfRlJBTUUJCQkyMQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oCmluZGV4IDdkMWEwNTliLi5lOTFkNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaApAQCAtMjA4LDcgKzIwOCw3IEBACiAjZGVmaW5lIENLRU5fTVZFRAk0MwkvKiA8IE1WRUQgY2xvY2sgZW5hYmxlICovCiAKIC8qIE5vdGU6IEdDVSBjbG9jayBlbmFibGUgYml0IGRpZmZlcnMgb24gUFhBMzAwL1BYQTMxMCBhbmQgUFhBMzIwICovCi0jZGVmaW5lIFBYQTMwMF9DS0VOX0dSQVBISUNTCTQyCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCi0jZGVmaW5lIFBYQTMyMF9DS0VOX0dSQVBISUNTCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0tFTl9QWEEzMDBfR0NVCQk0MgkvKiBHcmFwaGljcyBjb250cm9sbGVyIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBDS0VOX1BYQTMyMF9HQ1UJCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBM1hYX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAppbmRleCA2OTMyNzIwLi5mNzMwNjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaApAQCAtMTE4LDcgKzExOCw4IEBACiAJdV9pbnQJCWZpeGVkX21vZGVzOjEsCiAJCQljbWFwX2ludmVyc2U6MSwKIAkJCWNtYXBfc3RhdGljOjEsCi0JCQl1bnVzZWQ6Mjk7CisJCQlhY2NlbGVyYXRpb25fZW5hYmxlZDoxLAorCQkJdW51c2VkOjI4OwogCiAJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZGVmaW5lZCBpbiBMQ0NSMAogCSAqICAgICAgTENDUjBfQWN0IG9yIExDQ1IwX1BhcyAgICAgICAgICBBY3RpdmUgb3IgUGFzc2l2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCmluZGV4IGFkMjNlNzQuLjY4NDY0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgSUNGUAkJX19SRUcoMHg0MEQwMDAwQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIElDSFAJCV9fUkVHKDB4NDBEMDAwMTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBIaWdoZXN0IFByaW9yaXR5IFJlZ2lzdGVyICovCiAKICNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCiAjZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCkBAIC0yMCw0ICsyMSwxNCBAQAogI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KIAorI2RlZmluZSBJQ0lQMwkJX19SRUcoMHg0MEQwMDEzMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNNUjMJCV9fUkVHKDB4NDBEMDAxMzQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNMUjMJCV9fUkVHKDB4NDBEMDAxMzgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAzICovCisjZGVmaW5lIElDRlAzCQlfX1JFRygweDQwRDAwMTNDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBJQ1BSMwkJX19SRUcoMHg0MEQwMDE0MCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworCisjZGVmaW5lIElQUih4KQkJX19SRUcoMHg0MEQwMDAxQyArICh4IDwgMzIgPyAoeCA8PCAyKQkJXAorCQkJCTogKHggPCA2NCA/ICgweDk0ICsgKCh4IC0gMzIpIDw8IDIpKQlcCisJCQkJOiAoMHgxMjggKyAoKHggLSA2NCkgPDwgMikpKSkpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfSU5UQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBiNTQ3NDk0Li4yMzc3MzRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTM3LDcgKzM3LDcgQEAKIHsKIAlpZiAobWFjaGluZV9pc19saXR0bGV0b24oKSB8fCBtYWNoaW5lX2lzX2ludGVsbW90ZTIoKQogCSAgICB8fCBtYWNoaW5lX2lzX2NzYjcyNigpIHx8IG1hY2hpbmVfaXNfc3RhcmdhdGUyKCkKLQkgICAgfHwgbWFjaGluZV9pc19jbV94MzAwKCkpCisJICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpIHx8IG1hY2hpbmVfaXNfYmFsbG9vbjMoKSkKIAkJVUFSVCA9IFNUVUFSVDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBmNmUwMzAwLi42MTEyYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9JUlFTCTEyOAorCiAjZGVmaW5lIElSUV9CSVQobikJKCgobikgLSBQWEFfSVJRKDApKSAmIDB4MWYpCiAjZGVmaW5lIF9JQ01SKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNNUjIgOiAmSUNNUikpCiAjZGVmaW5lIF9JQ0xSKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNMUjIgOiAmSUNMUikpCkBAIC0xMjAsNyArMTIyLDkgQEAKIAogdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxKGludCBpcnFfbnIsIHNldF93YWtlX3QgZm4pCiB7Ci0JaW50IGlycTsKKwlpbnQgaXJxLCBpOworCisJQlVHX09OKGlycV9uciA+IE1BWF9JTlRFUk5BTF9JUlFTKTsKIAogCXB4YV9pbnRlcm5hbF9pcnFfbnIgPSBpcnFfbnI7CiAKQEAgLTEyOSw2ICsxMzMsMTIgQEAKIAkJX0lDTFIoaXJxKSA9IDA7CS8qIGFsbCBJUlFzIGFyZSBJUlEsIG5vdCBGSVEgKi8KIAl9CiAKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBwcmlvcml0eSAqLworCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTN4eCgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpcnFfbnI7IGkrKykKKwkJCUlQUihpKSA9IGkgfCAoMSA8PCAzMSk7CisJfQorCiAJLyogb25seSB1bm1hc2tlZCBpbnRlcnJ1cHRzIGtpY2sgdXMgb3V0IG9mIGlkbGUgKi8KIAlJQ0NSID0gMTsKIApAQCAtMTQzLDcgKzE1Myw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2ljbXJbMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yW01BWF9JTlRFUk5BTF9JUlFTLzMyXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2lwcltNQVhfSU5URVJOQUxfSVJRU107CiAKIHN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTE1Myw2ICsxNjQsOCBAQAogCQlzYXZlZF9pY21yW2ldID0gX0lDTVIoaXJxKTsKIAkJX0lDTVIoaXJxKSA9IDA7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBweGFfaW50ZXJuYWxfaXJxX25yOyBpKyspCisJCXNhdmVkX2lwcltpXSA9IElQUihpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY1LDYgKzE3OCw4IEBACiAJCV9JQ01SKGlycSkgPSBzYXZlZF9pY21yW2ldOwogCQlfSUNMUihpcnEpID0gMDsKIAl9CisJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKKwkJSVBSKGkpID0gc2F2ZWRfaXByW2ldOwogCiAJSUNDUiA9IDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCmluZGV4IDU1YjM3ODguLjEzODQ4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCkBAIC0yNjUsNDUgKzI2NSwxMiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKLXN0YXRpYyBpbnQgbGl0dGxldG9uX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIGlycV9oYW5kbGVyX3QgbGl0dGxldG9uX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciwgZ3Bpb19jZCA9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChncGlvX2NkLCAibW1jIGNhcmQgZGV0ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9jZDsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fY2QpOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb19jZCksIGxpdHRsZXRvbl9kZXRlY3RfaW50LAotCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJtbWMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfcmVxdWVzdF9pcnE6Ci0JZ3Bpb19mcmVlKGdwaW9fY2QpOwotZXJyX3JlcXVlc3RfY2Q6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbGl0dGxldG9uX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZ3Bpb19jZCA9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVDsKLQotCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBkYXRhKTsKLQlncGlvX2ZyZWUoZ3Bpb19jZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbGl0dGxldG9uX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gbGl0dGxldG9uX21jaV9pbml0LAotCS5leGl0CQk9IGxpdHRsZXRvbl9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGxpdHRsZXRvbl9pbml0X21tYyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IGYwNGM4MzMuLmM2YTk0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTQ4MiwxMSArNDgyLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbHViYm9ja19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmRldGVjdF9kZWxheQk9IDEsCi0JLmluaXQgCQk9IGx1YmJvY2tfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBsdWJib2NrX21jaV9nZXRfcm8sCi0JLmV4aXQgCQk9IGx1YmJvY2tfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDEsCisJLmluaXQgCQkJPSBsdWJib2NrX21jaV9pbml0LAorCS5nZXRfcm8JCQk9IGx1YmJvY2tfbWNpX2dldF9ybywKKwkuZXhpdCAJCQk9IGx1YmJvY2tfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKQEAgLTUwNCw4ICs1MDcsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBsdWJib2NrX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IGx1YmJvY2tfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGx1YmJvY2tfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggY2EzOTY2OS4uNTM2MGMwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC0xNDAsMTUgKzE0MCw5IEBACiAgKiBJUkRBCiAgKi8KIAotc3RhdGljIHZvaWQgbWFnaWNpYW5faXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJTzgzX01BR0lDSUFOX25JUl9FTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgbWFnaWNpYW5fZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IG1hZ2ljaWFuX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJTzgzX01BR0lDSUFOX25JUl9FTiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qCkBAIC02NTEsNTUgKzY0NSwyNCBAQAogc3RhdGljIGludCBtYWdpY2lhbl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLCB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShJUlFfTUFHSUNJQU5fU0QsIGRldGVjdF9pcnEsCisJcmV0dXJuIHJlcXVlc3RfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGV0ZWN0X2lycSwKIAkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJCSJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKLQllcnIgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfcG93ZXI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSwgIm5TRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfcmVhZG9ubHk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfcmVhZG9ubHk6Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSKTsKLWVycl9yZXF1ZXN0X3Bvd2VyOgotCWZyZWVfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGF0YSk7Ci1lcnJfcmVxdWVzdF9pcnE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbWFnaWNpYW5fbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsICgxIDw8IHZkZCkgJiBwZGF0YS0+b2NyX21hc2spOwotfQotCi1zdGF0aWMgaW50IG1hZ2ljaWFuX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAoIWdwaW9fZ2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSkpOworCQkJCSJtbWMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgbWFnaWNpYW5fbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUik7CiAJZnJlZV9pcnEoSVJRX01BR0lDSUFOX1NELCBkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtYWdpY2lhbl9tY2lfaW5mbyA9IHsKLQkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgICAgID0gbWFnaWNpYW5fbWNpX2luaXQsCi0JLmdldF9ybyAgID0gbWFnaWNpYW5fbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgPSBtYWdpY2lhbl9tY2lfc2V0cG93ZXIsCi0JLmV4aXQgICAgID0gbWFnaWNpYW5fbWNpX2V4aXQsCisJLm9jcl9tYXNrIAkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgICAgIAkJPSBtYWdpY2lhbl9tY2lfaW5pdCwKKwkuZXhpdCAgICAgCQk9IG1hZ2ljaWFuX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSBFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFksCisJLmdwaW9fY2FyZF9yb19pbnZlcnQJPSAxLAorCS5ncGlvX3Bvd2VyCQk9IEVHUElPX01BR0lDSUFOX1NEX1BPV0VSLAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IGY0ZGFiZjAuLmE0ZWVhZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC00NTAsMTAgKzQ1MCwxMyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1haW5zdG9uZV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IG1haW5zdG9uZV9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gbWFpbnN0b25lX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBtYWluc3RvbmVfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCQk9IG1haW5zdG9uZV9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCQk9IG1haW5zdG9uZV9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IG1haW5zdG9uZV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCkBAIC00NzYsOCArNDc5LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgbWFpbnN0b25lX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2tleXNfYnV0dG9uW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggMmQyODEzMi4uM2NhYjQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtNDM0LDcyICs0MzQsMTUgQEAKIC8qCiAgKiBTRElPL01NQyBDYXJkIGNvbnRyb2xsZXIKICAqLwotc3RhdGljIHZvaWQgbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzkxX1NESU9fRU4sIDEpOwkvKiBlbmFibGUgU0RJTyBwb3dlciAqLwotCWVsc2UKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzkxX1NESU9fRU4sIDApOwkvKiBkaXNhYmxlIFNESU8gcG93ZXIgKi8KLX0KLQotc3RhdGljIGludCBtY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzc4X1NESU9fUk8pOwotfQotCi1zdHJ1Y3QgZ3Bpb19yZXNzIG1jaV9ncGlvc1tdID0gewotCU1JT19HUElPX0lOKEdQSU83OF9TRElPX1JPLCAJIlNESU8gcmVhZG9ubHkgZGV0ZWN0IiksCi0JTUlPX0dQSU9fSU4oR1BJTzE1X1NESU9fSU5TRVJULAkiU0RJTyBpbnNlcnRpb24gZGV0ZWN0IiksCi0JTUlPX0dQSU9fT1VUKEdQSU85MV9TRElPX0VOLCAwLAkiU0RJTyBwb3dlciBlbmFibGUiKQotfTsKLQotc3RhdGljIHZvaWQgbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCW1pb19ncGlvX2ZyZWUoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJTzE1X1NESU9fSU5TRVJUKSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWlvYTcwMV9tY2lfaW5mbzsKLQogLyoqCiAgKiBUaGUgY2FyZCBkZXRlY3QgaW50ZXJydXB0IGlzbid0IGRlYm91bmNlZCBzbyB3ZSBkZWxheSBpdCBieSAyNTBtcwogICogdG8gZ2l2ZSB0aGUgY2FyZCBhIGNoYW5jZSB0byBmdWxseSBpbnNlcnQvZWplY3QuCiAgKi8KLXN0YXRpYyBpbnQgbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IHJjOwotCWludCBpcnEgPSBncGlvX3RvX2lycShHUElPMTVfU0RJT19JTlNFUlQpOwotCi0JcmMgPSBtaW9fZ3Bpb19yZXF1ZXN0KEFSUkFZX0FORF9TSVpFKG1jaV9ncGlvcykpOwotCWlmIChyYykKLQkJZ290byBlcnJfZ3BpbzsKLQkvKiBlbmFibGUgUkUvRkUgaW50ZXJydXB0IG9uIGNhcmQgaW5zZXJ0aW9uIGFuZCByZW1vdmFsICovCi0JcmMgPSByZXF1ZXN0X2lycShpcnEsIGRldGVjdF9pbnQsCi0JCQkgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfAotCQkJIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2lycTsKLQotCW1pb2E3MDFfbWNpX2luZm8uZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCXJldHVybiAwOwotCi1lcnJfaXJxOgotCWRldl9lcnIoZGV2LCAibWlvYTcwMV9tY2lfaW5pdDogTU1DL1NEOiIKLQkJIiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOwotCW1pb19ncGlvX2ZyZWUoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci1lcnJfZ3BpbzoKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWlvYTcwMV9tY2lfaW5mbyA9IHsKLQkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuaW5pdAkgID0gbWNpX2luaXQsCi0JLmdldF9ybwkgID0gbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgPSBtY2lfc2V0cG93ZXIsCi0JLmV4aXQJICA9IG1jaV9leGl0LAorCS5vY3JfbWFzayAJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPMTVfU0RJT19JTlNFUlQsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPNzhfU0RJT19STywKKwkuZ3Bpb19wb3dlcgkJPSBHUElPOTFfU0RJT19FTiwKIH07CiAKIC8qIEZsYXNoUkFNICovCkBAIC03NjUsMTkgKzcwOCwyMCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7Ci0JLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggaWQgaW4gcHhhMjd4X2RldmljZV9jYW1lcmEgaW4gZGV2aWNlLmMgKi8KLX07Ci0KIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1pb2E3MDFfaTJjX2RldmljZXNbXSA9IHsKIAl7Ci0JCS8qIE11c3QgaW5pdGlhbGl6ZSBiZWZvcmUgdGhlIGNhbWVyYShzKSAqLwogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTExMSIsIDB4NWQpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCQk9IDAsIC8qIE1hdGNoIGlkIGluIHB4YTI3eF9kZXZpY2VfY2FtZXJhIGluIGRldmljZS5jICovCisJLmJvYXJkX2luZm8JPSAmbWlvYTcwMV9pMmNfZGV2aWNlc1swXSwKKwkuaTJjX2FkYXB0ZXJfaWQJPSAwLAorCS5tb2R1bGVfbmFtZQk9ICJtdDltMTExIiwKK307CisKIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgaTJjX3BkYXRhID0gewogCS5mYXN0X21vZGUgPSAxLAogfTsKQEAgLTgxMSw2ICs3NTUsNyBAQAogTUlPX1NJTVBMRV9ERVYobWlvYTcwMV9zb3VuZCwJICAibWlvYTcwMS13bTk3MTMiLCBOVUxMKQogTUlPX1NJTVBMRV9ERVYobWlvYTcwMV9ib2FyZCwJICAibWlvYTcwMS1ib2FyZCIsICBOVUxMKQogTUlPX1NJTVBMRV9ERVYoZ3Bpb192YnVzLAkgICJncGlvLXZidXMiLCAgICAgICZncGlvX3ZidXNfZGF0YSk7CitNSU9fU0lNUExFX0RFVihtaW9hNzAxX2NhbWVyYSwJICAic29jLWNhbWVyYS1wZHJ2IiwmaWNsaW5rKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtaW9hNzAxX2dwaW9fa2V5cywKQEAgLTgyMSw2ICs3NjYsNyBAQAogCSZwb3dlcl9kZXYsCiAJJnN0cmF0YWZsYXNoLAogCSZncGlvX3ZidXMsCisJJm1pb2E3MDFfY2FtZXJhLAogCSZtaW9hNzAxX2JvYXJkLAogfTsKIApAQCAtODQxLDcgKzc4Nyw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fcmVzcyBnbG9iYWxfZ3Bpb3NbXSA9IHsKIAlNSU9fR1BJT19PVVQoR1BJTzlfQ0hBUkdFX0VOLCAxLCAiQ2hhcmdlciBlbmFibGUiKSwKIAlNSU9fR1BJT19PVVQoR1BJTzE4X1BPV0VST0ZGLCAwLCAiUG93ZXIgT2ZmIiksCi0JTUlPX0dQSU9fT1VUKEdQSU84N19MQ0RfUE9XRVIsIDAsICJMQ0QgUG93ZXIiKQorCU1JT19HUElPX09VVChHUElPODdfTENEX1BPV0VSLCAwLCAiTENEIFBvd2VyIiksCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWlvYTcwMV9tYWNoaW5lX2luaXQodm9pZCkKQEAgLTg1NSw2ICs4MDEsNyBAQAogCW1pb19ncGlvX3JlcXVlc3QoQVJSQVlfQU5EX1NJWkUoZ2xvYmFsX2dwaW9zKSk7CiAJYm9vdHN0cmFwX2luaXQoKTsKIAlzZXRfcHhhX2ZiX2luZm8oJm1pb2E3MDFfcHhhZmJfaW5mbyk7CisJbWlvYTcwMV9tY2lfaW5mby5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmbWlvYTcwMV9tY2lfaW5mbyk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmbWlvYTcwMV9rZXlwYWRfaW5mbyk7CiAJd205N3h4X2JhdF9zZXRfcGRhdGEoJm1pb2E3MDFfYmF0dGVyeV9kYXRhKTsKQEAgLTg2OSw3ICs4MTYsNiBAQAogCXB4YV9zZXRfaTJjX2luZm8oJmkyY19wZGF0YSk7CiAJcHhhMjd4X3NldF9pMmNfcG93ZXJfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZtaW9hNzAxX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2kyY19kZXZpY2VzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCmluZGV4IDE2OWZjYzEuLjFhZDAyOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCkBAIC0yNSw2ICsyNSw5IEBACiAjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xNDEsODUgKzE0NCw1MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG1sZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmxhc2giLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG1sZF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwJCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KKwkJLnBhcnRzCQk9IHBhbG1sZF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG1sZF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbWxkX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfNE0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSAmcGFsbWxkX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2IAkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gcGFsbWxkX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG1sZF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbWxkX2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG1sZF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbWxkX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbWxkX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG1sZF9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtbGRfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbWxkX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG1sZF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzYsMzUgKzMwNCw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtbGRfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbWxkX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbWxkX2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU2MCw2ICs1MDIsNyBAQAogCSZwb3dlcl9zdXBwbHksCiAJJnBhbG1sZF9hc29jLAogCSZwYWxtbGRfaGRkLAorCSZwYWxtbGRfZmxhc2gsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG1sZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKaW5kZXggMzNmNzI2Zi4uMmRkN2NlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKQEAgLTEyNCw4MyArMTI0LDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdDVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG10NV9kZXRlY3RfaW50LAotCQkJCXZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdDVfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoSVJRX0dQSU9fUEFMTVQ1X1NEX0RFVEVDVF9OLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10NV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10NV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdDVfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXQ1X21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10NV9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdDVfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzE0LDM1ICsyNDMsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXQ1X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10NV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10NV9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTIyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCisgKgorICogU3VwcG9ydCBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW58QworICoKKyAqIEF1dGhvcjoJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB3b3JrIG9mOgorICoJCVBldHIgQmxhaGEgPHAzdDNAY2VudHJ1bS5jej4KKyAqCQlDaGV0YW4gUy4gS3VtYXIgPHNoaXZha3VtYXIuY2hldGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10Yy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGluIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWxtdGNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzZfTU1DX0NMSywKKwlHUElPOF9NTUNfQ1MwLAorCUdQSU8xMl9HUElPLAkvKiBkZXRlY3QgKi8KKwlHUElPMzJfR1BJTywJLyogcG93ZXIgKi8KKwlHUElPNTRfR1BJTywJLyogci9vIHN3aXRjaCAqLworCisJLyogUENNQ0lBICovCisJR1BJTzUyX25QQ0VfMSwKKwlHUElPNTNfblBDRV8yLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzQ5X25QV0UsCisJR1BJTzQ4X25QT0UsCisJR1BJTzUyX25QQ0VfMSwKKwlHUElPNTNfblBDRV8yLAorCUdQSU81N19uSU9JUzE2LAorCUdQSU81Nl9uUFdBSVQsCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzQ1X0dQSU8sCS8qIGlyIGRpc2FibGUgKi8KKwlHUElPNDZfRklDUF9SWEQsCisJR1BJTzQ3X0ZJQ1BfVFhELAorCisJLyogUFdNICovCisJR1BJTzE3X1BXTTFfT1VULAorCisJLyogVVNCICovCisJR1BJTzRfR1BJTywJLyogZGV0ZWN0ICovCisJR1BJTzM2X0dQSU8sCS8qIHB1bGx1cCAqLworCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBNQVRSSVggS0VZUEFEICovCisJR1BJTzBfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGluIDAgKi8KKwlHUElPOV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMSAqLworCUdQSU8xMF9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMiAqLworCUdQSU8xMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMyAqLworCUdQSU8xOF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAwICovCisJR1BJTzE5X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDEgKi8KKwlHUElPMjBfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMiAqLworCUdQSU8yMV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAzICovCisJR1BJTzIyX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDQgKi8KKwlHUElPMjNfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNSAqLworCUdQSU8yNF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA2ICovCisJR1BJTzI1X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDcgKi8KKwlHUElPMjZfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgOCAqLworCUdQSU8yN19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA5ICovCisJR1BJTzc5X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDEwICovCisJR1BJTzgwX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDExICovCisKKwkvKiBQWEEgR1BJTyBLRVlTICovCisJR1BJTzdfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGhvdHN5bmMgYnV0dG9uIG9uIGNyYWRsZSAqLworCisJLyogTUlTQyAqLworCUdQSU8xX1JTVCwJLyogcmVzZXQgKi8KKwlHUElPMl9HUElPLAkvKiBlYXJwaG9uZSBkZXRlY3QgKi8KKwlHUElPMTZfR1BJTywJLyogYmFja2xpZ2h0IHN3aXRjaCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXRjX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UQ19TRF9QT1dFUiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRDX1NEX1JFQURPTkxZLAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04sCisJLmRldGVjdF9kZWxheQkJPSAyMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBwYWxtdGNfcHhhX2J1dHRvbnNbXSA9IHsKKwl7S0VZX0Y4LCBHUElPX05SX1BBTE1UQ19IT1RTWU5DX0JVVFRPTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiwgRVZfS0VZLCAxfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcGFsbXRjX3B4YV9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBwYWxtdGNfcHhhX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShwYWxtdGNfcHhhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX3B4YV9rZXlzID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbXRjX3B4YV9rZXlzX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJhY2tsaWdodAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXRjX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldHVybiAwOworCitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtdGNfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3sKKwkvKiBiYWNrbGlnaHQgaXMgb24gd2hlbiBHUElPMTYgQUYwIGlzIGhpZ2ggKi8KKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CisJcmV0dXJuIGJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbXRjX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMSwKKwkubWF4X2JyaWdodG5lc3MJPSBQQUxNVENfTUFYX0lOVEVOU0lUWSwKKwkuZGZ0X2JyaWdodG5lc3MJPSBQQUxNVENfTUFYX0lOVEVOU0lUWSwKKwkucHdtX3BlcmlvZF9ucwk9IFBBTE1UQ19QRVJJT0RfTlMsCisJLmluaXQJCT0gcGFsbXRjX2JhY2tsaWdodF9pbml0LAorCS5ub3RpZnkJCT0gcGFsbXRjX2JhY2tsaWdodF9ub3RpZnksCisJLmV4aXQJCT0gcGFsbXRjX2JhY2tsaWdodF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2JhY2tsaWdodCA9IHsKKwkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CT0geworCQkucGFyZW50CQk9ICZweGEyNXhfZGV2aWNlX3B3bTEuZGV2LAorCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdGNfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElyREEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdGNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UQ19JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogS2V5Ym9hcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3QgdWludDMyX3QgcGFsbXRjX21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9GMSksCisJS0VZKDAsIDEsIEtFWV9YKSwKKwlLRVkoMCwgMiwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMywgS0VZX1RBQiksCisJS0VZKDAsIDQsIEtFWV9BKSwKKwlLRVkoMCwgNSwgS0VZX1EpLAorCUtFWSgwLCA2LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMCwgNywgS0VZX1opLAorCUtFWSgwLCA4LCBLRVlfUyksCisJS0VZKDAsIDksIEtFWV9XKSwKKwlLRVkoMCwgMTAsIEtFWV9FKSwKKwlLRVkoMCwgMTEsIEtFWV9VUCksCisKKwlLRVkoMSwgMCwgS0VZX0YyKSwKKwlLRVkoMSwgMSwgS0VZX0RPV04pLAorCUtFWSgxLCAzLCBLRVlfRCksCisJS0VZKDEsIDQsIEtFWV9DKSwKKwlLRVkoMSwgNSwgS0VZX0YpLAorCUtFWSgxLCA2LCBLRVlfUiksCisJS0VZKDEsIDcsIEtFWV9TUEFDRSksCisJS0VZKDEsIDgsIEtFWV9WKSwKKwlLRVkoMSwgOSwgS0VZX0cpLAorCUtFWSgxLCAxMCwgS0VZX1QpLAorCUtFWSgxLCAxMSwgS0VZX0xFRlQpLAorCisJS0VZKDIsIDAsIEtFWV9GMyksCisJS0VZKDIsIDEsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDIsIDMsIEtFWV9IKSwKKwlLRVkoMiwgNCwgS0VZX1kpLAorCUtFWSgyLCA1LCBLRVlfTiksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX1UpLAorCUtFWSgyLCA4LCBLRVlfTSksCisJS0VZKDIsIDksIEtFWV9LKSwKKwlLRVkoMiwgMTAsIEtFWV9JKSwKKwlLRVkoMiwgMTEsIEtFWV9SSUdIVCksCisKKwlLRVkoMywgMCwgS0VZX0Y0KSwKKwlLRVkoMywgMSwgS0VZX0VOVEVSKSwKKwlLRVkoMywgMywgS0VZX0RPVCksCisJS0VZKDMsIDQsIEtFWV9MKSwKKwlLRVkoMywgNSwgS0VZX08pLAorCUtFWSgzLCA2LCBLRVlfTEVGVEFMVCksCisJS0VZKDMsIDcsIEtFWV9FTlRFUiksCisJS0VZKDMsIDgsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgzLCA5LCBLRVlfUCksCisJS0VZKDMsIDEwLCBLRVlfQiksCisJS0VZKDMsIDExLCBLRVlfRk4pLAorfTsKKworY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBwYWxtdGNfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gcGFsbXRjX21hdHJpeF9rZXlzLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKHBhbG10Y19tYXRyaXhfa2V5cyksCit9OworCitjb25zdCBzdGF0aWMgdW5zaWduZWQgaW50IHBhbG10Y19rZXlwYWRfcm93X2dwaW9zW10gPSB7CisJMCwgOSwgMTAsIDExCit9OworCitjb25zdCBzdGF0aWMgdW5zaWduZWQgaW50IHBhbG10Y19rZXlwYWRfY29sX2dwaW9zW10gPSB7CisJMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDc5LCA4MAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgcGFsbXRjX2tleXBhZF9wbGF0Zm9ybV9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZwYWxtdGNfa2V5bWFwX2RhdGEsCisJLnJvd19ncGlvcwk9IHBhbG10Y19rZXlwYWRfcm93X2dwaW9zLAorCS5udW1fcm93X2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcyksCisJLmNvbF9ncGlvcwk9IHBhbG10Y19rZXlwYWRfY29sX2dwaW9zLAorCS5udW1fY29sX2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcyksCisJLmFjdGl2ZV9sb3cJPSAxLAorCisJLmRlYm91bmNlX21zCQk9IDIwLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfa2V5Ym9hcmQgPSB7CisJLm5hbWUJPSAibWF0cml4LWtleXBhZCIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbXRjX2tleXBhZF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHBhbG10Y191ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS5ncGlvX3ZidXMJCT0gR1BJT19OUl9QQUxNVENfVVNCX0RFVEVDVF9OLAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAorCS5ncGlvX3B1bGx1cAkJPSBHUElPX05SX1BBTE1UQ19VU0JfUE9XRVIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUb3VjaHNjcmVlbiAvIEJhdHRlcnkgLyBHUElPLWV4dGVuZGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX3VjYjE0MDBfY29yZSA9IHsKKwkubmFtZQk9ICJ1Y2IxNDAwX2NvcmUiLAorCS5pZAk9IC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtdGNfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8xNk0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10Y19mbGFzaF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJPSAiVS1Cb290IEJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0CT0gMHgwLAorCQkuc2l6ZQk9IDB4NDAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIkxpbnV4IEtlcm5lbCIsCisJCS5vZmZzZXQJPSAweDQwMDAwLAorCQkuc2l6ZQk9IDB4MmMwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJGaWxlc3lzdGVtIiwKKwkJLm9mZnNldAk9IDB4MzAwMDAwLAorCQkuc2l6ZQk9IDB4Y2MwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJVLUJvb3QgRW52aXJvbm1lbnQiLAorCQkub2Zmc2V0CT0gMHhmYzAwMDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbXRjX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IHBhbG10Y19mbGFzaF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG10Y19mbGFzaF9wYXJ0cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSAmcGFsbXRjX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdGNfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtdGNfbGNkX21vZGVzW10gPSB7Cit7CisJLnBpeGNsb2NrCT0gMTE1Mzg0LAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSAzMjAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDI3LAorCS5yaWdodF9tYXJnaW4JPSA3LAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSA4LAorCisJLmhzeW5jX2xlbgk9IDYsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbXRjX2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQkJPSBwYWxtdGNfbGNkX21vZGVzLAorCS5udW1fbW9kZXMJCT0gQVJSQVlfU0laRShwYWxtdGNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcGFsbXRjX2JhY2tsaWdodCwKKwkmcGFsbXRjX3VjYjE0MDBfY29yZSwKKwkmcGFsbXRjX2tleWJvYXJkLAorCSZwYWxtdGNfcHhhX2tleXMsCisJJnBhbG10Y19mbGFzaCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG10Y19waW5fY29uZmlnKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG10Y19sY2Rfc2NyZWVuKTsKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtdGNfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfdWRjX2luZm8oJnBhbG10Y191ZGNfaW5mbyk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9maWNwX2luZm8oJnBhbG10Y19maWNwX3BsYXRmb3JtX2RhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9OworCitNQUNISU5FX1NUQVJUKFBBTE1UQywgIlBhbG0gVHVuZ3N0ZW58QyIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcyAJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHBhbG10Y19pbml0CitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCmluZGV4IGQ4MjNiMDkuLjI3N2M0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKQEAgLTExNyw4MyArMTE3LDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdGUyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlpcnFfaGFuZGxlcl90IHBhbG10ZTJfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10ZTJfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10ZTJfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXRlMl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdGUyX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG10ZTJfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXRlMl9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdGUyX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODcsMzUgKzIxNSw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdGUyX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXRlMl9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXRlMl9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10ZTJfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtdGUyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCmluZGV4IDgzZDAyMDguLjc2YTJiMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCkBAIC0yOCw2ICsyOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMTMxLDYgKzEzNSwxMCBAQAogCUdQSU8zNF9GRlVBUlRfUlhELAogCUdQSU8zOV9GRlVBUlRfVFhELAogCisJLyogTkFORCAqLworCUdQSU8xNV9uQ1NfMSwKKwlHUElPMThfUkRZLAorCiAJLyogTUlTQy4gKi8KIAlHUElPMTBfR1BJTywJLyogaG90c3luYyBidXR0b24gKi8KIAlHUElPMTJfR1BJTywJLyogcG93ZXIgZGV0ZWN0ICovCkBAIC0xMzgsODUgKzE0Niw1MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10eF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmxhc2giLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG10eF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwJCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KKwkJLnBhcnRzCQk9IHBhbG10eF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG10eF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXR4X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfOE0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR4X2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSAmcGFsbXR4X2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2IAkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gcGFsbXR4X2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10eF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbXR4X2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10eF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXR4X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXR4X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG10eF9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdHhfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXR4X21jaV9pbml0LAotCS5leGl0CQk9IHBhbG10eF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzAsMzUgKzMwMyw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdHhfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10eF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXR4X2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXR4X2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5Myw2ICs0NDAsNjggQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5BTkQgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBwYWxtdHhfbmFuZF9jbWRfY3RsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgbmFuZGFkZHIgPSAodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1c7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIFBBTE1UWF9OQU5EX0NMRV9WSVJUKTsKKwllbHNlIGlmIChjdHJsICYgTkFORF9BTEUpCisJCXdyaXRlYihjbWQsIFBBTE1UWF9OQU5EX0FMRV9WSVJUKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIG5hbmRhZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10eF9wYXJ0aXRpb25faW5mb1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAicGFsbXR4LTAiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWxtdHhfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHBhbG10eF9uYW5kX3BsYXRkYXRhID0geworCS5jaGlwCT0geworCQkubnJfY2hpcHMJCT0gMSwKKwkJLmNoaXBfb2Zmc2V0CQk9IDAsCisJCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUocGFsbXR4X3BhcnRpdGlvbl9pbmZvKSwKKwkJLnBhcnRpdGlvbnMJCT0gcGFsbXR4X3BhcnRpdGlvbl9pbmZvLAorCQkuY2hpcF9kZWxheQkJPSAyMCwKKwkJLnBhcnRfcHJvYmVfdHlwZXMgCT0gcGFsbXR4X3BhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwJPSB7CisJCS5jbWRfY3RybAk9IHBhbG10eF9uYW5kX2NtZF9jdGwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXR4X25hbmRfcmVzb3VyY2VbXSA9IHsKKwlbMF0JPSB7CisJCS5zdGFydAk9IFBYQV9DUzFfUEhZUywKKwkJLmVuZAk9IFBYQV9DUzFfUEhZUyArIFNaXzFNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9uYW5kID0geworCS5uYW1lCQk9ICJnZW5fbmFuZCIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBhbG10eF9uYW5kX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBwYWxtdHhfbmFuZF9yZXNvdXJjZSwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10eF9uYW5kX3BsYXRkYXRhLAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBvd2VyIG1hbmFnZW1lbnQgLSBzdGFuZGJ5CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF9wbV9pbml0KHZvaWQpCkBAIC01MTgsNiArNTI3LDggQEAKIAkmcG93ZXJfc3VwcGx5LAogCSZwYWxtdHhfYXNvYywKIAkmcGFsbXR4X2dwaW9fdmJ1cywKKwkmcGFsbXR4X2ZsYXNoLAorCSZwYWxtdHhfbmFuZCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGFsbXR4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtNTI1LDggKzUzNiwxOCBAQAogCS52aXJ0dWFsCT0gUEFMTVRYX1BDTUNJQV9WSVJULAogCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNVFhfUENNQ0lBX1BIWVMpLAogCS5sZW5ndGgJCT0gUEFMTVRYX1BDTUNJQV9TSVpFLAotCS50eXBlCQk9IE1UX0RFVklDRQotfSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCit9LCB7CisJLnZpcnR1YWwJPSBQQUxNVFhfTkFORF9BTEVfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX05BTkRfQUxFX1BIWVMpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFLAorfSwgeworCS52aXJ0dWFsCT0gUEFMTVRYX05BTkRfQ0xFX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1UWF9OQU5EX0NMRV9QSFlTKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRSwKK30KIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggYzM2NDVhYS4uYzJiZjQ5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTEyOSw4OCArMTI5LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlpcnFfaGFuZGxlcl90IHBhbG16NzJfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG16NzJfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCS8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCi0JICogc2VsZWN0LCBpLmUuIGl0IGlzIGludmVydGVkICovCi0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1JPLCAiU0RfUk8iKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpZiAocF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAwKTsKLQllbHNlCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAxKTsKLX0KLQotc3RhdGljIGludCBwYWxtejcyX21jaV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KKy8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCisgKiBzZWxlY3QsIGkuZS4gaXQgaXMgaW52ZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtejcyX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG16NzJfbWNpX3JvLAotCS5pbml0IAkJPSBwYWxtejcyX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG16NzJfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNWjcyX1NEX1JPLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDQsMzUgKzIzMCw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXo3Ml9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG16NzJfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtejcyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwppbmRleCAwMTc5MWQ3Li5iYmRhNTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCkBAIC0zMjEsMTEgKzMyMSwxNCBAQAogI2RlZmluZSBNU0VDU19QRVJfSklGRlkgKDEwMDAvSFopCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGNtOTkwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHBjbTk5MF9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBwY205OTBfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gcGNtOTkwX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gcGNtOTkwX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHBjbTk5MF9vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC00MjcsMjUgKzQzMCw1NiBAQAogCWdwaW9fYnVzX3N3aXRjaCA9IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkucXVlcnlfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCi0JLnNldF9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCi0JLmZyZWVfYnVzID0gcGNtOTkwX2NhbWVyYV9mcmVlX2J1cywKLX07Ci0KIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjbTk5MF9pMmNfZGV2aWNlc1tdID0gewogCXsKIAkJLyogTXVzdCBpbml0aWFsaXplIGJlZm9yZSB0aGUgY2FtZXJhKHMpICovCiAJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTM2IiwgMHg0MSksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBjYTk1MzZfZGF0YSwKLQl9LCB7CisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtOTkwX2NhbWVyYV9pMmNbXSA9IHsKKwl7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0wMDEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua1tdID0geworCXsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzBdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OXYwMjIiLAorCX0sIHsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzFdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OW0wMDEiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY205OTBfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLAorCQl9LAorCX0sIHsKKwkJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkJLmlkCT0gMSwKKwkJLmRldgk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1sxXSwKKwkJfSwKIAl9LAogfTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fUFhBMjd4IHx8Q09ORklHX1ZJREVPX1BYQTI3eF9NT0RVTEUgKi8KQEAgLTUwMSw2ICs1MzUsOSBAQAogCXB4YV9zZXRfY2FtZXJhX2luZm8oJnBjbTk5MF9weGFjYW1lcmFfcGxhdGZvcm1fZGF0YSk7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShwY205OTBfaTJjX2RldmljZXMpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTkwX2NhbWVyYVswXSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205OTBfY2FtZXJhWzFdKTsKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNLTk5MCBFdmFsdWF0aW9uIGJhc2Vib2FyZCBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDkzNTJkNGEuLmExODY5OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0yNDUsMjAgKzI0NSwxMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCBwb29kbGVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBvb2RsZV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQogewogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX0RFVEVDVCwgIm5TRF9ERVRFQ1QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfMjsKQEAgLTI2NywzNCArMjU3LDE0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV8zOwogCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX1dQKTsKLQogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IxLCAwKTsKIAotCXBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwgcG9vZGxlX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnJfZnJlZV80OwotCX0KLQogCXJldHVybiAwOwogCi1lcnJfZnJlZV80OgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIGVycl9mcmVlXzM6CiAJZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUik7CiBlcnJfZnJlZV8yOgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfV1ApOwotZXJyX2ZyZWVfMToKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxMiw2MiArMjgyLDI5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHBvb2RsZV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gISFncGlvX2dldF92YWx1ZShQT09ETEVfR1BJT19uU0RfV1ApOwotCXJldHVybiBHUExSKFBPT0RMRV9HUElPX25TRF9XUCkgJiBHUElPX2JpdChQT09ETEVfR1BJT19uU0RfV1ApOwotfQotCi0KIHN0YXRpYyB2b2lkIHBvb2RsZV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwogCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIAlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gcG9vZGxlX21jaV9pbml0LAotCS5nZXRfcm8JCT0gcG9vZGxlX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyIAk9IHBvb2RsZV9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gcG9vZGxlX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBwb29kbGVfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBwb29kbGVfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBwb29kbGVfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IFBPT0RMRV9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIAogLyoKICAqIElyZGEKICAqLwotc3RhdGljIHZvaWQgcG9vZGxlX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKFBPT0RMRV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IHBvb2RsZV9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fSVJfT04sICJJUl9PTiIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUE9PRExFX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwb29kbGVfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX0lSX09OKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcG9vZGxlX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gUE9PRExFX0dQSU9fSVJfT04sCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwb29kbGVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zdGFydHVwCQk9IHBvb2RsZV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBvb2RsZV9pcmRhX3NodXRkb3duLAogfTsKIAogCkBAIC01MjEsNiArNDU4LDcgQEAKIAlzZXRfcHhhX2ZiX3BhcmVudCgmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2KTsKIAlzZXRfcHhhX2ZiX2luZm8oJnBvb2RsZV9mYl9pbmZvKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CisJcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZwb29kbGVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwppbmRleCAyZjMzOTRmLi44NjgyNzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwpAQCAtNTIsMyArNTIsNCBAQAogCX0gZWxzZQogCQlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggNGJhNmQyMS4uZjRhZjZlMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCkBAIC04NCw5ICs4NCwxMSBAQAogfTsKIAogc3RhdGljIERFRklORV9QWEEzX0NLRU4oY29tbW9uX25hbmQsIE5BTkQsIDE1NjAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihnY3UsIFBYQTMwMF9HQ1UsIDAsIDApOwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgY29tbW9uX2Nsa3JlZ3NbXSA9IHsKIAlJTklUX0NMS1JFRygmY2xrX2NvbW1vbl9uYW5kLCAicHhhM3h4LW5hbmQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX2djdSwgInB4YTN4eC1nY3UiLCBOVUxMKSwKIH07CiAKIHN0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTMxMF9tbWMzLCBNTUMzLCAxOTUwMDAwMCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCmluZGV4IDhiM2Q5N2UuLmM3MzczZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCkBAIC03OCw5ICs3OCwxMSBAQAogfTsKIAogc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhMzIwX25hbmQsIE5BTkQsIDEwNDAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihnY3UsIFBYQTMyMF9HQ1UsIDAsIDApOwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhMzIwX2Nsa3JlZ3NbXSA9IHsKIAlJTklUX0NMS1JFRygmY2xrX3B4YTMyMF9uYW5kLCAicHhhM3h4LW5hbmQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX2djdSwgInB4YTN4eC1nY3UiLCBOVUxMKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTMyMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCmluZGV4IDcxMTMxNzQuLjA2NDI5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCkBAIC0xNzYsMTMgKzE3NiwzMCBAQAogCU1GUF9BRERSX0VORCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTkzNV9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworCU1GUF9BRERSKEdQSU8xNTksIDB4MDUyNCksCisJTUZQX0FERFIoR1BJTzE2MywgMHgwNTM0KSwKKwlNRlBfQUREUihHUElPMTY3LCAweDA1NDQpLAorCU1GUF9BRERSKEdQSU8xNjgsIDB4MDU0OCksCisJTUZQX0FERFIoR1BJTzE2OSwgMHgwNTRjKSwKKwlNRlBfQUREUihHUElPMTcwLCAweDA1NTApLAorCU1GUF9BRERSKEdQSU8xNzEsIDB4MDU1NCksCisJTUZQX0FERFIoR1BJTzE3MiwgMHgwNTU4KSwKKwlNRlBfQUREUihHUElPMTczLCAweDA1NWMpLAorCisJTUZQX0FERFJfRU5ELAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcHhhOTMwX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTkzMCgpKSB7CisJaWYgKGNwdV9pc19weGE5MzAoKSB8fCBjcHVfaXNfcHhhOTM1KCkpIHsKIAkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CiAJCW1mcF9pbml0X2FkZHIocHhhOTMwX21mcF9hZGRyX21hcCk7CiAJfQogCisJaWYgKGNwdV9pc19weGE5MzUoKSkKKwkJbWZwX2luaXRfYWRkcihweGE5MzVfbWZwX2FkZHJfbWFwKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCBkZGEzMTBmLi4zZGE0NWQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KQEAgLTI0LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9jb3JnaV9sY2QuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvc2hhcnBzbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xMTEsNiArMTEzLDI2IEBACiAJR1BJTzEwNV9HUElPLAkvKiBTUElUWl9HUElPX0NGX0lSUSAqLwogCUdQSU8xMDZfR1BJTywJLyogU1BJVFpfR1BJT19DRjJfSVJRICovCiAKKwkvKiBHUElPIG1hdHJpeCBrZXlwYWQgKi8KKwlHUElPODhfR1BJTywJLyogY29sdW1uIDAgKi8KKwlHUElPMjNfR1BJTywJLyogY29sdW1uIDEgKi8KKwlHUElPMjRfR1BJTywJLyogY29sdW1uIDIgKi8KKwlHUElPMjVfR1BJTywJLyogY29sdW1uIDMgKi8KKwlHUElPMjZfR1BJTywJLyogY29sdW1uIDQgKi8KKwlHUElPMjdfR1BJTywJLyogY29sdW1uIDUgKi8KKwlHUElPNTJfR1BJTywJLyogY29sdW1uIDYgKi8KKwlHUElPMTAzX0dQSU8sCS8qIGNvbHVtbiA3ICovCisJR1BJTzEwN19HUElPLAkvKiBjb2x1bW4gOCAqLworCUdQSU8xMDhfR1BJTywJLyogY29sdW1uIDkgKi8KKwlHUElPMTE0X0dQSU8sCS8qIGNvbHVtbiAxMCAqLworCUdQSU8xMl9HUElPLAkvKiByb3cgMCAqLworCUdQSU8xN19HUElPLAkvKiByb3cgMSAqLworCUdQSU85MV9HUElPLAkvKiByb3cgMiAqLworCUdQSU8zNF9HUElPLAkvKiByb3cgMyAqLworCUdQSU8zNl9HUElPLAkvKiByb3cgNCAqLworCUdQSU8zOF9HUElPLAkvKiByb3cgNSAqLworCUdQSU8zOV9HUElPLAkvKiByb3cgNiAqLworCiAJLyogSTJDICovCiAJR1BJTzExN19JMkNfU0NMLAogCUdQSU8xMThfSTJDX1NEQSwKQEAgLTI0Miw5ICsyNjQsMTUyIEBACiAvKgogICogU3BpdHogS2V5Ym9hcmQgRGV2aWNlCiAgKi8KKyNkZWZpbmUgU1BJVFpfS0VZX0NBTEVOREFSCUtFWV9GMQorI2RlZmluZSBTUElUWl9LRVlfQUREUkVTUwlLRVlfRjIKKyNkZWZpbmUgU1BJVFpfS0VZX0ZOCQlLRVlfRjMKKyNkZWZpbmUgU1BJVFpfS0VZX0NBTkNFTAlLRVlfRjQKKyNkZWZpbmUgU1BJVFpfS0VZX0VYT0sJCUtFWV9GNQorI2RlZmluZSBTUElUWl9LRVlfRVhDQU5DRUwJS0VZX0Y2CisjZGVmaW5lIFNQSVRaX0tFWV9FWEpPR0RPV04JS0VZX0Y3CisjZGVmaW5lIFNQSVRaX0tFWV9FWEpPR1VQCUtFWV9GOAorI2RlZmluZSBTUElUWl9LRVlfSkFQMQkJS0VZX0xFRlRBTFQKKyNkZWZpbmUgU1BJVFpfS0VZX0pBUDIJCUtFWV9SSUdIVENUUkwKKyNkZWZpbmUgU1BJVFpfS0VZX1NZTkMJCUtFWV9GOQorI2RlZmluZSBTUElUWl9LRVlfTUFJTAkJS0VZX0YxMAorI2RlZmluZSBTUElUWl9LRVlfT0sJCUtFWV9GMTEKKyNkZWZpbmUgU1BJVFpfS0VZX01FTlUJCUtFWV9GMTIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNwaXR6a2JkX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfTEVGVENUUkwpLAorCUtFWSgwLCAxLCBLRVlfMSksCisJS0VZKDAsIDIsIEtFWV8zKSwKKwlLRVkoMCwgMywgS0VZXzUpLAorCUtFWSgwLCA0LCBLRVlfNiksCisJS0VZKDAsIDUsIEtFWV83KSwKKwlLRVkoMCwgNiwgS0VZXzkpLAorCUtFWSgwLCA3LCBLRVlfMCksCisJS0VZKDAsIDgsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgwLCA5LCBTUElUWl9LRVlfRVhPSyksCS8qIEVYT0sgKi8KKwlLRVkoMCwgMTAsIFNQSVRaX0tFWV9FWENBTkNFTCksCS8qIEVYQ0FOQ0VMICovCisJS0VZKDEsIDEsIEtFWV8yKSwKKwlLRVkoMSwgMiwgS0VZXzQpLAorCUtFWSgxLCAzLCBLRVlfUiksCisJS0VZKDEsIDQsIEtFWV9ZKSwKKwlLRVkoMSwgNSwgS0VZXzgpLAorCUtFWSgxLCA2LCBLRVlfSSksCisJS0VZKDEsIDcsIEtFWV9PKSwKKwlLRVkoMSwgOCwgS0VZX1ApLAorCUtFWSgxLCA5LCBTUElUWl9LRVlfRVhKT0dET1dOKSwJLyogRVhKT0dET1dOICovCisJS0VZKDEsIDEwLCBTUElUWl9LRVlfRVhKT0dVUCksCS8qIEVYSk9HVVAgKi8KKwlLRVkoMiwgMCwgS0VZX1RBQiksCisJS0VZKDIsIDEsIEtFWV9RKSwKKwlLRVkoMiwgMiwgS0VZX0UpLAorCUtFWSgyLCAzLCBLRVlfVCksCisJS0VZKDIsIDQsIEtFWV9HKSwKKwlLRVkoMiwgNSwgS0VZX1UpLAorCUtFWSgyLCA2LCBLRVlfSiksCisJS0VZKDIsIDcsIEtFWV9LKSwKKwlLRVkoMywgMCwgU1BJVFpfS0VZX0FERFJFU1MpLAkvKiBBRERSRVNTICovCisJS0VZKDMsIDEsIEtFWV9XKSwKKwlLRVkoMywgMiwgS0VZX1MpLAorCUtFWSgzLCAzLCBLRVlfRiksCisJS0VZKDMsIDQsIEtFWV9WKSwKKwlLRVkoMywgNSwgS0VZX0gpLAorCUtFWSgzLCA2LCBLRVlfTSksCisJS0VZKDMsIDcsIEtFWV9MKSwKKwlLRVkoMywgOSwgS0VZX1JJR0hUU0hJRlQpLAorCUtFWSg0LCAwLCBTUElUWl9LRVlfQ0FMRU5EQVIpLAkvKiBDQUxFTkRBUiAqLworCUtFWSg0LCAxLCBLRVlfQSksCisJS0VZKDQsIDIsIEtFWV9EKSwKKwlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSg0LCA0LCBLRVlfQiksCisJS0VZKDQsIDUsIEtFWV9OKSwKKwlLRVkoNCwgNiwgS0VZX0RPVCksCisJS0VZKDQsIDgsIEtFWV9FTlRFUiksCisJS0VZKDQsIDksIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg1LCAwLCBTUElUWl9LRVlfTUFJTCksCS8qIE1BSUwgKi8KKwlLRVkoNSwgMSwgS0VZX1opLAorCUtFWSg1LCAyLCBLRVlfWCksCisJS0VZKDUsIDMsIEtFWV9NSU5VUyksCisJS0VZKDUsIDQsIEtFWV9TUEFDRSksCisJS0VZKDUsIDUsIEtFWV9DT01NQSksCisJS0VZKDUsIDcsIEtFWV9VUCksCisJS0VZKDUsIDEwLCBTUElUWl9LRVlfRk4pLAkvKiBGTiAqLworCUtFWSg2LCAwLCBLRVlfU1lTUlEpLAorCUtFWSg2LCAxLCBTUElUWl9LRVlfSkFQMSksCS8qIEpBUDEgKi8KKwlLRVkoNiwgMiwgU1BJVFpfS0VZX0pBUDIpLAkvKiBKQVAyICovCisJS0VZKDYsIDMsIFNQSVRaX0tFWV9DQU5DRUwpLAkvKiBDQU5DRUwgKi8KKwlLRVkoNiwgNCwgU1BJVFpfS0VZX09LKSwJLyogT0sgKi8KKwlLRVkoNiwgNSwgU1BJVFpfS0VZX01FTlUpLAkvKiBNRU5VICovCisJS0VZKDYsIDYsIEtFWV9MRUZUKSwKKwlLRVkoNiwgNywgS0VZX0RPV04pLAorCUtFWSg2LCA4LCBLRVlfUklHSFQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgc3BpdHprYmRfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBzcGl0emtiZF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShzcGl0emtiZF9rZXltYXApLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNwaXR6a2JkX3Jvd19ncGlvc1tdID0KKwkJeyAxMiwgMTcsIDkxLCAzNCwgMzYsIDM4LCAzOSB9Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNwaXR6a2JkX2NvbF9ncGlvc1tdID0KKwkJeyA4OCwgMjMsIDI0LCAyNSwgMjYsIDI3LCA1MiwgMTAzLCAxMDcsIDEwOCwgMTE0IH07CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHNwaXR6a2JkX3BkYXRhID0geworCS5rZXltYXBfZGF0YQkJPSAmc3BpdHprYmRfa2V5bWFwX2RhdGEsCisJLnJvd19ncGlvcwkJPSBzcGl0emtiZF9yb3dfZ3Bpb3MsCisJLmNvbF9ncGlvcwkJPSBzcGl0emtiZF9jb2xfZ3Bpb3MsCisJLm51bV9yb3dfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0emtiZF9yb3dfZ3Bpb3MpLAorCS5udW1fY29sX2dwaW9zCQk9IEFSUkFZX1NJWkUoc3BpdHprYmRfY29sX2dwaW9zKSwKKwkuY29sX3NjYW5fZGVsYXlfdXMJPSAxMCwKKwkuZGVib3VuY2VfbXMJCT0gMTAsCisJLndha2V1cAkJCT0gMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6a2JkX2RldmljZSA9IHsKLQkubmFtZQkJPSAic3BpdHota2V5Ym9hcmQiLAorCS5uYW1lCQk9ICJtYXRyaXgta2V5cGFkIiwKIAkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNwaXR6a2JkX3BkYXRhLAorCX0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBzcGl0el9ncGlvX2tleXNbXSA9IHsKKwl7CisJCS50eXBlCT0gRVZfUFdSLAorCQkuY29kZQk9IEtFWV9TVVNQRU5ELAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fT05fS0VZLAorCQkuZGVzYwk9ICJPbi9PZmYiLAorCQkud2FrZXVwCT0gMSwKKwl9LAorCS8qIFR3byBidXR0b25zIGRldGVjdGluZyB0aGUgbGlkIHN0YXRlICovCisJeworCQkudHlwZQk9IEVWX1NXLAorCQkuY29kZQk9IDAsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19TV0EsCisJCS5kZXNjCT0gIu+7v0Rpc3BsYXkgRG93biIsCisJfSwKKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMSwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQiwKKwkJLmRlc2MJPSAi77u/TGlkIENsb3NlZCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBzcGl0el9ncGlvX2tleXMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShzcGl0el9ncGlvX2tleXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpfZ3Bpb19rZXlzX2RldmljZSA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X2dwaW9fa2V5c19wbGF0Zm9ybV9kYXRhLAorCX0sCiB9OwogCiAKQEAgLTI5Niw2ICs0NjEsNyBAQAogCS52cmVmX2RlbGF5X3VzZWNzCT0gMTAwLAogCS54X3BsYXRlX29obXMJCT0gNDE5LAogCS55X3BsYXRlX29obXMJCT0gNDg2LAorCS5wcmVzc3VyZV9tYXgJCT0gMTAyNCwKIAkuZ3Bpb19wZW5kb3duCQk9IFNQSVRaX0dQSU9fVFBfSU5ULAogCS53YWl0X2Zvcl9zeW5jCQk9IHNwaXR6X3dhaXRfZm9yX2hzeW5jLAogfTsKQEAgLTM3OCw0NSArNTQ0LDYgQEAKICAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCiAgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwotCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IHNwaXR6X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBzcGl0el9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoU1BJVFpfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNQSVRaX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoU1BJVFpfR1BJT19uU0RfV1ApOwotCi0Jc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoU1BJVFpfSVJRX0dQSU9fblNEX0RFVEVDVCwgc3BpdHpfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfAotCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCIlczogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycl9mcmVlXzI7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfZnJlZV8yOgotCWdwaW9fZnJlZShTUElUWl9HUElPX25TRF9XUCk7Ci1lcnJfZnJlZV8xOgotCWdwaW9fZnJlZShTUElUWl9HUElPX25TRF9ERVRFQ1QpOwotZXJyX291dDoKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCBzcGl0el9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQogewogCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwpAQCAtNDI3LDI0ICs1NTQsMTIgQEAKIAkJc3BpdHpfY2FyZF9wd3JfY3RybChTUElUWl9QV1JfU0QsIDB4MDAwMCk7CiB9CiAKLXN0YXRpYyBpbnQgc3BpdHpfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLX0KLQotc3RhdGljIHZvaWQgc3BpdHpfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKFNQSVRaX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShTUElUWl9HUElPX25TRF9XUCk7Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX0RFVEVDVCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBzcGl0el9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IHNwaXR6X21jaV9nZXRfcm8sCi0JLnNldHBvd2VyIAk9IHNwaXR6X21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBzcGl0el9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5zZXRwb3dlciAJCT0gc3BpdHpfbWNpX3NldHBvd2VyLAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gU1BJVFpfR1BJT19uU0RfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gU1BJVFpfR1BJT19uU0RfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiAKQEAgLTQ4NCw1MCArNTk5LDEwIEBACiAvKgogICogSXJkYQogICovCi1zdGF0aWMgaW50IHNwaXR6X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBncGlvX3JlcXVlc3QoU1BJVFpfR1BJT19JUl9PTiwgIklyREEgb24iKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyOwotCi0JcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoU1BJVFpfR1BJT19JUl9PTiwgMSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9kaXI7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2RpcjoKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19JUl9PTik7Ci1lcnI6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBzcGl0el9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19JUl9PTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaXR6X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKFNQSVRaX0dQSU9fSVJfT04sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9BS0lUQQotc3RhdGljIHZvaWQgYWtpdGFfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoQUtJVEFfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisvKiAuZ3Bpb19wd2Rvd24gaXMgc2V0IGluIHNwaXR6X2luaXQoKSBhbmQgYWtpdGFfaW5pdCgpIGFjY29yZGluZ2x5ICovCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBzcGl0el9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAJCT0gc3BpdHpfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBzcGl0el9pcmRhX3NodXRkb3duLAogfTsKIAogCkBAIC02NTIsNiArNzI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc3BpdHpzY29vcF9kZXZpY2UsCiAJJnNwaXR6a2JkX2RldmljZSwKKwkmc3BpdHpfZ3Bpb19rZXlzX2RldmljZSwKIAkmc3BpdHpsZWRfZGV2aWNlLAogCSZzaGFycHNsX25hbmRfZGV2aWNlLAogCSZzaGFycHNsX3JvbV9kZXZpY2UsCkBAIC02OTUsNiArNzcxLDcgQEAKIAlzcGl0el9pbml0X3NwaSgpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJnNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X29oY2lfaW5mbygmc3BpdHpfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhKTsKQEAgLTcwMiw5ICs3NzksMzQgQEAKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9BS0lUQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9CT1JaT0kpCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNoYXJwc2xfYWtpdGFfYmJ0ID0geworCS5vcHRpb25zID0gMCwKKwkub2ZmcyA9IDQsCisJLmxlbiA9IDEsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgYWtpdGFfb29iaW5mbyA9IHsKKwkuZWNjYnl0ZXMgPSAyNCwKKwkuZWNjcG9zID0geworCQkgICAweDUsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LCAweDE1LCAweDExLAorCQkgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAorCQkgICAweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3fSwKKwkub29iZnJlZSA9IHt7MHgwOCwgMHgwOX19Cit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQSVRaKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0JPUlpPSSkKIHN0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9pbml0KHZvaWQpCiB7CisJc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhLmdwaW9fcHdkb3duID0gU1BJVFpfR1BJT19JUl9PTjsKKworCWlmIChtYWNoaW5lX2lzX2JvcnpvaSgpKSB7CisJCXNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhLmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9ha2l0YV9iYnQ7CisJCXNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhLmVjY19sYXlvdXQgPSAmYWtpdGFfb29iaW5mbzsKKwl9CisKIAlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmc3BpdHpfcGNtY2lhX2NvbmZpZzsKIAogCWNvbW1vbl9pbml0KCk7CkBAIC03MjksMjUgKzgzMSw5IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc2hhcnBzbF9ha2l0YV9iYnQgPSB7Ci0JLm9wdGlvbnMgPSAwLAotCS5vZmZzID0gNCwKLQkubGVuID0gMSwKLQkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgotfTsKLQotc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0gewotCS5lY2NieXRlcyA9IDI0LAotCS5lY2Nwb3MgPSB7Ci0JCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCi0JCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCi0JCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAotCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBha2l0YV9pbml0KHZvaWQpCiB7Ci0Jc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhLnRyYW5zY2VpdmVyX21vZGUgPSBha2l0YV9pcmRhX3RyYW5zY2VpdmVyX21vZGU7CisJc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhLmdwaW9fcHdkb3duID0gQUtJVEFfR1BJT19JUl9PTjsKIAogCXNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhLmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9ha2l0YV9iYnQ7CiAJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuZWNjX2xheW91dCA9ICZha2l0YV9vb2JpbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDExN2FkNTkuLmU4MWE1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTI0Nyw0OSArMjQ3LDEwIEBACiAvKgogICogTU1DL1NEIERldmljZQogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHRvc2FfbWNpX3BsYXRmb3JtX2RhdGE7Ci0KIHN0YXRpYyBpbnQgdG9zYV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgdG9zYV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQogewogCWludCBlcnI7CiAKLQl0b3NhX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fblNEX0RFVEVDVCwgIk1NQy9TRCBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IG5TRF9ERVRFQ1QgZ3Bpb1xuIik7Ci0JCWdvdG8gZXJyX2dwaW9fZGV0ZWN0OwotCX0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChUT1NBX0dQSU9fblNEX0RFVEVDVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZ3Bpb19kZXRlY3RfZGlyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCB0b3NhX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJIk1NQy9TRCBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JCWdvdG8gZXJyX2lycTsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1NEX1dQLCAiU0QgV3JpdGUgUHJvdGVjdCIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1dQIGdwaW9cbiIpOwotCQlnb3RvIGVycl9ncGlvX3dwOwotCX0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChUT1NBX0dQSU9fU0RfV1ApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fd3BfZGlyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19QV1JfT04sICJTRCBQb3dlciIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1BXUiBncGlvXG4iKTsKLQkJZ290byBlcnJfZ3Bpb19wd3I7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChUT1NBX0dQSU9fUFdSX09OLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9ncGlvX3B3cl9kaXI7Ci0KIAllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX25TRF9JTlQsICJTRCBJbnQiKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9QV1IgZ3Bpb1xuIik7CkBAIC0zMDQsNTEgKzI2NSwyMSBAQAogZXJyX2dwaW9faW50X2RpcjoKIAlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9JTlQpOwogZXJyX2dwaW9faW50OgotZXJyX2dwaW9fcHdyX2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1BXUl9PTik7Ci1lcnJfZ3Bpb19wd3I6Ci1lcnJfZ3Bpb193cF9kaXI6Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19TRF9XUCk7Ci1lcnJfZ3Bpb193cDoKLQlmcmVlX2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotZXJyX2lycToKLWVycl9ncGlvX2RldGVjdF9kaXI6Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKLWVycl9ncGlvX2RldGVjdDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCB0b3NhX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlpZiAoKCAxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKFRPU0FfR1BJT19QV1JfT04sIDEpOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKFRPU0FfR1BJT19QV1JfT04sIDApOwotCX0KLX0KLQotc3RhdGljIGludCB0b3NhX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShUT1NBX0dQSU9fU0RfV1ApOwotfQotCiBzdGF0aWMgdm9pZCB0b3NhX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9JTlQpOwotCWdwaW9fZnJlZShUT1NBX0dQSU9fUFdSX09OKTsKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1NEX1dQKTsKLQlmcmVlX2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0RFVEVDVCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sgICAgICAgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgICAgICAgICAgID0gdG9zYV9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IHRvc2FfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgICAgICAgPSB0b3NhX21jaV9zZXRwb3dlciwKLQkuZXhpdCAgICAgICAgICAgPSB0b3NhX21jaV9leGl0LAorCS5vY3JfbWFzayAgICAgICAJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgICAgICAgICAgIAk9IHRvc2FfbWNpX2luaXQsCisJLmV4aXQgICAgICAgICAgIAk9IHRvc2FfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBUT1NBX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IFRPU0FfR1BJT19TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSBUT1NBX0dQSU9fUFdSX09OLAogfTsKIAogLyoKQEAgLTQwNiwxMCArMzM3LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IHRvc2FfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zdGFydHVwID0gdG9zYV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duID0gdG9zYV9pcmRhX3NodXRkb3duLAorCS5ncGlvX3B3ZG93bgkJPSAtMSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IHRvc2FfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5zdGFydHVwCQk9IHRvc2FfaXJkYV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSB0b3NhX2lyZGFfc2h1dGRvd24sCiB9OwogCiAvKgpAQCAtOTEwLDYgKzg0Miw3IEBACiAJZHVtbXkgPSBncGlvY2hpcF9yZXNlcnZlKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFLCAxMik7CiAJZHVtbXkgPSBncGlvY2hpcF9yZXNlcnZlKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFLCAxNik7CiAKKwl0b3NhX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZ0b3NhX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CiAJcHhhX3NldF9maWNwX2luZm8oJnRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwppbmRleCA3NTNlYzRkLi5mZTA4NTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jCkBAIC0xNTMsODcgKzE1MywxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgdHJlbzY4MF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWlycV9oYW5kbGVyX3QgdHJlbzY4MF9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pLAotCQkJdHJlbzY4MF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQotCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCSAgICAgX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB0cmVvNjgwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgdHJlbzY4MF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHRyZW82ODBfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdHJlbzY4MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSB0cmVvNjgwX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHRyZW82ODBfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gdHJlbzY4MF9tY2lfaW5pdCwKLQkuZXhpdAkJPSB0cmVvNjgwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1RSRU82ODBfU0RfUE9XRVIsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzAsMTYgKzI1NCw5IEBACiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUiwgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU82ODBfTENEX1BPV0VSLCAwKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjM7CiAKIAlyZXR1cm4gMDsKLWVycjM6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIpOworCiBlcnIyOgogCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfQkxfUE9XRVIpOwogZXJyOgpAQCAtMzU1LDcgKzI3Miw2IEBACiBzdGF0aWMgdm9pZCB0cmVvNjgwX2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHRyZW82ODBfYmFja2xpZ2h0X2RhdGEgPSB7CkBAIC0zNzksNDQgKzI5NSw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgdHJlbzY4MF90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX0lSX0VOLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IHRyZW82ODBfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwgIklyIHBvcnQgZGlzYWJsZSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU82ODBfSVJfRU4sIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQotCXJldHVybiAwOwotCi1lcnIyOgotCWRldl9lcnIoZGV2LCAidHJlbzY4MF9pcmRhOiBjYW5ub3QgY2hhbmdlIElSIGdwaW8gZGlyZWN0aW9uXG4iKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0lSX0VOKTsKLWVycjE6Ci0JZGV2X2VycihkZXYsICJ0cmVvNjgwX2lyZGE6IGNhbm5vdCBhbGxvY2F0ZSBJUiBncGlvXG4iKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB0cmVvNjgwX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfSVJfRU4pOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSB0cmVvNjgwX2ZpY3BfaW5mbyA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX0ZJUk1PREUgfCBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS5zdGFydHVwICAgICAgICAgID0gdHJlbzY4MF9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duICAgICAgICAgPSB0cmVvNjgwX2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX21vZGUgPSB0cmVvNjgwX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU0Niw2ICs0MjcsMTEgQEAKIH0sCiB9OwogCitzdGF0aWMgdm9pZCB0cmVvNjgwX2xjZF9wb3dlcihpbnQgb24sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqaW5mbykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU82ODBfQkxfUE9XRVIsIG9uKTsKK30KKwogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gdHJlbzY4MF9sY2Rfc2NyZWVuID0gewogCS5tb2RlcwkJPSB0cmVvNjgwX2xjZF9tb2RlcywKIAkubnVtX21vZGVzCT0gQVJSQVlfU0laRSh0cmVvNjgwX2xjZF9tb2RlcyksCkBAIC01ODUsMTEgKzQ3MSwzMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHRyZW82ODBfbGNkX3Bvd2VyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiVHJlbzY4MDogTENEIHBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU82ODBfTENEX1BPV0VSLCAwKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiVHJlbzY4MDogc2V0dGluZyBMQ0QgcG93ZXIgR1BJTyBkaXJlY3Rpb24gZmFpbGVkIVxuIik7CisJCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfTENEX1BPV0VSKTsKKwkJcmV0dXJuOworCX0KKworCXRyZW82ODBfbGNkX3NjcmVlbi5weGFmYl9sY2RfcG93ZXIgPSB0cmVvNjgwX2xjZF9wb3dlcjsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHRyZW82ODBfaW5pdCh2b2lkKQogewogCXRyZW82ODBfcG1faW5pdCgpOwogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRyZW82ODBfcGluX2NvbmZpZykpOwogCXB4YV9zZXRfa2V5cGFkX2luZm8oJnRyZW82ODBfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCXRyZW82ODBfbGNkX3Bvd2VyX2luaXQoKTsKIAlzZXRfcHhhX2ZiX2luZm8oJnRyZW82ODBfbGNkX3NjcmVlbik7CiAJcHhhX3NldF9tY2lfaW5mbygmdHJlbzY4MF9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJdHJlbzY4MF91ZGNfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKaW5kZXggODI1ZjU0MC4uMzk4MWUwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC0zNjcsNiArMzY3LDkgQEAKIAkuZXhpdAkJPSB0cml6ZXBzNF9tY2lfZXhpdCwKIAkuZ2V0X3JvCQk9IE5VTEwsCS8qIHdyaXRlLXByb3RlY3Rpb24gbm90IHN1cHBvcnRlZCAqLwogCS5zZXRwb3dlciAJPSBOVUxMLAkvKiBwb3dlci1zd2l0Y2hpbmcgbm90IHN1cHBvcnRlZCAqLworCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDEyLDYgKzQxNSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRyaXplcHM0X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAogCS50cmFuc2NlaXZlcl9tb2RlCT0gdHJpemVwczRfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogCS5zdGFydHVwCQk9IHRyaXplcHM0X2lyZGFfc3RhcnR1cCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQ3OWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCkBAIC0wLDAgKzEsMTg3IEBACisvKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBJc2tyYXRlbCBFbGVjdHJvbmljcyBYQ0VQIHBsYXRmb3JtIGFzIHVzZWQgaW4KKyAqICB0aGUgTGliZXJhIGluc3RydW1lbnRzIGZyb20gSW5zdHJ1bWVudGF0aW9uIFRlY2hub2xvZ2llcy4KKyAqCisgKiAgQXV0aG9yOiAgICAgQWxlcyBCYXJkb3JmZXIgPGFsZXNAaS10ZWNoLnNpPgorICogIENvbnRyaWJ1dGlvbnMgYnk6IEFiYm90dCwgTUcgKE1pY2hhZWwpIDxtaWNoYWVsLmFiYm90dEBkaWFtb25kLmFjLnVrPgorICogIENvbnRyaWJ1dGlvbnMgYnk6IE1hdGVqIEtlbmRhIDxtYXRlai5rZW5kYUBpLXRlY2guc2k+CisgKiAgQ3JlYXRlZDogICAgSnVuZSAyMDA2CisgKiAgQ29weXJpZ2h0OiAgKEMpIDIwMDYtMjAwOSBJbnN0cnVtZW50YXRpb24gVGVjaG5vbG9naWVzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyNkZWZpbmUgWENFUF9FVEhfUEhZUwkJKFBYQV9DUzNfUEhZUyArIDB4MDAwMDAzMDApCisjZGVmaW5lIFhDRVBfRVRIX1BIWVNfRU5ECShQWEFfQ1MzX1BIWVMgKyAweDAwMGZmZmZmKQorI2RlZmluZSBYQ0VQX0VUSF9BVFRSCQkoUFhBX0NTM19QSFlTICsgMHgwMjAwMDAwMCkKKyNkZWZpbmUgWENFUF9FVEhfQVRUUl9FTkQJKFBYQV9DUzNfUEhZUyArIDB4MDIwZmZmZmYpCisjZGVmaW5lIFhDRVBfRVRIX0lSUQkJSVJRX0dQSU8wCisKKy8qICBYQ0VQIENQTEQgYmFzZSAqLworI2RlZmluZSBYQ0VQX0NQTERfQkFTRQkJMHhmMDAwMDAwMAorCisKKy8qIEZsYXNoIHBhcnRpdGlvbnMuICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB4Y2VwX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLnNpemUgPQkJMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9CTAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRQorCX0sIHsKKwkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIgRU5WIiwKKwkJLnNpemUgPQkJMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9CTB4MDAwNDAwMDAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRQorCX0sIHsKKwkJLm5hbWUgPQkJIktlcm5lbCIsCisJCS5zaXplID0JCTB4MDAxMDAwMDAsCisJCS5vZmZzZXQgPQkweDAwMDgwMDAwLAorCX0sIHsKKwkJLm5hbWUgPQkJIlJlc2N1ZSBmcyIsCisJCS5zaXplID0JCTB4MDAyODAwMDAsCisJCS5vZmZzZXQgPQkweDAwMTgwMDAwLAorCX0sIHsKKwkJLm5hbWUgPQkJIkZpbGVzeXN0ZW0iLAorCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ID0JMHgwMDQwMDAwMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHhjZXBfZmxhc2hfZGF0YVtdID0geworCXsKKwkJLndpZHRoCQk9IDQsCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KKwkJLnBhcnRzCQk9IHhjZXBfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh4Y2VwX3BhcnRpdGlvbnMpCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJLmVuZAk9IFBYQV9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gMCwKKwkuZGV2IAk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSB4Y2VwX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworCisKKy8qIFNNQyBMQU45MUMxMTEgbmV0d29yayBjb250cm9sbGVyLiAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gInNtYzkxeC1yZWdzIiwKKwkJLnN0YXJ0CT0gWENFUF9FVEhfUEhZUywKKwkJLmVuZAk9IFhDRVBfRVRIX1BIWVNfRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gWENFUF9FVEhfSVJRLAorCQkuZW5kCT0gWENFUF9FVEhfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LWF0dHJpYiIsCisJCS5zdGFydAk9IFhDRVBfRVRIX0FUVFIsCisJCS5lbmQJPSBYQ0VQX0VUSF9BVFRSX0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHhjZXBfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8zMkJJVCB8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ4Y2VwX3NtYzkxeF9pbmZvLAorCX0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZmxhc2hfZGV2aWNlLAorCSZzbWM5MXhfZGV2aWNlLAorfTsKKworCisvKiBXZSBoYXZlIHRvIHN0YXRlIHRoYXQgdGhlcmUgYXJlIEhXTU9OIGRldmljZXMgb24gdGhlIEkyQyBidXMgb24gWENFUC4KKyAqIERyaXZlcnMgZm9yIEhXTU9OIHZlcmlmeSBjYXBhYmlsaXRpZXMgb2YgdGhlIGFkYXB0ZXIgd2hlbiBsb2FkaW5nIGFuZAorICogcmVmdXNlIHRvIGF0dGFjaCBpZiB0aGUgYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgSFdNT04gY2xhc3Mgb2YgZGV2aWNlcy4KKyAqIFNlZSBhbHNvIERvY3VtZW50YXRpb24vaTJjL3BvcnRpbmctY2xpZW50cy4gKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIHhjZXBfaTJjX3BsYXRmb3JtX2RhdGEgID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTgorfTsKKworCitzdGF0aWMgbWZwX2NmZ190IHhjZXBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzc5X25DU18zLAkvKiBTTUMgOTFDMTExIGNoaXAgc2VsZWN0LiAqLworCUdQSU84MF9uQ1NfNCwJLyogQ1BMRCBjaGlwIHNlbGVjdC4gKi8KKwkvKiBTU1AgY29tbXVuaWNhdGlvbiB0byBNU1A0MzAgKi8KKwlHUElPMjNfU1NQMV9TQ0xLLAorCUdQSU8yNF9TU1AxX1NGUk0sCisJR1BJTzI1X1NTUDFfVFhELAorCUdQSU8yNl9TU1AxX1JYRCwKKwlHUElPMjdfU1NQMV9FWFRDTEsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4Y2VwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh4Y2VwX3Bpbl9jb25maWcpKTsKKworCS8qIFNlZSBJbnRlbCBYU2NhbGUgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGRldGFpbHMgKi8KKwkvKiBTZXQgUkRGIGFuZCBSRE4gdG8gYXBwcm9wcmlhdGUgdmFsdWVzIChjaGlwIHNlbGVjdCAzIChzbWM5MXgpKSAqLworCU1TQzEgPSAoTVNDMSAmIDB4ZmZmZikgfCAweEQ1NTQwMDAwOworCS8qIFNldCBSREYgYW5kIFJETiB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgKGNoaXAgc2VsZWN0IDUgKGZwZ2EpKSAqLworCU1TQzIgPSAoTVNDMiAmIDB4ZmZmZikgfCAweDcyQTAwMDAwOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoZGV2aWNlcykpOworCXB4YV9zZXRfaTJjX2luZm8oJnhjZXBfaTJjX3BsYXRmb3JtX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKFhDRVAsICJJc2tyYXRlbCBYQ0VQIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0geGNlcF9pbml0LAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwppbmRleCAyMThkMjAwLi4wOTc4NGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKQEAgLTI5MCw2ICsyOTAsOSBAQAogCS5pbml0IAkJPSB6eWxvbml0ZV9tY2lfaW5pdCwKIAkuZXhpdAkJPSB6eWxvbml0ZV9tY2lfZXhpdCwKIAkuZ2V0X3JvCQk9IHp5bG9uaXRlX21jaV9ybywKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IC0xLAorCS5ncGlvX2NhcmRfcm8JPSAtMSwKKwkuZ3Bpb19wb3dlcgk9IC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB6eWxvbml0ZV9tY2kyX3BsYXRmb3JtX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggZGZjOWIwYi4uYzQ4ZTFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtNzAsNiArNzAsOCBAQAogCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEJYIHBsYXRmb3JtIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFISUdIX1BIWVNfT0ZGU0VUCisJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCiAKQEAgLTgyLDYgKzg0LDcgQEAKIAkgIDB4NzAwMDAwMDAsIDI1Nk1CIG9mIHdoaWNoIGJlaW5nIG1pcnJvcmVkIGF0IDB4MDAwMDAwMDAuIElmCiAJICB0aGUgYm9hcmQgc3VwcG9ydHMgNTEyTUIgb2YgUkFNLCB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlCiAJICBtZW1vcnkgdG8gYmUgYWNjZXNzZWQgY29udGlndW91c2x5IGF0IHRoZSBoaWdoIHBoeXNpY2FsCi0JICBvZmZzZXQuCisJICBvZmZzZXQuIE9uIHRoZSBQQlggYm9hcmQsIGRpc2FibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgMUdCIG9mCisJICBSQU0gdG8gYmUgdXNlZCB3aXRoIFNQQVJTRU1FTS4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBkYzM1MTljNS4uOWYyOTM0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDQsNyArNDUsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKQEAgLTU5LDYgKzU5LDI1IEBACiAvKiB1c2VkIGJ5IGVudHJ5LW1hY3JvLlMgYW5kIHBsYXRzbXAuYyAqLwogdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKIAorI2lmZGVmIENPTkZJR19aT05FX0RNQQorLyoKKyAqIEFkanVzdCB0aGUgem9uZXMgaWYgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBmb3IgRE1BIGFjY2Vzcy4KKyAqLwordm9pZCBfX2luaXQgcmVhbHZpZXdfYWRqdXN0X3pvbmVzKGludCBub2RlLCB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqaG9sZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRtYV9zaXplID0gU1pfMjU2TSA+PiBQQUdFX1NISUZUOworCisJaWYgKCFtYWNoaW5lX2lzX3JlYWx2aWV3X3BieCgpIHx8IG5vZGUgfHwgKHNpemVbMF0gPD0gZG1hX3NpemUpKQorCQlyZXR1cm47CisKKwlzaXplW1pPTkVfTk9STUFMXSA9IHNpemVbMF0gLSBkbWFfc2l6ZTsKKwlzaXplW1pPTkVfRE1BXSA9IGRtYV9zaXplOworCWhvbGVbWk9ORV9OT1JNQUxdID0gaG9sZVswXTsKKwlob2xlW1pPTkVfRE1BXSA9IDA7Cit9CisjZW5kaWYKKwogLyoKICAqIFRoaXMgaXMgdGhlIFJlYWxWaWV3IHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiAgVGhpcyBoYXMKICAqIGEgcmVzb2x1dGlvbiBvZiA0MS43bnMsIGFuZCBhIG1heGltdW0gdmFsdWUgb2YgYWJvdXQgMTc5cy4KQEAgLTIzNywxNCArMjU2LDE0IEBACiAJcmV0dXJuIHJlYWRsKFJFQUxWSUVXX1NZU01DSSkgJiBtYXNrOwogfQogCi1zdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEgPSB7CitzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCiAJLmdwaW9fd3AJPSAxNywKIAkuZ3Bpb19jZAk9IDE2LAogfTsKIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhID0geworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSByZWFsdmlld19tbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gMTksCkBAIC0yOTYsMzEgKzMxNSwzMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCXsJLyogVUFSVDAgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYxIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDEgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYyIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDIgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYzIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQyIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDMgKi8KLQkJLmRldl9pZAkJPSAiZnBnYTowOSIsCisJCS5kZXZfaWQJCT0gImZwZ2E6dWFydDMiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBLTUkwICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDYiLAorCQkuZGV2X2lkCQk9ICJmcGdhOmttaTAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBLTUkxICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDciLAorCQkuZGV2X2lkCQk9ICJmcGdhOmttaTEiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBNTUMwICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDUiLAorCQkuZGV2X2lkCQk9ICJmcGdhOm1tYzAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBFQjpDTENEICovCi0JCS5kZXZfaWQJCT0gImRldjoyMCIsCisJCS5kZXZfaWQJCT0gImRldjpjbGNkIiwKIAkJLmNsawkJPSAmb3NjdmNvX2NsaywKIAl9LCB7CS8qIFBCOkNMQ0QgKi8KLQkJLmRldl9pZAkJPSAiaXNzcDoyMCIsCisJCS5kZXZfaWQJCT0gImlzc3A6Y2xjZCIsCiAJCS5jbGsJCT0gJm9zY3Zjb19jbGssCiAJfQogfTsKQEAgLTU0Myw3ICs1NjIsNyBAQAogCWZiLT5wYW5lbAkJPSByZWFsdmlld19jbGNkX3BhbmVsKCk7CiAKIAlmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIGZyYW1lc2l6ZSwKLQkJCQkJCSAgICAmZG1hLCBHRlBfS0VSTkVMKTsKKwkJCQkJCSAgICAmZG1hLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03ODgsMyArODA3LDI0IEBACiAJcmVhbHZpZXdfY2xvY2tzb3VyY2VfaW5pdCgpOwogCXJlYWx2aWV3X2Nsb2NrZXZlbnRzX2luaXQodGltZXJfaXJxKTsKIH0KKworLyoKKyAqIFNldHVwIHRoZSBtZW1vcnkgYmFua3MuCisgKi8KK3ZvaWQgcmVhbHZpZXdfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipmcm9tLAorCQkgICAgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisJLyoKKwkgKiBNb3N0IFJlYWxWaWV3IHBsYXRmb3JtcyBoYXZlIDUxMk1CIGNvbnRpZ3VvdXMgUkFNIGF0IDB4NzAwMDAwMDAuCisJICogSGFsZiBvZiB0aGlzIGlzIG1pcnJvcmVkIGF0IDAuCisJICovCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMHg3MDAwMDAwMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl81MTJNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKKyNlbHNlCisJbWVtaW5mby0+YmFua1swXS5zdGFydCA9IDA7CisJbWVtaW5mby0+YmFua1swXS5zaXplID0gU1pfMjU2TTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDE7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKaW5kZXggNTlhMzM3Yi4uNzgxYmNhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgogCiAjZGVmaW5lIEFNQkFfREVWSUNFKG5hbWUsYnVzaWQsYmFzZSxwbGF0KQkJCVwKQEAgLTQ0LDExICs0NSwxMyBAQAogCS8qIC5kbWEJCT0gYmFzZSMjX0RNQSwqLwkJCQlcCiB9CiAKK3N0cnVjdCBtYWNoaW5lX2Rlc2M7CisKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ZsYXNoX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2NmX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2U7Ci1leHRlcm4gc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOwotZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOworZXh0ZXJuIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CiBleHRlcm4gc3RydWN0IGNsY2RfYm9hcmQgY2xjZF9wbGF0X2RhdGE7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKIGV4dGVybiB2b2lkIF9faW9tZW0gKnRpbWVyMF92YV9iYXNlOwpAQCAtNjEsNSArNjQsOCBAQAogZXh0ZXJuIGludCByZWFsdmlld19mbGFzaF9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIG51bSk7CiBleHRlcm4gaW50IHJlYWx2aWV3X2V0aF9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiBleHRlcm4gaW50IHJlYWx2aWV3X3VzYl9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CitleHRlcm4gdm9pZCByZWFsdmlld19maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywKKwkJCSAgIGNoYXIgKipmcm9tLCBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbyk7CitleHRlcm4gdm9pZCAoKnJlYWx2aWV3X3Jlc2V0KShjaGFyKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCmluZGV4IDk4ZjhlN2UuLjM0YjgwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCkBAIC03Myw0ICs3Myw5IEBACiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9HSUNfRElTVF9CQVNFCQkweDEwMDQxMDAwIC8qIEdJQyBkaXN0cmlidXRvciwgb24gRlBHQSAqLwogI2RlZmluZSBSRUFMVklFV19QQjExNzZfTDIyMF9CQVNFCQkweDEwMTEwMDAwIC8qIEwyMjAgcmVnaXN0ZXJzICovCiAKKy8qCisgKiBDb250cm9sIHJlZ2lzdGVyIFNZU19SRVNFVENUTCBpcyBzZXQgdG8gMSB0byBmb3JjZSBhIHNvZnQgcmVzZXQKKyAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMICAgIDB4MDEwMAorCiAjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExNzZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaAppbmRleCBmMGQ2OGUwLi43YWJmOTE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaApAQCAtODEsNCArODEsMTYgQEAKICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0dJQ19ESVNUX0JBU0UJCTB4MUYwMDEwMDAJLyogVGVzdCBjaGlwIGludGVycnVwdCBjb250cm9sbGVyIGRpc3RyaWJ1dG9yICovCiAjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9MMjIwX0JBU0UJCTB4MUYwMDIwMDAJLyogTDIyMCByZWdpc3RlcnMgKi8KIAorIC8qCisgKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUiAgICAweDAxCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9DT05GSUdJTklUICAgMHgwMgorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX1BMTFJFU0VUICAgICAweDA0CisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9QT1IgICAgICAgICAgMHgwNQorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKKworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfTEVEICAgICAgICAgKDEgPDwgMCkKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMU1QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMjkzYzMwMC4uMjQxN2JiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI5LDQgKzI5LDUzIEBACiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDAwMDAwMDAwKQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHX1pPTkVfRE1BKQorZXh0ZXJuIHZvaWQgcmVhbHZpZXdfYWRqdXN0X3pvbmVzKGludCBub2RlLCB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqaG9sZSk7CisjZGVmaW5lIGFyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGUpIFwKKwlyZWFsdmlld19hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZSkKKworI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoUEhZU19PRkZTRVQgKyBTWl8yNTZNIC0gMSkKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl8yNTZNKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisKKy8qCisgKiBTcGFyc2VtZW0gZGVmaW5pdGlvbnMgZm9yIFJlYWxWaWV3IFBCWC4KKyAqCisgKiBUaGUgUmVhbFZpZXcgUEJYIGJvYXJkIGhhcyBhbm90aGVyIGJsb2NrIG9mIDUxMk1CIG9mIFJBTSBhdCAweDIwMDAwMDAwLAorICogaG93ZXZlciBvbmx5IHRoZSBibG9jayBhdCAweDcwMDAwMDAwIChvciB0aGUgMjU2TUIgbWlycm9yIGF0IDB4MDAwMDAwMDApCisgKiBtYXkgYmUgdXNlZCBmb3IgRE1BLgorICoKKyAqIFRoZSBtYWNyb3MgYmVsb3cgZGVmaW5lIGEgc2VjdGlvbiBzaXplIG9mIDI1Nk1CIGFuZCBhIG5vbi1saW5lYXIgdmlydHVhbCB0bworICogcGh5c2ljYWwgbWFwcGluZzoKKyAqCisgKiAyNTZNQiBAIDB4MDAwMDAwMDAgLT4gUEFHRV9PRkZTRVQKKyAqIDUxMk1CIEAgMHgyMDAwMDAwMCAtPiBQQUdFX09GRlNFVCArIDB4MTAwMDAwMDAKKyAqIDI1Nk1CIEAgMHg4MDAwMDAwMCAtPiBQQUdFX09GRlNFVCArIDB4MzAwMDAwMDAKKyAqLworI2lmZGVmIENPTkZJR19SRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCisjZXJyb3IgIlNQQVJTRU1FTSBub3QgYXZhaWxhYmxlIHdpdGggUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVCIKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9QSFlTTUVNX0JJVFMJMzIKKyNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMJMjgKKworLyogYmFuayBwYWdlIG9mZnNldHMgKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQxCShQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCisjZGVmaW5lIFBBR0VfT0ZGU0VUMgkoUEFHRV9PRkZTRVQgKyAweDMwMDAwMDAwKQorCisjZGVmaW5lIF9fcGh5c190b192aXJ0KHBoeXMpCQkJCQkJXAorCSgocGh5cykgPj0gMHg4MDAwMDAwMCA/CShwaHlzKSAtIDB4ODAwMDAwMDAgKyBQQUdFX09GRlNFVDIgOglcCisJIChwaHlzKSA+PSAweDIwMDAwMDAwID8JKHBoeXMpIC0gMHgyMDAwMDAwMCArIFBBR0VfT0ZGU0VUMSA6CVwKKwkgKHBoeXMpICsgUEFHRV9PRkZTRVQpCisKKyNkZWZpbmUgX192aXJ0X3RvX3BoeXModmlydCkJCQkJCQlcCisJICgodmlydCkgPj0gUEFHRV9PRkZTRVQyID8gKHZpcnQpIC0gUEFHRV9PRkZTRVQyICsgMHg4MDAwMDAwMCA6CVwKKwkgICh2aXJ0KSA+PSBQQUdFX09GRlNFVDEgPyAodmlydCkgLSBQQUdFX09GRlNFVDEgKyAweDIwMDAwMDAwIDoJXAorCSAgKHZpcnQpIC0gUEFHRV9PRkZTRVQpCisKKyNlbmRpZgkvKiBDT05GSUdfU1BBUlNFTUVNICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggYzhmNTA4My4uNGY0NmJmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCkBAIC0xMTksMTkgKzExOSw2IEBACiAjZGVmaW5lIFJFQUxWSUVXX1NZU19URVNUX09TQzMgICAgICAgICAgICAgICAoUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfVEVTVF9PU0MzX09GRlNFVCkKICNkZWZpbmUgUkVBTFZJRVdfU1lTX1RFU1RfT1NDNCAgICAgICAgICAgICAgIChSRUFMVklFV19TWVNfQkFTRSArIFJFQUxWSUVXX1NZU19URVNUX09TQzRfT0ZGU0VUKQogCi0vKiAKLSAqIFZhbHVlcyBmb3IgUkVBTFZJRVdfU1lTX1JFU0VUX0NUUkwKLSAqLwotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFIgICAgMHgwMQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9DT05GSUdJTklUICAgMHgwMgotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9ETExSRVNFVCAgICAgMHgwMwotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9QTExSRVNFVCAgICAgMHgwNAotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9QT1IgICAgICAgICAgMHgwNQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9Eb0MgICAgICAgICAgMHgwNgotCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX0xFRCAgICAgICAgICgxIDw8IDApCi0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgUmVhbFZpZXcgY29udHJvbCByZWdpc3RlcnMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUzLDcgKzE0MCw3IEBACiAgKiAgICAgU1lTX0NMRCwgU1lTX0JPT1RDUwogICovCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLX0xPQ0tFRCAgICAoMSA8PCAxNikKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSwkweEZGRkYJCS8qIHdyaXRlIDB4QTA1RiB0byBlbmFibGUgd3JpdGUgYWNjZXNzICovCisjZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLVkFMX01BU0sJMHhBMDVGCSAgICAgICAvKiBFbmFibGUgd3JpdGUgYWNjZXNzICovCiAKIC8qCiAgKiBSRUFMVklFV19TWVNfRkxBU0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMWExNWE0NC4uYTMwZjJlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgogCit2b2lkICgqcmVhbHZpZXdfcmVzZXQpKGNoYXIgbW9kZSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKIAkvKgpAQCAtMzYsMTYgKzM4LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewotCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCiAJLyoKIAkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgogCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQogCSAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKLQl2YWwgfD0gUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSOwotCV9fcmF3X3dyaXRlbCh2YWwsIGhkcl9jdHJsKTsKKwlpZiAocmVhbHZpZXdfcmVzZXQpCisJCXJlYWx2aWV3X3Jlc2V0KG1vZGUpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKaW5kZXggYTg4NDU4Yi4uMDA5MjY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKQEAgLTE0NiwxMSArMTQ2LDggQEAKIAkgKiByZWdpc3Rlci4gVGhlIEJvb3RNb25pdG9yIHdhaXRzIGZvciB0aGlzIHJlZ2lzdGVyIHRvIGJlY29tZQogCSAqIG5vbi16ZXJvLgogCSAqLwotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NTX09GRlNFVCAweDMwCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19GTEFHU0NfT0ZGU0VUIDB4MzQKIAlfX3Jhd193cml0ZWwoQlNZTSh2aXJ0X3RvX3BoeXMocmVhbHZpZXdfc2Vjb25kYXJ5X3N0YXJ0dXApKSwKLQkJICAgICBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKLQkJICAgICBSRUFMVklFV19TWVNfRkxBR1NTX09GRlNFVCk7CisJCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19GTEFHU1NFVCkpOwogCiAJbWIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBhYmQxM2I0Li45MTdmOGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM3LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLWViLmg+CkBAIC0xOTMsMjcgKzE5MywyNyBAQAogI2RlZmluZSBFQl9TU1BfRE1BCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOjA0IiwgQUFDSSwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOjA1IiwgTU1DSTAsICAgICZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6MDYiLCBLTUkwLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6MDciLCBLTUkxLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywgImZwZ2E6MDkiLCBFQl9VQVJUMywgTlVMTCk7CitBTUJBX0RFVklDRShhYWNpLCAgImZwZ2E6YWFjaSIsICBBQUNJLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLCAgImZwZ2E6bW1jMCIsICBNTUNJMCwgICAgJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGttaTAsICAiZnBnYTprbWkwIiwgIEtNSTAsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsICAiZnBnYTprbWkxIiwgIEtNSTEsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLCAiZnBnYTp1YXJ0MyIsIEVCX1VBUlQzLCBOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsICAgImRldjowMCIsICBFQl9TTUMsICAgTlVMTCk7Ci1BTUJBX0RFVklDRShjbGNkLCAgImRldjoyMCIsICBFQl9DTENELCAgJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsICAiZGV2OjMwIiwgIERNQUMsICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKHNjdGwsICAiZGV2OmUwIiwgIFNDVEwsICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csICAiZGV2OmUxIiwgIEVCX1dBVENIRE9HLCBOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLCAiZGV2OmU0IiwgIEVCX0dQSU8wLCAmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLCAiZGV2OmU1IiwgIEdQSU8xLCAgICAmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLCAiZGV2OmU2IiwgIEdQSU8yLCAgICAmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywgICAiZGV2OmU4IiwgIEVCX1JUQywgICBOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsICAiZGV2OmYwIiwgIFNDSSwgICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLCAiZGV2OmYxIiwgIEVCX1VBUlQwLCBOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLCAiZGV2OmYyIiwgIEVCX1VBUlQxLCBOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLCAiZGV2OmYzIiwgIEVCX1VBUlQyLCBOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsICAiZGV2OmY0IiwgIEVCX1NTUCwgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywgICAiZGV2OnNtYyIsICAgRUJfU01DLCAgIE5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6Y2xjZCIsICBFQl9DTENELCAgJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsICAiZGV2OmRtYWMiLCAgRE1BQywgICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwgICJkZXY6c2N0bCIsICBTQ1RMLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLCAgImRldjp3ZG9nIiwgIEVCX1dBVENIRE9HLCBOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLCAiZGV2OmdwaW8wIiwgRUJfR1BJTzAsICZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsICJkZXY6Z3BpbzEiLCBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwgImRldjpncGlvMiIsIEdQSU8yLCAgICAmZ3BpbzJfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKHJ0YywgICAiZGV2OnJ0YyIsICAgRUJfUlRDLCAgIE5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwgICJkZXY6c2NpMCIsICBTQ0ksICAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwgImRldjp1YXJ0MCIsIEVCX1VBUlQwLCBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLCAiZGV2OnVhcnQxIiwgRUJfVUFSVDEsIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDIsICJkZXY6dWFydDIiLCBFQl9VQVJUMiwgTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLCAgImRldjpzc3AwIiwgIEVCX1NTUCwgICBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC00MTUsNiArNDE1LDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfRUJfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKKwkuZml4dXAJCT0gcmVhbHZpZXdfZml4dXAsCiAJLm1hcF9pbwkJPSByZWFsdmlld19lYl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfZWJfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCAxN2ZiYjBlLi43ZmI3MjZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGIxMTc2Lmg+CkBAIC0xNzAsMjkgKzE3MCwyOSBAQAogI2RlZmluZSBQQjExNzZfU1NQX0RNQQkJeyA5LCA4IH0KIAogLyogRlBHQSBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShhYWNpLAkiZnBnYTowNCIsCUFBQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsCSJmcGdhOjA1IiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6MDYiLAlLTUkwLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShrbWkxLAkiZnBnYTowNyIsCUtNSTEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTowOSIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CitBTUJBX0RFVklDRShhYWNpLAkiZnBnYTphYWNpIiwJQUFDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6bW1jMCIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGttaTAsCSJmcGdhOmttaTAiLAlLTUkwLAkJTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLAkiZnBnYTprbWkxIiwJS01JMSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOnVhcnQzIiwJUEIxMTc2X1VBUlQzLAlOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQjExNzZfU01DLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjdGwsCSJkZXY6ZTAiLAlTQ1RMLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLAkiZGV2OmUxIiwJUEIxMTc2X1dBVENIRE9HLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEIxMTc2X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCMTE3Nl9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQjExNzZfVUFSVDAsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQjExNzZfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQjExNzZfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCMTE3Nl9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCMTE3Nl9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEIxMTc2X1dBVENIRE9HLAlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmdwaW8wIiwJUEIxMTc2X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmdwaW8xIiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmdwaW8yIiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKHJ0YywJImRldjpydGMiLAlQQjExNzZfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6c2NpMCIsCVNDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6dWFydDAiLAlQQjExNzZfVUFSVDAsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6dWFydDEiLAlQQjExNzZfVUFSVDEsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6dWFydDIiLAlQQjExNzZfVUFSVDIsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEIxMTc2X1NTUCwJTlVMTCk7CiAKIC8qIFByaW1lY2VsbHMgb24gdGhlIE5FQyBJU1NQIGNoaXAgKi8KLUFNQkFfREVWSUNFKGNsY2QsCSJpc3NwOjIwIiwJUEIxMTc2X0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7Ci0vL0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJUEIxMTc2X0RNQUMsCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTE3Nl9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworLy9BTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJUEIxMTc2X0RNQUMsCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogLy8JJmRtYWNfZGV2aWNlLApAQCAtMjkwLDYgKzI5MCwyOCBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BiMTE3Nl90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGIxMTc2X3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpyc3RfaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLLCByc3RfaGRyX2N0cmwpOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMLCBoZHJfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywKKwkJCQkgIHN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipmcm9tLAorCQkJCSAgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisJLyoKKwkgKiBSZWFsVmlldyBQQjExNzYgb25seSBoYXMgMTI4TUIgb2YgUkFNIG1hcHBlZCBhdCAwLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzEyOE07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTMxMyw2ICszMzUsNyBAQAogI2lmZGVmIENPTkZJR19MRURTCiAJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CiAjZW5kaWYKKwlyZWFsdmlld19yZXNldCA9IHJlYWx2aWV3X3BiMTE3Nl9yZXNldDsKIH0KIAogTUFDSElORV9TVEFSVChSRUFMVklFV19QQjExNzYsICJBUk0tUmVhbFZpZXcgUEIxMTc2IikKQEAgLTMyMCw2ICszNDMsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BiMTE3Nl9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiMTE3Nl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGIxMTc2X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggZmRkMDQyYi4uOWJiYmZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM4LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTFtcC5oPgpAQCAtMTcyLDI5ICsxNzIsMjkgQEAKICNkZWZpbmUgUEIxMU1QX1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExTVBfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCMTFNUF9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMU1QX1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTFNUF9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTFNUF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExTVBfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMU1QX1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMU1QX1VBUlQxLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMU1QX1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExTVBfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQjExTVBfU01DLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsCSJkZXY6c2N0bCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6d2RvZyIsCVBCMTFNUF9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCMTFNUF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEIxMU1QX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMU1QX1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMU1QX1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMU1QX1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTFNUF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEIxMU1QX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJRE1BQywJCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTI5OSw2ICsyOTksMjEgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYjExbXBfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTFtcF9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQlSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOworCXVuc2lnbmVkIGludCB2YWw7CisKKwkvKgorCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCisJICogaW4gdGhlIHN5c3RlbSBGUEdBCisJICovCisJdmFsID0gX19yYXdfcmVhZGwoaGRyX2N0cmwpOworCXZhbCB8PSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSOworCV9fcmF3X3dyaXRlbCh2YWwsIGhkcl9jdHJsKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTFtcF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zMjQsNiArMzM5LDcgQEAKICNpZmRlZiBDT05GSUdfTEVEUwogCWxlZHNfZXZlbnQgPSByZWFsdmlld19sZWRzX2V2ZW50OwogI2VuZGlmCisJcmVhbHZpZXdfcmVzZXQgPSByZWFsdmlld19wYjExbXBfcmVzZXQ7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfUEIxMU1QLCAiQVJNLVJlYWxWaWV3IFBCMTFNUENvcmUiKQpAQCAtMzMxLDYgKzM0Nyw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQjExTVBfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQjExTVBfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKKwkuZml4dXAJCT0gcmVhbHZpZXdfZml4dXAsCiAJLm1hcF9pbwkJPSByZWFsdmlld19wYjExbXBfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiMTFtcF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKaW5kZXggNzBiYmE5OS4uZmU4NjFlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE2MiwyOSArMTYyLDI5IEBACiAjZGVmaW5lIFBCQThfU1NQX0RNQQkJeyA5LCA4IH0KIAogLyogRlBHQSBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShhYWNpLAkiZnBnYTowNCIsCUFBQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsCSJmcGdhOjA1IiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6MDYiLAlLTUkwLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShrbWkxLAkiZnBnYTowNyIsCUtNSTEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTowOSIsCVBCQThfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCQThfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCQThfU01DLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjdGwsCSJkZXY6ZTAiLAlTQ1RMLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLAkiZGV2OmUxIiwJUEJBOF9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCQThfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEJBOF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQkE4X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEJBOF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCQThfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCQThfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQkE4X1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQkE4X1dBVENIRE9HLCBOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmdwaW8wIiwJUEJBOF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJBOF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCQThfVUFSVDAsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6dWFydDEiLAlQQkE4X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJBOF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQkE4X1NTUCwJTlVMTCk7CiAKIC8qIFByaW1lY2VsbHMgb24gdGhlIE5FQyBJU1NQIGNoaXAgKi8KLUFNQkFfREVWSUNFKGNsY2QsCSJpc3NwOjIwIiwJUEJBOF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJBOF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0yOTgsNiArMjk4LDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCQThfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJhOF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJhOF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCmluZGV4IGNlNmM1ZDIuLmVjMzk0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0zNCw3ICszNSw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTgyLDI5ICsxODIsMjkgQEAKICNkZWZpbmUgUEJYX1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQlhfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCWF9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEJYX1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCWF9XQVRDSERPRywgCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQlhfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEJYX1JUQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCWF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCWF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCWF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEJYX1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEJYX1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQlhfV0FUQ0hET0csIAlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmdwaW8wIiwJUEJYX0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmdwaW8xIiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmdwaW8yIiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKHJ0YywJImRldjpydGMiLAlQQlhfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6c2NpMCIsCVNDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6dWFydDAiLAlQQlhfVUFSVDAsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6dWFydDEiLAlQQlhfVUFSVDEsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6dWFydDIiLAlQQlhfVUFSVDIsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEJYX1NTUCwJTlVMTCk7CiAKIC8qIFByaW1lY2VsbHMgb24gdGhlIE5FQyBJU1NQIGNoaXAgKi8KLUFNQkFfREVWSUNFKGNsY2QsCSJpc3NwOjIwIiwJUEJYX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCURNQUMsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOmNsY2QiLAlQQlhfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOmRtYWMiLAlETUFDLAkJTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtMzA0LDYgKzMwNCwyNiBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BieF90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGJ4X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQkJICAgICAgIGNoYXIgKipmcm9tLCBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbykKK3sKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisJLyoKKwkgKiBNZW1vcnkgY29uZmlndXJhdGlvbiB3aXRoIFNQQVJTRU1FTSBlbmFibGVkIG9uIFJlYWxWaWV3IFBCWCAoc2VlCisJICogYXNtL21hY2gvbWVtb3J5LmggZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+YmFua1sxXS5zdGFydCA9IDB4MjAwMDAwMDA7CisJbWVtaW5mby0+YmFua1sxXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5iYW5rWzJdLnN0YXJ0ID0gMHg4MDAwMDAwMDsKKwltZW1pbmZvLT5iYW5rWzJdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMzsKKyNlbHNlCisJcmVhbHZpZXdfZml4dXAobWRlc2MsIHRhZ3MsIGZyb20sIG1lbWluZm8pOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzQ1LDYgKzM2NSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQlhfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQlhfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKKwkuZml4dXAJCT0gcmVhbHZpZXdfcGJ4X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJ4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYnhfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGQ4YzAyM2QuLjNkNGU5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC03Nyw2ICs3Nyw3IEBACiAJc2VsZWN0IENQVV9TM0MyNDEwCiAJc2VsZWN0IFBNX0gxOTQwIGlmIFBNCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBIUCBJUEFRIEgxOTQwCiAKQEAgLTg5LDYgKzkwLDcgQEAKIAlib29sICJBY2VyIE4zMCBmYW1pbHkiCiAJc2VsZWN0IENQVV9TM0MyNDEwCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwdCBmb3IgdGhlIEFjZXIgTjMwLCBBY2VyIE4zNSwKIAkgIE5hdm1hbiBQaU41NzAsIFlha3VtbyBBbHBoYVggb3IgQWlyaXMgTkMwNSBQREFzLgpAQCAtMTAzLDYgKzEwNSw3IEBACiAJc2VsZWN0IFMzQzI0WFhfRENMSwogCXNlbGVjdCBJU0EKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBFQjI0MTBJVFgKIAkgIGRldmVsb3BtZW50IGJvYXJkIChhbHNvIGtub3duIGFzIEJBU1QpCkBAIC0xMTEsNiArMTE0LDcgQEAKICAJYm9vbCAiTmV4VmlzaW9uIE9UT00gQm9hcmQiCiAgCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKICAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE5leCBWaXNpb24gT1RPTSBib2FyZAogCkBAIC0xNTQsNiArMTU4LDcgQEAKIAlib29sICJRVDI0MTAiCiAJc2VsZWN0IENQVV9TM0MyNDEwCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgQXJtem9uZSBRVDI0MTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKaW5kZXggNzk3NGFmYy4uOTY2NGUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tZm5zLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IGMzYTI2MjkuLjkyZTI2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTEwLDYgKzExMCw4IEBACiAJCQkJCSAgICAqIHdhaXRpbmcgZm9yIHJlbG9hZHMgKi8KICNkZWZpbmUgUzNDMjQxMF9ETUFGX0FVVE9TVEFSVCAgICAoMTw8MSkgICAvKiBhdXRvLXN0YXJ0IGlmIGJ1ZmZlciBxdWV1ZWQgKi8KIAorI2RlZmluZSBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIJKDEgPDwgMikJLyogbm8gY2lyY3VsYXIgZG1hIHN1cHBvcnQgKi8KKwogLyogZG1hIGJ1ZmZlciAqLwogCiBzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmOwpAQCAtMTk0LDQgKzE5Niw5IEBACiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBkbWFfZGV2aWNlX3Q7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzM2NfZG1hX2hhc19jaXJjdWxhcih2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcKaW5kZXggMzVjMWJkZS4uYzJiZGM0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlib29sICJMb2dpdGVjaCBKaXZlIgogCXNlbGVjdCBDUFVfUzNDMjQxMgogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTG9naXRlY2ggSml2ZS4KIApAQCAtNjEsNiArNjIsNyBAQAogCXNlbGVjdCBNQUNIX1MzQzI0MTMKIAlzZWxlY3QgTUFDSF9TTURLCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGFuIFNNREsyNDEzCiAKQEAgLTg0LDYgKzg2LDcgQEAKIAlib29sICJWTVNUTVMiCiAJc2VsZWN0IENQVV9TM0MyNDEyCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGFuIFZTVE1TIGJvYXJkCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggOGFlMWIyOC4uYThiNjlkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlzZWxlY3QgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCiAJc2VsZWN0IFMzQzI0MTBfSU9USU1JTkcgaWYgUzNDMjQ0MF9DUFVGUkVRCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgSU0yNDQwRDIwIG1vZHVsZSwgYWxzbwogCSAga25vd24gYXMgdGhlIE9zaXJpcy4KQEAgLTU3LDYgKzU4LDcgQEAKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAlzZWxlY3QgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCiAJc2VsZWN0IFBNX0gxOTQwIGlmIFBNCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgaVBBUSByeDM3MTUuCiAKQEAgLTY2LDYgKzY4LDcgQEAKIAlzZWxlY3QgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCiAJc2VsZWN0IE1BQ0hfU01ESwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU01ESzI0NDAuCiAKQEAgLTc0LDYgKzc3LDcgQEAKICAJc2VsZWN0IENQVV9TM0MyNDQwCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKICAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE5leCBWaXNpb24gTkVYQ09ERVIgMjQ0MCBMaWdodCBCb2FyZAogCkBAIC04OCw2ICs5Miw3IEBACiAJYm9vbCAiQXZhbnRlY2ggQVQyNDQwRVZCIGRldmVsb3BtZW50IGJvYXJkIgogCXNlbGVjdCBDUFVfUzNDMjQ0MAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgQVQyNDQwRVZCIGRldmVsb3BtZW50IGJvYXJkCiAKQEAgLTk3LDYgKzEwMiw4IEBACiAJc2VsZWN0IEVFUFJPTV9BVDI0CiAJc2VsZWN0IExFRFNfVFJJR0dFUl9CQUNLTElHSFQKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1MzQzI0WFhfVURBMTM0WAorCXNlbGVjdCBTM0NfREVWX05BTkQKKwlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHN1cHBvcnQgZm9yIHRoZSBNSU5JMjQ0MC4gSXMgYSAxMGNtIHggMTBjbSBib2FyZAogCSAgYXZhaWxhYmxlIHZpYSB2YXJpb3VzIHNvdXJjZXMuIEl0IGNhbiBjb21lIHdpdGggYSAzLjUiIG9yIDciIHRvdWNoIExDRC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCmluZGV4IGVjNzFhNjkuLjFjMzM4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJLnR5cGUJCT0gKFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUCB8XAogCQkJICAgUzNDMjQxMF9MQ0RDT04xX1RGVCkKIAotc3RydWN0IHMzYzI0MTBmYl9kaXNwbGF5IG1pbmkyNDQwX2xjZF9jZmdbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CS8qIG1pbmkyNDQwICsgMy41IiBURlQgKyB0b3VjaHNjcmVlbiAqLwogCQlfTENEX0RFQ0xBUkUoCiAJCQk3LAkJCS8qIFRoZSAzLjUgaXMgcXVpdGUgZmFzdCAqLwpAQCAtMTkxLDcgKzE5MSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BDQ09OX01BU0soeCkJKDMgPDwgKCh4KSAqIDIpKQogI2RlZmluZSBTM0MyNDEwX0dQRENPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKIAotc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gbWluaTI0NDBfZmJfaW5mbyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKIAkuZGlzcGxheXMJID0gJm1pbmkyNDQwX2xjZF9jZmdbMF0sIC8qIG5vdCBjb25zdGFudCEgc2VlIGluaXQgKi8KIAkubnVtX2Rpc3BsYXlzCSA9IDEsCiAJLmRlZmF1bHRfZGlzcGxheSA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCmluZGV4IGY1YWYyMTIuLjc3MGI3MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCkBAIC0yNiw2ICsyNiw3IEBACiAgICAgICAgYm9vbCAiU01ESzY0MDAiCiAJc2VsZWN0IENQVV9TM0M2NDAwCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJc2VsZWN0IFMzQzY0MDBfU0VUVVBfU0RIQ0kKIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCAxMDY3NjE5Li42NzIzODYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTU4LDEyICs1OCw5IEBACiAJRE1BQ0hfTUFYCQkvKiB0aGUgZW5kICovCiB9OwogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3N0YXRpYyBfX2lubGluZV9fIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKIHsKLQkvKiB3ZSB3aWxsIGJlIHN1cHBvcnRpbmcgY2lydWNsYXIgYnVmZmVycyBhcyBzb29uIGFzIHdlIGhhdmUgRE1BCi0JICogZW5naW5lIHN1cHBvcnQuCi0JICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwppbmRleCBmOWQwZjA5Li43MmQ0YjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAogCXNlbGVjdCBSRUdVTEFUT1IKIAlzZWxlY3QgUkVHVUxBVE9SX1dNODM1MAorCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAogCXNlbGVjdCBNRkRfV004MzUwX0kyQwogCXNlbGVjdCBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8zCkBAIC0xMDIsNiArMTAzLDcgQEAKIAlib29sICJBaXJnb28gSE1UIgogCXNlbGVjdCBDUFVfUzNDNjQxMAogCXNlbGVjdCBTM0NfREVWX0ZCCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCiAJc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKIAlzZWxlY3QgSEFWRV9QV00KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCmluZGV4IGVhNTFkYmUuLjlmMWEyMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwpAQCAtMzIwLDYgKzMyMCw5IEBACiB7CiAJaW50IGk7CiAKKwkvKiBDb25maWd1cmUgdGhlIElSUSBsaW5lICovCisJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQTigxMiksIFMzQ19HUElPX1BVTExfVVApOworCiAJLyogSW5zdGFudGlhdGUgdGhlIHJlZ3VsYXRvcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTExOTBfcmVndWxhdG9ycyk7IGkrKykKIAkJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwppbmRleCA4MWZmZmY3Li40ZTVjMDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKQEAgLTcxLDExICs3MSw2IEBACiAJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9pbmRleC5odG1sI2lQQVFfSDM2MDA+CiAJICA8aHR0cDovL3d3dy5jb21wYXEuY29tL3Byb2R1Y3RzL2hhbmRoZWxkcy9wb2NrZXRwYy8+CiAKLWNvbmZpZyBTQTExMDBfSDNYWFgKLQlib29sCi0JZGVwZW5kcyBvbiBTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBTQTExMDBfQkFER0U0CiAJYm9vbCAiSFAgTGFicyBCYWRnZVBBRCA0IgogCXNlbGVjdCBTQTExMTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKaW5kZXggOGE1NTQ2ZS4uYmI3YjgxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTI1LDYgKzI1LDcgQEAKIAogb2JqLSQoQ09ORklHX1NBMTEwMF9DT0xMSUUpCQkrPSBjb2xsaWUubwogCitvYmotJChDT05GSUdfU0ExMTAwX0gzMTAwKQkJKz0gaDM2MDAubwogb2JqLSQoQ09ORklHX1NBMTEwMF9IMzYwMCkJCSs9IGgzNjAwLm8KIAogb2JqLSQoQ09ORklHX1NBMTEwMF9IQUNLS0lUKQkJKz0gaGFja2tpdC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCmluZGV4IDk1ZjljNWE2Li5jYjQ1MjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgc2ExMTAwX2RtYV90IGRtYV9jaGFuW1NBMTEwMF9ETUFfQ0hBTk5FTFNdOwogCi1zdGF0aWMgc3BpbmxvY2tfdCBkbWFfbGlzdF9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfbGlzdF9sb2NrKTsKIAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCA5NWQ5MmU4Li5iOWNiYjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLnNldF9tb2RlCT0gc2ExMTAwX29zbXIwX3NldF9tb2RlLAogfTsKIAotc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3Njcih2b2lkKQorc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3NjcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKnMpCiB7CiAJcmV0dXJuIE9TQ1I7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCmluZGV4IDMzN2I5YWEuLjgwMWIyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCkBAIC04MSw2ICs4MSwxOCBAQAogCQlNZW1vcnkgSW50ZXJmYWNlKSBmcm9tIGJvdGggZnJvbSBhY2Nlc3MgYW5kIGFwcGxpY2F0aW9uCiAJCXNpZGUuCiAKK2NvbmZpZyBNQUNIX1UzMDBfU1BJRFVNTVkKKwlib29sICJTU1AvU1BJIGR1bW15IGNoaXAiCisJc2VsZWN0IFNQSQorCXNlbGVjdCBTUElfTUFTVEVSCisJc2VsZWN0IFNQSV9QTDAyMgorCWhlbHAKKwkJVGhpcyBjcmVhdGVzIGEgc21hbGwga2VybmVsIG1vZHVsZSB0aGF0IGNyZWF0ZXMgYSBkdW1teQorCQlTUEkgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIGxvb3BiYWNrIHRlc3RzLiBSZWd1bGFybHkgdXNlZAorCQl0byB0ZXN0IHJlZmVyZW5jZSBkZXNpZ25zLiBJZiB5b3UncmUgbm90IHRlc3RpbmcgU1BJLAorCQl5b3UgZG9uJ3QgbmVlZCBpdC4gU2VsZWN0aW5nIHRoaXMgd2lsbCBhY3RpdmF0ZSB0aGUKKwkJU1BJIGZyYW1ld29yayBhbmQgQVJNIFBMMDIyIHN1cHBvcnQuCisKIGNvbW1lbnQgIkFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzIgogCiBjb25maWcgTUFDSF9VMzAwX0FDQ0VTU19NRU1fU0laRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlCmluZGV4IDI0OTUwZTAuLjg4NWI1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUKQEAgLTksMyArOSw2IEBACiAKIG9iai0kKENPTkZJR19BUkNIX1UzMDApCSAgICAgICAgICArPSB1MzAwLm8KIG9iai0kKENPTkZJR19NTUMpICAgICAgICAgICAgICAgICArPSBtbWMubworb2JqLSQoQ09ORklHX1NQSV9QTDAyMikgICAgICAgICAgICs9IHNwaS5vCitvYmotJChDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZKSAgKz0gZHVtbXlzcGljaGlwLm8KK29iai0kKENPTkZJR19JMkNfU1RVMzAwKSAgICAgICAgICArPSBpMmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggMmU5YjhjYy4uNjUzZTI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm1tYy5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgImkyYy5oIgogCiAvKgogICogU3RhdGljIEkvTyBtYXBwaW5ncyB0aGF0IGFyZSBuZWVkZWQgZm9yIGJvb3RpbmcgdGhlIFUzMDAgcGxhdGZvcm1zLiBUaGUKQEAgLTM3OCwxNCArMzgwLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMwX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMF9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMxX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMxX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMV9yZXNvdXJjZXMsCkBAIC00MDYsNyArNDA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjMCIsCisJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHJ0Y19yZXNvdXJjZXMsCkBAIC02MTEsNiArNjEzLDggQEAKIAkvKiBXYWl0IGZvciB0aGUgUExMMjA4IHRvIGxvY2sgaWYgbm90IGxvY2tlZCBpbiB5ZXQgKi8KIAl3aGlsZSAoIShyZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NTUikgJgogCQkgVTMwMF9TWVNDT05fQ1NSX1BMTDIwOF9MT0NLX0lORCkpOworCS8qIEluaXRpYWxpemUgU1BJIGRldmljZSB3aXRoIHNvbWUgYm9hcmQgc3BlY2lmaWNzICovCisJdTMwMF9zcGlfaW5pdCgmcGwwMjJfZGV2aWNlKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBBTUJBIGRldmljZXMgaW4gdGhlIEFNQkEgYnVzIGFic3RyYWN0aW9uIGxheWVyICovCiAJdTMwMF9jbG9ja19wcmltZWNlbGxzKCk7CkBAIC02MjIsNiArNjI2LDEyIEBACiAKIAl1MzAwX2Fzc2lnbl9waHlzbWVtKCk7CiAKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBJMkMgYnVzZXMgKi8KKwl1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKCk7CisKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBTUEkgYnVzICovCisJdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOworCiAJLyogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUaGlzIGlzIGEgZHVtbXkgbG9vcGJhY2sgU1BJICJjaGlwIiB1c2VkIGZvciB0ZXN0aW5nIFNQSS4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisvKgorICogV0FSTklORyEgRG8gbm90IGluY2x1ZGUgdGhpcyBwbDAyMi1zcGVjaWZpYyBjb250cm9sbGVyIGhlYWRlcgorICogZm9yIGFueSBnZW5lcmljIGRyaXZlci4gSXQgaXMgb25seSBkb25lIGluIHRoaXMgZHVtbXkgY2hpcAorICogYmVjYXVzZSB3ZSBhbHRlciB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIHRlc3Qgc29tZQorICogZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBsb29wYmFjayBkZXZpY2UuIE5vcm1hbCBjaGlwIGNvbmZpZ3MKKyAqIHNoYWxsIGJlIFNUQVRJQyBhbmQgbm90IGFsdGVyZWQgYnkgdGhlIGRyaXZlciEKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KKworc3RydWN0IGR1bW15IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCisjZGVmaW5lIERNQV9URVNUX1NJWkUgMjA0OAorCisvKiBXaGVuIHdlIGNhdCAvc3lzL2J1cy9zcGkvZGV2aWNlcy9zcGkwLjAvbG9vcHRlc3QgdGhpcyB3aWxsIGJlIHRyaWdnZXJlZCAqLworc3RhdGljIHNzaXplX3QgZHVtbXlfbG9vcHRlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwkvKgorCSAqIFdBUk5JTkchIERvIG5vdCBkZXJlZmVyZW5jZSB0aGUgY2hpcC1zcGVjaWZpYyBkYXRhIGluIGFueSBub3JtYWwKKwkgKiBkcml2ZXIgZm9yIGEgY2hpcC4gSXQgaXMgdXN1YWxseSBTVEFUSUMgYW5kIHNoYWxsIG5vdCBiZSByZWFkCisJICogb3Igd3JpdHRlbiB0by4gWW91ciBjaGlwIGRyaXZlciBzaG91bGQgTk9UIGRlcGVuZCBvbiBmaWVsZHMgaW4gdGhpcworCSAqIHN0cnVjdCwgdGhpcyBpcyBqdXN0IHVzZWQgaGVyZSB0byBhbHRlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjaGlwCisJICogaW4gb3JkZXIgdG8gcGVyZm9ybSB0ZXN0cy4KKwkgKi8KKwlzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgKmNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCWludCBzdGF0dXM7CisJdTggdHhidWZbMTRdID0gezB4REUsIDB4QUQsIDB4QkUsIDB4RUYsIDB4MkIsIDB4QUQsCisJCQkweENBLCAweEZFLCAweEJBLCAweEJFLCAweEIxLCAweDA1LAorCQkJMHhGMCwgMHgwRH07CisJdTggcnhidWZbMTRdOworCXU4ICpiaWd0eGJ1Zl92aXJ0dWFsOworCXU4ICpiaWdyeGJ1Zl92aXJ0dWFsOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcF9kdW1teS0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwliaWd0eGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmlndHhidWZfdmlydHVhbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwliaWdyeGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKworCS8qIEZpbGwgVFhCVUYgd2l0aCBzb21lIGhhcHB5IHBhdHRlcm4gKi8KKwltZW1zZXQoYmlndHhidWZfdmlydHVhbCwgMHhBQSwgRE1BX1RFU1RfU0laRSk7CisKKwkvKgorCSAqIEZvcmNlIGNoaXAgdG8gOCBiaXQgbW9kZQorCSAqIFdBUk5JTkc6IE5FVkVSIERPIFRISVMgSU4gUkVBTCBEUklWRVIgQ09ERSwgVEhJUyBTSE9VTEQgQkUgU1RBVElDIQorCSAqLworCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU184OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwkvKiBOb3cgcnVuIHRoZSB0ZXN0cyBmb3IgOGJpdCBtb2RlICovCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTogd3JpdGUgMHhBQSBieXRlLCByZWFkIGJhY2sgZ2FyYmFnZSBieXRlICIKKwkJImluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiB3cml0ZSA4IGJ5dGVzLCByZWFkIGJhY2sgOCBieXRlcyBnYXJiYWdlICIKKwkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAzOiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gOGJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMzogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKKwkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDM6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQ6IHdyaXRlIDggYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgcmVhZCA4ICIKKwkJImJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiB3cml0ZSAxNCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCByZWFkICIKKwkJIjE0IGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiB3cml0ZSAlZCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCAiCisJCSJyZWFkICVkIGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIiwKKwkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IFNVQ0NFU1MhXG4iKTsKKworCisJLyoKKwkgKiBGb3JjZSBjaGlwIHRvIDE2IGJpdCBtb2RlCisJICogV0FSTklORzogTkVWRVIgRE8gVEhJUyBJTiBSRUFMIERSSVZFUiBDT0RFLCBUSElTIFNIT1VMRCBCRSBTVEFUSUMhCisJICovCisJY2hpcF9pbmZvLT5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzE2OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiB3cml0ZSAweEFBIGJ5dGUsIHJlYWQgYmFjayBnYXJiYWdlIGJ5dGUgIgorCQkiaW4gMTZiaXQgYnVzIG1vZGVcbiIpOworCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CisJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiBTVUNDRVNTISAoZXhwZWN0ZWQgZmFpbHVyZSB3aXRoICIKKwkJCSJzdGF0dXMgRUlPKVxuIik7CisJZWxzZSBpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgInN1Y2NlZWRlZCBidXQgaXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IHdyaXRlIDggYnl0ZXMsIHJlYWQgYmFjayA4IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCisJCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogd3JpdGUgJWQgYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgIgorCSAgICAgICAicmVhZCAlZCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiAxNmJpdCBtb2RlXG4iLAorCSAgICAgICBETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKKworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogU1VDQ0VTUyFcbiIpOworCisJc3RhdHVzID0gc3ByaW50ZihidWYsICJsb29wIHRlc3QgY29tcGxldGVcbiIpOworCWtmcmVlKGJpZ3J4YnVmX3ZpcnR1YWwpOworCWtmcmVlKGJpZ3R4YnVmX3ZpcnR1YWwpOworIG91dDoKKwltdXRleF91bmxvY2soJnBfZHVtbXktPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsb29wdGVzdCwgU19JUlVHTywgZHVtbXlfbG9vcHRlc3QsIE5VTEwpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbDAyMl9kdW1teV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkdW1teSAqcF9kdW1teTsKKwlpbnQgc3RhdHVzOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAicHJvYmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKworCXBfZHVtbXkgPSBremFsbG9jKHNpemVvZiAqcF9kdW1teSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwX2R1bW15KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHBfZHVtbXkpOworCW11dGV4X2luaXQoJnBfZHVtbXktPmxvY2spOworCisJLyogc3lzZnMgaG9vayAqLworCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9sb29wdGVzdCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImRldmljZV9jcmVhdGVfZmlsZSBsb29wdGVzdCBmYWlsdXJlLlxuIik7CisJCWdvdG8gb3V0X2Rldl9jcmVhdGVfbG9vcHRlc3RfZmFpbGVkOworCX0KKworCXJldHVybiAwOworCitvdXRfZGV2X2NyZWF0ZV9sb29wdGVzdF9mYWlsZWQ6CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJa2ZyZWUocF9kdW1teSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGwwMjJfZHVtbXlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJyZW1vdmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfbG9vcHRlc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCWtmcmVlKHBfZHVtbXkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwbDAyMl9kdW1teV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic3BpLWR1bW15IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBwbDAyMl9kdW1teV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGwwMjJfZHVtbXlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDIyX2luaXRfZHVtbXkodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcGwwMjJfZHVtbXlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBsMDIyX2V4aXRfZHVtbXkodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsMDIyX2R1bW15X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsMDIyX2luaXRfZHVtbXkpOworbW9kdWxlX2V4aXQocGwwMjJfZXhpdF9kdW1teSk7CisKK01PRFVMRV9BVVRIT1IoIkxpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBMMDIyIFNTUC9TUEkgRFVNTVkgTGludXggZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwppbmRleCAzMDhjZGIxLi4wYjM1ODI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKQEAgLTI1LDExICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0vKiBOZWVkIGFjY2VzcyB0byBTWVNDT04gcmVnaXN0ZXJzIGZvciBQQURtdXhpbmcgKi8KLSNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCi0jaW5jbHVkZSAicGFkbXV4LmgiCi0KIC8qIFJlZmVyZW5jZSB0byBHUElPIGJsb2NrIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrOwogCkBAIC0yODYsNiArMjgxLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdwaW9fdW5yZWdpc3Rlcl9jYWxsYmFjayk7CiAKKy8qIE5vbi16ZXJvIG1lYW5zIHZhbGlkICovCitpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQoreworCWlmIChudW1iZXIgPj0gMCAmJgorCSAgICBudW1iZXIgPCAoVTMwMF9HUElPX05VTV9QT1JUUyAqIFUzMDBfR1BJT19QSU5TX1BFUl9QT1JUKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9faXNfdmFsaWQpOworCiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewogCWlmIChncGlvX3BpbltncGlvXS51c2VycykKQEAgLTYwNiwxNCArNjExLDYgQEAKIAl3cml0ZWwoVTMwMF9HUElPX0NSX0JMT0NLX0NMS1JRX0VOQUJMRSwgdmlydGJhc2UgKyBVMzAwX0dQSU9fQ1IpOwogI2VuZGlmCiAKLQkvKiBTZXQgdXAgc29tZSBwYWRtdXhpbmcgaGVyZSAqLwotI2lmZGVmIENPTkZJR19NTUMKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9tbWMoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TUElfUEwwMjIKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkoKTsKLSNlbmRpZgotCiAJZ3Bpb19zZXRfaW5pdGlhbF92YWx1ZXMoKTsKIAogCWZvciAobnVtX2lycXMgPSAwIDsgbnVtX2lycXMgPCBVMzAwX0dQSU9fTlVNX1BPUlRTOyBudW1faXJxcysrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBSZWdpc3RlciBib2FyZCBpMmMgZGV2aWNlcworICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBidXMwX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQkudHlwZSA9ICJhYjMxMDAiLAorCQkuYWRkciA9IDB4NDgsCisJCS5pcnEgPSBJUlFfVTMwMF9JUlEwX0VYVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJ1czFfaTJjX2JvYXJkX2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisJeworCQkudHlwZSA9ICJmd2NhbSIsCisJCS5hZGRyID0gMHgxMCwKKwl9LAorCXsKKwkJLnR5cGUgPSAiZndjYW0iLAorCQkuYWRkciA9IDB4NWQsCisJfSwKKyNlbHNlCisJeyB9LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYnVzMF9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJ1czBfaTJjX2JvYXJkX2luZm8pKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBidXMxX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoYnVzMV9pMmNfYm9hcmRfaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9pMmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogUmVnaXN0ZXIgYm9hcmQgaTJjIGRldmljZXMKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaWZuZGVmIE1BQ0hfVTMwMF9JMkNfSAorI2RlZmluZSBNQUNIX1UzMDBfSTJDX0gKKworI2lmZGVmIENPTkZJR19JMkNfU1RVMzAwCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IHRoaXMgc3R1ZmYgaWYgbm8gSTJDIGFkYXB0ZXIgaXMgYXZhaWxhYmxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYzgxNzQxMi4uN2IxZmM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI1OCw2ICsyNTgsNyBAQAogI2RlZmluZSBQSU5fVE9fUE9SVCh2YWwpICh2YWwgPj4gMykKIAogLyogVGhlc2UgY2FuIGJlIGZvdW5kIGluIGFyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgKi8KK2V4dGVybiBpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKTsKIGV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKIGV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKIGV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBiZjEzNGJjLi5hYjAwMGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDYgKzM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFRDTSBtZW1vcnkgd2hlcmVhYm91dHMKKyAqLworI2RlZmluZSBJVENNX09GRlNFVAkweGZmZmYyMDAwCisjZGVmaW5lIElUQ01fRU5ECTB4ZmZmZjNmZmYKKyNkZWZpbmUgRFRDTV9PRkZTRVQJMHhmZmZmNDAwMAorI2RlZmluZSBEVENNX0VORAkweGZmZmY1ZmZmCisKKy8qCiAgKiBXZSBlbmFibGUgYSByZWFsIGJpZyBETUEgYnVmZmVyIGlmIG5lZWQgYmUuCiAgKi8KICNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl80TQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvc3lzY29uLmgKaW5kZXggMWM5MGQxYi4uNzQ0NGY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oCkBAIC0yNDAsOCArMjQwLDEzIEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfTUFTSwkJCQkoMHhDMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0NESQkJCQkoMHgwMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0VNSUYJCQkJKDB4NDAwMCkKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfQ0RJMgkJCQkoMHg4MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX1dDRE1BX0FQUF9HUElPCQkJKDB4QzAwMCkKKyNlbGlmIENPTkZJR19NQUNIX1UzMDBfQlMzNjUKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9HUElPCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfV0NETUEJCQkJKDB4QzAwMCkKKyNlbmRpZgogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX01BU0sJCQkJKDB4MzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9QREkJCQkJKDB4MDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9FR0cJCQkJKDB4MTAwMCkKQEAgLTM0NSwxOSArMzUwLDY5IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01NQ1JfTUFTSwkJCQkJKDB4MDAwMykKICNkZWZpbmUgVTMwMF9TWVNDT05fTU1DUl9NTUNfRkJfQ0xLX1NFTF9FTkFCTEUJCQkoMHgwMDAyKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NTUNSX01TUFJPX0ZSRVFTRUxfRU5BQkxFCQkJKDB4MDAwMSkKLQorLyogUHVsbCB1cC9kb3duIGNvbnRyb2wgKFIvVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUgkJCQkJKDB4MTA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9XQUlUX05fUFVfRU5BQkxFCQkoMHgwMjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9ORklGX1JFQURZX1BVX0VOQUJMRQkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfMTZCSVRfUFVfRU5BQkxFCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfOEJJVF9QVV9FTkFCTEUJCQkoMHgwMDQwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0tFWV9JTl9QVV9FTl9NQVNLCQkJKDB4MDAzRikKKy8qIFBhZG11eCAyIGNvbnRyb2wgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlIJCQkJCSgweDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9NQVNLCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfRU1JRl9TRFJBTQkJCSgweDAwNDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfTU1DCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9DREkyCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9NQVNLCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfRU1JRl9TRFJBTQkJCSgweDAxMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfTU1DCQkJKDB4MDIwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9DREkyCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9NQVNLCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfRU1JRl9TRFJBTQkJCSgweDA0MDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfTU1DCQkJKDB4MDgwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9DREkyCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19NQVNLCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfRU1JRl9TRFJBTQkJCSgweDEwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfTU1DCQkJKDB4MjAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19DREkyCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9NQVNLCQkJKDB4QzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfRU1JRl9TRFJBTQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfTU1DCQkJKDB4ODAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BQ0NfR1BJTwkJCSgweEMwMDApCiAvKiBUT0RPOiBNb3JlIFNZU0NPTiByZWdpc3RlcnMgbWlzc2luZyAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUgkJCQkJKDB4MTBjKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMV9NQVNLCQkJKDB4YzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTFfU1BJCQkJKDB4NDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTBfTUFTSwkJCSgweDMwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSX0FQUF9NSVNDXzEwX1NQSQkJCSgweDEwMDApCi0vKiBUT0RPOiBNaXNzaW5nIG90aGVyIGNvbmZpZ3MsIEkganVzdCBhZGRlZCB0aGUgU1BJIHN0dWZmICovCi0KKy8qIFRPRE86IE1pc3Npbmcgb3RoZXIgY29uZmlncyAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0UgkJCQkJKDB4MTY4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9NQVNLCQkJKDB4MDAwMykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfQVBQX0dQSU8JCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19NQVNLCQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfU01JQQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEzX1NNSUEyCQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQVBQX0dQSU8JCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9NQVNLCQkJKDB4MDAzMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfU01JQQkJCSgweDAwMTApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X0NESTIJCQkoMHgwMDIwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9BUFBfR1BJTwkJCSgweDAwMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE2X01BU0sJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9BUFBfR1BJT18xMwkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfQVBQX1VBUlQxX0NUUwkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfRU1JRl8xX1NUQVRJQ19DUzVfTgkoMHgwMjAwKQogLyogU1lTXzBfQ0xLX0NPTlRST0wgZmlyc3QgY2xvY2sgY29udHJvbCAxNmJpdCAoUi9XKSAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUgkJCQkJKDB4MTIwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9GSUVMRF9NQVNLCQkJCSgweDQzRkYpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC0zNzUsNiArNDMwLDcgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1IJCQkJCSgweDEyNCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfRklFTERfTUFTSwkJCQkoMHg0M0ZGKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19SRVEJCQkJKDB4NDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfUkVRX01PTklUT1IJCQkoMHgyMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19JTlYJCQkJKDB4MDIwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfRlJFUV9NQVNLCQkJKDB4MDFFMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfU0VMRUNUX01BU0sJCQkoMHgwMDFFKQpAQCAtMzkzLDYgKzQ0OSw3IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0ZJRUxEX01BU0sJCQkJKDB4QzNGRikKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xLX1NURUFMCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC00MjUsNiArNDgyLDQ0IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTUdFTl9DUl8wX0VNSUZfMF9TRFJBTQkJCSgweDAwMEMpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTTFHX01PREVfRU5BQkxFCQkJKDB4MDAwMikKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNVEc1X01PREVfRU5BQkxFCQkJKDB4MDAwMSkKKy8qIFNDX1BMTF9JUlFfQ09OVFJPTCAxNmJpdCAoUi9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSCQkJCQkoMHgwMTMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX01BU0sJCQkJCSgweDAwRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMjA4X0xPQ0tfTE9XX0VOQUJMRQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwyMDhfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDA0MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwxM19MT0NLX0xPV19FTkFCTEUJCSgweDAwMjApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMTNfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDAxMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDEzX1VOTE9DS19FTkFCTEUJCSgweDAwMDgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfSVJRTUFTS19QTEwxM19MT0NLX0VOQUJMRQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDIwOF9VTkxPQ0tfRU5BQkxFCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMjA4X0xPQ0tfRU5BQkxFCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9TVEFUVVMgMTYgYml0IChSLy0pICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1IJCQkJCSgweDAxMzQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1JfTUFTSwkJCQkJKDB4MDAwRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19VTkxPQ0tfSU5ECQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19MT0NLX0lORAkJCQkoMHgwMDA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDIwOF9VTkxPQ0tfSU5ECQkJKDB4MDAwMikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwyMDhfTE9DS19JTkQJCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9DTEVBUiAxNiBiaXQgKC0vVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFIJCQkJCSgweDAxMzgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX01BU0sJCQkJCSgweDAwMEYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1JXTUFTSwkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19VTkxPQ0tfU0MJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19MT0NLX1NDCQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDIwOF9VTkxPQ0tfU0MJCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwyMDhfTE9DS19TQwkJCSgweDAwMDEpCisvKiBDQU1JRl9DT05UUk9MIDE2IGJpdCAoLS9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSCQkJCQkoMHgwMTNDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX01BU0sJCQkJCSgweDBGRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfVEVTVE1PREVfTUFTSwkJKDB4MEYwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMAkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fTUFTSwkJKDB4MDBGMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fUE9SVDEJCSgweDAwQzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUkVTQ09OX1BPUlQwCQkoMHgwMDMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9NQVNLCQkoMHgwMDBGKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9QT1JUMQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19QV1JfRFdOX05fUE9SVDAJCSgweDAwMDMpCiAvKiBDbG9jayBhY3Rpdml0eSBvYnNlcnZhYmlsaXR5IHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVIJCQkJCSgweDE0MCkKICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVJfTUFTSwkJCQkJKDB4RkZGRikKQEAgLTUxMyw3ICs2MDgsNyBAQAogLyoqCiAgKiBDUFUgbWVkaXVtIGZyZXF1ZW5jeSBpbiBNSHoKICAqLwotI2RlZmluZSBTWVNDT05fQ1BVX0NMT0NLX01FRElVTSAgMTA0CisjZGVmaW5lIFNZU0NPTl9DUFVfQ0xPQ0tfTUVESVVNICAgNTIKIC8qKgogICogQ1BVIGxvdyBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KQEAgLTUyNyw3ICs2MjIsNyBAQAogLyoqCiAgKiBFTUlGIG1lZGl1bSBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KLSNkZWZpbmUgU1lTQ09OX0VNSUZfQ0xPQ0tfTUVESVVNIDEwNAorI2RlZmluZSBTWVNDT05fRU1JRl9DTE9DS19NRURJVU0gIDUyCiAvKioKICAqIEVNSUYgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTQxLDcgKzYzNiw3IEBACiAvKioKICAqIEFIQiBtZWRpdW0gZnJlcXVlbmN5IGluIE1IegogICovCi0jZGVmaW5lIFNZU0NPTl9BSEJfQ0xPQ0tfTUVESVVNICAgNTIKKyNkZWZpbmUgU1lTQ09OX0FIQl9DTE9DS19NRURJVU0gICAyNgogLyoqCiAgKiBBSEIgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTUzLDYgKzY0OCwxNSBAQAogICBTWVNDT05fQk1fVklERU9fRU5DCiB9OwogCisvKiBTZWxlY3RyIGEgcmVzaXN0b3Igb3IgYSBzZXQgb2YgcmVzaXN0b3JzICovCitlbnVtIHN5c2Nvbl9wdWxsX3VwX2Rvd24geworICBTWVNDT05fUFVfS0VZX0lOX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzhfQklUX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzE2X0JJVF9FTiwKKyAgU1lTQ09OX1BVX0VNSUZfMV9ORklGX1JFQURZX0VOLAorICBTWVNDT05fUFVfRU1JRl8xX05GSUZfV0FJVF9OX0VOLAorfTsKKwogLyoKICAqIE5vdGUgdGhhdCB0aGlzIGFycmF5IG11c3QgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBhcnJheSAiY2xrX3JlZyIKICAqIGluIHN5c2Nvbi5jCkBAIC01NzUsNiArNjc5LDcgQEAKICAgU1lTQ09OX0NMS0NPTlRST0xfU1BJLAogICBTWVNDT05fQ0xLQ09OVFJPTF9JMlMwX0NPUkUsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0kyUzFfQ09SRSwKKyAgU1lTQ09OX0NMS0NPTlRST0xfVUFSVDEsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FBSUYsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FIQiwKICAgU1lTQ09OX0NMS0NPTlRST0xfQVBFWCwKQEAgLTYwNCw3ICs3MDksOCBAQAogCiBlbnVtIHN5c2Nvbl9zeXNjbGtfcmVxIHsKICAgU1lTQ09OX1NZU0NMS1JFUV9ESVNBQkxFRCwKLSAgU1lTQ09OX1NZU0NMS1JFUV9BQ1RJVkVfTE9XCisgIFNZU0NPTl9TWVNDTEtSRVFfQUNUSVZFX0xPVywKKyAgU1lTQ09OX1NZU0NMS1JFUV9NT05JVE9SCiB9OwogCiBlbnVtIHN5c2Nvbl9jbGtfbW9kZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggNTg1Y2MwMS4uN2I2YjAxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtMTksMTUgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlICJtbWMuaCIKKyNpbmNsdWRlICJwYWRtdXguaCIKIAogc3RydWN0IG1tY2lfY2FyZF9ldmVudCB7CiAJc3RydWN0IGlucHV0X2RldiAqbW1jX2lucHV0OwogCWludCBtbWNfaW5zZXJ0ZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtxOwotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE0Niw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQgKm1tY2lfY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlICptbWNzZF9kZXZpY2UgPSAmYWRldi0+ZGV2OworCXN0cnVjdCBwbXggKnBteDsKIAlpbnQgcmV0ID0gMDsKIAogCW1tY2lfY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNpX2NhcmRfZXZlbnQpLCBHRlBfS0VSTkVMKTsKQEAgLTE1OCw2ICsxNjAsOCBAQAogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuc3RhdHVzID0gbW1jX3N0YXR1czsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fd3AgPSAtMTsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fY2QgPSAtMTsKKwltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJCU1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJbW1jc2RfZGV2aWNlLT5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJm1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGE7CiAKQEAgLTIwNyw2ICsyMTEsMjAgQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBtbWNpX2NhcmQpOwogCisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIE1NQy4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQobW1jc2RfZGV2aWNlLCBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcpOworCisJaWYgKElTX0VSUihwbXgpKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZ2V0IHBhZG11eCBoYW5kbGVcbiIpOworCWVsc2UgeworCQlyZXQgPSBwbXhfYWN0aXZhdGUobW1jc2RfZGV2aWNlLCBwbXgpOworCQlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKIAlyZXQgPSBncGlvX3JlZ2lzdGVyX2NhbGxiYWNrKFUzMDBfR1BJT19QSU5fTU1DX0NELCBtbWNpX2NhbGxiYWNrLAogCQkJCSAgICAgbW1jaV9jYXJkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jCmluZGV4IGYzNjY0NTYuLjRjOTNjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMKQEAgLTYsNTMgKzYsMzYyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgogICogVTMwMCBQQURNVVggZnVuY3Rpb25zCi0gKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Ci0gKgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bWFjaC91MzAwLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCiAjaW5jbHVkZSAicGFkbXV4LmgiCiAKLS8qIFNldCB0aGUgUEFEIE1VWCB0byByb3V0ZSB0aGUgTU1DIHJlYWRlciBjb3JyZWN0bHkgdG8gR1BJTzAuICovCi12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX21tYyh2b2lkKQotewotCXUxNiB2YWw7CitzdGF0aWMgREVGSU5FX01VVEVYKHBteF9tdXRleCk7CiAKLQl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsICY9IH5VMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTUFTSzsKLQl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTU1DOwotCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKK2NvbnN0IHUzMiBwbXhfcmVnaXN0ZXJzW10gPSB7CisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzJSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMzUiksCisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DNFIpCit9OworCisvKiBIaWdoIGxldmVsIGZ1bmN0aW9uYWxpdHkgKi8KKworLyogTGF6eSBkb2c6CisgKiBvbm1hc2sgPSB7CisgKiAgIHsiUE1DMUxSIiBtYXNrLCAiUE1DMUxSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMUhSIiBtYXNrLCAiUE1DMUhSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMlIiICBtYXNrLCAiUE1DMlIiICB2YWx1ZX0sCisgKiAgIHsiUE1DM1IiICBtYXNrLCAiUE1DM1IiICB2YWx1ZX0sCisgKiAgIHsiUE1DNFIiICBtYXNrLCAiUE1DNFIiICB2YWx1ZX0KKyAqIH0KKyAqLworc3RhdGljIHN0cnVjdCBwbXggbW1jX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiTU1DIiwKKwkub25tYXNrID0geworCQkgICB7VTMwMF9TWVNDT05fUE1DMUxSX01NQ1NEX01BU0ssCisJCSAgICBVMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTU1DU0R9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7VTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfTUFTSywKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEyX0FQUF9HUElPfQorCQkgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbXggc3BpX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfU1BJX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiU1BJIiwKKwkub25tYXNrID0ge3swLCAwfSwKKwkJICAge1UzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSyB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX01BU0sgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9NQVNLLAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEl9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9CisJCSAgIH0sCit9OworCisvKiBBdmFpbGFibGUgcGFkbXV4IHNldHRpbmdzICovCitzdGF0aWMgc3RydWN0IHBteCAqcG14X3NldHRpbmdzW10gPSB7CisJJm1tY19zZXR0aW5nLAorCSZzcGlfc2V0dGluZywKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWdpc3RlcnMoc3RydWN0IHBteCAqcG14LCBib29sIGFjdGl2YXRlKQoreworCXUxNiByZWd2YWwsIHZhbCwgbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9yZWdpc3RlcnMpOyBpKyspIHsKKwkJaWYgKGFjdGl2YXRlKQorCQkJdmFsID0gcG14LT5vbm1hc2tbaV0udmFsOworCQllbHNlCisJCQl2YWwgPSAwOworCisJCW1hc2sgPSBwbXgtPm9ubWFza1tpXS5tYXNrOworCQlpZiAobWFzayAhPSAwKSB7CisJCQlyZWd2YWwgPSByZWFkdyhwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJCXJlZ3ZhbCAmPSB+bWFzazsKKwkJCXJlZ3ZhbCB8PSB2YWw7CisJCQl3cml0ZXcocmVndmFsLCBwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJfQorCX0KIH0KIAotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCkKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKQogewotCXUxNiB2YWw7CisJaW50IGk7CisJc3RydWN0IHBteCAqcG14ID0gRVJSX1BUUigtRU5PRU5UKTsKIAotCS8qIFNldCB1cCBwYWRtdXhpbmcgc28gdGhlIFNQSSBwb3J0IGFuZCBpdHMgY2hpcHNlbGVjdHMgYXJlIGFjdGl2ZSAqLwotCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKLQkvKgotCSAqIEFjdGl2YXRlIHRoZSBTUEkgcG9ydCAoZGlzYWJsZSB0aGUgdXNlIG9mIHRoZXNlIHBpbnMgZm9yIGdlbmVyaWMKLQkgKiBHUElPLCBEU1AsIEFBSUYKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMSBmb3IgQ1MxIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMiBmb3IgQ1MyIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEk7Ci0Jd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChzZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgIT0gTlVMTCkgeworCQkJCVdBUk4oMSwgInBhZG11eDogcmVxdWlyZWQgc2V0dGluZyAiCisJCQkJICAgICAiaW4gdXNlIGJ5IGFub3RoZXIgY29uc3VtZXJcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwbXggPSBwbXhfc2V0dGluZ3NbaV07CisJCQkJcG14LT5kZXYgPSBkZXY7CisJCQkJZGV2X2RiZyhkZXYsICJwYWRtdXg6IHNldHRpbmcgbnIgJWQgaXMgbm93ICIKKwkJCQkJImJvdW5kIHRvICVzIGFuZCByZWFkeSB0byB1c2VcbiIsCisJCQkJCXNldHRpbmcsIGRldl9uYW1lKGRldikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKworCXJldHVybiBwbXg7CiB9CitFWFBPUlRfU1lNQk9MKHBteF9nZXQpOworCitpbnQgcG14X3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCWlmIChwbXggPT0gTlVMTCB8fCBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChwbXgtPnNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChkZXYgIT0gcG14LT5kZXYpIHsKKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCByZWxlYXNlIGhhbmRsZSBhcyAiCisJCQkJCSJpdCBpcyBib3VuZCB0byBhbm90aGVyIGNvbnN1bWVyXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlwbXhfc2V0dGluZ3NbaV0tPmRldiA9IE5VTEw7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfcHV0KTsKKworaW50IHBteF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaSwgaiwgcmV0OworCXJldCA9IDA7CisKKwlpZiAocG14ID09IE5VTEwgfHwgZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgYml0cyBhcmUgbm90IHVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKworCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgPT0gTlVMTCB8fCBwbXhfc2V0dGluZ3NbaV0gPT0gcG14KQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5vbm1hc2tbal0ubWFzayAmIHBteC0+CisJCQkJb25tYXNrW2pdLm1hc2spIHsKKwkJCQkvKiBNb3JlIHRoYW4gb25lIGVudHJ5IG9uIHRoZSBzYW1lIGJpdHMgKi8KKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCBhY3RpdmF0ZSAiCisJCQkJCSJzZXR0aW5nLiBCaXQgY29uZmxpY3Qgd2l0aCAiCisJCQkJCSJhbiBhY3RpdmUgc2V0dGluZ1xuIik7CisKKwkJCQlyZXQgPSAtRVVTRVJTOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKwl1cGRhdGVfcmVnaXN0ZXJzKHBteCwgdHJ1ZSk7CisJcG14LT5hY3RpdmF0ZWQgPSB0cnVlOworCWRldl9kYmcoZGV2LCAicGFkbXV4OiBzZXR0aW5nIG5yICVkIGlzIGFjdGl2YXRlZFxuIiwKKwkJcG14LT5zZXR0aW5nKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2FjdGl2YXRlKTsKKworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpOworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHBteCA9PSBOVUxMIHx8IGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHBteF9zZXR0aW5nc1tpXS0+ZGV2ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG14LT5zZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAoZGV2ICE9IHBteC0+ZGV2KSB7CisJCQkJV0FSTigxLCAicGFkbXV4OiBjYW5ub3QgZGVhY3RpdmF0ZSAiCisJCQkJICAgICAicG14IHNldHRpbmcgYXMgaXQgd2FzIGFjdGl2YXRlZCAiCisJCQkJICAgICAiYnkgYW5vdGhlciBjb25zdW1lclxuIik7CisKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXVwZGF0ZV9yZWdpc3RlcnMocG14LCBmYWxzZSk7CisJCQkJcG14X3NldHRpbmdzW2ldLT5kZXYgPSBOVUxMOworCQkJCXBteC0+YWN0aXZhdGVkID0gZmFsc2U7CisJCQkJcmV0ID0gMDsKKwkJCQlkZXZfZGJnKGRldiwgInBhZG11eDogc2V0dGluZyBuciAlZCBpcyBkZWFjdGl2YXRlZCIsCisJCQkJCXBteC0+c2V0dGluZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2RlYWN0aXZhdGUpOworCisvKgorICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBJZiBpdCBpcyB0byBiZSBleHBvcnRlZCwKKyAqIGl0IHNob3VsZCBiZSByZWVudHJhbnQuIE5vdGljZSB0aGF0IHBteF9hY3RpdmF0ZQorICogKGkuZS4gcnVudGltZSBzZXR0aW5ncykgYWx3YXlzIG92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgcG14X3NldF9kZWZhdWx0KHZvaWQpCit7CisJLyogVXNlZCB0byBpZGVudGlmeSBzZXZlcmFsIGVudHJpZXMgb24gdGhlIHNhbWUgYml0cyAqLworCXUxNiBtb2RiaXRzW0FSUkFZX1NJWkUocG14X3JlZ2lzdGVycyldOworCisJaW50IGksIGo7CisKKwltZW1zZXQobW9kYml0cywgMCwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKSAqIHNpemVvZih1MTYpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmICghcG14X3NldHRpbmdzW2ldLT5kZWZhdWx0X29uKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgb24gdGhlIHNhbWUgYml0cyAqLworCQkJaWYgKG1vZGJpdHNbal0gJiBwbXhfc2V0dGluZ3NbaV0tPm9ubWFza1tqXS5tYXNrKSB7CisJCQkJQlVHKCk7CisJCQkJcmV0dXJuIC1FVVNFUlM7CisJCQl9CisJCQltb2RiaXRzW2pdIHw9IHBteF9zZXR0aW5nc1tpXS0+b25tYXNrW2pdLm1hc2s7CisJCX0KKwkJdXBkYXRlX3JlZ2lzdGVycyhwbXhfc2V0dGluZ3NbaV0sIHRydWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfVTMwMF9ERUJVRykpCitzdGF0aWMgaW50IHBteF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzZXFfcHJpbnRmKHMsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKHMsICJTRVRUSU5HICAgICBCT1VORCBUTyBERVZJQ0UgICAgICAgICAgICAgICBTVEFURVxuIik7CisJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKwkJLyogRm9ybWF0IHBteCBhbmQgZGV2aWNlIG5hbWUgbmljZWx5ICovCisJCWNoYXIgY2RwWzMzXTsKKwkJaW50IGNoYXJzOworCisJCWNoYXJzID0gc25wcmludGYoJmNkcFswXSwgMTcsICIlcyIsIHBteF9zZXR0aW5nc1tpXS0+bmFtZSk7CisJCXdoaWxlIChjaGFycyA8IDE2KSB7CisJCQljZHBbY2hhcnNdID0gJyAnOworCQkJY2hhcnMrKzsKKwkJfQorCQljaGFycyA9IHNucHJpbnRmKCZjZHBbMTZdLCAxNywgIiVzIiwgcG14X3NldHRpbmdzW2ldLT5kZXYgPworCQkJCWRldl9uYW1lKHBteF9zZXR0aW5nc1tpXS0+ZGV2KSA6ICJOL0EiKTsKKwkJd2hpbGUgKGNoYXJzIDwgMTYpIHsKKwkJCWNkcFtjaGFycysxNl0gPSAnICc7CisJCQljaGFycysrOworCQl9CisJCWNkcFszMl0gPSAnXDAnOworCisJCXNlcV9wcmludGYocywKKwkJCSIlc1x0JXNcbiIsCisJCQkmY2RwWzBdLAorCQkJcG14X3NldHRpbmdzW2ldLT5hY3RpdmF0ZWQgPworCQkJIkFDVElWQVRFRCIgOiAiREVBQ1RJVkFURUQiCisJCQkpOworCisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG14X3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXhfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG14X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG14X3JlYWRfZGVidWdmcyh2b2lkKQoreworCS8qIEV4cG9zZSBhIHNpbXBsZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byB2aWV3IHBteCBzZXR0aW5ncyAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwYWRtdXgiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgICBOVUxMLCBOVUxMLAorCQkJCSAgICZwbXhfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGNvbWUgaW4gYWZ0ZXIgdGhlIGNvcmVfaW5pdGNhbGwoKSwKKyAqIGJlY2F1c2UgZGVidWdmcyBpcyBub3QgYXZhaWxhYmxlIHVudGlsCisgKiB0aGUgc3Vic3lzdGVtcyBjb21lIHVwLgorICovCittb2R1bGVfaW5pdChpbml0X3BteF9yZWFkX2RlYnVnZnMpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBteF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBteF9zZXRfZGVmYXVsdCgpOworCisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlwcl9jcml0KCJwYWRtdXg6IGRlZmF1bHQgc2V0dGluZ3MgY291bGQgbm90IGJlIHNldFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdW1lcnMgKi8KK2NvcmVfaW5pdGNhbGwocG14X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oCmluZGV4IDhjMjA5OWEuLjZlOGI4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmgKQEAgLTYsMTQgKzYsMzQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBVMzAwIFBBRE1VWCBBUEkKLSAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KLSAqCisgKiBBdXRob3I6IE1hcnRpbiBQZXJzc29uIDxtYXJ0aW4ucGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAjZGVmaW5lIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAKLXZvaWQgcG14X3NldF9taXNzaW9uX21vZGVfbW1jKHZvaWQpOwotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCk7CitlbnVtIHBteF9zZXR0aW5ncyB7CisJVTMwMF9BUFBfUE1YX01NQ19TRVRUSU5HLAorCVUzMDBfQVBQX1BNWF9TUElfU0VUVElORworfTsKKworc3RydWN0IHBteF9vbm1hc2sgeworCXUxNiBtYXNrOwkJLyogTWFzayBiaXRzICovCisJdTE2IHZhbDsJCS8qIFZhbHVlIHdoZW4gYWN0aXZlICovCit9OworCitzdHJ1Y3QgcG14IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZW51bSBwbXhfc2V0dGluZ3Mgc2V0dGluZzsKKwljaGFyICpuYW1lOworCWJvb2wgYWN0aXZhdGVkOworCWJvb2wgZGVmYXVsdF9vbjsKKwlzdHJ1Y3QgcG14X29ubWFzayBvbm1hc2tbXTsKK307CisKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKTsKK2ludCBwbXhfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKK2ludCBwbXhfYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlODg3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9zcGkuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgInBhZG11eC5oIgorCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIGFjdHVhbCBkZXZpY2VzIG9uIHRoZSBTU1AvU1BJIGJ1cworICovCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWQorc3RhdGljIHZvaWQgc2VsZWN0X2R1bW15X2NoaXAodTMyIGNoaXBzZWxlY3QpCit7CisJcHJfZGVidWcoIkNPUkU6ICVzIGNhbGxlZCB3aXRoIENTPTB4JXggKCVzKVxuIiwKKwkJIF9fZnVuY19fLAorCQkgY2hpcHNlbGVjdCwKKwkJIGNoaXBzZWxlY3QgPyAidW5zZWxlY3QgY2hpcCIgOiAic2VsZWN0IGNoaXAiKTsKKwkvKgorCSAqIEhlcmUgeW91IHdvdWxkIHdyaXRlIHRoZSBjaGlwIHNlbGVjdCB2YWx1ZSB0byB0aGUgR1BJTyBwaW5zIGlmCisJICogdGhpcyB3YXMgYSByZWFsIGNoaXAgKGJ1dCB0aGlzIGlzIGEgbG9vcGJhY2sgZHVtbXkpLgorCSAqLworfQorCitzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgZHVtbXlfY2hpcF9pbmZvID0geworCS8qIE5vbWluYWxseSB0aGlzIGlzIExPT1BCQUNLX0RJU0FCTEVELCBidXQgdGhpcyBpcyBvdXIgZHVtbXkgY2hpcCEgKi8KKwkubGJtID0gTE9PUEJBQ0tfRU5BQkxFRCwKKwkvKgorCSAqIGF2YWlsYWJsZSBQT0xMSU5HX1RSQU5TRkVSIGFuZCBJTlRFUlJVUFRfVFJBTlNGRVIsCisJICogRE1BX1RSQU5TRkVSIGRvZXMgbm90IHdvcmsKKwkgKi8KKwkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLmlmYWNlID0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksCisJLyogV2UgY2FuIG9ubHkgYWN0IGFzIG1hc3RlciBidXQgU1NQX1NMQVZFIGlzIHBvc3NpYmxlIGluIHRoZW9yeSAqLworCS5oaWVyYXJjaHkgPSBTU1BfTUFTVEVSLAorCS8qIDAgPSBkcml2ZSBUWCBldmVuIGFzIHNsYXZlLCAxID0gZG8gbm90IGRyaXZlIFRYIGFzIHNsYXZlICovCisJLnNsYXZlX3R4X2Rpc2FibGUgPSAwLAorCS8qIExTQiBmaXJzdCAqLworCS5lbmRpYW5fdHggPSBTU1BfVFhfTFNCLAorCS5lbmRpYW5fcnggPSBTU1BfUlhfTFNCLAorCS5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzgsIC8qIHVzZWQgdG8gYmUgMTIgaW4gc29tZSBkZWZhdWx0ICovCisJLnJ4X2xldl90cmlnID0gU1NQX1JYXzFfT1JfTU9SRV9FTEVNLAorCS50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DLAorCS5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFLAorCS5jbGtfcG9sID0gU1NQX0NMS19QT0xfSURMRV9MT1csCisJLmN0cmxfbGVuID0gU1NQX0JJVFNfMTIsCisJLndhaXRfc3RhdGUgPSBTU1BfTVdJUkVfV0FJVF9aRVJPLAorCS5kdXBsZXggPSBTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIHlvdSBpbnNlcnQgYSBjYWxsIHRvIGEgZnVuY3Rpb24gdG8gZW5hYmxlIENTCisJICogKHVzdWFsbHkgR1BJTykgZm9yIGEgY2VydGFpbiBjaGlwLgorCSAqLworCS5jc19jb250cm9sID0gc2VsZWN0X2R1bW15X2NoaXAsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdTMwMF9zcGlfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVkKKwl7CisJCS8qIEEgZHVtbXkgY2hpcCB1c2VkIGZvciBsb29wYmFjayB0ZXN0cyAqLworCQkubW9kYWxpYXMgICAgICAgPSAic3BpLWR1bW15IiwKKwkJLyogUmVhbGx5IGR1bW15LCBwYXNzIGluIGFkZGl0aW9uYWwgY2hpcCBjb25maWcgaGVyZSAqLworCQkucGxhdGZvcm1fZGF0YSAgPSBOVUxMLAorCQkvKiBUaGlzIGRlZmluZXMgaG93IHRoZSBjb250cm9sbGVyIHNoYWxsIGhhbmRsZSB0aGUgZGV2aWNlICovCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZHVtbXlfY2hpcF9pbmZvLAorCQkvKiAuaXJxIC0gbm8gZXh0ZXJuYWwgSVJRIHJvdXRlZCBmcm9tIHRoaXMgZGV2aWNlICovCisJCS5tYXhfc3BlZWRfaHogICA9IDEwMDAwMDAsCisJCS5idXNfbnVtICAgICAgICA9IDAsIC8qIE9ubHkgb25lIGJ1cyBvbiB0aGlzIGNoaXAgKi8KKwkJLmNoaXBfc2VsZWN0ICAgID0gMCwKKwkJLyogTWVhbnMgU1BJX0NTX0hJR0gsIGNoYW5nZSBpZiBlLmcgbG93IENTICovCisJCS5tb2RlICAgICAgICAgICA9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkvKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIFNQSSBidXNlcyB0aGlzIHZhcmllcywgd2UgaGF2ZSBvbmx5IGJ1cyAwICovCisJLmJ1c19pZCA9IDAsCisJLyogU2V0IHRoaXMgdG8gMSB3aGVuIHdlIHRoaW5rIHdlIGdvdCBETUEgd29ya2luZyAqLworCS5lbmFibGVfZG1hID0gMCwKKwkvKgorCSAqIE9uIHRoZSBBUFAgQ1BVIEdQSU8gNCwgNSBhbmQgNiBhcmUgY29ubmVjdGVkIGFzIGdlbmVyaWMKKwkgKiBjaGlwIHNlbGVjdHMgZm9yIFNQSS4gKFNhbWUgb24gVTMzMCwgVTMzNSBhbmQgVTM2NS4pCisJICogVE9ETzogbWFrZSBzdXJlIHRoZSBHUElPIGRyaXZlciBjYW4gc2VsZWN0IHRoZXNlIHByb3Blcmx5CisJICogYW5kIGRvIHBhZG11eGluZyBhY2NvcmRpbmdseSB0b28uCisJICovCisJLm51bV9jaGlwc2VsZWN0ID0gMywKK307CisKKwordm9pZCBfX2luaXQgdTMwMF9zcGlfaW5pdChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHBteCAqcG14OworCisJYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3NwX3BsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIFNQSS4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQoJmFkZXYtPmRldiwgVTMwMF9BUFBfUE1YX1NQSV9TRVRUSU5HKTsKKworCWlmIChJU19FUlIocG14KSkKKwkJZGV2X3dhcm4oJmFkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgcGFkbXV4IGhhbmRsZVxuIik7CisJZWxzZSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcG14X2FjdGl2YXRlKCZhZGV2LT5kZXYsIHBteCk7CisJCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJCWRldl93YXJuKCZhZGV2LT5kZXYsICJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKK30KK3ZvaWQgX19pbml0IHUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKKwkvKiBSZWdpc3RlciBhbnkgU1BJIGRldmljZXMgKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1MzAwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHUzMDBfc3BpX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvc3BpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2lmbmRlZiBTUElfSAorI2RlZmluZSBTUElfSAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisKKyNpZmRlZiBDT05GSUdfU1BJX1BMMDIyCit2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldik7Cit2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IFNQSSBzdXBwb3J0IGlmIFBMMDIyIGlzIG5vdCBzZWxlY3RlZCAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwppbmRleCBjY2U1MzIwLi4yNmQyNmY1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKQEAgLTM0Niw2ICszNDYsMjEgQEAKIAkuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKKy8qCisgKiBPdmVycmlkZSB0aGUgZ2xvYmFsIHdlYWsgc2NoZWRfY2xvY2sgc3ltYm9sIHdpdGggdGhpcworICogbG9jYWwgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyB0aGUgY2xvY2tzb3VyY2UgdG8gZ2V0IHNvbWUKKyAqIGJldHRlciByZXNvbHV0aW9uIHdoZW4gc2NoZWR1bGluZyB0aGUga2VybmVsLiBXZSBhY2NlcHQgdGhhdAorICogdGhpcyB3cmFwcyBhcm91bmQgZm9yIG5vdywgc2luY2UgaXQgaXMganVzdCBhIHJlbGF0aXZlIHRpbWUKKyAqIHN0YW1wLiAoSW5zcGlyZWQgYnkgT01BUCBpbXBsZW1lbnRhdGlvbi4pCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjbG9ja3NvdXJjZV91MzAwXzFtaHoucmVhZCgKKwkJCQkgICZjbG9ja3NvdXJjZV91MzAwXzFtaHopLAorCQkJCSAgY2xvY2tzb3VyY2VfdTMwMF8xbWh6Lm11bHQsCisJCQkJICBjbG9ja3NvdXJjZV91MzAwXzFtaHouc2hpZnQpOworfQorCiAKIC8qCiAgKiBUaGlzIHNldHMgdXAgdGhlIHN5c3RlbSB0aW1lcnMsIGNsb2NrIHNvdXJjZSBhbmQgY2xvY2sgZXZlbnQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggOTc1ZWFlNC4uZTEzYmU3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NudDMyX3RvXzYzLmg+CkBAIC00Nyw3ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0zNjksNyArMzY5LDcgQEAKIAlyZXR1cm4gcmVhZGwoVkVSU0FUSUxFX1NZU01DSSkgJiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYwppbmRleCA5YWY4ZDgxLi4yMzljZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zMSw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKIApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBJUlFfTU1DSTFBCUlSUV9TSUNfTU1DSTFBCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMxX3BsYXRfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzFfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IG1tY19zdGF0dXMsCiAJLmdwaW9fd3AJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDVmZTU5NWEuLjkyNjRkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTcsNyArMTcsNyBAQAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCWhlbHAKIAkgIFRoZSBBUk02MTAgaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgQVJNMyBwcm9jZXNzb3IKIAkgIGFuZCB3YXMgcHJvZHVjZWQgYnkgVkxTSSBUZWNobm9sb2d5IEluYy4KQEAgLTMxLDcgKzMxLDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNAogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTcgcHJvY2Vzc29yIGNvcmUKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1YzIGlmIE1NVQogCXNlbGVjdCBDUFVfVExCX1YzIGlmIE1NVQotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAloZWxwCiAJICBBIDMyLWJpdCBSSVNDIG1pY3JvcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBBUk03IHByb2Nlc3NvciBjb3JlCiAJICBkZXNpZ25lZCBieSBBZHZhbmNlZCBSSVNDIE1hY2hpbmVzIEx0ZC4gVGhlIEFSTTcxMCBpcyB0aGUKQEAgLTY0LDcgKzY0LDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTgzLDcgKzgzLDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WMwkjIGFsdGhvdWdoIHRoZSBjb3JlIGlzIHY0dAogCXNlbGVjdCBDUFVfQ1AxNV9NUFUKIAloZWxwCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKIAloZWxwCiAJICBBIDMyLWJpdCBSSVNDIG1pY3JvcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBBUk05IHByb2Nlc3NvciBjb3JlCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTIyLDEwICsxMjIsNyBAQAogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk05MjBUIGlzIGxpY2Vuc2VkIHRvIGJlIHByb2R1Y2VkIGJ5IG51bWVyb3VzIHZlbmRvcnMsCi0JICBhbmQgaXMgdXNlZCBpbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgotCi0JICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBNYXZlcmljayBFUDkzMTIgYXQKLQkgIDxodHRwOi8vbGludXhkZXZpY2VzLmNvbS9wcm9kdWN0cy9QRDIzODI4NjYwNjguaHRtbD4uCisJICBhbmQgaXMgdXNlZCBpbiB0aGUgQ2lycnVzIEVQOTN4eCBhbmQgdGhlIFNhbXN1bmcgUzNDMjQxMC4KIAogCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyMFQgcHJvY2Vzc29yLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KQEAgLTEzNSw3ICsxMzIsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xNTQsNyArMTUxLDcgQEAKICAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQMQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xNzMsNyArMTcwLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTkyNlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUSgotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCkBAIC0xOTEsNyArMTg4LDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DQUNIRV9GQQpAQCAtMjEwLDcgKzIwNyw3IEBACiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTVBVCiAJaGVscApAQCAtMjI4LDcgKzIyNSw3IEBACiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NUFUKIAloZWxwCkBAIC0yNDQsNyArMjQxLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjBUIChyZXYgMCkgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0yNjIsNyArMjU5LDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjBFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMjc1LDcgKzI3Miw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk0xMDIyRSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUgIyBjYW4gcHJvYmFibHkgZG8gYmV0dGVyCkBAIC0yOTMsNyArMjkwLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjZFSi1TIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQgIyBCdXQgbmVlZCBKYXplbGxlLCBidXQgRVY1VEogaWdub3JlcyBiaXQgMTAKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKQEAgLTMxMSw3ICszMDgsNyBAQAogCXNlbGVjdCBDUFVfMzJ2MyBpZiBBUkNIX1JQQwogCXNlbGVjdCBDUFVfMzJ2NCBpZiAhQVJDSF9SUEMKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTMzMSw3ICszMjgsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTM0Miw3ICszMzksNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNTIsNyArMzQ5LDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQpAQCAtMzYzLDcgKzM2MCw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKQEAgLTM3NCw3ICszNzEsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX0ZFUk9DRU9OIGlmIE1NVQpAQCAtMzk0LDcgKzM5MSw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk0gVjYgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfQUJSVF9FVjYKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y2CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtNDIwLDcgKzQxNyw3IEBACiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKLQlzZWxlY3QgQ1BVX1BBQlJUX0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX1Y3CiAJc2VsZWN0IENQVV9DQUNIRV9WNwogCXNlbGVjdCBDUFVfQ0FDSEVfVklQVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTQ4MiwxMCArNDc5LDEzIEBACiBjb25maWcgQ1BVX0FCUlRfRVY3CiAJYm9vbAogCi1jb25maWcgQ1BVX1BBQlJUX0lGQVIKK2NvbmZpZyBDUFVfUEFCUlRfTEVHQUNZCiAJYm9vbAogCi1jb25maWcgQ1BVX1BBQlJUX05PSUZBUgorY29uZmlnIENQVV9QQUJSVF9WNgorCWJvb2wKKworY29uZmlnIENQVV9QQUJSVF9WNwogCWJvb2wKIAogIyBUaGUgY2FjaGUgbW9kZWwKQEAgLTc3MSwzICs3NzEsOCBAQAogCXNlbGVjdCBPVVRFUl9DQUNIRQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEwyIGNhY2hlIG9uIFhTY2FsZTMuCisKK2NvbmZpZyBBUk1fTDFfQ0FDSEVfU0hJRlQKKwlpbnQKKwlkZWZhdWx0IDYgaWYgQVJDSF9PTUFQMworCWRlZmF1bHQgNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUgYi9hcmNoL2FybS9tbS9NYWtlZmlsZQppbmRleCA2M2UzZjZkLi4wNTVjYjJhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDEwIEBACiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY2KQkrPSBhYm9ydC1ldjYubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNykJKz0gYWJvcnQtZXY3Lm8KIAorb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1kpCSs9IHBhYm9ydC1sZWdhY3kubworb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9WNikJKz0gcGFib3J0LXY2Lm8KK29iai0kKENPTkZJR19DUFVfUEFCUlRfVjcpCSs9IHBhYm9ydC12Ny5vCisKIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjMpCSs9IGNhY2hlLXYzLm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjQpCSs9IGNhY2hlLXY0Lm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjRXVCkJKz0gY2FjaGUtdjR3dC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwppbmRleCA4ZjVjMTNmLi4yOTVlMjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC0xMjEsMTEgKzEyMiwxMyBAQAogICoJLSB0aGUgSWNhY2hlIGRvZXMgbm90IHJlYWQgZGF0YSBmcm9tIHRoZSB3cml0ZSBidWZmZXIKICAqLwogRU5UUlkodjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKLQorIFVOV0lORCguZm5zdGFydAkJKQogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKIAliaWMJcjAsIHIwLCAjQ0FDSEVfTElORV9TSVpFIC0gMQotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBsaW5lCisxOgorIFVTRVIoCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCSkJQCBjbGVhbiBEIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfTElORV9TSVpFCisyOgogCWNtcAlyMCwgcjEKIAlibG8JMWIKICNlbmRpZgpAQCAtMTQzLDYgKzE0NiwxOSBAQAogCW1vdglwYywgbHIKIAogLyoKKyAqIEZhdWx0IGhhbmRsaW5nIGZvciB0aGUgY2FjaGUgb3BlcmF0aW9uIGFib3ZlLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHIwCisgKiBpc24ndCBtYXBwZWQsIGp1c3QgdHJ5IHRoZSBuZXh0IHBhZ2UuCisgKi8KKzkwMDE6CisJbW92CXIwLCByMCwgbHNyICMxMgorCW1vdglyMCwgcjAsIGxzbCAjMTIKKwlhZGQJcjAsIHIwLCAjNDA5NgorCWIJMmIKKyBVTldJTkQoLmZuZW5kCQkpCitFTkRQUk9DKHY2X2NvaGVyZW50X3VzZXJfcmFuZ2UpCitFTkRQUk9DKHY2X2NvaGVyZW50X2tlcm5fcmFuZ2UpCisKKy8qCiAgKgl2Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQogICoKICAqCUVuc3VyZSB0aGF0IHRoZSBkYXRhIGhlbGQgaW4gdGhlIHBhZ2Uga2FkZHIgaXMgd3JpdHRlbiBiYWNrCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCBiZGEwZWMzLi5lMWJkOTc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC0xNTMsMTMgKzE1NCwxNiBAQAogICoJLSB0aGUgSWNhY2hlIGRvZXMgbm90IHJlYWQgZGF0YSBmcm9tIHRoZSB3cml0ZSBidWZmZXIKICAqLwogRU5UUlkodjdfY29oZXJlbnRfdXNlcl9yYW5nZSkKKyBVTldJTkQoLmZuc3RhcnQJCSkKIAlkY2FjaGVfbGluZV9zaXplIHIyLCByMwogCXN1YglyMywgcjIsICMxCiAJYmljCXIwLCByMCwgcjMKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzExLCAxCQlAIGNsZWFuIEQgbGluZSB0byB0aGUgcG9pbnQgb2YgdW5pZmljYXRpb24KKzE6CisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJKQlAIGNsZWFuIEQgbGluZSB0byB0aGUgcG9pbnQgb2YgdW5pZmljYXRpb24KIAlkc2IKLQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBsaW5lCisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkpCUAgaW52YWxpZGF0ZSBJIGxpbmUKIAlhZGQJcjAsIHIwLCByMgorMjoKIAljbXAJcjAsIHIxCiAJYmxvCTFiCiAJbW92CXIwLCAjMApAQCAtMTY3LDYgKzE3MSwxNyBAQAogCWRzYgogCWlzYgogCW1vdglwYywgbHIKKworLyoKKyAqIEZhdWx0IGhhbmRsaW5nIGZvciB0aGUgY2FjaGUgb3BlcmF0aW9uIGFib3ZlLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHIwCisgKiBpc24ndCBtYXBwZWQsIGp1c3QgdHJ5IHRoZSBuZXh0IHBhZ2UuCisgKi8KKzkwMDE6CisJbW92CXIwLCByMCwgbHNyICMxMgorCW1vdglyMCwgcjAsIGxzbCAjMTIKKwlhZGQJcjAsIHIwLCAjNDA5NgorCWIJMmIKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKHY3X2NvaGVyZW50X2tlcm5fcmFuZ2UpCiBFTkRQUk9DKHY3X2NvaGVyZW50X3VzZXJfcmFuZ2UpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwppbmRleCA2YmRhNzZhLi5hOWUyMmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb250ZXh0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC01MCwxMCArNTAsNyBAQAogCQlpc2IoKTsKIAkJZmx1c2hfdGxiX2FsbCgpOwogCQlpZiAoaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkgewotCQkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJLWNhY2hlXG4iCi0JCQkgICAgIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDYJQCBmbHVzaCBCVEFDL0JUQlxuIgotCQkJICAgIDoKLQkJCSAgICA6ICJyIiAoMCkpOworCQkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJCQlkc2IoKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGIzMDkyNWYuLmI5NTkwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIAlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAotCWlmIChtYXNrICE9IDB4ZmZmZmZmZmYpCisJaWYgKG1hc2sgPCAweGZmZmZmZmZmVUxMKQogCQlnZnAgfD0gR0ZQX0RNQTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlcyhnZnAsIG9yZGVyKTsKQEAgLTI4OSw3ICsyODksNyBAQAogCWlmICghbWFzaykKIAkJZ290byBlcnJvcjsKIAotCWlmIChtYXNrICE9IDB4ZmZmZmZmZmYpCisJaWYgKG1hc2sgPCAweGZmZmZmZmZmVUxMKQogCQlnZnAgfD0gR0ZQX0RNQTsKIAl2aXJ0ID0ga21hbGxvYyhzaXplLCBnZnApOwogCWlmICghdmlydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCBiYzAwOTlkLi5kMGQxN2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCkBAIC0xNTMsMTQgKzE1MywxMSBAQAogCiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQlpZiAobWFwcGluZykgewogI2lmbmRlZiBDT05GSUdfU01QCi0JCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7Ci0KLQkJaWYgKGRpcnR5KQotCQkJX19mbHVzaF9kY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkKKwkJX19mbHVzaF9kY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKICNlbmRpZgotCisJaWYgKG1hcHBpbmcpIHsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKIAkJCW1ha2VfY29oZXJlbnQobWFwcGluZywgdm1hLCBhZGRyLCBwZm4pOwogCQllbHNlIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGNjODgyOWQuLjEwZTA2ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjUsNiArMjUsMTkgQEAKIAogI2luY2x1ZGUgImZhdWx0LmgiCiAKKy8qCisgKiBGYXVsdCBzdGF0dXMgcmVnaXN0ZXIgZW5jb2RpbmdzLiAgV2Ugc3RlYWwgYml0IDMxIGZvciBvdXIgb3duIHB1cnBvc2VzLgorICovCisjZGVmaW5lIEZTUl9MTlhfUEYJCSgxIDw8IDMxKQorI2RlZmluZSBGU1JfV1JJVEUJCSgxIDw8IDExKQorI2RlZmluZSBGU1JfRlM0CQkJKDEgPDwgMTApCisjZGVmaW5lIEZTUl9GUzNfMAkJKDE1KQorCitzdGF0aWMgaW5saW5lIGludCBmc3JfZnModW5zaWduZWQgaW50IGZzcikKK3sKKwlyZXR1cm4gKGZzciAmIEZTUl9GUzNfMCkgfCAoZnNyICYgRlNSX0ZTNCkgPj4gNjsKK30KKwogI2lmZGVmIENPTkZJR19NTVUKIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCkBAIC0xODIsMTggKzE5NSwzNSBAQAogI2RlZmluZSBWTV9GQVVMVF9CQURNQVAJCTB4MDEwMDAwCiAjZGVmaW5lIFZNX0ZBVUxUX0JBREFDQ0VTUwkweDAyMDAwMAogCi1zdGF0aWMgaW50CisvKgorICogQ2hlY2sgdGhhdCB0aGUgcGVybWlzc2lvbnMgb24gdGhlIFZNQSBhbGxvdyBmb3IgdGhlIGZhdWx0IHdoaWNoIG9jY3VycmVkLgorICogSWYgd2UgZW5jb3VudGVyZWQgYSB3cml0ZSBmYXVsdCwgd2UgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24sIG90aGVyd2lzZQorICogd2UgYWxsb3cgYW55IHBlcm1pc3Npb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhY2Nlc3NfZXJyb3IodW5zaWduZWQgaW50IGZzciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDOworCisJaWYgKGZzciAmIEZTUl9XUklURSkKKwkJbWFzayA9IFZNX1dSSVRFOworCWlmIChmc3IgJiBGU1JfTE5YX1BGKQorCQltYXNrID0gVk1fRVhFQzsKKworCXJldHVybiB2bWEtPnZtX2ZsYWdzICYgbWFzayA/IGZhbHNlIDogdHJ1ZTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMKIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlpbnQgZmF1bHQsIG1hc2s7CisJaW50IGZhdWx0OwogCiAJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCWZhdWx0ID0gVk1fRkFVTFRfQkFETUFQOwotCWlmICghdm1hKQorCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHZtYS0+dm1fc3RhcnQgPiBhZGRyKQorCWlmICh1bmxpa2VseSh2bWEtPnZtX3N0YXJ0ID4gYWRkcikpCiAJCWdvdG8gY2hlY2tfc3RhY2s7CiAKIAkvKgpAQCAtMjAxLDQ3ICsyMzEsMjQgQEAKIAkgKiBtZW1vcnkgYWNjZXNzLCBzbyB3ZSBjYW4gaGFuZGxlIGl0LgogCSAqLwogZ29vZF9hcmVhOgotCWlmIChmc3IgJiAoMSA8PCAxMSkpIC8qIHdyaXRlPyAqLwotCQltYXNrID0gVk1fV1JJVEU7Ci0JZWxzZQotCQltYXNrID0gVk1fUkVBRHxWTV9FWEVDfFZNX1dSSVRFOwotCi0JZmF1bHQgPSBWTV9GQVVMVF9CQURBQ0NFU1M7Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIG1hc2spKQorCWlmIChhY2Nlc3NfZXJyb3IoZnNyLCB2bWEpKSB7CisJCWZhdWx0ID0gVk1fRkFVTFRfQkFEQUNDRVNTOwogCQlnb3RvIG91dDsKKwl9CiAKIAkvKgotCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUKLQkgKiB0aGUgZmF1bHQsIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyCi0JICogdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUgZmF1bHQuCisJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsIG1ha2UKKwkgKiBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUgZmF1bHQuCiAJICovCi1zdXJ2aXZlOgotCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHIgJiBQQUdFX01BU0ssIChmc3IgJiAoMSA8PCAxMSkpID8gRkFVTFRfRkxBR19XUklURSA6IDApOwotCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewotCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCi0JCQlnb3RvIG91dF9vZl9tZW1vcnk7Ci0JCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQotCQkJcmV0dXJuIGZhdWx0OwotCQlCVUcoKTsKLQl9CisJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkciAmIFBBR0VfTUFTSywgKGZzciAmIEZTUl9XUklURSkgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7CisJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKQorCQlyZXR1cm4gZmF1bHQ7CiAJaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUFKT1IpCiAJCXRzay0+bWFqX2ZsdCsrOwogCWVsc2UKIAkJdHNrLT5taW5fZmx0Kys7CiAJcmV0dXJuIGZhdWx0OwogCi1vdXRfb2ZfbWVtb3J5OgotCWlmICghaXNfZ2xvYmFsX2luaXQodHNrKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBvdXQgb2YgbWVtb3J5IGZvciBwaWQxLCBzbGVlcCBmb3IgYSB3aGlsZSBhbmQgcmV0cnkKLQkgKi8KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXlpZWxkKCk7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWdvdG8gc3Vydml2ZTsKLQogY2hlY2tfc3RhY2s6CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04gJiYgIWV4cGFuZF9zdGFjayh2bWEsIGFkZHIpKQogCQlnb3RvIGdvb2RfYXJlYTsKQEAgLTI3OCw2ICsyODUsMTggQEAKIAkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgYWJvdmUgZG93bl9yZWFkX3RyeWxvY2soKSBtaWdodCBoYXZlIHN1Y2NlZWRlZCBpbgorCQkgKiB3aGljaCBjYXNlLCB3ZSdsbCBoYXZlIG1pc3NlZCB0aGUgbWlnaHRfc2xlZXAoKSBmcm9tCisJCSAqIGRvd25fcmVhZCgpCisJCSAqLworCQltaWdodF9zbGVlcCgpOworI2lmZGVmIENPTkZJR19ERUJVR19WTQorCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJgorCQkgICAgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisjZW5kaWYKIAl9CiAKIAlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOwpAQCAtMjg5LDYgKzMwOCwxNiBAQAogCWlmIChsaWtlbHkoIShmYXVsdCAmIChWTV9GQVVMVF9FUlJPUiB8IFZNX0ZBVUxUX0JBRE1BUCB8IFZNX0ZBVUxUX0JBREFDQ0VTUykpKSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pIHsKKwkJLyoKKwkJICogV2UgcmFuIG91dCBvZiBtZW1vcnksIGNhbGwgdGhlIE9PTSBraWxsZXIsIGFuZCByZXR1cm4gdG8KKwkJICogdXNlcnNwYWNlICh3aGljaCB3aWxsIHJldHJ5IHRoZSBmYXVsdCwgb3Iga2lsbCB1cyBpZiB3ZQorCQkgKiBnb3Qgb29tLWtpbGxlZCkKKwkJICovCisJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogSWYgd2UgYXJlIGluIGtlcm5lbCBtb2RlIGF0IHRoaXMgcG9pbnQsIHdlCiAJICogaGF2ZSBubyBjb250ZXh0IHRvIGhhbmRsZSB0aGlzIGZhdWx0IHdpdGguCkBAIC0yOTYsMTYgKzMyNSw2IEBACiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCWdvdG8gbm9fY29udGV4dDsKIAotCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkvKgotCQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgb3Igc29tZSBvdGhlciB0aGluZwotCQkgKiBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUgdXMgdW5hYmxlIHRvIGhhbmRsZQotCQkgKiB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgotCQkgKi8KLQkJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOwotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCS8qCiAJCSAqIFdlIGhhZCBzb21lIG1lbW9yeSwgYnV0IHdlcmUgdW5hYmxlIHRvCkBAIC00ODksMTAgKzUwOCwxMCBAQAogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uCiBkb19EYXRhQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGZzcl9pbmZvICsgKGZzciAmIDE1KSArICgoZnNyICYgKDEgPDwgMTApKSA+PiA2KTsKKwljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGZzcl9pbmZvICsgZnNyX2ZzKGZzcik7CiAJc3RydWN0IHNpZ2luZm8gaW5mbzsKIAotCWlmICghaW5mLT5mbihhZGRyLCBmc3IsIHJlZ3MpKQorCWlmICghaW5mLT5mbihhZGRyLCBmc3IgJiB+RlNSX0xOWF9QRiwgcmVncykpCiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0FMRVJUICJVbmhhbmRsZWQgZmF1bHQ6ICVzICgweCUwM3gpIGF0IDB4JTA4bHhcbiIsCkBAIC01MDUsOSArNTI0LDU4IEBACiAJYXJtX25vdGlmeV9kaWUoIiIsIHJlZ3MsICZpbmZvLCBmc3IsIDApOwogfQogCisKK3N0YXRpYyBzdHJ1Y3QgZnNyX2luZm8gaWZzcl9pbmZvW10gPSB7CisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDEiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkiZGVidWcgZXZlbnQiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBhY2Nlc3MgZmxhZyBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA0IgkJCSAgIH0sCisJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJzZWN0aW9uIHRyYW5zbGF0aW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJwYWdlIGFjY2VzcyBmbGFnIGZhdWx0IgkgICB9LAorCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJwYWdlIHRyYW5zbGF0aW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIiAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBkb21haW4gZmF1bHQiCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDEwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgZG9tYWluIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gdHJhbnNsYXRpb24iCSAgIH0sCisJeyBkb19zZWN0X2ZhdWx0LAlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInNlY3Rpb24gcGVybWlzc2lvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gdHJhbnNsYXRpb24iCSAgIH0sCisJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgcGVybWlzc2lvbiBmYXVsdCIJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTYiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxNyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE4IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTkiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIxIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjIiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI0IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjUiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI3IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjgiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDMwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzEiCQkJICAgfSwKK307CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbgotZG9fUHJlZmV0Y2hBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorZG9fUHJlZmV0Y2hBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBpZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb190cmFuc2xhdGlvbl9mYXVsdChhZGRyLCAwLCByZWdzKTsKKwljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGlmc3JfaW5mbyArIGZzcl9mcyhpZnNyKTsKKwlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOworCisJaWYgKCFpbmYtPmZuKGFkZHIsIGlmc3IgfCBGU1JfTE5YX1BGLCByZWdzKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fQUxFUlQgIlVuaGFuZGxlZCBwcmVmZXRjaCBhYm9ydDogJXMgKDB4JTAzeCkgYXQgMHglMDhseFxuIiwKKwkJaW5mLT5uYW1lLCBpZnNyLCBhZGRyKTsKKworCWluZm8uc2lfc2lnbm8gPSBpbmYtPnNpZzsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgID0gaW5mLT5jb2RlOworCWluZm8uc2lfYWRkciAgPSAodm9pZCBfX3VzZXIgKilhZGRyOworCWFybV9ub3RpZnlfZGllKCIiLCByZWdzLCAmaW5mbywgaWZzciwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IGIyNzk0MjkuLjdmMjk0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTgsMTAgKzE4LDYgQEAKIAogI2luY2x1ZGUgIm1tLmgiCiAKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLWV4dGVybiB2b2lkIHY2X2ljYWNoZV9pbnZhbF9hbGwodm9pZCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfVklQVAogCiAjZGVmaW5lIEFMSUFTX0ZMVVNIX1NUQVJUCTB4ZmZmZjQwMDAKQEAgLTM1LDE2ICszMSwxMSBAQAogCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0byk7CiAKIAlhc20oCSJtY3JyCXAxNSwgMCwgJTEsICUwLCBjMTRcbiIKLQkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJIgltY3IJcDE1LCAwLCAlMiwgYzcsIGMxMCwgNCIKIAkgICAgOgogCSAgICA6ICJyIiAodG8pLCAiciIgKHRvICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpLCAiciIgKHplcm8pCiAJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiB9CiAKIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCkBAIC01NywxNiArNDgsMTEgQEAKIAogCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKIAkJYXNtKAkibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDBcbiIKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIKIAkJICAgIDoKIAkJICAgIDogInIiICgwKQogCQkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIApAQCAtODEsMTYgKzY3LDExIEBACiAKIAlpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CiAJCWFzbSgJIm1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAwXG4iCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiCiAJCSAgICA6CiAJCSAgICA6ICJyIiAoMCkKIAkJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwppbmRleCA3M2NhZTU3Li4zMGY4MmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCkBAIC00Niw2ICs0Niw4IEBACiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOworCiAJa21hcCA9IGttYXBfaGlnaF9nZXQocGFnZSk7CiAJaWYgKGttYXApCiAJCXJldHVybiBrbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGY5ODI2MDYuLjUyYzQwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI3Myw3ICsyNzMsNiBAQAogCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKIAkJaWYgKCFiYW5rLT5oaWdobWVtKQogCQkJZnJlZV9ib290bWVtX25vZGUocGdkYXQsIGJhbmtfcGh5c19zdGFydChiYW5rKSwgYmFua19waHlzX3NpemUoYmFuaykpOwotCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKIAl9CiAKIAkvKgpAQCAtMzcwLDYgKzM2OSwxOSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwZm5fdmFsaWQpOworCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKKwlpbnQgaTsKKwlmb3JfZWFjaF9ub2RlYmFuayhpLCBtaSwgbm9kZSkgeworCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKKwkJbWVtb3J5X3ByZXNlbnQobm9kZSwgYmFua19wZm5fc3RhcnQoYmFuayksIGJhbmtfcGZuX2VuZChiYW5rKSk7CisJfQorfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1lbWluZm9fY21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKQEAgLTQyNyw2ICs0MzksMTIgQEAKIAkJICovCiAJCWlmIChub2RlID09IGluaXRyZF9ub2RlKQogCQkJYm9vdG1lbV9yZXNlcnZlX2luaXRyZChub2RlKTsKKworCQkvKgorCQkgKiBTcGFyc2VtZW0gdHJpZXMgdG8gYWxsb2NhdGUgYm9vdG1lbSBpbiBtZW1vcnlfcHJlc2VudCgpLAorCQkgKiBzbyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpeGVkIHJlc2VydmF0aW9ucworCQkgKi8KKwkJYXJtX21lbW9yeV9wcmVzZW50KG1pLCBub2RlKTsKIAl9CiAKIAkvKgpAQCAtNDgzLDcgKzUwMSw3IEBACiAJLyoKIAkgKiBDb252ZXJ0IHN0YXJ0X3Bmbi9lbmRfcGZuIHRvIGEgc3RydWN0IHBhZ2UgcG9pbnRlci4KIAkgKi8KLQlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7CisJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gLSAxKSArIDE7CiAJZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3Bmbik7CiAKIAkvKgpAQCAtNjEzLDYgKzYzMSwxNCBAQAogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogeworI2lmZGVmIENPTkZJR19IQVZFX1RDTQorCWV4dGVybiBjaGFyICpfX3RjbV9zdGFydCwgKl9fdGNtX2VuZDsKKworCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYXJlYShfX3BoeXNfdG9fcGZuKF9fcGEoX190Y21fc3RhcnQpKSwKKwkJCQkgICAgX19waHlzX3RvX3BmbihfX3BhKF9fdGNtX2VuZCkpLAorCQkJCSAgICAiVENNIGxpbmsiKTsKKyNlbmRpZgorCiAJaWYgKCFtYWNoaW5lX2lzX2ludGVncmF0b3IoKSAmJiAhbWFjaGluZV9pc19jaW50ZWdyYXRvcigpKQogCQl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FyZWEoX19waHlzX3RvX3BmbihfX3BhKF9faW5pdF9iZWdpbikpLAogCQkJCQkgICAgX19waHlzX3RvX3BmbihfX3BhKF9faW5pdF9lbmQpKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCBmNzQ1N2ZlLi4yYjc5OTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIHsKIAlpZiAoYWRkciA8IFBIWVNfT0ZGU0VUKQogCQlyZXR1cm4gMDsKLQlpZiAoYWRkciArIHNpemUgPj0gX19wYShoaWdoX21lbW9yeSAtIDEpKQorCWlmIChhZGRyICsgc2l6ZSA+IF9fcGEoaGlnaF9tZW1vcnkgLSAxKSArIDEpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDQ0MjZlZTYuLmVhNjdiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hldHlwZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgogCkBAIC0xMTYsNiArMTE3LDEzIEBACiAJfQogCWlmIChpID09IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpKQogCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGNhY2hlIHBvbGljeVxuIik7CisJLyoKKwkgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIHBhcnRseSB0byBkbyB3aXRoIHRoZSB3YXkgd2UgYm9vdDsgaXQgaXMKKwkgKiB1bnByZWRpY3RhYmxlIHRvIGhhdmUgbWVtb3J5IG1hcHBlZCB1c2luZyB0d28gZGlmZmVyZW50IHNldHMgb2YKKwkgKiBtZW1vcnkgYXR0cmlidXRlcyAoc2hhcmVkLCB0eXBlLCBhbmQgY2FjaGUgYXR0cmlicykuICBXZSBjYW4gbm90CisJICogY2hhbmdlIHRoZXNlIGF0dHJpYnV0ZXMgb25jZSB0aGUgaW5pdGlhbCBhc3NlbWJseSBoYXMgc2V0dXAgdGhlCisJICogcGFnZSB0YWJsZXMuCisJICovCiAJaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IGNhY2hlcG9saWN5PXdyaXRlYmFjayBzdXBwb3J0ZWQgb24gQVJNdjYgYW5kIGxhdGVyXG4iKTsKIAkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX1dSSVRFQkFDSzsKQEAgLTcwOSwxMCArNzE3LDYgQEAKIAkJCWlmIChtZW1pbmZvLm5yX2JhbmtzID49IE5SX0JBTktTKSB7CiAJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlJfQkFOS1MgdG9vIGxvdywgIgogCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7Ci0JCQl9IGVsc2UgaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewotCQkJCXByaW50ayhLRVJOX0NSSVQgIkhJR0hNRU0gaXMgbm90IHlldCBzdXBwb3J0ZWQgIgotCQkJCQkJICJ3aXRoIFZJUFQgYWxpYXNpbmcgY2FjaGUsICIKLQkJCQkJCSAiaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQltZW1tb3ZlKGJhbmsgKyAxLCBiYW5rLAogCQkJCQkobWVtaW5mby5ucl9iYW5rcyAtIGkpICogc2l6ZW9mKCpiYW5rKSk7CkBAIC03MjYsNiArNzMwLDggQEAKIAkJCWJhbmstPnNpemUgPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOwogCQl9CiAjZWxzZQorCQliYW5rLT5oaWdobWVtID0gaGlnaG1lbTsKKwogCQkvKgogCQkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IGJhbmsgd291bGQgZW50aXJlbHkgb3ZlcmxhcAogCQkgKiB0aGUgdm1hbGxvYyBhcmVhLgpAQCAtNzU0LDYgKzc2MCwzOCBAQAogI2VuZGlmCiAJCWorKzsKIAl9CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlpZiAoaGlnaG1lbSkgeworCQljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworCisJCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKKwkJCS8qCisJCQkgKiBJbnRlcmFjdGlvbnMgYmV0d2VlbiBrbWFwIGFuZCBvdGhlciBtYXBwaW5ncworCQkJICogbWFrZSBoaWdobWVtIHN1cHBvcnQgd2l0aCBhbGlhc2luZyBWSVBUIGNhY2hlcworCQkJICogcmF0aGVyIGRpZmZpY3VsdC4KKwkJCSAqLworCQkJcmVhc29uID0gIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSI7CisjaWZkZWYgQ09ORklHX1NNUAorCQl9IGVsc2UgaWYgKHRsYl9vcHNfbmVlZF9icm9hZGNhc3QoKSkgeworCQkJLyoKKwkJCSAqIGttYXBfaGlnaCBuZWVkcyB0byBvY2Nhc2lvbmFsbHkgZmx1c2ggVExCIGVudHJpZXMsCisJCQkgKiBob3dldmVyLCBpZiB0aGUgVExCIGVudHJpZXMgbmVlZCB0byBiZSBicm9hZGNhc3QKKwkJCSAqIHdlIG1heSBkZWFkbG9jazoKKwkJCSAqICBrbWFwX2hpZ2goaXJxcyBvZmYpLT5mbHVzaF9hbGxfemVyb19wa21hcHMtPgorCQkJICogIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UtPnNtcF9jYWxsX2Z1bmN0aW9uX21hbnkKKwkJCSAqICAgKG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGlycXMgb2ZmKQorCQkJICovCisJCQlyZWFzb24gPSAid2l0aG91dCBoYXJkd2FyZSBUTEIgb3BzIGJyb2FkY2FzdGluZyI7CisjZW5kaWYKKwkJfQorCQlpZiAocmVhc29uKSB7CisJCQlwcmludGsoS0VSTl9DUklUICJISUdITUVNIGlzIG5vdCBzdXBwb3J0ZWQgJXMsIGlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iLAorCQkJCXJlYXNvbik7CisJCQl3aGlsZSAoaiA+IDAgJiYgbWVtaW5mby5iYW5rW2ogLSAxXS5oaWdobWVtKQorCQkJCWotLTsKKwkJfQorCX0KKyNlbmRpZgogCW1lbWluZm8ubnJfYmFua3MgPSBqOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wYWJvcnQtbGVnYWN5LlMgYi9hcmNoL2FybS9tbS9wYWJvcnQtbGVnYWN5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NzBlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIEZ1bmN0aW9uOiBsZWdhY3lfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IFNpbXVsYXRlZCBJRlNSIHdpdGggc2VjdGlvbiB0cmFuc2xhdGlvbiBmYXVsdCBzdGF0dXMKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWShsZWdhY3lfcGFib3J0KQorCW1vdglyMSwgIzUKKwltb3YJcGMsIGxyCitFTkRQUk9DKGxlZ2FjeV9wYWJvcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wYWJvcnQtdjYuUyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTNkMWVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY2LlMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy8qCisgKiBGdW5jdGlvbjogdjZfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IElGU1IKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWSh2Nl9wYWJvcnQpCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMQkJQCBnZXQgSUZTUgorCW1vdglwYywgbHIKK0VORFBST0ModjZfcGFib3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMgYi9hcmNoL2FybS9tbS9wYWJvcnQtdjcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIzYjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKy8qCisgKiBGdW5jdGlvbjogdjZfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IElGU1IKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWSh2N19wYWJvcnQpCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMgkJQCBnZXQgSUZBUgorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDEJCUAgZ2V0IElGU1IKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY3X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggYjU1NTFiZi4uZDlmYjRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTQ0OSw3ICs0NDksNyBAQAogCS50eXBlCWFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjBfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDhiYzY3NDAuLjc0NTNiNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTQzMCw3ICs0MzAsNyBAQAogCS50eXBlCWFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyMGVfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjBlX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjBlX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCmluZGV4IDJjZDAzZTYuLjhlYjcyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCkBAIC00MTMsNyArNDEzLDcgQEAKIAkudHlwZQlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDIyX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIyX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjJfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggYWQ5NjFhOC4uM2I1OWYwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTQwOCw3ICs0MDgsNyBAQAogCS50eXBlCWFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjZfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyNl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKaW5kZXggODBkNmUxZC4uM2Y5Y2QzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJLnR5cGUJYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCWNwdV9hcm02X2RhdGFfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm02X3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtNl9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtNl9yZXNldApAQCAtMjk1LDcgKzI5NSw3IEBACiAJCS50eXBlCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAljcHVfYXJtN19kYXRhX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtN19wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTdfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTdfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IDg1YWUxODYuLjBiNjJkZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCS50eXBlCWFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJdjR0X2xhdGVfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm03MjBfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03MjBfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTcyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKaW5kZXggNGY5NWJlZS4uMDE4NjBjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkudHlwZQlhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjR0X2xhdGVfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm03NDBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTc0MF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm03NDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwppbmRleCA5M2UwNWZhLi4xMjAxYjk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCkBAIC02NCw3ICs2NCw3IEBACiAJCS50eXBlCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtN3RkbWlfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03dGRtaV9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtN3RkbWlfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDkxNGQ2ODguLjJiN2MxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJLnR5cGUJYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyMF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTIwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggNTFjOWM5OC4uMDZhMWFhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC0zOTksNyArMzk5LDcgQEAKIAkudHlwZQlhcm05MjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTIyX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjJfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTIyX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCAyNzI0NTI2Li5jYjUzNDM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCS50eXBlCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjVfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyNV9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjVfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDU0NDY2OTMuLjFjNDg0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJLnR5cGUJYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dGpfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyNl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCmluZGV4IGY1OTUxMTcuLjViMGY4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJLnR5cGUJYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTQwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05NDBfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTQwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwppbmRleCBlMDNmNmZmLi40MGMwNDQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCS50eXBlCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAlub21tdV9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTk0Nl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTQ2X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTk0Nl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCmluZGV4IGJlNmMxMWQuLjI4NTQ1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJLnR5cGUJYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm05dGRtaV9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTl0ZG1pX3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm05dGRtaV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCmluZGV4IDA4YjhhOTUuLjA4ZjVhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCS50eXBlCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9mYTUyNl9wcm9jX2luaXQKIAkud29yZAljcHVfZmE1MjZfcHJvY19maW4KIAkud29yZAljcHVfZmE1MjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwppbmRleCAwZmUxZjhmLi5kMGQ3Nzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCkBAIC00OTksNyArNDk5LDcgQEAKIAkudHlwZQlmZXJvY2Vvbl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBmZXJvY2Vvbl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2Zlcm9jZW9uX3Byb2NfaW5pdAogCS53b3JkCWNwdV9mZXJvY2Vvbl9wcm9jX2ZpbgogCS53b3JkCWNwdV9mZXJvY2Vvbl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKaW5kZXggNTQwZjUwNy4uNTJiNWZkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC0zNTksNyArMzU5LDcgQEAKIAkudHlwZQltb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfbW9oYXdrX3Byb2NfaW5pdAogCS53b3JkCWNwdV9tb2hhd2tfcHJvY19maW4KIAkud29yZAljcHVfbW9oYXdrX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggOTBhN2U1Mi4uN2I3MDZiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJLnR5cGUJc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3NhMTEwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9zYTExMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9zYTExMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNDUxZTJkOS4uZWU3NzAwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkudHlwZQlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9zYTExMDBfcHJvY19pbml0CiAJLndvcmQJY3B1X3NhMTEwMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9zYTExMDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCA1MjRkZGFlLi43MGY3NWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0zMiw4ICszMiwxMCBAQAogCiAjaWZuZGVmIENPTkZJR19TTVAKICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9SR05fV0JXQQorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0IKICNlbHNlCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0F8VFRCX1MKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92Nl9wcm9jX2luaXQpCkBAIC0xOTEsNyArMTkzLDcgQEAKIAkudHlwZQl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY2X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCXY2X3BhYm9ydAogCS53b3JkCWNwdV92Nl9wcm9jX2luaXQKIAkud29yZAljcHVfdjZfcHJvY19maW4KIAkud29yZAljcHVfdjZfcmVzZXQKQEAgLTIyMiwxMCArMjI0LDkgQEAKIAkubG9uZwkweDAwMDdiMDAwCiAJLmxvbmcJMHgwMDA3ZjAwMAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKLQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKLQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKLQkJUE1EX1NFQ1RfQVBfUkVBRAorCQlQTURfU0VDVF9BUF9SRUFEIHwgXAorCQlQTURfRkxBR1MKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCiAJCVBNRF9TRUNUX1hOIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBmM2ZhMWMzLi4zYTI4NTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0zMyw5ICszMywxMSBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAvKiBQVFdzIGNhY2hlYWJsZSwgaW5uZXIgV0Igbm90IHNoYXJlYWJsZSwgb3V0ZXIgV0Igbm90IHNoYXJlYWJsZSAqLwogI2RlZmluZSBUVEJfRkxBR1MJVFRCX0lSR05fV0J8VFRCX1JHTl9PQ19XQgorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0IKICNlbHNlCiAvKiBQVFdzIGNhY2hlYWJsZSwgaW5uZXIgV0JXQSBzaGFyZWFibGUsIG91dGVyIFdCV0Egbm90IHNoYXJlYWJsZSAqLwogI2RlZmluZSBUVEJfRkxBR1MJVFRCX0lSR05fV0JXQXxUVEJfU3xUVEJfTk9TfFRUQl9SR05fT0NfV0JXQQorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0JXQXxQTURfU0VDVF9TCiAjZW5kaWYKIAogRU5UUlkoY3B1X3Y3X3Byb2NfaW5pdCkKQEAgLTE4NCw5ICsxODYsMTAgQEAKICAqLwogX192N19zZXR1cDoKICNpZmRlZiBDT05GSUdfU01QCi0JbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQkJQCBFbmFibGUgU01QL25BTVAgbW9kZSBhbmQKLQlvcnIJcjAsIHIwLCAjKDEgPDwgNikgfCAoMSA8PCAwKQlAIFRMQiBvcHMgYnJvYWRjYXN0aW5nCi0JbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwl0c3QJcjAsICMoMSA8PCA2KQkJCUAgU01QL25BTVAgbW9kZSBlbmFibGVkPworCW9ycmVxCXIwLCByMCwgIygxIDw8IDYpIHwgKDEgPDwgMCkJQCBFbmFibGUgU01QL25BTVAgbW9kZSBhbmQKKwltY3JlcQlwMTUsIDAsIHIwLCBjMSwgYzAsIDEJCUAgVExCIG9wcyBicm9hZGNhc3RpbmcKICNlbmRpZgogCWFkcglyMTIsIF9fdjdfc2V0dXBfc3RhY2sJCUAgdGhlIGxvY2FsIHN0YWNrCiAJc3RtaWEJcjEyLCB7cjAtcjUsIHI3LCByOSwgcjExLCBscn0KQEAgLTI5NSw3ICsyOTgsNyBAQAogCS50eXBlCXY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjdfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfaWZhcgorCS53b3JkCXY3X3BhYm9ydAogCS53b3JkCWNwdV92N19wcm9jX2luaXQKIAkud29yZAljcHVfdjdfcHJvY19maW4KIAkud29yZAljcHVfdjdfcmVzZXQKQEAgLTMyNiwxMCArMzI5LDkgQEAKIAkubG9uZwkweDAwMGYwMDAwCQlAIFJlcXVpcmVkIElEIHZhbHVlCiAJLmxvbmcJMHgwMDBmMDAwMAkJQCBNYXNrIGZvciBJRAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKLQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKLQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKLQkJUE1EX1NFQ1RfQVBfUkVBRAorCQlQTURfU0VDVF9BUF9SRUFEIHwgXAorCQlQTURfRkxBR1MKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCiAJCVBNRF9TRUNUX1hOIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggMzM1MTVjMi4uMjAyOGYzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQyOCw3ICs0MjgsNyBAQAogCS50eXBlCXhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoeHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3hzYzNfcHJvY19pbml0CiAJLndvcmQJY3B1X3hzYzNfcHJvY19maW4KIAkud29yZAljcHVfeHNjM19yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggNDIzMzk0Mi4uZjA1NmMyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01MTEsNyArNTExLDcgQEAKIAkudHlwZQl4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfeHNjYWxlX3Byb2NfaW5pdAogCS53b3JkCWNwdV94c2NhbGVfcHJvY19maW4KIAkud29yZAljcHVfeHNjYWxlX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwppbmRleCBmZTU4MTM4Li5mN2QyZWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTMzLDYgKzMzLDkgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogCTMsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9CQ01SSU5HCisJSVJRX1BNVUlSUSwgLyogZm9yIEJDTVJJTkcsIEFSTSBQTVUgaW50ZXJydXB0IGlzIDQzICovCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIGFybXY2X3BtdV9zdG9wKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCmluZGV4IDc3ZmE3Y2MuLmNlMzFmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCkBAIC0yNTcsNyArMjU3LDggQEAKIAkqSU9QM1hYX09VTVdUVlIwID0gMDsKIAogCS8qIE91dGJvdW5kIHdpbmRvdyAxICovCi0JKklPUDNYWF9PTVdUVlIxID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgKyBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRTsKKwkqSU9QM1hYX09NV1RWUjEgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQSArCisJCQkgIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFIC8gMjsKIAkqSU9QM1hYX09VTVdUVlIxID0gMDsKIAogCS8qIEJBUiAzICggRGlzYWJsZWQgKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCmluZGV4IDM2OTViYmUuLjhkYTk1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKQEAgLTg1LDcgKzg1LDcgQEAKIHsKIAl1MzIgdGltZXJfY3RsOwogCi0JdGlja3NfcGVyX2ppZmZ5ID0gKHRpY2tfcmF0ZSArIEhaLzIpIC8gSFo7CisJdGlja3NfcGVyX2ppZmZ5ID0gRElWX1JPVU5EX0NMT1NFU1QodGlja19yYXRlLCBIWik7CiAJdGlja3NfcGVyX3VzZWMgPSB0aWNrX3JhdGUgLyAxMDAwMDAwOwogCW5leHRfamlmZnlfdGltZSA9IDB4ZmZmZmZmZmY7CiAJaW9wX3RpY2tfcmF0ZSA9IHRpY2tfcmF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKaW5kZXggMTg2OGMwZC4uMzQxMjM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCX0KIAogCS8qIEZJWE1FOiB3aGF0J3MgdGhlIGFjdHVhbCB0cmFuc2l0aW9uIHRpbWU/ICovCi0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwICogMTAwMCAqIDEwMDA7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDMwMCAqIDEwMDA7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBmZDMxNTRhLi42OGVhYWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC02OTEsMTMgKzY5MSwxNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2VuYWJsZV9pcnFfbGNoKGludCBsY2gpCiB7CiAJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSkKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOwogCXZhbCB8PSAxIDw8IGxjaDsKIAlkbWFfd3JpdGUodmFsLCBJUlFFTkFCTEVfTDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IG9tYXBfcmVxdWVzdF9kbWEoaW50IGRldl9pZCwgY29uc3QgY2hhciAqZGV2X25hbWUsCkBAIC03OTksMTAgKzgwMiwxMyBAQAogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CiAJCXUzMiB2YWw7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CiAJCXZhbCAmPSB+KDEgPDwgbGNoKTsKIAkJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCiAJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJZG1hX3dyaXRlKE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSywgQ1NSKGxjaCkpOwpAQCAtODI5LDEwICs4MzUsMTAgQEAKICAqCiAgKiBAcGFyYW0gYXJiX3JhdGUKICAqIEBwYXJhbSBtYXhfZmlmb19kZXB0aAotICogQHBhcmFtIHRwYXJhbXMgLSBOdW1iZXIgb2YgdGhlcmVhZHMgdG8gcmVzZXJ2ZSA6IERNQV9USFJFQURfUkVTRVJWRV9OT1JNCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVFdPVAotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9USFJFRVQKKyAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRocmVhZHMgdG8gcmVzZXJ2ZSA6IERNQV9USFJFQURfUkVTRVJWRV9OT1JNCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfT05FVAorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9USFJFRVQKICAqLwogdm9pZAogb21hcF9kbWFfc2V0X2dsb2JhbF9wYXJhbXMoaW50IGFyYl9yYXRlLCBpbnQgbWF4X2ZpZm9fZGVwdGgsIGludCB0cGFyYW1zKQpAQCAtODQ0LDExICs4NTAsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChtYXhfZmlmb19kZXB0aCA9PSAwKQorCQltYXhfZmlmb19kZXB0aCA9IDE7CiAJaWYgKGFyYl9yYXRlID09IDApCiAJCWFyYl9yYXRlID0gMTsKIAotCXJlZyA9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwotCXJlZyB8PSAoMHhmZiAmIG1heF9maWZvX2RlcHRoKTsKKwlyZWcgPSAweGZmICYgbWF4X2ZpZm9fZGVwdGg7CisJcmVnIHw9ICgweDMgJiB0cGFyYW1zKSA8PCAxMjsKKwlyZWcgfD0gKGFyYl9yYXRlICYgMHhmZikgPDwgMTY7CiAKIAlkbWFfd3JpdGUocmVnLCBHQ1IpOwogfQpAQCAtOTc1LDYgKzk4NCwxNCBAQAogewogCXUzMiBsOwogCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJZG1hX3dyaXRlKDAsIENJQ1IobGNoKSk7CisKKwlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOworCWwgJj0gfk9NQVBfRE1BX0NDUl9FTjsKKwlkbWFfd3JpdGUobCwgQ0NSKGxjaCkpOworCiAJaWYgKCFvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJiBkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKSB7CiAJCWludCBuZXh0X2xjaCwgY3VyX2xjaCA9IGxjaDsKIAkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwpAQCAtOTkyLDE4ICsxMDA5LDggQEAKIAkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7CiAJCQljdXJfbGNoID0gbmV4dF9sY2g7CiAJCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQotCQlyZXR1cm47CiAJfQogCi0JLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLwotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJZG1hX3dyaXRlKDAsIENJQ1IobGNoKSk7Ci0KLQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOwotCWwgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQlkbWFfd3JpdGUobCwgQ0NSKGxjaCkpOwotCiAJZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX3N0b3BfZG1hKTsKQEAgLTExMDcsNiArMTExNCwxNCBAQAogewogCWludCBsY2g7CiAKKwkvKgorCSAqIE9uIE9NQVAxNTEwLCBpbnRlcm5hbCBMQ0QgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRoZSB0cmFuc2ZlcgorCSAqIHdoZW4gaXQgZ2V0cyBlbmFibGVkLCBzbyBhc3N1bWUgRE1BIHJ1bm5pbmcgaWYgTENEIGVuYWJsZWQuCisJICovCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlpZiAob21hcF9yZWFkdygweGZmZmVjMDAwICsgMHgwMCkgJiAoMSA8PCAwKSkKKwkJCXJldHVybiAxOworCiAJLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCA2OTM4MzljLi43YzM0NWI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzg1MFs3XSA9IHsKLQl7IE9NQVAxX01QVUlPX0JBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCisJeyBPTUFQMV9NUFVJT19WQkFTRSwgICAgIElOVF84NTBfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLAlNRVRIT0RfTVBVSU8gfSwKIAl7IE9NQVA4NTBfR1BJTzFfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMSwgIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8yX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzIsICBJSF9HUElPX0JBU0UgKyAzMiwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8zX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzMsICBJSF9HUElPX0JBU0UgKyA2NCwJTUVUSE9EX0dQSU9fODUwIH0sCkBAIC0zNzMsNyArMzczLDcgQEAKIAogc3RhdGljIGludCBjaGVja19ncGlvKGludCBncGlvKQogewotCWlmICh1bmxpa2VseShncGlvX3ZhbGlkKGdwaW8pKSA8IDApIHsKKwlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSA8IDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAib21hcC1ncGlvOiBpbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW8pOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDExZTczZDkuLmYxMjllZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzAzLDMyICszMDMsMjEgQEAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAzNDMwKCkJCTAKIAotI2lmIGRlZmluZWQoTVVMVElfT01BUDEpCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDczMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQotIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA4NTAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKLSMgZW5kaWYKLSNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDczMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTEKLSMgZW5kaWYKLSNlbmRpZgotI2Vsc2UKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCi0jICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMQotIyBlbmRpZgotI2VuZGlmCi0KIC8qCiAgKiBXaGV0aGVyIHdlIGhhdmUgTVVMVElfT01BUDEgb3Igbm90LCB3ZSBzdGlsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoCi0gKiBiZXR3ZWVuIDMzMCB2cy4gMTUxMCBhbmQgMTYxMUIvNTkxMiB2cy4gMTcxMC4KKyAqIGJldHdlZW4gNzMwIHZzIDg1MCwgMzMwIHZzLiAxNTEwIGFuZCAxNjExQi81OTEyIHZzLiAxNzEwLgogICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisjIHVuZGVmICBjcHVfaXNfb21hcDczMAorIyBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJaXNfb21hcDczMCgpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwODUwCisjIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgdW5kZWYgIGNwdV9pc19vbWFwMzEwCiAjIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKQEAgLTQzMywzICs0MjIsNSBAQAogCiBpbnQgb21hcF9jaGlwX2lzKHN0cnVjdCBvbWFwX2NoaXBfaWQgb2NpKTsKIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKaW5kZXggNDVlYTNhZS4uM2FlNTJjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAKKyN3YXJuaW5nOiBQbGVhc2UgdXBkYXRlIHRoZSBib2FyZCB0byB1c2UgbWF0cml4X2tleXBhZC5oIGluc3RlYWQKKwogc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSB7CiAJaW50IHJvd3M7CiAJaW50IGNvbHM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAppbmRleCA5OGRmYWI2Li4wZjQ5ZDJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKQEAgLTg0MCwxMiArODQwLDE0IEBACiAJICovCiAJQUYyNl8zNFhYX0dQSU8wLAogCUFGMjJfMzRYWF9HUElPOSwKKwlBRzlfMzRYWF9HUElPMjMsCiAJQUg4XzM0WFhfR1BJTzI5LAogCVU4XzM0WFhfR1BJTzU0X09VVCwKIAlVOF8zNFhYX0dQSU81NF9ET1dOLAogCUw4XzM0WFhfR1BJTzYzLAogCUcyNV8zNFhYX0dQSU84Nl9PVVQsCiAJQUc0XzM0WFhfR1BJTzEzNF9PVVQsCisJQUY0XzM0WFhfR1BJTzEzNV9PVVQsCiAJQUU0XzM0WFhfR1BJTzEzNl9PVVQsCiAJQUY2XzM0WFhfR1BJTzE0MF9VUCwKIAlBRTZfMzRYWF9HUElPMTQxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCmluZGV4IDYyNzFkODUuLmZhNjQ2MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKQEAgLTEzNSw2ICsxMzUsOCBAQAogCiBpbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVzZXIpLAogCQkJdm9pZCAqdXNlcik7CitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpOwogCiBpbnQgcHdyZG1fYWRkX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogaW50IHB3cmRtX2RlbF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNGI2MDEyNy4uOTQ1ODRmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQluZW50ID0gMTsgLyogZm9yIHRoZSBuZXh0IEwxIGVudHJ5ICovCiAJfSBlbHNlIHsKIAkJYnl0ZXMgPSBJT1BHRF9TSVpFOwotCQlpZiAoKmlvcGdkICYgSU9QR0RfU1VQRVIpIHsKKwkJaWYgKCgqaW9wZ2QgJiBJT1BHRF9TVVBFUikgPT0gSU9QR0RfU1VQRVIpIHsKIAkJCW5lbnQgKj0gMTY7CiAJCQkvKiByZXdpbmQgdG8gdGhlIDFzdCBlbnRyeSAqLwogCQkJaW9wZ2QgPSAodTMyICopKCh1MzIpaW9wZ2QgJiBJT1NVUEVSX01BU0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA2ZmM1MmZjLi5kYzNmYWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNDcsNyArNDcsNyBAQAogICoJJ3ZhJzoJbXB1IHZpcnR1YWwgYWRkcmVzcwogICoKICAqCSdjJzoJY29udGlndW91cyBtZW1vcnkgYXJlYQotICoJJ2QnOglkaWNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKKyAqCSdkJzoJZGlzY29udGlndW91cyBtZW1vcnkgYXJlYQogICoJJ2EnOglhbm9ueW1vdXMgbWVtb3J5IGFsbG9jYXRpb24KICAqCScoKSc6CW9wdGlvbmFsIGZlYXR1cmUKICAqCkBAIC0xOTksNyArMTk5LDggQEAKIAkJdmEgKz0gYnl0ZXM7CiAJfQogCi0JZmx1c2hfY2FjaGVfdm1hcChuZXctPmFkZHIsIG5ldy0+YWRkciArIHRvdGFsKTsKKwlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKW5ldy0+YWRkciwKKwkJCQkodW5zaWduZWQgbG9uZykobmV3LT5hZGRyICsgdG90YWwpKTsKIAlyZXR1cm4gbmV3LT5hZGRyOwogCiBlcnJfb3V0OgpAQCAtMzYyLDggKzM2Myw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAl2YSA9IGFyZWEtPnZhOwotCW11dGV4X3VubG9jaygmb2JqLT5tbWFwX2xvY2spOwogb3V0OgorCW11dGV4X3VubG9jaygmb2JqLT5tbWFwX2xvY2spOworCiAJcmV0dXJuIHZhOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGFfdG9fdmEpOwpAQCAtMzkwLDE0ICszOTIsMTQgQEAKIAl9CiAKIAl2YV9lbmQgPSBfdmEgKyBQQUdFX1NJWkUgKiBpOwotCWZsdXNoX2NhY2hlX3ZtYXAoX3ZhLCB2YV9lbmQpOworCWZsdXNoX2NhY2hlX3ZtYXAoKHVuc2lnbmVkIGxvbmcpX3ZhLCAodW5zaWduZWQgbG9uZyl2YV9lbmQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2d0YWJsZV9kcmFpbl92bWFsbG9jKHN0cnVjdCBzZ190YWJsZSAqc2d0KQogewogCS8qCiAJICogQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbCwganVzdCBleGlzdHMgZm9yCi0JICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGliaWxpdHkuCisJICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGFiaWxpdHkuCiAJICovCiAJQlVHX09OKCFzZ3QpOwogfQpAQCAtNDMzLDcgKzQzNSw3IEBACiB7CiAJLyoKIAkgKiBBY3R1YWxseSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLCBqdXN0IGV4aXN0cyBmb3IKLQkgKiBjb25zaXN0ZW5jeSBvZiB0aGUgY29kZSByZWFkaWJpbGl0eQorCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRhYmlsaXR5CiAJICovCiAJQlVHX09OKCFzZ3QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA4OGFjOTc2Li5lNjY0YjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJcnggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKLQkJdyB8PSAodHggPyBSRElTQUJMRSA6IDApOworCQl3IHw9IChyeCA/IFJESVNBQkxFIDogMCk7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CiAJfQogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggOTI1ZjY0Ny4uNzVkMWYyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0yNzAsNyArMjcwLDggQEAKIAlvbWFwX3NyYW1fY2VpbCAtPSBzaXplOwogCW9tYXBfc3JhbV9jZWlsID0gUk9VTkRfRE9XTihvbWFwX3NyYW1fY2VpbCwgc2l6ZW9mKHZvaWQgKikpOwogCW1lbWNweSgodm9pZCAqKW9tYXBfc3JhbV9jZWlsLCBzdGFydCwgc2l6ZSk7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXN0YXJ0LCAodW5zaWduZWQgbG9uZykoc3RhcnQgKyBzaXplKSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKW9tYXBfc3JhbV9jZWlsLAorCQkodW5zaWduZWQgbG9uZykob21hcF9zcmFtX2NlaWwgKyBzaXplKSk7CiAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKaW5kZXggNzBhZWVlNC4uMjk3NTc5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKQEAgLTE3LDIyICsxNywyNjYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAorI2RlZmluZSBETUFfREVCVUdfTkFNRQkJInB4YV9kbWEiCisjZGVmaW5lIERNQV9NQVhfUkVRVUVTVEVSUwk2NAorCiBzdHJ1Y3QgZG1hX2NoYW5uZWwgewogCWNoYXIgKm5hbWU7CiAJcHhhX2RtYV9wcmlvIHByaW87CiAJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKik7CiAJdm9pZCAqZGF0YTsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFubmVsICpkbWFfY2hhbm5lbHM7CiBzdGF0aWMgaW50IG51bV9kbWFfY2hhbm5lbHM7CiAKKy8qCisgKiBEZWJ1ZyBmcworICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJnZnNfcm9vdCwgKmRiZ2ZzX3N0YXRlLCAqKmRiZ2ZzX2NoYW47CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfcmVxdWVzdGVyX2NoYW4oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCWludCBjaGFuID0gKGludClzLT5wcml2YXRlOworCWludCBpOworCXUzMiBkcmNtcjsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgY2hhbm5lbCAlZCByZXF1ZXN0ZXJzIGxpc3QgOlxuIiwgY2hhbik7CisJZm9yIChpID0gMDsgaSA8IERNQV9NQVhfUkVRVUVTVEVSUzsgaSsrKSB7CisJCWRyY21yID0gRFJDTVIoaSk7CisJCWlmICgoZHJjbXIgJiBEUkNNUl9DSExOVU0pID09IGNoYW4pCisJCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRSZXF1ZXN0ZXIgJWQgKE1BUFZMRD0lZClcbiIsIGksCisJCQkJCSAgISEoZHJjbXIgJiBEUkNNUl9NQVBWTEQpKTsKKwl9CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGJnX2J1cnN0X2Zyb21fZGNtZCh1MzIgZGNtZCkKK3sKKwlpbnQgYnVyc3QgPSAoZGNtZCA+PiAxNikgJiAweDM7CisKKwlyZXR1cm4gYnVyc3QgPyA0IDw8IGJ1cnN0IDogMDsKK30KKworc3RhdGljIGludCBpc19waHlzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcGZuX3ZhbGlkKF9fcGh5c190b19wZm4oYWRkcikpOworfQorCisjZGVmaW5lIERDU1JfU1RSKGZsYWcpIChkY3NyICYgRENTUl8jI2ZsYWcgPyAjZmxhZyIgIiA6ICIiKQorI2RlZmluZSBEQ01EX1NUUihmbGFnKSAoZGNtZCAmIERDTURfIyNmbGFnID8gI2ZsYWciICIgOiAiIikKKworc3RhdGljIGludCBkYmdfc2hvd19kZXNjcmlwdG9ycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisJaW50IGNoYW4gPSAoaW50KXMtPnByaXZhdGU7CisJaW50IGksIG1heF9zaG93ID0gMjAsIGJ1cnN0LCB3aWR0aDsKKwl1MzIgZGNtZDsKKwl1bnNpZ25lZCBsb25nIHBoeXNfZGVzYzsKKwlzdHJ1Y3QgcHhhX2RtYV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5uZWxzW2NoYW5dLmxvY2ssIGZsYWdzKTsKKwlwaHlzX2Rlc2MgPSBEREFEUihjaGFuKTsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgY2hhbm5lbCAlZCBkZXNjcmlwdG9ycyA6XG4iLCBjaGFuKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIEZpcnN0IGRlc2NyaXB0b3IgdW5rbm93blxuIiwgMCk7CisJZm9yIChpID0gMTsgaSA8IG1heF9zaG93ICYmIGlzX3BoeXNfdmFsaWQocGh5c19kZXNjKTsgaSsrKSB7CisJCWRlc2MgPSBwaHlzX3RvX3ZpcnQocGh5c19kZXNjKTsKKwkJZGNtZCA9IGRlc2MtPmRjbWQ7CisJCWJ1cnN0ID0gZGJnX2J1cnN0X2Zyb21fZGNtZChkY21kKTsKKwkJd2lkdGggPSAoMSA8PCAoKGRjbWQgPj4gMTQpICYgMHgzKSkgPj4gMTsKKworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIERlc2MgYXQgJTA4bHgodmlydCAlcClcbiIsCisJCQkJICBpLCBwaHlzX2Rlc2MsIGRlc2MpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREREFEUiA9ICUwOHhcbiIsIGRlc2MtPmRkYWRyKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFNBRFIgPSAlMDh4XG4iLCBkZXNjLT5kc2Fkcik7CisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERUQURSID0gJTA4eFxuIiwgZGVzYy0+ZHRhZHIpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREQ01EICA9ICUwOHggKCVzJXMlcyVzJXMlcyVzYnVyc3Q9JWQiCisJCQkJICAiIHdpZHRoPSVkIGxlbj0lZClcbiIsCisJCQkJICBkY21kLAorCQkJCSAgRENNRF9TVFIoSU5DU1JDQUREUiksIERDTURfU1RSKElOQ1RSR0FERFIpLAorCQkJCSAgRENNRF9TVFIoRkxPV1NSQyksIERDTURfU1RSKEZMT1dUUkcpLAorCQkJCSAgRENNRF9TVFIoU1RBUlRJUlFFTiksIERDTURfU1RSKEVORElSUUVOKSwKKwkJCQkgIERDTURfU1RSKEVORElBTiksIGJ1cnN0LCB3aWR0aCwKKwkJCQkgIGRjbWQgJiBEQ01EX0xFTkdUSCk7CisJCXBoeXNfZGVzYyA9IGRlc2MtPmRkYWRyOworCX0KKwlpZiAoaSA9PSBtYXhfc2hvdykKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBEZXNjIGF0ICUwOGx4IC4uLiBtYXggZGlzcGxheSByZWFjaGVkXG4iLAorCQkJCSAgaSwgcGh5c19kZXNjKTsKKwllbHNlCisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJbJTAzZF0gRGVzYyBhdCAlMDhseCBpcyAlc1xuIiwKKwkJCQkgIGksIHBoeXNfZGVzYywgcGh5c19kZXNjID09IEREQURSX1NUT1AgPworCQkJCSAgIkREQURSX1NUT1AiIDogImludmFsaWQiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFubmVsc1tjaGFuXS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBkYmdfc2hvd19jaGFuX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgcG9zID0gMDsKKwlpbnQgY2hhbiA9IChpbnQpcy0+cHJpdmF0ZTsKKwl1MzIgZGNzciwgZGNtZDsKKwlpbnQgYnVyc3QsIHdpZHRoOworCXN0YXRpYyBjaGFyICpzdHJfcHJpb1tdID0geyAiaGlnaCIsICJub3JtYWwiLCAibG93IiB9OworCisJZGNzciA9IERDU1IoY2hhbik7CisJZGNtZCA9IERDTUQoY2hhbik7CisJYnVyc3QgPSBkYmdfYnVyc3RfZnJvbV9kY21kKGRjbWQpOworCXdpZHRoID0gKDEgPDwgKChkY21kID4+IDE0KSAmIDB4MykpID4+IDE7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWRcbiIsIGNoYW4pOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdFByaW9yaXR5IDogJXNcbiIsCisJCQkgIHN0cl9wcmlvW2RtYV9jaGFubmVsc1tjaGFuXS5wcmlvXSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0VW5hbGlnbmVkIHRyYW5zZmVyIGJpdDogJXNcbiIsCisJCQkgIERBTEdOICYgKDEgPDwgY2hhbikgPyAieWVzIiA6ICJubyIpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERDU1IgID0gJTA4eCAoJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzKVxuIiwKKwkJCSAgZGNzciwgRENTUl9TVFIoUlVOKSwgRENTUl9TVFIoTk9ERVNDKSwKKwkJCSAgRENTUl9TVFIoU1RPUElSUUVOKSwgRENTUl9TVFIoRU9SSVJRRU4pLAorCQkJICBEQ1NSX1NUUihFT1JKTVBFTiksIERDU1JfU1RSKEVPUlNUT1BFTiksCisJCQkgIERDU1JfU1RSKFNFVENNUFNUKSwgRENTUl9TVFIoQ0xSQ01QU1QpLAorCQkJICBEQ1NSX1NUUihDTVBTVCksIERDU1JfU1RSKEVPUklOVFIpLCBEQ1NSX1NUUihSRVFQRU5EKSwKKwkJCSAgRENTUl9TVFIoU1RPUFNUQVRFKSwgRENTUl9TVFIoRU5ESU5UUiksCisJCQkgIERDU1JfU1RSKFNUQVJUSU5UUiksIERDU1JfU1RSKEJVU0VSUikpOworCisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RENNRCAgPSAlMDh4ICglcyVzJXMlcyVzJXMlc2J1cnN0PSVkIHdpZHRoPSVkIgorCQkJICAiIGxlbj0lZClcbiIsCisJCQkgIGRjbWQsCisJCQkgIERDTURfU1RSKElOQ1NSQ0FERFIpLCBEQ01EX1NUUihJTkNUUkdBRERSKSwKKwkJCSAgRENNRF9TVFIoRkxPV1NSQyksIERDTURfU1RSKEZMT1dUUkcpLAorCQkJICBEQ01EX1NUUihTVEFSVElSUUVOKSwgRENNRF9TVFIoRU5ESVJRRU4pLAorCQkJICBEQ01EX1NUUihFTkRJQU4pLCBidXJzdCwgd2lkdGgsIGRjbWQgJiBEQ01EX0xFTkdUSCk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFNBRFIgPSAlMDh4XG4iLCBEU0FEUihjaGFuKSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RFRBRFIgPSAlMDh4XG4iLCBEVEFEUihjaGFuKSk7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0RERBRFIgPSAlMDh4XG4iLCBEREFEUihjaGFuKSk7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBkYmdfc2hvd19zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisKKwkvKiBiYXNpYyBkZXZpY2Ugc3RhdHVzICovCisJcG9zICs9IHNlcV9wcmludGYocywgIkRNQSBlbmdpbmUgc3RhdHVzXG4iKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRDaGFubmVsIG51bWJlcjogJWRcbiIsIG51bV9kbWFfY2hhbm5lbHMpOworCisJcmV0dXJuIHBvczsKK30KKworI2RlZmluZSBEQkdGU19GVU5DX0RFQ0wobmFtZSkgXAorc3RhdGljIGludCBkYmdfb3Blbl8jI25hbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIFwKK3sgXAorCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYmdfc2hvd18jI25hbWUsIGlub2RlLT5pX3ByaXZhdGUpOyBcCit9IFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRiZ19mb3BzXyMjbmFtZSA9IHsgXAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwgXAorCS5vcGVuCQk9IGRiZ19vcGVuXyMjbmFtZSwgXAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLCBcCisJLnJlYWQJCT0gc2VxX3JlYWQsIFwKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLCBcCit9CisKK0RCR0ZTX0ZVTkNfREVDTChzdGF0ZSk7CitEQkdGU19GVU5DX0RFQ0woY2hhbl9zdGF0ZSk7CitEQkdGU19GVU5DX0RFQ0woZGVzY3JpcHRvcnMpOworREJHRlNfRlVOQ19ERUNMKHJlcXVlc3Rlcl9jaGFuKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnB4YV9kbWFfZGJnX2FsbG9jX2NoYW4oaW50IGNoLCBzdHJ1Y3QgZGVudHJ5ICpjaGFuZGlyKQoreworCWNoYXIgY2hhbl9uYW1lWzExXTsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuLCAqY2hhbl9zdGF0ZSA9IE5VTEwsICpjaGFuX2Rlc2NyID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuX3JlcXMgPSBOVUxMOworCXZvaWQgKmR0OworCisJc2NucHJpbnRmKGNoYW5fbmFtZSwgc2l6ZW9mKGNoYW5fbmFtZSksICIlZCIsIGNoKTsKKwljaGFuID0gZGVidWdmc19jcmVhdGVfZGlyKGNoYW5fbmFtZSwgY2hhbmRpcik7CisJZHQgPSAodm9pZCAqKWNoOworCisJaWYgKGNoYW4pCisJCWNoYW5fc3RhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0ZSIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJICZkYmdfZm9wc19jaGFuX3N0YXRlKTsKKwlpZiAoY2hhbl9zdGF0ZSkKKwkJY2hhbl9kZXNjciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlc2NyaXB0b3JzIiwgMDQwMCwgY2hhbiwgZHQsCisJCQkJCQkgJmRiZ19mb3BzX2Rlc2NyaXB0b3JzKTsKKwlpZiAoY2hhbl9kZXNjcikKKwkJY2hhbl9yZXFzID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVxdWVzdGVycyIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJJmRiZ19mb3BzX3JlcXVlc3Rlcl9jaGFuKTsKKwlpZiAoIWNoYW5fcmVxcykKKwkJZ290byBlcnJfc3RhdGU7CisKKwlyZXR1cm4gY2hhbjsKKworZXJyX3N0YXRlOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjaGFuKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcHhhX2RtYV9pbml0X2RlYnVnZnModm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGFuZGlyOworCisJZGJnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihETUFfREVCVUdfTkFNRSwgTlVMTCk7CisJaWYgKElTX0VSUihkYmdmc19yb290KSB8fCAhZGJnZnNfcm9vdCkKKwkJZ290byBlcnJfcm9vdDsKKworCWRiZ2ZzX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDAwLCBkYmdmc19yb290LCBOVUxMLAorCQkJCQkgICZkYmdfZm9wc19zdGF0ZSk7CisJaWYgKCFkYmdmc19zdGF0ZSkKKwkJZ290byBlcnJfc3RhdGU7CisKKwlkYmdmc19jaGFuID0ga21hbGxvYyhzaXplb2YoKmRiZ2ZzX3N0YXRlKSAqIG51bV9kbWFfY2hhbm5lbHMsCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghZGJnZnNfc3RhdGUpCisJCWdvdG8gZXJyX2FsbG9jOworCisJY2hhbmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2hhbm5lbHMiLCBkYmdmc19yb290KTsKKwlpZiAoIWNoYW5kaXIpCisJCWdvdG8gZXJyX2NoYW5kaXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7CisJCWRiZ2ZzX2NoYW5baV0gPSBweGFfZG1hX2RiZ19hbGxvY19jaGFuKGksIGNoYW5kaXIpOworCQlpZiAoIWRiZ2ZzX2NoYW5baV0pCisJCQlnb3RvIGVycl9jaGFuczsKKwl9CisKKwlyZXR1cm47CitlcnJfY2hhbnM6CitlcnJfY2hhbmRpcjoKKwlrZnJlZShkYmdmc19jaGFuKTsKK2Vycl9hbGxvYzoKK2Vycl9zdGF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnNfcm9vdCk7CitlcnJfcm9vdDoKKwlwcl9lcnIoInB4YV9kbWE6IGRlYnVnZnMgaXMgbm90IGF2YWlsYWJsZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBweGFfZG1hX2NsZWFudXBfZGVidWdmcyh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYmdmc19yb290KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2RtYV9pbml0X2RlYnVnZnModm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGFfZG1hX2NsZWFudXBfZGVidWdmcyh2b2lkKSB7fQorI2VuZGlmCisKIGludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsIHB4YV9kbWFfcHJpbyBwcmlvLAogCQkJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCiAJCQl2b2lkICpkYXRhKQpAQCAtNzEsNiArMzE1LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIGk7CiB9CitFWFBPUlRfU1lNQk9MKHB4YV9yZXF1ZXN0X2RtYSk7CiAKIHZvaWQgcHhhX2ZyZWVfZG1hIChpbnQgZG1hX2NoKQogewpAQCAtODgsMjQgKzMzMywyNiBAQAogCWRtYV9jaGFubmVsc1tkbWFfY2hdLm5hbWUgPSBOVUxMOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wocHhhX2ZyZWVfZG1hKTsKIAogc3RhdGljIGlycXJldHVybl90IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IGksIGRpbnQgPSBESU5UOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgewotCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKLQkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7Ci0JCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6Ci0JCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCi0JCQkJICovCi0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOwotCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7Ci0JCQl9CisJd2hpbGUgKGRpbnQpIHsKKwkJaSA9IF9fZmZzKGRpbnQpOworCQlkaW50ICY9IChkaW50IC0gMSk7CisJCWNoYW5uZWwgPSAmZG1hX2NoYW5uZWxzW2ldOworCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgeworCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6CisJCQkgKiBsZXQncyBjbGVhciB0aGUgaW50ZXJydXB0cyBhbmQgZGlzYWJsZSBpdC4KKwkJCSAqLworCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKIAkJfQogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjcsNiArMzc0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoOyBpKyspIHsKIAkJRENTUihpKSA9IDA7CiAJCWRtYV9jaGFubmVsc1tpXS5wcmlvID0gbWluKChpICYgMHhmKSA+PiAyLCBETUFfUFJJT19MT1cpOworCQlzcGluX2xvY2tfaW5pdCgmZG1hX2NoYW5uZWxzW2ldLmxvY2spOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZG1hX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELCAiRE1BIiwgTlVMTCk7CkBAIC0xMzUsMTAgKzM4Myw5IEBACiAJCWtmcmVlKGRtYV9jaGFubmVscyk7CiAJCXJldHVybiByZXQ7CiAJfQotCiAJbnVtX2RtYV9jaGFubmVscyA9IG51bV9jaDsKKworCXB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKCk7CisKIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwotRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCmluZGV4IDY0MDE5NDYuLjg1N2E2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpZm5kZWYgX19BU01fUExBVF9NRlBfSAogI2RlZmluZSBfX0FTTV9QTEFUX01GUF9ICiAKLSNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDEyOCkKKyNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDI1NikKIAogLyogbGlzdCBvZiBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBNRlAgcGlucyAqLwogZW51bSB7CkBAIC0xNTAsNiArMTUwLDc0IEBACiAJTUZQX1BJTl9HUElPMTI1LAogCU1GUF9QSU5fR1BJTzEyNiwKIAlNRlBfUElOX0dQSU8xMjcsCisKKwlNRlBfUElOX0dQSU8xMjgsCisJTUZQX1BJTl9HUElPMTI5LAorCU1GUF9QSU5fR1BJTzEzMCwKKwlNRlBfUElOX0dQSU8xMzEsCisJTUZQX1BJTl9HUElPMTMyLAorCU1GUF9QSU5fR1BJTzEzMywKKwlNRlBfUElOX0dQSU8xMzQsCisJTUZQX1BJTl9HUElPMTM1LAorCU1GUF9QSU5fR1BJTzEzNiwKKwlNRlBfUElOX0dQSU8xMzcsCisJTUZQX1BJTl9HUElPMTM4LAorCU1GUF9QSU5fR1BJTzEzOSwKKwlNRlBfUElOX0dQSU8xNDAsCisJTUZQX1BJTl9HUElPMTQxLAorCU1GUF9QSU5fR1BJTzE0MiwKKwlNRlBfUElOX0dQSU8xNDMsCisJTUZQX1BJTl9HUElPMTQ0LAorCU1GUF9QSU5fR1BJTzE0NSwKKwlNRlBfUElOX0dQSU8xNDYsCisJTUZQX1BJTl9HUElPMTQ3LAorCU1GUF9QSU5fR1BJTzE0OCwKKwlNRlBfUElOX0dQSU8xNDksCisJTUZQX1BJTl9HUElPMTUwLAorCU1GUF9QSU5fR1BJTzE1MSwKKwlNRlBfUElOX0dQSU8xNTIsCisJTUZQX1BJTl9HUElPMTUzLAorCU1GUF9QSU5fR1BJTzE1NCwKKwlNRlBfUElOX0dQSU8xNTUsCisJTUZQX1BJTl9HUElPMTU2LAorCU1GUF9QSU5fR1BJTzE1NywKKwlNRlBfUElOX0dQSU8xNTgsCisJTUZQX1BJTl9HUElPMTU5LAorCU1GUF9QSU5fR1BJTzE2MCwKKwlNRlBfUElOX0dQSU8xNjEsCisJTUZQX1BJTl9HUElPMTYyLAorCU1GUF9QSU5fR1BJTzE2MywKKwlNRlBfUElOX0dQSU8xNjQsCisJTUZQX1BJTl9HUElPMTY1LAorCU1GUF9QSU5fR1BJTzE2NiwKKwlNRlBfUElOX0dQSU8xNjcsCisJTUZQX1BJTl9HUElPMTY4LAorCU1GUF9QSU5fR1BJTzE2OSwKKwlNRlBfUElOX0dQSU8xNzAsCisJTUZQX1BJTl9HUElPMTcxLAorCU1GUF9QSU5fR1BJTzE3MiwKKwlNRlBfUElOX0dQSU8xNzMsCisJTUZQX1BJTl9HUElPMTc0LAorCU1GUF9QSU5fR1BJTzE3NSwKKwlNRlBfUElOX0dQSU8xNzYsCisJTUZQX1BJTl9HUElPMTc3LAorCU1GUF9QSU5fR1BJTzE3OCwKKwlNRlBfUElOX0dQSU8xNzksCisJTUZQX1BJTl9HUElPMTgwLAorCU1GUF9QSU5fR1BJTzE4MSwKKwlNRlBfUElOX0dQSU8xODIsCisJTUZQX1BJTl9HUElPMTgzLAorCU1GUF9QSU5fR1BJTzE4NCwKKwlNRlBfUElOX0dQSU8xODUsCisJTUZQX1BJTl9HUElPMTg2LAorCU1GUF9QSU5fR1BJTzE4NywKKwlNRlBfUElOX0dQSU8xODgsCisJTUZQX1BJTl9HUElPMTg5LAorCU1GUF9QSU5fR1BJTzE5MCwKKwlNRlBfUElOX0dQSU8xOTEsCisKKwlNRlBfUElOX0dQSU8yNTUgPSAyNTUsCisKIAlNRlBfUElOX0dQSU8wXzIsCiAJTUZQX1BJTl9HUElPMV8yLAogCU1GUF9QSU5fR1BJTzJfMiwKQEAgLTMyNSw4ICszOTMsOSBAQAogI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCisjZGVmaW5lIE1GUF9QVUxMX0ZMT0FUCQkoMHg0IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHg3IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHg3KQogCiAjZGVmaW5lIE1GUF9DRkdfREVGQVVMVAkJKE1GUF9BRjAgfCBNRlBfRFMwM1ggfCBNRlBfTFBNX0RFRkFVTFQgfFwKIAkJCQkgTUZQX0xQTV9FREdFX05PTkUgfCBNRlBfUFVMTF9OT05FKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwppbmRleCBlNzE2YzYyLi5iZTU4ZjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtNzcsMTEgKzc3LDEzIEBACiAgKiBNRlBSX1BVTExfTE9XICAgICAgICAxICAgICAgICAgMCAgICAgICAgMQogICogTUZQUl9QVUxMX0hJR0ggICAgICAgMSAgICAgICAgIDEgICAgICAgIDAKICAqIE1GUFJfUFVMTF9CT1RIICAgICAgIDEgICAgICAgICAxICAgICAgICAxCisgKiBNRlBSX1BVTExfRkxPQVQJMSAgICAgICAgIDAgICAgICAgIDAKICAqLwogI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCiAjZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKICNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCiAjZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQorI2RlZmluZSBNRlBSX1BVTExfRkxPQVQJCShNRlBSX1BVTExfU0VMKQogCiAvKiBtZnBfc3Bpbl9sb2NrIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgTUZQIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KICAqIChtb3N0IGxpa2VseSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbikgaXMgYXRvbWljLCBhbmQgdGhhdApAQCAtMTE2LDYgKzExOCw3IEBACiAJTUZQUl9QVUxMX0xPVywKIAlNRlBSX1BVTExfSElHSCwKIAlNRlBSX1BVTExfQk9USCwKKwlNRlBSX1BVTExfRkxPQVQsCiB9OwogCiAvKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KQEAgLTIwNCw3ICsyMDcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKIAotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCUJVR19PTihtZnAgPCAwIHx8IG1mcCA+PSBNRlBfUElOX01BWCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCXZhbCA9IG1mcHJfcmVhZGwobWZwX3RhYmxlW21mcF0ubWZwcl9vZmYpOwpAQCAtMjE3LDcgKzIyMCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCUJVR19PTihtZnAgPCAwIHx8IG1mcCA+PSBNRlBfUElOX01BWCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCW1mcHJfd3JpdGVsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmLCB2YWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCmluZGV4IDI2MGZkYzYuLjVmZjI0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogCWdwbiA9IGNoaXAtPmNoaXAuYmFzZTsKIAlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+Y2hpcC5uZ3BpbzsgaSsrLCBncG4rKykgewotCQlCVUdfT04oZ3BuID4gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKKwkJQlVHX09OKGdwbiA+PSBBUlJBWV9TSVpFKHMzY19ncGlvcykpOwogCQlzM2NfZ3Bpb3NbZ3BuXSA9IGNoaXA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCmluZGV4IDExMTE3YTcuLmRmNDczMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTE4OCw3ICsxODksNyBAQAogZXJyOgogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX2NvbnZlcnQpOworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19yZWFkKTsKIAogc3RhdGljIHZvaWQgczNjX2FkY19kZWZhdWx0X3NlbGVjdChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKIAkJCQkgICB1bnNpZ25lZCBzZWxlY3QpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggNTQ0N2U2MC4uNGFmOWRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtNjEsNiArNjEsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEyW10gID0gIlMzQzI0MTIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwW10gID0gIlMzQzI0NDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyW10gID0gIlMzQzI0NDIiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyYltdICA9ICJTM0MyNDQyQiI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0NDNbXSAgPSAiUzNDMjQ0MyI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0MTBhW10gPSAiUzNDMjQxMEEiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwYVtdID0gIlMzQzI0NDBBIjsKQEAgLTExMiw2ICsxMTMsMTUgQEAKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyCiAJfSwKIAl7CisJCS5pZGNvZGUJCT0gMHgzMjQ0MGFhYiwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQ0Ml9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0NDJiCisJfSwKKwl7CiAJCS5pZGNvZGUJCT0gMHgzMjQxMjAwMSwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MTJfbWFwX2lvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IDE5NmIxOTEuLmYwNDZmOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTIwOCwxNCArMjA4LDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyByZWxvYWQ7CiAKLQlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAotCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7Ci0KIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJZG1hd2FybigiYnVmZmVyIGlzIE5VTExcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlwcl9kZWJ1ZygiczNjMjQxMF9jaGFuX2xvYWRidWZmZXI6IGxvYWRpbmcgYnVmZiAlcCAoMHglMDhseCwweCUwNngpXG4iLAorCQkgYnVmLCAodW5zaWduZWQgbG9uZylidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7CisKIAkvKiBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIGNoYW5uZWwgYmVmb3JlIHdlIGRvIGFueXRoaW5nICovCiAKIAlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKaW5kZXggOTVkZjA1OS4uNTQ2NzQ3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCmluZGV4IGVmZWIwMjUuLmM3NzYxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCkBAIC0yMjIsNyArMjIyLDkgQEAKIC8qIFMzQzI0MTAgYW5kIGNvbXBhdGlibGUgZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CitleHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CiAKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORwogZXh0ZXJuIGludCBzM2MyNDEwX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAogCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KTsKIApAQCAtMjMxLDggKzIzMywxMSBAQAogCiBleHRlcm4gdm9pZCBzM2MyNDEwX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwotCi1leHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisjZWxzZQorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2NhbGMgTlVMTAorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2dldCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfc2V0IE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORyAqLwogCiAvKiBTM0MyNDEyIGNvbXBhdGlibGUgcm91dGluZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKaW5kZXggMmQwODUyYS4uYzJjZWY2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCkBAIC0yLDggKzIsMTEgQEAKICNkZWZpbmUgX0FSQ0hfTUNJX0gKIAogc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHsKKwl1bnNpZ25lZCBpbnQJbm9fd3Byb3RlY3QgOiAxOworCXVuc2lnbmVkIGludAlub19kZXRlY3QgOiAxOwogCXVuc2lnbmVkIGludAl3cHJvdGVjdF9pbnZlcnQgOiAxOwogCXVuc2lnbmVkIGludAlkZXRlY3RfaW52ZXJ0IDogMTsgICAvKiBzZXQgPT4gZGV0ZWN0IGFjdGl2ZSBoaWdoLiAqLworCXVuc2lnbmVkIGludAl1c2VfZG1hIDogMTsKIAogCXVuc2lnbmVkIGludAlncGlvX2RldGVjdDsKIAl1bnNpZ25lZCBpbnQJZ3Bpb193cHJvdGVjdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKaW5kZXggYjZkZWVlZi4uODJhYjRhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIHMzYzI0MTBfaW5pdF91YXJ0cyBOVUxMCiAjZGVmaW5lIHMzYzI0MTBfbWFwX2lvIE5VTEwKICNkZWZpbmUgczNjMjQxMF9pbml0IE5VTEwKKyNkZWZpbmUgczNjMjQxMGFfaW5pdCBOVUxMCiAjZW5kaWYKIAogZXh0ZXJuIGludCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCmluZGV4IDY3YWE5M2QuLmQ1NTRiOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKQEAgLTE1MSw4ICsxNTEsNiBAQAogCQlzcmMgPSBjaGFuLT5kZXZfYWRkcjsKIAkJZHN0ID0gZGF0YTsKIAkJY29udHJvbDAgPSBQTDA4MF9DT05UUk9MX1NSQ19BSEIyOwotCQljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwotCQljb250cm9sMCB8PSAyIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOwogCQljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX0RTVF9JTkNSOwogCQlicmVhazsKIApAQCAtMTYwLDggKzE1OCw2IEBACiAJCXNyYyA9IGRhdGE7CiAJCWRzdCA9IGNoYW4tPmRldl9hZGRyOwogCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7Ci0JCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7Ci0JCWNvbnRyb2wwIHw9IDIgPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAJCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfU1JDX0lOQ1I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzMsNiArMTY5LDggQEAKIAljb250cm9sMSA9IHNpemUgPj4gY2hhbi0+aHdfd2lkdGg7CS8qIHNpemUgaW4gbm8gb2YgeGZlcnMgKi8KIAljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1BST1RfU1lTOwkvKiBhbHdheXMgaW4gcHJpdi4gbW9kZSAqLwogCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfVENfSVJRX0VOOwkvKiBhbHdheXMgZmlyZSBJUlEgKi8KKwljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAKIAlsbGktPnNyY19hZGRyID0gc3JjOwogCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CkBAIC0zMzksMTkgKzMzNywyMCBAQAogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OwogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOwogCXN0cnVjdCBwbDA4MHNfbGxpICpsbGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTighY2hhbik7CiAJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9LRVJORUwpOworCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlsbGkgPSBkbWFfcG9vbF9hbGxvYyhkbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJmJ1ZmYtPmxsaV9kbWEpOworCWxsaSA9IGRtYV9wb29sX2FsbG9jKGRtYV9wb29sLCBHRlBfQVRPTUlDLCAmYnVmZi0+bGxpX2RtYSk7CiAJaWYgKCFsbGkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBsbGlcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTM2Niw2ICszNjUsOCBAQAogCiAJczNjNjR4eF9kbWFfZmlsbF9sbGkoY2hhbiwgbGxpLCBkYXRhLCBzaXplKTsKIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCWlmICgobmV4dCA9IGNoYW4tPm5leHQpICE9IE5VTEwpIHsKIAkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZCA9IGNoYW4tPmVuZDsKIAkJc3RydWN0IHBsMDgwc19sbGkgKmVuZGxsaSA9IGVuZC0+bGxpOwpAQCAtMzk3LDYgKzM5OCw4IEBACiAJCXMzYzY0eHhfbGxpX3RvX3JlZ3MoY2hhbiwgbGxpKTsKIAl9CiAKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlzaG93X2xsaShsbGkpOwogCiAJZGJnX3Nob3djaGFuKGNoYW4pOwpAQCAtNTYwLDI2ICs1NjMsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKIAotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV90Y2lycShzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjLCBpbnQgb2ZmcykKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKLQotCS8qIG5vdGUsIHdlIGN1cnJlbnRseSBkbyBub3QgYm90aGVyIHRvIHdvcmsgb3V0IHdoaWNoIGJ1ZmZlcgotCSAqIG9yIGJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzaW5jZSB0aGUgbGFzdCB0Yy1pcnEuICovCi0KLQlpZiAoY2hhbi0+Y2FsbGJhY2tfZm4pCi0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgY2hhbi0+Y3Vyci0+cHcsIDAsIFMzQzI0MTBfUkVTX09LKTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfZXJyaXJxKHN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMsIGludCBvZmZzKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmcyAlZFxuIiwgX19mdW5jX18sIG9mZnMpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgczNjNjR4eF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB3KQogewogCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBwdzsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwllbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzOwogCXUzMiB0Y3N0YXQsIGVycnN0YXQ7CiAJdTMyIGJpdDsKIAlpbnQgb2ZmczsKQEAgLTU4OCwxNCArNTc2LDU0IEBACiAJZXJyc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfU1RBVFVTKTsKIAogCWZvciAob2ZmcyA9IDAsIGJpdCA9IDE7IG9mZnMgPCA4OyBvZmZzKyssIGJpdCA8PD0gMSkgeworCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKKworCQlpZiAoIShlcnJzdGF0ICYgYml0KSAmJiAhKHRjc3RhdCAmIGJpdCkpCisJCQljb250aW51ZTsKKworCQljaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOworCQlyZXMgPSBTM0MyNDEwX1JFU19FUlI7CisKIAkJaWYgKHRjc3RhdCAmIGJpdCkgewogCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX1RDX0NMRUFSKTsKLQkJCXMzYzY0eHhfZG1hX3RjaXJxKGRtYWMsIG9mZnMpOworCQkJcmVzID0gUzNDMjQxMF9SRVNfT0s7CiAJCX0KIAotCQlpZiAoZXJyc3RhdCAmIGJpdCkgewotCQkJczNjNjR4eF9kbWFfZXJyaXJxKGRtYWMsIG9mZnMpOworCQlpZiAoZXJyc3RhdCAmIGJpdCkKIAkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfQ0xFQVIpOworCisJCS8qICduZXh0JyBwb2ludHMgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIG5leHQgdG8gdGhlCisJCSAqIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyLgorCQkgKiBGb3IgQ0lSQ1VMQVIgcXVldWVzLCAnbmV4dCcgd2lsbCBiZSBzYW1lIGFzICdjdXJyJworCQkgKiB3aGVuICdlbmQnIGlzIHRoZSBhY3RpdmUgYnVmZmVyLgorCQkgKi8KKwkJYnVmZiA9IGNoYW4tPmN1cnI7CisJCXdoaWxlIChidWZmICYmIGJ1ZmYgIT0gY2hhbi0+bmV4dAorCQkJCSYmIGJ1ZmYtPm5leHQgIT0gY2hhbi0+bmV4dCkKKwkJCWJ1ZmYgPSBidWZmLT5uZXh0OworCisJCWlmICghYnVmZikKKwkJCUJVRygpOworCisJCWlmIChidWZmID09IGNoYW4tPm5leHQpCisJCQlidWZmID0gY2hhbi0+ZW5kOworCisJCXMzYzY0eHhfZG1hX2J1ZmZmZG9uZShjaGFuLCBidWZmLCByZXMpOworCisJCS8qIEZyZWUgdGhlIG5vZGUgYW5kIHVwZGF0ZSBjdXJyLCBpZiBub24tY2lyY3VsYXIgcXVldWUgKi8KKwkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKSB7CisJCQljaGFuLT5jdXJyID0gYnVmZi0+bmV4dDsKKwkJCXMzYzY0eHhfZG1hX2ZyZWVidWZmKGJ1ZmYpOworCQl9CisKKwkJLyogVXBkYXRlICduZXh0JyAqLworCQlidWZmID0gY2hhbi0+bmV4dDsKKwkJaWYgKGNoYW4tPm5leHQgPT0gY2hhbi0+ZW5kKSB7CisJCQljaGFuLT5uZXh0ID0gY2hhbi0+Y3VycjsKKwkJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkKKwkJCQljaGFuLT5lbmQgPSBOVUxMOworCQl9IGVsc2UgeworCQkJY2hhbi0+bmV4dCA9IGJ1ZmYtPm5leHQ7CiAJCX0KIAl9CiAKQEAgLTY5Nyw3ICs3MjUsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyaW5nIERNQSBjaGFubmVsc1xuIiwgX19mdW5jX18pOwogCi0JZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCAzMiwgMTYsIDApOworCWRtYV9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJETUEtTExJIiwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBwbDA4MHNfbGxpKSwgMTYsIDApOwogCWlmICghZG1hX3Bvb2wpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwb29sXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCmluZGV4IDBjMzBkZDkuLjhmNzZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKIAogCXZvaWQJCQkqcHc7Ci0Jc3RydWN0IHBsMDgwX2xsaQkqbGxpOworCXN0cnVjdCBwbDA4MHNfbGxpCSpsbGk7CiAJZG1hX2FkZHJfdAkJIGxsaV9kbWE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDc0M2E3MDAuLjc5NTZmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0xOTQsOSArMTk0LDE3IEBACiAKICNkZWZpbmUgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG5vKQkoSVJRX0VJTlRfR1JPVVAjI2dyb3VwIyNfQkFTRSArIChubykpCiAKKy8qIERlZmluZSBhIGdyb3VwIG9mIGludGVycnVwdHMgZm9yIGJvYXJkLXNwZWNpZmljIHVzZSAoZWcsIGZvciBNRkQKKyAqIGludGVycnVwdCBjb250cm9sbGVycykuICovCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVCAoSVJRX0VJTlRfR1JPVVA5X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDlfTlIgKyAxKQorCisjZGVmaW5lIElSUV9CT0FSRF9OUiAxNgorCisjZGVmaW5lIElSUV9CT0FSRF9FTkQgKElSUV9CT0FSRF9TVEFSVCArIElSUV9CT0FSRF9OUikKKwogLyogU2V0IHRoZSBkZWZhdWx0IE5SX0lSUVMgKi8KIAotI2RlZmluZSBOUl9JUlFTCShJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisjZGVmaW5lIE5SX0lSUVMJKElSUV9CT0FSRF9FTkQgKyAxKQogCiAjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCmluZGV4IGE4Nzc3YTc1Li5mZjQ2ZTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApAQCAtNTEsOCArNTEsOCBAQAogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfSENMS19TSElGVAkoOCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfTUFTSwkoMHgxIDw8IDQpCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9NUExMX1NISUZUCSg0KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX01BU0sJKDB4MyA8PCAwKQotI2RlZmluZSBTM0M2NDEwX0NMS0RJVjBfQVJNX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBTM0M2NDEwX0NMS0RJVjBfQVJNX01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX1NISUZUCSgwKQogCiAvKiBDTEtESVYxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwppbmRleCBmZWJhYzE5Li42ZmZhMjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKQEAgLTMwMiw4ICszMDIsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdmFsICY9IH4oMHhmIDw8IHNjbGstPnNoaWZ0KTsKLQl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPnNoaWZ0OworCXZhbCAmPSB+KDB4ZiA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0KTsKKwl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPmRpdmlkZXJfc2hpZnQ7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtMzI4LDYgKzMyOCw4IEBACiAJCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7CiAKIAkJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDX0NMS19TUkMpOworCisJCWNsay0+cGFyZW50ID0gcGFyZW50OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM0Myw3ICszNDUsNyBAQAogCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCiAJCXJhdGUgPSBwYXJlbnRfcmF0ZTsKIAllbHNlIHsKLQkJZGl2ID0gcmF0ZSAvIHBhcmVudF9yYXRlOworCQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CiAKIAkJaWYgKGRpdiA9PSAwKQogCQkJZGl2ID0gMTsKQEAgLTY3NSw2ICs2NzcsOSBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4dGFsIGlzICVsZFxuIiwgX19mdW5jX18sIHh0YWwpOwogCisJLyogRm9yIG5vdyBhc3N1bWUgdGhlIG11eCBhbHdheXMgc2VsZWN0cyB0aGUgY3J5c3RhbCAqLworCWNsa19leHRfeHRhbF9tdXgucGFyZW50ID0geHRhbF9jbGs7CisKIAllcGxsID0gczNjNjQwMF9nZXRfZXBsbCh4dGFsKTsKIAltcGxsID0gczNjNjQwMF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFMzQ19NUExMX0NPTikpOwogCWFwbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX0FQTExfQ09OKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYwppbmRleCBkMmY0OTc3Li5lZjg4ZjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQkJCQlzdG1wM3h4eF9kbWFfZnJlZV9jb21tYW5kKGNoLAogCQkJCQkJCQkgICZkZXNjcmlwdG9ycwogCQkJCQkJCQkgIFtpXSk7Ci0JCQkJfSB3aGlsZSAoaS0tID49IDApOworCQkJCX0gd2hpbGUgKGktLSA+IDApOwogCQkJfQogCQkJcmV0dXJuIGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggYzhjNTViNC4uOTRiZTdiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU2F0IFNlcCAxMiAxMjowMDoxNiAyMDA5CisjIExhc3QgdXBkYXRlOiBGcmkgU2VwIDE4IDIxOjQyOjAwIDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTYzOCw3ICsxNjM4LDcgQEAKIGFtbF9tODA1MAkJTUFDSF9BTUxfTTgwNTAJCUFNTF9NODA1MAkJMTY0NAogbXgzNV8zZHMJCU1BQ0hfTVgzNV8zRFMJCU1YMzVfM0RTCQkxNjQ1CiBtYXJzCQkJTUFDSF9NQVJTCQlNQVJTCQkJMTY0NgotbnRvc2RfNjQ0eGEJCU1BQ0hfTlRPU0RfNjQ0WEEJTlRPU0RfNjQ0WEEJCTE2NDcKK25ldXJvc19vc2QyCQlNQUNIX05FVVJPU19PU0QyCU5FVVJPU19PU0QyCQkxNjQ3CiBiYWRnZXIJCQlNQUNIX0JBREdFUgkJQkFER0VSCQkJMTY0OAogdHJpemVwczR3bAkJTUFDSF9UUklaRVBTNFdMCQlUUklaRVBTNFdMCQkxNjQ5CiB0cml6ZXBzNQkJTUFDSF9UUklaRVBTNQkJVFJJWkVQUzUJCTE2NTAKQEAgLTE2NTQsNyArMTY1NCw3IEBACiB6b3JhbjQzeHgJCU1BQ0hfWk9SQU40M1hYCQlaT1JBTjQzWFgJCTE2NjAKIHNvbml4OTI2CQlNQUNIX1NPTklYOTI2CQlTT05JWDkyNgkJMTY2MQogY2VsZXN0aWFsc2VtaQkJTUFDSF9DRUxFU1RJQUxTRU1JCUNFTEVTVElBTFNFTUkJCTE2NjIKLWNjOW0yNDQzCQlNQUNIX0NDOU0yNDQzCQlDQzlNMjQ0MwkJMTY2MworY2M5bTI0NDNqcwkJTUFDSF9DQzlNMjQ0M0pTCQlDQzlNMjQ0M0pTCQkxNjYzCiB0dzUzMzQJCQlNQUNIX1RXNTMzNAkJVFc1MzM0CQkJMTY2NAogb21hcF9odGNhcnRlbWlzCQlNQUNIX0hUQ0FSVEVNSVMJCUhUQ0FSVEVNSVMJCTE2NjUKIG5hbF9obGl0ZQkJTUFDSF9OQUxfSExJVEUJCU5BTF9ITElURQkJMTY2NgpAQCAtMTgwMiw3ICsxODAyLDcgQEAKIHJkODhmNTE4MWxfZ2UJCU1BQ0hfUkQ4OEY1MTgxTF9HRQlSRDg4RjUxODFMX0dFCQkxODEyCiBzaWZtYWluCQkJTUFDSF9TSUZNQUlOCQlTSUZNQUlOCQkJMTgxMwogc2FtOV9sOTI2MQkJTUFDSF9TQU05X0w5MjYxCQlTQU05X0w5MjYxCQkxODE0Ci1jYzltMjQ0M2pzCQlNQUNIX0NDOU0yNDQzSlMJCUNDOU0yNDQzSlMJCTE4MTUKK2NjOW0yNDQzCQlNQUNIX0NDOU0yNDQzCQlDQzlNMjQ0MwkJMTgxNQogeGFyaWEzMDAJCU1BQ0hfWEFSSUEzMDAJCVhBUklBMzAwCQkxODE2CiBpdDkyMDAJCQlNQUNIX0lUOTIwMAkJSVQ5MjAwCQkJMTgxNwogcmQ4OGY1MTgxbF9meG8JCU1BQ0hfUkQ4OEY1MTgxTF9GWE8JUkQ4OEY1MTgxTF9GWE8JCTE4MTgKQEAgLTI0MDksMyArMjQwOSwxNSBAQAogcHNzMgkJCU1BQ0hfUFNTMgkJUFNTMgkJCTI0MjMKIGRhdmluY2lfYXBtMTUwCQlNQUNIX0RBVklOQ0lfQVBNMTUwCURBVklOQ0lfQVBNMTUwCQkyNDI0CiBzdHI5MTAwCQkJTUFDSF9TVFI5MTAwCQlTVFI5MTAwCQkJMjQyNQorbmV0NWJpZwkJCU1BQ0hfTkVUNUJJRwkJTkVUNUJJRwkJCTI0MjYKK3NlYWJlZDkyNjMJCU1BQ0hfU0VBQkVEOTI2MwkJU0VBQkVEOTI2MwkJMjQyNworbXg1MV9tMmlkCQlNQUNIX01YNTFfTTJJRAkJTVg1MV9NMklECQkyNDI4CitvY3R2b2NwbHVzX2ViCQlNQUNIX09DVFZPQ1BMVVNfRUIJT0NUVk9DUExVU19FQgkJMjQyOQora2xrX2ZpcmVmb3gJCU1BQ0hfS0xLX0ZJUkVGT1gJS0xLX0ZJUkVGT1gJCTI0MzAKK2tsa193aXJtYV9tb2R1bGUJTUFDSF9LTEtfV0lSTUFfTU9EVUxFCUtMS19XSVJNQV9NT0RVTEUJMjQzMQora2xrX3dpcm1hX21taQkJTUFDSF9LTEtfV0lSTUFfTU1JCUtMS19XSVJNQV9NTUkJCTI0MzIKK3N1cGVyc29uaWMJCU1BQ0hfU1VQRVJTT05JQwkJU1VQRVJTT05JQwkJMjQzMworbGliZXJ0eQkJCU1BQ0hfTElCRVJUWQkJTElCRVJUWQkJCTI0MzQKK21oMzU1CQkJTUFDSF9NSDM1NQkJTUgzNTUJCQkyNDM1CitwYzc4MDIJCQlNQUNIX1BDNzgwMgkJUEM3ODAyCQkJMjQzNgorZ25ldF9zZ2MJCU1BQ0hfR05FVF9TR0MJCUdORVRfU0dDCQkyNDM3CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDQ0ZDBiZmEuLjljOTZhMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zMSw1ICszMSw4IEBACiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MygpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlybCgpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDkoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCSgwKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9BRElfQlNELnR4dCBiL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBCU0QtU3R5bGUgTGljZW5zZSBhcHBsaWVzIHRvIGEgZmV3IGZpbGVzIGluIC4vYXJjaC9ibGFja2ZpbiBkaXJlY3RvcnksCithbmQgaXMgaW5jbHVkZWQgaGVyZSwgc28gcGVvcGxlIHVuZGVyc3RhbmQgd2hpY2ggY29kZSB0aGV5IGNhbiB1c2Ugb3V0c2lkZQordGhlIExpbnV4IGtlcm5lbCwgaW4gbm9uLUdQTCBiYXNlZCBwcm9qZWN0cy4KKworVXNpbmcgdGhlIGZpbGVzIHJlbGVhc2VkIHVuZGVyIHRoZSAiQURJIEJTRCIgbGljZW5zZSwgbXVzdCBjb21wbHkgd2l0aAordGhlc2UgbGljZW5zZSB0ZXJtcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IEFuYWxvZyBEZXZpY2VzLCBJbmMuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KKyAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFuYWxvZyBEZXZpY2VzLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAtIFRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtYXkgb3IgbWF5IG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IHJpZ2h0cworICAgIG9mIG9uZSBvciBtb3JlIHBhdGVudCBob2xkZXJzLiAgVGhpcyBsaWNlbnNlIGRvZXMgbm90IHJlbGVhc2UgeW91CisgICAgZnJvbSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB5b3Ugb2J0YWluIHNlcGFyYXRlIGxpY2Vuc2VzIGZyb20gdGhlc2UKKyAgICBwYXRlbnQgaG9sZGVycyB0byB1c2UgdGhpcyBzb2Z0d2FyZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTkFMT0cgREVWSUNFUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBBTkFMT0cgREVWSUNFUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCA5YTAxZDQ0Li5hZTZhNjBmMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNDcsNiArNDcsOSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgeQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAogY29uZmlnIFNNUAogCWRlcGVuZHMgb24gQkY1NjEKLQlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsCkBAIC02MTMsMTIgKzYxNiwxMCBAQAogc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CiAKIGNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sICJHZW5lcmljIHRpbWUiCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wgIkdlbmVyaWMgY2xvY2sgZXZlbnRzIgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCiAJZGVmYXVsdCB5CiAKIGNob2ljZQpAQCAtNjUzLDYgKzY1NCwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlcGVuZHMgb24gIVRJQ0tTT1VSQ0VfR1BUTVIwCiAKK2NvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCWRlcGVuZHMgb24gIUdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKIHNvdXJjZSBrZXJuZWwvdGltZS9LY29uZmlnCiAKIGNvbW1lbnQgIk1pc2MiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA4OGYzNmQ1Li5kMjdjNjI3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfQkxBQ0tGSU5fQVRPTUlDX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCmluZGV4IGFlZjA1OTQuLjEwMDY0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKQEAgLTEsMjkgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vYmZpbi1nbG9iYWwuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KKyAqIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0dMT0JBTF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCmluZGV4IGMyODFjNjMuLmVkNGY4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaAppbmRleCA0MjVlY2U2Li5hYmRiMmFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCkBAIC0xLDYgKzEsMTAgQEAKIC8qCiAgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGludG8gcGxhdGZvcm1fZGF0YQogICogYW5kIHBsYWNlIHRoZSBiZmluLXJvdGFyeSBvbnRvIHBsYXRmb3JtX2J1cyBuYW1lZCAiYmZpbi1yb3RhcnkiLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9ST1RBUllfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oCmluZGV4IGZjY2JiNTkuLjUyNDhjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX2JmaW5fc2ltcGxlX3RpbWVyX2hfCiAjZGVmaW5lIF9iZmluX3NpbXBsZV90aW1lcl9oXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkYWZmYTcxLi5hMmZmM2ZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX0JJVE9QU19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9CSVRPUFNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmgKaW5kZXggNGQ0NDM5NS4uZWI3YzE0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBCbGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KICAqCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDY1NWU0OTUuLjZmNDU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fQlVHX0gKICNkZWZpbmUgX0JMQUNLRklOX0JVR19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCmluZGV4IDNlNjkxMDYuLjk1NTg0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMSw2ICsxIEBACi0jaWZuZGVmIF9CTEFDS0ZJTl9CWVRFT1JERVJfSAotI2RlZmluZSBfQkxBQ0tGSU5fQllURU9SREVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+Ci0KLSNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA0NzcwNTBhLi44NTQyYmMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NhY2hlLmgKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAKQEAgLTM1LDEwICszOCwxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0JGSU5fQ0FDSEVfQ09IRVJFTlQpCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fSUNBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFKQorIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUpCiAjIGRlZmluZSBfX0FSQ0hfU1lOQ19DT1JFX0lDQUNIRQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0RDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfRENBQ0hFQUJMRSkKKyMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFKQogIyBkZWZpbmUgX19BUkNIX1NZTkNfQ09SRV9EQ0FDSEUKICMgZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdlNTU1NDllLi5hZjAzYTM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jYWNoZWZsdXNoLmgKLSAqIEJhc2VkIG9uOgkgaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlZmx1c2guaAotICogQXV0aG9yOiAgICAgICBMRyBTb2Z0IEluZGlhCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMgYWRhcHRlZCBmcm9tIHRoZSBpMzg2Ci0gKiAJCSBhbmQgUFBDIHZlcnNpb25zIGJ5IEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKiBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMKICAqCi0gKiBNb2RpZmllZDoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKaW5kZXggMzVmODQxYi4uODc3OGUwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMwICsxLDggQEAKLSAvKgotICAqIEZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCisvKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZm5kZWYgX0NERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9DREVGX0xQQkxBQ0tGSU5fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCmluZGV4IDc5MzU4MWYuLmEyMzQxNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKQEAgLTEsOSArMSwxNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICBha2Jhci5odXNzYWluQGxpbmVvLmNvbQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0NIRUNLU1VNX0gKICNkZWZpbmUgX0JGSU5fQ0hFQ0tTVU1fSAogCiAvKgotICogTU9ESUZJRUQgRk9SIEJGSU4gQXByaWwgMzAsIDIwMDEgYWtiYXIuaHVzc2FpbkBsaW5lby5jb20KLSAqCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKICAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKaW5kZXggMDMzYmJhOS4uZjgwZGFkNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2Nsb2Nrcy5oCi0gKiBCYXNlZCBvbjogICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb21tb24gQ2xvY2sgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMga2VybmVsIGZpbGVzCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIENvbW1vbiBDbG9jayBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgZmlsZXMKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0NMT0NLU19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCmluZGV4IGY4YTY2NGYuLjVkZmZhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NvbnRleHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCmluZGV4IGQxOGQxNjguLmZkYTk2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGIuaAotICogQmFzZWQgb246ICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDAKLSAqIERlc2NyaXB0aW9uOiAgQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DUExCX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAppbmRleCAwNWIxNGE2Li5mMzE1YzgzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGJpbml0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0NQTEJJTklUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggZmFkZmE4Mi4uYjE5MWRjNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmguCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BU01fQkxBQ0tGSU5fQ1BVX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAppbmRleCA2MzQxZWViLi4yNTkwNjQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMyICsxLDEwIEBACi0gLyoKLSAgKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCi0KLS8qIExQIEJsYWNrZmluIENPUkUgUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzMi8zMyAqLworLyoKKyAqIEJsYWNrZmluIGNvcmUgcmVnaXN0ZXIgYml0ICYgYWRkcmVzcyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgR1BMLTIgKG9yIGxhdGVyKS4KKyAqLwogCiAjaWZuZGVmIF9ERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9ERUZfTFBCTEFDS0ZJTl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZWQ2YjFmMy4uN2EyM2Q4MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCmluZGV4IDk2ZTgyMDguLjkyNWU2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCkBAIC0xLDkgKzEsMTEgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9kcG1jLmggLSAgTWlzY2VsbGFuZW91cyBJT0NUTCBjb21tYW5kcyBmb3IgRHluYW1pYyBQb3dlcgotICogICAJCQkgCU1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIuCisgKiBNaXNjZWxsYW5lb3VzIElPQ1RMIGNvbW1hbmRzIGZvciBEeW5hbWljIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlIEluYy4KICAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9EUE1DX0hfCiAjZGVmaW5lIF9CTEFDS0ZJTl9EUE1DX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oCmluZGV4IDUzYTc2MmIuLjY4YTkxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaApAQCAtMSwyNyArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vZWFybHlfcHJpbnRrLmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmcKKyAqIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50awogICoKLSAqIENyZWF0ZWQ6ICAgICAgMTRBdWcyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50aworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKLQogI2lmbmRlZiBfX0FTTV9FQVJMWV9QUklOVEtfSF9fCiAjZGVmaW5lIF9fQVNNX0VBUkxZX1BSSU5US19IX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzgyM2U4ZS4uOGUwNzY0YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xLDQgKzEsOCBAQAotLyogQ2hhbmdlcyBtYWRlIGJ5ICBMRyBTb2Z0IE9jdCAyMDA0Ki8KKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmbmRlZiBfX0FTTUJGSU5fRUxGX0gKICNkZWZpbmUgX19BU01CRklOX0VMRl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmgKaW5kZXggNTViODA4Zi4uYTY4ODZmNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fRU5UUllfSAogI2RlZmluZSBfX0JGSU5fRU5UUllfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggOWM0MDM3MS4uODcyN2IyYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9GQ05UTF9ICiAjZGVmaW5lIF9CRklOX0ZDTlRMX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAppbmRleCAzMmM0ZDQ5Li43M2ZlNTNlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaApAQCAtMSw1ICsxLDExIEBACi0vKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gZmluZAotICAgYXRvbWljIGNvZGUgc2VxdWVuY2VzLiAgKi8KKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcworICogY2FuIGZpbmQgYXRvbWljIGNvZGUgc2VxdWVuY2VzLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZuZGVmIF9fQkZJTl9BU01fRklYRURfQ09ERV9IX18KICNkZWZpbmUgX19CRklOX0FTTV9GSVhFRF9DT0RFX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAppbmRleCA3MzNhMTc4Li5jMTMxNGM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaApAQCAtMSw4ICsxLDkgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9mbGF0LmggLS0gdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcworICogdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywKKyAqIENvcHlyaWdodCAyMDAzLTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9GTEFUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBmZTEzOTYxLi41YjQ0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9HUElPX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAwYjc4Yjg3Li5jMDc4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fSEFSRElSUV9ICiAjZGVmaW5lIF9fQkZJTl9IQVJESVJRX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDM3MDUzZWMuLmQxZjUwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fSU9fSAogI2RlZmluZSBfQkZJTl9JT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDQyYTE1ZjUuLmU3YzA2MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMSwxNyArMSwxMCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwMyBIdVRhbworICogICAgICAgICAgICAgICAgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuICh3d3cuYXJjdHVydXNuZXR3b3Jrcy5jb20KKyAqICAgICAgICAgICAgICAgICAgICAgICBUZWQgTWEgPG1hdGVkQHN5bXBhdGljby5jYT4KICAqCi0gKiBDaGFuZ2VkIGJ5IEh1VGFvIEFwcjE4LCAyMDAzCi0gKgotICogQ29weXJpZ2h0IHdhcyBtaXNzaW5nIHdoZW4gSSBnb3QgdGhlIGNvZGUgc28gdG9vayBmcm9tIE1JUFMgYXJjaCAuLi5NYVRlZC0tLQotICogQ29weXJpZ2h0IChDKSAxOTk0IGJ5IFdhbGRvcmYgR01CSCwgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAsIDIwMDEgYnkgUmFsZiBCYWVjaGxlCi0gKgotICogQWRhcHRlZCBmb3IgQmxhY2tGaW4gKEFESSkgYnkgVGVkIE1hIDxtYXRlZEBzeW1wYXRpY28uY2E+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogQ29weXJpZ2h0IChjKSAyMDAyIExpbmVvLCBJbmMuIDxtYXR0d0BsaW5lby5jb20+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaWZuZGVmIF9CRklOX0lSUV9IXwpAQCAtMTksNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAorI2luY2x1ZGUgPG1hY2gvYW5vbWFseS5oPgorCiAvKiBTWVNfSVJRUyBhbmQgTlJfSVJRUyBhcmUgZGVmaW5lZCBpbiA8bWFjaC1iZjV4eC9pcnEuaD4gKi8KICNpbmNsdWRlIDxtYWNoL2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmgKaW5kZXggN2Q5ZTJkMy4uN2ZiZTQyMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfSVJRX0hBTkRMRVJfSAogI2RlZmluZSBfSVJRX0hBTkRMRVJfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmgKaW5kZXggNzlkYmVmYWEuLmM4N2U2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogbDFsYXlvdXQuaAogICogRGVmaW5lcyBhIGxheW91dCBvZiBMMSBzY3JhdGNocGFkIG1lbW9yeSB0aGF0IHVzZXJzcGFjZSBjYW4gcmVseSBvbi4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTDFMQVlPVVRfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbGlua2FnZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmgKaW5kZXggNWE4MjJiYi4uZjdkNmQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BU01fTElOS0FHRV9ICiAjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBkYmZkNjg2Li4yNmY2YjcwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmgKQEAgLTEsOCArMSwxMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwMiBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCiAjaWZuZGVmIF9fTU1VX0gKICNkZWZpbmUgX19NTVVfSAogCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDIsIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+ICovCi0KIHN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0IHsKIAlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqbmV4dDsKIAl2b2lkICphZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDA0MDQxMGIuLjRhM2JlMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbW11X2NvbnRleHQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9NTVVfQ09OVEVYVF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IGUzMTI4ZGYuLjljMWNmZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0FTTV9CRklOX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fQkZJTl9NT0RVTEVfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmgKaW5kZXggNWNjNjQxYy4uZjcyNmUzYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtNCw2ICs0LDEwIEBACiAgKiBUT0RPOiBpbXBsZW1lbnQgb3B0aW1pemVkIHByaW1pdGl2ZXMgaW5zdGVhZCwgb3IgbGVhdmUgdGhlIGdlbmVyaWMKICAqIGltcGxlbWVudGF0aW9uIGluIHBsYWNlLCBvciBwaWNrIHRoZSBhdG9taWNfeGNoZygpIGJhc2VkIGdlbmVyaWMKICAqIGltcGxlbWVudGF0aW9uLiAoc2VlIGFzbS1nZW5lcmljL211dGV4LXhjaGcuaCBmb3IgZGV0YWlscykKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX01VVEVYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbmFuZC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKaW5kZXggYWZiYWFmYS4uM2FlOGI1NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKQEAgLTEsMTMgKzEsOSBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYmxhY2tmaW4vbmFuZC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IEFuYWxvZyBEZXZpY2VzLCBJbmMuCi0gKglCcnlhbiBXdSA8YnJ5YW4ud3VAYW5hbG9nLmNvbT4KLSAqCisvKgogICogQkY1WFggLSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKIC8qIHN0cnVjdCBiZjV4eF9uYW5kX3BsYXRmb3JtCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDI5ZGNmNzUuLjk0NGEwN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fUEFHRV9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9QQUdFX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCmluZGV4IGNiYWZmMjQuLmQwNmE4OWI4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCkBAIC0xLDUgKzEsMTAgQEAKLQotLyogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gKi8KKy8qCisgKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCmluZGV4IGE2Zjk1NjkuLmQ0OWJiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaApAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0FTTV9CTEFDS0ZJTl9QREFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA3ODNjOGY3Li44MjFjNjk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fUEdUQUJMRV9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9QR1RBQkxFX0gKIApAQCAtOTIsNiArOTgsMTIgQEAKICNkZWZpbmUJVk1BTExPQ19TVEFSVAkwCiAjZGVmaW5lCVZNQUxMT0NfRU5ECTB4ZmZmZmZmZmYKIAorLyogcHJvdmlkZSBhIHNwZWNpYWwgZ2V0X3VubWFwcGVkX2FyZWEgZm9yIGZyYW1lYnVmZmVyIG1tYXBzIG9mIG5vbW11ICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZmJfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZywKKwkJCQkJICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcpOworI2RlZmluZSBIQVZFX0FSQ0hfRkJfVU5NQVBQRURfQVJFQQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCiAjZW5kaWYJCQkJLyogX0JMQUNLRklOX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb2xsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaAppbmRleCBhMDU1NjY3Li4wNzJkODk2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaApAQCAtMSwzICsxLDEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICoKKyAqLworCiAjaWZuZGVmIF9fQkZJTl9QT0xMX0gKICNkZWZpbmUgX19CRklOX1BPTExfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oCmluZGV4IDg4ZWI1YzAuLmVkZDhlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisgKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIEJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzCiAgKgorwqAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX1BPUlRNVVhfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaAppbmRleCA4MGM5ZDY0Li40MWJjMTg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVJDSF9CRklOX1BPU0lYX1RZUEVTX0gKICNkZWZpbmUgX19BUkNIX0JGSU5fUE9TSVhfVFlQRVNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBhMzZhZDhkLi5hZWE4ODAyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BU01fQkZJTl9QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9CRklOX1BST0NFU1NPUl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGUzZjA4NmQuLjI3MjkwYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9QVFJBQ0VfSAogI2RlZmluZSBfQkZJTl9QVFJBQ0VfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggYWU0ZGFlMS4uMWY1MzgxZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0JMQUNLRklOX1NFQ1RJT05TX0gKICNkZWZpbmUgX0JMQUNLRklOX1NFQ1RJT05TX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWdtZW50LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaAppbmRleCAwMmNmZDA5Li5mOGUxOTg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9TRUdNRU5UX0gKICNkZWZpbmUgX0JGSU5fU0VHTUVOVF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggY2UwMGIwMy4uY2U0MDgxYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9BU01fQkxBQ0tGSU5fU0lHQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fQkxBQ0tGSU5fU0lHQ09OVEVYVF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnaW5mby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggZWNhNDU2NS4uM2U4MTMwNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fU0lHSU5GT19ICiAjZGVmaW5lIF9CRklOX1NJR0lORk9fSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAxMThkZWVlLi42YTBmZTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKQEAgLTEsMjMgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaAotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9CTEFDS0ZJTl9TTVBfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGQ2ZmY0YjUuLmIwYzdmMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9fQkZJTl9TUElOTE9DS19ICiAjZGVmaW5lIF9fQkZJTl9TUElOTE9DS19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBiMWUzYzRjLi5iZTc1NzYyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9TUElOTE9DS19UWVBFU19ICiAjZGVmaW5lIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdGF0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaAppbmRleCBkMmI2ZjExLi4yZTI3NjY1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9TVEFUX0gKICNkZWZpbmUgX0JGSU5fU1RBVF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oCmluZGV4IDMyMWY0ZDkuLmQ3ZjBjY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU1RSSU5HX0hfCiAjZGVmaW5lIF9CTEFDS0ZJTl9TVFJJTkdfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBkNDQyMTEzLi44OWRlNjUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX1NXQUJfSAogI2RlZmluZSBfQkxBQ0tGSU5fU1dBQl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDg1ZThmMTYuLmRkZTE5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMSwzNCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgIGluY2x1ZGUvYXNtL3N5c3RlbS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICBUb255IEtvdSAodG9ueWtvQGxpbmVvLmNhKQotICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuCi0gKiAgICAgICAgICAgICAgICAgICAgKHd3dy5hcmN0dXJ1c25ldHdvcmtzLmNvbSkKLSAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDMgTWV0cm93ZXJrcyAod3d3Lm1ldHJvd2Vya3MuY29tKQotICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNCBBbmFsb2cgRGV2aWNlIEluYy4KLSAqIENyZWF0ZWQ6ICAgICAyNUphbjIwMDEgLSBUb255IEtvdQotICogRGVzY3JpcHRpb246IHN5c3RlbS5oIGluY2x1ZGUgZmlsZQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIFRvbnkgS291ICh0b255a29AbGluZW8uY2EpCiAgKgotICogTW9kaWZpZWQ6ICAgICAyMlNlcDIwMDYgLSBSb2JpbiBHZXR6Ci0gKiAgICAgICAgICAgICAgICAtIG1vdmUgaW5jbHVkZSBibGFja2Zpbi5oIGRvd24sIHNvIEkgY2FuIGdldCBhY2Nlc3MgdG8KLSAqICAgICAgICAgICAgICAgICAgIGlycSBmdW5jdGlvbnMgaW4gb3RoZXIgaW5jbHVkZSBmaWxlcy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX1NZU1RFTV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMmJiZmRkOS4uYWZiM2E4NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMSwyNyArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi90aHJlYWRfaW5mby5oCi0gKiBCYXNlZCBvbjogICAgIGluY2x1ZGUvYXNtLW02OGtub21tdS90aHJlYWRfaW5mby5oCi0gKiBBdXRob3I6ICAgICAgIExHIFNvZnQgSW5kaWEKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQW5hbG9nIERldmljZXMgSW5jLgotICogQ3JlYXRlZDogICAgICBUdWUgU2VwIDIxIDIwMDQKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgotICogTW9kaWZpZWQ6Ci0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0FTTV9USFJFQURfSU5GT19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaAppbmRleCA4OWExMmVlLi5hNzRhZTA4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX1RMQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9UTEJfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKaW5kZXggMzEyYjU5Ni4uNjA5YWQzYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorICogaGVhZGVyIGZpbGUgZm9yIGhhcmR3YXJlIHRyYWNlIGZ1bmN0aW9ucwogICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CTEFDS0ZJTl9UUkFDRV8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCAzY2RjNDU0Li45ZmUwZGE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0xLDEzICsxLDEwIEBACiAvKgotICogIGxpbnV4L2luY2x1ZGUvYXNtL3RyYXBzLmgKKyAqICBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAyMDAxIExpbmVvLCBJbmMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgVG9ueSBLb3UKKyAqICAgICAgICAgICAgICAgICAxOTkzIEhhbWlzaCBNYWNkb25hbGQKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTkzICAgICAgICBIYW1pc2ggTWFjZG9uYWxkCi0gKgotICogIExpbmVvLCBJbmMgICAgSnVsIDIwMDEgICAgVG9ueSBLb3UKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaWZuZGVmIF9CRklOX1RSQVBTX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggMmY0NjlhMS4uYzAzYjg1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTEsNCArMSw3IEBACi0vKiBDaGFuZ2VzIG1hZGUgYnkgTGluZW8gSW5jLiAgICBNYXkgMjAwMQorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqCiAgKiBCYXNlZCBvbjogaW5jbHVkZS9hc20tbTY4a25vbW11L3VhY2Nlc3MuaAogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAwMmIxNTI5Li43NzliZTAyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BU01fQkZJTl9VTklTVERfSAogI2RlZmluZSBfX0FTTV9CRklOX1VOSVNURF9ICiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZjA1ZDFiOS4uYmQzMmMwOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogZ2VuZXJhdGUgZGVmaW5pdGlvbnMgbmVlZGVkIGJ5IGFzc2VtYmx5IGxhbmd1YWdlIG1vZHVsZXMKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBnZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKaW5kZXggMzg0ODY4ZC4uMWYxNzAyMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKQEAgLTIsNiArMiw3IEBACiAgKiBiZmluX2RtYV81eHguYyAtIEJsYWNrZmluIERNQSBpbXBsZW1lbnRhdGlvbgogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCmluZGV4IGZjNDY4MWMuLjIyNzA1ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggKGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZykKKyAqIEdQSU8gQWJzdHJhY3Rpb24gTGF5ZXIKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBHUElPIEFic3RyYWN0aW9uIExheWVyCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwppbmRleCAzNjE5M2VlLi5mN2I5Y2RjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKQEAgLTEsMjUgKzEsMTEgQEAKIC8qCiAgKiBCbGFja2ZpbiBDUExCIGluaXRpYWxpemF0aW9uCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCmluZGV4IDhlMWU5ZTkuLjY5ZTBlNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKQEAgLTEsMjIgKzEsMTEgQEAKIC8qCi0gKiAgICAgICAgICAgICAgIEJsYWNrZmluIENQTEIgZXhjZXB0aW9uIGhhbmRsaW5nLgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIEJsYWNrZmluIENQTEIgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciB3aGVuIE1QVSBpbiBvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKaW5kZXggNWQ4YWQ1MDMuLmZkOWEyZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKQEAgLTEsMjQgKzEsOSBAQAogLyoKICAqIEJsYWNrZmluIENQTEIgaW5pdGlhbGl6YXRpb24KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYwppbmRleCBkOWVhNDZjLi41Yjg4ODYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYwpAQCAtMSwyNiArMSwxNCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS1jL2NwbGJtZ3IuYwogICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKICAqIEF1dGhvcjogICAgICAgTWljaGFlbCBNY1Rlcm5hbiA8bW1jdGVybmFuQGFpcnZhbmEuY29tPgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMDFOb3YyMDA4CiAgKiBEZXNjcmlwdGlvbjogIENQTEIgbWlzcyBoYW5kbGVyLgogICoKICAqIE1vZGlmaWVkOgogICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBaXJ2YW5hIEluYy4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMKaW5kZXggNjRkNzgzMC4uMGJkYWE1MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jCkBAIC0yLDYgKzIsNyBAQAogICogYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYyAtIGRpc3BsYXkgQ1BMQiBzdGF0dXMKICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApAQCAtMTExLDI0ICsxMTIsMjEgQEAKIAkuc2hvdyAgPSBjcGxiaW5mb19zaG93LAogfTsKIAorI2RlZmluZSBDUExCSU5GT19EQ1BMQl9GTEFHIDB4ODAwMDAwMDAKKwogc3RhdGljIGludCBjcGxiaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNoYXIgYnVmWzI1Nl0sICpwYXRoLCAqcDsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwljaGFyIGNwbGJfdHlwZTsKIAl1bnNpZ25lZCBpbnQgY3B1OwotCWNoYXIgKnNfY3B1LCAqc19jcGxiOwogCWludCByZXQ7CiAJc3RydWN0IHNlcV9maWxlICptOwogCXN0cnVjdCBjcGxiaW5mb19kYXRhICpjZGF0YTsKIAotCXBhdGggPSBkX3BhdGgoJmZpbGUtPmZfcGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKElTX0VSUihwYXRoKSkKLQkJcmV0dXJuIFBUUl9FUlIocGF0aCk7Ci0Jc19jcHUgPSBzdHJzdHIocGF0aCwgIi9jcHUiKTsKLQlzX2NwbGIgPSBzdHJyY2hyKHBhdGgsICcvJyk7Ci0JaWYgKCFzX2NwdSB8fCAhc19jcGxiKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljcHUgPSAodW5zaWduZWQgaW50KXBkZS0+ZGF0YTsKKwljcGxiX3R5cGUgPSBjcHUgJiBDUExCSU5GT19EQ1BMQl9GTEFHID8gJ0QnIDogJ0knOworCWNwdSAmPSB+Q1BMQklORk9fRENQTEJfRkxBRzsKIAotCWNwdSA9IHNpbXBsZV9zdHJ0b3VsKHNfY3B1ICsgNCwgJnAsIDEwKTsKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEzOSw3ICsxMzcsNyBAQAogCWNkYXRhID0gbS0+cHJpdmF0ZTsKIAogCWNkYXRhLT5wb3MgPSAwOwotCWNkYXRhLT5jcGxiX3R5cGUgPSB0b3VwcGVyKHNfY3BsYlsxXSk7CisJY2RhdGEtPmNwbGJfdHlwZSA9IGNwbGJfdHlwZTsKIAljcGxiaW5mb19zZXFfaW5pdChjZGF0YSwgY3B1KTsKIAogCXJldHVybiAwOwpAQCAtMTY4LDggKzE2NiwxMCBAQAogCQlpZiAoIWNwdV9kaXIpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlwcm9jX2NyZWF0ZSgiaWNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcyk7Ci0JCXByb2NfY3JlYXRlKCJkY3BsYiIsIFNfSVJVR08sIGNwdV9kaXIsICZjcGxiaW5mb19mb3BzKTsKKwkJcHJvY19jcmVhdGVfZGF0YSgiaWNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcywKKwkJCSh2b2lkICopY3B1KTsKKwkJcHJvY19jcmVhdGVfZGF0YSgiZGNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcywKKwkJCSh2b2lkICopKGNwdSB8IENQTEJJTkZPX0RDUExCX0ZMQUcpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCmluZGV4IDJmNjJhOWYuLmU3NGU3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydC4KKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA5MzFjNzhiLi44NGVkODM3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMSwyNSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCi0gKiBBdXRob3I6ICAgICAgIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnCisgKiBhbGxvdyBhIGNvbnNvbGUgdG8gYmUgdXNlZCBmb3IgZWFybHkgcHJpbnRrCisgKiBkZXJpdmVkIGZyb20gYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCiAgKgotICogQ3JlYXRlZDogICAgICAxNEF1ZzIwMDcKLSAqIERlc2NyaXB0aW9uOiAgYWxsb3cgYSBjb25zb2xlIHRvIGJlIHVzZWQgZm9yIGVhcmx5IHByaW50aworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKaW5kZXggM2Y4NzY5Yi4uZjI3ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKaW5kZXggMGQyZDllMC4uMDU2NTkxNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUwpAQCAtNiw3ICs2LDEyIEBACiAgKiBUaGVzZSBhcmUgYWxpZ25lZCB0byAxNiBieXRlcywgc28gdGhhdCB3ZSBoYXZlIHNvbWUgc3BhY2UgdG8gcmVwbGFjZQogICogdGhlc2Ugc2VxdWVuY2VzIHdpdGggc29tZXRoaW5nIGVsc2UgKGUuZy4ga2VybmVsIHRyYXBzIGlmIHdlIGV2ZXIgZG8KICAqIEJGNTYxIFNNUCkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCmluZGV4IGQxODhiMjQuLmE4OGRhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKQEAgLTEsMjEgKzEsNyBAQAogLyoKLSAqICBhcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKKyAqIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFuYWxvZyBEZXZpY2VzLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggYzI2YzM0ZC4uMTE4YzViOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCmluZGV4IDRiNWZkMzYuLmRiOWY5YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNjdmYzdhNS4uYTZkZmE2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgIm1vZHVsZSAlczogIiBmbXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwppbmRleCBmNWIyODYxLi40MzBhZTM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBCbGFja2ZpbiBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHByb2Nlc3MgaGFuZGxpbmcKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHByb2Nlc3MgaGFuZGxpbmcuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCmluZGV4IDMwZjQ4MjguLjA5ODJiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCkBAIC0xLDMwICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCi0gKiBCYXNlZCBvbjogICAgIFRha2VuIGZyb20gbGludXgva2VybmVsL3B0cmFjZS5jCi0gKiBBdXRob3I6ICAgICAgIGxpbnV4L2tlcm5lbC9wdHJhY2UuYyBpcyBieSBSb3NzIEJpcm8gMS8yMy85MiwgZWRpdGVkIGJ5IExpbnVzIFRvcnZhbGRzCisgKiBsaW51eC9rZXJuZWwvcHRyYWNlLmMgaXMgYnkgUm9zcyBCaXJvIDEvMjMvOTIsIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDogICAgICAxLzIzLzkyCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCAzNjk1MzViLi5jMjAyYTQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTEsOSArMSw1IEBACiAvKgotICogYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwotICoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYwppbmRleCA4YjhjNzEwLi41NTdlOWZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMKQEAgLTQsOCArNCw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCmluZGV4IGRiYzNiYmYuLjlkOTBjMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYwppbmRleCAzZGE2MGZiLi5hZmNlZjEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKQEAgLTEsMzIgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogY29udGFpbnMgdmFyaW91cyByYW5kb20gc3lzdGVtIGNhbGxzIHRoYXQgaGF2ZSBhIG5vbi1zdGFuZGFyZAorICogY2FsbGluZyBzZXF1ZW5jZSBvbiB0aGUgTGludXgvQmxhY2tmaW4gcGxhdGZvcm0uCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0Ci0gKiAgICAgICAgICAgICAgIGhhdmUgYSBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSBvbiB0aGUgTGludXgvYmZpbgotICogICAgICAgICAgICAgICBwbGF0Zm9ybS4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtOTEsMyArNjksMTQgQEAKIHsKIAlyZXR1cm4gc2FmZV9kbWFfbWVtY3B5KGRlc3QsIHNyYywgbGVuKTsKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX0ZCKSB8fCBkZWZpbmVkKENPTkZJR19GQl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvZmIuaD4KK3Vuc2lnbmVkIGxvbmcgZ2V0X2ZiX3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgb3JpZ19hZGRyLAorCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiAodW5zaWduZWQgbG9uZylpbmZvLT5zY3JlZW5fYmFzZTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X2ZiX3VubWFwcGVkX2FyZWEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKaW5kZXggZjk3MTU3Ni4uMzU5Y2ZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwpAQCAtMSwxMyArMSwxMyBAQAogLyoKLSAqIGxpbnV4L2FyY2gva2VybmVsL3RpbWUtdHMuYwotICoKICAqIEJhc2VkIG9uIGFybSBjbG9ja2V2ZW50cyBpbXBsZW1lbnRhdGlvbiBhbmQgb2xkIGJmaW4gdGltZSB0aWNrLgogICoKLSAqIENvcHlyaWdodChDKSAyMDA4LCBHZW9UZWNobm9sb2dpZXMsIFZpdGphIE1ha2Fyb3YKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA4IEdlb1RlY2hub2xvZ2llcworICogICAgICAgICAgICAgICAgICAgICBWaXRqYSBNYWthcm92CiAgKgotICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLiBGb3IgZGV0YWlscyBzZWUKLSAqIGtlcm5lbC1iYXNlL0NPUFlJTkcuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCmluZGV4IGFkYjU0YWEuLmJkM2I1M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTgxLDExICs4MiwxMSBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIC8qCiAgKiBTaG91bGQgcmV0dXJuIHVzZWNvbmRzIHNpbmNlIGxhc3QgdGltZXIgdGljawogICovCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldHRpbWVvZmZzZXQodm9pZCkKK3UzMiBhcmNoX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGNsb2Nrc19wZXJfamlmZnk7CkBAIC0xODQsNjUgKzE4NSw2IEBACiAJdGltZV9zY2hlZF9pbml0KHRpbWVyX2ludGVycnVwdCk7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCQl1c2VjID0gZ2V0dGltZW9mZnNldCgpOwotCQlzZWMgPSB4dGltZS50dl9zZWM7Ci0JCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDKTsKLQl9Ci0Jd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwotCi0Jd2hpbGUgKHVzZWMgPj0gVVNFQ19QRVJfU0VDKSB7Ci0JCXVzZWMgLT0gVVNFQ19QRVJfU0VDOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKLX0KLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCS8qCi0JICogVGhpcyBpcyByZXZvbHRpbmcuIFdlIG5lZWQgdG8gc2V0IHRoZSB4dGltZS50dl91c2VjCi0JICogY29ycmVjdGx5LiBIb3dldmVyLCB0aGUgdmFsdWUgaW4gdGhpcyBsb2NhdGlvbiBpcwotCSAqIGlzIHZhbHVlIGF0IHRoZSBsYXN0IHRpY2suCi0JICogRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheQotCSAqIHdvdWxkIGhhdmUgZG9uZSwgYW5kIHRoZW4gdW5kbyBpdCEKLQkgKi8KLQluc2VjIC09IChnZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDKTsKLQotCXd0bV9zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0KLQl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQljbG9ja193YXNfc2V0KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLSNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwotCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggNTY0NjRjYi4uNmI3MzI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBIYW1pc2ggTWFjZG9uYWxkCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICB1c2VzIFMvVyBpbnRlcnJ1cHQgMTUgZm9yIHRoZSBzeXN0ZW0gY2FsbHMKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyMWFjN2MyLi4xMGUxMjUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwotICogQmFzZWQgb246ICAgICBub25lIC0gb3JpZ2luYWwgd29yawotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDogICAgICBUdWUgU2VwIDIxIDIwMDQKLSAqIERlc2NyaXB0aW9uOiAgTWFzdGVyIGxpbmtlciBzY3JpcHQgZm9yIGJsYWNrZmluIGFyY2hpdGVjdHVyZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgVk1MSU5VWF9TWU1CT0woX3N5bV8pIF8jI19zeW1fCkBAIC05Niw4ICs3Myw3IEBACiAJewogCQlfX3NkYXRhID0gLjsKIAkJLyogVGhpcyBnZXRzIGRvbmUgZmlyc3QsIHNvIHRoZSBnbG9iIGRvZXNuJ3Qgc3VjayBpdCBpbiAqLwotCQkuID0gQUxJR04oMzIpOwotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQorCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDMyKQogCiAjaWYgIUwxX0RBVEFfQV9MRU5HVEgKIAkJLiA9IEFMSUdOKDMyKTsKQEAgLTExNiwxMiArOTIsNyBAQAogCQlEQVRBX0RBVEEKIAkJQ09OU1RSVUNUT1JTCiAKLQkJLyogbWFrZSBzdXJlIHRoZSBpbml0X3Rhc2sgaXMgYWxpZ25lZCB0byB0aGUKLQkJICoga2VybmVsIHRocmVhZCBzaXplIHNvIHdlIGNhbiBsb2NhdGUgdGhlIGtlcm5lbAotCQkgKiBzdGFjayBwcm9wZXJseSBhbmQgcXVpY2tseS4KLQkJICovCi0JCS4gPSBBTElHTihUSFJFQURfU0laRSk7Ci0JCSooLmluaXRfdGFzay5kYXRhKQorCQlJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSkKIAogCQlfX2VkYXRhID0gLjsKIAl9CkBAIC0xMzQsMzkgKzEwNSwxMCBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9fX2luaXRfYmVnaW4gPSAuOwogCi0JLmluaXQudGV4dCA6Ci0JewotCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkJX19zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX19laW5pdHRleHQgPSAuOwotCX0KLQkuaW5pdC5kYXRhIDoKLQl7Ci0JCS4gPSBBTElHTigxNik7Ci0JCUlOSVRfREFUQQotCX0KLQkuaW5pdC5zZXR1cCA6Ci0JewotCQkuID0gQUxJR04oMTYpOwotCQlfX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDoKLQl7Ci0JCV9fX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9fX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCS5jb25faW5pdGNhbGwuaW5pdCA6Ci0JewotCQlfX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwkuID0gQUxJR04oMTYpOworCUlOSVRfREFUQV9TRUNUSU9OKDE2KQogCVBFUkNQVSg0KQotCVNFQ1VSSVRZX0lOSVQKIAogCS8qIHdlIGhhdmUgdG8gZGlzY2FyZCBleGl0IHRleHQgYW5kIHN1Y2ggYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwgdG8KIAkgKiBoYW5kbGUgZW1iZWRkZWQgY3Jvc3Mtc2VjdGlvbiByZWZlcmVuY2VzIChhbHQgaW5zdHJ1Y3Rpb25zLCBidWcKQEAgLTE4MSwxOCArMTIzLDkgQEAKIAkJRVhJVF9EQVRBCiAJfQogCi0JLmluaXQucmFtZnMgOgotCXsKLQkJLiA9IEFMSUdOKDQpOwotCQlfX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQkuID0gQUxJR04oNCk7Ci0JCV9fX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLQogCV9fbDFfbG1hX3N0YXJ0ID0gLjsKIAotCS50ZXh0X2wxIEwxX0NPREVfU1RBUlQgOiBBVChMT0FEQUREUiguaW5pdC5yYW1mcykgKyBTSVpFT0YoLmluaXQucmFtZnMpKQorCS50ZXh0X2wxIEwxX0NPREVfU1RBUlQgOiBBVChMT0FEQUREUiguZXhpdC5kYXRhKSArIFNJWkVPRiguZXhpdC5kYXRhKSkKIAl7CiAJCS4gPSBBTElHTig0KTsKIAkJX19zdGV4dF9sMSA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKaW5kZXggYThjMjc5ZS4uYWI2OWQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKaW5kZXggYTBkMzQxOS4uYjViMzUxZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jIGIvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYwppbmRleCBjZDYwNWU3Li5jNjI5NjlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKQEAgLTEsMzIgKzEsMTIgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKLSAqIEJhc2VkIG9uOiAgICAgbm9uZSAtIG9yaWdpbmFsIHdvcmsKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAotICogICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKLSAqICAgICAgICAgICAgICAgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYIG9wZXJhdGluZworICogc3lzdGVtLiBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0IGludGVyZmFjZSBhcyB0aGUKKyAqIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCmluZGV4IDJhYzU5YzcuLmY4OWM1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCkBAIC0xLDEwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIDE2IC8gMzIgYml0IHNpZ25lZCBkaXZpc2lvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqCisgKiAxNiAvIDMyIGJpdCBzaWduZWQgZGl2aXNpb24uCiAgKiAgICAgICAgICAgICAgICAgU3BlY2lhbCBjYXNlcyA6CiAgKiAgICAgICAgICAgICAgICAgICAgICAxKSAgSWYobnVtZXJhdG9yID09IDApCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKQEAgLTIyLDI1ICsyMSw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUjAgLSBRdW90aWVudCAgICAobykKICAqICAgICAgICAgICAgICAgICBSZWdpc3RlcnMgVXNlZCA6IFIyLVI3LFAwLVAyCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKIC5nbG9iYWwgICBfX19kaXZzaTM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaCBiL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCmluZGV4IDljY2QzOWEuLjcyNGYwN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2RlZmluZSBCSVRTX1BFUl9VTklUICA4CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKaW5kZXggZTU3YmY2Zi4uNTNmMTc0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCmluZGV4IDVkYTQyODEuLjU0MmU0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKaW5kZXggMjE5ZmEyOC4uY2U1YjlmMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwppbmRleCBlNjU0YTE4Li5jMzFiZjIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwpAQCAtMSwzNiArMSwxMyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogaW50ZXJuYWwgdmVyc2lvbiBvZiBtZW1jcHkoKSwgaXNzdWVkIGJ5IHRoZSBjb21waWxlciB0byBjb3B5IGJsb2NrcyBvZgorICogZGF0YSBhcm91bmQuIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAorICogcG9zc2libGUgb3ZlcmxhcHMsIGJlY2F1c2UgdGhhdCBhbWJpZ3VpdHkgaXMgd2hlbiB0aGUgY29tcGlsZXIgZ2l2ZXMgdXAKKyAqIGFuZCBjYWxscyBhIGZ1bmN0aW9uLiBXZSBoYXZlIG91ciBvd24sIGludGVybmFsIHZlcnNpb24gc28gdGhhdCB3ZSBnZXQKKyAqIHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkIHRoZSBub3JtYWwgc3ltYm9sLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGludGVybmFsIHZlcnNpb24gb2YgbWVtY3B5KCksIGlzc3VlZCBieSB0aGUgY29tcGlsZXIKLSAqICAgICAgICAgICAgICAgdG8gY29weSBibG9ja3Mgb2YgZGF0YSBhcm91bmQuCi0gKiAgICAgICAgICAgICAgIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAotICogICAgICAgICAgICAgICBwb3NzaWJsZSBvdmVybGFwcywgYmVjYXVzZSB0aGF0IGFtYmlndWl0eSBpcyB3aGVuIHRoZSBjb21waWxlcgotICogICAgICAgICAgICAgICBnaXZlcyB1cCBhbmQgY2FsbHMgYSBmdW5jdGlvbi4gV2UgaGF2ZSBvdXIgb3duLCBpbnRlcm5hbCB2ZXJzaW9uCi0gKiAgICAgICAgICAgICAgIHNvIHRoYXQgd2UgZ2V0IHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkCi0gKiAgICAgICAgICAgICAgIHRoZSBub3JtYWwgc3ltYm9sLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKaW5kZXggMzNmODY1My4uODBjMjQwYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwppbmRleCA4MTU5MTM2Li5jMzBkOTliMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwppbmRleCBjYTFkZDM5Li44YjBjN2Q0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwpAQCAtMSwzNiArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgorICogZm9yIHF1b3RpZW50IGVzdGltYXRpb24uCisgKiAgIFJlZ2lzdGVycyBpbjogIFIwLCBSMSA9IE51bWVyYXRvci8gRGVub21pbmF0b3IKKyAqICAgUmVnaXN0ZXJzIG91dDogUjAgICAgID0gUmVtYWluZGVyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgotICogICAgICAgICAgICAgICBmb3IgcXVvdGllbnQgZXN0aW1hdGlvbi4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqICAgICAgICAgICAgICAgUmVnaXN0ZXJzIHVzZWQgOgotICogICAgICAgICAgICAgICBOdW1lcmF0b3IvIERlbm9taW5hdG9yIGluICBSMCwgUjEKLSAqICAgICAgICAgICAgICAgICBSMCAgLSAgcmV0dXJucyByZW1haW5kZXIuCi0gKiAgICAgICAgICAgICAgICAgUjItUjcKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogLmdsb2JhbCBfX19tb2RzaTM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tdWxkaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCmluZGV4IGFiZGUxMjAuLjk1M2EzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKi8KKwogLmFsaWduIDIKIC5nbG9iYWwgX19fbXVsZGkzOwogLnR5cGUgX19fbXVsZGkzLCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwppbmRleCA0Njg1YjdhLi4yNTBmNGQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCkBAIC0xLDMwICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqIEltcGxlbWVudGF0aW9uIG9mIG91dHN7YndsfSBmb3IgQmxhY2tGaW4gcHJvY2Vzc29ycyB1c2luZyB6ZXJvIG92ZXJoZWFkIGxvb3BzLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVHVlIE1hciAyMiAxNToyNzoyNCBDRVNUIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgSW1wbGVtZW50YXRpb24gb2Ygb3V0c3tid2x9IGZvciBCbGFja0ZpbiBwcm9jZXNzb3JzIHVzaW5nIHplcm8gb3ZlcmhlYWQgbG9vcHMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgQnV5V2F5cyBCVgorICogICAgICAgICAgICAgICAgICAgICAgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+CiAgKgotICogTW9kaWZpZWQ6ICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQmFzIFZlcm1ldWxlbiwgQnV5V2F5cyBCViA8YmFzQGJ1eXdheXMubmw+Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMKaW5kZXggZTM4M2NkMy4uOTllZThjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvc211bHNpM19oaWdocGFydC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUwpAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICovCisKIC5hbGlnbiAyCiAuZ2xvYmFsIF9fX3NtdWxzaTNfaGlnaHBhcnQ7CiAudHlwZSBfX19zbXVsc2kzX2hpZ2hwYXJ0LCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwppbmRleCA1OGZkOTZkLi45N2U5MDQzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi91ZGl2c2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKaW5kZXggNGYyYjc2ZS4uMTY4ZWJhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvdW1vZHNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmZGVmIENPTkZJR19BUklUSE1FVElDX09QU19MMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TCmluZGV4IDY3Yjc5OTMuLjA1MTgyNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3VtdWxzaTNfaGlnaHBhcnQuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCiAuYWxpZ24gMgogLmdsb2JhbCBfX191bXVsc2kzX2hpZ2hwYXJ0OwogLnR5cGUgX19fdW11bHNpM19oaWdocGFydCwgU1RUX0ZVTkM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKaW5kZXggMDNlNGE5OS4uMDE5NzVjMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCi0gKiBBdXRob3I6ICAgICAgIEJyeWFuIFd1IDxjb29sb25leUBrZXJuZWwub3JnPgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC01NzEsMTkgKzU0OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAJVlJQQUlSKFZMRVZfMTAwLCA0MDAwMDAwMDApLApAQCAtNjYwLDggKzYyNSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpicmRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemJyZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKaW5kZXggNjk4ZTg4Yy4uNzhiNDM2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCmluZGV4IDc4ZGExYTAuLjg1NmIzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9iZjUxOC5oCi0gKiBCYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZjUyNy5oCi0gKiBBdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MTgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MThfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBkYmFkZTkzLi45NzBkMzEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDgzNDIxZDMuLjZjZmIyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmgKaW5kZXggODIwYzEzYy4uNDkzMDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTEyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MTJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKaW5kZXggZGZlNDkyZC4uZTFkOTk5MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCAxNGRmNDNkLi42YjM2NGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTYuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCmluZGV4IGJhZmIzNzAuLjkyOWI5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2NkZWZiZjUxOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MThfSApAQCAtMjExLDYgKzE4Niw0NyBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCiAKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0NUTCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9DVEwodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lFKCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lFKHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9JU1RBVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihFTUFDX1BUUF9JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JU1RBVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfRk9GRigpICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfRk9GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GT0ZGKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GT0ZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjEoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYxKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYyKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjMoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYzKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BRERFTkQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BRERFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQURERU5EKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQURERU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BQ0NSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BQ0NSKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FDQ1IodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FDQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX09GRlNFVCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX09GRlNFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9PRkZTRVQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9PRkZTRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVMTygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FTE8odmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVISSgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FSEkodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1JYU05BUExPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1JYU05BUExPKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUlhTTkFQSEkoKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUlhTTkFQSEkpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9UWFNOQVBMTygpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9UWFNOQVBMTykKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RYU05BUEhJKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RYU05BUEhJKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQUxBUk1MTygpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfQUxBUk1MTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9BTEFSTUxPKHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9BTEFSTUxPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BTEFSTUhJKCkgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BTEFSTUhJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FMQVJNSEkodmFsKSAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FMQVJNSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX09GRigpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lEX09GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JRF9PRkYodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JRF9PRkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX1NOQVAoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0lEX1NOQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfSURfU05BUCh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfSURfU05BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUFBTX1NUQVJUSEkoKSAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1NUQVJUSEkodmFsKSAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1BQU19QRVJJT0QoKSAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1BQU19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1BFUklPRCh2YWwpICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1BFUklPRCwgdmFsKQorCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAppbmRleCBlZTNkNDczLi4xZDk3MGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZkJGNTF4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCmluZGV4IGE5NmNhOTAuLjliNTA1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggNTZlZTVhNy4uYjVhZGNhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxNC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTE0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAppbmRleCBkZmM5Mzg0Li43ZWIxODc3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MTYuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxNl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKaW5kZXggNmU5ODJhYi4uNzk0Y2YwNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTE4X0gKQEAgLTY0OCw0ICs2MjQsMzIgQEAKIAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCiAKKy8qIEJpdCBtYXNrcyBmb3IgRU1BQ19QVFBfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBUUF9FTiAgMHgxICAgICAgICAvKiBFbmFibGUgdGhlIFBUUF9UU1lOQyBtb2R1bGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBUTCAgMHgyICAgICAgICAvKiBUaW1lc3RhbXAgbG9jayBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFTRU4gIDB4MTAgICAgICAgLyogQXV4aWxpYXJ5IHNuYXBzaG90IGNvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQUFNFTiAgMHg4MCAgICAgICAvKiBQdWxzZS1wZXItc2Vjb25kIChQUFMpIGNvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDS09FTiAgMHgyMDAwICAgICAvKiBDbG9jayBvdXRwdXQgY29udHJvbCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVNQUNfUFRQX0lFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQUxJRSAgMHgxICAgICAgICAvKiBBbGFybSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUlhFSUUgIDB4MiAgICAgICAgLyogUmVjZWl2ZSBldmVudCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUlhHSUUgIDB4NCAgICAgICAgLyogUmVjZWl2ZSBnZW5lcmFsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFhJRSAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUlhPVkUgIDB4MTAgICAgICAgLyogUmVjZWl2ZSBvdmVycnVuIGVycm9yIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUWE9WRSAgMHgyMCAgICAgICAvKiBUcmFuc21pdCBvdmVycnVuIGVycm9yIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVNJRSAgMHg0MCAgICAgICAvKiBBdXhpbGlhcnkgc25hcHNob3QgaW50ZXJydXB0IGVuYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIEVNQUNfUFRQX0lTVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFMUyAgMHgxICAgICAgICAvKiBBbGFybSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhFTCAgMHgyICAgICAgICAvKiBSZWNlaXZlIGV2ZW50IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhHTCAgMHg0ICAgICAgICAvKiBSZWNlaXZlIGdlbmVyYWwgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUWFRMICAweDggICAgICAgIC8qIFRyYW5zbWl0IHNuYXBzaG90IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSWE9WICAweDEwICAgICAgIC8qIFJlY2VpdmUgc25hcHNob3Qgb3ZlcnJ1biBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFhPViAgMHgyMCAgICAgICAvKiBUcmFuc21pdCBzbmFwc2hvdCBvdmVycnVuIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQVNMICAweDQwICAgICAgIC8qIEF1eGlsaWFyeSBzbmFwc2hvdCBpbnRlcnJ1cHQgc3RhdHVzICovCisKICNlbmRpZiAvKiBfREVGX0JGNTE4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKaW5kZXggMWJlYzhkMS4uZTA2ZjQxMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxeF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTFYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggOTc1NzY4My4uYmJhYjJkNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IDNmZjBmMDkuLjE0ZTUyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZToJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9pcnEuaAotICogYmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvaXJxLmgKLSAqIGF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CRjUxOF9JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggYTBmYzc3Zi4uZTM1MjkxMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKaW5kZXggMzE1MWZkNS4uYmIwNWJlZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBCcnlhbiBXdSA8Y29vbG9uZXlAa2VybmVsLm9yZz4KKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwppbmRleCAwOGEzZjAxYy4uZjE5OTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbS1iZjUyNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02MTYsMTIgKzU5NSw2IEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNzg2LDYgKzc1OSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtODIxLDE5ICs3OTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTkwOSwxMCArODc0LDYgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC05NDIsOCArOTAzLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKaW5kZXggNjhiNGM4MC4uY2FkMjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTYxMSwxOSArNTg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC03MzIsOCArNjk3LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCAyODQ5YjA5Li5mMDk2NjVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNzE2LDEyICs2OTQsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODM3LDYgKzgwOSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtOTA1LDE5ICs4ODIsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTEwMDEsMTAgKzk2NSw2IEBACiAJJmJmNTJ4X3QzNTBtY3FiX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xMDM4LDggKzk5OCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKaW5kZXggMjMxODc3NS4uN2JjNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKaW5kZXggMzgzMmFhYi4uZmY2OGM4OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTI3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZWJkNmNlYi4uYzFkNTViOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlYTljYjBmLi5lN2Q2MDM0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCmluZGV4IDY2M2MyYmIuLjEwNzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKaW5kZXggMDAzNzdlYi4uZGMzMTE5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKaW5kZXggZmNhOGRiNy4uZDY1Nzk0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCmluZGV4IDFmZTc2ZDguLjcwMTRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTJYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaAppbmRleCAwYThjZGNkLi5jYjEzOWEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUyMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKaW5kZXggNWNkNzU3Ni4uODJhYmVmYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI1LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCmluZGV4IGYwNDBmMzYuLjU3MGExMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTI3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNjhiNTVkMC4uZjgyMTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwNmI2ZWViLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggOGVhNjYwZC4uYWE2NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MjdfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDcyYjE2NTIuLmQ0NTE4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCmluZGV4IGY4YzhhY2QuLjQ0Y2EyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwppbmRleCA2YzJiNDdmLi40M2Y0M2EwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvSDg2MDYuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDctMjAwOCBIViBTaXN0ZW1hcyBTLkwuCisgKiAgICAgICAgICAgICAgICAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBIViBTaXN0ZW1hcyBIODYwNiBib2FyZAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcsMjAwOCBIViBTaXN0ZW1hcyBTLkwuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwppbmRleCA4MjA4ZDY3Li5iNTgwODg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JsYWNrc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBCZW5qYW1pbiBNYXR0aGV3cyA8Ym1hdEBsbGUucm9jaGVzdGVyLmVkdT4KLSAqICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJsYWNrU3RhbXAKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDgKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQmxhY2tTdGFtcAotICoKLSAqIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiAgICAgICAgICAgICAgICAyMDA4IEJlbmphbWluIE1hdHRoZXdzIDxibWF0QGxsZS5yb2NoZXN0ZXIuZWR1PgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgogICogTW9yZSBpbmZvIGFib3V0IHRoZSBCbGFja1N0YW1wIGF0OgogICogCWh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9nZi9wcm9qZWN0L2JsYWNrc3RhbXAvCkBAIC0yODEsMTkgKzI3NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0zODQsOCArMzY1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJsYWNrc3RhbXBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCmluZGV4IDc0NDNiMjYuLjdmYzNiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKQEAgLTEsMzAgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4gQ29weXJpZ2h0IDIwMDUKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjYxLDE5ICsyNDEsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MDYsOCArNDczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCmluZGV4IGZkNTE4ZTMuLmQ0Njg5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgT3JpZ2luYWwgV29yawotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOiAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+IC0gTmFtZWQgdGhlIGJvYXJkcwotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsMTIgKzExLDE0IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KQEAgLTU2LDEyICszNiw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KIC8qCiAgKiAgVVNCLUxBTiBFekV4dGVuZGVyIGJvYXJkCiAgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KQEAgLTk4LDU0ICs3Miw2OSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkdfTU9EVUxFKQotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9wcm9iZXNbXSA9IHsKLQkic3RtX2ZsYXNoIiwKLQlOVUxMLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpraXRfcGFydGl0aW9uc19hW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJib290bG9hZGVyKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKKwkJLm9mZnNldCAgICAgPSAwLAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAibGludXgga2VybmVsKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdG1fcHJpX2RhdGFfYSA9IHsKLQkubWFwbmFtZSAgICA9ICJGbGFzaCBBIFByaW1hcnkiLAotCS5tYXBfcHJvYmVzID0gbWFwX3Byb2JlcywKLQkuYmFua3dpZHRoICA9IDIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlemtpdF9mbGFzaF9kYXRhX2EgPSB7CisJLndpZHRoICAgICAgPSAyLAorCS5wYXJ0cyAgICAgID0gZXpraXRfcGFydGl0aW9uc19hLAorCS5ucl9wYXJ0cyAgID0gQVJSQVlfU0laRShlemtpdF9wYXJ0aXRpb25zX2EpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdG1fcHJpX3Jlc291cmNlX2EgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlX2EgPSB7CiAJLnN0YXJ0ID0gMHgyMDAwMDAwMCwKIAkuZW5kICAgPSAweDIwMGZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RtX3ByaV9kZXZpY2VfYSA9IHsKLQkubmFtZSAgICAgICAgICA9ICJtdGQtcmFtIiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV6a2l0X2ZsYXNoX2RldmljZV9hID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAogCS5pZCAgICAgICAgICAgID0gMCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1fcHJpX2RhdGFfYSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXpraXRfZmxhc2hfZGF0YV9hLAogCX0sCiAJLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSAgICAgID0gJnN0bV9wcmlfcmVzb3VyY2VfYSwKKwkucmVzb3VyY2UgICAgICA9ICZlemtpdF9mbGFzaF9yZXNvdXJjZV9hLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHN0bV9wcmlfZGF0YV9iID0gewotCS5tYXBuYW1lICAgID0gIkZsYXNoIEIgUHJpbWFyeSIsCi0JLm1hcF9wcm9iZXMgPSBtYXBfcHJvYmVzLAotCS5iYW5rd2lkdGggID0gMiwKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlemtpdF9wYXJ0aXRpb25zX2JbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiZmlsZSBzeXN0ZW0obm9yIGIpIiwKKwkJLnNpemUgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RtX3ByaV9yZXNvdXJjZV9iID0geworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpraXRfZmxhc2hfZGF0YV9iID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6a2l0X3BhcnRpdGlvbnNfYiwKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoZXpraXRfcGFydGl0aW9uc19iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXpraXRfZmxhc2hfcmVzb3VyY2VfYiA9IHsKIAkuc3RhcnQgPSAweDIwMTAwMDAwLAogCS5lbmQgICA9IDB4MjAxZmZmZmYsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdG1fcHJpX2RldmljZV9iID0gewotCS5uYW1lICAgICAgICAgID0gIm10ZC1yYW0iLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXpraXRfZmxhc2hfZGV2aWNlX2IgPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkICAgICAgICAgICAgPSA0LAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0bV9wcmlfZGF0YV9iLAorCQkucGxhdGZvcm1fZGF0YSA9ICZlemtpdF9mbGFzaF9kYXRhX2IsCiAJfSwKIAkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlICAgICAgPSAmc3RtX3ByaV9yZXNvdXJjZV9iLAorCS5yZXNvdXJjZSAgICAgID0gJmV6a2l0X2ZsYXNoX3Jlc291cmNlX2IsCiB9OwogI2VuZGlmCiAKQEAgLTQwMCwxOSArMzg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ2MCwxMyArNDM2LDIxIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplemtpdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAogCSZiZmluX2RwbWMsCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkcpIHx8IGRlZmluZWQoQ09ORklHX01URF9QU0Q0MjU2R19NT0RVTEUpCi0JJnN0bV9wcmlfZGV2aWNlX2EsCi0JJnN0bV9wcmlfZGV2aWNlX2IsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKKwkmZXpraXRfZmxhc2hfZGV2aWNlX2EsCisJJmV6a2l0X2ZsYXNoX2RldmljZV9iLAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUExBVFJBTSkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU1fTU9EVUxFKQpAQCAtNDgyLDEwICs0NjYsNiBAQAogCSZiZmluX3NwaTBfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKIAkmcnRjX2RldmljZSwKICNlbmRpZgpAQCAtNTA3LDggKzQ4Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCkBAIC01MTYsNiArNDk0LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZXpraXRfZGV2aWNlcywgQVJSQVlfU0laRShlemtpdF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYmZpbl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5faTJjX2JvYXJkX2luZm8pKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBmMTliNjMzNy4uNjQ0YmU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKQEAgLTEsMzQgKzEsMTIgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pcDB4LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JmMS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEl2YW4gRGFub3YgPGlkYW5vdkBnbWFpbC5jb20+Ci0gKiAgICAgICAgICAgICAgIE1vZGlmaWVkIGZvciBJUDBYIERhdmlkIFJvd2UKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNyBEYXZpZCBSb3dlCisgKiAgICAgICAgICAgICAgICAyMDA2IEludHJhdHJhZGUgTHRkLgorICogICAgICAgICAgICAgICAgICAgICBJdmFuIERhbm92IDxpZGFub3ZAZ21haWwuY29tPgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDcKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgaW5mbyBmaWxlIGZvciB0aGUgSVAwNC9JUDA4IGJvYXJkcywgd2hpY2gKLSAqICAgICAgICAgICAgICAgYXJlIGRlcml2ZWQgZnJvbSB0aGUgQmxhY2tmaW5PbmUgVjIuMCBib2FyZHMuCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENPcHlyaWdodCAyMDA3IERhdmlkIFJvd2UKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgSW50cmF0cmFkZSBMdGQuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTQ1LDcgKzEyMyw2IEBACiAJLmN0bF9yZWcgPSAweDEwMDAsCQkvKiBDUE9MPTAsQ1BIQT0wLFNhbmRpc2sgMUcgd29yayAqLwogCS5lbmFibGVfZG1hID0gMCwJCS8qIGlmIDEgLSBibG9jayEhISAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCmluZGV4IDcyOWZkN2MuLjgyZjcwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJGNTMzLVNUQU1QCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC05NSwxMiArNzMsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzIpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV0MjI3Ml9iZmluX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTQzNiwxOSArNDA4LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ4Nyw2ICs0NDYsMTEgQEAKIAkJLmlycSA9IDM5LAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYmZpbi1hZHY3MzkzIiwgMHgyQiksCisJfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQpAQCAtNTI4LDEwICs0OTIsNiBAQAogCSZzbWM5MXhfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3Ml9NT0RVTEUpCiAJJm5ldDIyNzJfYmZpbl9kZXZpY2UsCiAjZW5kaWYKQEAgLTU2Myw4ICs1MjMsNiBAQAogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9CRklOX0FTWU5DKSB8fCBkZWZpbmVkKENPTkZJR19NVERfQkZJTl9BU1lOQ19NT0RVTEUpCiAJJnN0YW1wX2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCmluZGV4IDdhNDQzYzMuLjRhMTRhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaAppbmRleCBjZjQ0MjdjLi5lM2UwNWY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmY1MzMuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTMzX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggNjk2NWI0MC4uOWUxZjNkZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA0OTllODk3Li5mNGJkNmRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKaW5kZXggYmJjM2M4My4uZmViMjM5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvY2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCmluZGV4IDdmNDYzMzIuLjAyYjMyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKQEAgLTEsNDggKzEsMTAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBQdWJsaWMKLSAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBOb24tR1BMIExpY2Vuc2UgYWxzbyBhdmFpbGFibGUgYXMgcGFydCBvZiBWaXN1YWxEU1ArKwotICogaHR0cDovL3d3dy5hbmFsb2cuY29tL3Byb2Nlc3NvcnMvcmVzb3VyY2VzL2Nyb3NzY29yZS92aXN1YWxEc3BEZXZTb2Z0d2FyZS5odG1sCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAxLTIwMDUgQW5hbG9nIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgZmlsZSB1bmRlciBzb3VyY2UgY29kZSBjb250cm9sLCBwbGVhc2Ugc2VuZCBidWdzIG9yIGNoYW5nZXMgdG86Ci0gKiBkc3B0b29scy5zdXBwb3J0QGFuYWxvZy5jb20KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9kZWZCRjUzMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFN5c3RlbSAmIE1NUiBiaXQgYW5kIEFkZHJlc3MgZGVmaW5pdGlvbnMgZm9yIEFEU1AtQkY1MzIKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KLS8qIFNZU1RFTSAmIE1NIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzIgKi8KIAogI2lmbmRlZiBfREVGX0JGNTMyX0gKICNkZWZpbmUgX0RFRl9CRjUzMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGU0NWMxNzAuLjJhZjE5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCBkYjFlMzQ2Li5jMzE0OThiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9kZWZCRjUzMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CRjUzM19JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggMmY1OWNlMC4uMDc1ZGFlMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKaW5kZXggZjUxOTk0Yi4uOGY3MTRjZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKaW5kZXggODdhY2I3ZC4uYzg1ZjRkNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yOTcsMTkgKzI3Niw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTY5OSw4ICs2NjUsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogCSZjbV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTM3ZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwppbmRleCA4MjE5ZGMzLi5lYTExYWE4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yOTgsMTkgKzI3Nyw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTYwNSw4ICs1NzEsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogCSZjbV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTM3dV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKaW5kZXggMzk5ZjgxZC4uMGRhOTI3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYwpAQCAtMSw0ICsxLDEwIEBACiAvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IENhbWJyaWRnZSBTaWduYWwgUHJvY2Vzc2luZworICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCmluZGV4IDEwYjM1YjguLjliYTI5MDQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zMDIsNyArMjgwLDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIAkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSAxNiwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKaW5kZXggOWRiNmI0MC4uYzQ2YmFhNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTEyMSwxOSArOTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUFfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3BjbWNpYV9jZl9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC0xMDc4LDEyICsxMDQzLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfYWR2NzM5M19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbi1hZHY3MzkzIiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKICNpbmNsdWRlIDxhc20vYmZpbi1scTAzNXExLmg+CiAKQEAgLTE0OTgsNiArMTQ1NywxMSBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkcDU1ODhfZ3Bpb19kYXRhLAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYmZpbi1hZHY3MzkzIiwgMHgyQiksCisJfSwKKyNlbmRpZgogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCkBAIC0xNjY4LDEwICsxNjMyLDYgQEAKIAkmYmZpbl9scTAzNXExX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xNzAyLDggKzE2NjIsNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNX01PRFVMRSkKIAkmYmZpbl9hc3luY19uYW5kX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKaW5kZXggNjEzNTNmNy4uNTcxNjNiNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzcuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjk4LDE5ICsyNzcsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNtX3BhcnRpdGlvbnNbXSA9IHsKIAl7CkBAIC02MDcsOCArNTczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0Y21fYmY1MzdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCmluZGV4IGQyM2ZjMGUuLjVjOGM0ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCmluZGV4IGYxOTRhODQuLjE3ZmFiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFN5c3RlbSBNTVIgUmVnaXN0ZXIgYW5kIG1lbW9yeSBtYXAgZm9yIEFEU1AtQkY1MzcKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTM3CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MzdfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBlOTVkNTRmLi42MzVjOTFjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWRlciBmaWxlcwotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA5ZWU4ODM0Li5lYWIwMDZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCmluZGV4IDVmOGI1ZjguLjkxODI1YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZiZjUzNC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKaW5kZXggYjhmYzk0OS4uOTM2M2MzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoJU3lzdGVtIE1NUiBSZWdpc3RlciBNYXAKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTM3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaAppbmRleCBhMzIyN2Y5Li5jZWJiMTRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCmluZGV4IDNkNmM4M2UuLjhjYjVkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9kZWZiZjUzNy5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUzN19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGQ3N2EzMWUuLjEwNGJmZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCBiMmE3MWQ1Li4wZGVmYTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTM3X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCA4NzI4NWU3Li5kYTk3NjAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwppbmRleCA1MWM0ODA4Li5mNjUwMDYyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwppbmRleCBmMmFjM2IwLi4xNGFmNWMyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yMzcsNyArMjE1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKQEAgLTUwNiwxOSArNDgzLDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKQEAgLTY1OCw4ICs2MjIsNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKaW5kZXggZDY4MzdmYi4uNWRjMDIyNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oCmluZGV4IDljOGFiYjMuLjBjZjViZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9iZjUzOC5oCi0gKiBCYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBBdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUzOAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MjcKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MzhfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCA5OTlmMjM5Li41YzE0ODE0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWRlciBmaWxlcwotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggNWVjZWUxNi4uMjc4ZTg5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKaW5kZXggMWRlNjc1MS4uNDAxZWJkNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvY2RlZkJGNTM4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTM4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaAppbmRleCAxYzU4OTE0Li41ZjZjMzRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCkBAIC0xLDQ3ICsxLDkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBQdWJsaWMKLSAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBOb24tR1BMIExpY2Vuc2UgYWxzbyBhdmFpbGFibGUgYXMgcGFydCBvZiBWaXN1YWxEU1ArKwotICogaHR0cDovL3d3dy5hbmFsb2cuY29tL3Byb2Nlc3NvcnMvcmVzb3VyY2VzL2Nyb3NzY29yZS92aXN1YWxEc3BEZXZTb2Z0d2FyZS5odG1sCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAxLTIwMDUgQW5hbG9nIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgZmlsZSB1bmRlciBzb3VyY2UgY29kZSBjb250cm9sLCBwbGVhc2Ugc2VuZCBidWdzIG9yIGNoYW5nZXMgdG86Ci0gKiBkc3B0b29scy5zdXBwb3J0QGFuYWxvZy5jb20KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9kZWZCRjUzOS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KKwogLyogU1lTVEVNICYgTU0gUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzOC85ICovCiAKICNpZm5kZWYgX0RFRl9CRjUzOV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDMwZjRmNzIuLjI5NWM3OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCBmZGM4N2ZlLi5hNGI3ZmNiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvaXJxLmgKLSAqIGJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2lycS5oCi0gKiBhdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGNTM4X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCBjOGRiMjY0Li42MTIxY2Y4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKaW5kZXggNzBkMTdlNS4uMWZhNzkzYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwppbmRleCBlNTY1YWFlLi5jY2RjZDZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTM4MCwxOSArMzU5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0JGNTRYKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0JGNTRYX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9hdGFwaV9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01NDYsMTMgKzUxMiwxMSBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9mbGFzaF9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIAkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSAxNiwKIH07CkBAIC04NTMsOCArODE3LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1NDhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCmluZGV4IGM2NmYzODAuLjFhNTI4NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yMDgsNyArMTg2LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQURYTDM0WCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfQURYTDM0WF9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWR4bDM0eC5oPgogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHhsMzR4X3BsYXRmb3JtX2RhdGEgYWR4bDM0eF9pbmZvID0gewogCS54X2F4aXNfb2Zmc2V0ID0gMCwKQEAgLTYzNiw3ICs2MTMsNiBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9mbGFzaF9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIApAQCAtNjUwLDcgKzYyNiw2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpAQCAtNjgxLDcgKzY1Niw2IEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkeGwzNHhfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKQEAgLTkwOCwxOSArODgyLDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIC8qCkBAIC0xMDI4LDggKzk4OSw2IEBACiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCiAKLQkmYmZpbl9ncGlvc19kZXZpY2UsCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemtpdF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwppbmRleCBkOTIzOWJjLi4wMzlhNmQ5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCmluZGV4IGNkMzFmNzIuLjdiZWFkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9iZjU0OC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFN5c3RlbSBNTVIgcmVnaXN0ZXIgYW5kIG1lbW9yeSBtYXAgZm9yIEFEU1AtQkY1NDgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1NDhfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmgKaW5kZXggOWM3Y2E2Mi4uODgyMWVmZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBCRjU0WF9MUTA0M19ICiAjZGVmaW5lIEJGNTRYX0xRMDQzX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4X2tleXMuaAppbmRleCAxZmI0ZWM3Li40OTMzOGFlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4X2tleXMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4X2tleXMuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9LUEFEX0gKICNkZWZpbmUgX0JGSU5fS1BBRF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDJkMWI1ZmEuLmRkNDRhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDMxODY2N2IuLjEzMzAyYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCmluZGV4IDA3YWVmYjkuLjQyZjRhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Mi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0Ml9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaAppbmRleCA0MzFhNjkyLi4yMjA3Nzk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKaW5kZXggOTMzNzZlOS4uNDIzNDIxNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaAppbmRleCA5Y2Q3NDM4Li5kZjg0MTgwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKaW5kZXggZWFkMzYwYi4uMzRjODRjN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ5L2NkZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKaW5kZXggNmU2MzZjNC4uYTJlOWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTRYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAppbmRleCBiMTMxNjU0Li5kM2JjNmQxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0Ml9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKaW5kZXggYzJjNzg1Yi4uZGQ0MTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCmluZGV4IDY2MWYwZDguLjVhOWRiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKaW5kZXggODVkNGJhZC4uODJjZDU5MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCmluZGV4IDA5NjczNDUuLjZmYzZlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ5X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKaW5kZXggZTAyMmU4OS4uODU5MGM4YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NFhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzYTIwNTE3Li44NTBlMzlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSwzNCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQotICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0KLQogI2RlZmluZSBHUElPX1BBMAkwCiAjZGVmaW5lIEdQSU9fUEExCTEKICNkZWZpbmUgR1BJT19QQTIJMgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZjE5NDYyNS4uMTA2ZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglSb3kgSHVhbmcgKHJveS5odWFuZ0BhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NDhfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGNlMzcyYmEuLjg5YWQ2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZGQwZmEzLi40OGRkM2E0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCA5NDM5YmM2Li4wMjYxYTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwppbmRleCA2NTc3ZWNmLi5kZmM4ZDViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCkBAIC0xLDMwICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+IENvcHlyaWdodCAyMDA1CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yODUsMTkgKzI2NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MzIsOCArNDk5LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1NjFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IGNhZWQ5NmIuLjllMmQ4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2V6a2l0LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTM4NywxOSArMzY2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ5Myw4ICs0NTksNiBAQAogCSZpc3AxMzYyX2hjZF9kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCmluZGV4IDZmNzdkYmUuLjhiYTcyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKQEAgLTEsMTUgKzEsMTMgQEAKIC8qCi0gKiAgRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3RlcGxhLmMKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgorICogVGhhbmtzIHRvIEphbWV5IEhpY2tzLgogICoKLSAqICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSksIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+Ci0gKiAgVGhhbmtzIHRvIEphbWV5IEhpY2tzLgorICogT25seSBTTVNDOTFDMTExMSB3YXMgcmVnaXN0ZXJlZCwgbWF5IGRvIG1vcmUgbGF0ZXIuCiAgKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKaW5kZXggOTM2MzVhNy4uMWU2MGE5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb3JlYl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29yZWJfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCAgID0gY29yZWJfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCmluZGV4IDQyYjAwMzcuLmM5MzhjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKaW5kZXggOTk2ODM2Mi4uOWY5YTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjU2MV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGZkNWU4ODcuLmUzM2UxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDhiZTMxMzUuLjY3ZDZiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKaW5kZXggOWQ5ODU4Yy4uODFlY2RiNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQyBQT0lOVEVSUyBUTyBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NjFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCmluZGV4IDVmYzBmMDUuLmEzMWU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU2MV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDc4ODJmNzkuLmE2NTFhOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCA2Njk4Mzg5Li43YjIwOGRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2lycS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NjFfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDJlNWFkNjMuLjNhN2I0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCBmOWU2NWViLi4zOTBjN2Y0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfQkY1NjFfU01QCiAjZGVmaW5lIF9NQUNIX0JGNTYxX1NNUAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZDJmMjMzLi5iNDQyNDE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwppbmRleCBmNzJhNmFmLi44ZTYwNTAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCkBAIC0xLDI2ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqIERlc2NyaXB0aW9uOiAgQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwppbmRleCA4YzEwNzAxLi41MTBmNTc2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKaW5kZXggNTk5OGQ4Ni4uOWRiYWZjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIERvIHNvbWUgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgT0sKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2ZpeGVkX2NvZGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKaW5kZXggNGViYmQ3OC4uYTYwYTI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwppbmRleCBkOTY2NmZlLi5lYTU0MDMxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCmluZGV4IDg1YzY1ODAuLjAxNTA2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOgkgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgkgQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqCQkgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczoJIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCTAyMTEwLTEzMDEJVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCmluZGV4IDFlN2NhYzIuLjk0YTAzNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKQEAgLTEsMzIgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIExpbnVzIFRvcnZhbGRzCisgKiBDb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFRoaXMgYWxzbyBjb250YWlucyB0aGUgdGltZXItaW50ZXJydXB0IGhhbmRsZXIsIGFzIHdlbGwgYXMgYWxsCisgKiBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIGNvbnRhaW5zIHRoZSBzeXN0ZW0tY2FsbCBhbmQgZmF1bHQgbG93LWxldmVsIGhhbmRsaW5nIHJvdXRpbmVzLgotICogICAgICAgICAgICAgICBUaGlzIGFsc28gY29udGFpbnMgdGhlIHRpbWVyLWludGVycnVwdCBoYW5kbGVyLCBhcyB3ZWxsIGFzIGFsbAotICogICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyogTk9URTogVGhpcyBjb2RlIGhhbmRsZXMgc2lnbmFsLXJlY29nbml0aW9uLCB3aGljaCBoYXBwZW5zIGV2ZXJ5IHRpbWUKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggOWM3OWRmZS4uY2FiMGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCmluZGV4IDgyZDQxN2UuLjgwODVmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ5ZWhhbS5lZS5yeWVyc29uLmNhPgorICogSW50ZXJydXB0IEVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgRC4gSmVmZiBEaW9ubmUgPGplZmZAcnllaGFtLmVlLnJ5ZXJzb24uY2E+CiAgKiAgICAgICAgICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+CiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIEludGVycnVwdCBFbnRyaWVzCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKaW5kZXggNmZmZGE3OC4uNjYwZWExYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzMgKzEsMTQgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqICAgICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gTWFUZWQgPG1hdGVkQHN5bXBhdGljby5jYT4KKyAqICAgICAgICAgICAgMjAwMC0yMDAxIExpbmVvLCBJbmMuIEQuIEplZmZmIERpb25uZSA8amVmZkBsaW5lby5jYT4KKyAqICAgICAgICAgICAgICAgICAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgorICogICAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCi0gKiAgICAgICAgICAgICAgIDE5OTkgRC4gSmVmZiBEaW9ubmUgPGplZmZAdWNsaW51eC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDAtMjAwMSBMaW5lbywgSW5jLiBELiBKZWZmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+Ci0gKiAgICAgICAgICAgICAgIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiBNYVRlZCA8bWF0ZWRAc3ltcGF0aWNvLmNhPgotICogICAgICAgICAgICAgICAyMDAzIE1ldHJvd2Vya3MvTW90b3JvbGEKLSAqICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKaW5kZXggODgzZTMyNC4uYzY0OTYyNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaXJxcGFuaWMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHBhbmljIGtlcm5lbCB3aXRoIGR1bXAgaW5mb3JtYXRpb24KICAqCi0gKiBDcmVhdGVkOiAgICAgID8KLSAqIERlc2NyaXB0aW9uOiAgcGFuaWMga2VybmVsIHdpdGggZHVtcCBpbmZvcm1hdGlvbgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6ICAgICByZ2V0eiAtIGFkZGVkIGNhY2hlIGNoZWNraW5nIGNvZGUgMTRGZWIwNgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKaW5kZXggMGUzZDRmZi4uODgzN2JlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwpAQCAtMSwzNSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCi0gKiBCYXNlZCBvbjogICAgIGFybS9tYWNoLW9tYXAvcG0uYwotICogQXV0aG9yOiAgICAgICBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4gQ29weXJpZ2h0IChjKSAyMDAxCisgKiBCbGFja2ZpbiBwb3dlciBtYW5hZ2VtZW50CiAgKgotICogQ3JlYXRlZDogICAgICAyMDAxCi0gKiBEZXNjcmlwdGlvbjogIEJsYWNrZmluIHBvd2VyIG1hbmFnZW1lbnQKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOiAgICAgTmljb2xhcyBQaXRyZSAtIFBYQTI1MCBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICAgRGF2aWQgU2luZ2xldG9uIC0gT01BUDE1MTAKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAgICAgICBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4gLSBPTUFQMTUxMC8xNjEwCi0gKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNAotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgorICogYmFzZWQgb24gYXJtL21hY2gtb21hcC9wbS5jCisgKiAgICBDb3B5cmlnaHQgMjAwMSwgQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+IGFuZCBvdGhlcnMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggMzQ5ZWUzZi4uZDk4NTg1ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xLDI0ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zbXAuYwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgotICogSVBJIG1hbmFnZW1lbnQgYmFzZWQgb24gYXJjaC9hcm0va2VybmVsL3NtcC5jLgorICogSVBJIG1hbmFnZW1lbnQgYmFzZWQgb24gYXJjaC9hcm0va2VybmVsL3NtcC5jIChDb3B5cmlnaHQgMjAwMiBBUk0gTGltaXRlZCkKICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmggYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAppbmRleCBiYzAwNjI4Li5mYjBiMTU5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAorKysgYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwotICogQXV0aG9yOiAgICAgICBNaWtlIEZyeXNpbmdlcgorICogTG9jYWwgcHJvdG90eXBlcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKICAqCi0gKiBDcmVhdGVkOiAgICAgIEF1ZyAyMDA2Ci0gKiBEZXNjcmlwdGlvbjogIExvY2FsIHByb3RvdHlwZXMgbWVhbnQgZm9yIGludGVybmFsIHVzZSBvbmx5CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9TUkFNX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwppbmRleCBiODhjZTdmLi5iYjljOThmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYworKysgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2luaXQuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jIGIvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYwppbmRleCBiZWIxYTYwLi44NGNkYzVhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMKQEAgLTEsMTkgKzEsOSBAQAogLyoKLSAqIERlc2NyaXB0aW9uOiBJbnN0cnVjdGlvbiBTUkFNIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIEJsYWNrZmluCisgKiBJbnN0cnVjdGlvbiBTUkFNIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIEJsYWNrZmluCiAgKgogICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpICJpc3JhbTogIiBmbXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKaW5kZXggZWI2M2FiMzUuLmYwNjhjMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFNSQU0gYWxsb2NhdG9yIGZvciBCbGFja2ZpbiBvbi1jaGlwIG1lbW9yeQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNSQU0gYWxsb2NhdG9yIGZvciBCbGFja2ZpbiBMMSBhbmQgTDIgbWVtb3J5CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggNmNjMWEwMy4uNTYyYjlhN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKICNkZWZpbmUgTlVNQkVSX09GX1BPUlRTIDIKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19zZXJpYWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAogCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggMmI3M2M3YS4uMzFjYTE0MSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2Zyb21fY21vcyh2b2lkKTsKIGV4dGVybiBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7Ci1leHRlcm4gaW50IHNldHVwX2lycShpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7CiBleHRlcm4gaW50IGhhdmVfcnRjOwogCiB1bnNpZ25lZCBsb25nIGdldF9uc19pbl9qaWZmaWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKaW5kZXggZmUxZmRlOC4uZDg5YWI4MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkucG9sbCAgICAgICAgPSBncGlvX3BvbGwsCiAJLmlvY3RsICAgICAgID0gZ3Bpb19pb2N0bCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGQyYTNmZjguLjA1OGFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogZmx1c2hfdm1hOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmx1c2hfYWRkcjsKIAotZXh0ZXJuIGludCBzZXR1cF9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwotCiAvKiBNb2RlIHJlZ2lzdGVycyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX3JlZ3NbTlJfQ1BVU10gPSB7CiAgIHJlZ2lfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwppbmRleCA2NTYzM2QwLi5iMTkyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwpAQCAtNDYsNyArNDYsNiBAQAogCiBleHRlcm4gdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV9jbW9zKHZvaWQpOwogZXh0ZXJuIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiBpbnQgc2V0dXBfaXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiBpbnQgaGF2ZV9ydGM7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9pby5jCmluZGV4IGMyMmY2N2UuLjA5MGNlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5CUl9PRl9QT1JUUyBzaXplb2YoY3Jpc3YzMl9pb3BvcnRzKS9zaXplb2Yoc3RydWN0IGNyaXN2MzJfaW9wb3J0KQorI2RlZmluZSBOQlJfT0ZfUE9SVFMgQVJSQVlfU0laRShjcmlzdjMyX2lvcG9ydHMpCiAKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfZ3JlZW47CiBzdHJ1Y3QgY3Jpc3YzMl9pb3BpbiBjcmlzdjMyX2xlZF9uZXQwX3JlZDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9pby5jCmluZGV4IGNiNjMyN2IuLmE2OTU4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYwpAQCAtNTIsNyArNTIsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgTkJSX09GX1BPUlRTIHNpemVvZihjcmlzdjMyX2lvcG9ydHMpL3NpemVvZihzdHJ1Y3QgY3Jpc3YzMl9pb3BvcnQpCisjZGVmaW5lIE5CUl9PRl9QT1JUUyBBUlJBWV9TSVpFKGNyaXN2MzJfaW9wb3J0cykKIAogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9ncmVlbjsKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfcmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKaW5kZXggZGY4NGYxNy4uZTgyOWU1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCkBAIC0zMywxMCArMzMsMTAgQEAKIAogLyogQ1JJUyBQVEUgYml0cyAoc2VlIFJfVExCX0xPIGluIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbikKICAqCi0gKiAgIEJpdDogIDMxLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAgIAotICogICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAqICAgICAgICB8IHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAotICogICAgICAgIHxfX19fX3xfX19fX19fX19ffF9fX19fX19ffF9fX19fX198X19fX19fX198X19fX198CisgKiAgIEJpdDogIDMxICAgICAzMC0xMyAxMi0tLS0tLS00ICAgIDMgICAgICAgIDIgICAgICAgMSAgICAgICAwCisgKiAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICB8IGNhY2hlIHxwZm4gfCByZXNlcnZlZCB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd2UgIHwKKyAqICAgICAgICB8X19fX19fX3xfX19ffF9fX19fX19fX198X19fX19fX198X19fX19fX3xfX19fX19fX3xfX19fX3wKICAqCiAgKiAocGZuID0gcGh5c2ljYWwgZnJhbWUgbnVtYmVyKQogICovCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElECSAgICgxPDwyKSAvKiBwYWdlIGlzIHZhbGlkICovCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAoMTw8MikgLyogc3lub255bSAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgKDE8PDMpIC8qIGdsb2JhbCBwYWdlIC0gY29udGV4dCBpcyBpZ25vcmVkICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCSAgICgxPDwzMSkgLyogcGFydCBvZiB0aGUgdW5jYWNoZWQgbWVtb3J5IG1hcCAqLwogCiAvKiBCaXRzIHRoZSBIVyBkb2Vzbid0IGNhcmUgYWJvdXQgYnV0IHRoZSBrZXJuZWwgdXNlcyB0aGVtIGluIFNXICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCmluZGV4IDZiY2RjM2YuLmMxYTEzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaApAQCAtMjgsMTAgKzI4LDEwIEBACiAvKgogICogQ1JJU3YzMiBQVEUgYml0czoKICAqCi0gKiAgQml0OiAgMzEtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwotICogICAgICAgfCBwZm4gfCB6ZXJvIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3cml0ZSB8IGV4ZWN1dGUgfAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKworICogIEJpdDogICAzMSAgICAgMzAtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAorICogICAgICAgKy0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCisgKiAgICAgICB8IGNhY2hlIHwgcGZuIHwgemVybyB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd3JpdGUgfCBleGVjdXRlIHwKKyAqICAgICAgICstLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwogICovCiAKIC8qCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgKDEgPDwgMykJLyogUGFnZSBpcyB2YWxpZC4gKi8KICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAoMSA8PCAzKQkvKiBTYW1lIGFzIGFib3ZlLiAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICgxIDw8IDQpCS8qIEdsb2JhbCBwYWdlLiAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkgICAgKDEgPDwgMzEpCS8qIHBhcnQgb2YgdGhlIHVuY2FjaGVkIG1lbW9yeSBtYXAgKi8KKwogCiAvKgogICogVGhlIGhhcmR3YXJlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZSBiaXRzLCBidXQgdGhlIGtlcm5lbCB1c2VzIHRoZW0gaW4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDc0MTc4YWQuLjE3YmIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMiwxNiArMiw2IEBACiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+IC8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIApAQCAtMjQsNCArMTQsNiBAQAogIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorCiAjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1MGFhOTc0Li4xZmNjZTAwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE5Nyw2ICsxOTcsOCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsgcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7IHJldHVybiBwdGU7IH0KIAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfTk9fQ0FDSEUpKQorCiAKIC8qIHB0ZV92YWwgcmVmZXJzIHRvIGEgcGFnZSBpbiB0aGUgMHg0eHh4eHh4eCBwaHlzaWNhbCBEUkFNIGludGVydmFsCiAgKiBfX3B0ZV9wYWdlKHB0ZV92YWwpIHJlZmVycyB0byB0aGUgInZpcnR1YWwiIERSQU0gaW50ZXJ2YWwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDdmNjQyZmMuLjBjYTdkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtMzgsMTEgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKCJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotfQotCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmM4MTgzNi4uYmJmZGE2NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTEsMTAgKzUxLDcgQEAKIAlfZXRleHQgPSAuIDsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uLiAqLwogCV9fZXRleHQgPSAuOwogCi0JLiA9IEFMSUdOKDQpOwkJCS8qIEV4Y2VwdGlvbiB0YWJsZS4gKi8KLQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCV9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKwlFWENFUFRJT05fVEFCTEUoNCkKIAogCVJPREFUQQogCkBAIC02NywzNiArNjQsMjQgQEAKIAlfX2VkYXRhID0gLiA7CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbi4gKi8KIAlfZWRhdGEgPSAuIDsKIAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwkvKiBpbml0X3Rhc2sgYW5kIHN0YWNrLCBtdXN0IGJlIGFsaWduZWQuICovCi0JLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQorCUlOSVRfVEFTS19EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEuICovCiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogewotCQkgICBfc2luaXR0ZXh0ID0gLjsKLQkJICAgSU5JVF9URVhUCi0JCSAgIF9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KLQkuID0gQUxJR04oMTYpOwotCV9fc2V0dXBfc3RhcnQgPSAuOwotCS5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0JX19zZXR1cF9lbmQgPSAuOworCS5pbml0LnNldHVwIDogeyBJTklUX1NFVFVQKDE2KSB9CiAjaWZkZWYgQ09ORklHX0VUUkFYX0FSQ0hfVjMyCiAJX19zdGFydF9fX3BhcmFtID0gLjsKIAlfX3BhcmFtIDogeyAqKF9fcGFyYW0pIH0KIAlfX3N0b3BfX19wYXJhbSA9IC47CiAjZW5kaWYKIAkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47CisJCUlOSVRfQ0FMTFMKIAl9CiAKIAkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAlTRUNVUklUWV9JTklUCiAKQEAgLTExNCw5ICs5OSw3IEBACiAJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCUlOSVRfUkFNX0ZTCiAJfQogI2VuZGlmCiAKQEAgLTEzMCwxMSArMTEzLDcgQEAKIAlfX2luaXRfZW5kID0gLjsKIAogCV9fZGF0YV9lbmQgPSAuIDsJCS8qIE1vdmUgdG8gX2VkYXRhID8gKi8KLQlfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MuICovCi0JLmJzcyA6IHsKLQkJKihDT01NT04pCi0JCSooLmJzcykKLQl9CisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKIAogCS4gPSAgQUxJR04gKDB4MjApOwogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCmluZGV4IDZiMGEyYjYuLjA5NzRjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCiBub19zaWduYWw6CiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gPj0gMCkgeworCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gIT0gLTEpIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCiAJCXN3aXRjaCAoX19mcmFtZS0+Z3I4KSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlCmluZGV4IDc2NTk1ZTguLmI3M2I1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUKQEAgLTExLDMgKzExLDUgQEAKIG9iai15ICs9IHBjaS1kbWEtbm9tbXUubwogZW5kaWYKIGVuZGlmCisKK29iai0kKENPTkZJR19NVEQpICs9IGZsYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMzcwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEZsYXNoIG1hcHBpbmdzIGZvciB0aGUgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjZGVmaW5lIE1COTMwOTBfQk9PVFJPTV9BRERSCTB4RkYwMDAwMDAJLyogQm9vdCBST00gKi8KKyNkZWZpbmUgTUI5MzA5MF9CT09UUk9NX1NJWkUJKDIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgTUI5MzA5MF9VU0VSUk9NX0FERFIJMHhGRjIwMDAwMAkvKiBVc2VyIFJPTSAqLworI2RlZmluZSBNQjkzMDkwX1VTRVJST01fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogZGVmYXVsdCBNVEQgcGFydGl0aW9uIHRhYmxlIGZvciBib3RoIG1haW4gZmxhc2ggZGV2aWNlcywgZXhwZWN0ZWQgdG8gYmUKKyAqIG92ZXJyaWRkZW4gYnkgUmVkQm9vdAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWI5MzA5MF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwl9Cit9OworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgTUI5MzA5MCBCb290IFJPTSAob24gdGhlIENQVSBjYXJkKQorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtYjkzMDkwX2Jvb3Ryb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSAyLAorCS5wYXJ0cwkJPSBtYjkzMDkwX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTUI5MzA5MF9CT09UUk9NX0FERFIsCisJLmVuZAkJPSBNQjkzMDkwX0JPT1RST01fQUREUiArIE1COTMwOTBfQk9PVFJPTV9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYjkzMDkwX2Jvb3Ryb20gPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtYjkzMDkwX2Jvb3Ryb21fZGF0YSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSwKK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBNQjkzMDkwIFVzZXIgUk9NIGRlZmluaXRpb24gKG9uIHRoZSBtb3RoZXJib2FyZCkKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWI5MzA5MF91c2Vycm9tX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gMiwKKwkucGFydHMJCT0gbWI5MzA5MF9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE1COTMwOTBfVVNFUlJPTV9BRERSLAorCS5lbmQJCT0gTUI5MzA5MF9VU0VSUk9NX0FERFIgKyBNQjkzMDkwX1VTRVJST01fU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWI5MzA5MF91c2Vycm9tID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbWI5MzA5MF91c2Vycm9tX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UsCit9OworCisvKgorICogcmVnaXN0ZXIgdGhlIE1COTMwOTAgZmxhc2hlcworICovCitzdGF0aWMgaW50IF9faW5pdCBtYjkzMDkwX210ZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYjkzMDkwX2Jvb3Ryb20pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWI5MzA5MF91c2Vycm9tKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWI5MzA5MF9tdGRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2NjJiMDJlLi5iOWUyNDkwNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDUgKzEsNiBAQAogI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgXyMjX3N5bV8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIHRhcmdldCBtZW1vcnkgbWFwICovCiAjaWZkZWYgQ09ORklHX0g4MzAwSF9HRU5FUklDCkBAIC03OSwxMSArODAsOCBAQAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAlfX2V0ZXh0ID0gLiA7Ci0JLiA9IEFMSUdOKDE2KTsgICAgICAgICAgLyogRXhjZXB0aW9uIHRhYmxlICAgICAgICAgICAgICAqLwotCV9fX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JX19fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJUk9EQVRBCiAjaWYgZGVmaW5lZChDT05GSUdfUk9NS0VSTkVMKQpAQCAtMTAwLDggKzk4LDcgQEAKIAlfX3NkYXRhID0gLiA7CiAJX19fZGF0YV9zdGFydCA9IC4gOwogCi0JLiA9IEFMSUdOKDB4MjAwMCkgOwotCQkqKC5kYXRhLmluaXRfdGFzaykKKwlJTklUX1RBU0tfREFUQSgweDIwMDApCiAJLiA9IEFMSUdOKDB4NCkgOwogCQlEQVRBX0RBVEEKIAkuID0gQUxJR04oMHg0KSA7CkBAIC0xMTQsMjQgKzExMSwxNiBAQAogCV9fZWluaXR0ZXh0ID0gLjsgCiAJCUlOSVRfREFUQQogCS4gPSBBTElHTigweDQpIDsKKwlJTklUX1NFVFVQKDB4NCkKIAlfX19zZXR1cF9zdGFydCA9IC47CiAJCSooLmluaXQuc2V0dXApCiAJLiA9IEFMSUdOKDB4NCkgOwogCV9fX3NldHVwX2VuZCA9IC47Ci0JX19faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCUlOSVRfQ0FMTFMKKwlDT05fSU5JVENBTEwKIAkJRVhJVF9URVhUCiAJCUVYSVRfREFUQQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCQkuID0gQUxJR04oNCk7Ci0JX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgCQkqKC5pbml0LnJhbWZzKQotICAJX19faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKKwlJTklUX1JBTV9GUwogCS4gPSBBTElHTigweDQpIDsKIAlfX19pbml0X2VuZCA9IC47CiAJX19lZGF0YSA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA2ODUxZTUyLi4xZWU1OTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNjAsOSArNjAsNyBAQAogICAgICAgIGJvb2wKIAogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggZjkyYmRhYS4uYzY5NTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTY5LDExICs2OSwxMSBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9zaGFyZWRfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzID0gewogCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZQogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX2dhdGVfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfZ2F0ZV9wYWdlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpYTMyX2luc3RhbGxfZ2F0ZV9wYWdlCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAwZjgyY2MyLi45MWRmOTY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTg5LDEwICs4OSwxMiBAQAogI2RlZmluZSBBQ1BJX1JFTEVBU0VfR0xPQkFMX0xPQ0soZmFjcywgQWNxKQkJCQlcCiAJKChBY3EpID0gaWE2NF9hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soJmZhY3MtPmdsb2JhbF9sb2NrKSkKIAorI2lmZGVmCUNPTkZJR19BQ1BJCiAjZGVmaW5lIGFjcGlfZGlzYWJsZWQgMAkvKiBBQ1BJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2VuZGlmCiAjZGVmaW5lIGFjcGlfcHJvY2Vzc29yX2NzdGF0ZV9jaGVjayh4KSAoeCkgLyogbm8gaWRsZSBsaW1pdHMgb24gSUE2NCA6KSAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAxM2FiNzE1Li4yMzllY2RjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTksMTAzICsxOSwxMjYgQEAKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfaW5pdCh4KQkJCSgoeCktPmxvY2sgPSAwKQogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAogLyoKLSAqIFRyeSB0byBnZXQgdGhlIGxvY2suICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgbG9jaywgbWFrZSBhIG5vbi1zdGFuZGFyZCBjYWxsIHRvCi0gKiBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24oKS4gIFdlIGRvIG5vdCB1c2UgYSBub3JtYWwgY2FsbCBiZWNhdXNlIHRoYXQgd291bGQgZm9yY2UgYWxsCi0gKiBjYWxsZXJzIG9mIF9fcmF3X3NwaW5fbG9jaygpIHRvIGJlIG5vbi1sZWFmIHJvdXRpbmVzLiAgSW5zdGVhZCwgaWE2NF9zcGlubG9ja19jb250ZW50aW9uKCkgaXMKLSAqIGNhcmVmdWxseSBjb2RlZCB0byB0b3VjaCBvbmx5IHRob3NlIHJlZ2lzdGVycyB0aGF0IF9fcmF3X3NwaW5fbG9jaygpIG1hcmtzICJjbG9iYmVyZWQiLgorICogVGlja2V0IGxvY2tzIGFyZSBjb25jZXB0dWFsbHkgdHdvIHBhcnRzLCBvbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoZWFkIG9mCisgKiB0aGUgcXVldWUsIGFuZCB0aGUgb3RoZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0YWlsLiBUaGUgbG9jayBpcyBhY3F1aXJlZAorICogYnkgYXRvbWljYWxseSBub3RpbmcgdGhlIHRhaWwgYW5kIGluY3JlbWVudGluZyBpdCBieSBvbmUgKHRodXMgYWRkaW5nCisgKiBvdXJzZWxmIHRvIHRoZSBxdWV1ZSBhbmQgbm90aW5nIG91ciBwb3NpdGlvbiksIHRoZW4gd2FpdGluZyB1bnRpbCB0aGUgaGVhZAorICogYmVjb21lcyBlcXVhbCB0byB0aGUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRhaWwuCisgKiBUaGUgcGFkIGJpdHMgaW4gdGhlIG1pZGRsZSBhcmUgdXNlZCB0byBwcmV2ZW50IHRoZSBuZXh0X3RpY2tldCBudW1iZXIKKyAqIG92ZXJmbG93aW5nIGludG8gdGhlIG5vd19zZXJ2aW5nIG51bWJlci4KKyAqCisgKiAgIDMxICAgICAgICAgICAgIDE3ICAxNiAgICAxNSAgMTQgICAgICAgICAgICAgICAgICAgIDAKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8ICBub3dfc2VydmluZyAgICAgfCBwYWRkaW5nIHwgICBuZXh0X3RpY2tldCAgICAgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqLwogCi0jZGVmaW5lIElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMgImFyLmNjdiIsICJhci5wZnMiLCAicDE0IiwgInAxNSIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAiYjYiLCAibWVtb3J5IgorI2RlZmluZSBUSUNLRVRfU0hJRlQJMTcKKyNkZWZpbmUgVElDS0VUX0JJVFMJMTUKKyNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19yYXdfc3Bpbl9sb2NrX2ZsYWdzIChyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHIgYXNtICgicjMxIikgPSAmbG9jay0+bG9jazsKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0jIGlmZGVmIENPTkZJR19JVEFOSVVNCi0JLyogZG9uJ3QgdXNlIGJybCBvbiBJdGFuaXVtLi4uICovCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Zcblx0IgotCQkgICAgICAibW92bCByMjkgPSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180Oztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKLQkJICAgICAgIihwMTQpIGJyLmNvbmQuc3BudC5tYW55IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAiKHAxNCkgYnJsLmNvbmQuc3BudC5tYW55IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZWxzZQotIyBpZmRlZiBDT05GSUdfSVRBTklVTQotCS8qIGRvbid0IHVzZSBicmwgb24gSXRhbml1bS4uLiAqLwotCS8qIG1pcy1kZWNsYXJlLCBzbyB3ZSBnZXQgdGhlIGVudHJ5LXBvaW50LCBub3QgaXQncyBmdW5jdGlvbiBkZXNjcmlwdG9yOiAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdiByMzAgPSAxXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAibW92IGFyLmNjdiA9IHIwOztcblx0IgotCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMF0sIHIzMCwgYXIuY2N2XG5cdCIKLQkJICAgICAgIm1vdmwgcjI5ID0gaWE2NF9zcGlubG9ja19jb250ZW50aW9uOztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICIocDE0KSBici5jYWxsLnNwbnQubWFueSBiNiA9IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgibW92IHIzMCA9IDFcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICJtb3YgYXIuY2N2ID0gcjA7O1xuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUwXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIihwMTQpIGJybC5jYWxsLnNwbnQubWFueSBiNj1pYTY0X3NwaW5sb2NrX2NvbnRlbnRpb247OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZW5kaWYKKwl0aWNrZXQgPSBpYTY0X2ZldGNoYWRkKDEsIHAsIGFjcSk7CisKKwlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuOworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHNlcnZlKSA6ICJyIihwKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoISgoKHNlcnZlID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCAwKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotLyogVW5sb2NrIGJ5IGRvaW5nIGFuIG9yZGVyZWQgc3RvcmUgYW5kIHJlbGVhc2luZyB0aGUgY2FjaGVsaW5lIHdpdGggbnRhICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKngpIHsKLQliYXJyaWVyKCk7Ci0JYXNtIHZvbGF0aWxlICgic3Q0LnJlbC5udGEgWyUwXSA9IHIwXG5cdCIgOjogInIiKHgpKTsKKwlpZiAoISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuIGlhNjRfY21weGNoZyhhY3EsICZsb2NrLT5sb2NrLCB0bXAsIHRtcCArIDEsIHNpemVvZiAodG1wKSkgPT0gdG1wOworCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotIyBkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJCQlcCi0JX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCQkJCVwKLQlfX3U2NCBpYTY0X3NwaW5sb2NrX3ZhbDsJCQkJCQkJXAotCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwkJCVwKLQlpZiAodW5saWtlbHkoaWE2NF9zcGlubG9ja192YWwpKSB7CQkJCQkJXAotCQlkbyB7CQkJCQkJCQkJXAotCQkJd2hpbGUgKCppYTY0X3NwaW5sb2NrX3B0cikJCQkJCVwKLQkJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQlcCi0JCQlpYTY0X3NwaW5sb2NrX3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfc3BpbmxvY2tfcHRyLCAxLCAwKTsJXAotCQl9IHdoaWxlIChpYTY0X3NwaW5sb2NrX3ZhbCk7CQkJCQkJXAotCX0JCQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2soeCkJZG8geyBiYXJyaWVyKCk7ICgocmF3X3NwaW5sb2NrX3QgKikgeCktPmxvY2sgPSAwOyB9IHdoaWxlICgwKQotI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayAhPSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3RyeWxvY2soeCkJCShjbXB4Y2hnX2FjcSgmKHgpLT5sb2NrLCAwLCAxKSA9PSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisJYXNtIHZvbGF0aWxlICgibGQyLmJpYXMgJTA9WyUxXSIgOiAiPXIiKHRtcCkgOiAiciIocCkpOworCUFDQ0VTU19PTkNFKCpwKSA9ICh0bXAgKyAyKSAmIH4xOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldDsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIih0aWNrZXQpIDogInIiKHApIDogIm1lbW9yeSIpOworCQlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJCXJldHVybjsKKwkJY3B1X3JlbGF4KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorI2RlZmluZSBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAlfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQobG9jayk7Cit9CiAKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWE2ZTQ0NS4uNjk2ZWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTExMzAsOTUgKzExMzAsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JQTY0X0JSTF9FTVUgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHNwaW5sb2NrIGNvbnRlbnRpb24uICBJdCB1c2VzIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcKLQkgKiBjb252ZW50aW9uIHRvIGF2b2lkIGNvbnZlcnRpbmcgbGVhZiByb3V0aW5lcyBpbnRvIGludGVyaW9yIHJvdXRpbmVzLiAgQmVjYXVzZQotCSAqIG9mIHRoaXMgc3BlY2lhbCBjb252ZW50aW9uLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXN0cmljdGlvbnM6Ci0JICoKLQkgKiAtIGRvIG5vdCB1c2UgZ3AgcmVsYXRpdmUgdmFyaWFibGVzLCB0aGlzIGNvZGUgaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbAotCSAqICAgYW5kIGZyb20gbW9kdWxlcywgcjEgaXMgdW5kZWZpbmVkLgotCSAqIC0gZG8gbm90IHVzZSBzdGFja2VkIHJlZ2lzdGVycywgdGhlIGNhbGxlciBvd25zIHRoZW0uCi0JICogLSBkbyBub3QgdXNlIHRoZSBzY3JhdGNoIHN0YWNrIHNwYWNlLCB0aGUgY2FsbGVyIG93bnMgaXQuCi0JICogLSBkbyBub3QgdXNlIGFueSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYmVsb3cKLQkgKgotCSAqIElucHV0czoKLQkgKiAgIGFyLnBmcyAtIHNhdmVkIENGTSBvZiBjYWxsZXIKLQkgKiAgIGFyLmNjdiAtIDAgKGFuZCBhdmFpbGFibGUgZm9yIHVzZSkKLQkgKiAgIHIyNyAgICAtIGZsYWdzIGZyb20gc3Bpbl9sb2NrX2lycXNhdmUgb3IgMC4gIE11c3QgYmUgcHJlc2VydmVkLgotCSAqICAgcjI4ICAgIC0gYXZhaWxhYmxlIGZvciB1c2UuCi0JICogICByMjkgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHIzMCAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcjMxICAgIC0gYWRkcmVzcyBvZiBsb2NrLCBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIGI2ICAgICAtIHJldHVybiBhZGRyZXNzCi0JICogICBwMTQgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHAxNSAgICAtIHVzZWQgdG8gdHJhY2sgZmxhZyBzdGF0dXMuCi0JICoKLQkgKiBJZiB5b3UgcGF0Y2ggdGhpcyBjb2RlIHRvIHVzZSBtb3JlIHJlZ2lzdGVycywgZG8gbm90IGZvcmdldCB0byB1cGRhdGUKLQkgKiB0aGUgY2xvYmJlciBsaXN0cyBmb3Igc3Bpbl9sb2NrKCkgaW4gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmguCi0JICovCi0KLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0KLUdMT0JBTF9FTlRSWShpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KQotCS5wcm9sb2d1ZQotCS5zYXZlIGFyLnBmcywgcjAJLy8gdGhpcyBjb2RlIGVmZmVjdGl2ZWx5IGhhcyBhIHplcm8gZnJhbWUgc2l6ZQotCS5zYXZlIHJwLCByMjgKLQkuYm9keQotCW5vcCAwCi0JdGJpdC5ueiBwMTUscDA9cjI3LElBNjRfUFNSX0lfQklUCi0JLnJlc3RvcmUgc3AJCS8vIHBvcCBleGlzdGluZyBwcm9sb2d1ZSBhZnRlciBuZXh0IGluc24KLQltb3YgYjYgPSByMjgKLQkucHJvbG9ndWUKLQkuc2F2ZSBhci5wZnMsIHIwCi0JLmFsdHJwIGI2Ci0JLmJvZHkKLQk7OwotKHAxNSkJc3NtIHBzci5pCQkvLyByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXkgd2VyZSBvbgotCQkJCS8vIERhdmlkTSBzYXlzIHRoYXQgc3Jsei5kIGlzIHNsb3cgYW5kIGlzIG5vdCByZXF1aXJlZCBpbiB0aGlzIGNhc2UKLS53YWl0OgotCS8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIGtkYiwgbG9ja21ldGVyIGV0Yy4gZ28gaW4gaGVyZQotCWhpbnQgQHBhdXNlCi0JbGQ0IHIzMD1bcjMxXQkJLy8gZG9uJ3QgdXNlIGxkNC5iaWFzOyBpZiBpdCdzIGNvbnRlbmRlZCwgd2Ugd29uJ3Qgd3JpdGUgdGhlIHdvcmQKLQlub3AgMAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0ocDE0KQlici5jb25kLnNwdGsuZmV3IC53YWl0Ci0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCWJyLmNvbmQuc3B0ay5mZXcgYjYJLy8gbG9jayBpcyBub3cgZnJlZSwgdHJ5IHRvIGFjcXVpcmUKLQkuZ2xvYmFsIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kCS8vIGZvciBrZXJucHJvZgotaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNF9lbmQ6Ci1FTkQoaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNCkKLQotI2Vsc2UKLQotR0xPQkFMX0VOVFJZKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQkucHJvbG9ndWUKLQkuYWx0cnAgYjYKLQkuYm9keQotCXRiaXQubnogcDE1LHAwPXIyNyxJQTY0X1BTUl9JX0JJVAotCTs7Ci0ud2FpdDoKLShwMTUpCXNzbSBwc3IuaQkJLy8gcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGV5IHdlcmUgb24KLQkJCQkvLyBEYXZpZE0gc2F5cyB0aGF0IHNybHouZCBpcyBzbG93IGFuZCBpcyBub3QgcmVxdWlyZWQgaW4gdGhpcyBjYXNlCi0ud2FpdDI6Ci0JLy8gZXhwb25lbnRpYWwgYmFja29mZiwga2RiLCBsb2NrbWV0ZXIgZXRjLiBnbyBpbiBoZXJlCi0JaGludCBAcGF1c2UKLQlsZDQgcjMwPVtyMzFdCQkvLyBkb24ndCB1c2UgbGQ0LmJpYXM7IGlmIGl0J3MgY29udGVuZGVkLCB3ZSB3b24ndCB3cml0ZSB0aGUgd29yZAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0JbW92IHIzMCA9IDEKLShwMTQpCWJyLmNvbmQuc3B0ay5mZXcgLndhaXQyCi0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCTs7Ci0JY21weGNoZzQuYWNxIHIzMD1bcjMxXSwgcjMwLCBhci5jY3YKLQk7OwotCWNtcDQubmUgcDE0LHAwPXIwLHIzMAotKHAxNCkJYnIuY29uZC5zcHRrLmZldyAud2FpdAotCi0JYnIucmV0LnNwdGsubWFueSBiNgkvLyBsb2NrIGlzIG5vdyB0YWtlbgotRU5EKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIEdMT0JBTF9FTlRSWShpYTY0X2p1bXBfdG9fc2FsKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA4ZWJjY2I1Li4xNGQzOWUzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtODQsMjYgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiBFWFBPUlRfU1lNQk9MKHVud19pbml0X3J1bm5pbmcpOwogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAotIyBpZmRlZiBDT05GSUdfU01QCi0jICBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0vKgotICogVGhpcyBpcyBub3QgYSBub3JtYWwgcm91dGluZSBhbmQgd2UgZG9uJ3Qgd2FudCBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgZm9yIGl0LCBzbyB3ZSB1c2UKLSAqIGEgZmFrZSBkZWNsYXJhdGlvbiBoZXJlLgotICovCi1leHRlcm4gY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180OwotRVhQT1JUX1NZTUJPTChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KTsKLSMgIGVsc2UKLS8qCi0gKiBUaGlzIGlzIG5vdCBhIG5vcm1hbCByb3V0aW5lIGFuZCB3ZSBkb24ndCB3YW50IGEgZnVuY3Rpb24gZGVzY3JpcHRvciBmb3IgaXQsIHNvIHdlIHVzZQotICogYSBmYWtlIGRlY2xhcmF0aW9uIGhlcmUuCi0gKi8KLWV4dGVybiBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbjsKLUVYUE9SVF9TWU1CT0woaWE2NF9zcGlubG9ja19jb250ZW50aW9uKTsKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfRVNJKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0VTSV9NT0RVTEUpCiBleHRlcm4gdm9pZCBlc2lfY2FsbF9waHlzICh2b2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGVzaV9jYWxsX3BoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggZDI4NzdhNy4uNDk2YWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC04ODcsNiArODg3LDYwIEBACiAJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zLAorCQl1bnNpZ25lZCBsb25nICpuYXQpCit7CisJY29uc3QgdTY0ICpiYW5rOworCisJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQorCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KKwkgKi8KKwlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX2lwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKKwl9IGVsc2UgeworCQlyZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7CisJCXJlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV94cHNyOworCQlyZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7CisJfQorCXJlZ3MtPnByID0gbXMtPnBtc2FfcHI7CisJcmVncy0+YjAgPSBtcy0+cG1zYV9icjA7CisJcmVncy0+YXJfcnNjID0gbXMtPnBtc2FfcnNjOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI4LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls5LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI5LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTAsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMSwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTUtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE1LCBuYXQpOworCWlmIChpYTY0X3BzcihyZWdzKS0+Ym4pCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKKwllbHNlCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKKwljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE2LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE3LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTcsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxOCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE5LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIwLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjAsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIyLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIzLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjMsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI1LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMxLCBuYXQpOworfQorCiAvKiBPbiBlbnRyeSB0byB0aGlzIHJvdXRpbmUsIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBwZXIgY3B1IHN0YWNrLCBzZWUKICAqIG1jYV9hc20uaC4gIFRoZSBvcmlnaW5hbCBzdGFjayBoYXMgbm90IGJlZW4gdG91Y2hlZCBieSB0aGlzIGV2ZW50LiAgU29tZSBvZgogICogdGhlIG9yaWdpbmFsIHN0YWNrJ3MgcmVnaXN0ZXJzIHdpbGwgYmUgaW4gdGhlIFJCUyBvbiB0aGlzIHN0YWNrLiAgVGhpcyBzdGFjawpAQCAtOTIxLDcgKzk3NSw2IEBACiAJdTY0IHIxMiA9IG1zLT5wbXNhX2dyWzEyLTFdLCByMTMgPSBtcy0+cG1zYV9nclsxMy0xXTsKIAl1NjQgYXJfYnNwc3RvcmUgPSByZWdzLT5hcl9ic3BzdG9yZTsKIAl1NjQgYXJfYnNwID0gcmVncy0+YXJfYnNwc3RvcmUgKyAobG9hZHJzID4+IDE2KTsKLQljb25zdCB1NjQgKmJhbms7CiAJY29uc3QgY2hhciAqbXNnOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTEwMjQsNTQgKzEwNzcsOSBAQAogCXAgPSAoY2hhciAqKXIxMiAtIHNpemVvZigqcmVncyk7CiAJb2xkX3JlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKilwOwogCW1lbWNweShvbGRfcmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7Ci0JLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQotCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KLQkgKi8KLQlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV9paXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKLQl9IGVsc2UgewotCQlvbGRfcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfeGlwOwotCQlvbGRfcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7Ci0JCW9sZF9yZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7Ci0JfQotCW9sZF9yZWdzLT5wciA9IG1zLT5wbXNhX3ByOwotCW9sZF9yZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKIAlvbGRfcmVncy0+bG9hZHJzID0gbG9hZHJzOwotCW9sZF9yZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CiAJb2xkX3VuYXQgPSBvbGRfcmVncy0+YXJfdW5hdDsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnI5LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEwLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjExLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE0LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE1LCAmb2xkX3VuYXQpOwotCWlmIChpYTY0X3BzcihvbGRfcmVncyktPmJuKQotCQliYW5rID0gbXMtPnBtc2FfYmFuazFfZ3I7Ci0JZWxzZQotCQliYW5rID0gbXMtPnBtc2FfYmFuazBfZ3I7Ci0JY29weV9yZWcoJmJhbmtbMTYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjItMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjUtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjUsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzEsICZvbGRfdW5hdCk7CisJZmluaXNoX3B0X3JlZ3Mob2xkX3JlZ3MsIG1zLCAmb2xkX3VuYXQpOwogCiAJLyogTmV4dCBzdGFjayBhIHN0cnVjdCBzd2l0Y2hfc3RhY2suICBtY2FfYXNtLlMgYnVpbHQgYSBwYXJ0aWFsCiAJICogc3dpdGNoX3N0YWNrLCBjb3B5IGl0IGFuZCBmaWxsIGluIHRoZSBibGFua3MgdXNpbmcgcHRfcmVncyBhbmQKQEAgLTExNDEsNiArMTE0OSw4IEBACiBub19tb2Q6CiAJbXByaW50ayhLRVJOX0lORk8gImNwdSAlZCwgJXMgJXMsIG9yaWdpbmFsIHN0YWNrIG5vdCBtb2RpZmllZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdHlwZSwgbXNnKTsKKwlvbGRfdW5hdCA9IHJlZ3MtPmFyX3VuYXQ7CisJZmluaXNoX3B0X3JlZ3MocmVncywgbXMsICZvbGRfdW5hdCk7CiAJcmV0dXJuIHByZXZpb3VzX2N1cnJlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDZkYjA4NTkuLjc3NmRkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNjAsNyArNjAsNiBAQAogICovCiBpbnQgbm9fdW5hbGlnbmVkX3dhcm5pbmc7CiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7Ci1zdGF0aWMgaW50IG5vcHJpbnRfd2FybmluZzsKIAogLyoKICAqIEZvciBNLXVuaXQ6CkBAIC0xMzU3LDkgKzEzNTYsOCBAQAogCQkJLyogd2F0Y2ggZm9yIGNvbW1hbmQgbmFtZXMgY29udGFpbmluZyAlcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogCQl9IGVsc2UgewotCQkJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nICYmICFub3ByaW50X3dhcm5pbmcpIHsKLQkJCQlub3ByaW50X3dhcm5pbmcgPSAxOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCisJCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCiAJCQkJICAgICAgICJ1bmFsaWduZWQgZXhjZXB0aW9uIHdoaWNoIHJlcXVpcmVkXG4iCiAJCQkJICAgICAgICJrZXJuZWwgYXNzaXN0YW5jZSwgd2hpY2ggZGVncmFkZXMgIgogCQkJCSAgICAgICAidGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBmNDI2ZGM3Li5lZTA5ZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0xMDAsMjQgKzEwMCwzNiBAQAogICogdGhpcyBwcmltaXRpdmUgaXQgY2FuIGJlIG1vdmVkIHVwIHRvIGEgc3BpbmFwaG9yZS5oIGhlYWRlci4KICAqLwogc3RydWN0IHNwaW5hcGhvcmUgewotCWF0b21pY190CWN1cjsKKwl1bnNpZ25lZCBsb25nCXRpY2tldDsKKwl1bnNpZ25lZCBsb25nCXNlcnZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCiB7Ci0JYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKKwlzcy0+dGlja2V0ID0gMDsKKwlzcy0+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGFkYjAxNTYuLjVjZGQ3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTMyLDI0ICszMiw2IEBACiAJdTY0ICpwcmV2X3Bmc19sb2M7CS8qIHN0YXRlIGZvciBXQVIgZm9yIG9sZCBzcGlubG9jayBvb2wgY29kZSAqLwogfSBpYTY0X2JhY2t0cmFjZV90OwogCi0jaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQotLyoKLSAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIFBDIGlzIGluIHRoZSBzcGlubG9jayBjb250ZW50aW9uIG91dC1vZi1saW5lIGNvZGUKLSAqIHdpdGggbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgKG9uIG9sZGVyIGNvbXBpbGVycykuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUodW5zaWduZWQgbG9uZyBwYykKLXsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180W10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZFtdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7Ci0JdW5zaWduZWQgbG9uZyBzY19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7Ci0JdW5zaWduZWQgbG9uZyBzY19lbmQgPSAodW5zaWduZWQgbG9uZylpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZDsKLQlyZXR1cm4gKHNjX3N0YXJ0ICYmIHNjX2VuZCAmJiBwYyA+PSBzY19zdGFydCAmJiBwYyA8IHNjX2VuZCk7Ci19Ci0jZWxzZQotLyogTmV3ZXIgc3BpbmxvY2sgY29kZSBkb2VzIGEgcHJvcGVyIGJyLmNhbGwgYW5kIHdvcmtzIGZpbmUgd2l0aCB0aGUgdW53aW5kZXIgKi8KLSNkZWZpbmUgaW5fb2xkX29vbF9zcGlubG9ja19jb2RlKHBjKQkwCi0jZW5kaWYKLQogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIEludGVycnVwdCBWZWN0b3IgVGFibGUgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCBpbl9pdnRfY29kZSh1bnNpZ25lZCBsb25nIHBjKQogewpAQCAtODAsNyArNjIsNyBAQAogCSAqLwogCWlmIChidC0+cHJldl9wZnNfbG9jICYmIGJ0LT5yZWdzICYmIGJ0LT5mcmFtZS5wZnNfbG9jID09IGJ0LT5wcmV2X3Bmc19sb2MpCiAJCWJ0LT5mcmFtZS5wZnNfbG9jID0gJmJ0LT5yZWdzLT5hcl9wZnM7Ci0JYnQtPnByZXZfcGZzX2xvYyA9IChpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUoYnQtPmZyYW1lLmlwKSA/IGJ0LT5mcmFtZS5wZnNfbG9jIDogTlVMTCk7CisJYnQtPnByZXZfcGZzX2xvYyA9IE5VTEw7CiAKIAlyZXR1cm4gdW53X3Vud2luZCgmYnQtPmZyYW1lKSA9PSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQ3Li4zMDhlNjU5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKQEAgLTExOSw3ICsxMTksNiBAQAogICogQWRkaXRpb25hbGx5IG5vdGUgdGhhdCB0aGUgc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgYWxzbyBoYXMgdG8gYmUKICAqIHJlbW92ZWQgZnJvbSBhcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay9odWJkZXYuaAogICovCi1zdGF0aWMgdTggd2FyX2ltcGxlbWVudGVkID0gMDsKIAogc3RhdGljIHM2NCBzbl9kZXZpY2VfZml4dXBfd2FyKHU2NCBuYXNpZCwgdTY0IHdpZGdldCwgaW50IGRldmljZSwKIAkJCSAgICAgICBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX2NvbW1vbiAqY29tbW9uKQpAQCAtMTI4LDExICsxMjcsOCBAQAogCXN0cnVjdCBzbl9mbHVzaF9kZXZpY2Vfd2FyICpkZXZfZW50cnk7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2ID0gezAsMCwwLDB9OwogCi0JaWYgKCF3YXJfaW1wbGVtZW50ZWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUFJPTSB2ZXJzaW9uIDwgNC41MCAtLSBpbXBsZW1lbnRpbmcgb2xkICIKLQkJICAgICAgICJQUk9NIGZsdXNoIFdBUlxuIik7Ci0JCXdhcl9pbXBsZW1lbnRlZCA9IDE7Ci0JfQorCXByaW50a19vbmNlKEtFUk5fV0FSTklORworCQkiUFJPTSB2ZXJzaW9uIDwgNC41MCAtLSBpbXBsZW1lbnRpbmcgb2xkIFBST00gZmx1c2ggV0FSXG4iKTsKIAogCXdhcl9saXN0ID0ga3phbGxvYyhERVZfUEVSX1dJREdFVCAqIHNpemVvZigqd2FyX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAlCVUdfT04oIXdhcl9saXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKaW5kZXggNGM3ZTc0Ny4uNTVhYzNjNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKQEAgLTc4NiwxNyArNzg2LDE4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTl9IV1BFUkZfR0VUX09CSl9OT0RFOgotCQlpZiAoYS5zeiAhPSBzaXplb2YodTY0KSB8fCBhLmFyZyA8IDApIHsKKwkJaSA9IGEuYXJnOworCQlpZiAoYS5zeiAhPSBzaXplb2YodTY0KSB8fCBpIDwgMCkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCWlmICgociA9IHNuX2h3cGVyZl9lbnVtX29iamVjdHMoJm5vYmosICZvYmpzKSkgPT0gMCkgewotCQkJaWYgKGEuYXJnID49IG5vYmopIHsKKwkJCWlmIChpID49IG5vYmopIHsKIAkJCQlyID0gLUVJTlZBTDsKIAkJCQl2ZnJlZShvYmpzKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQotCQkJaWYgKG9ianNbKGkgPSBhLmFyZyldLmlkICE9IGEuYXJnKSB7CisJCQlpZiAob2Jqc1tpXS5pZCAhPSBhLmFyZykgewogCQkJCWZvciAoaSA9IDA7IGkgPCBub2JqOyBpKyspIHsKIAkJCQkJaWYgKG9ianNbaV0uaWQgPT0gYS5hcmcpCiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggYzQxMjM0Zi4uM2E5MzE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTExLDYgKzExLDkgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQorCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCisJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCisJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKIAogY29uZmlnIFNCVVMKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA1NjA0ODRhLi4xNzc3MTZiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTEsMTEgKzEsMTEgQEAKICMKLSMgbGludXgvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKyMgbGludXgvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQogIwogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIwogCi10YXJnZXRzCQk6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IGhlYWQubyBtaXNjLm8gXAotCQkgICBwaWdneS5vIHZtbGludXgubGRzCit0YXJnZXRzCQk6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiBcCisJCSAgIHZtbGludXguYmluLmx6bWEgaGVhZC5vIG1pc2MubyBwaWdneS5vIHZtbGludXgubGRzCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIApAQCAtMjcsNiArMjcsMTIgQEAKICQob2JqKS92bWxpbnV4LmJpbi5nejogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsZ3ppcCkKIAorJChvYmopL3ZtbGludXguYmluLmJ6MjogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCisKKyQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorCiBDRkxBR1NfbWlzYy5vICs9IC1mcGljCiAKIGlmZGVmIENPTkZJR19NTVUKQEAgLTM3LDUgKzQzLDkgQEAKIAogT0JKQ09QWUZMQUdTICs9IC1SIC5lbXB0eV96ZXJvX3BhZ2UKIAotJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uZ3ogRk9SQ0UKK3N1ZmZpeF8kKENPTkZJR19LRVJORUxfR1pJUCkJPSBnegorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9CWklQMikJPSBiejIKK3N1ZmZpeF8kKENPTkZJR19LRVJORUxfTFpNQSkJPSBsem1hCisKKyQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLiQoc3VmZml4LXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGQpCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IGQzOTQyOTIuLjM3MGQ2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC05LDE0MCArOSw0OSBAQAogICogQWRhcHRlZCBmb3IgU0ggYnkgU3R1YXJ0IE1lbmVmeSwgQXVnIDE5OTkKICAqCiAgKiAyMDAzLTAyLTEyOglTdXBwb3J0IE0zMlIgYnkgVGFrZW8gVGFrYWhhc2hpCi0gKiAJCVRoaXMgaXMgYmFzZWQgb24gYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQogLyoKICAqIGd6aXAgZGVjbGFyYXRpb25zCiAgKi8KLQotI2RlZmluZSBPRihhcmdzKSAgYXJncwogI2RlZmluZSBTVEFUSUMgc3RhdGljCiAKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1jcHkKICNkZWZpbmUgbWVtemVybyhzLCBuKSAgICAgbWVtc2V0ICgocyksIDAsIChuKSkKIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwotCi0jZGVmaW5lIFdTSVpFIDB4ODAwMAkJLyogV2luZG93IHNpemUgbXVzdCBiZSBhdCBsZWFzdCAzMmssICovCi0JCQkJLyogYW5kIGEgcG93ZXIgb2YgdHdvICovCi0KLXN0YXRpYyB1Y2ggKmluYnVmOwkgICAgIC8qIGlucHV0IGJ1ZmZlciAqLwotc3RhdGljIHVjaCB3aW5kb3dbV1NJWkVdOyAgICAvKiBTbGlkaW5nIHdpbmRvdyBidWZmZXIgKi8KLQotc3RhdGljIHVuc2lnbmVkIGluc2l6ZSA9IDA7ICAvKiB2YWxpZCBieXRlcyBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIGlucHRyID0gMDsgICAvKiBpbmRleCBvZiBuZXh0IGJ5dGUgdG8gYmUgcHJvY2Vzc2VkIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgb3V0Y250ID0gMDsgIC8qIGJ5dGVzIGluIG91dHB1dCBidWZmZXIgKi8KLQotLyogZ3ppcCBmbGFnIGJ5dGUgKi8KLSNkZWZpbmUgQVNDSUlfRkxBRyAgIDB4MDEgLyogYml0IDAgc2V0OiBmaWxlIHByb2JhYmx5IEFTQ0lJIHRleHQgKi8KLSNkZWZpbmUgQ09OVElOVUFUSU9OIDB4MDIgLyogYml0IDEgc2V0OiBjb250aW51YXRpb24gb2YgbXVsdGktcGFydCBnemlwIGZpbGUgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQgIDB4MDQgLyogYml0IDIgc2V0OiBleHRyYSBmaWVsZCBwcmVzZW50ICovCi0jZGVmaW5lIE9SSUdfTkFNRSAgICAweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KLSNkZWZpbmUgQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBFTkNSWVBURUQgICAgMHgyMCAvKiBiaXQgNSBzZXQ6IGZpbGUgaXMgZW5jcnlwdGVkICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEMwIC8qIGJpdCA2LDc6ICAgcmVzZXJ2ZWQgKi8KLQotI2RlZmluZSBnZXRfYnl0ZSgpICAoaW5wdHIgPCBpbnNpemUgPyBpbmJ1ZltpbnB0cisrXSA6IGZpbGxfaW5idWYoKSkKLQotLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KLSNpZmRlZiBERUJVRwotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIGVycm9yKG1zZyk7fQotIyAgZGVmaW5lIFRyYWNlKHgpIGZwcmludGYgeAotIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHZlcmJvc2UpIGZwcmludGYgeCA7fQotIyAgZGVmaW5lIFRyYWNldnYoeCkge2lmICh2ZXJib3NlPjEpIGZwcmludGYgeCA7fQotIyAgZGVmaW5lIFRyYWNlYyhjLHgpIHtpZiAodmVyYm9zZSAmJiAoYykpIGZwcmludGYgeCA7fQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KSB7aWYgKHZlcmJvc2U+MSAmJiAoYykpIGZwcmludGYgeCA7fQotI2Vsc2UKLSMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpCi0jICBkZWZpbmUgVHJhY2UoeCkKLSMgIGRlZmluZSBUcmFjZXYoeCkKLSMgIGRlZmluZSBUcmFjZXZ2KHgpCi0jICBkZWZpbmUgVHJhY2VjKGMseCkKLSMgIGRlZmluZSBUcmFjZWN2KGMseCkKLSNlbmRpZgotCi1zdGF0aWMgaW50ICBmaWxsX2luYnVmKHZvaWQpOwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpOwogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICppbnB1dF9kYXRhOwotc3RhdGljIGludCBpbnB1dF9sZW47Ci0KLXN0YXRpYyBsb25nIGJ5dGVzX291dCA9IDA7Ci1zdGF0aWMgdWNoICpvdXRwdXRfZGF0YTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG91dHB1dF9wdHIgPSAwOwotCiAjaW5jbHVkZSAibTMycl9zaW8uYyIKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKIAotI2RlZmluZSBIRUFQX1NJWkUgICAgICAgICAgICAgMHgxMDAwMAotCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2luZmxhdGUuYyIKLQotdm9pZCogbWVtc2V0KHZvaWQqIHMsIGludCBjLCBzaXplX3QgbikKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0JaSVAyCitzdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKIHsKLQlpbnQgaTsKLQljaGFyICpzcyA9IChjaGFyKilzOworCWNoYXIgKnNzID0gczsKIAotCWZvciAoaT0wO2k8bjtpKyspIHNzW2ldID0gYzsKKwl3aGlsZSAobi0tKQorCSAgICAgICAJKnNzKysgPSBjOwogCXJldHVybiBzOwogfQorI2VuZGlmCiAKLXZvaWQqIG1lbWNweSh2b2lkKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCogX19zcmMsCi0JCQkgICAgc2l6ZV90IF9fbikKLXsKLQlpbnQgaTsKLQljaGFyICpkID0gKGNoYXIgKilfX2Rlc3QsICpzID0gKGNoYXIgKilfX3NyYzsKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNkZWZpbmUgQk9PVF9IRUFQX1NJWkUgICAgICAgICAgICAgMHgxMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYyIKKyNlbmRpZgogCi0JZm9yIChpPTA7aTxfX247aSsrKSBkW2ldID0gc1tpXTsKLQlyZXR1cm4gX19kZXN0OwotfQorI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNkZWZpbmUgQk9PVF9IRUFQX1NJWkUgICAgICAgICAgICAgMHg0MDAwMDAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBGaWxsIHRoZSBpbnB1dCBidWZmZXIuIFRoaXMgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5Ci0gKiBhbmQgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgcmVhbGx5IG5lZWRlZC4KLSAqLwotc3RhdGljIGludCBmaWxsX2luYnVmKHZvaWQpCi17Ci0JaWYgKGluc2l6ZSAhPSAwKSB7Ci0JCWVycm9yKCJyYW4gb3V0IG9mIGlucHV0IGRhdGEiKTsKLQl9Ci0KLQlpbmJ1ZiA9IGlucHV0X2RhdGE7Ci0JaW5zaXplID0gaW5wdXRfbGVuOwotCWlucHRyID0gMTsKLQlyZXR1cm4gaW5idWZbMF07Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogV3JpdGUgdGhlIG91dHB1dCB3aW5kb3cgd2luZG93WzAuLm91dGNudC0xXSBhbmQgdXBkYXRlIGNyYyBhbmQgYnl0ZXNfb3V0LgotICogKFVzZWQgZm9yIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvbmx5LikKLSAqLwotc3RhdGljIHZvaWQgZmx1c2hfd2luZG93KHZvaWQpCi17Ci0gICAgdWxnIGMgPSBjcmM7ICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICovCi0gICAgdW5zaWduZWQgbjsKLSAgICB1Y2ggKmluLCAqb3V0LCBjaDsKLQotICAgIGluID0gd2luZG93OwotICAgIG91dCA9ICZvdXRwdXRfZGF0YVtvdXRwdXRfcHRyXTsKLSAgICBmb3IgKG4gPSAwOyBuIDwgb3V0Y250OyBuKyspIHsKLQkgICAgY2ggPSAqb3V0KysgPSAqaW4rKzsKLQkgICAgYyA9IGNyY18zMl90YWJbKChpbnQpYyBeIGNoKSAmIDB4ZmZdIF4gKGMgPj4gOCk7Ci0gICAgfQotICAgIGNyYyA9IGM7Ci0gICAgYnl0ZXNfb3V0ICs9ICh1bGcpb3V0Y250OwotICAgIG91dHB1dF9wdHIgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0Y250ID0gMDsKLX0KKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTUEKKyNkZWZpbmUgQk9PVF9IRUFQX1NJWkUgICAgICAgICAgICAgMHgxMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpCiB7CkBAIC0xNTMsMjAgKzYyLDIwIEBACiAJd2hpbGUoMSk7CS8qIEhhbHQgKi8KIH0KIAotLyogcmV0dXJuIGRlY29tcHJlc3NlZCBzaXplICovCiB2b2lkCiBkZWNvbXByZXNzX2tlcm5lbChpbnQgbW11X29uLCB1bnNpZ25lZCBjaGFyICp6aW1hZ2VfZGF0YSwKIAkJICB1bnNpZ25lZCBpbnQgemltYWdlX2xlbiwgdW5zaWduZWQgbG9uZyBoZWFwKQogeworCXVuc2lnbmVkIGNoYXIgKmlucHV0X2RhdGEgPSB6aW1hZ2VfZGF0YTsKKwlpbnQgaW5wdXRfbGVuID0gemltYWdlX2xlbjsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXRfZGF0YTsKKwogCW91dHB1dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilDT05GSUdfTUVNT1JZX1NUQVJUICsgMHgyMDAwCiAJCSsgKG1tdV9vbiA/IDB4ODAwMDAwMDAgOiAwKTsKIAlmcmVlX21lbV9wdHIgPSBoZWFwOwotCWZyZWVfbWVtX2VuZF9wdHIgPSBmcmVlX21lbV9wdHIgKyBIRUFQX1NJWkU7Ci0JaW5wdXRfZGF0YSA9IHppbWFnZV9kYXRhOwotCWlucHV0X2xlbiA9IHppbWFnZV9sZW47CisJZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEJPT1RfSEVBUF9TSVpFOwogCi0JbWFrZWNyYygpOwotCXB1dHMoIlVuY29tcHJlc3NpbmcgTGludXguLi4gIik7Ci0JZ3VuemlwKCk7Ci0JcHV0cygiT2ssIGJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOworCXB1dHMoIlxuRGVjb21wcmVzc2luZyBMaW51eC4uLiAiKTsKKwlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2xlbiwgTlVMTCwgTlVMTCwgb3V0cHV0X2RhdGEsIE5VTEwsIGVycm9yKTsKKwlwdXRzKCJkb25lLlxuQm9vdGluZyB0aGUga2VybmVsLlxuIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGQwNjkzM2IuLjQwMTBmMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCkBAIC0xNjIsNiArMTYyLDEzIEBACiAjZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAogCisjZGVmaW5lIGlvcmVhZDggcmVhZAorI2RlZmluZSBpb3JlYWQxNiByZWFkdworI2RlZmluZSBpb3JlYWQzMiByZWFkbAorI2RlZmluZSBpb3dyaXRlOCB3cml0ZWIKKyNkZWZpbmUgaW93cml0ZTE2IHdyaXRldworI2RlZmluZSBpb3dyaXRlMzIgd3JpdGVsCisKICNkZWZpbmUgbW1pb3diKCkKIAogI2RlZmluZSBmbHVzaF93cml0ZV9idWZmZXJzKCkgZG8geyB9IHdoaWxlICgwKSAgLyogTTMyUl9GSVhNRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMTE3NzdmNy4uNzI1ZWRlOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xLDkgKzEsMTEgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1BBR0VfSAogI2RlZmluZSBfQVNNX00zMlJfUEFHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfU0laRQkoX0FDKDEsIFVMKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDFhOTk3ZmMuLjgzOTdjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE0MCw4ICsxNDAsNiBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5scikKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQuc3ApCiAKLSNkZWZpbmUgVEhSRUFEX1NJWkUgKDIqUEFHRV9TSVpFKQotCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCiAjZW5kaWYgLyogX0FTTV9NMzJSX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDcxNTc4MTUuLmVkMjQwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC01NSw2ICs1NSw4IEBACiAKICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4MTAwMDAwMDAKIAorI2RlZmluZSBUSFJFQURfU0laRSAoUEFHRV9TSVpFIDw8IDEpCisKIC8qCiAgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogICovCkBAIC03Niw4ICs3OCw2IEBACiAjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQogI2RlZmluZSBpbml0X3N0YWNrCQkoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCiAKLSNkZWZpbmUgVEhSRUFEX1NJWkUgKDIqUEFHRV9TSVpFKQotCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKIHsKQEAgLTEyNSwxNyArMTI1LDYgQEAKIAlyZXR1cm4gdGktPmZsYWdzID4+IFRJX0ZMQUdfRkFVTFRfQ09ERV9TSElGVDsKIH0KIAotI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFRIUkVBRF9TSVpFCTgxOTIKLQotLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEFTTSAqLwotI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKQlHRVRfVEhSRUFEX0lORk8gcmVnCi0JLm1hY3JvIEdFVF9USFJFQURfSU5GTyByZWcKLQlsZGkJXHJlZywgIy1USFJFQURfU0laRQotCWFuZAlccmVnLCBzcAotCS5lbmRtCi0KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDYxMmQzNWIuLjQwMzg2OTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKQEAgLTExOCw2ICsxMTgsMTMgQEAKICNkZWZpbmUgcmVzdW1lX2tlcm5lbAkJcmVzdG9yZV9hbGwKICNlbmRpZgogCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCisjZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpCUdFVF9USFJFQURfSU5GTyByZWcKKwkubWFjcm8gR0VUX1RIUkVBRF9JTkZPIHJlZworCWxkaQlccmVnLCAjLVRIUkVBRF9TSVpFCisJYW5kCVxyZWcsIHNwCisJLmVuZG0KKwogRU5UUlkocmV0X2Zyb21fZm9yaykKIAlwb3AJcjAKIAlibAlzY2hlZHVsZV90YWlsCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2hlYWQuUyBiL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCmluZGV4IDBhNzE5NDQuLmE0NjY1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCkBAIC0yNjgsMTMgKzI2OCwxMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0YWNrIGFyZWEKICAqLwotCS5zZWN0aW9uIC5zcGkKKwkuc2VjdGlvbiAuaW5pdC5kYXRhLCAiYXciCiAJQUxJR04KIAkuZ2xvYmFsIHNwaV9zdGFja190b3AKIAkuemVybwkxMDI0CiBzcGlfc3RhY2tfdG9wOgogCi0JLnNlY3Rpb24gLnNwdQorCS5zZWN0aW9uIC5pbml0LmRhdGEsICJhdyIKIAlBTElHTgogCS5nbG9iYWwgc3B1X3N0YWNrX3RvcAogCS56ZXJvCTEwMjQKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKaW5kZXggMjI2MjRiNS4uNzAwNTcwNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMKQEAgLTIzLDEyICsyMyw2IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIAotLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCi0vKiBEZWxheSBsb29wcyAqLwotRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKF9fZGVsYXkpOwotRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7Ci0KIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcik7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NtcC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwppbmRleCAxYjc1OThlLi4zMWNlZjIwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtODA1LDcgKzgwNiw3IEBACiAKIAlpZiAobWFzayAmIH5waHlzaWRzX2NvZXJjZShwaHlzX2NwdV9wcmVzZW50X21hcCkpCiAJCUJVRygpOwotCWlmIChpcGlfbnVtID49IE5SX0lQSVMpCisJaWYgKGlwaV9udW0gPj0gTlJfSVBJUyB8fCBpcGlfbnVtIDwgMCkKIAkJQlVHKCk7CiAKIAltYXNrIDw8PSBJUElfU0hJRlQ7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IGJhNjFjNGMuLjljZWRjZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCkBAIC0zMyw2ICszMywxNSBAQAogCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQorLyogdGhpcyBuZWVkcyBhIGJldHRlciBob21lICovCitERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOworCisjaWZkZWYgQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUKK0VYUE9SVF9TWU1CT0wocnRjX2xvY2spOworI2VuZGlmCisjZW5kaWYgIC8qIHBjLXN0eWxlICdDTU9TJyBSVEMgc3VwcG9ydCAqLworCiAjaWZkZWYgQ09ORklHX1NNUAogZXh0ZXJuIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKICNlbmRpZgpAQCAtNjYsNyArNzUsNyBAQAogCQljb3VudCA9IDA7CiAKIAljb3VudCA9IChsYXRjaCAtIGNvdW50KSAqIFRJQ0tfU0laRTsKLQllbGFwc2VkX3RpbWUgPSAoY291bnQgKyBsYXRjaCAvIDIpIC8gbGF0Y2g7CisJZWxhcHNlZF90aW1lID0gRElWX1JPVU5EX0NMT1NFU1QoY291bnQsIGxhdGNoKTsKIAkvKiBOT1RFOiBMQVRDSCBpcyBlcXVhbCB0byB0aGUgImludGVydmFsIiB2YWx1ZSAoPSByZWxvYWQgY291bnQpLiAqLwogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCkBAIC04NCw3ICs5Myw3IEBACiAJcF9jb3VudCA9IGNvdW50OwogCiAJY291bnQgPSAobGF0Y2ggLSBjb3VudCkgKiBUSUNLX1NJWkU7Ci0JZWxhcHNlZF90aW1lID0gKGNvdW50ICsgbGF0Y2ggLyAyKSAvIGxhdGNoOworCWVsYXBzZWRfdGltZSA9IERJVl9ST1VORF9DTE9TRVNUKGNvdW50LCBsYXRjaCk7CiAJLyogTk9URTogTEFUQ0ggaXMgZXF1YWwgdG8gdGhlICJpbnRlcnZhbCIgdmFsdWUgKD0gcmVsb2FkIGNvdW50KS4gKi8KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjMxMCkKQEAgLTIwMiw3ICsyMTEsNyBAQAogCiAJCWJ1c19jbG9jayA9IGJvb3RfY3B1X2RhdGEuYnVzX2Nsb2NrOwogCQlkaXZpZGUgPSBib290X2NwdV9kYXRhLnRpbWVyX2RpdmlkZTsKLQkJbGF0Y2ggPSAoYnVzX2Nsb2NrL2RpdmlkZSArIEhaIC8gMikgLyBIWjsKKwkJbGF0Y2ggPSBESVZfUk9VTkRfQ0xPU0VTVChidXNfY2xvY2svZGl2aWRlLCBIWik7CiAKIAkJcHJpbnRrKCJUaW1lciBzdGFydCA6IGxhdGNoID0gJWxkXG4iLCBsYXRjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYwppbmRleCAwM2IxNGU1Li5mYmQxMDkwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCkBAIC0xMDQsOCArMTA0LDggQEAKIAllaXRfdmVjdG9yWzE4Nl0gPSAodW5zaWduZWQgbG9uZylzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQ7CiAJZWl0X3ZlY3RvclsxODddID0gKHVuc2lnbmVkIGxvbmcpc21wX2lwaV90aW1lcl9pbnRlcnJ1cHQ7CiAJZWl0X3ZlY3RvclsxODhdID0gKHVuc2lnbmVkIGxvbmcpc21wX2ZsdXNoX2NhY2hlX2FsbF9pbnRlcnJ1cHQ7Ci0JZWl0X3ZlY3RvclsxODldID0gKHVuc2lnbmVkIGxvbmcpc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdDsKLQllaXRfdmVjdG9yWzE5MF0gPSAwOworCWVpdF92ZWN0b3JbMTg5XSA9IDA7CS8qIENQVV9CT09UX0lQSSAqLworCWVpdF92ZWN0b3JbMTkwXSA9ICh1bnNpZ25lZCBsb25nKXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQ7CiAJZWl0X3ZlY3RvclsxOTFdID0gMDsKICNlbmRpZgogCV9mbHVzaF9jYWNoZV9jb3B5YmFja19hbGwoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBkZTVlMjFjLi43ZGE5NGVhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAKIE9VVFBVVF9BUkNIKG0zMnIpCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKQEAgLTQwLDgzICs0MSwyNCBAQAogI2VuZGlmCiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKyAgRVhDRVBUSU9OX1RBQkxFKDE2KQorICBOT1RFUwogCiAgIFJPREFUQQotCi0gIC8qIHdyaXRlYWJsZSAqLwotICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCi0JKiguc3B1KQotCSooLnNwaSkKLQlEQVRBX0RBVEEKLQlDT05TVFJVQ1RPUlMKLQl9Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX25vc2F2ZV9iZWdpbiA9IC47Ci0gIC5kYXRhX25vc2F2ZSA6IHsgKiguZGF0YS5ub3NhdmUpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX25vc2F2ZV9lbmQgPSAuOwotCi0gIC4gPSBBTElHTigzMik7Ci0gIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9Ci0KKyAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAotICAuID0gQUxJR04oODE5Mik7CQkvKiBpbml0X3Rhc2sgKi8KLSAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQotCiAgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLwotICAuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQotICAuaW5pdC5kYXRhIDogeyBJTklUX0RBVEEgfQotICAuID0gQUxJR04oMTYpOwotICBfX3NldHVwX3N0YXJ0ID0gLjsKLSAgLmluaXQuc2V0dXAgOiB7ICooLmluaXQuc2V0dXApIH0KLSAgX19zZXR1cF9lbmQgPSAuOwotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmluaXRjYWxsLmluaXQgOiB7Ci0JSU5JVENBTExTCi0gIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5jb25faW5pdGNhbGwuaW5pdCA6IHsgKiguY29uX2luaXRjYWxsLmluaXQpIH0KLSAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKLSAgU0VDVVJJVFlfSU5JVAotICAuID0gQUxJR04oNCk7Ci0gIF9fYWx0X2luc3RydWN0aW9ucyA9IC47Ci0gIC5hbHRpbnN0cnVjdGlvbnMgOiB7ICooLmFsdGluc3RydWN0aW9ucykgfQotICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKLSAgLmFsdGluc3RyX3JlcGxhY2VtZW50IDogeyAqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkgfQotICAvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwgdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMKLSAgICAgZnJvbSAuYWx0aW5zdHJ1Y3Rpb25zIGFuZCAuZWhfZnJhbWUgKi8KLSAgLmV4aXQudGV4dCA6IHsgRVhJVF9URVhUIH0KLSAgLmV4aXQuZGF0YSA6IHsgRVhJVF9EQVRBIH0KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgLmluaXQucmFtZnMgOiB7ICooLmluaXQucmFtZnMpIH0KLSAgX19pbml0cmFtZnNfZW5kID0gLjsKLSNlbmRpZgotCi0gIFBFUkNQVSg0MDk2KQotICAuID0gQUxJR04oNDA5Nik7CisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKyAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCisgIFBFUkNQVShQQUdFX1NJWkUpCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2luaXRfZW5kID0gLjsKICAgLyogZnJlZWQgYWZ0ZXIgaW5pdCBlbmRzIGhlcmUgKi8KIAotICBfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MgKi8KLSAgLmJzcyA6IHsgKiguYnNzKSB9Ci0gIC4gPSBBTElHTig0KTsKLSAgX19ic3Nfc3RvcCA9IC47CisgIEJTU19TRUNUSU9OKDAsIDAsIDQpCiAKICAgX2VuZCA9IC4gOwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL2RlbGF5LmMgYi9hcmNoL20zMnIvbGliL2RlbGF5LmMKaW5kZXggY2VkNTQ5Yi4uOTQwZjQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvbTMyci9saWIvZGVsYXkuYwpAQCAtMTIyLDQgKzEyMiw4IEBACiB7CiAJX19jb25zdF91ZGVsYXkobnNlY3MgKiAweDAwMDA1KTsgIC8qIDIqKjMyIC8gMTAwMDAwMDAwMCAocm91bmRlZCB1cCkgKi8KIH0KKworRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKK0VYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOworRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fbmRlbGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYyBiL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYwppbmRleCBiN2E3OGFkLi41ZDI4NThmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCkBAIC0zMiw2ICszMiw5IEBACiB9IG1lbV9wcm9mX3Q7CiBzdGF0aWMgbWVtX3Byb2ZfdCBtZW1fcHJvZltNQVhfTlVNTk9ERVNdOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOworCiBzdGF0aWMgdm9pZCBfX2luaXQgbWVtX3Byb2ZfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBob2xlcywgZnJlZV9wZm47CkBAIC00Miw3ICs0NSw3IEBACiAJLyogTm9kZSMwIFNEUkFNICovCiAJbXAgPSAmbWVtX3Byb2ZbMF07CiAJbXAtPnN0YXJ0X3BmbiA9IFBGTl9VUChDT05GSUdfTUVNT1JZX1NUQVJUKTsKLQltcC0+cGFnZXMgPSBQRk5fRE9XTihDT05GSUdfTUVNT1JZX1NJWkUpOworCW1wLT5wYWdlcyA9IFBGTl9ET1dOKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOwogCW1wLT5ob2xlcyA9IDA7CiAJbXAtPmZyZWVfcGZuID0gUEZOX1VQKF9fcGEoX2VuZCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vbW11LlMgYi9hcmNoL20zMnIvbW0vbW11LlMKaW5kZXggNDlhNmQxNi4uZTk0OTFhNSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL21tdS5TCisrKyBiL2FyY2gvbTMyci9tbS9tbXUuUwpAQCAtMTUwLDkgKzE1MCwxMyBAQAogCiAJOyBwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJbGQJcjMsIEByMwkJCTsgcjM6IHBtZCBkYXRhCi0JbGRpCXIyLCAjLTQwOTYKIAliZXF6CXIzLCAzZgkJCTsgcG1kX25vbmUoKnBtZCkgPwogCisJYW5kMwlyMiwgcjMsICMweGZmZgorCWFkZDMJcjIsIHIyLCAjLTM1NQkJOyBfS0VSTlBHX1RBQkxFKD0weDE2MykKKwlibmV6CXIyLCAzZgkJCTsgcG1kX2JhZCgqcG1kKSA/CisJbGRpCXIyLCAjLTQwOTYKKwogCTsgcHRlID0gcHRlX29mZnNldChwbWQsIGFkZHJlc3MpOwogCWFuZAlyMiwgcjMJCQk7IHIyOiBwdGUgYmFzZSBhZGRyCiAJc3JsMwlyMywgcjAsICMxMApAQCAtMjYzLDkgKzI2Nyw5IEBACiAJbGQJcjEsIEByMwkJCTsgcjE6IHBtZAogCWJlcXoJcjEsIDNmCQkJOyBwbWRfbm9uZSgqcG1kKSA/CiA7Ci0JYW5kMwlyMSwgcjEsICMweGVmZgotCWxkaQlyNCwgIzYxMQkJOyBfS0VSTlBHX1RBQkxFKD02MTEpCi0JYm5lCXIxLCByNCwgM2YJCTsgIXBtZF9iYWQoKnBtZCkgPworCWFuZDMJcjEsIHIxLCAjMHgzZmYKKwlsZGkJcjQsICMweDE2MwkJOyBfS0VSTlBHX1RBQkxFKD0weDE2MykKKwlibmUJcjEsIHI0LCAzZgkJOyBwbWRfYmFkKCpwbWQpID8KIAogCS5maWxsaW5zbgogNDoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggMjlkZDg0OC4uZWNkYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTU2MSw3ICs1NjEsNyBAQAogCiBjb25maWcgTVZNRTE0N19TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE0NyBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBNVk1FMTQ3CisJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE0NwogCSAgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KQEAgLTU3NiwxNCArNTc2LDE0IEBACiAKIGNvbmZpZyBNVk1FMTYyX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTYyIHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNngKKwlkZXBlbmRzIG9uIE1WTUUxNnggJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTYyIGFuZAogCSAgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBCVk1FNjAwMF9TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgQlZNRTYwMDAgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gQlZNRTYwMDAKKwlkZXBlbmRzIG9uIEJWTUU2MDAwICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgQlZNRTQwMDAgYW5kIEJWTUU2MDAwCiAJICBib2FyZHMgZnJvbSBCVk0gTHRkLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaAppbmRleCA1NTRmNjViLi4zOTRlZTk0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKQEAgLTEsOCArMSwxNiBAQAogI2lmbmRlZiBfX002OEtfSEFSRElSUV9ICiAjZGVmaW5lIF9fTTY4S19IQVJESVJRX0gKIAotI2RlZmluZSBIQVJESVJRX0JJVFMJOAorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisKKyNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDU5NGVlMGUuLjlhODg3NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00NSwyNSArNDUsMjUgQEAKIAlERUZJTkUoVEhSRUFEX0ZQU1RBVEUsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmcHN0YXRlKSk7CiAKIAkvKiBvZmZzZXRzIGludG8gdGhlIHB0X3JlZ3MgKi8KLQlERUZJTkUoUFRfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMCkpOwotCURFRklORShQVF9PUklHX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgb3JpZ19kMCkpOwotCURFRklORShQVF9EMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSk7Ci0JREVGSU5FKFBUX0QyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDIpKTsKLQlERUZJTkUoUFRfRDMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMykpOwotCURFRklORShQVF9ENCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ0KSk7Ci0JREVGSU5FKFBUX0Q1LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDUpKTsKLQlERUZJTkUoUFRfQTAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMCkpOwotCURFRklORShQVF9BMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGExKSk7Ci0JREVGSU5FKFBUX0EyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTIpKTsKLQlERUZJTkUoUFRfUEMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOwotCURFRklORShQVF9TUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSk7CisJREVGSU5FKFBUX09GRl9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7CisJREVGSU5FKFBUX09GRl9PUklHX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgb3JpZ19kMCkpOworCURFRklORShQVF9PRkZfRDEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMSkpOworCURFRklORShQVF9PRkZfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOworCURFRklORShQVF9PRkZfRDMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMykpOworCURFRklORShQVF9PRkZfRDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNCkpOworCURFRklORShQVF9PRkZfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOworCURFRklORShQVF9PRkZfQTAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMCkpOworCURFRklORShQVF9PRkZfQTEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMSkpOworCURFRklORShQVF9PRkZfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOworCURFRklORShQVF9PRkZfUEMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOworCURFRklORShQVF9PRkZfU1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikpOwogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCiAJLyogYml0ZmllbGRzIGFyZSBhIGJpdCBkaWZmaWN1bHQgKi8KLQlERUZJTkUoUFRfRk9STUFUVkVDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpIC0gMik7CisJREVGSU5FKFBUX09GRl9GT1JNQVRWRUMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikgLSAyKTsKICNlbHNlCiAJLyogYml0ZmllbGRzIGFyZSBhIGJpdCBkaWZmaWN1bHQgKi8KLQlERUZJTkUoUFRfVkVDVE9SLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpICsgNCk7CisJREVGSU5FKFBUX09GRl9WRUNUT1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0KTsKICNlbmRpZgogCiAJLyogc2lnbmFsIGRlZmluZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMKaW5kZXggZjU2ZmFhNS4uNTYwNDNhZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMKQEAgLTQ2LDcgKzQ2LDcgQEAKIEVOVFJZKGJ1c2VycikKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCW1vdmVsCSVzcCwlc3BALSAJCS8qIHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQgKi8KIAlqc3IJYnVzZXJyX2MKIAlhZGRxbAkjNCwlc3AKQEAgLTU1LDcgKzU1LDcgQEAKIEVOVFJZKHRyYXApCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAltb3ZlbAklc3AsJXNwQC0gCQkvKiBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50ICovCiAJanNyCXRyYXBfYwogCWFkZHFsCSM0LCVzcApAQCAtNjcsNyArNjcsNyBAQAogRU5UUlkoZGJnaW50ZXJydXB0KQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAJbW92ZWwJJXNwLCVzcEAtIAkJLyogc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudCAqLwogCWpzcglkYmdpbnRlcnJ1cHRfYwogCWFkZHFsCSM0LCVzcApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCmluZGV4IGIxNzAzYzYuLmYzMjM2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L21tL2luaXQuYworKysgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQl0b3RhbHJhbV9wYWdlcysrOwogCQlwYWdlcysrOwogCX0KLQlwcmludGsgKEtFUk5fTk9USUNFICJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVkayBmcmVlZFxuIiwgcGFnZXMpOworCXByaW50ayAoS0VSTl9OT1RJQ0UgIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWRrIGZyZWVkXG4iLCBwYWdlcyAqIChQQUdFX1NJWkUgLyAxMDI0KSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYwppbmRleCAwZjQxYmE4Li45NDIzOTc5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KICNpbmNsdWRlIDxhc20vbWNmdWFydC5oPgogI2luY2x1ZGUgPGFzbS9tY2ZkbWEuaD4KLSNpbmNsdWRlIDxhc20vbWNmdWFydC5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUwppbmRleCBiMWFlZjcyLi45ZDgwZDJjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKQEAgLTM5LDE3ICszOSwxNyBAQAogLmdsb2JsIGludGhhbmRsZXI3CiAKIGJhZHN5czoKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKQogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fdHJhY2U6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkJLyogbmVlZGVkIGZvciBzdHJhY2UqLworCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKQkvKiBuZWVkZWQgZm9yIHN0cmFjZSovCiAJc3VicWwJIzQsJXNwCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKIAlSRVNUT1JFX1NXSVRDSF9TVEFDSwogCWFkZHFsCSM0LCVzcAotCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQxCisJbW92ZWwJJXNwQChQVF9PRkZfT1JJR19EMCksJWQxCiAJbW92ZWwJIy1FTk9TWVMsJWQwCiAJY21wbAkjTlJfc3lzY2FsbHMsJWQxCiAJamNjCTFmCkBAIC01Nyw3ICs1Nyw3IEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCAlYTAKIAlqYnNyCSVhMEAoJWQxKQogCi0xOgltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworMToJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJc3VicWwJIzQsJXNwCQkJLyogZHVtbXkgcmV0dXJuIGFkZHJlc3MgKi8KIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtNzUsNyArNzUsNyBAQAogCWpic3IgICAgc2V0X2VzcDAKIAlhZGRxbCAgICM0LCVzcAogCi0JbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDAKKwltb3ZlbAklc3BAKFBUX09GRl9PUklHX0QwKSwlZDAKIAogCW1vdmVsCSVzcCwlZDEJCQkvKiBnZXQgdGhyZWFkX2luZm8gcG9pbnRlciAqLwogCWFuZGwJIy1USFJFQURfU0laRSwlZDEKQEAgLTg4LDEwICs4OCwxMCBAQAogCWxlYQlzeXNfY2FsbF90YWJsZSwlYTAKIAltb3ZlbAklYTBAKCVkMCksICVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLwogCiByZXRfZnJvbV9leGNlcHRpb246Ci0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCisJYnRzdAkjNSwlc3BAKFBUX09GRl9TUikJCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwqLwogCWplcQlMdXNlcl9yZXR1cm4JCS8qIGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMqLwogCiBMa2VybmVsX3JldHVybjoKQEAgLTEzMyw3ICsxMzMsNyBAQAogICovCiBpbnRoYW5kbGVyMToKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE0NCw3ICsxNDQsNyBAQAogCiBpbnRoYW5kbGVyMjoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE1NSw3ICsxNTUsNyBAQAogCiBpbnRoYW5kbGVyMzoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBpbnRoYW5kbGVyNDoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiBpbnRoYW5kbGVyNToKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE4OCw3ICsxODgsNyBAQAogCiBpbnRoYW5kbGVyNjoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTE5OSw3ICsxOTksNyBAQAogCiBpbnRoYW5kbGVyNzoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTIxMCw3ICsyMTAsNyBAQAogCiBpbnRoYW5kbGVyOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMjI0LDcgKzIyNCw3IEBACiAyOgogCVJFU1RPUkVfQUxMCiAxOgotCW1vdmViCSVzcEAoUFRfU1IpLCAlZDAKKwltb3ZlYgklc3BAKFBUX09GRl9TUiksICVkMAogCWFuZAkjNywgJWQwCiAJamhpCTJiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCmluZGV4IDU1ZGZlZmUuLjZkMzQ2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUwpAQCAtMzUsMTcgKzM1LDE3IEBACiAuZ2xvYmwgaW50aGFuZGxlcgogCiBiYWRzeXM6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkKKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX09GRl9EMCkKIAlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGRvX3RyYWNlOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCS8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX09GRl9EMCkgLyogbmVlZGVkIGZvciBzdHJhY2UqLwogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCiAJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKIAlhZGRxbAkjNCwlc3AKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMQorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMQogCW1vdmVsCSMtRU5PU1lTLCVkMAogCWNtcGwJI05SX3N5c2NhbGxzLCVkMQogCWpjYwkxZgpAQCAtNTMsNyArNTMsNyBAQAogCWxlYQlzeXNfY2FsbF90YWJsZSwgJWEwCiAJamJzcgklYTBAKCVkMSkKIAotMToJbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKzE6CW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJc3VicWwJIzQsJXNwCQkJLyogZHVtbXkgcmV0dXJuIGFkZHJlc3MgKi8KIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtNzksMTAgKzc5LDEwIEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCVhMAogCW1vdmVsCSVhMEAoJWQwKSwgJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlKi8KIAogcmV0X2Zyb21fZXhjZXB0aW9uOgotCWJ0c3QJIzUsJXNwQChQVF9TUikJCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwqLworCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwqLwogCWplcQlMdXNlcl9yZXR1cm4JCS8qIGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMqLwogCiBMa2VybmVsX3JldHVybjoKQEAgLTEyNCw3ICsxMjQsNyBAQAogICovCiBpbnRoYW5kbGVyOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQubAkjMHgzZmYsICVkMAogCWxzci5sICAgIzB4MDIsICAlZDAKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAyOgogCVJFU1RPUkVfQUxMCiAxOgotCW1vdmViCSVzcEAoUFRfU1IpLCAlZDAKKwltb3ZlYgklc3BAKFBUX09GRl9TUiksICVkMAogCWFuZAkjNywgJWQwCiAJamhpCTJiCiAJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwppbmRleCAzYjQ3MWMwLi5kZDdkNTkxIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKQEAgLTgxLDExICs4MSwxMSBAQAogCiAJbW92ZWwJJWQzLCVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCiAxOgotCW1vdmVsCSMtRU5PU1lTLCVkMgkJLyogc3RyYWNlIG5lZWRzIC1FTk9TWVMgaW4gUFRfRDAgKi8KLQltb3ZlbAklZDIsUFRfRDAoJXNwKQkJLyogb24gc3lzY2FsbCBlbnRyeSAqLworCW1vdmVsCSMtRU5PU1lTLCVkMgkJLyogc3RyYWNlIG5lZWRzIC1FTk9TWVMgaW4gUFRfT0ZGX0QwICovCisJbW92ZWwJJWQyLFBUX09GRl9EMCglc3ApCS8qIG9uIHN5c2NhbGwgZW50cnkgKi8KIAlzdWJxbAkjNCwlc3AKIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtOTMsNyArOTMsNyBAQAogCWFkZHFsCSM0LCVzcAogCW1vdmVsCSVkMywlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCXN1YnFsCSM0LCVzcAkJCS8qIGR1bW15IHJldHVybiBhZGRyZXNzICovCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiByZXRfZnJvbV9leGNlcHRpb246CiAJbW92ZQkjMHgyNzAwLCVzcgkJLyogZGlzYWJsZSBpbnRycyAqLwotCWJ0c3QJIzUsJXNwQChQVF9TUikJCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwgKi8KKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsICovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyAqLwogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKQEAgLTE0Miw4ICsxNDIsOCBAQAogTHJldHVybjoKIAltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCiAJbW92ZWwJc3dfdXNwLCVhMAkJLyogZ2V0IHVzcCAqLwotCW1vdmVsCSVzcEAoUFRfUEMpLCVhMEAtCS8qIGNvcHkgZXhjZXB0aW9uIHByb2dyYW0gY291bnRlciAqLwotCW1vdmVsCSVzcEAoUFRfRk9STUFUVkVDKSwlYTBALS8qIGNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KKwltb3ZlbAklc3BAKFBUX09GRl9QQyksJWEwQC0JLyogY29weSBleGNlcHRpb24gcHJvZ3JhbSBjb3VudGVyICovCisJbW92ZWwJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlYTBALSAvKiBjb3B5IGV4Y2VwdGlvbiBmb3JtYXQvdmVjdG9yL3NyICovCiAJbW92ZW1sCSVzcEAsJWQxLSVkNS8lYTAtJWEyCiAJbGVhCSVzcEAoMzIpLCVzcAkJLyogc3BhY2UgZm9yIDggcmVncyAqLwogCW1vdmVsCSVzcEArLCVkMApAQCAtMTgxLDkgKzE4MSw5IEBACiBFTlRSWShpbnRoYW5kbGVyKQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAKLQltb3Zldwklc3BAKFBUX0ZPUk1BVFZFQyksJWQwCS8qIHB1dCBleGNlcHRpb24gIyBpbiBkMCAqLworCW1vdmV3CSVzcEAoUFRfT0ZGX0ZPUk1BVFZFQyksJWQwIC8qIHB1dCBleGNlcHRpb24gIyBpbiBkMCAqLwogCWFuZGwJIzB4MDNmYywlZDAJCS8qIG1hc2sgb3V0IHZlY3RvciBvbmx5ICovCiAKIAltb3ZlbAklc3AsJXNwQC0JCS8qIHB1c2ggcmVncyBhcmcgKi8KQEAgLTIwMyw3ICsyMDMsNyBAQAogRU5UUlkoZmFzdGhhbmRsZXIpCiAJU0FWRV9MT0NBTAogCi0JbW92ZXcJJXNwQChQVF9GT1JNQVRWRUMpLCVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX0ZPUk1BVFZFQyksJWQwCiAJYW5kbAkjMHgwM2ZjLCVkMAkJLyogbWFzayBvdXQgdmVjdG9yIG9ubHkgKi8KIAogCW1vdmVsCSVzcCwlc3BALQkJLyogcHVzaCByZWdzIGFyZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCmluZGV4IGFjYzFmMDUuLmUzZWNiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKQEAgLTU5Miw2ICs1OTIsOCBAQAogCW5vcAogCW1mcwlyNywgcmZzcjsJCS8qIHNhdmUgRlNSICovCiAJbm9wCisJbXRzCXJmc3IsIHIwOwkvKiBDbGVhciBzdGlja3kgZnNyICovCisJbm9wCiAJbGEJcjEyLCByMCwgZnVsbF9leGNlcHRpb24KIAlzZXRfdm1zOwogCXJ0YmQJcjEyLCAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDZiMDI4OGUuLjJiODZjMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTM4NCw3ICszODQsNyBAQAogCWFkZGsJcjgsIHIxNywgcjA7IC8qIExvYWQgZXhjZXB0aW9uIGFkZHJlc3MgKi8KIAlicmFsaWQJcjE1LCBmdWxsX2V4Y2VwdGlvbjsgLyogQnJhbmNoIHRvIHRoZSBoYW5kbGVyICovCiAJbm9wOwotCW10cwlyMCwgcmZzcjsJLyogQ2xlYXIgc3RpY2t5IGZzciAqLworCW10cwlyZnNyLCByMDsJLyogQ2xlYXIgc3RpY2t5IGZzciAqLwogCW5vcAogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDIwMWM3NDMuLmM1OTJkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMzUsNyArMjM1LDkgQEAKIAlyZWdzLT5wYyA9IHBjOwogCXJlZ3MtPnIxID0gdXNwOwogCXJlZ3MtPnB0X21vZGUgPSAwOworI2lmZGVmIENPTkZJR19NTVUKIAlyZWdzLT5tc3IgfD0gTVNSX1VNUzsKKyNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA3MDVhN2E5Li4xYWFkMGQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBNSVBTCiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKQEAgLTEwMTIsOSArMTAxMyw5IEBACiAKIGNvbmZpZyBNSVBTX0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OIHx8IE1JS1JPVElLX1JCNTMyCisJZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OIHx8IE1JS1JPVElLX1JCNTMyIHx8IFBNQ19NU1A0MjAwX0VWQUwKKwlkZWZhdWx0ICI2IiBpZiBNSVBTX0NQVV9TQ0FDSEUKIAlkZWZhdWx0ICI3IiBpZiBTR0lfSVAyMiB8fCBTR0lfSVAyNyB8fCBTR0lfSVAyOCB8fCBTTklfUk0gfHwgQ1BVX0NBVklVTV9PQ1RFT04KLQlkZWZhdWx0ICI0IiBpZiBQTUNfTVNQNDIwMF9FVkFMCiAJZGVmYXVsdCAiNSIKIAogY29uZmlnIEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IDNhYjZkODAuLjE5YzFjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICNkZWZpbmUgREJERVZfVEFCX1NJWkUJQVJSQVlfU0laRShkYmRldl90YWIpCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1MzIgYXUxeHh4X2RiZG1hX3BtX3JlZ3NbTlVNX0RCRE1BX0NIQU5TICsgMV1bOF07CitzdGF0aWMgdTMyIGF1MXh4eF9kYmRtYV9wbV9yZWdzW05VTV9EQkRNQV9DSEFOUyArIDFdWzZdOwogI2VuZGlmCiAKIApAQCAtOTkzLDE0ICs5OTMsMTMgQEAKIAlhdTF4eHhfZGJkbWFfcG1fcmVnc1swXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKIAogCS8qIHNhdmUgY2hhbm5lbCBjb25maWd1cmF0aW9ucyAqLwotCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdID0gYXVfcmVhZGwoYWRkciArIDB4MDApOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMl0gPSBhdV9yZWFkbChhZGRyICsgMHgwOCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzNdID0gYXVfcmVhZGwoYWRkciArIDB4MGMpOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs0XSA9IGF1X3JlYWRsKGFkZHIgKyAweDEwKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNV0gPSBhdV9yZWFkbChhZGRyICsgMHgxNCk7Ci0JCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzZdID0gYXVfcmVhZGwoYWRkciArIDB4MTgpOwogCiAJCS8qIGhhbHQgY2hhbm5lbCAqLwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMF0gJiB+MSwgYWRkciArIDB4MDApOwpAQCAtMTAyNywxNCArMTAyNiwxMyBAQAogCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1swXVszXSwgYWRkciArIDB4MGMpOwogCiAJLyogcmVzdG9yZSBjaGFubmVsIGNvbmZpZ3VyYXRpb25zICovCi0JZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKKwlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdLCBhZGRyICsgMHgwMCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsxXSwgYWRkciArIDB4MDQpOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMl0sIGFkZHIgKyAweDA4KTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzNdLCBhZGRyICsgMHgwYyk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs0XSwgYWRkciArIDB4MTApOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNV0sIGFkZHIgKyAweDE0KTsKLQkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzZdLCBhZGRyICsgMHgxOCk7CiAJCWF1X3N5bmMoKTsKIAkJYWRkciArPSAweDEwMDsJLyogbmV4dCBjaGFubmVsIGJhc2UgKi8KIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKaW5kZXggYzg4YzgyMS4uZDY3MDkyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwpAQCAtMzU0LDYgKzM1NCwyOCBAQAogCWF1X3N5bmMoKTsKIH0KIAorc3RhdGljIHZvaWQgYXUxeF9pYzBfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgYXUxeF9pYzFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKwogc3RhdGljIGludCBhdTF4X2ljMV9zZXR3YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwpAQCAtMzc5LDI1ICs0MDEsMjEgQEAKIC8qCiAgKiBpcnFfY2hpcHMgZm9yIGJvdGggSUNzOyB0aGlzIHdheSB0aGUgbWFzayBoYW5kbGVycyBjYW4gYmUKICAqIGFzIHNob3J0IGFzIHBvc3NpYmxlLgotICoKLSAqIE5PVEU6IHRoZSAtPmFjaygpIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIGhhbmRsZV9lZGdlX2lycQotICoJIGZsb3doYW5kbGVyIG9ubHksIHRoZSAtPm1hc2tfYWNrKCkgb25lIGJ5IGhhbmRsZV9sZXZlbF9pcnEsCi0gKgkgc28gbm8gbmVlZCBmb3IgYW4gaXJxX2NoaXAgZm9yIGVhY2ggdHlwZSBvZiBpcnEgKGxldmVsL2VkZ2UpLgogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMwX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMwIiwKLQkuYWNrCQk9IGF1MXhfaWMwX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMwX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMF9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzBfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMwX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMxIiwKLQkuYWNrCQk9IGF1MXhfaWMxX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMxX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMV9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzFfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMxX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiAJLnNldF93YWtlCT0gYXUxeF9pYzFfc2V0d2FrZSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCmluZGV4IGNjMzJjNjkuLjQ1YjYxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwpAQCAtNjksNiArNjksNyBAQAogI2Vsc2UKIAlhdV93cml0ZWwoMHhmLCBBdTE1MDBfUENJX0NGRyk7CiAjZW5kaWYKKwlib2FyZF9wY2lfaWRzZWwgPSBtdHgxX3BjaV9pZHNlbDsKICNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSBzeXNfcGluZnVuYyAqLwpAQCAtODUsOCArODYsNiBAQAogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMSwgMSk7CS8qIGdyZWVuIG9uICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEyLCAwKTsJLyogcmVkIG9mZiAqLwogCi0JYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7Ci0KIAlwcmludGsoS0VSTl9JTkZPICI0RyBTeXN0ZW1zIE1UWC0xIEJvYXJkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IGUyMjc4YzAuLjgzNWYzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogewogCXUxNiBjaGlwX2lkOwogCWludCByZXM7CisJdTMyICpib290Y3IsIHZhbDsKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0X3BvcnRbMl07CiAKQEAgLTU5NSw3ICs1OTYsMTMgQEAKIAogCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKIAotCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gKHUzMiAqKWlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19EQ0wsIDQpOworCXZhbCA9ICpib290Y3I7CisJaW91bm1hcChib290Y3IpOworCisJLyogUmVnaXN0ZXIgd2F0Y2hkb2cgb25seSBpZiBlbmFibGVkIGluIGhhcmR3YXJlICovCisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKQorCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOwogCiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKaW5kZXggZGZiZmQ3ZS4uOTM4YjFkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTExMiwxMCArMTEyLDggQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpb2Rldl9pcnEsIGlvZGV2X2lycWhkbCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgIGlvZGV2X25hbWUsICZtaXNjZGV2KTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCmluZGV4IDA3OWUzM2QuLmZiMjg0YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQljaGFyIGJ1ZltDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBidWZbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCS8qIEdldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBmcm9tIENGRSAqLwogCWlmIChjZmVfZ2V0ZW52KCJMSU5VWF9DTURMSU5FIiwgYnVmLCBDTF9TSVpFKSA+PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCmluZGV4IGFhYTU4NWMuLjAwMDY0YjY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15CQkrPSBjbGsubyBjcHUubyBjcy5vIGdwaW8ubyBpcnEubyBwcm9tLm8gc2V0dXAubyB0aW1lci5vIFwKLQkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8KKwkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8gZGV2LXdkdC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwogCiBvYmoteQkJKz0gYm9hcmRzLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCBmZDc3ZjU0Li4wNWEzNWNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtMjAsMTAgKzIwLDEwIEBACiAjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KICNpbmNsdWRlIDxiY202M3h4X2lvLmg+Ci0jaW5jbHVkZSA8YmNtNjN4eF9ib2FyZC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjaS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2VuZXQuaD4KICNpbmNsdWRlIDxiY202M3h4X2Rldl9kc3AuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KICNpbmNsdWRlIDxib2FyZF9iY205NjN4eC5oPgogCiAjZGVmaW5lIFBGWAkiYm9hcmRfYmNtOTYzeHg6ICIKQEAgLTc5Myw2ICs3OTMsOSBAQAogewogCXUzMiB2YWw7CiAKKwlpZiAoYm9hcmQuaGFzX3BjY2FyZCkKKwkJYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIoKTsKKwogCWlmIChib2FyZC5oYXNfZW5ldDAgJiYKIAkgICAgIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhib2FyZC5lbmV0MC5tYWNfYWRkcikpCiAJCWJjbTYzeHhfZW5ldF9yZWdpc3RlcigwLCAmYm9hcmQuZW5ldDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvY3B1LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwppbmRleCA2ZGM0M2YwLi43MDM3OGJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgogI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgpAQCAtMjg0LDYgKzI4NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcCwgZXhwZWN0ZWRfY3B1X2lkOwogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogc29jIHJlZ2lzdGVycyBsb2NhdGlvbiBkZXBlbmRzIG9uIGNwdSB0eXBlICovCiAJZXhwZWN0ZWRfY3B1X2lkID0gMDsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCSAqIEJDTTYzMzggYXMgdGhlIHNhbWUgUHJJZCBhcyBCQ00zMzAyIHNlZSBhcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCiAJICovCiAJY2FzZSBDUFVfQkNNMzMwMjoKKwkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJDTTYzMzgiOwogCQlleHBlY3RlZF9jcHVfaWQgPSBCQ002MzM4X0NQVV9JRDsKIAkJYmNtNjN4eF9yZWdzX2Jhc2UgPSBiY205NjMzOF9yZWdzX2Jhc2U7CiAJCWJjbTYzeHhfaXJxcyA9IGJjbTk2MzM4X2lycXM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZDkxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi1wY21jaWEuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNtY2lhLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbWNpYV9yZXNvdXJjZXNbXSA9IHsKKwkvKiBwY21jaWEgcmVnaXN0ZXJzICovCisJeworCQkvKiBzdGFydCAmIGVuZCBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIHBjbWNpYSBtZW1vcnkgem9uZSByZXNvdXJjZXMgKi8KKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfQ09NTU9OX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9BVFRSX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9BVFRSX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfSU9fRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIFBDTUNJQSBpcnEgKi8KKwl7CisJCS8qIHN0YXJ0IGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCisJLyogZGVjbGFyZSBQQ01DSUEgSU8gcmVzb3VyY2UgYWxzbyAqLworCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfSU9fQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0lPX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfcGxhdGZvcm1fZGF0YSBwZDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF9wY21jaWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4X3BjbWNpYSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBjbWNpYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHBjbWNpYV9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBkLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjb25maWdfcGNtY2lhX2NzKHVuc2lnbmVkIGludCBjcywKKwkJCQkgICB1MzIgYmFzZSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IGJjbTYzeHhfc2V0X2NzX3N0YXR1cyhjcywgMCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGJjbTYzeHhfc2V0X2NzX2Jhc2UoY3MsIGJhc2UsIHNpemUpOworCWlmICghcmV0KQorCQlyZXQgPSBiY202M3h4X3NldF9jc19zdGF0dXMoY3MsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBfX2luaXRkYXRhIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNzOworCXVuc2lnbmVkIGludAliYXNlOworCXVuc2lnbmVkIGludAlzaXplOworfSBwY21jaWFfY3NbM10gPSB7CisJeworCQkuY3MJPSBNUElfQ1NfUENNQ0lBX0NPTU1PTiwKKwkJLmJhc2UJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQ09NTU9OX1NJWkUKKwl9LAorCXsKKwkJLmNzCT0gTVBJX0NTX1BDTUNJQV9BVFRSLAorCQkuYmFzZQk9IEJDTV9QQ01DSUFfQVRUUl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQVRUUl9TSVpFCisJfSwKKwl7CisJCS5jcwk9IE1QSV9DU19QQ01DSUFfSU8sCisJCS5iYXNlCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfSU9fU0laRQorCX0sCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IHJldCwgaTsKKworCWlmICghQkNNQ1BVX0lTXzYzNDgoKSAmJiAhQkNNQ1BVX0lTXzYzNTgoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB1c2UgY29ycmVjdCBwY21jaWEgcmVhZHkgZ3BpbyBkZXBlbmRpbmcgb24gcHJvY2Vzc29yICovCisJc3dpdGNoIChiY202M3h4X2dldF9jcHVfaWQoKSkgeworCWNhc2UgQkNNNjM0OF9DUFVfSUQ6CisJCXBkLnJlYWR5X2dwaW8gPSAyMjsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTYzNThfQ1BVX0lEOgorCQlwZC5yZWFkeV9ncGlvID0gMTg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9QQ01DSUEpOworCXBjbWNpYV9yZXNvdXJjZXNbMF0uZW5kID0gcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCArCisJCVJTRVRfUENNQ0lBX1NJWkUgLSAxOworCXBjbWNpYV9yZXNvdXJjZXNbNF0uc3RhcnQgPSBiY202M3h4X2dldF9pcnFfbnVtYmVyKElSUV9QQ01DSUEpOworCisJLyogY29uZmlndXJlIHBjbWNpYSBjaGlwIHNlbGVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGNvbmZpZ19wY21jaWFfY3MocGNtY2lhX2NzW2ldLmNzLAorCQkJCSAgICAgICBwY21jaWFfY3NbaV0uYmFzZSwKKwkJCQkgICAgICAgcGNtY2lhX2NzW2ldLnNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RldmljZSk7CisKK291dF9lcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gc2V0IHBjbWNpYSBjaGlwIHNlbGVjdFxuIik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmVuZAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF91YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eF91YXJ0IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVhcnRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3VhcnRfcmVnaXN0ZXIodm9pZCkKK3sKKwl1YXJ0X3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9VQVJUMCk7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kID0gdWFydF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kICs9IFJTRVRfVUFSVF9TSVpFIC0gMTsKKwl1YXJ0X3Jlc291cmNlc1sxXS5zdGFydCA9IGJjbTYzeHhfZ2V0X2lycV9udW1iZXIoSVJRX1VBUlQwKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3VhcnRfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwoYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZjNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJjbTYzeHhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eC13ZHQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3dkdF9yZWdpc3Rlcih2b2lkKQoreworCXdkdF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBiY202M3h4X3JlZ3NldF9hZGRyZXNzKFJTRVRfV0RUKTsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IHdkdF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJd2R0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9XRFRfU0laRSAtIDE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3dkdF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3dkdF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwppbmRleCBiMThhMGNhLi5kMDA1NjU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKQEAgLTc1LDcgKzc1LDkgQEAKIAkJYmNtNjM0OF9hMV9yZWJvb3QoKTsKIAogCXByaW50ayhLRVJOX0lORk8gInRyaWdnZXJpbmcgd2F0Y2hkb2cgc29mdC1yZXNldC4uLlxuIik7Ci0JYmNtX3BlcmZfd3JpdGVsKFNZU19QTExfU09GVF9SRVNFVCwgUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyA9IGJjbV9wZXJmX3JlYWRsKFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKKwlyZWcgfD0gU1lTX1BMTF9TT0ZUX1JFU0VUOworCWJjbV9wZXJmX3dyaXRlbChyZWcsIFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKIAl3aGlsZSAoMSkKIAkJOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDM4NGYxODQuLjZmMmFjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTE3LDYgKzE3LDE1IEBACiBERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOwogREVGSU5FX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOwogCitzdGF0aWMgaW50IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9TVzA7CkBAIC0xNTIsMTEgKzE2MSwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQllbjAgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwpAQCAtMTY3LDI2ICsxNzUsNTcgQEAKIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSwgZW4wKTsKLQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwlpbnQgaW5kZXg7CisJaW50IGNwdTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbmRleCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpICogMjsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0Jd3JpdGVfbG9jaygmb2N0ZW9uX2lycV9jaXUwX3J3bG9jayk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKQEAgLTIwMCwxMiArMjM5LDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwID0gewogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLApAQCAtMjY5LDExICszNDIsMTAgQEAKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKIAkJZW4xICY9IH4oMXVsbCA8PCBiaXQpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CkBAIC0yODQsMjYgKzM1Niw1OCBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQllbjEgJj0gfigxdWxsIDw8IGJpdCk7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpLCBlbjEpOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQorc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEKIAkJCQkoY29yZWlkICogMiArIDEpKTsKQEAgLTMxOCwxMiArNDIyLDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9jaygmb2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQorCisvKgorICogU2V0IGFmZmluaXR5IGZvciB0aGUgaXJxIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3sKKwlpbnQgY3B1OworCWludCBpbmRleDsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCQllbHNlCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAorLyoKKyAqIE5ld2VyIG9jdGVvbiBjaGlwcyBoYXZlIHN1cHBvcnQgZm9yIGxvY2tsZXNzIENJVSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92MiwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MSA9IHsKIAkubmFtZSA9ICJDSVUxIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZSwKQEAgLTQyMCw2ICs1NTgsOCBAQAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWludCBpcnE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAxOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFNldCB0aGUgZGVmYXVsdCBhZmZpbml0eSB0byB0aGUgYm9vdCBjcHUuICovCkBAIC00MzAsNiArNTcwLDE2IEBACiAJaWYgKE5SX0lSUVMgPCBPQ1RFT05fSVJRX0xBU1QpCiAJCXByX2Vycigib2N0ZW9uX2lycV9pbml0OiBOUl9JUlFTIGlzIHNldCB0b28gbG93XG4iKTsKIAorCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONThYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMl9YKSkgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF92MjsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjI7CisJfSBlbHNlIHsKKwkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTA7CisJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOworCX0KKwogCS8qIDAgLSAxNSByZXNlcnZlZCBmb3IgaTgyNTkgbWFzdGVyIGFuZCBzbGF2ZSBjb250cm9sbGVyLiAqLwogCiAJLyogMTcgLSAyMyBNaXBzIGludGVybmFsICovCkBAIC00NDAsMTQgKzU5MCwxMiBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTAsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9SRVNFUlZFRDE1MTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJm9jdGVvbl9pcnFfY2hpcF9jaXUxLAotCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC01MDUsMTQgKzY1MywxMCBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBpc19pcnFfZW5hYmxlZF9vbl9jcHUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgaXNzZXQ7Ci0jaWZkZWYgQ09ORklHX1NNUAotICAgICAgIGludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgaXNzZXQ7CisJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCWludCBiaXQgPSAoaXJxIDwgT0NURU9OX0lSUV9XRE9HMCkgPwotCQlpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCA6IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CisJCSAgIGlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKICAgICAgICBpZiAoaXJxIDwgNjQpIHsKIAkJaXNzZXQgPSAoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSkgJgogCQkJKDF1bGwgPDwgYml0KSkgPj4gYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCAzMmQ1MWEzMS4uYzE5OGVmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKQEAgLTY1LDExICs2NSwxMiBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX01CT1hfU0VUWChjb3JlaWQpLCBhY3Rpb24pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX3NlbmRfaXBpX21hc2soY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX3NlbmRfaXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCXVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBtYXNrKQorCWZvcl9lYWNoX2NwdV9tYXNrKGksICptYXNrKQogCQlvY3Rlb25fc2VuZF9pcGlfc2luZ2xlKGksIGFjdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwppbmRleCBjNjk4MTNiLi42YzZhMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNwotIyBXZWQgTWFyICA0IDIzOjA4OjA2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU3VuIE5vdiAgOCAyMjo1OTo0NyAyMDA5CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTksMTYgKzksMTggQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAogIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRU1PVEVfRlVMT05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNTUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAogIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CkBAIC00NSw2ICs0Nyw3IEBACiAjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9UWFg5PXkKIENPTkZJR19UT1NISUJBX1JCVFg0OTI3PXkKIENPTkZJR19UT1NISUJBX1JCVFg0OTM4PXkKQEAgLTg2LDcgKzg5LDYgQEAKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMDEsNyArMTAzLDcgQEAKICMKICMgQ1BVIHNlbGVjdGlvbgogIwotIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC0xMzcsNiArMTM5LDcgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQpAQCAtMTU0LDcgKzE1NywxMCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTE3NSw2ICsxODEsNyBAQAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0xOTQsMTEgKzIwMSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMjA5LDggKzIxNywxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTIyMCwyNSArMjMyLDM1IEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci0jIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0yNDYsOCArMjY4LDggQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yNzQsNiArMjk2LDcgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjg4LDYgKzMxMSw3IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKQEAgLTI5NSw3ICszMTksNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMTEsNiArMzM0LDcgQEAKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICszNjAsNyBAQAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDcsNyArMzcyLDYgQEAKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtMzY1LDkgKzM4OSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC0zNzYsOSArNDAwLDkgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxLREVWUz1tCitDT05GSUdfTVREX0JMT0NLPW0KK0NPTkZJR19NVERfQkxPQ0tfUk89bQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldApAQCAtNDE0LDE2ICs0MzgsMjAgQEAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorQ09ORklHX01URF9SQlRYNDkzOT15CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQzNSw3ICs0NjMsMTUgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfVFhYOU5ERk1DPW0KICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwpAQCAtNDcxLDYgKzUwNyw3IEBACiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKIENPTkZJR19JREVfVElNSU5HUz15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JREVfR0Q9eQpAQCAtNTM0LDggKzU3MSwxMyBAQAogIwogCiAjCi0jIEEgbmV3IGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15CisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCiAjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTU3NCw2ICs2MTYsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORTIwMDA9eQpAQCAtNjAyLDE4ICs2NDYsMTUgQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY1Myw2ICs2OTQsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9UWFg5PXkKQEAgLTY2Niw3ICs3MDgsOSBAQAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET01fVFg0OTM5PW0KICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNjg2LDYgKzczMCwxMCBAQAogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogCkBAIC03MDEsMTcgKzc0OSwyMiBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzQwLDI4ICs3OTMsMTcgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTc3Miw3ICs4MTQsNDIgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD1tCisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9bQorQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQorQ09ORklHX1NORF9TT0NfVFhYOUFDTEM9bQorQ09ORklHX0hBU19UWFg5X0FDTEM9eQorQ09ORklHX1NORF9TT0NfVFhYOUFDTENfQUM5Nz1tCitDT05GSUdfU05EX1NPQ19UWFg5QUNMQ19HRU5FUklDPW0KK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz1tCiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtNzgzLDYgKzg2MCw4IEBACiAjIExFRCBkcml2ZXJzCiAjCiBDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTc5Miw3ICs4NzEsMTIgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKQEAgLTgyMCw2ICs5MDQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4PXkKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg0MCw4ICs5MjUsMjYgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9UWDQ5Mzk9eQotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKK0NPTkZJR19UWFg5X0RNQUM9bQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg1Myw5ICs5NTYsMTAgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04NjYsNiArOTcwLDEwIEBACiBDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCisjIENhY2hlcworIworCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODkwLDcgKzk5OCwyNyBAQAogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz1tCitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05MjIsNiArMTA1MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTkyOSwxMSArMTA1OCw5IEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgpAQCAtOTQ2LDYgKzEwNzMsNyBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtOTU5LDYgKzEwODcsMTAgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBkMTZhZmRkLi42NjRiYTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgogCiB2b2lkICpkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwpAQCAtNzMsMTQgKzc0LDQgQEAKIGV4dGVybiB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCi0jaWYgMAotI2RlZmluZSBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKLQotZXh0ZXJuIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCAqIGRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpOwotI2VuZGlmCi0KICNlbmRpZiAvKiBfQVNNX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCBlZmVkZGM4Li4wYjg5YjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC00OCw5ICs0OCw5IEBACiAjZGVmaW5lIEZJWF9OX0NPTE9VUlMgOAogCUZJWF9DTUFQX0JFR0lOLAogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUyksCisJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMgKiAyKSwKICNlbHNlCi0JRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyBGSVhfTl9DT0xPVVJTLAorCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiAyKSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKaW5kZXggMzZmZDk2OS4uYzBjZjc2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKQEAgLTE5LDE1ICsxOSwyMCBAQAogI2RlZmluZSBHQ01QX0dEQl9PRlMJCTB4ODAwMCAvKiBHbG9iYWwgRGVidWcgQmxvY2sgKi8KIAogLyogT2Zmc2V0cyB0byBpbmRpdmlkdWFsIEdDTVAgcmVnaXN0ZXJzIGZyb20gR0NNUCBiYXNlICovCi0jZGVmaW5lIEdDTVBPRlMoYmxvY2ssIHRhZywgcmVnKQkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKQorI2RlZmluZSBHQ01QT0ZTKGJsb2NrLCB0YWcsIHJlZykJXAorCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMpCisjZGVmaW5lIEdDTVBPRlNuKGJsb2NrLCB0YWcsIHJlZywgbikgXAorCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMobikpCiAKICNkZWZpbmUgR0NNUEdDQk9GUyhyZWcpCQlHQ01QT0ZTKEdDQiwgR0NCLCByZWcpCisjZGVmaW5lIEdDTVBHQ0JPRlNuKHJlZywgbikJR0NNUE9GU24oR0NCLCBHQ0IsIHJlZywgbikKICNkZWZpbmUgR0NNUENMQ0JPRlMocmVnKQlHQ01QT0ZTKENMQ0IsIENDQiwgcmVnKQogI2RlZmluZSBHQ01QQ09DQk9GUyhyZWcpCUdDTVBPRlMoQ09DQiwgQ0NCLCByZWcpCiAjZGVmaW5lIEdDTVBHREJPRlMocmVnKQkJR0NNUE9GUyhHREIsIEdEQiwgcmVnKQogCiAvKiBHQ01QIHJlZ2lzdGVyIGFjY2VzcyAqLwogI2RlZmluZSBHQ01QR0NCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBHQ0JPRlMocmVnKSkKKyNkZWZpbmUgR0NNUEdDQm4ocmVnLCBuKSAgICAgICAgICAgICAgIFJFR1AoX2djbXBfYmFzZSwgR0NNUEdDQk9GU24ocmVnLCBuKSkKICNkZWZpbmUgR0NNUENMQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUENMQ0JPRlMocmVnKSkKICNkZWZpbmUgR0NNUENPQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUENPQ0JPRlMocmVnKSkKICNkZWZpbmUgR0NNUEdEQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0RCT0ZTKHJlZykpCkBAIC00OSwxMCArNTQsMTAgQEAKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0dDTVBCQVNFX01TSwlHQ01QR0NCTVNLKEdDTVBCX0dDTVBCQVNFLCAxNykKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX1NIRgkwCiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NU0sJR0NNUEdDQk1TSyhHQ01QQl9DTURFRlRHVCwgMikKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTQkwCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0xCTEKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxIDIKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UyIDMKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0RJU0FCTEVECTAKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTQkJMQorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEJCTIKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UyCQkzCiAjZGVmaW5lIEdDTVBfR0NCX0NDTUNfT0ZTCQkweDAwMTAJLyogR2xvYmFsIENNIENvbnRyb2wgKi8KICNkZWZpbmUgR0NNUF9HQ0JfR0NTUkFQX09GUwkJMHgwMDIwCS8qIEdsb2JhbCBDU1IgQWNjZXNzIFByaXZpbGVnZSAqLwogI2RlZmluZSAgR0NNUF9HQ0JfR0NTUkFQX0NNQUNDRVNTX1NIRgkwCkBAIC0xMTUsNSArMTIwLDYgQEAKICNkZWZpbmUgR0NNUF9DQ0JfREJHR1JPVVBfT0ZTCQkweDAxMDAJCS8qIERlYnVnQnJlYWsgR3JvdXAgKi8KIAogZXh0ZXJuIGludCBfX2luaXQgZ2NtcF9wcm9iZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLQorZXh0ZXJuIGludCBfX2luaXQgZ2NtcF9uaW9jdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBnY21wX3NldHJlZ2lvbihpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CiAjZW5kaWYgLyogX0FTTV9HQ01QUkVHU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKaW5kZXggYThmNTczNC4uOWI5NDM2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBfQVNNX0dJQ1JFR1NfSAogCiAjdW5kZWYJR0lDSVNCWVRFTElUVExFRU5ESUFOCi0jZGVmaW5lIEdJQ0lTV09SRExJVFRMRUVORElBTgogCiAvKiBDb25zdGFudHMgKi8KICNkZWZpbmUgR0lDX1BPTF9QT1MJCQkxCkBAIC0yMCwxMSArMTksNyBAQAogI2RlZmluZSBHSUNfVFJJR19FREdFCQkJMQogI2RlZmluZSBHSUNfVFJJR19MRVZFTAkJCTAKIAotI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgR0lDX05VTV9JTlRSUwkJCSgyNCArIE5SX0NQVVMgKiAyKQotI2Vsc2UKLSNkZWZpbmUgR0lDX05VTV9JTlRSUwkJCTMyCi0jZW5kaWYKIAogI2RlZmluZSBNU0sobikgKCgxIDw8IChuKSkgLSAxKQogI2RlZmluZSBSRUczMihhZGRyKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkKQEAgLTcwLDEzICs2NSwxMyBAQAogI2RlZmluZSBVU01fVklTSUJMRV9TRUNUSU9OX1NJWkUJMHgxMDAwMAogCiAvKiBSZWdpc3RlciBNYXAgZm9yIFNoYXJlZCBTZWN0aW9uICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IGRlZmluZWQoR0lDSVNXT1JETElUVExFRU5ESUFOKQogCiAjZGVmaW5lCUdJQ19TSF9DT05GSUdfT0ZTCQkweDAwMDAKIAogLyogU2hhcmVkIEdsb2JhbCBDb3VudGVyICovCiAjZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMTAKICNkZWZpbmUgR0lDX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAxNAorI2RlZmluZSBHSUNfU0hfUkVWSVNJT05JRF9PRlMJCTB4MDAyMAogCiAvKiBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KICNkZWZpbmUgR0lDX1NIX1BPTF8zMV8wX09GUwkJMHgwMTAwCkBAIC0xNjQsMjQgKzE1OSwzMSBAQAogCShHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTICsgKDMyICogKGludHIpKSArICgoKHZwZSkgLyAzMikgKiA0KSkKICNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX0JJVCh2cGUpCSgxIDw8ICgodnBlKSAlIDMyKSkKIAorLyogQ29udmVydCBhbiBpbnRlcnJ1cHQgbnVtYmVyIHRvIGEgYnl0ZSBvZmZzZXQvYml0IGZvciBtdWx0aS13b3JkIHJlZ2lzdGVycyAqLworI2RlZmluZSBHSUNfSU5UUl9PRlMoaW50cikgKCgoaW50cikgLyAzMikqNCkKKyNkZWZpbmUgR0lDX0lOVFJfQklUKGludHIpICgoaW50cikgJSAzMikKKwogLyogUG9sYXJpdHkgOiBSZXNldCBWYWx1ZSBpcyBhbHdheXMgMCAqLwogI2RlZmluZSBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUwkJMHgwMTAwCiAjZGVmaW5lIEdJQ19TRVRfUE9MQVJJVFkoaW50ciwgcG9sKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksIChwb2wpIDw8ICgoaW50cikgJSAzMikpCisJR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAocG9sKSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIFRyaWdnZXJpbmcgOiBSZXNldCBWYWx1ZSBpcyBhbHdheXMgMCAqLwogI2RlZmluZSBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTCQkweDAxODAKICNkZWZpbmUgR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWcpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAodHJpZykgPDwgKChpbnRyKSAlIDMyKSkKKwlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgKHRyaWcpIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogTWFzayBtYW5pcHVsYXRpb24gKi8KICNkZWZpbmUgR0lDX1NIX1NNQVNLX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCisjZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIpIFwKKwlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAxIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKICNkZWZpbmUgR0lDX1NIX1JNQVNLX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQorI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyKSBcCisJR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgMSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIFJlZ2lzdGVyIE1hcCBmb3IgTG9jYWwgU2VjdGlvbiAqLwogI2RlZmluZSBHSUNfVlBFX0NUTF9PRlMJCQkweDAwMDAKQEAgLTIxOSwxNjEgKzIyMSw2IEBACiAjZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDAwCiAjZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDA0CiAKLSNlbHNlIC8qIENPTkZJR19DUFVfQklHX0VORElBTiAqLwotCi0jZGVmaW5lCUdJQ19TSF9DT05GSUdfT0ZTCQkweDAwMDAKLQotLyogU2hhcmVkIEdsb2JhbCBDb3VudGVyICovCi0jZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMTQKLSNkZWZpbmUgR0lDX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAxMAotCi0vKiBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KLSNkZWZpbmUgR0lDX1NIX1BPTF8zMV8wX09GUwkJMHgwMTA0Ci0jZGVmaW5lIEdJQ19TSF9QT0xfNjNfMzJfT0ZTCQkweDAxMDAKLSNkZWZpbmUgR0lDX1NIX1BPTF85NV82NF9PRlMJCTB4MDEwYwotI2RlZmluZSBHSUNfU0hfUE9MXzEyN185Nl9PRlMJCTB4MDEwOAotI2RlZmluZSBHSUNfU0hfUE9MXzE1OV8xMjhfT0ZTCQkweDAxMTQKLSNkZWZpbmUgR0lDX1NIX1BPTF8xOTFfMTYwX09GUwkJMHgwMTEwCi0jZGVmaW5lIEdJQ19TSF9QT0xfMjIzXzE5Ml9PRlMJCTB4MDExYwotI2RlZmluZSBHSUNfU0hfUE9MXzI1NV8yMjRfT0ZTCQkweDAxMTgKLQotLyogRWRnZS9MZXZlbCBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9UUklHXzMxXzBfT0ZTCQkweDAxODQKLSNkZWZpbmUgR0lDX1NIX1RSSUdfNjNfMzJfT0ZTCQkweDAxODAKLSNkZWZpbmUgR0lDX1NIX1RSSUdfOTVfNjRfT0ZTCQkweDAxOGMKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTI3Xzk2X09GUwkJMHgwMTg4Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzE1OV8xMjhfT0ZTCQkweDAxOTQKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTkxXzE2MF9PRlMJCTB4MDE5MAotI2RlZmluZSBHSUNfU0hfVFJJR18yMjNfMTkyX09GUwkJMHgwMTljCi0jZGVmaW5lIEdJQ19TSF9UUklHXzI1NV8yMjRfT0ZTCQkweDAxOTgKLQotLyogRHVhbCBFZGdlIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX0RVQUxfMzFfMF9PRlMJCTB4MDIwNAotI2RlZmluZSBHSUNfU0hfRFVBTF82M18zMl9PRlMJCTB4MDIwMAotI2RlZmluZSBHSUNfU0hfRFVBTF85NV82NF9PRlMJCTB4MDIwYwotI2RlZmluZSBHSUNfU0hfRFVBTF8xMjdfOTZfT0ZTCQkweDAyMDgKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTU5XzEyOF9PRlMJCTB4MDIxNAotI2RlZmluZSBHSUNfU0hfRFVBTF8xOTFfMTYwX09GUwkJMHgwMjEwCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzIyM18xOTJfT0ZTCQkweDAyMWMKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMjU1XzIyNF9PRlMJCTB4MDIxOAotCi0vKiBTZXQvQ2xlYXIgY29ycmVzcG9uZGluZyBiaXQgaW4gRWRnZSBEZXRlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgR0lDX1NIX1dFREdFX09GUwkJMHgwMjgwCi0KLS8qIFJlc2V0IE1hc2sgLSBEaXNhYmxlcyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzMxXzBfT0ZTCQkweDAzMDQKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzYzXzMyX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19TSF9STUFTS185NV82NF9PRlMJCTB4MDMwYwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTI3Xzk2X09GUwkJMHgwMzA4Ci0jZGVmaW5lIEdJQ19TSF9STUFTS18xNTlfMTI4X09GUwkweDAzMTQKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzE5MV8xNjBfT0ZTCTB4MDMxMAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMjIzXzE5Ml9PRlMJMHgwMzFjCi0jZGVmaW5lIEdJQ19TSF9STUFTS18yNTVfMjI0X09GUwkweDAzMTgKLQotLyogU2V0IE1hc2sgKFdPKSAtIEVuYWJsZXMgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18zMV8wX09GUwkJMHgwMzg0Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS182M18zMl9PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0hfU01BU0tfOTVfNjRfT0ZTCQkweDAzOGMKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzEyN185Nl9PRlMJCTB4MDM4OAotI2RlZmluZSBHSUNfU0hfU01BU0tfMTU5XzEyOF9PRlMJMHgwMzk0Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS18xOTFfMTYwX09GUwkweDAzOTAKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzIyM18xOTJfT0ZTCTB4MDM5YwotI2RlZmluZSBHSUNfU0hfU01BU0tfMjU1XzIyNF9PRlMJMHgwMzk4Ci0KLS8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAoUk8pIC0gQml0IFNldCA9PSBJbnRlcnJ1cHQgZW5hYmxlZCAqLwotI2RlZmluZSBHSUNfU0hfTUFTS18zMV8wX09GUwkJMHgwNDA0Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzYzXzMyX09GUwkJMHgwNDAwCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzk1XzY0X09GUwkJMHgwNDBjCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzEyN185Nl9PRlMJCTB4MDQwOAotI2RlZmluZSBHSUNfU0hfTUFTS18xNTlfMTI4X09GUwkJMHgwNDE0Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzE5MV8xNjBfT0ZTCQkweDA0MTAKLSNkZWZpbmUgR0lDX1NIX01BU0tfMjIzXzE5Ml9PRlMJCTB4MDQxYwotI2RlZmluZSBHSUNfU0hfTUFTS18yNTVfMjI0X09GUwkJMHgwNDE4Ci0KLS8qIFBlbmRpbmcgR2xvYmFsIEludGVycnVwdHMgKFJPKSAqLwotI2RlZmluZSBHSUNfU0hfUEVORF8zMV8wX09GUwkJMHgwNDg0Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzYzXzMyX09GUwkJMHgwNDgwCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzk1XzY0X09GUwkJMHgwNDhjCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzEyN185Nl9PRlMJCTB4MDQ4OAotI2RlZmluZSBHSUNfU0hfUEVORF8xNTlfMTI4X09GUwkJMHgwNDk0Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzE5MV8xNjBfT0ZTCQkweDA0OTAKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMjIzXzE5Ml9PRlMJCTB4MDQ5YwotI2RlZmluZSBHSUNfU0hfUEVORF8yNTVfMjI0X09GUwkJMHgwNDk4Ci0KLSNkZWZpbmUgR0lDX1NIX0lOVFJfTUFQX1RPX1BJTl9CQVNFX09GUwkweDA1MDAKLQotLyogTWFwcyBJbnRlcnJ1cHQgWCB0byBhIFBpbiAqLwotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1BJTihpbnRyKSBcCi0JKEdJQ19TSF9JTlRSX01BUF9UT19QSU5fQkFTRV9PRlMgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMJMHgyMDA0Ci0KLS8qCi0gKiBNYXBzIEludGVycnVwdCBYIHRvIGEgVlBFLiAgVGhpcyBpcyBtb3JlIGNvbXBsZXggdGhhbiB0aGUgTEUgY2FzZSwgYXMKLSAqIG9kZCBhbmQgZXZlbiByZWdpc3RlcnMgbmVlZCB0byBiZSB0cmFuc3Bvc2VkLiAgSXQgZG9lcyB3b3JrIC0gdHJ1c3QgbWUhCi0gKi8KLSNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX09GRihpbnRyLCB2cGUpIFwKLQkoR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUyArICgzMiAqIChpbnRyKSkgKyBcCi0JKCgoKCh2cGUpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKQotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfQklUKHZwZSkJKDEgPDwgKCh2cGUpICUgMzIpKQotCi0vKiBQb2xhcml0eSAqLwotI2RlZmluZSBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUwkJMHgwMTAwCi0jZGVmaW5lIEdJQ19TRVRfUE9MQVJJVFkoaW50ciwgcG9sKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAocG9sKSA8PCAoKGludHIpICUgMzIpKQotCi0vKiBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMJCTB4MDE4MAotI2RlZmluZSBHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZykgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAodHJpZykgPDwgKChpbnRyKSAlIDMyKSkKLQotLyogTWFzayBtYW5pcHVsYXRpb24gKi8KLSNkZWZpbmUgR0lDX1NIX1NNQVNLX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQotI2RlZmluZSBHSUNfU0hfUk1BU0tfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCi0vKiBSZWdpc3RlciBNYXAgZm9yIExvY2FsIFNlY3Rpb24gKi8KLSNkZWZpbmUgR0lDX1ZQRV9DVExfT0ZTCQkJMHgwMDAwCi0jZGVmaW5lIEdJQ19WUEVfUEVORF9PRlMJCTB4MDAwNAotI2RlZmluZSBHSUNfVlBFX01BU0tfT0ZTCQkweDAwMDgKLSNkZWZpbmUgR0lDX1ZQRV9STUFTS19PRlMJCTB4MDAwYwotI2RlZmluZSBHSUNfVlBFX1NNQVNLX09GUwkJMHgwMDEwCi0jZGVmaW5lIEdJQ19WUEVfV0RfTUFQX09GUwkJMHgwMDQwCi0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9NQVBfT0ZTCQkweDAwNDQKLSNkZWZpbmUgR0lDX1ZQRV9USU1FUl9NQVBfT0ZTCQkweDAwNDgKLSNkZWZpbmUgR0lDX1ZQRV9QRVJGQ1RSX01BUF9PRlMJCTB4MDA1MAotI2RlZmluZSBHSUNfVlBFX1NXSU5UMF9NQVBfT0ZTCQkweDAwNTQKLSNkZWZpbmUgR0lDX1ZQRV9TV0lOVDFfTUFQX09GUwkJMHgwMDU4Ci0jZGVmaW5lIEdJQ19WUEVfT1RIRVJfQUREUl9PRlMJCTB4MDA4MAotI2RlZmluZSBHSUNfVlBFX1dEX0NPTkZJRzBfT0ZTCQkweDAwOTAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9DT1VOVDBfT0ZTCQkweDAwOTQKLSNkZWZpbmUgR0lDX1ZQRV9XRF9JTklUSUFMMF9PRlMJCTB4MDA5OAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfTE9fT0ZTCQkweDAwYTQKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX0hJX09GUwkJMHgwMGEwCi0KLSNkZWZpbmUgR0lDX1ZQRV9FSUNfU0hBRE9XX1NFVF9CQVNFCTB4MDEwMAotI2RlZmluZSBHSUNfVlBFX0VJQ19TUyhpbnRyKSBcCi0JKEdJQ19FSUNfU0hBRE9XX1NFVF9CQVNFICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfVlBFX0VJQ19WRUNfQkFTRQkJMHgwODAwCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1ZFQyhpbnRyKSBcCi0JKEdJQ19WUEVfRUlDX1ZFQ19CQVNFICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfTk1JX09GUwkJMHgxMDAwCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9ZUV9PRlMJCTB4MTAwNAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfSU5UXzMxXzBfT0ZTCTB4MTA4MAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfSU5UXzYzXzMyX09GUwkweDEwODQKLQotLyogVXNlciBNb2RlIFZpc2libGUgU2VjdGlvbiBSZWdpc3RlciBNYXAgKi8KLSNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMDQKLSNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMDAKLQotI2VuZGlmIC8qICFMRSAqLwotCiAvKiBNYXNrcyAqLwogI2RlZmluZSBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9TSEYJMjgKICNkZWZpbmUgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfTVNLCShNU0soMSkgPDwgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfU0hGKQpAQCAtNDczLDEyICszMjAsMTMgQEAKICAqIGluIGJ1aWxkaW5nIGlwaV9tYXAuCiAgKi8KIHN0cnVjdCBnaWNfaW50cl9tYXAgewotCXVuc2lnbmVkIGludCBpbnRybnVtOyAJLyogRXh0IEludHIgTnVtIAkqLwogCXVuc2lnbmVkIGludCBjcHVudW07CS8qIERpcmVjdGVkIHRvIHRoaXMgQ1BVICovCiAJdW5zaWduZWQgaW50IHBpbjsJLyogRGlyZWN0ZWQgdG8gdGhpcyBQaW4gKi8KIAl1bnNpZ25lZCBpbnQgcG9sYXJpdHk7CS8qIFBvbGFyaXR5IDogKy8tCSovCiAJdW5zaWduZWQgaW50IHRyaWd0eXBlOwkvKiBUcmlnZ2VyICA6IEVkZ2UvTGV2bCAqLwotCXVuc2lnbmVkIGludCBpcGlmbGFnOwkvKiBJcyB1c2VkIGZvciBJUEkgPwkqLworCXVuc2lnbmVkIGludCBmbGFnczsJLyogTWlzYyBmbGFncwkqLworI2RlZmluZSBHSUNfRkxBR19JUEkgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgICAweDAyCiB9OwogCiBleHRlcm4gdm9pZCBnaWNfaW5pdCh1bnNpZ25lZCBsb25nIGdpY19iYXNlX2FkZHIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKaW5kZXggZGU3MTY5NC4uMjFjYmJjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaApAQCAtNzgsNiArNzgsOSBAQAogI2RlZmluZSBBUjdfUkVGX0NMT0NLCTI1MDAwMDAwCiAjZGVmaW5lIEFSN19YVEFMX0NMT0NLCTI0MDAwMDAwCiAKKy8qIERDTCAqLworI2RlZmluZSBBUjdfV0RUX0hXX0VOQQkweDEwCisKIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgewogCWludCByZXNldF9iaXQ7CiAJaW50IHBvd2VyX2JpdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKaW5kZXggZmVlYTAwMS4uOTE1OTVmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKQEAgLTEwNCw2ICsxMDQsOCBAQAogCiAJaWYgKChncGlvID49IDgpICYmIChncGlvIDw9IDE1KSkKIAkJcmV0dXJuIE1BS0VfSVJRKDAsIDI5KTsJCS8qIHNoYXJlZCBHUElPMjA4XzIxNSAqLworCisJcmV0dXJuIC1FTlhJTzsKIH0KIAogI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3BjbWNpYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl9wY21jaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmViMzk2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBCQ002M1hYX0RFVl9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9ERVZfUENNQ0lBX0hfCisKKy8qCisgKiBQQ01DSUEgZHJpdmVyIHBsYXRmb3JtIGRhdGEKKyAqLworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCByZWFkeV9ncGlvOworfTsKKworaW50IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpOworCisjZW5kaWYgLyogQkNNNjNYWF9ERVZfUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKaW5kZXggZjY4Mzc0Mi4uMDlhNTliYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtNDQsOCArNDQsOCBAQAogCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCiAJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKIAkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UgfAlcCisJCQkJICBTRF9CQUxBTkNFX0VYRUMsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKIAkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggY2U1YjZlMjcuLjk5NDdlNTdjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKICNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCi0jZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkxCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkoUEFHRV9TSVpFIDwgMHg0MDAwKQogI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkwCiAjZGVmaW5lIGNwdV9oYXNfZHNwCQkwCiAjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKQEAgLTU0LDYgKzU0LDUgQEAKICNkZWZpbmUgY3B1X2hhc192Y2UJCTAKICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCiAjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKLSNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTEKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTE9PTkdTT05fQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZDk3NDM1My4uNjA4M2RiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgpAQCAtMzYsMTEgKzM3LDEzIEBACiAjaWZkZWYgQ09ORklHXzMyQklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNSk7CVwKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CQkJCQlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKQkJCQkJCVwKIAl3cml0ZV9jMF9jb250ZXh0KCh1bnNpZ25lZCBsb25nKSBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMjYpOwlcCisJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwkJCQkJXAogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCiAjZW5kaWYKIApAQCAtMTY1LDEyICsxNjgsMTIgQEAKIAkgKiBoYXZpbmcgQVNJRF9NQVNLIHNtYWxsZXIgdGhhbiB0aGUgaGFyZHdhcmUgbWF4aW11bSwKIAkgKiBtYWtlIHN1cmUgbm8gInNvZnQiIGJpdHMgYmVjb21lICJoYXJkIi4uLgogCSAqLwotCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykKLQkJCXwgKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkgJiBBU0lEX01BU0spKTsKKwl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKKwkJCSBjcHVfYXNpZChjcHUsIG5leHQpKTsKIAllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KIAlldnBlKG10ZmxhZ3MpOwogI2Vsc2UKLQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkpOworCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIApAQCAtMjI2LDExICsyMjksMTEgQEAKIAl9CiAJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KIAl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spIHwKLQkgICAgICAgICAgICAgICAgIChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJICAgICAgICAgICAgICAgICBjcHVfYXNpZChjcHUsIG5leHQpKTsKIAllaGIoKTsgLyogTWFrZSBzdXJlIGl0IHByb3BhZ2F0ZXMgdG8gVENTdGF0dXMgKi8KIAlldnBlKG10ZmxhZ3MpOwogI2Vsc2UKLQl3cml0ZV9jMF9lbnRyeWhpKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkpOworCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0QobmV4dC0+cGdkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlNjAwY2VkLi41MDUxMWFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX01JUFNfU0VUVVBfSAogI2RlZmluZSBfTUlQU19TRVRVUF9ICiAKLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMjU2CisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTQwOTYKIAogI2lmZGVmICBfX0tFUk5FTF9fCiBleHRlcm4gdm9pZCBzZXR1cF9lYXJseV9wcmludGsodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggZTE1ZjExYS4uYWY0MjM4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNzcsNyArNzcsMTggQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CiAKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2soJmNwdW1hc2tfb2ZfY3B1KGNwdSksIFNNUF9DQUxMX0ZVTkNUSU9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2sobWFzaywgU01QX0NBTExfRlVOQ1RJT04pOworfQogCiAjZW5kaWYgLyogX19BU01fU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXRjX2lwaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKaW5kZXggOGNlNTE3NS4uMTUyNzhkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHNtdGNfaXBpICp0YWlsOwogCWludCBkZXB0aDsKKwlpbnQgcmVzY2hlZF9mbGFnOwkvKiByZXNjaGVkdWxlIGFscmVhZHkgcXVldWVkICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc210Y19pcGlfbnEoc3RydWN0IHNtdGNfaXBpX3EgKnEsIHN0cnVjdCBzbXRjX2lwaSAqcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4OTAwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcHJhbS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX01JUFNfU1BSQU1fSAorI2RlZmluZSBfTUlQU19TUFJBTV9ICisKKyNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorZXh0ZXJuIF9faW5pdCB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHsgfTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMiAqLworCisjZW5kaWYgLyogX01JUFNfU1BSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwMWNjMTYzLi44NDVkYTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODYsMTQgKzg2LDcgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0ga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQkJXAotCQkJCQkJCQlcCi0JcmV0OwkJCQkJCQlcCi19KQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGt6YWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZWxzZQogI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAppbmRleCA3OTI0MDQ5Li40MmY2NmMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCkBAIC0xMiwxNyArMTIsMTcgQEAKICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCiAjZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfbGUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2xlCiAjZWxzZQogIyAgZXJyb3IgIk1JUFMsIGJ1dCBuZWl0aGVyIF9fTUlQU0VCX18sIG5vciBfX01JUFNFTF9fPz8/IgogI2VuZGlmCiAKKyMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KKwogI2VuZGlmIC8qIF9BU01fTUlQU19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovaXJxLmMgYi9hcmNoL21pcHMvamF6ei9pcnEuYwppbmRleCA3ZmQxNzBkLi43YmQzMmQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9pcnEuYworKysgYi9hcmNoL21pcHMvamF6ei9pcnEuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHI0MDMwX3RpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IHI0MDMwX3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gIlI0MDMwIHRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IGU5NjEyMjEuLmVlY2QyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtMiw2ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9NSVBTIGtlcm5lbC4KICMKIAorQ1BQRkxBR1Nfdm1saW51eC5sZHMgOj0gJChLQlVJTERfQ0ZMQUdTKQorCiBleHRyYS15CQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAogb2JqLXkJCSs9IGNwdS1wcm9iZS5vIGJyYW5jaC5vIGVudHJ5Lm8gZ2VuZXgubyBpcnEubyBwcm9jZXNzLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKaW5kZXggZTAyZjc5Yi4uYmZlYTMyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAliY20xNDgwX3VubWFza19pcnEoY3B1LCBpcnEpOwogCiAJYWN0aW9uLT5oYW5kbGVyCT0gc2lieXRlX2NvdW50ZXJfaGFuZGxlcjsKLQlhY3Rpb24tPmZsYWdzCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVOworCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSOwogCWFjdGlvbi0+bmFtZQk9IG5hbWU7CiAJYWN0aW9uLT5kZXZfaWQJPSBjZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCmluZGV4IDY5OTZkYTQuLjAwYTRkYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBkczEyODdfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gZHMxMjg3X2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJkczEyODciLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKaW5kZXggOTIzNTFlMC4uZjVkMjY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZ3Q2NDF4eF90aW1lcjBfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gZ3Q2NDF4eF90aW1lcjBfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImd0NjQxeHhfdGltZXIwIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYwppbmRleCAyNjUyMzYyLi5iNDY5YWQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCkBAIC04Myw3ICs4Myw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gYzBfY29tcGFyZV9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBjMF9jb21wYXJlX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9ICJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKaW5kZXggYWM1OTAzZC4uZGE3OGVlYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJc2IxMjUwX3VubWFza19pcnEoY3B1LCBpcnEpOwogCiAJYWN0aW9uLT5oYW5kbGVyCT0gc2lieXRlX2NvdW50ZXJfaGFuZGxlcjsKLQlhY3Rpb24tPmZsYWdzCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVOworCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSOwogCWFjdGlvbi0+bmFtZQk9IG5hbWU7CiAJYWN0aW9uLT5kZXZfaWQJPSBjZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zbXRjLmMKaW5kZXggOThiZDdkZS4uYjEwMmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jCkBAIC0xNzMsMTEgKzE3MywxMiBAQAogCXVuc2lnbmVkIGludCBtdGZsYWdzOwogCWludCBjcHU7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7Ci0JdW5zaWduZWQgbG9uZyBuZXh0c3RhbXAgPSAwTDsKKwl1bnNpZ25lZCBsb25nIG5leHRzdGFtcDsKIAl1bnNpZ25lZCBsb25nIHJlZmVyZW5jZTsKIAogCiByZXBlYXQ6CisJbmV4dHN0YW1wID0gMEw7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkgICAgLyoKIAkgICAgICogRmluZCB2aXJ0dWFsIENQVXMgd2l0aGluIHRoZSBjdXJyZW50IFZQRSB3aG8gaGF2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKaW5kZXggMDAzN2YyMS4uMjE4ZWU2YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdHh4OXRtcl9pcnEgPSB7CiAJLmhhbmRsZXIJPSB0eHg5dG1yX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJ0eHg5dG1yIiwKIAkuZGV2X2lkCQk9ICZ0eHg5X2Nsb2NrX2V2ZW50X2RldmljZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCBmNzA5NjU3Li43YTUxODY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3dhdGNoLmg+Ci0KKyNpbmNsdWRlIDxhc20vc3ByYW0uaD4KIC8qCiAgKiBOb3QgYWxsIG9mIHRoZSBNSVBTIENQVXMgaGF2ZSB0aGUgIndhaXQiIGluc3RydWN0aW9uIGF2YWlsYWJsZS4gTW9yZW92ZXIsCiAgKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlICJ3YWl0IiBmZWF0dXJlIGRpZmZlcnMgYmV0d2VlbiBDUFUgZmFtaWxpZXMuIFRoaXMKQEAgLTcxMSwxMiArNzExLDYgQEAKIAltaXBzX3Byb2JlX3dhdGNoX3JlZ2lzdGVycyhjKTsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCi1leHRlcm4gdm9pZCBzcHJhbV9jb25maWcodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKSB7fQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcHJvYmVfbWlwcyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjLCB1bnNpZ25lZCBpbnQgY3B1KQogewogCWRlY29kZV9jb25maWdzKGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCA1MzFjZTdiLi5lYTY5NWQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJLyogU2V0IHRoZSBTUCBhZnRlciBhbiBlbXB0eSBwdF9yZWdzLiAgKi8KIAlQVFJfTEkJCXNwLCBfVEhSRUFEX1NJWkUgLSAzMiAtIFBUX1NJWkUKIAlQVFJfQUREVQlzcCwgJDI4CisJYmFja190b19iYWNrX2MwX2hhemFyZAogCXNldF9zYXZlZF9zcAlzcCwgdDAsIHQxCiAJUFRSX1NVQlUJc3AsIDQgKiBTWlJFRwkJIyBpbml0IHN0YWNrIHBvaW50ZXIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCmluZGV4IGY3ZDhkNWQuLmVkNWM0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ2ljLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwppbmRleCBkMjA3MmNkLi5iMTgxZjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYwpAQCAtMTQsMzggKzE0LDIzIEBACiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX2dpY19iYXNlOwotc3RhdGljIHVuc2lnbmVkIGludCBfaXJxYmFzZSwgX21hcHNpemUsIG51bXZwZXMsIG51bWludHJzOwotc3RhdGljIHN0cnVjdCBnaWNfaW50cl9tYXAgKl9pbnRybWFwOworc3RhdGljIHVuc2lnbmVkIGludCBfaXJxYmFzZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9mbGFnc1tHSUNfTlVNX0lOVFJTXTsKKyNkZWZpbmUgR0lDX0lSUV9GTEFHX0VER0UgICAgICAweDAwMDEKIAotc3RhdGljIHN0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CitzdHJ1Y3QgZ2ljX3BjcHVfbWFzayBwY3B1X21hc2tzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfcGVuZGluZ19yZWdzIHBlbmRpbmdfcmVnc1tOUl9DUFVTXTsKIHN0YXRpYyBzdHJ1Y3QgZ2ljX2ludHJtYXNrX3JlZ3MgaW50cm1hc2tfcmVnc1tOUl9DUFVTXTsKIAotI2RlZmluZSBnaWNfd2VkZ2ViMmJvayAwCS8qCi0JCQkJICogQ2FuIEdJQyBoYW5kbGUgYjJiIHdyaXRlcyB0byB3ZWRnZSByZWdpc3Rlcj8KLQkJCQkgKi8KLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdpY193ZWRnZWIyYl9sb2NrKTsKLSNlbmRpZgotCiB2b2lkIGdpY19zZW5kX2lwaSh1bnNpZ25lZCBpbnQgaW50cikKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgogCXByX2RlYnVnKCJDUFUlZDogJXMgc3RhdHVzICUwOHhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sCiAJCSByZWFkX2MwX3N0YXR1cygpKTsKLQlpZiAoIWdpY193ZWRnZWIyYm9rKQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKIAlHSUNXUklURShHSUNfUkVHKFNIQVJFRCwgR0lDX1NIX1dFREdFKSwgMHg4MDAwMDAwMCB8IGludHIpOwotCWlmICghZ2ljX3dlZGdlYjJib2spIHsKLQkJKHZvaWQpIEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQl9CiB9CiAKIC8qIFRoaXMgaXMgTWFsdGEgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIGJlIGV4cG9ydGVkICovCi1zdGF0aWMgdm9pZCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCitzdGF0aWMgdm9pZCBfX2luaXQgdnBlX2xvY2FsX3NldHVwKHVuc2lnbmVkIGludCBudW12cGVzKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgdGltZXJfaW50ZXJydXB0ID0gNSwgcGVyZl9pbnRlcnJ1cHQgPSA1OwpAQCAtMTA1LDQ0ICs5MCwzNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdpY19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfU0VUX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19TRVRfSU5UUl9NQVNLKGlycSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0jaWYgZ2ljX3dlZGdlYjJib2sgPT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZW5kaWYKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX0NMUl9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEpOwogCi0JaWYgKF9pbnRybWFwW2lycV0udHJpZ3R5cGUgPT0gR0lDX1RSSUdfRURHRSkgewotCQlpZiAoIWdpY193ZWRnZWIyYm9rKQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdpY193ZWRnZWIyYl9sb2NrLCBmbGFncyk7CisJaWYgKGdpY19pcnFfZmxhZ3NbaXJxXSAmIEdJQ19JUlFfRkxBR19FREdFKQogCQlHSUNXUklURShHSUNfUkVHKFNIQVJFRCwgR0lDX1NIX1dFREdFKSwgaXJxKTsKLQkJaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkJKHZvaWQpIEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdpY193ZWRnZWIyYl9sb2NrLCBmbGFncyk7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGdpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE1NSw5ICsxMzAsOCBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlpOwogCi0JcHJfZGVidWcoS0VSTl9ERUJVRyAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAJaXJxIC09IF9pcnFiYXNlOwotCisJcHJfZGVidWcoS0VSTl9ERUJVRyAiJXMoJWQpIGNhbGxlZFxuIiwgX19mdW5jX18sIGlycSk7CiAJY3B1bWFza19hbmQoJnRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAlpZiAoY3B1c19lbXB0eSh0bXApKQogCQlyZXR1cm4gLTE7CkBAIC0xNjgsMTMgKzE0Miw2IEBACiAJCS8qIFJlLXJvdXRlIHRoaXMgSVJRICovCiAJCUdJQ19TSF9NQVBfVE9fVlBFX1NNQVNLKGlycSwgZmlyc3RfY3B1KHRtcCkpOwogCi0JCS8qCi0JCSAqIEZJWE1FOiBhc3N1bXB0aW9uIHRoYXQgX2ludHJtYXAgaXMgb3JkZXJlZCBhbmQgaGFzIG5vIGhvbGVzCi0JCSAqLwotCi0JCS8qIFVwZGF0ZSB0aGUgaW50cl9tYXAgKi8KLQkJX2ludHJtYXBbaXJxXS5jcHVudW0gPSBmaXJzdF9jcHUodG1wKTsKLQogCQkvKiBVcGRhdGUgdGhlIHBjcHVfbWFza3MgKi8KIAkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKIAkJCWNsZWFyX2JpdChpcnEsIHBjcHVfbWFza3NbaV0ucGNwdV9tYXNrKTsKQEAgLTIwMSw4ICsxNjgsOSBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW50cih1bnNpZ25lZCBpbnQgaW50ciwgdW5zaWduZWQgaW50IGNwdSwKLQl1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHVuc2lnbmVkIGludCB0cmlndHlwZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfc2V0dXBfaW50cih1bnNpZ25lZCBpbnQgaW50ciwgdW5zaWduZWQgaW50IGNwdSwKKwl1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHVuc2lnbmVkIGludCB0cmlndHlwZSwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJLyogU2V0dXAgSW50ciB0byBQaW4gbWFwcGluZyAqLwogCWlmIChwaW4gJiBHSUNfTUFQX1RPX05NSV9NU0spIHsKQEAgLTIyNywzOCArMTk1LDQzIEBACiAJR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWd0eXBlKTsKIAogCS8qIEluaXQgSW50ciBNYXNrcyAqLwotCUdJQ19TRVRfSU5UUl9NQVNLKGludHIsIDApOworCUdJQ19DTFJfSU5UUl9NQVNLKGludHIpOworCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19JUEkpCisJCXNldF9iaXQoaW50ciwgcGNwdV9tYXNrc1tjcHVdLnBjcHVfbWFzayk7CisJaWYgKGZsYWdzICYgR0lDX0ZMQUdfVFJBTlNQQVJFTlQpCisJCUdJQ19TRVRfSU5UUl9NQVNLKGludHIpOworCWlmICh0cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKQorCQlnaWNfaXJxX2ZsYWdzW2ludHJdIHw9IEdJQ19JUlFfRkxBR19FREdFOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2Jhc2ljX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdChpbnQgbnVtaW50cnMsIGludCBudW12cGVzLAorCQkJc3RydWN0IGdpY19pbnRyX21hcCAqaW50cm1hcCwgaW50IG1hcHNpemUpCiB7CiAJdW5zaWduZWQgaW50IGksIGNwdTsKIAogCS8qIFNldHVwIGRlZmF1bHRzICovCi0JZm9yIChpID0gMDsgaSA8IEdJQ19OVU1fSU5UUlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1pbnRyczsgaSsrKSB7CiAJCUdJQ19TRVRfUE9MQVJJVFkoaSwgR0lDX1BPTF9QT1MpOwogCQlHSUNfU0VUX1RSSUdHRVIoaSwgR0lDX1RSSUdfTEVWRUwpOwotCQlHSUNfU0VUX0lOVFJfTUFTSyhpLCAwKTsKKwkJR0lDX0NMUl9JTlRSX01BU0soaSk7CisJCWlmIChpIDwgR0lDX05VTV9JTlRSUykKKwkJCWdpY19pcnFfZmxhZ3NbaV0gPSAwOwogCX0KIAogCS8qIFNldHVwIHNwZWNpZmljcyAqLwotCWZvciAoaSA9IDA7IGkgPCBfbWFwc2l6ZTsgaSsrKSB7Ci0JCWNwdSA9IF9pbnRybWFwW2ldLmNwdW51bTsKKwlmb3IgKGkgPSAwOyBpIDwgbWFwc2l6ZTsgaSsrKSB7CisJCWNwdSA9IGludHJtYXBbaV0uY3B1bnVtOwogCQlpZiAoY3B1ID09IFgpCiAJCQljb250aW51ZTsKLQotCQlpZiAoY3B1ID09IDAgJiYgaSAhPSAwICYmIF9pbnRybWFwW2ldLmludHJudW0gPT0gMCAmJgotCQkJCQlfaW50cm1hcFtpXS5pcGlmbGFnID09IDApCisJCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgaW50cm1hcFtpXS5mbGFncyA9PSAwKQogCQkJY29udGludWU7Ci0KLQkJc2V0dXBfaW50cihfaW50cm1hcFtpXS5pbnRybnVtLAotCQkJCV9pbnRybWFwW2ldLmNwdW51bSwKLQkJCQlfaW50cm1hcFtpXS5waW4sCi0JCQkJX2ludHJtYXBbaV0ucG9sYXJpdHksCi0JCQkJX2ludHJtYXBbaV0udHJpZ3R5cGUpOwotCQkvKiBJbml0aWFsaXNlIHBlci1jcHUgSW50ZXJydXB0IHNvZnR3YXJlIG1hc2tzICovCi0JCWlmIChfaW50cm1hcFtpXS5pcGlmbGFnKQotCQkJc2V0X2JpdChfaW50cm1hcFtpXS5pbnRybnVtLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwkJZ2ljX3NldHVwX2ludHIoaSwKKwkJCWludHJtYXBbaV0uY3B1bnVtLAorCQkJaW50cm1hcFtpXS5waW4sCisJCQlpbnRybWFwW2ldLnBvbGFyaXR5LAorCQkJaW50cm1hcFtpXS50cmlndHlwZSwKKwkJCWludHJtYXBbaV0uZmxhZ3MpOwogCX0KIAogCXZwZV9sb2NhbF9zZXR1cChudW12cGVzKTsKQEAgLTI3MywxMiArMjQ2LDExIEBACiAJCSAgICAgdW5zaWduZWQgaW50IGlycWJhc2UpCiB7CiAJdW5zaWduZWQgaW50IGdpY2NvbmZpZzsKKwlpbnQgbnVtdnBlcywgbnVtaW50cnM7CiAKIAlfZ2ljX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKGdpY19iYXNlX2FkZHIsCiAJCQkJCQkgICAgZ2ljX2FkZHJzcGFjZV9zaXplKTsKIAlfaXJxYmFzZSA9IGlycWJhc2U7Ci0JX2ludHJtYXAgPSBpbnRyX21hcDsKLQlfbWFwc2l6ZSA9IGludHJfbWFwX3NpemU7CiAKIAlHSUNSRUFEKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfQ09ORklHKSwgZ2ljY29uZmlnKTsKIAludW1pbnRycyA9IChnaWNjb25maWcgJiBHSUNfU0hfQ09ORklHX05VTUlOVFJTX01TSykgPj4KQEAgLTI5MCw1ICsyNjIsNSBAQAogCiAJcHJfZGVidWcoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCi0JZ2ljX2Jhc2ljX2luaXQoKTsKKwlnaWNfYmFzaWNfaW5pdChudW1pbnRycywgbnVtdnBlcywgaW50cl9tYXAsIGludHJfbWFwX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9rc3BkLmMgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwppbmRleCBmMjM5N2YwLi5hZDRlMDE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYworKysgYi9hcmNoL21pcHMva2VybmVsL2tzcGQuYwpAQCAtMTcyLDEzICsxNzIsMjAgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBzcF9zZXRmc3VpZGdpZCggdWlkX3QgdWlkLCBnaWRfdCBnaWQpCitzdGF0aWMgaW50IHNwX3NldGZzdWlkZ2lkKHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQogewotCWN1cnJlbnQtPmNyZWQtPmZzdWlkID0gdWlkOwotCWN1cnJlbnQtPmNyZWQtPmZzZ2lkID0gZ2lkOworCXN0cnVjdCBjcmVkICpuZXc7CiAKLQlrZXlfZnN1aWRfY2hhbmdlZChjdXJyZW50KTsKLQlrZXlfZnNnaWRfY2hhbmdlZChjdXJyZW50KTsKKwluZXcgPSBwcmVwYXJlX2NyZWRzKCk7CisJaWYgKCFuZXcpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3LT5mc3VpZCA9IHVpZDsKKwluZXctPmZzZ2lkID0gZ2lkOworCisJY29tbWl0X2NyZWRzKG5ldyk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE5Niw3ICsyMDMsNyBAQAogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJc3RydWN0IHRpbWV6b25lIHR6OwotCWludCBjbWQ7CisJaW50IGVyciwgY21kOwogCiAJY2hhciAqdmN3ZDsKIAlpbnQgc2l6ZTsKQEAgLTIyNSw4ICsyMzIsMTEgQEAKIAkvKiBSdW4gdGhlIHN5c2NhbGwgYXQgdGhlIHByaXZpbGVnZSBvZiB0aGUgdXNlciB3aG8gbG9hZGVkIHRoZQogCSAgIFNQIHByb2dyYW0gKi8KIAotCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKQotCQlzcF9zZXRmc3VpZGdpZCh2cGVfZ2V0dWlkKHRjbGltaXQpLCB2cGVfZ2V0Z2lkKHRjbGltaXQpKTsKKwlpZiAodnBlX2dldHVpZCh0Y2xpbWl0KSkgeworCQllcnIgPSBzcF9zZXRmc3VpZGdpZCh2cGVfZ2V0dWlkKHRjbGltaXQpLCB2cGVfZ2V0Z2lkKHRjbGltaXQpKTsKKwkJaWYgKCFlcnIpCisJCQlwcl9lcnIoIkNoYW5nZSBvZiBjcmVkcyBmYWlsZWRcbiIpOworCX0KIAogCXN3aXRjaCAoc2MuY21kKSB7CiAJLyogbmVlZHMgdGhlIGZsYWdzIGFyZ3VtZW50IHRyYW5zbGF0aW5nIGZyb20gU0RFIGtpdCB0bwpAQCAtMjgzLDggKzI5MywxMSBAQAogCQlicmVhazsKICAJfSAvKiBzd2l0Y2ggKi8KIAotCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKQotCQlzcF9zZXRmc3VpZGdpZCggMCwgMCk7CisJaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpIHsKKwkJZXJyID0gc3Bfc2V0ZnN1aWRnaWQoMCwgMCk7CisJCWlmICghZXJyKQorCQkJcHJfZXJyKCJyZXN0b3Jpbmcgb2xkIGNyZWRzIGZhaWxlZFxuIik7CisJfQogCiAJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDYyNDJiYzYuLmI3N2ZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00MjgsMyArNDI4LDkgQEAKIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsICZyZWdzLCAwLAogCSAgICAgICAgICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9sb29rdXBfZGNvb2tpZSh1MzIgYTAsIHUzMiBhMSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwlzaXplX3QgbGVuKQoreworCXJldHVybiBzeXNfbG9va3VwX2Rjb29raWUobWVyZ2VfNjQoYTAsIGExKSwgYnVmLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCBhMTBlYmZkLi4zNjRmMDY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtNzIsOCArNzIsOSBAQAogKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBydGx4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJdW5zaWduZWQgaW50IHZwZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IGZsYWdzLCB2cGVmbGFnczsKIAogCS8qIE91Z2h0IG5vdCB0byBiZSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIFNNVEMgYnVpbGRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMzkyLDIwICszOTMsMTIgQEAKIAogc3RhdGljIGludCBmaWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlpbnQgZXJyOwotCi0JbG9ja19rZXJuZWwoKTsKLQllcnIgPSBydGx4X29wZW4obWlub3IsIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogMSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHJ0bHhfb3BlbihpbWlub3IoaW5vZGUpLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOwogfQogCiBzdGF0aWMgaW50IGZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCi0JcmV0dXJuIHJ0bHhfcmVsZWFzZShtaW5vcik7CisJcmV0dXJuIHJ0bHhfcmVsZWFzZShpbWlub3IoaW5vZGUpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBmaWxlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDliYmY5Nzc1Li4xNGRkZTRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC00NTAsNyArNDUwLDcgQEAKIAlQVFIJc3lzX2lvX3N1Ym1pdAogCVBUUglzeXNfaW9fY2FuY2VsCQkJLyogNDI0NSAqLwogCVBUUglzeXNfZXhpdF9ncm91cAotCVBUUglzeXNfbG9va3VwX2Rjb29raWUKKwlQVFIJc3lzMzJfbG9va3VwX2Rjb29raWUKIAlQVFIJc3lzX2Vwb2xsX2NyZWF0ZQogCVBUUglzeXNfZXBvbGxfY3RsCiAJUFRSCXN5c19lcG9sbF93YWl0CQkJLyogNDI1MCAqLwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJUFRSCXN5c19mY2htb2RhdAogCVBUUglzeXNfZmFjY2Vzc2F0CQkJLyogNDMwMCAqLwogCVBUUgljb21wYXRfc3lzX3BzZWxlY3Q2Ci0JUFRSCXN5c19wcG9sbAorCVBUUgljb21wYXRfc3lzX3Bwb2xsCiAJUFRSCXN5c191bnNoYXJlCiAJUFRSCXN5c19zcGxpY2UKIAlQVFIJc3lzMzJfc3luY19maWxlX3JhbmdlCQkvKiA0MzA1ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwppbmRleCA0ZWIxMDZjLi5lNzJlNjg0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtMTI4LDE5ICsxMjcsNiBAQAogCWNwdV9pZGxlKCk7CiB9CiAKLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JbXBfb3BzLT5zZW5kX2lwaV9tYXNrKG1hc2ssIFNNUF9DQUxMX0ZVTkNUSU9OKTsKLX0KLQotLyoKLSAqIFdlIHJldXNlIHRoZSBzYW1lIHZlY3RvciBmb3IgdGhlIHNpbmdsZSBJUEkKLSAqLwotdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCi17Ci0JbXBfb3BzLT5zZW5kX2lwaV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGNwdSksIFNNUF9DQUxMX0ZVTkNUSU9OKTsKLX0KLQogLyoKICAqIENhbGwgaW50byBib3RoIGludGVycnVwdCBoYW5kbGVycywgYXMgd2Ugc2hhcmUgdGhlIElQSSBmb3IgdGhlbQogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IDY3MTUzYTAuLjI0NjMwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC03NSw3ICs3NSw2IEBACiAKIGFzaWR1c2Ugc210Y19saXZlX2FzaWRbTUFYX1NNVENfVExCU11bTUFYX1NNVENfQVNJRFNdOwogCi0KIC8qCiAgKiBOdW1iZXIgb2YgSW50ZXJQcm9jZXNzb3IgSW50ZXJydXB0IChJUEkpIG1lc3NhZ2UgYnVmZmVycyB0byBhbGxvY2F0ZQogICovCkBAIC0zODgsNiArMzg3LDcgQEAKIAkJSVBJUVtpXS5oZWFkID0gSVBJUVtpXS50YWlsID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2luaXQoJklQSVFbaV0ubG9jayk7CiAJCUlQSVFbaV0uZGVwdGggPSAwOworCQlJUElRW2ldLnJlc2NoZWRfZmxhZyA9IDA7IC8qIE5vIHJlc2NoZWR1bGVzIHF1ZXVlZCBpbml0aWFsbHkgKi8KIAl9CiAKIAkvKiBjcHVfZGF0YSBpbmRleCBzdGFydHMgYXQgemVybyAqLwpAQCAtNzQxLDExICs3NDEsMjQgQEAKIHN0YXRpYyB2b2lkIHNtdGNfaXBpX3FkdW1wKHZvaWQpCiB7CiAJaW50IGk7CisJc3RydWN0IHNtdGNfaXBpICp0ZW1wOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVMgO2krKykgewotCQlwcmludGsoIklQSVFbJWRdOiBoZWFkID0gMHgleCwgdGFpbCA9IDB4JXgsIGRlcHRoID0gJWRcbiIsCisJCXByX2luZm8oIklQSVFbJWRdOiBoZWFkID0gMHgleCwgdGFpbCA9IDB4JXgsIGRlcHRoID0gJWRcbiIsCiAJCQlpLCAodW5zaWduZWQpSVBJUVtpXS5oZWFkLCAodW5zaWduZWQpSVBJUVtpXS50YWlsLAogCQkJSVBJUVtpXS5kZXB0aCk7CisJCXRlbXAgPSBJUElRW2ldLmhlYWQ7CisKKwkJd2hpbGUgKHRlbXAgIT0gSVBJUVtpXS50YWlsKSB7CisJCQlwcl9kZWJ1ZygiJWQgJWQgJWQ6ICIsIHRlbXAtPnR5cGUsIHRlbXAtPmRlc3QsCisJCQkgICAgICAgKGludCl0ZW1wLT5hcmcpOworI2lmZGVmCVNNVENfSVBJX0RFQlVHCisJCSAgICBwcl9kZWJ1ZygiJXUgJWx1XG4iLCB0ZW1wLT5zZW5kZXIsIHRlbXAtPnN0YW1wKTsKKyNlbHNlCisJCSAgICBwcl9kZWJ1ZygiXG4iKTsKKyNlbmRpZgorCQkgICAgdGVtcCA9IHRlbXAtPmZsaW5rOworCQl9CiAJfQogfQogCkBAIC03ODQsMTEgKzc5NywxNiBAQAogCWludCBtdGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGNyZXN0YXJ0OwogCWV4dGVybiB2b2lkIHI0a193YWl0X2lycW9mZih2b2lkKSwgX19wYXN0d2FpdCh2b2lkKTsKKwlpbnQgc2V0X3Jlc2NoZWRfZmxhZyA9ICh0eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCQlhY3Rpb24gPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpOwogCiAJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJcHJpbnRrKCJDYW5ub3QgU2VuZCBJUEkgdG8gc2VsZiFcbiIpOwogCQlyZXR1cm47CiAJfQorCWlmIChzZXRfcmVzY2hlZF9mbGFnICYmIElQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgIT0gMCkKKwkJcmV0dXJuOyAvKiBUaGVyZSBpcyBhIHJlc2NoZWR1bGUgcXVldWVkIGFscmVhZHkgKi8KKwogCS8qIFNldCB1cCBhIGRlc2NyaXB0b3IsIHRvIGJlIGRlbGl2ZXJlZCBlaXRoZXIgcHJvbXB0bHkgb3IgcXVldWVkICovCiAJcGlwaSA9IHNtdGNfaXBpX2RxKCZmcmVlSVBJcSk7CiAJaWYgKHBpcGkgPT0gTlVMTCkgewpAQCAtODAxLDYgKzgxOSw3IEBACiAJcGlwaS0+ZGVzdCA9IGNwdTsKIAlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgIT0gY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS52cGVfaWQpIHsKIAkJLyogSWYgbm90IG9uIHNhbWUgVlBFLCBlbnF1ZXVlIGFuZCBzZW5kIGNyb3NzLVZQRSBpbnRlcnJ1cHQgKi8KKwkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyB8PSBzZXRfcmVzY2hlZF9mbGFnOwogCQlzbXRjX2lwaV9ucSgmSVBJUVtjcHVdLCBwaXBpKTsKIAkJTE9DS19DT1JFX1BSQSgpOwogCQlzZXR0YyhjcHVfZGF0YVtjcHVdLnRjX2lkKTsKQEAgLTg0Nyw2ICs4NjYsNyBAQAogCQkJICovCiAJCQl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CiAJCQlVTkxPQ0tfQ09SRV9QUkEoKTsKKwkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgfD0gc2V0X3Jlc2NoZWRfZmxhZzsKIAkJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOwogCQl9IGVsc2UgewogcG9zdGRpcmVjdDoKQEAgLTk5NiwxMiArMTAxNiwxNSBAQAogCQkgKiBhbHJlYWR5IGVuYWJsZWQuCiAJCSAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KIAkJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKIAkJcGlwaSA9IF9fc210Y19pcGlfZHEocSk7CiAJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKLQkJaWYgKHBpcGkgIT0gTlVMTCkKKwkJaWYgKHBpcGkgIT0gTlVMTCkgeworCQkJaWYgKHBpcGktPnR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJICAgIChpbnQpcGlwaS0+YXJnID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgPSAwOwogCQkJaXBpX2RlY29kZShwaXBpKTsKKwkJfQogCQkvKgogCQkgKiBUaGUgdXNlIG9mIHRoZSBfX3Jhd19sb2NhbCByZXN0b3JlIGlzbid0CiAJCSAqIGFzIG9idmlvdXNseSBuZWNlc3NhcnkgaGVyZSBhcyBpbiBzbXRjX2lwaV9yZXBsYXkoKSwKQEAgLTEwODIsNiArMTEwNSw5IEBACiAJCQkJICogd2l0aCBpbnRlcnJ1cHRzIG9mZgogCQkJCSAqLwogCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQlpZiAocGlwaS0+dHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkJICAgIChpbnQpcGlwaS0+YXJnID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQkJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnID0gMDsKIAkJCQlpcGlfZGVjb2RlKHBpcGkpOwogCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCX0KQEAgLTEwOTgsOSArMTEyNCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pcGkgPSB7CiAJLmhhbmRsZXIJPSBpcGlfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAotCS5uYW1lCQk9ICJTTVRDX0lQSSIsCi0JLmZsYWdzCQk9IElSUUZfUEVSQ1BVCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkubmFtZQkJPSAiU01UQ19JUEkiCiB9OwogCiBzdGF0aWMgdm9pZCBzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgbnZwZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYwppbmRleCA2ZGRiNTA3Li4xODIxZDEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKLSNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTE5OCw4ICsxOTcsNyBAQAogCQlvZmZzZXQgKz0gMiAqIFNQUkFNX1RBR19TVFJJREU7CiAJfQogfQotCi1fX2NwdWluaXQgdm9pZCBzcHJhbV9jb25maWcodm9pZCkKK3ZvaWQgX19jcHVpbml0IHNwcmFtX2NvbmZpZyh2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY29uZmlnMDsKQEAgLTIwOCw2ICsyMDYsNyBAQAogCWNhc2UgQ1BVXzI0SzoKIAljYXNlIENQVV8zNEs6CiAJY2FzZSBDUFVfNzRLOgorCWNhc2UgQ1BVXzEwMDRLOgogCQljb25maWcwID0gcmVhZF9jMF9jb25maWcoKTsKIAkJLyogRklYTUU6IGFkZHJlc3NlcyBhcmUgTWFsdGEgc3BlY2lmaWMgKi8KIAkJaWYgKGNvbmZpZzAgJiAoMTw8MjQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOWJmMGUzZC4uMTYyYjI5OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTEsMTUgKzExLDE1IEBACiAJbm90ZSBQVF9OT1RFIEZMQUdTKDQpOwkvKiBSX18gKi8KIH0KIAotaWZkZWYgQ09ORklHXzMyQklUCi0JaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCisjaWZkZWYgQ09ORklHXzMyQklUCisJI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgogCQlqaWZmaWVzICA9IGppZmZpZXNfNjQ7Ci0JZWxzZQorCSNlbHNlCiAJCWppZmZpZXMgID0gamlmZmllc182NCArIDQ7Ci0JZW5kaWYKLWVsc2UKKwkjZW5kaWYKKyNlbHNlCiAJamlmZmllcyAgPSBqaWZmaWVzXzY0OwotZW5kaWYKKyNlbmRpZgogCiBTRUNUSU9OUwogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKaW5kZXggZWI2YzRjNS4uNjA0Nzc1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCkBAIC0xNDQsMTQgKzE0NCwxNSBAQAogfTsKIAogc3RydWN0IHsKLQkvKiBWaXJ0dWFsIHByb2Nlc3NpbmcgZWxlbWVudHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHZwZV9saXN0OwotCi0JLyogVGhyZWFkIGNvbnRleHRzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0Y19saXN0OworCXNwaW5sb2NrX3QgdnBlX2xpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZwZV9saXN0OwkvKiBWaXJ0dWFsIHByb2Nlc3NpbmcgZWxlbWVudHMgKi8KKwlzcGlubG9ja190IHRjX2xpc3RfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRjX2xpc3Q7CS8qIFRocmVhZCBjb250ZXh0cyAqLwogfSB2cGVjb250cm9sID0gewotCS52cGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudnBlX2xpc3QpLAotCS50Y19saXN0ID0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC50Y19saXN0KQorCS52cGVfbGlzdF9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS52cGVfbGlzdAk9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudnBlX2xpc3QpLAorCS50Y19saXN0X2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLnRjX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnRjX2xpc3QpCiB9OwogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3Byb2dtZW0odm9pZCAqcHRyKTsKQEAgLTE1OSwyOCArMTYwLDM4IEBACiAvKiBnZXQgdGhlIHZwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtaW5vciAqLwogc3RhdGljIHN0cnVjdCB2cGUgKmdldF92cGUoaW50IG1pbm9yKQogewotCXN0cnVjdCB2cGUgKnY7CisJc3RydWN0IHZwZSAqcmVzLCAqdjsKIAogCWlmICghY3B1X2hhc19taXBzbXQpCiAJCXJldHVybiBOVUxMOwogCisJcmVzID0gTlVMTDsKKwlzcGluX2xvY2soJnZwZWNvbnRyb2wudnBlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2LCAmdnBlY29udHJvbC52cGVfbGlzdCwgbGlzdCkgewotCQlpZiAodi0+bWlub3IgPT0gbWlub3IpCi0JCQlyZXR1cm4gdjsKKwkJaWYgKHYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlyZXMgPSB2OworCQkJYnJlYWs7CisJCX0KIAl9CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudnBlX2xpc3RfbG9jayk7CiAKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmVzOwogfQogCiAvKiBnZXQgdGhlIHZwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtaW5vciAqLwogc3RhdGljIHN0cnVjdCB0YyAqZ2V0X3RjKGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgdGMgKnQ7CisJc3RydWN0IHRjICpyZXMsICp0OwogCisJcmVzID0gTlVMTDsKKwlzcGluX2xvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ2cGVjb250cm9sLnRjX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHQtPmluZGV4ID09IGluZGV4KQotCQkJcmV0dXJuIHQ7CisJCWlmICh0LT5pbmRleCA9PSBpbmRleCkgeworCQkJcmVzID0gdDsKKwkJCWJyZWFrOworCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE5MCwxNSArMjAxLDE3IEBACiB7CiAJc3RydWN0IHZwZSAqdjsKIAotCWlmICgodiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgodiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGUpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJSU5JVF9MSVNUX0hFQUQoJnYtPnRjKTsKKwlzcGluX2xvY2soJnZwZWNvbnRyb2wudnBlX2xpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdi0+bGlzdCwgJnZwZWNvbnRyb2wudnBlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCiAJSU5JVF9MSVNUX0hFQUQoJnYtPm5vdGlmeSk7CiAJdi0+bWlub3IgPSBtaW5vcjsKKwogCXJldHVybiB2OwogfQogCkBAIC0yMTIsNyArMjI1LDEwIEBACiAKIAlJTklUX0xJU1RfSEVBRCgmdGMtPnRjKTsKIAl0Yy0+aW5kZXggPSBpbmRleDsKKworCXNwaW5fbG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnRjLT5saXN0LCAmdnBlY29udHJvbC50Y19saXN0KTsKKwlzcGluX3VubG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCiBvdXQ6CiAJcmV0dXJuIHRjOwpAQCAtMjI3LDcgKzI0Myw3IEBACiAJa2ZyZWUodik7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfbXRyZWdzKHZvaWQpCitzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBkdW1wX210cmVncyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCkBAIC0xMDQ4LDIwICsxMDY0LDE5IEBACiAJZW51bSB2cGVfc3RhdGUgc3RhdGU7CiAJc3RydWN0IHZwZV9ub3RpZmljYXRpb25zICpub3Q7CiAJc3RydWN0IHZwZSAqdjsKLQlpbnQgcmV0LCBlcnIgPSAwOworCWludCByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlmIChtaW5vciAhPSBpbWlub3IoaW5vZGUpKSB7CiAJCS8qIGFzc3VtZSBvbmx5IDEgZGV2aWNlIGF0IHRoZSBtb21lbnQuICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IG9ubHkgdnBlMSBpcyBzdXBwb3J0ZWRcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJcHJfd2FybmluZygiVlBFIGxvYWRlcjogb25seSB2cGUxIGlzIHN1cHBvcnRlZFxuIik7CisKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCh2ID0gZ2V0X3ZwZSh0Y2xpbWl0KSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiB1bmFibGUgdG8gZ2V0IHZwZVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlwcl93YXJuaW5nKCJWUEUgbG9hZGVyOiB1bmFibGUgdG8gZ2V0IHZwZVxuIik7CisKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJc3RhdGUgPSB4Y2hnKCZ2LT5zdGF0ZSwgVlBFX1NUQVRFX0lOVVNFKTsKQEAgLTExMDEsOCArMTExNiw2IEBACiAJdi0+c2hhcmVkX3B0ciA9IE5VTEw7CiAJdi0+X19zdGFydCA9IDA7CiAKLW91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OTQsMTQgKzE2MDcsMTQgQEAKIHsKIAlzdHJ1Y3QgdnBlICp2LCAqbjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCBuLCAmdnBlY29udHJvbC52cGVfbGlzdCwgbGlzdCkgewotCQlpZiAodi0+c3RhdGUgIT0gVlBFX1NUQVRFX1VOVVNFRCkgewotCQkJcmVsZWFzZV92cGUodik7Ci0JCX0KLQl9Ci0KIAlkZXZpY2VfZGVsKCZ2cGVfZGV2aWNlKTsKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgbW9kdWxlX25hbWUpOworCisJLyogTm8gbG9ja2luZyBuZWVkZWQgaGVyZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCBuLCAmdnBlY29udHJvbC52cGVfbGlzdCwgbGlzdCkgeworCQlpZiAodi0+c3RhdGUgIT0gVlBFX1NUQVRFX1VOVVNFRCkKKwkJCXJlbGVhc2VfdnBlKHYpOworCX0KIH0KIAogbW9kdWxlX2luaXQodnBlX21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCmluZGV4IGYzNjhjNzMuLmIzMmI0YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwpAQCAtNTUsNyArNTUsNiBAQAogCSAqIGludC1oYW5kbGVyIGlzIG5vdCBvbiBib290c3RyYXAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNIHwgU1QwX0JFVik7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCS8qIHNldHRpbmcgaXJxIHRyaWdnZXIgbW9kZSAqLwogCXNldF9pcnFfdHJpZ2dlcl9tb2RlKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKaW5kZXggODkwZjc3OTIuLjQ1NGI1MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKQEAgLTE2MywzMyArMTYzLDM0IEBACiAKIC8qCiAgKiBJbiB0aGUgTGludXgga2VybmVsLCB3ZSBzdXBwb3J0IHNlbGVjdGlvbiBvZiBGUFIgZm9ybWF0IG9uIHRoZQotICogYmFzaXMgb2YgdGhlIFN0YXR1cy5GUiBiaXQuICBUaGlzIGRvZXMgaW1wbHkgdGhhdCwgaWYgYSBmdWxsIDMyCi0gKiBGUFJzIGFyZSBkZXNpcmVkLCB0aGVyZSBuZWVkcyB0byBiZSBhIGZsaXAtZmxvcCB0aGF0IGNhbiBiZSB3cml0dGVuCi0gKiB0byBvbmUgYXQgdGhhdCBiaXQgcG9zaXRpb24uICBJbiBhbnkgY2FzZSwgTzMyIE1JUFMgQUJJIHVzZXMKLSAqIG9ubHkgdGhlIGV2ZW4gRlBScyAoU3RhdHVzLkZSID0gMCkuCisgKiBiYXNpcyBvZiB0aGUgU3RhdHVzLkZSIGJpdC4gIElmIGFuIEZQVSBpcyBub3QgcHJlc2VudCwgdGhlIEZSIGJpdAorICogaXMgaGFyZHdpcmVkIHRvIHplcm8sIHdoaWNoIHdvdWxkIGltcGx5IGEgMzItYml0IEZQVSBldmVuIGZvcgorICogNjQtYml0IENQVXMuICBGb3IgNjQtYml0IGtlcm5lbHMgd2l0aCBubyBGUFUgd2UgdXNlIFRJRl8zMkJJVF9SRUdTCisgKiBhcyBhIHByb3h5IGZvciB0aGUgRlIgYml0IHNvIHRoYXQgYSA2NC1iaXQgRlBVIGlzIGVtdWxhdGVkLiAgSW4gYW55CisgKiBjYXNlLCBmb3IgYSAzMi1iaXQga2VybmVsIHdoaWNoIHVzZXMgdGhlIE8zMiBNSVBTIEFCSSwgb25seSB0aGUKKyAqIGV2ZW4gRlBScyBhcmUgdXNlZCAoU3RhdHVzLkZSID0gMCkuCiAgKi8KLQotI2RlZmluZSBDUDBfU1RBVFVTX0ZSX1NVUFBPUlQKLQotI2lmZGVmIENQMF9TVEFUVVNfRlJfU1VQUE9SVAotI2RlZmluZSBGUl9CSVQgU1QwX0ZSCitzdGF0aWMgaW5saW5lIGludCBjb3AxXzY0Yml0KHN0cnVjdCBwdF9yZWdzICp4Y3ApCit7CisJaWYgKGNwdV9oYXNfZnB1KQorCQlyZXR1cm4geGNwLT5jcDBfc3RhdHVzICYgU1QwX0ZSOworI2lmZGVmIENPTkZJR182NEJJVAorCXJldHVybiAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVRfUkVHUyk7CiAjZWxzZQotI2RlZmluZSBGUl9CSVQgMAorCXJldHVybiAwOwogI2VuZGlmCit9CiAKLSNkZWZpbmUgU0lGUk9NUkVHKHNpLCB4KSAoKHNpKSA9IFwKLQkJCSh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpIHx8ICEoeCAmIDEpID8gXAotCQkJKGludCljdHgtPmZwclt4XSA6IFwKLQkJCShpbnQpKGN0eC0+ZnByW3ggJiB+MV0gPj4gMzIgKSkKLSNkZWZpbmUgU0lUT1JFRyhzaSwgeCkJKGN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSA9IFwKLQkJCSh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpIHx8ICEoeCAmIDEpID8gXAorI2RlZmluZSBTSUZST01SRUcoc2ksIHgpICgoc2kpID0gY29wMV82NGJpdCh4Y3ApIHx8ICEoeCAmIDEpID8gXAorCQkJKGludCljdHgtPmZwclt4XSA6IChpbnQpKGN0eC0+ZnByW3ggJiB+MV0gPj4gMzIpKQorCisjZGVmaW5lIFNJVE9SRUcoc2ksIHgpCShjdHgtPmZwclt4ICYgfihjb3AxXzY0Yml0KHhjcCkgPT0gMCldID0gXAorCQkJY29wMV82NGJpdCh4Y3ApIHx8ICEoeCAmIDEpID8gXAogCQkJY3R4LT5mcHJbeCAmIH4xXSA+PiAzMiA8PCAzMiB8ICh1MzIpKHNpKSA6IFwKIAkJCWN0eC0+ZnByW3ggJiB+MV0gPDwgMzIgPj4gMzIgfCAodTY0KShzaSkgPDwgMzIpCiAKLSNkZWZpbmUgRElGUk9NUkVHKGRpLCB4KSAoKGRpKSA9IFwKLQkJCWN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSkKLSNkZWZpbmUgRElUT1JFRyhkaSwgeCkJKGN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSBcCi0JCQk9IChkaSkpCisjZGVmaW5lIERJRlJPTVJFRyhkaSwgeCkgKChkaSkgPSBjdHgtPmZwclt4ICYgfihjb3AxXzY0Yml0KHhjcCkgPT0gMCldKQorI2RlZmluZSBESVRPUkVHKGRpLCB4KQkoY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSA9IChkaSkpCiAKICNkZWZpbmUgU1BGUk9NUkVHKHNwLCB4KSBTSUZST01SRUcoKHNwKS5iaXRzLCB4KQogI2RlZmluZSBTUFRPUkVHKHNwLCB4KQlTSVRPUkVHKChzcCkuYml0cywgeCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYwppbmRleCAxYzU1NWU2Li5kOWFlMWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCkBAIC02Miw4ICs2Miw2IEBACiAJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh5LCAibmVnIik7CiAJfQogCi0JaWYgKGllZWU3NTRkcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeCwgIm5lZyIsIHgpOwogCXJldHVybiB4OwogfQogCkBAIC03NiwxNSArNzQsMTIgQEAKIAlDTEVBUkNYOwogCUZMVVNIWERQOwogCisJLyogQ2xlYXIgc2lnbiBBTFdBWVMsIGlycmVzcGVjdGl2ZSBvZiBOYU4gKi8KKwlEUFNJR04oeCkgPSAwOworCiAJaWYgKHhjID09IElFRUU3NTRfQ0xBU1NfU05BTikgewotCQlTRVRDWChJRUVFNzU0X0lOVkFMSURfT1BFUkFUSU9OKTsKLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KGllZWU3NTRkcF9pbmRlZigpLCAibmVnIik7CisJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdChpZWVlNzU0ZHBfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0ZHBfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCURQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKaW5kZXggNzcwZjBmNC4uMzE3NTQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYwpAQCAtNjIsOCArNjIsNiBAQAogCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoeSwgIm5lZyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJuZWciLCB4KTsKIAlyZXR1cm4geDsKIH0KIApAQCAtNzYsMTUgKzc0LDEyIEBACiAJQ0xFQVJDWDsKIAlGTFVTSFhTUDsKIAorCS8qIENsZWFyIHNpZ24gQUxXQVlTLCBpcnJlc3BlY3RpdmUgb2YgTmFOICovCisJU1BTSUdOKHgpID0gMDsKKwogCWlmICh4YyA9PSBJRUVFNzU0X0NMQVNTX1NOQU4pIHsKLQkJU0VUQ1goSUVFRTc1NF9JTlZBTElEX09QRVJBVElPTik7CiAJCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdChpZWVlNzU0c3BfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCVNQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCmluZGV4IDdlNDhlNzYxLi45MzY3ZTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwpAQCAtOTAsNiArOTAsOSBAQAogewogCXZvaWQgKnJldDsKIAorCWlmIChkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZyZXQpKQorCQlyZXR1cm4gcmV0OworCiAJZ2ZwID0gbWFzc2FnZV9nZnBfZmxhZ3MoZGV2LCBnZnApOwogCiAJcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CkBAIC0xMjIsNiArMTI1LDEwIEBACiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2YWRkcjsKKwlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpCisJCXJldHVybjsKIAogCXBsYXRfdW5tYXBfZG1hX21lbShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMTVhYTE5MC4uOGQxZjRmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KQEAgLTEzMiw3ICsxMzMsMTAgQEAKIAlpbmNfcHJlZW1wdF9jb3VudCgpOwogCWlkeCA9IChhZGRyID4+IFBBR0VfU0hJRlQpICYgKEZJWF9OX0NPTE9VUlMgLSAxKTsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCkgKworCQkoaW5faW50ZXJydXB0KCkgPyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIDogMCk7CisjZWxzZQorCWlkeCArPSBpbl9pbnRlcnJ1cHQoKSA/IEZJWF9OX0NPTE9VUlMgOiAwOwogI2VuZGlmCiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9DTUFQX0VORCAtIGlkeCk7CiAJcHRlID0gbWtfcHRlKHBhZ2UsIFBBR0VfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCmluZGV4IGI1NWMyZDEuLjVhYjVmYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLW1pcHMuYwpAQCAtMzIsNiArMzIsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgbWlwc19zY19pbnYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJdW5zaWduZWQgbG9uZyBsc2l6ZSA9IGNwdV9zY2FjaGVfbGluZV9zaXplKCk7CisJdW5zaWduZWQgbG9uZyBhbG1hc2sgPSB+KGxzaXplIC0gMSk7CisKKwljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9TRCwgYWRkciAmIGFsbWFzayk7CisJY2FjaGVfb3AoSGl0X1dyaXRlYmFja19JbnZfU0QsIChhZGRyICsgc2l6ZSAtIDEpICYgYWxtYXNrKTsKIAlibGFzdF9pbnZfc2NhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwppbmRleCBkZjllNTI2Li40NjlkOWIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwpAQCAtNzAsMTEgKzcwLDEyIEBACiAJbGF1bmNoLT5zcCA9IHNwOwogCWxhdW5jaC0+YTAgPSBhMDsKIAotCS8qIE1ha2Ugc3VyZSB0YXJnZXQgc2VlcyBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgZ28gYml0ICovCi0Jc21wX21iKCk7Ci0KKwlzbXBfd21iKCk7ICAgICAgICAgICAgICAvKiBUYXJnZXQgbXVzdCBzZWUgcGFyYW1ldGVycyBiZWZvcmUgZ28gKi8KIAlsYXVuY2gtPmZsYWdzIHw9IExBVU5DSF9GR087CisJc21wX3dtYigpOyAgICAgICAgICAgICAgLyogVGFyZ2V0IG11c3Qgc2VlIGdvIGJlZm9yZSB3ZSBwb2xsICAqLworCiAJd2hpbGUgKChsYXVuY2gtPmZsYWdzICYgTEFVTkNIX0ZHT05FKSA9PSAwKQogCQk7CisJc21wX3JtYigpOyAgICAgIC8qIFRhcmdldCB3aWxsIGJlIHVwZGF0aW5nIGZsYWdzIHNvb24gKi8KIAlwcl9kZWJ1ZygibGF1bmNoOiBjcHUlZCBnb25lIVxuIiwgY3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDNlMGE5YjMuLjRjM2ZjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtODcsNyArODcsNyBAQAogCQlkdW1teSA9IEJPTklUT19QQ0lNQVBfQ0ZHOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCi0JCWlycSA9IHJlYWRsKCh1MzIgKilfcGNpY3RybF9ib25pdG9fcGNpY2ZnKTsKKwkJaXJxID0gX19yYXdfcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCQlpcnEgJj0gMHhmZjsKIAkJQk9OSVRPX1BDSU1BUF9DRkcgPSAwOwpAQCAtMzc5LDM4ICszNzksNDMgQEAKIAogc3RhdGljIGludCBfX2luaXRkYXRhIG1zY19ucl9laWNpcnFzID0gQVJSQVlfU0laRShtc2NfZWljaXJxbWFwKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogLyoKICAqIFRoaXMgR0lDIHNwZWNpZmljIHRhYnVsYXIgYXJyYXkgZGVmaW5lcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBFeHRlcm5hbAogICogSW50ZXJydXB0cyBhbmQgQ1BVcy9Db3JlIEludGVycnVwdHMuIFRoZSBuYXR1cmUgb2YgdGhlIEV4dGVybmFsCiAgKiBJbnRlcnJ1cHRzIGlzIGFsc28gZGVmaW5lZCBoZXJlIC0gcG9sYXJpdHkvdHJpZ2dlci4KICAqLworCisjZGVmaW5lIEdJQ19DUFVfTk1JIEdJQ19NQVBfVE9fTk1JX01TSwogc3RhdGljIHN0cnVjdCBnaWNfaW50cl9tYXAgZ2ljX2ludHJfbWFwW0dJQ19OVU1fSU5UUlNdID0gewotCXsgR0lDX0VYVF9JTlRSKDApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMiksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDMpLCAJMCwJR0lDX0NQVV9JTlQwLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNCksIAkwLAlHSUNfQ1BVX0lOVDEsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig1KSwgCTAsCUdJQ19DUFVfSU5UMiwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDYpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNyksIAkwLAlHSUNfQ1BVX0lOVDQsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig4KSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDkpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTApLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEyKSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEzKSwgCTAsCUdJQ19NQVBfVE9fTk1JX01TSywJR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTQpLCAJMCwJR0lDX01BUF9UT19OTUlfTVNLLAlHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxNSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotLyogVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBnZW5lcmFsIGludGVycnVwdHMgbm93IHdlIGRvIElQSSBvbmVzICovCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJIAlYLAkJMCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgMCwgR0lDX0NQVV9JTlQwLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDEsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMiwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDQsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfTk1JLCAgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9OTUksICBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCSAgICAgICAgMCB9LAorCS8qIFRoZSByZW1haW5kZXIgb2YgdGhpcyB0YWJsZSBpcyBpbml0aWFsaXNlZCBieSBmaWxsX2lwaV9tYXAgKi8KIH07Ci0jZW5kaWYKIAogLyoKICAqIEdDTVAgbmVlZHMgdG8gYmUgZGV0ZWN0ZWQgYmVmb3JlIGFueSBTTVAgaW5pdGlhbGlzYXRpb24KICAqLwogaW50IF9faW5pdCBnY21wX3Byb2JlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogeworCWlmIChtaXBzX3JldmlzaW9uX3Njb25pZCAhPSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQpIHsKKwkJZ2NtcF9wcmVzZW50ID0gMDsKKwkJcmV0dXJuIGdjbXBfcHJlc2VudDsKKwl9CisKIAlpZiAoZ2NtcF9wcmVzZW50ID49IDApCiAJCXJldHVybiBnY21wX3ByZXNlbnQ7CiAKQEAgLTQxOSwyMCArNDI0LDM1IEBACiAJZ2NtcF9wcmVzZW50ID0gKEdDTVBHQ0IoR0NNUEIpICYgR0NNUF9HQ0JfR0NNUEJfR0NNUEJBU0VfTVNLKSA9PSBHQ01QX0JBU0VfQUREUjsKIAogCWlmIChnY21wX3ByZXNlbnQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJHQ01QIHByZXNlbnRcbiIpOworCQlwcl9kZWJ1ZygiR0NNUCBwcmVzZW50XG4iKTsKIAlyZXR1cm4gZ2NtcF9wcmVzZW50OwogfQogCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBJT0NVJ3MgcHJlc2VudCAqLworaW50IF9faW5pdCBnY21wX25pb2N1KHZvaWQpCit7CisgIHJldHVybiBnY21wX3ByZXNlbnQgPworICAgIChHQ01QR0NCKEdDKSAmIEdDTVBfR0NCX0dDX05VTUlPQ1VfTVNLKSA+PiBHQ01QX0dDQl9HQ19OVU1JT0NVX1NIRiA6CisgICAgMDsKK30KKworLyogU2V0IEdDTVAgcmVnaW9uIGF0dHJpYnV0ZXMgKi8KK3ZvaWQgX19pbml0IGdjbXBfc2V0cmVnaW9uKGludCByZWdpb24sIHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHR5cGUpCit7CisJR0NNUEdDQm4oQ014QkFTRSwgcmVnaW9uKSA9IGJhc2U7CisJR0NNUEdDQm4oQ014TUFTSywgcmVnaW9uKSA9IG1hc2sgfCB0eXBlOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiBzdGF0aWMgdm9pZCBfX2luaXQgZmlsbF9pcGlfbWFwMShpbnQgYmFzZWludHIsIGludCBjcHUsIGludCBjcHVwaW4pCiB7CiAJaW50IGludHIgPSBiYXNlaW50ciArIGNwdTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaW50cm51bSA9IEdJQ19FWFRfSU5UUihpbnRyKTsKIAlnaWNfaW50cl9tYXBbaW50cl0uY3B1bnVtID0gY3B1OwogCWdpY19pbnRyX21hcFtpbnRyXS5waW4gPSBjcHVwaW47CiAJZ2ljX2ludHJfbWFwW2ludHJdLnBvbGFyaXR5ID0gR0lDX1BPTF9QT1M7CiAJZ2ljX2ludHJfbWFwW2ludHJdLnRyaWd0eXBlID0gR0lDX1RSSUdfRURHRTsKLQlnaWNfaW50cl9tYXBbaW50cl0uaXBpZmxhZyA9IDE7CisJZ2ljX2ludHJfbWFwW2ludHJdLmZsYWdzID0gR0lDX0ZMQUdfSVBJOwogCWlwaV9tYXBbY3B1XSB8PSAoMSA8PCAoY3B1cGluICsgMikpOwogfQogCkBAIC00NDcsNiArNDY3LDEyIEBACiB9CiAjZW5kaWYKIAordm9pZCBfX2luaXQgYXJjaF9pbml0X2lwaWlycShpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCit7CisJc2V0dXBfaXJxKGlycSwgYWN0aW9uKTsKKwlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Cit9CisKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAlpbml0X2k4MjU5X2lycXMoKTsKQEAgLTQ1OCwxMiArNDg0LDE3IEBACiAJCUdDTVBHQ0IoR0lDQkEpID0gR0lDX0JBU0VfQUREUiB8IEdDTVBfR0NCX0dJQ0JBX0VOX01TSzsKIAkJZ2ljX3ByZXNlbnQgPSAxOwogCX0gZWxzZSB7Ci0JCV9tc2MwMV9iaXVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoTVNDMDFfQklVX1JFR19CQVNFLCBNU0MwMV9CSVVfQUREUlNQQUNFX1NaKTsKLQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCi0JCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4gTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQlpZiAobWlwc19yZXZpc2lvbl9zY29uaWQgPT0gTUlQU19SRVZJU0lPTl9TQ09OX1JPQ0lUKSB7CisJCQlfbXNjMDFfYml1X2Jhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJaW9yZW1hcF9ub2NhY2hlKE1TQzAxX0JJVV9SRUdfQkFTRSwKKwkJCQkJCU1TQzAxX0JJVV9BRERSU1BBQ0VfU1opOworCQkJZ2ljX3ByZXNlbnQgPSAoUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKSAmCisJCQkJCU1TQzAxX1NDX0NGR19HSUNQUkVTX01TSykgPj4KKwkJCQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfU0hGOworCQl9CiAJfQogCWlmIChnaWNfcHJlc2VudCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdJQyBwcmVzZW50XG4iKTsKKwkJcHJfZGVidWcoIkdJQyBwcmVzZW50XG4iKTsKIAogCXN3aXRjaCAobWlwc19yZXZpc2lvbl9zY29uaWQpIHsKIAljYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVDoKQEAgLTUyNiwxNiArNTU3LDE2IEBACiAJCQkJCQkmY29yZWhpX2lycWFjdGlvbik7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJaWYgKGdpY19wcmVzZW50KSB7CiAJCS8qIEZJWE1FICovCiAJCWludCBpOwotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCWdpY19jYWxsX2ludF9iYXNlID0gR0lDX05VTV9JTlRSUyAtIE5SX0NQVVM7CiAJCWdpY19yZXNjaGVkX2ludF9iYXNlID0gZ2ljX2NhbGxfaW50X2Jhc2UgLSBOUl9DUFVTOwotCiAJCWZpbGxfaXBpX21hcCgpOwotCQlnaWNfaW5pdChHSUNfQkFTRV9BRERSLCBHSUNfQUREUlNQQUNFX1NaLCBnaWNfaW50cl9tYXAsIEFSUkFZX1NJWkUoZ2ljX2ludHJfbWFwKSwgTUlQU19HSUNfSVJRX0JBU0UpOworI2VuZGlmCisJCWdpY19pbml0KEdJQ19CQVNFX0FERFIsIEdJQ19BRERSU1BBQ0VfU1osIGdpY19pbnRyX21hcCwKKwkJCQlBUlJBWV9TSVpFKGdpY19pbnRyX21hcCksIE1JUFNfR0lDX0lSUV9CQVNFKTsKIAkJaWYgKCFnY21wX3ByZXNlbnQpIHsKIAkJCS8qIEVuYWJsZSB0aGUgR0lDICovCiAJCQlpID0gUkVHKF9tc2MwMV9iaXVfYmFzZSwgTVNDMDFfU0NfQ0ZHKTsKQEAgLTU0Myw3ICs1NzQsNyBAQAogCQkJCShpIHwgKDB4MSA8PCBNU0MwMV9TQ19DRkdfR0lDRU5BX1NIRikpOwogCQkJcHJfZGVidWcoIkdJQyBFbmFibGVkXG4iKTsKIAkJfQotCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCQlpZiAoY3B1X2hhc192aW50KSB7CiAJCQlzZXRfdmlfaGFuZGxlcihNSVBTQ1BVX0lOVF9JUEkwLCBtYWx0YV9pcGlfaXJxZGlzcGF0Y2gpOwpAQCAtNTU2LDE2ICs1ODcsMTQgQEAKIAkJd3JpdGVfYzBfc3RhdHVzKDB4MTEwMGRjMDApOwogCQlwcmludGsoIkNQVSVkOiBzdGF0dXMgcmVnaXN0ZXIgZnJjICUwOHhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmVhZF9jMF9zdGF0dXMoKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKLQkJCXNldHVwX2lycShNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19DQUxMX0lOVChpKSwgJmlycV9jYWxsKTsKLQkJCXNldF9pcnFfaGFuZGxlcihNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19SRVNDSEVEX0lOVChpKSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCQkJc2V0X2lycV9oYW5kbGVyKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX0NBTExfSU5UKGkpLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlhcmNoX2luaXRfaXBpaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKKwkJCQkJIEdJQ19SRVNDSEVEX0lOVChpKSwgJmlycV9yZXNjaGVkKTsKKwkJCWFyY2hfaW5pdF9pcGlpcnEoTUlQU19HSUNfSVJRX0JBU0UgKworCQkJCQkgR0lDX0NBTExfSU5UKGkpLCAmaXJxX2NhbGwpOwogCQl9CisjZW5kaWYKIAl9IGVsc2UgeworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCQkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMgKi8KIAkJaWYgKGNwdV9oYXNfdmVpYykgewogCQkJc2V0X3ZpX2hhbmRsZXIgKE1TQzAxRV9JTlRfU1cwLCBpcGlfcmVzY2hlZF9kaXNwYXRjaCk7CkBAIC01ODAsMTQgKzYwOSwxMCBAQAogCQkJY3B1X2lwaV9yZXNjaGVkX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX1JFU0NIRURfSVJROwogCQkJY3B1X2lwaV9jYWxsX2lycSA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgTUlQU19DUFVfSVBJX0NBTExfSVJROwogCQl9Ci0KLQkJc2V0dXBfaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7Ci0JCXNldHVwX2lycShjcHVfaXBpX2NhbGxfaXJxLCAmaXJxX2NhbGwpOwotCi0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX3Jlc2NoZWRfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JCXNldF9pcnFfaGFuZGxlcihjcHVfaXBpX2NhbGxfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JfQorCQlhcmNoX2luaXRfaXBpaXJxKGNwdV9pcGlfcmVzY2hlZF9pcnEsICZpcnFfcmVzY2hlZCk7CisJCWFyY2hfaW5pdF9pcGlpcnEoY3B1X2lwaV9jYWxsX2lycSwgJmlycV9jYWxsKTsKICNlbmRpZgorCX0KIH0KIAogdm9pZCBtYWx0YV9iZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwppbmRleCA2MTg4OGZmLi45MDM1YzY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKQEAgLTU0LDcgKzU0LDggQEAKIHsKIAljaGFyICptZW1zaXplX3N0cjsKIAl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKLQljaGFyIGNtZGxpbmVbQ0xfU0laRV0sICpwdHI7CisJY2hhciAqcHRyOworCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCS8qIG90aGVyd2lzZSBsb29rIGluIHRoZSBlbnZpcm9ubWVudCAqLwogCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCmluZGV4IGI5NzQzMTkwNi4uMmZiZmExYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQorI2luY2x1ZGUgPGFzbS9nY21wcmVncy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oPgpAQCAtMjAxLDcgKzIwMSwxMSBAQAogCQltc2NfbWVtX3Jlc291cmNlLnN0YXJ0ID0gc3RhcnQgJiBtYXNrOwogCQltc2NfbWVtX3Jlc291cmNlLmVuZCA9IChzdGFydCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLm1lbV9vZmZzZXQgPSAoc3RhcnQgJiBtYXNrKSAtIChtYXAgJiBtYXNrKTsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMCwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9CQVNMLCBzdGFydCk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NU0tMLCBtYXNrKTsKIAkJTVNDX1JFQUQoTVNDMDFfUENJX1NDMlBJT01BUEwsIG1hcCk7CkBAIC0yMDksNyArMjEzLDExIEBACiAJCW1zY19pb19yZXNvdXJjZS5lbmQgPSAobWFwICYgbWFzaykgfCB+bWFzazsKIAkJbXNjX2NvbnRyb2xsZXIuaW9fb2Zmc2V0ID0gMDsKIAkJaW9wb3J0X3Jlc291cmNlLmVuZCA9IH5tYXNrOwotCisjaWZkZWYgQ09ORklHX01JUFNfQ01QCisJCWlmIChnY21wX25pb2N1KCkpCisJCQlnY21wX3NldHJlZ2lvbigxLCBzdGFydCwgbWFzaywKKwkJCQlHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMSk7CisjZW5kaWYKIAkJLyogSWYgcmFuZ2VzIG92ZXJsYXAgSS9PIHRha2VzIHByZWNlZGVuY2UuICAqLwogCQlzdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJZW5kID0gc3RhcnQgfCB+bWFzazsKQEAgLTI0MSwzICsyNDksMTYgQEAKIAogCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNvbnRyb2xsZXIpOwogfQorCisvKiBFbmFibGUgUENJIDIuMSBjb21wYXRpYmlsaXR5IGluIFBJSVg0ICovCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZGxjc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCBvZGxjLCBuZGxjOworCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4ODIsICZvZGxjKTsKKwkvKiBFbmFibGUgcGFzc2l2ZSByZWxlYXNlcyBhbmQgZGVsYXllZCB0cmFuc2FjdGlvbiAqLworCW5kbGMgPSBvZGxjIHwgNzsKKwkodm9pZCkgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MiwgbmRsYyk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wLAorCXF1aXJrX2RsY3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCmluZGV4IGYwODBmMTEuLjdhY2E3ZDUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9hY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlub19hY3Rpb24sCi0JLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9CQkiVGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwppbmRleCAxOGIxOTI3OC4uODgzNmM2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcG54OHh4eF90aW1lcl9pcnEgPSB7CiAJLmhhbmRsZXIJPSBwbng4eHh4X3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJwbng4eHh4X3RpbWVyIiwKIH07CiAKQEAgLTcyLDcgKzcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbW9ub3RvbmljX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IG1vbm90b25pY19pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9ICJNb25vdG9uaWMgdGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCmluZGV4IDY1NWNiOGQuLjU3NWNkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIG90aGVyd2lzZSwgdGhlIG9wcm9maWxlIHRvb2wgd2lsbCBub3QgcmVjb2duaXplIHRoaXMgYW5kIGNvbXBsYWluIGFib3V0CiAgKiAiY3B1X3R5cGUgJ3Vuc2V0JyBpcyBub3QgdmFsaWQiLgogICovCi0jZGVmaW5lIExPT05HU09OMl9DUFVfVFlQRQkibWlwcy9nb2Rzb24yIgorI2RlZmluZSBMT09OR1NPTjJfQ1BVX1RZUEUJIm1pcHMvbG9vbmdzb24yIgogCiAjZGVmaW5lIExPT05HU09OMl9DT1VOVEVSMV9FVkVOVChldmVudCkJKChldmVudCAmIDB4MGYpIDw8IDUpCiAjZGVmaW5lIExPT05HU09OMl9DT1VOVEVSMl9FVkVOVChldmVudCkJKChldmVudCAmIDB4MGYpIDw8IDkpCkBAIC00NCw3ICs0NCw3IEBACiAJdW5zaWduZWQgaW50IGN0cmw7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlc2V0X2NvdW50ZXIxOwogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXNldF9jb3VudGVyMjsKLQlpbnQgY250MV9lbmFsYmVkLCBjbnQyX2VuYWxiZWQ7CisJaW50IGNudDFfZW5hYmxlZCwgY250Ml9lbmFibGVkOwogfSByZWc7CiAKIERFRklORV9TUElOTE9DSyhzYW1wbGVfbG9jayk7CkBAIC04MSw4ICs4MSw4IEBACiAKIAlyZWcuY3RybCA9IGN0cmw7CiAKLQlyZWcuY250MV9lbmFsYmVkID0gY2ZnWzBdLmVuYWJsZWQ7Ci0JcmVnLmNudDJfZW5hbGJlZCA9IGNmZ1sxXS5lbmFibGVkOworCXJlZy5jbnQxX2VuYWJsZWQgPSBjZmdbMF0uZW5hYmxlZDsKKwlyZWcuY250Ml9lbmFibGVkID0gY2ZnWzFdLmVuYWJsZWQ7CiAKIH0KIApAQCAtOTksNyArOTksNyBAQAogc3RhdGljIHZvaWQgbG9vbmdzb24yX2NwdV9zdGFydCh2b2lkICphcmdzKQogewogCS8qIFN0YXJ0IGFsbCBjb3VudGVycyBvbiBjdXJyZW50IENQVSAqLwotCWlmIChyZWcuY250MV9lbmFsYmVkIHx8IHJlZy5jbnQyX2VuYWxiZWQpCisJaWYgKHJlZy5jbnQxX2VuYWJsZWQgfHwgcmVnLmNudDJfZW5hYmxlZCkKIAkJd3JpdGVfYzBfcGVyZmN0cmwocmVnLmN0cmwpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgKi8KIAogCS8qIENoZWNrIHdoZXRoZXIgdGhlIGlycSBiZWxvbmdzIHRvIG1lICovCi0JZW5hYmxlZCA9IHJlZy5jbnQxX2VuYWxiZWQgfCByZWcuY250Ml9lbmFsYmVkOworCWVuYWJsZWQgPSByZWcuY250MV9lbmFibGVkIHwgcmVnLmNudDJfZW5hYmxlZDsKIAlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMTM2LDEyICsxMzYsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKIAogCWlmIChjb3VudGVyMSAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7Ci0JCWlmIChyZWcuY250MV9lbmFsYmVkKQorCQlpZiAocmVnLmNudDFfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMCk7CiAJCWNvdW50ZXIxID0gcmVnLnJlc2V0X2NvdW50ZXIxOwogCX0KIAlpZiAoY291bnRlcjIgJiBMT09OR1NPTjJfUEVSRkNOVF9PVkVSRkxPVykgewotCQlpZiAocmVnLmNudDJfZW5hbGJlZCkKKwkJaWYgKHJlZy5jbnQyX2VuYWJsZWQpCiAJCQlvcHJvZmlsZV9hZGRfc2FtcGxlKHJlZ3MsIDEpOwogCQljb3VudGVyMiA9IHJlZy5yZXNldF9jb3VudGVyMjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCmluZGV4IDEwOWM5NWMuLjMyNTQ4YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCkBAIC0zODUsNiArMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGludHI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlzdGF0aWMgY2hhciBwY2lpcnFmbGFnOworCWludCByZXQ7CiAjaWYgZGVmaW5lZChDT05GSUdfUE1DX01TUDcxMjBfR1cpIHx8IGRlZmluZWQoQ09ORklHX1BNQ19NU1A3MTIwX0VWQUwpCiAJdW5zaWduZWQgaW50CXZwZV9zdGF0dXM7CiAjZW5kaWYKQEAgLTQwMiwxMSArNDAzLDEzIEBACiAJICogYWxsb2NhdGlvbiBhc3NpZ25zIGFuIGludGVycnVwdCBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHBjaWlycWZsYWcgPT0gMCkgewotCQlyZXF1ZXN0X2lycShNU1BfSU5UX1BDSSwvKiBIYXJkY29kZWQgaW50ZXJuYWwgTVNQNzEyMCB3aXJpbmcgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEoTVNQX0lOVF9QQ0ksLyogSGFyZGNvZGVkIGludGVybmFsIE1TUDcxMjAgd2lyaW5nICovCiAJCQkJYnBjaV9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAogCQkJCSJQTUMgTVNQIFBDSSBIb3N0IiwKIAkJCQlwcmVnKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKIAkJcGNpaXJxZmxhZyA9IH4wOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL3Byb20uYyBiL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKaW5kZXggNDZjYTI0ZC4uYWQ1YmQxMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL3Byb20uYworKysgYi9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCkBAIC02OSw3ICs2OSw3IEBACiAKIHZvaWQgX19pbml0IHByb21fc2V0dXBfY21kbGluZSh2b2lkKQogewotCWNoYXIgY21kX2xpbmVbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgY21kX2xpbmVbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAljaGFyICpjcCwgKmJvYXJkOwogCWludCBwcm9tX2FyZ2M7CiAJY2hhciAqKnByb21fYXJndiwgKipwcm9tX2VudnA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCmluZGV4IDlhYThmMjkuLmM2ODUxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlSRU1PVEVfSFVCX1NFTkRfSU5UUihDT01QQUNUX1RPX05BU0lEX05PREVJRChjcHVfdG9fbm9kZShkZXN0aWQpKSwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgaXAyN19zZW5kX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKK3N0YXRpYyB2b2lkIGlwMjdfc2VuZF9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKaW5kZXggNmQwZTU5Zi4uZDY4MDJkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogc3RydWN0IGlycWFjdGlvbiBodWJfcnRfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gaHViX3J0X2NvdW50ZXJfaGFuZGxlciwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJodWItcnQiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IGJhNTk4MzkuLjQwNzAyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTExNywxMCArMTE3LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnFfZGlydHk7CiAKLQlpZiAoY3B1bWFza193ZWlnaHQobWFzaykgIT0gMSkgewotCQlwcmludGsoImF0dGVtcHRlZCB0byBzZXQgaXJxIGFmZmluaXR5IGZvciBpcnEgJWQgdG8gbXVsdGlwbGUgQ1BVc1xuIiwgaXJxKTsKLQkJcmV0dXJuIC0xOwotCX0KIAlpID0gY3B1bWFza19maXJzdChtYXNrKTsKIAogCS8qIENvbnZlcnQgbG9naWNhbCBDUFUgdG8gcGh5c2ljYWwgQ1BVICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCmluZGV4IDYzN2ExOTQuLjE1ZWE3NzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCkBAIC00MDMsMzYgKzQwMywzMSBAQAogc3RhdGljIGludCBzYnByb2ZfdGJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgbWlub3I7Ci0JaW50IGVyciA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOwogCW1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlpZiAobWlub3IgIT0gMCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKG1pbm9yICE9IDApCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHhjaGcoJnNicC5vcGVuLCBTQl9PUEVOSU5HKSAhPSBTQl9DTE9TRUQpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHhjaGcoJnNicC5vcGVuLCBTQl9PUEVOSU5HKSAhPSBTQl9DTE9TRUQpCisJCXJldHVybiAtRUJVU1k7CiAKIAltZW1zZXQoJnNicCwgMCwgc2l6ZW9mKHN0cnVjdCBzYnByb2ZfdGIpKTsKIAlzYnAuc2Jwcm9mX3RiYnVmID0gdm1hbGxvYyhNQVhfVEJTQU1QTEVfQllURVMpOwogCWlmICghc2JwLnNicHJvZl90YmJ1ZikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJc2JwLm9wZW4gPSBTQl9DTE9TRUQ7CisJCXdtYigpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKIAltZW1zZXQoc2JwLnNicHJvZl90YmJ1ZiwgMCwgTUFYX1RCU0FNUExFX0JZVEVTKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYnAudGJfc3luYyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2JwLnRiX3JlYWQpOwogCW11dGV4X2luaXQoJnNicC5sb2NrKTsKIAogCXNicC5vcGVuID0gU0JfT1BFTjsKKwl3bWIoKTsKIAotICBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2Jwcm9mX3RiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCkBAIC00NDAsNyArNDM1LDcgQEAKIAlpbnQgbWlub3I7CiAKIAltaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaWYgKG1pbm9yICE9IDAgfHwgIXNicC5vcGVuKQorCWlmIChtaW5vciAhPSAwIHx8IHNicC5vcGVuICE9IFNCX0NMT1NFRCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZzYnAubG9jayk7CkBAIC00NDksNyArNDQ0LDggQEAKIAkJc2Jwcm9mX3picHJvZl9zdG9wKCk7CiAKIAl2ZnJlZShzYnAuc2Jwcm9mX3RiYnVmKTsKLQlzYnAub3BlbiA9IDA7CisJc2JwLm9wZW4gPSBTQl9DTE9TRUQ7CisJd21iKCk7CiAKIAltdXRleF91bmxvY2soJnNicC5sb2NrKTsKIApAQCAtNTgzLDcgKzU3OSw4IEBACiAJfQogCXRiX2RldiA9IGRldjsKIAotCXNicC5vcGVuID0gMDsKKwlzYnAub3BlbiA9IFNCX0NMT1NFRDsKKwl3bWIoKTsKIAl0Yl9wZXJpb2QgPSB6YmJ1c19taHogKiAxMDAwMExMOwogCXByX2luZm8oREVWTkFNRSAiOiBpbml0aWFsaXplZCAtIHRiX3BlcmlvZCA9ICVsbGRcbiIsCiAJCShsb25nIGxvbmcpIHRiX3BlcmlvZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKaW5kZXggNjIzZmZjOS4uNTI3N2FhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCWJyZWFrOwogCX0KIAl0cy0+dHZfc2VjID0gc2VjOwotCXR2LT50dl9uc2VjID0gMDsKKwl0cy0+dHZfbnNlYyA9IDA7CiB9CiAKIGludCBydGNfbWlwc19zZXRfdGltZSh1bnNpZ25lZCBsb25nIHNlYykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggNjJkZjZhNS4uZjNiNjBlNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYTIwcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBhMjByX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJhMjByLXRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBjODYwODEwLi5kNjY4MDJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC04NSw3ICs4NSw3IEBACiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJaWYgKCFzdHJjbXAoaWQsICJzcGktYmFzZWNsayIpKQotCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDQpOworCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDIpOwogCWlmICghc3RyY21wKGlkLCAiaW1idXNfY2xrIikpCiAJCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyKTsKIAlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCWludCBhcmdjOwogCWludCAqYXJndjMyOwogCWludCBpOwkJCS8qIEFsd2F5cyBpZ25vcmUgdGhlICItYyIgYXQgYXJndlswXSAqLwotCWNoYXIgYnVpbHRpbltDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBidWlsdGluW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAlpZiAoZndfYXJnMCA+PSBDS1NFRzAgfHwgZndfYXJnMSA8IENLU0VHMCkgewogCQkvKgpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmVwcm9jZXNzX2NtZGxpbmUodm9pZCkKIHsKLQljaGFyIGNtZGxpbmVbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKnM7CiAKIAlzdHJjcHkoY21kbGluZSwgYXJjc19jbWRsaW5lKTsKQEAgLTgxNyw3ICs4MTcsOCBAQAogb3V0X3BkZXY6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIG91dF9ncGlvOgotCWdwaW9fcmVtb3ZlKCZpb2NsZWQtPmNoaXApOworCWlmIChncGlvY2hpcF9yZW1vdmUoJmlvY2xlZC0+Y2hpcCkpCisJCXJldHVybjsKIG91dF91bm1hcDoKIAlpb3VubWFwKGlvY2xlZC0+bW1pb2FkZHIpOwogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCA4YTNhNGRkLi4xNjdlMTBmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTEyOSw0MiArMTI5LDQ3IEBACiBzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwogI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQogCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCVwKLSh7CQkJCQkJXAotCV9fdHlwZW9mKCoocHRyKSkgX19ndV92YWw7CQlcCi0JdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQlcCi0JaW50IF9fZ3VfZXJyOwkJCQlcCi0JX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwlcCi0Jc3dpdGNoIChzaXplKSB7CQkJCVwKLQljYXNlIDE6ICBfX2dldF91c2VyX2FzbSgiYnUiKTsgYnJlYWs7CVwKLQljYXNlIDI6ICBfX2dldF91c2VyX2FzbSgiaHUiKTsgYnJlYWs7CVwKLQljYXNlIDQ6ICBfX2dldF91c2VyX2FzbSgiIiAgKTsgYnJlYWs7CVwKLQlkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CVwKLQl9CQkJCQlcCi0JeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwlcCi0JX19ndV9lcnI7CQkJCVwKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQkJCQlcCisJaW50IF9fZ3VfZXJyOwkJCQkJCQlcCisJX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6IHsJCQkJCQkJXAorCQl1bnNpZ25lZCBjaGFyIF9fZ3VfdmFsOwkJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiYnUiKTsJCQkJCVwKKwkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSopICZfX2d1X3ZhbDsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY2FzZSAyOiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgc2hvcnQgX19ndV92YWw7CQkJCVwKKwkJX19nZXRfdXNlcl9hc20oImh1Iik7CQkJCQlcCisJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkqKSAmX19ndV92YWw7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWNhc2UgNDogewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX2d1X3ZhbDsJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oIiIpOwkJCQkJXAorCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKikgJl9fZ3VfdmFsOwkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfdW5rbm93bigpOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAogfSkKIAotI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQlcCi0oewkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fZ3VfdmFsOwkJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCQlcCi0JaW50IF9fZ3VfZXJyOwkJCQkJXAotCV9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHRyKTsJCVwKLQlpZiAobGlrZWx5KF9fYWNjZXNzX29rKF9fZ3VfYWRkcixzaXplKSkpIHsJXAotCQlzd2l0Y2ggKHNpemUpIHsJCQkJXAotCQljYXNlIDE6ICBfX2dldF91c2VyX2FzbSgiYnUiKTsgYnJlYWs7CVwKLQkJY2FzZSAyOiAgX19nZXRfdXNlcl9hc20oImh1Iik7IGJyZWFrOwlcCi0JCWNhc2UgNDogIF9fZ2V0X3VzZXJfYXNtKCIiICApOyBicmVhazsJXAotCQlkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CVwKLQkJfQkJCQkJXAotCX0JCQkJCQlcCi0JZWxzZSB7CQkJCQkJXAotCQlfX2d1X2VyciA9IC1FRkFVTFQ7CQkJXAotCQlfX2d1X3ZhbCA9IDA7CQkJCVwKLQl9CQkJCQkJXAotCXggPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsJCVwKLQlfX2d1X2VycjsJCQkJCVwKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX2U7CQkJCQkJCQlcCisJaWYgKGxpa2VseShfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgKHB0ciksIChzaXplKSkpKQkJXAorCQlfZSA9IF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksIChwdHIpLCAoc2l6ZSkpOwkJXAorCWVsc2UgewkJCQkJCQkJXAorCQlfZSA9IC1FRkFVTFQ7CQkJCQkJXAorCQkoeCkgPSAoX190eXBlb2ZfXyh4KSkwOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlfZTsJCQkJCQkJCVwKIH0pCiAKICNkZWZpbmUgX19nZXRfdXNlcl9hc20oSU5TTikJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3NmY0MWJkLi4xMDU0OWRjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00NCwyNCArNDQsOCBAQAogICBST19EQVRBKFBBR0VfU0laRSkKIAogICAvKiB3cml0ZWFibGUgKi8KLSAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwotCURBVEFfREFUQQotCUNPTlNUUlVDVE9SUwotCX0KLQotICAuZGF0YV9ub3NhdmUgOiB7IE5PU0FWRV9EQVRBOyB9Ci0KLSAgLmRhdGEucGFnZV9hbGlnbmVkIDogeyBQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpOyB9Ci0gIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyBDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDMyKTsgfQotCi0gIC8qIHJhcmVseSBjaGFuZ2VkIGRhdGEgbGlrZSBjcHUgbWFwcyAqLwotICAuID0gQUxJR04oMzIpOwotICAuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpKSB7Ci0JUkVBRF9NT1NUTFlfREFUQSgzMik7Ci0JX2VkYXRhID0gLjsJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KLSAgfQotCi0gIC5kYXRhLmluaXRfdGFzayA6IHsgSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpOyB9CisgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKKyAgX2VkYXRhID0gLjsKIAogICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKQEAgLTc0LDIyICs1OCw4IEBACiAgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVDsKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQotICAuaW5pdC5kYXRhIDogeyBJTklUX0RBVEE7IH0KLSAgLnNldHVwLmluaXQgOiB7IElOSVRfU0VUVVAoMTYpOyB9Ci0KLSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5pbml0Y2FsbC5pbml0IDogewotCUlOSVRDQUxMUwotICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyBDT05fSU5JVENBTEw7IH0KLQotICBTRUNVUklUWV9JTklUCisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKyAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAgIC4gPSBBTElHTig0KTsKICAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKICAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9CkBAIC0xMDAsOCArNzAsNiBAQAogCS5leGl0LnRleHQgOiB7IEVYSVRfVEVYVDsgfQogCS5leGl0LmRhdGEgOiB7IEVYSVRfREFUQTsgfQogCi0gIC5pbml0LnJhbWZzIDogeyBJTklUX1JBTV9GUzsgfQotCiAgIFBFUkNQVSgzMikKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaCBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmgKaW5kZXggOGI0NTBlOS4uMmEwYmY3OSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaAorKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oCkBAIC0yMCw5ICsyMCw5IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX2lvYmNsazsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfdHNjX3Blcl9IWjsKIAotI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2NsaykKKyNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJbW4xMDMwMF9pb2NsawogLyogSWYgdGhpcyBwcm9jZXNzb3JzIGhhcyBhIGFub3RoZXIgY2xvY2ssIHVuY29tbWVudCB0aGUgYmVsb3cuICovCi0vKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvYmNsaykgKi8KKy8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJbW4xMDMwMF9pb2JjbGsgKi8KIAogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIE1OMTAzMDBfVFNDQ0xLCQlNTjEwMzAwX0lPQ0xLCiAKICNpZmRlZiBDT05GSUdfTU4xMDMwMF9SVEMKLSNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX3RzY19wZXJfSFopCisjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgltbjEwMzAwX3RzY19wZXJfSFoKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KICNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCShNTjEwMzAwX1RTQ0NMSy9IWikKICNlbmRpZiAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaAppbmRleCA3ZDUxNDg0Li42N2JlM2YyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmgKQEAgLTIwLDkgKzIwLDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfaW9iY2xrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF90c2NfcGVyX0haOwogCi0jZGVmaW5lIE1OMTAzMDBfSU9DTEsJCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvY2xrKQorI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQltbjEwMzAwX2lvY2xrCiAvKiBJZiB0aGlzIHByb2Nlc3NvcnMgaGFzIGEgYW5vdGhlciBjbG9jaywgdW5jb21tZW50IHRoZSBiZWxvdy4gKi8KLS8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9iY2xrKSAqLworLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwltbjEwMzAwX2lvYmNsayAqLwogCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgTU4xMDMwMF9UU0NDTEsJCU1OMTAzMDBfSU9DTEsKIAogI2lmZGVmIENPTkZJR19NTjEwMzAwX1JUQwotI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfdHNjX3Blcl9IWikKKyNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCW1uMTAzMDBfdHNjX3Blcl9IWgogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKE1OMTAzMDBfVFNDQ0xLL0haKQogI2VuZGlmIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGYzODhkYzYuLjUyNGQ5MzUyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE4LDYgKzE4LDcgQEAKIAlzZWxlY3QgQlVHCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVQKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCWhlbHAKIAkgIFRoZSBQQS1SSVNDIG1pY3JvcHJvY2Vzc29yIGlzIGRlc2lnbmVkIGJ5IEhld2xldHQtUGFja2FyZCBhbmQgdXNlZAogCSAgaW4gbWFueSBvZiB0aGVpciB3b3Jrc3RhdGlvbnMgJiBzZXJ2ZXJzIChIUDkwMDAgNzAwIGFuZCA4MDAgc2VyaWVzLApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggNWYzOWQ1NS4uMWUxYzgyNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0yOCw4ICsyOCw2IEBACiAjZGVmaW5lIEZfU0VUT1dOCTEyCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9TRVRTSUcJMTMJLyogIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX0dFVFNJRwkxNAkvKiAgZm9yIHNvY2tldHMuICovCi0jZGVmaW5lIEZfR0VUT1dOX0VYCTE1Ci0jZGVmaW5lIEZfU0VUT1dOX0VYCTE2CiAKIC8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCiAjZGVmaW5lIEZfUkRMQ0sJCTAxCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGRlM2ZlM2EuLjZmZWM0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0yMSw5ICsyMSw5IEBACiAjZGVmaW5lIEtFUk5FTF9NQVBfRU5ECQkoVE1QQUxJQVNfTUFQX1NUQVJUKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgKnZtYWxsb2Nfc3RhcnQ7CitleHRlcm4gdm9pZCAqcGFyaXNjX3ZtYWxsb2Nfc3RhcnQ7CiAjZGVmaW5lIFBDWExfRE1BX01BUF9TSVpFCSg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKCh1bnNpZ25lZCBsb25nKXZtYWxsb2Nfc3RhcnQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgodW5zaWduZWQgbG9uZylwYXJpc2Nfdm1hbGxvY19zdGFydCkKICNkZWZpbmUgVk1BTExPQ19FTkQJCShLRVJORUxfTUFQX0VORCkKICNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCBjZTkzMTMzLi4wZDY4MTg0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDI5ICsxLDExIEBACiAvKiBoYXJkaXJxLmg6IFBBLVJJU0MgaGFyZCBJUlEgc3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgotICoKLSAqIFRoZSBsb2NraW5nIGlzIHJlYWxseSBxdWl0ZSBpbnRlcmVzdGluZy4gIFRoZXJlJ3MgYSBjcHUtbG9jYWwKLSAqIGNvdW50IG9mIGhvdyBtYW55IGludGVycnVwdHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBhIGdsb2JhbAotICogbG9jay4gIEFuIGludGVycnVwdCBjYW4gb25seSBiZSBzZXJ2aWNlZCBpZiB0aGUgZ2xvYmFsIGxvY2sKLSAqIGlzIGZyZWUuICBZb3UgY2FuJ3QgYmUgc3VyZSBubyBtb3JlIGludGVycnVwdHMgYXJlIGJlaW5nCi0gKiBzZXJ2aWNlZCB1bnRpbCB5b3UndmUgYWNxdWlyZWQgdGhlIGxvY2sgYW5kIHRoZW4gY2hlY2tlZAotICogYWxsIHRoZSBwZXItY3B1IGludGVycnVwdCBjb3VudHMgYXJlIGFsbCB6ZXJvLiAgSXQncyBhIHNwZWNpYWxpc2VkCi0gKiBicl9sb2NrLCBhbmQgdGhhdCdzIGV4YWN0bHkgaG93IFNwYXJjIGRvZXMgaXQuICBXZSBkb24ndCBiZWNhdXNlCi0gKiBpdCdzIG1vcmUgbG9ja2luZyBmb3IgdXMuICBUaGlzIHdheSBpcyBsb2NrLWZyZWUgaW4gdGhlIGludGVycnVwdCBwYXRoLgogICovCiAKICNpZm5kZWYgX1BBUklTQ19IQVJESVJRX0gKICNkZWZpbmUgX1BBUklTQ19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgX19zb2Z0aXJxX3BlbmRpbmc7IC8qIHNldF9iaXQgaXMgdXNlZCBvbiB0aGlzICovCi19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CiAKICNlbmRpZiAvKiBfUEFSSVNDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzMDJmNjhkLi5hZWFkNDBiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNTksOCArNTksMTEgQEAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPmlhb3FbMF0gJiAzKSA/IDEgOiAwKQogI2RlZmluZSB1c2VyX3NwYWNlKHJlZ3MpCQkoKChyZWdzKS0+aWFzcVsxXSAhPSAwKSA/IDEgOiAwKQogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPmlhb3FbMF0gJiB+MykKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPmdyWzMwXSkKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZgorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGZkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSw0MCBAQAorLyogc3lzY2FsbC5oICovCisKKyNpZm5kZWYgX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXworI2RlZmluZSBfQVNNX1BBUklTQ19TWVNDQUxMX0hfCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5nclsyMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksCisJCQkJCSB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlCVUdfT04oaSk7CisKKwlzd2l0Y2ggKG4pIHsKKwljYXNlIDY6CisJCWFyZ3NbNV0gPSByZWdzLT5nclsyMV07CisJY2FzZSA1OgorCQlhcmdzWzRdID0gcmVncy0+Z3JbMjJdOworCWNhc2UgNDoKKwkJYXJnc1szXSA9IHJlZ3MtPmdyWzIzXTsKKwljYXNlIDM6CisJCWFyZ3NbMl0gPSByZWdzLT5nclsyNF07CisJY2FzZSAyOgorCQlhcmdzWzFdID0gcmVncy0+Z3JbMjVdOworCWNhc2UgMToKKwkJYXJnc1swXSA9IHJlZ3MtPmdyWzI2XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCisjZW5kaWYgLypfQVNNX1BBUklTQ19TWVNDQUxMX0hfKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGFjNzc1YTcuLjdlY2MxMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMzIsNiArMzIsMTEgQEAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbyAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQogI2RlZmluZSBpbml0X3N0YWNrICAgICAgICAgICAgICAoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCiAKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKW1mY3RsKDMwKSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCisKIC8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCiAKICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgICAgICAgICAgICAyCkBAIC00MCwxMSArNDUsNiBAQAogI2RlZmluZSBUSFJFQURfU0laRSAgICAgICAgICAgICAoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQogI2RlZmluZSBUSFJFQURfU0hJRlQgICAgICAgICAgICAoUEFHRV9TSElGVCArIFRIUkVBRF9TSVpFX09SREVSKQogCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwotI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKiltZmN0bCgzMCkpCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLwotCiAjZGVmaW5lIFBSRUVNUFRfQUNUSVZFX0JJVAkyOAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJKDEgPDwgUFJFRU1QVF9BQ1RJVkVfQklUKQogCkBAIC02MCw2ICs2MCw4IEBACiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNhdmVkIHNpZ25hbCBtYXNrICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJOAkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KKyNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTkJLyogc2luZ2xlIHN0ZXBwaW5nPyAqLworI2RlZmluZSBUSUZfQkxPQ0tTVEVQCQkxMAkvKiBicmFuY2ggc3RlcHBpbmc/ICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQpAQCAtNjksNiArNzEsOCBAQAogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJTkdMRVNURVAJCSgxIDw8IFRJRl9TSU5HTEVTVEVQKQorI2RlZmluZSBfVElGX0JMT0NLU1RFUAkJKDEgPDwgVElGX0JMT0NLU1RFUCkKIAogI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLICAgICAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNjk5Y2Y4ZS4uZmNkM2M3MCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI3MCw4ICsyNzAsOCBAQAogCURFRklORShEVExCX09GRl9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHBkY19jYWNoZV9pbmZvLCBkdF9vZmZfY291bnQpKTsKIAlERUZJTkUoRFRMQl9MT09QLCBvZmZzZXRvZihzdHJ1Y3QgcGRjX2NhY2hlX2luZm8sIGR0X2xvb3ApKTsKIAlCTEFOSygpOwotCURFRklORShQQV9CTE9DS1NURVBfQklULCAzMS1QVF9CTE9DS1NURVBfQklUKTsKLQlERUZJTkUoUEFfU0lOR0xFU1RFUF9CSVQsIDMxLVBUX1NJTkdMRVNURVBfQklUKTsKKwlERUZJTkUoVElGX0JMT0NLU1RFUF9QQV9CSVQsIDMxLVRJRl9CTE9DS1NURVApOworCURFRklORShUSUZfU0lOR0xFU1RFUF9QQV9CSVQsIDMxLVRJRl9TSU5HTEVTVEVQKTsKIAlCTEFOSygpOwogCURFRklORShBU01fUE1EX1NISUZULCBQTURfU0hJRlQpOwogCURFRklORShBU01fUEdESVJfU0hJRlQsIFBHRElSX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggOGM0NzEyYi4uM2E0NGY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTIwNDcsMTIgKzIwNDcsMTMgQEAKIAliLG4gICAgIHN5c2NhbGxfY2hlY2tfc2lnCiAKIHN5c2NhbGxfcmVzdG9yZToKLQkvKiBBcmUgd2UgYmVpbmcgcHRyYWNlZD8gKi8KIAlMRFJFRwlUSV9UQVNLLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxCiAKLQlsZHcJVEFTS19QVFJBQ0UoJXIxKSwgJXIxOQotCWJiLDwJJXIxOSwzMSxzeXNjYWxsX3Jlc3RvcmVfcmZpCi0Jbm9wCisJLyogQXJlIHdlIGJlaW5nIHB0cmFjZWQ/ICovCisJbGR3CVRBU0tfRkxBR1MoJXIxKSwlcjE5CisJbGRpCShfVElGX1NJTkdMRVNURVB8X1RJRl9CTE9DS1NURVApLCVyMgorCWFuZCxDT05EKD0pCSVyMTksJXIyLCVyMAorCWIsbglzeXNjYWxsX3Jlc3RvcmVfcmZpCiAKIAlsZG8JVEFTS19QVF9GUjMxKCVyMSksJXIxOQkJICAgLyogcmVsb2FkIGZwcmVncyAqLwogCXJlc3RfZnAJJXIxOQpAQCAtMjExMywxNiArMjExNCwxNiBAQAogCWxkaQkweDBiLCVyMjAJCQkgICAvKiBDcmVhdGUgbmV3IFBTVyAqLwogCWRlcGkJLTEsMTMsMSwlcjIwCQkJICAgLyogQywgUSwgRCwgYW5kIEkgYml0cyAqLwogCi0JLyogVGhlIHZhbHVlcyBvZiBQQV9TSU5HTEVTVEVQX0JJVCBhbmQgUEFfQkxPQ0tTVEVQX0JJVCBhcmUKLQkgKiBzZXQgaW4gaW5jbHVkZS9saW51eC9wdHJhY2UuaCBhbmQgY29udmVydGVkIHRvIFBBIGJpdG1hcAorCS8qIFRoZSB2YWx1ZXMgb2YgU0lOR0xFU1RFUF9CSVQgYW5kIEJMT0NLU1RFUF9CSVQgYXJlCisJICogc2V0IGluIHRocmVhZF9pbmZvLmggYW5kIGNvbnZlcnRlZCB0byBQQSBiaXRtYXAKIAkgKiBudW1iZXJzIGluIGFzbS1vZmZzZXRzLmMgKi8KIAotCS8qIGlmICgoJXIxOS5QQV9TSU5HTEVTVEVQX0JJVCkpIHsgJXIyMC4yNz0xfSAqLwotCWV4dHJ1LD0JJXIxOSxQQV9TSU5HTEVTVEVQX0JJVCwxLCVyMAorCS8qIGlmICgoJXIxOS5TSU5HTEVTVEVQX0JJVCkpIHsgJXIyMC4yNz0xfSAqLworCWV4dHJ1LD0JJXIxOSxUSUZfU0lOR0xFU1RFUF9QQV9CSVQsMSwlcjAKIAlkZXBpCS0xLDI3LDEsJXIyMAkJCSAgIC8qIFIgYml0ICovCiAKLQkvKiBpZiAoKCVyMTkuUEFfQkxPQ0tTVEVQX0JJVCkpIHsgJXIyMC43PTF9ICovCi0JZXh0cnUsPSAlcjE5LFBBX0JMT0NLU1RFUF9CSVQsMSwlcjAKKwkvKiBpZiAoKCVyMTkuQkxPQ0tTVEVQX0JJVCkpIHsgJXIyMC43PTF9ICovCisJZXh0cnUsPSAlcjE5LFRJRl9CTE9DS1NURVBfUEFfQklULDEsJXIwCiAJZGVwaQktMSw3LDEsJXIyMAkJCSAgIC8qIFQgYml0ICovCiAKIAlTVFJFRwklcjIwLFRBU0tfUFRfUFNXKCVyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAzMzBmNTM2Li4yZTc2MTBjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC00MjMsOCArNDIzLDMgQEAKICAgICAgICAgc2V0X2VpZW0oY3B1X2VpZW0pOwkvKiBFSUVNIDogZW5hYmxlIGFsbCBleHRlcm5hbCBpbnRyICovCiAKIH0KLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX1dBUk5JTkcgInVuZXhwZWN0ZWQgSVJRICVkXG4iLCBpcnEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCmluZGV4IDYxZWUwZWUuLjIxMjA3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKQEAgLTg5Myw3ICs4OTMsNyBAQAogCSAqIG91cnNlbHZlcyAqLwogCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewogCQlpZihzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQgotCQkgICAmJiAoc2VjaGRyc1tpXS5zaF90eXBlICYgU0hGX0FMTE9DKSkgeworCQkgICAmJiAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpIHsKIAkJCWludCBzdHJpbmRleCA9IHNlY2hkcnNbaV0uc2hfbGluazsKIAkJCS8qIEZJWE1FOiBBV0ZVTCBIQUNLCiAJCQkgKiBUaGUgY2FzdCBpcyB0byBkcm9wIHRoZSBjb25zdCBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTI3ZGIzNi4uYzRmNDllNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTM1LDcgKzM2LDggQEAKICAqLwogdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH4oUFRfU0lOR0xFU1RFUHxQVF9CTE9DS1NURVApOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFU1RFUCk7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOwogCiAJLyogbWFrZSBzdXJlIHRoZSB0cmFwIGJpdHMgYXJlIG5vdCBzZXQgKi8KIAlwYV9wc3codGFzayktPnIgPSAwOwpAQCAtNTUsOCArNTcsOCBAQAogCiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT5wdHJhY2UgJj0gflBUX0JMT0NLU1RFUDsKLQl0YXNrLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0JMT0NLU1RFUCk7CisJc2V0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFU1RFUCk7CiAKIAlpZiAocGFfcHN3KHRhc2spLT5uKSB7CiAJCXN0cnVjdCBzaWdpbmZvIHNpOwpAQCAtOTgsOCArMTAwLDggQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7Ci0JdGFzay0+cHRyYWNlIHw9IFBUX0JMT0NLU1RFUDsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOworCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0JMT0NLU1RFUCk7CiAKIAkvKiBFbmFibGUgdGFrZW4gYnJhbmNoIHRyYXAuICovCiAJcGFfcHN3KHRhc2spLT5yID0gMDsKQEAgLTI2MywyMiArMjY1LDIwIEBACiB9CiAjZW5kaWYKIAotCi12b2lkIHN5c2NhbGxfdHJhY2Uodm9pZCkKK2xvbmcgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQotCQlyZXR1cm47Ci0JaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCi0JCXJldHVybjsKLQlwdHJhY2Vfbm90aWZ5KFNJR1RSQVAgfCAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkKLQkJCQkgPyAweDgwIDogMCkpOwotCS8qCi0JICogdGhpcyBpc24ndCB0aGUgc2FtZSBhcyBjb250aW51aW5nIHdpdGggYSBzaWduYWwsIGJ1dCBpdCB3aWxsIGRvCi0JICogZm9yIG5vcm1hbCB1c2UuICBzdHJhY2Ugb25seSBjb250aW51ZXMgd2l0aCBhIHNpZ25hbCBpZiB0aGUKLQkgKiBzdG9wcGluZyBzaWduYWwgaXMgbm90IFNJR1RSQVAuICAtYnJsCi0JICovCi0JaWYgKGN1cnJlbnQtPmV4aXRfY29kZSkgewotCQlzZW5kX3NpZyhjdXJyZW50LT5leGl0X2NvZGUsIGN1cnJlbnQsIDEpOwotCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOwotCX0KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkgJiYKKwkgICAgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKQorCQlyZXR1cm4gLTFMOworCisJcmV0dXJuIHJlZ3MtPmdyWzIwXTsKK30KKwordm9pZCBkb19zeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHN0ZXBwaW5nID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkgfHwKKwkJdGVzdF90aHJlYWRfZmxhZyhUSUZfQkxPQ0tTVEVQKTsKKworCWlmIChzdGVwcGluZyB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgc3RlcHBpbmcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IDhlYjNjNjMuLmU4NDY3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlICJzaWduYWwzMi5oIgogI2VuZGlmCiAKQEAgLTQ2OCw2ICs0NjgsOSBAQAogCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsc2lnKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnLCBpbmZvLCBrYSwgcmVncywgMCk7CisKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKaW5kZXggNTlmYzFhNDMuLmY1Zjk2MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtMjg4LDE4ICsyODgsMjMgQEAKIAlTVFJFRwklcjE4LFBUX0dSMTgoJXIyKQogCS8qIEZpbmlzaGVkIHNhdmluZyB0aGluZ3MgZm9yIHRoZSBkZWJ1Z2dlciAqLwogCi0JbGRpbAlMJXN5c2NhbGxfdHJhY2UsJXIxCisJY29weQklcjIsJXIyNgorCWxkaWwJTCVkb19zeXNjYWxsX3RyYWNlX2VudGVyLCVyMQogCWxkaWwJTCV0cmFjZXN5c19uZXh0LCVyMgotCWJlCVIlc3lzY2FsbF90cmFjZSglc3I3LCVyMSkKKwliZQlSJWRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoJXNyNywlcjEpCiAJbGRvCVIldHJhY2VzeXNfbmV4dCglcjIpLCVyMgogCQotdHJhY2VzeXNfbmV4dDoJCit0cmFjZXN5c19uZXh0OgorCS8qIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIgZWl0aGVyIHJldHVybmVkIHRoZSBzeXNjYWxsbm8sIG9yIC0xTCwKKwkgKiAgc28gd2Ugc2tpcCByZXN0b3JpbmcgdGhlIFBUX0dSMjAgYmVsb3csIHNpbmNlIHdlIHB1bGxlZCBpdCBmcm9tCisJICogIHRhc2stPnRocmVhZC5yZWdzLmdyWzIwXSBhYm92ZS4KKwkgKi8KKwljb3B5CSVyZXQwLCVyMjAKIAlsZGlsCUwlc3lzX2NhbGxfdGFibGUsJXIxCiAJbGRvICAgICBSJXN5c19jYWxsX3RhYmxlKCVyMSksICVyMTkKIAogCWxkbyAgICAgLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxICAgICAgLyogZ2V0IHRhc2sgcHRyICovCiAJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKLQlMRFJFRyAgIFRBU0tfUFRfR1IyMCglcjEpLCAlcjIwCiAJTERSRUcgICBUQVNLX1BUX0dSMjYoJXIxKSwgJXIyNgkJLyogUmVzdG9yZSB0aGUgdXNlcnMgYXJncyAqLwogCUxEUkVHICAgVEFTS19QVF9HUjI1KCVyMSksICVyMjUKIAlMRFJFRyAgIFRBU0tfUFRfR1IyNCglcjEpLCAlcjI0CkBAIC0zMzYsNyArMzQxLDggQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlsZG8JLTE2KCVyMzApLCVyMjkJCQkvKiBSZWZlcmVuY2UgcGFyYW0gc2F2ZSBhcmVhICovCiAjZW5kaWYKLQlibAlzeXNjYWxsX3RyYWNlLCAlcjIKKwlsZG8JVEFTS19SRUdTKCVyMSksJXIyNgorCWJsCWRvX3N5c2NhbGxfdHJhY2VfZXhpdCwlcjIKIAlTVFJFRyAgICVyMjgsVEFTS19QVF9HUjI4KCVyMSkgICAgICAgICAgLyogc2F2ZSByZXR1cm4gdmFsdWUgbm93ICovCiAJbGRvICAgICAtVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEgICAgICAvKiBnZXQgdGFzayBwdHIgKi8KIAlMRFJFRwlUSV9UQVNLKCVyMSksICVyMQpAQCAtMzUzLDEyICszNTksMTIgQEAKIAogdHJhY2VzeXNfc2lnZXhpdDoKIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwotCUxEUkVHCTAoJXIxKSwgJXIxCisJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlsZG8JLTE2KCVyMzApLCVyMjkJCQkvKiBSZWZlcmVuY2UgcGFyYW0gc2F2ZSBhcmVhICovCiAjZW5kaWYKLQlibAlzeXNjYWxsX3RyYWNlLCAlcjIKLQlub3AKKwlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCisJbGRvCVRBU0tfUkVHUyglcjEpLCVyMjYKIAogCWxkaWwJTCVzeXNjYWxsX2V4aXRfcmZpLCVyMQogCWJlLG4JUiVzeXNjYWxsX2V4aXRfcmZpKCVzcjcsJXIxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZWExNzg0Li5mZGE0YmFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAJCiAvKiBsZCBzY3JpcHQgdG8gbWFrZSBocHBhIExpbnV4IGtlcm5lbCAqLwogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTc3LDEzICs3OCw3IEBACiAJICovCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJZGF0YV9zdGFydCA9IC47Ci0JLiA9IEFMSUdOKDE2KTsKLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQlfX2V4X3RhYmxlIDogewotCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJTk9URVMKIApAQCAtOTQsMjMgKzg5LDggQEAKIAkJX19zdG9wX19fdW53aW5kID0gLjsKIAl9CiAKLQkvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KLQkuID0gQUxJR04oMTYpOwotCS5kYXRhLnJlYWRfbW9zdGx5IDogewotCQkqKC5kYXRhLnJlYWRfbW9zdGx5KQotCX0KLQotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLyogRGF0YSAqLwotCS5kYXRhIDogewotCQlEQVRBX0RBVEEKLQkJQ09OU1RSVUNUT1JTCi0JfQotCi0JLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKLQkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKLQl9CisJUldfREFUQV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogCiAJLyogUEEtUklTQyBsb2NrcyByZXF1aXJlcyAxNi1ieXRlIGFsaWdubWVudCAqLwogCS4gPSBBTElHTigxNik7CkBAIC0xMTgsMTcgKzk4LDYgQEAKIAkJKiguZGF0YS5sb2NrX2FsaWduZWQpCiAJfQogCi0JLyogbm9zYXZlIGRhdGEgaXMgcmVhbGx5IG9ubHkgdXNlZCBmb3Igc29mdHdhcmUgc3VzcGVuZC4uLml0J3MgaGVyZQotCSAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdAotCSAqLwotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCV9fbm9zYXZlX2JlZ2luID0gLjsKLQkuZGF0YV9ub3NhdmUgOiB7Ci0JCSooLmRhdGEubm9zYXZlKQotCX0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX25vc2F2ZV9lbmQgPSAuOwotCiAJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCV9lZGF0YSA9IC47CiAKQEAgLTE0NywxNCArMTE2LDYgQEAKIAl9CiAJX19ic3Nfc3RvcCA9IC47CiAKLQotCS8qIGFzc2VtYmxlciBjb2RlIGV4cGVjdHMgaW5pdF90YXNrIHRvIGJlIDE2ayBhbGlnbmVkICovCi0JLiA9IEFMSUdOKDE2Mzg0KTsKLQkvKiBpbml0X3Rhc2sgKi8KLQkuZGF0YS5pbml0X3Rhc2sgOiB7Ci0JCSooLmRhdGEuaW5pdF90YXNrKQotCX0KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS4gPSBBTElHTigxNik7CiAJLyogTGlua2FnZSB0YWJsZXMgKi8KQEAgLTE3Miw2NCArMTMzLDE3IEBACiAJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgaW50ZXJydXB0IHN0YWNrIGJ5IGFsaWduaW5nIF9faW5pdCogdG8gMTZrICovCiAJLiA9IEFMSUdOKDE2Mzg0KTsKIAlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7IAotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0KLQkuaW5pdC5kYXRhIDogewotCQlJTklUX0RBVEEKLQl9Ci0JLiA9IEFMSUdOKDE2KTsKLQkuaW5pdC5zZXR1cCA6IHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKLQl9Ci0JLmluaXRjYWxsLmluaXQgOiB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCVNFQ1VSSVRZX0lOSVQKLQotCS8qIGFsdGVybmF0ZSBpbnN0cnVjdGlvbiByZXBsYWNlbWVudC4gIFRoaXMgaXMgYSBtZWNoYW5pc20geDg2IHVzZXMKLQkgKiB0byBkZXRlY3QgdGhlIENQVSB0eXBlIGFuZCByZXBsYWNlIGdlbmVyaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzCi0JICogd2l0aCBDUFUgc3BlY2lmaWMgb25lcy4gIFdlIGRvbid0IGN1cnJlbnRseSBkbyB0aGlzIGluIFBBLCBidXQKLQkgKiBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhLi4uCi0JICovCi0JLiA9IEFMSUdOKDQpOwotCS5hbHRpbnN0cnVjdGlvbnMgOiB7Ci0JCV9fYWx0X2luc3RydWN0aW9ucyA9IC47Ci0JCSooLmFsdGluc3RydWN0aW9ucykKLQkJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47IAotCX0gCi0JLmFsdGluc3RyX3JlcGxhY2VtZW50IDogewotCQkqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkKLQl9IAotCi0JLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvIGRlYWwgd2l0aCByZWZlcmVuY2VzCi0JICogIGZyb20gLmFsdGluc3RydWN0aW9ucyBhbmQgLmVoX2ZyYW1lCi0JICovCi0JLmV4aXQudGV4dCA6IHsKKwlJTklUX1RFWFRfU0VDVElPTigxNjM4NCkKKwlJTklUX0RBVEFfU0VDVElPTigxNikKKwkvKiB3ZSBoYXZlIHRvIGRpc2NhcmQgZXhpdCB0ZXh0IGFuZCBzdWNoIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUgKi8KKwkuZXhpdC50ZXh0IDoKKwl7CiAJCUVYSVRfVEVYVAogCX0KLQkuZXhpdC5kYXRhIDogeworCS5leGl0LmRhdGEgOgorCXsKIAkJRVhJVF9EQVRBCiAJfQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47Ci0JfQotI2VuZGlmCiAKIAlQRVJDUFUoUEFHRV9TSVpFKQogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCmluZGV4IGQ1YWNhMzEuLjEzYjZlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2luaXQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKQEAgLTQzNCw4ICs0MzQsOCBAQAogI2RlZmluZSBTRVRfTUFQX09GRlNFVCh4KSAoKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKSh4KSArIFZNX01BUF9PRkZTRVQpIFwKIAkJCQkgICAgICYgfihWTV9NQVBfT0ZGU0VULTEpKSkKIAotdm9pZCAqdm1hbGxvY19zdGFydCBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTCh2bWFsbG9jX3N0YXJ0KTsKK3ZvaWQgKnBhcmlzY192bWFsbG9jX3N0YXJ0IF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHBhcmlzY192bWFsbG9jX3N0YXJ0KTsKIAogI2lmZGVmIENPTkZJR19QQTExCiB1bnNpZ25lZCBsb25nIHBjeGxfZG1hX3N0YXJ0IF9fcmVhZF9tb3N0bHk7CkBAIC00OTYsMTMgKzQ5NiwxNCBAQAogI2lmZGVmIENPTkZJR19QQTExCiAJaWYgKGhwcGFfZG1hX29wcyA9PSAmcGN4bF9kbWFfb3BzKSB7CiAJCXBjeGxfZG1hX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKLQkJdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKHBjeGxfZG1hX3N0YXJ0ICsgUENYTF9ETUFfTUFQX1NJWkUpOworCQlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKHBjeGxfZG1hX3N0YXJ0CisJCQkJCQkrIFBDWExfRE1BX01BUF9TSVpFKTsKIAl9IGVsc2UgewogCQlwY3hsX2RtYV9zdGFydCA9IDA7Ci0JCXZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOworCQlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CiAJfQogI2Vsc2UKLQl2bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKKwlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdClcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDRmZDQ3OTAuLjJiYTE0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zODUsOSArMzg1LDE1IEBACiAKIGNvbmZpZyBOT0RFU19TSElGVAogCWludAorCWRlZmF1bHQgIjgiIGlmIFBQQzY0CiAJZGVmYXVsdCAiNCIKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAorY29uZmlnIE1BWF9BQ1RJVkVfUkVHSU9OUworCWludAorCWRlZmF1bHQgIjI1NiIgaWYgUFBDNjQKKwlkZWZhdWx0ICIzMiIKKwogY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQzY0CkBAIC00MDgsNiArNDE0LDEwIEBACiBjb25maWcgQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTCisgICAgICAgZGVmX2Jvb2wgeQorICAgICAgIGRlcGVuZHMgb24gUFBDX0JPT0szU182NAorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCmluZGV4IGFhY2Y2MjkuLjFhNTRhM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKQEAgLTE2NCw2ICsxNjQsMTcgQEAKIAogYm9vdCA6PSBhcmNoLyQoQVJDSCkvYm9vdAogCitpZmVxICgkKENPTkZJR19SRUxPQ0FUQUJMRSkseSkKK3F1aWV0X2NtZF9yZWxvY3NfY2hlY2sgPSBDQUxMICAgICQ8CisgICAgICBjbWRfcmVsb2NzX2NoZWNrID0gcGVybCAkPCAiJChPQkpEVU1QKSIgIiQob2JqKS92bWxpbnV4IgorCitQSE9OWSArPSByZWxvY3NfY2hlY2sKK3JlbG9jc19jaGVjazogYXJjaC9wb3dlcnBjL3JlbG9jc19jaGVjay5wbCB2bWxpbnV4CisJJChjYWxsIGNtZCxyZWxvY3NfY2hlY2spCisKK3pJbWFnZTogcmVsb2NzX2NoZWNrCitlbmRpZgorCiAkKEJPT1RfVEFSR0VUUyk6IHZtbGludXgKIAkkKFEpJChNQUtFKSBBUkNIPXBwYzY0ICQoYnVpbGQpPSQoYm9vdCkgJChwYXRzdWJzdCAlLCQoYm9vdCkvJSwkQCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jCmluZGV4IGMwMmE5OTkuLjg5M2Y0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCXJldHVybiA2NDsKIH0KLXZvaWQgZ2V0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKK3N0YXRpYyB2b2lkIGdldDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCiB7CiAJdW5zaWduZWQgajsKIAl1bnNpZ25lZCBudW0gPSBmcmVhZChidWYsIDEsIDQwOTYsIGZpbGUpOwpAQCAtNjYsMTIgKzY2LDEyIEBACiAJCWJ1ZltqXSA9IDA7CiB9CiAKLXZvaWQgcHV0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKK3N0YXRpYyB2b2lkIHB1dDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCiB7CiAJZndyaXRlKGJ1ZiwgMSwgNDA5NiwgZmlsZSk7CiB9CiAKLXZvaWQgZGVhdGgoY29uc3QgY2hhciAqbXNnLCBGSUxFICpmZGVzYywgY29uc3QgY2hhciAqZm5hbWUpIAorc3RhdGljIHZvaWQgZGVhdGgoY29uc3QgY2hhciAqbXNnLCBGSUxFICpmZGVzYywgY29uc3QgY2hhciAqZm5hbWUpCiB7CiAJZnByaW50ZihzdGRlcnIsIG1zZyk7CiAJZmNsb3NlKGZkZXNjKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMKaW5kZXggY2VlODA4MC4uZGQzODYwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMKQEAgLTIxMCw3ICsyMTAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cwppbmRleCA0YzM2MTg2Li44ZTliZTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cwpAQCAtMTk5LDcgKzE5OSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQlydGNANTAgewogCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMDgiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKaW5kZXggZGUzMGIzZjkuLjgyZmYyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjU2LDcgKzI1NSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAJCXNyYW1AODAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCBkMTNjYjExLi5lNDVhNjNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMjUxLDcgKzI1MSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI2MCw3ICsyNTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwppbmRleCBlMjk3ZDhiLi4wYzM5MDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpAQCAtMjIzLDcgKzIyMyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTIzMiw3ICsyMzEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwppbmRleCA3YmU4Y2EwLi42Y2E0ZmMxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKQEAgLTIyMiw3ICsyMjIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCmluZGV4IGMyYjhkYmYuLmMzNTNkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKQEAgLTIwOSw3ICsyMDksNiBAQAogCQkJcmVnID0gPDB4MTcwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8OSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3MjAgewpAQCAtMjIwLDcgKzIxOSw2IEBACiAJCQlyZWcgPSA8MHgxNzIwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3NDAgewpAQCAtMjMxLDcgKzIyOSw2IEBACiAJCQlyZWcgPSA8MHgxNzQwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjY29udHJvbEAxNzYwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKaW5kZXggOWE2MDM2OS4uOWVhNzgzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAogCQkJcGFydGl0aW9uQDAgewotCQkJCXJlZyA9IDwwIDB4ODAwMD47CisJCQkJcmVnID0gPDAgMHg4MDAwMD47CiAJCQkJbGFiZWwgPSAidS1ib290IjsKIAkJCQlyZWFkLW9ubHk7CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCmluZGV4IDA2MzMyZDYuLjFlM2VjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKQEAgLTQ4Nyw4ICs0ODcsOCBAQAogCQkJCSAmcWVfcGlvX2YgNSAwICAgLyogVVNCVE4gKi8KIAkJCQkgJnFlX3Bpb19mIDYgMCAgIC8qIFVTQlJQICovCiAJCQkJICZxZV9waW9fZiA4IDAgICAvKiBVU0JSTiAqLwotCQkJCSAmYmNzcjE3ICAgNiAwICAgLyogU1BFRUQgKi8KLQkJCQkgJmJjc3IxNyAgIDUgMT47IC8qIFBPV0VSICovCisJCQkJICZiY3NyMTcgICAxIDAgICAvKiBTUEVFRCAqLworCQkJCSAmYmNzcjE3ICAgMiAwPjsgLyogUE9XRVIgKi8KIAkJfTsKIAogCQllbmV0MDogdWNjQDIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmE3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXVjbWM1Mi5kdHMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBNYW5yb2xhbmQgbXVjbWM1MiBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQlncHQwOiB0aW1lckA2MDAgewkvLyBHUFQgMCBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDE6IHRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDIwMDAgeyAvKiBQU0MxIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OworCQl9OworCisJCXNlcmlhbEAyMjAwIHsgLyogUFNDMiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKKwkJfTsKKworCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgCS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47IAkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWNvbXBhdGlibGUgPSAiaW50ZWwsbHh0OTcxIjsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlod21vbkAyYyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZCxhZG05MjQwIjsKKwkJCQlyZWcgPSA8MHgyYz47CisJCQl9OworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkvKiBJRFNFTCAweDEwICovCisJCQkJMHg4MDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDMgMworCQkJCTB4ODAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMCAzIDMKKwkJCQkweDgwMDAgMCAwIDMgJm1wYzUyMDBfcGljIDAgMiAzCisJCQkJMHg4MDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDEgMworCQkJCT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgorCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4NjAwMDAwMDAgMHg2MDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmY4MDAwMDAgMHgwMDgwMDAwMAorCQkJICAxIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwCisJCQkgIDMgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDA4MDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiRFRTIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAxMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gIktlcm5lbCI7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJCWxhYmVsID0gIlJvb3RGUyI7CisJCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDcwMDAwMCB7CisJCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzQwMDAwIHsKKwkJCQlsYWJlbCA9ICJFbnYiOworCQkJCXJlZyA9IDwweDAwNzQwMDAwIDB4MDAwMjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NjAwMDAgeworCQkJCWxhYmVsID0gInJlZC4gRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc2MDAwMCAweDAwMDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlIjsKKwkJCQlyZWcgPSA8MHgwMDc4MDAwMCAweDAwMDgwMDAwPjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlMTAwOiBncGlvLWNvbnRyb2xsZXItMTAwQDMsNjAwMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDEwMCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTEwNDogZ3Bpby1jb250cm9sbGVyLTEwNEAzLDYwMDEwNCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAxMDQgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDA6IGdwaW8tY29udHJvbGxlci0yMDBAMyw2MDAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAwIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAxOiBncGlvLWNvbnRyb2xsZXItMjAxQDMsNjAwMjAxIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMSAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMjogZ3Bpby1jb250cm9sbGVyLTIwMkAzLDYwMDIwMiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDIgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDM6IGdwaW8tY29udHJvbGxlci0yMDNAMyw2MDAyMDMgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAzIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjA0OiBncGlvLWNvbnRyb2xsZXItMjA0QDMsNjAwMjA0IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwNCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwNjogZ3Bpby1jb250cm9sbGVyLTIwNkAzLDYwMDIwNiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDYgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDc6IGdwaW8tY29udHJvbGxlci0yMDdAMyw2MDAyMDcgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjA3IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjBmOiBncGlvLWNvbnRyb2xsZXItMjBmQDMsNjAwMjBmIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwZiAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKaW5kZXggMzBiZmRjMC4uOGE0ZWMzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKQEAgLTI0NCw3ICsyNDQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTMsNyArMjUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCXJlZyA9IDwweDUxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKaW5kZXggMDMwMDQyNi4uODVkODU3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKQEAgLTI0NCw3ICsyNDQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTMsNyArMjUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCXJlZyA9IDwweDUxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwppbmRleCA5ZWVmZTAwLi45NGEzMzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCkBAIC0yNiw4ICsyNiw3IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7Ci0JCS8qIHBjaTEgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBjb25uZWN0b3IgKi8KLQkJcGNpMiA9ICZwY2kyOworCQlwY2kxID0gJnBjaTE7CiAJfTsKIAogCWNwdXMgewpAQCAtMzgxLDcgKzM4MCw3IEBACiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDgwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjAwMDAwMD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKQEAgLTM5MCw3ICszODksNyBAQAogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CiAKLQlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwlwY2kxOiBwY2llQGUwMDBhMDAwIHsKIAkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAKQEAgLTQwMyw5ICs0MDIsOSBAQAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwweDFhIDB4Mj47CiAJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47Ci0JCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUzMDAwMDAwIDB4MCAweDA4MDAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTI4MDAwMDAgMHgwIDB4MDgwMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMwMDAwMDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC00MTksMTEgKzQxOCwxMSBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwCiAJCQkJICAweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwCi0JCQkJICAweDAgMHgyMDAwMDAwMAorCQkJCSAgMHgwIDB4MTAwMDAwMDAKIAogCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAotCQkJCSAgMHgwIDB4MDgwMDAwMDA+OworCQkJCSAgMHgwIDB4MDA4MDAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCmluZGV4IGM5NTkwYjUuLjFkYjA3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKQEAgLTE2MCw3ICsxNjAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQkgcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMDciOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MjY0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBNYW5yb2xhbmQgdWMxMDEgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJtYW5yb2xhbmQsdWMxMDEiOworCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLHVjMTAxIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQlncHQwOiB0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQxOiB0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ0OiB0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjQwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NTogdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY1MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDY6IHRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ3OiB0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjcwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjAwMCB7IC8qIFBTQzEgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47CisJCX07CisKKwkJc2VyaWFsQDIyMDAgeyAvKiBQU0MyIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAyIDA+OworCQl9OworCisJCXNlcmlhbEAyYzAwIHsJCS8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQljb21wYXRpYmxlID0gImludGVsLGx4dDk3MSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJZnNsLHByZXNlcnZlLWNsb2NraW5nOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwkJCWh3bW9uQDJjIHsKKwkJCQljb21wYXRpYmxlID0gImFkLGFkbTkyNDAiOworCQkJCXJlZyA9IDwweDJjPjsKKwkJCX07CisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmODAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMSAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAzIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAwODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiRFRTIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAxMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gIktlcm5lbCI7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJCWxhYmVsID0gIlJvb3RGUyI7CisJCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDcwMDAwMCB7CisJCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzQwMDAwIHsKKwkJCQlsYWJlbCA9ICJFbnYiOworCQkJCXJlZyA9IDwweDAwNzQwMDAwIDB4MDAwMTAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NTAwMDAgeworCQkJCWxhYmVsID0gInJlZC4gRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc1MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzYwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlIjsKKwkJCQlyZWcgPSA8MHgwMDc2MDAwMCAweDAwMGEwMDAwPjsKKwkJCX07CisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCAzODM4Yjc3Li4wMzk2Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDc6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMTksMTEgKzIzNywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM5LDkgKzI1OSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNzMsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOCw2ICszNTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Miw2ICszNjUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2Nyw2ICszOTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1Nyw2ICs0ODIsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ5NSwxMCArNTIxLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxOSw3ICs1NDEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTU4LDE0ICs1NzksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzNiw2ICs2NTcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjQ2LDYgKzY2OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY2NiwyMyArNjg5LDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzEzLDI1ICs3MzYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NzUsMTEgKzc4NSwxMiBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4NzcsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODg1LDEwICs5MDAsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05NTksMTIgKzk3NywxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwNjQsNiArMTA4Miw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNzMsNiArMTA5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDkwLDEwICsxMTEwLDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEwNSwxMSArMTEyOSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTE4LDIzICsxMTQzLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE1OSw3ICsxMTg2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjAwLDExICsxMjI2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKaW5kZXggMjliMGYzNC4uZjVjMDdmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTIgKzU2LDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OCwxMSArODQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNiw3ICsxMTMsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTksNiArMTI1LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyNywxNCArMTQwLDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDcsNyArMTY1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyOCwxMSArMjQ2LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDgsOSArMjY4LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjY0LDYgKzI4NSw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTM0OCw2ICszNzAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Miw2ICszODUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4Nyw2ICs0MTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDMxLDcgKzQ1Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NTQsMTAgKzQ4Miw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTQ3NSw2ICs0OTksOCBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTAyLDcgKzUyOSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC01MTQsMTEgKzU0MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU0MCw2ICs1NjksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC01ODYsMTQgKzYxNywxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02NDAsOSArNjc0LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjk4LDggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC02ODYsMTAgKzcyNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1OSw2ICs3OTUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc4Nyw2ICs4MjQsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC04MTIsMjMgKzg1MCwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04NDcsMzAgKzg4NSwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTkxMyw2ICs5MzksMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTMyLDEwICs5NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05OTIsMTIgKzEwMjUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDQxLDYgKzEwNzQsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDUwLDYgKzEwODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NywxMCArMTEwMiwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTA5NSwyMyArMTEzNSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExMzYsNyArMTE3OCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE3OCwxMSArMTIxOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCmluZGV4IDA3YjZiMjYuLjRmNzdhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0MCw3ICsxNTgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyMCwxMSArMjM4LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDAsOSArMjYwLDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjUzLDYgKzI3NCw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzI5LDYgKzM1MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQzLDYgKzM2Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY4LDYgKzM5Miw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUwOSw3IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01MDYsMTAgKzUzMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MzIsNiArNTU1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTQwLDcgKzU2NCw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzksMTQgKzYwMiwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ3LDYgKzY3MCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTcsNiArNjgxLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjc2LDIyICs3MDEsMjggQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03MzgsNiArNzY5LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC03NDcsOSArNzgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzc1LDI1ICs4MDYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODE3LDcgKzgzNSw3IEBACiAjCiAjIExFRCBkcml2ZXJzCiAjCi0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogCkBAIC04NjYsNiArODg0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC04OTMsNiArOTEyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMiwxMCArOTM1LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTg2LDEyICsxMDEyLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA5MSw2ICsxMTE3LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTEwMCw2ICsxMTI3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMTcsMTAgKzExNDUsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTMyLDExICsxMTY0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTExNDUsMjMgKzExNzgsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTg2LDcgKzEyMjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMjcsMTEgKzEyNjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCBhZmIxYTNkLi5mOTE2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjI1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OSwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEwNSw3ICsxMTIsNiBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsNyArMTM4LDYgQEAKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTEzMyw3ICsxNDUsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Niw3ICsxNjQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI3LDExICsyNDUsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0Nyw5ICsyNjcsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzYsNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNTAsNiArMzcyLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzUsNiArMzk4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY3LDYgKzQ5MSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTQ5MiwxMCArNTE3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTE1LDYgKzUzNiw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT1tCiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01MzYsNiArNTU4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTg3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTgyLDE0ICs2MDYsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjM2LDE2ICs2NjMsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcyMiw2ICs3NDksNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc1MCw2ICs3NzgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC03NzYsMjMgKzgwNSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTEsMzAgKzg0MCwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtODcxLDE1ICs4ODgsMTcgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTk5NSw2ICsxMDE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDIyLDYgKzEwNDIsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0MSwxMiArMTA2NSwxNiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CkBAIC0xMTE0LDcgKzExNDIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAxLDYgKzEyMjgsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjEwLDYgKzEyMzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMywyMyArMTI1MiwxMiBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKaW5kZXggODU4NWM3Yy4uNzVjODM1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDUsNyArMTYzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjUsMTEgKzI0MywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ1LDkgKzI2NSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICsyNzksNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMzNCw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNzEsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3Myw2ICszOTcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM4Miw5ICs0MDcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ4OSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTAyLDEwICs1MjgsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTI5LDYgKzU1MSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1NjEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc3LDE0ICs1OTksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1NCw2ICs2NzYsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjY0LDYgKzY4Nyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY4NSwyMiArNzA5LDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc3Nyw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzU2LDkgKzc4OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc4OSwyNSArODE5LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODUxLDExICs4NjgsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC05NjksNiArOTg3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05OTYsNiArMTAxNSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDE1LDEwICsxMDM4LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTA4OSwxMiArMTExNSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTExOTQsNiArMTIyMCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMDMsNiArMTIzMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIwLDEwICsxMjQ4LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTIzNSwxMSArMTI2NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMjQ4LDIzICsxMjgxLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTI4OSw3ICsxMzI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMzMxLDExICsxMzY1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwppbmRleCBhMmRmMDYzLi40NjZmMDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNSw5ICs0MzIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CkBAIC02MjgsNyArNjM1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NTgsMTAgKzY2Nyw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2MCw2ICs3NjYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgxNCw5ICs4MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgzNCw2ICs4MzgsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODgzLDYgKzg5Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTg5NCw3ICs5MDQsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKQEAgLTkzNCw2ICs5NDMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05NDQsNiArOTU0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkwLDYgKzEwMDEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDU3LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDYsNiArMTE1OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjE1LDcgKzEyMjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzI3LDYgKzEzNDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM0NCw2ICsxMzU4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNjUsNyArMTM4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQwNywxMSArMTQyMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKaW5kZXggOTNlYmQ0NC4uNjY5NGZiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTE5LDIwICsxMjEsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDAsNiArMTQxLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTAsNiArMjUzLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Nyw2ICsyNzEsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC0zOTYsOSArNDAyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC01NjUsMTggKzU3MSwxNiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjMsNiArNjY3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5Myw5ICs2OTgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcxMyw3ICs3MTUsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzMyLDYgKzczMyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTc4NCw2ICs3ODYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04NTQsNyArODU3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTI2LDYgKzkyOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTQyLDYgKzk0NSw3IEBACiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKaW5kZXggZmYzM2E3ZC4uODZkZjE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00ODgsNiArNDk1LDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYwNSw2ICs2MTMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY0Myw3ICs2NTIsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzQxLDkgKzc1MiwxMSBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc5MSwxMCArODA0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODk2LDYgKzkwNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTUwLDkgKzk2MSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTg0LDYgKzk5MiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTAzNiw2ICsxMDQ5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA0OCw5ICsxMDYyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDg4LDggKzExMDAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwOTksNiArMTExMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExMTIsNyArMTEyNyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE2NCw2ICsxMTc4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MCw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldApAQCAtMTI3Myw2ICsxMjg5LDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTMzNCw2ICsxMzUxLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzODQsNiArMTQwMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDUzLDcgKzE0NzIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTY5LDYgKzE1ODcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU4Niw2ICsxNjA1LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2MDQsMTAgKzE2MjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYzMCwxMCArMTY1MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2NjAsNyArMTY4Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTcwMiwxMSArMTcyMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZwppbmRleCA3NjIzN2Q0Li43YmY3MWQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI3LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDg4LDYgKzQ5NSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjEzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDQsMTEgKzY1MywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs2ODMsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3MTEsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MDIsOSArODE2LDExIEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODUyLDEwICs4NjgsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NTcsNiArOTcwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDExLDkgKzEwMjUsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTA1NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTA5Nyw2ICsxMTEzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTEwOSw5ICsxMTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTQ5LDggKzExNjQsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTExNjAsNiArMTE3Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNzMsNyArMTE5MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIyNSw2ICsxMjQyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzMTYsNiArMTMzNCw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldApAQCAtMTMzNCw2ICsxMzUzLDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTM5NSw2ICsxNDE1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0NDUsNiArMTQ2Niw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTE0LDcgKzE1MzYsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjMwLDYgKzE2NTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY0Nyw2ICsxNjY5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2NjUsMTAgKzE2ODgsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTY5MSwxMCArMTcxNiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MjEsNyArMTc0Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTc2MywxMSArMTc4NywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwppbmRleCBlMGUzNmExLi43ZGVmODM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Nyw2ICsyNjAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTA0LDYgKzUxMSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTQyLDcgKzU1MCw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02MTIsNyArNjIyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MzUsNyArNjQ3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjYzLDEwICs2NzQsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTksNiArNzY3LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MTIsOSArODIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzIsNiArODM4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg4MSw2ICs4OTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04OTIsOSArOTA0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTI3LDYgKzkzNyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTkzNyw2ICs5NDgsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05NTAsNyArOTYyLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwNzAsNiArMTA4MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTI4LDcgKzExNDAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAyLDYgKzEyMTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIxOSw2ICsxMjMxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNDAsNyArMTI1Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI4MiwxMSArMTI5NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwppbmRleCA0ZjI3ZDQ1Li5iMzk4YjliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Nyw2ICsyNjAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTA3LDYgKzUxNCw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTQ1LDcgKzU1Myw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02MTcsNyArNjI3LDkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY0MCw3ICs2NTIsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC02NjgsMTAgKzY3OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc3Niw2ICs3ODQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgzMCw5ICs4MzksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg2Myw2ICs4NjksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTkxNSw2ICs5MjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MjcsOSArOTM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05NjcsOCArOTc3LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05NzgsNiArOTkwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkxLDcgKzEwMDQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDMsNiArMTA1NSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMTQ2LDYgKzExNTksOCBAQAogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldApAQCAtMTE4Niw2ICsxMjAxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNDcsNyArMTI2Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNjUsNiArMTM4MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzgyLDYgKzEzOTgsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTQwMyw3ICsxNDIwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDQ1LDExICsxNDYxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCmluZGV4IDY0OGRhYzAuLmY2NzMxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjQsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00ODMsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NDUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY3NiwxMSArNjg1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzAzLDYgKzcxNSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzMwLDYgKzc0Myw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTg0NSwxMCArODU5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTMwLDYgKzk0MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTg0LDkgKzk5Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9eQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMTcsNyArMTAyNiw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwNTUsOCArMTA2MywxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTA2Niw2ICsxMDc2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTExMSw2ICsxMTIyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTI4OCw2ICsxMzAxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNTAsNyArMTM2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0NjUsNiArMTQ3OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDgyLDYgKzE0OTYsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTUwMyw3ICsxNTE4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTQ1LDExICsxNTU5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwppbmRleCBiZjZkZWI4Li5hNjY4MTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNCw5ICs0MzEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ4Myw2ICs0OTAsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTg5LDYgKzU5Nyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjI3LDcgKzYzNiw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03MjUsMTAgKzczNiw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxMCw2ICs4MTgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2NCw5ICs4NzMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04OTcsNyArOTAzLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTM1LDggKzk0MCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTQ2LDYgKzk1Myw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MSw2ICs5OTksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9VSENJX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEwNTksNiArMTA2OCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzExMjcsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTE2Nyw2ICsxMTc4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMjksNyArMTI0MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNDQsNiArMTM1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzYxLDYgKzEzNzMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM4Miw3ICsxMzk1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDI0LDExICsxNDM2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCmluZGV4IDMyMzZjNDcuLmM0ZTkyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NTYsOSArNTYzLDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MDYsMTAgKzYxNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY5OSw2ICs3MDUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc1Miw5ICs3NTksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc3Miw2ICs3NzYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODIxLDYgKzgzMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTgzMiw5ICs4NDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04NjcsNiArODc1LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODc3LDYgKzg4Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTg5MCw3ICs5MDAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTAxMCw2ICsxMDE5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjgsNyArMTA3OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExNDAsNiArMTE0OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTU3LDYgKzExNjcsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTE3OCw3ICsxMTg5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjIwLDExICsxMjMwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCmluZGV4IDhjNTI5OWQuLjRmNDM0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU1LDYgKzI1OCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzIsNiArMjc2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzcyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDAyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MTAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTYsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjMsOSArNDMwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDYgKzU5Miw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjIzLDcgKzYzMSw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02OTMsNyArNzAzLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MTYsNyArNzI4LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzQ0LDEwICs3NTUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NDAsNiArODQ4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04OTMsOSArOTAyLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MTMsNiArOTE5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk2Miw2ICs5NzMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NzMsOSArOTg1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTAwOCw2ICsxMDE4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAxOCw2ICsxMDI5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTAzMSw3ICsxMDQzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExNTEsNiArMTE2Miw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjEwLDcgKzEyMjIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjg0LDYgKzEyOTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMwMSw2ICsxMzEzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzMjIsNyArMTMzNSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTM2NCwxMSArMTM3NiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwppbmRleCBmZjMxNjY3Li5iNTJlYzA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NSw2ICsyNTgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcyLDYgKzI3Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTAwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYzOSw3ICs2NDcsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC02NDksMTAgKzY1Niw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1MCw2ICs3NTQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgwNCw5ICs4MDksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg1MywxNyArODU1LDIyIEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04OTcsOCArOTA0LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05MDgsNiArOTE3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05OTIsNyArMTAwMiw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDM4LDYgKzEwNDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEwNyw3ICsxMTE3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTE4Myw2ICsxMTkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMDAsNiArMTIxMCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjMyLDcgKzEyNDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyNzQsMTEgKzEyODQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKaW5kZXggZTI4NWVjMC4uNzMwMDYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDIxICsxMjcsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDcsNiArMTQ4LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwMyw2ICs1MTAsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0MiwxMSArNTUwLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY5LDYgKzU4MCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTk2LDYgKzYwOCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY3Miw3ICs2ODUsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcyMCwxMCArNzM1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODE2LDYgKzgyOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY5LDkgKzg4Miw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg5LDYgKzg5OSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MzgsNiArOTUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTQ5LDkgKzk2NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk4NCw2ICs5OTgsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05OTQsNiArMTAwOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMDcsNyArMTAyMyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDcyLDYgKzEwODcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEzMCw3ICsxMTQ2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwNiw2ICsxMjIxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjEsNiArMTIzNyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQyLDcgKzEyNTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyODQsMTEgKzEzMDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKaW5kZXggMWFiM2U0Yy4uOWU5MTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDIxICsxMjcsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDcsNiArMTQ4LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2Myw2ICszNjgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Miw2ICszOTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk5LDcgKzQwNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0MTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5OCw2ICs1MDUsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01MzcsMTEgKzU0NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1NzUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs2MDMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02MTAsNiArNjIzLDcgQEAKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldApAQCAtNjc4LDcgKzY5Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzA4LDEwICs3MjQsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTMsNiArODI2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjcsOSArODgxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04ODcsNiArODk4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkzNiw2ICs5NTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NDcsOSArOTY0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTg3LDYgKzEwMDIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTAxMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMTAsNyArMTAyNyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDQ5LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTA4NSw2ICsxMTAyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE2MCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTg4LDYgKzEyMDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI0Niw3ICsxMjY2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTM2MSw2ICsxMzgwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM3Niw2ICsxMzk2LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzOTYsMTIgKzE0MTcsMTMgQEAKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ0MywxMSArMTQ2NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggM2E2OGY4Ni4uNmIzOTkxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQotIyBUdWUgQXVnIDExIDE5OjU3OjUxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyNyArMTI2LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU0LDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzEsNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjYsNiArMzcxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTUsNiArNDAxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMiw3ICs0MDksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTUsNiArNDIxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjIsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02NTEsNyArNjU4LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02ODEsMTAgKzY5MCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc4Niw2ICs3OTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg0MCw5ICs4NDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg2MCw2ICs4NjQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTA5LDYgKzkxOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTkyMCw5ICs5MzAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05NjAsNiArOTY4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTcwLDYgKzk3OSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTgzLDcgKzk5Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzNSw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTExNDgsNiArMTE1OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjA3LDcgKzEyMTgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzA2LDYgKzEzMTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMyMSw2ICsxMzMyLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNDIsNyArMTM1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTM4NCwxMSArMTM5NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKaW5kZXggZmYwNGUxMC4uYTViZGU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEyMywyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKIENPTkZJR19LU0k4NTYwPXkKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNDgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM1NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc3LDYgKzM4NSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODQsNyArMzkzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTgyLDYgKzU5MSw4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC01OTEsMTAgKzYwMiw3IEBACiBDT05GSUdfR0lBTkZBUj15CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcwNCwxMCArNzEyLDE5IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03MTksOSArNzM2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc1NSw3ICs3NzAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODE4LDYgKzgzMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04NzcsNyArODkyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NDUsNiArOTU5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjIsNiArOTc3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk4MSwxMCArOTk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwMDgsMTAgKzEwMjYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTAzOSw3ICsxMDU3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwNzAsMTEgKzEwODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZwppbmRleCBmYjEwY2M4Li5jMTBlMjZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI3ICsxMjksMjggQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODksNiArMTkzLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0NCw2ICsyNDksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYxLDYgKzI2Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ5LDYgKzM1Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM4Niw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODUsNyArMzk0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgzLDE1ICs0OTIsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODgsNiArNTk2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU5OCw5ICs2MTEsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjM0LDcgKzY0NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC02OTYsNiArNzA2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc1NCw3ICs3NjUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTgyMiw2ICs4MzIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODM5LDYgKzg1MCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC04NTcsMTAgKzg2OSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC04ODMsMTAgKzg5NywxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTkxMiw3ICs5MjYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTQzLDExICs5NTYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwppbmRleCA1YzhjZTY5Li44ZDlmMGE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI3LDI5ICsxMzAsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkyLDYgKzE5Niw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUyLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2NCw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2MSw2ICszNjgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MCw2ICszOTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk3LDcgKzQwNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMCw2ICs0MTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUzMCw3ICs1MzksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNTgyLDEwICs1OTMsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTgsMTQgKzcwNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC03MjEsOSArNzM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc0Niw2ICs3NjIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03NTksNyArNzc2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTgyNCw2ICs4NDAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODgyLDcgKzg5OSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTUwLDYgKzk2Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjcsNiArOTg0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk4NSwxMCArMTAwMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDExLDEwICsxMDMxLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTA0MCw3ICsxMDYwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwNzEsMTEgKzEwOTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwppbmRleCAxNThlNjNlLi45YjYzZTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI4ICsxMjksMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0NSw2ICsyNTAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYyLDYgKzI2OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU5LDYgKzM2Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg4LDYgKzM5Niw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTUsNyArNDA0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA4LDYgKzQxNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTgyLDcgKzU5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjMwLDEwICs2NDEsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MzcsNiArNzQ1LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTc1MSw5ICs3NjQsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzc2LDYgKzc4Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTc4OSw3ICs4MDEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODU0LDYgKzg2NSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05MTIsNyArOTI0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05ODAsNiArOTkxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk5Nyw2ICsxMDA5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwMTUsMTAgKzEwMjgsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA0MSwxMCArMTA1NiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwNzAsNyArMTA4NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTAxLDExICsxMTE1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCmluZGV4IDI3MjZmY2ExLi4xYjIzNTY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyNyArMTI4LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDIsNiArMjQ3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OSw2ICsyNjUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1NSw2ICszNjIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICszOTIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkxLDcgKzQwMCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwNCw2ICs0MTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUyMSw3ICs1MzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU2OSwxMCArNTgwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc2LDYgKzY4NCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC02OTAsOSArNzAzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxNSw2ICs3MjYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03NTgsNiArNzcwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTgxNiw3ICs4MjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg3Miw2ICs4ODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODg3LDYgKzkwMCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC05MDcsNyArOTIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkzOCwxMSArOTUxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCmluZGV4IGIwYzQ2OTguLjk1OWQwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI2ICsxMjksMjcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Miw2ICsyNDcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU5LDYgKzI2NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ3LDYgKzM1NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc2LDYgKzM4NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODMsNyArMzkyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgxLDE1ICs0OTAsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODQsNiArNTkyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU5NCw5ICs2MDcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjMwLDcgKzY0MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03MjEsNiArNzMxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc3OSw3ICs3OTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg0Nyw2ICs4NTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg2Myw2ICs4NzQsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTg4MSwxMCArODkzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTkwNywxMCArOTIxLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtOTQ3LDcgKzk2MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05NzgsMTEgKzk5MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCmluZGV4IDA0Yzg1ZGEuLjdmNWVjMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Myw2ICsxOTcsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKIENPTkZJR19TT0NSQVRFUz15CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Nyw2ICsyNTIsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY0LDYgKzI3MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU4LDYgKzM2NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjEsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00ODIsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTY2OCw3ICs2NzcsOSBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjk4LDEwICs3MDksNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjUsNiArNzczLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldApAQCAtNzc0LDcgKzc4Myw2IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC04MzQsNiArODQyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODgsOSArODk3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsNiArOTI3LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKIENPTkZJR19IV01PTl9WSUQ9eQorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTk3Myw2ICs5ODQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05ODUsOSArOTk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMDYsOCArMTAxNiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTAxNyw2ICsxMDI5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTEyLDcgKzExMjUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzUsNiArMTE0Nyw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTE4NCw2ICsxMTk3LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzMTksNiArMTMzMyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzY5LDYgKzEzODQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQzOCw3ICsxNDU0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU1Miw2ICsxNTY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1NjksNiArMTU4NSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNTg5LDcgKzE2MDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTYyMSwxMSArMTYzNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZwppbmRleCBlN2U4MWQ2Li5jODMyN2U4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMiArMTMwLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUwLDcgKzE1Miw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Nyw2ICsyMDEsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjUyLDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjksNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTUsNiArNDYzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ2Miw3ICs0NzEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzUsNiArNDgzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MjIsNiArNjMxLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NjIsNyArNjcyLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTczMiw4ICs3NDQsMTAgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTc4MiwxMCArNzk2LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODI3LDExICs4MzgsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC04NDIsNiArODU3LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC05MDksNiArOTI1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KQEAgLTk2Nyw5ICs5ODQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMDMsMTQgKzEwMTcsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA2MSw2ICsxMDg1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA3Miw5ICsxMDk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwOTIsNiArMTExNSw3IEBACiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExMDIsNiArMTEyNiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKIENPTkZJR19BR1A9bQorQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT1tCiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CkBAIC0xMTI1LDcgKzExNTAsNiBAQAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE5MCw2ICsxMjE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNTQsNyArMTI3OSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNTIsNiArMTM3Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzY5LDYgKzEzOTQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTM4OCwxMCArMTQxNCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNDE0LDEwICsxNDQyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTQ0Myw3ICsxNDcxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE0NzUsMTEgKzE1MDIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKaW5kZXggMmM0MDc1Mi4uODI1NjM3MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNDgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU0LDYgKzM2MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzgzLDYgKzM5MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTAsNyArMzk5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjc3LDkgKzY4NSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzI3LDEwICs3MzcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjQsNiArODMxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NzYsOSArODg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04OTYsNiArOTAxLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NDUsNiArOTU1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTU2LDkgKzk2Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTc3LDYgKzk4Niw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk4Nyw2ICs5OTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMDAsNyArMTAxMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDY1LDYgKzEwNzUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEzNCw3ICsxMTQ1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjAzLDYgKzEyMTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMCw2ICsxMjMxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNDAsNyArMTI1Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjcxLDExICsxMjgyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCmluZGV4IDg0NTczMWQuLjkxZDg1ZDczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKaW5kZXggNGYyMjhhOS4uZGViZTI2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjYsMjIgKzEyOSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0OSw2ICsxNTEsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Niw2ICsyMDAsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjUyLDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjksNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNzEsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsNiArNDE5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjAsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjMwLDcgKzYzOSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjc4LDEwICs2ODksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NzIsNiArNzgwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MjUsOSArODM0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NDUsNiArODUxLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg5NCw2ICs5MDUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MDUsOSArOTE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkyNiw2ICs5MzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtOTQ5LDcgKzk2MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDQyLDYgKzEwNTMsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTExMSw3ICsxMTIzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMTgwLDYgKzExOTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE5Nyw2ICsxMjA5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEyMTYsMTAgKzEyMjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTI0MiwxMCArMTI1NywxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEyNzEsNyArMTI4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzAzLDExICsxMzE3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCmluZGV4IDkxOTY3MjQuLjc0NTE1NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI5ICsxMjgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Myw2ICsyNjksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1Nyw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkzLDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY4MSw5ICs2ODksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTczMiwxMCArNzQyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODMxLDYgKzgzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg2LDkgKzg5NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDE0ICs5MjYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk3OSw2ICs5OTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05OTAsOSArMTAwNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAxMiw2ICsxMDI2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDM3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDM1LDcgKzEwNTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTEwMCw2ICsxMTE1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExNjksNyArMTE4NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjc1LDcgKzEyOTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwNiwxMSArMTMyMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZwppbmRleCAyZTQ5YTZlLi42MzFkOTJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwppbmRleCAxMDI1ZGEyLi41MmFjYmFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OSwxMSArOTEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyOCwyMiArMTMxLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUxLDcgKzE1Myw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIwMSw2ICsyMDUsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogQ09ORklHX1hFU19NUEM4NXh4PXkKQEAgLTI1Niw2ICsyNjEsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA1LDYgKzQxMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQ2LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ1Nyw5ICs0NjYsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTYzNSw2ICs2NDQsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzQsMTEgKzY4NCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzI4LDYgKzc0Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTgwNCw3ICs4MTksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTgzNCwxMCArODUxLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTUxLDYgKzk2NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAwNiw4ICsxMDIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDEsMTQgKzEwNTQsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA5OSw2ICsxMTIyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTExMCw5ICsxMTM0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE1MSw2ICsxMTczLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE2MSw2ICsxMTg0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTE4MSw3ICsxMjA1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjA0LDYgKzEyMjcsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEyNDksNiArMTI3Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lTUDE3NjBfSENEPXkKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTQ2Niw2ICsxNDkxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NDEsNyArMTU2Nyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2NTgsNiArMTY4Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjc1LDYgKzE3MDEsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY5NCwxMCArMTcyMSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE3MjAsMTAgKzE3NDksMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzQ5LDcgKzE3NzgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3OTAsMTEgKzE4MTgsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggNTI3YWQxYS4uMjg5ODA3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjozMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Niw2ICsyNTksNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDY0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDY3LDkgKzQ3NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02ODAsNiArNjg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzE5LDEyICs3MjcsMTUgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03NDcsNiArNzU4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03NzUsNiArNzg3LDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NTEsNyArODY0LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04ODEsMTAgKzg5Niw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTEwMTYsNiArMTAyOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA3MSw5ICsxMDg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTEwNiwxNCArMTExNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTY0LDYgKzExODQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTc1LDkgKzExOTYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMjE3LDYgKzEyMzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMjQ3LDcgKzEyNjgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzAsNiArMTI5MCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEzMjIsNiArMTM0Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzOTcsNiArMTQxOSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xNTAxLDYgKzE1MjQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTU3Niw3ICsxNjAwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTY4Miw2ICsxNzA1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjk3LDYgKzE3MjEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTcxOCw3ICsxNzQzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE3NjEsMTEgKzE3ODUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz1tCiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKaW5kZXggY2QzMzhkNC4uZTE5OWQxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEyICsxNTMsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU2LDYgKzI1OSw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0NjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NjcsOSArNDc0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTY4MCw2ICs2ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03MTksMTIgKzcyNywxNSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC03OTYsNyArODA3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MjYsMTAgKzgzOSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk2MSw2ICs5NzEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMTYsOSArMTAyNyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNTEsMTQgKzEwNTksMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTEwOSw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTEyMCw5ICsxMTM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE2Miw2ICsxMTc5LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE3Miw2ICsxMTkwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTE5Miw3ICsxMjExLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjE1LDYgKzEyMzMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjY3LDYgKzEyODYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzQyLDYgKzEzNjIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTQ0Niw2ICsxNDY3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MjEsNyArMTU0Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2MjcsNiArMTY0OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY0Miw2ICsxNjY0LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE2NjMsNyArMTY4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNzA2LDExICsxNzI4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IGJhNDc4ODMuLjNiMGZiZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjozMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjEgKzEzMywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MywxMiArMTU0LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Nyw2ICsyNjAsNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC01MDMsNiArNTA4LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiBDT05GSUdfVElQQz1tCiAjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldApAQCAtNTgyLDYgKzU4OCw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTU4OSw3ICs1OTYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MDIsNiArNjA4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MTEsOSArNjE4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNzgwLDYgKzc4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTgxOSwxMSArODI3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtODQ2LDYgKzg1Nyw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtODczLDYgKzg4NSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTk0OSw3ICs5NjIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTk3OSwxMCArOTk0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTEyMCw2ICsxMTMyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMTc1LDkgKzExODgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMjExLDE0ICsxMjIxLDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEyNjksNiArMTI4OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEyODAsOSArMTMwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEzMjIsNiArMTM0MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEzMzIsNiArMTM1Miw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEzNTIsNyArMTM3Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3NSw2ICsxMzk1LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTQyNyw2ICsxNDQ4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTUwMiw2ICsxNTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKQEAgLTE2MDcsNiArMTYzMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNjY5LDcgKzE2OTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNzc1LDYgKzE3OTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE3OTEsNiArMTgxNSw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTgxMCwxMCArMTgzNSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xODM3LDEwICsxODY0LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTg3Miw3ICsxODk5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE5MTUsMTEgKzE5NDEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKaW5kZXggYTYxZjE4My4uZGU0ZDUyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODMsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjYsMjIgKzEyOCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0OSw2ICsxNTAsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MSw2ICsyNTQsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY4LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzg1LDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDE0LDYgKzQyMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjEsNyArNDI4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM0LDYgKzQ0MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ0NSw5ICs0NTIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC02NjIsNiArNjY5LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzAxLDExICs3MDksMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzI4LDYgKzczOSw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTc1NSw2ICs3NjcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MTgsMTQgKzgzMSwxMyBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkyOSw2ICs5NDEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTgyLDkgKzk5NSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAwMiw3ICsxMDEyLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjEsNiArMTAzMCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMzEsNiArMTA0MSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExMDcsNiArMTExOCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMjA5LDcgKzEyMjEsNiBAQAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTMyOSw2ICsxMzQwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTM4OCw3ICsxNDAwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUwNSw2ICsxNTE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjIsNiArMTUzNCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNTQxLDEwICsxNTU0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE1NjcsMTAgKzE1ODIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNTk3LDcgKzE2MTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTYyOSwxMSArMTY0MywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggNzAxNmNlNy4uNzU0YTc5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODcsMTEgKzg4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjIgKzEzMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1Myw3ICsxNTQsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTEsMTMgKzI1NCwxMyBAQAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzUsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDA4LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDM0LDYgKzQzOSw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0MSw3ICs0NDcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NTQsNiArNDU5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTQ2LDYgKzU1Miw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTg1LDExICs1OTIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjEyLDYgKzYyMiw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzOSw2ICs2NTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MTUsNyArNzI3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03NjMsMTAgKzc3Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4MCw2ICs4OTEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTM0LDkgKzk0Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTU0LDcgKzk2Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05NzMsNiArOTgxLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTgzLDYgKzk5Miw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwMDIsNiArMTAxMiw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTEwNSw3ICsxMTE2LDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEyOCw2ICsxMTM4LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE4MCw2ICsxMTkxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMzU4LDYgKzEzNzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQyOCw3ICsxNDQxLDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NDYsNiArMTU1OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTYzLDYgKzE1NzYsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU4MiwxMCArMTU5NiwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjA4LDEwICsxNjI0LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTYzOCw3ICsxNjU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNjgwLDExICsxNjk1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKaW5kZXggZjVjYTJlMC4uODk5OTFmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg3LDExICs4OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTMgKzE1MywxNSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCiAjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTcsNiArMjYwLDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNTAyLDYgKzUwNyw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQogIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU4MSw2ICs1ODcsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC01ODgsNyArNTk1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjAxLDYgKzYwNyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjEwLDkgKzYxNyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTgzMyw3ICs4NDAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg2MywxMCArODcyLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTk2LDYgKzEwMDIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwNDksOSArMTA1Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA2OSw2ICsxMDczLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMTgsNiArMTEyNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMjksOSArMTEzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNjQsNiArMTE3Miw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTE4Myw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTQsNyArMTIwNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMjc0LDYgKzEyODMsNyBAQAogIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQzLDcgKzEzNTMsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQ1MSw2ICsxNDYwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ2Nyw2ICsxNDc3LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNDg2LDEwICsxNDk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE1MTQsMTAgKzE1MjcsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTU1MCw3ICsxNTYzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE1OTMsMTEgKzE2MDUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKaW5kZXggYWVjZTZiYi4uMDUyY2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03OCwxMSArODAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNiwyOCArMTE5LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM1LDEwICsyMzksMTAgQEAKICMgQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU2LDYgKzI2MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzM4LDYgKzM0Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzQsNyArMzgxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzg3LDYgKzM5Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTMwLDE2ICs1MzcsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODAsNiArNTg2LDcgQEAKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01OTAsNiArNTk3LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03MTYsNiArNzI0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzc1LDcgKzc4NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg0Nyw2ICs4NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjQsNiArODczLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04ODAsMTAgKzg5MCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC05MDYsMTAgKzkxOCwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZwppbmRleCA4MTA1MzYwLi4wZmI2NWE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1k9eQpAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs5MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTM1LDIzICsxMzgsMjQgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKQEAgLTE2MSwxMiArMTY1LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjc1LDEyICsyODEsMTIgQEAKIENPTkZJR19CSU5GTVRfTUlTQz15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjk4LDYgKzMwNCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzA5LDYgKzMxNiw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtNjc0LDEwICs2ODIsMTIgQEAKICMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkZVU0I9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTY4Niw3ICs2OTYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02OTksNiArNzA4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNzEwLDkgKzcyMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPW0KIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC03NjMsNiArNzczLDcgQEAKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTg1Nyw2ICs4NjgsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQ9bQogQ09ORklHX1NDU0lfM1dfOVhYWD1tCiBDT05GSUdfU0NTSV9BQ0FSRD1tCkBAIC05MTIsNyArOTI0LDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTk4Miw3ICs5OTYsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTEwMTAsMTAgKzEwMjYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMTQ1LDYgKzExNTgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEyMDAsOSArMTIxNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9bQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEyMjAsNiArMTIzMSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj1tCiBDT05GSUdfSFdNT05fVklEPW0KKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQEAgLTEyNjksNiArMTI4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVklBNjg2QT1tCiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMjgwLDcgKzEyOTcsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkBAIC0xMzE3LDYgKzEzMzMsNyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEzMjcsNiArMTM0NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTM3OCw2ICsxMzk2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1ODgsNiArMTYwNyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNjY4LDcgKzE2ODgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNzcwLDcgKzE3ODksNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDX1QxMERJRj1tCiBDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CkBAIC0xNzk3LDYgKzE4MTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xODE0LDYgKzE4MzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKQEAgLTE4MzQsMTEgKzE4NTUsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTE4NTIsNiArMTg3NSw3IEBACiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQpAQCAtMTg2OSw2ICsxODkzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE4OTksNiArMTkyNCw3IEBACiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfTFNNX01NQVBfTUlOX0FERFI9NjU1MzYKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTT15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1fVkFMVUU9MQpAQCAtMTkxMyw3ICsxOTM5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE5NTYsMTEgKzE5ODEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCmluZGV4IDBhYTViNDMuLmVmNWVkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExNiwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1MCw2ICsxNTMsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMyw2ICsyMzcsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM5NCw2ICs0MDAsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAxLDcgKzQwOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MTMsNiArNDE5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MDAsNyArNjA3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY0OCwxMCArNjU3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzM2LDE1ICs3NDIsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc2Nyw2ICs3NzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk2OCw2ICs5NzksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk5OCwxMCArMTAxMCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDI0LDYgKzEwMzgsNyBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMDUyLDcgKzEwNjcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEwOTQsNiArMTEwOCw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKaW5kZXggMmMyOTJlMi4uNzNlZjliZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc3LDExICs3OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE1LDI4ICsxMTgsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMzQsMTAgKzIzOCwxMCBAQAogQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU1LDYgKzI1OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzM3LDYgKzM0Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY2LDYgKzM3Miw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzMsNyArMzgwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5Miw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTI5LDE2ICs1MzYsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MTEsNyArNjE3LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY3Miw2ICs2NzcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03MzEsNyArNzM3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODAzLDYgKzgwOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODIwLDYgKzgyNiw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODM2LDEwICs4NDMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtODYxLDEwICs4NzAsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKaW5kZXggNDU2NzFlNy4uNjNjM2U4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODMsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzMywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDExICsxNTUsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTgsNiArMjYxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NSw2ICsyNzksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQ4Miw2ICs0ODcsNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNTExLDYgKzUxNyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC01MTksNyArNTI2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTMyLDYgKzUzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0Myw5ICs1NTAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTcxMSw2ICs3MTgsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTc1MCwxMSArNzU4LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzc3LDYgKzc4OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtODA0LDYgKzgxNiw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTg3MCw3ICs4ODMsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTkxOCwxMCArOTMzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTA0Myw2ICsxMDU1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDk3LDkgKzExMTAsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTExMTcsNiArMTEyNywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTY2LDYgKzExODEsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTc3LDkgKzExOTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTE5OCw2ICsxMjEyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTIwOCw2ICsxMjIzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTIyNyw3ICsxMjQzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcxLDYgKzEyODYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTUwMCw2ICsxNTE2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NjcsNyArMTU4NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2ODEsNiArMTY5Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY5OCw2ICsxNzE1LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE3MTYsMTAgKzE3MzQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTc0Miw2ICsxNzYyLDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE3NzEsNyArMTc5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTgxMywxMSArMTgzMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKaW5kZXggMzBiNjhiZi4uNTIwYjA0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQotIyBGcmkgQXVnICA3IDA4OjE5OjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyMywyOCArMTI1LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0Nyw2ICsyNTAsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI2MCw2ICsyNjQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM5MCw2ICszOTUsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk3LDcgKzQwMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MDksNiArNDE0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MDgsNyArNjE0LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02MTYsMTAgKzYyNCw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjg1LDYgKzY5MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzQwLDcgKzc0Niw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTc3MSwxNSArNzc2LDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03OTksNiArODA4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODA5LDYgKzgxOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDMzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA1MiwxMCArMTA2NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDc5LDYgKzEwOTMsNyBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwOSw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTUxLDYgKzExNjUsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCmluZGV4IDFhZTg1YTMuLjQzYzNjNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NiwxMSArNzgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNywyNyArMTIwLDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM3LDEwICsyNDEsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0NCw2ICszNDksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Myw2ICszNzksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgwLDcgKzM4Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTU1MywxNiArNTU5LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX0ZFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUX01ESU9fRkVDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MzUsNyArNjQwLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcwNyw2ICs3MTEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzc2LDcgKzc4MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg1MSw2ICs4NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs4NzAsNyBAQAogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC04ODcsNyArODkzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkxOCwxMSArOTIzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKaW5kZXggYWFhNDQxNjYuLjUyM2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIE1vbiBBcHIgMjAgMTE6MDY6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CkBAIC01MywxMiArNTcsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMDMsNyArMTEwLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE2LDYgKzEyMiwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjQsMTQgKzEzNywxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ0LDcgKzE2Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMDUsNyArMjIzLDcgQEAKIENPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQogQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NJTVBMRV9HUElPPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI5LDExICsyNDcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OSw5ICsyNjksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjUsNiArMjg2LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ5LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYzLDYgKzM4Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg4LDYgKzQxMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDkgKzQyMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTE5LDcgQEAKIENPTkZJR19PRl9HUElPPXkKIENPTkZJR19PRl9JMkM9eQogQ09ORklHX09GX1NQST15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTI5LDcgKzU1Niw5IEBACiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTUyLDEwICs1ODEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTcyLDYgKzU5Nyw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4MCw2ICs2MDcsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTk5LDcgKzYyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MTEsMTEgKzYzOCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2OTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODQsMTQgKzcxNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03MzksMTYgKzc3NCwxNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQpAQCAtODgzLDYgKzkyMCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MTAsMTAgKzk0OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjksMTEgQEAKICMKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtOTU3LDE2ICs5OTYsMjcgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDE5LDYgKzEwNjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAzMSw5ICsxMDgzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDczLDMxICsxMTIzLDIwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTE2Nyw2ICsxMjA2LDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAogIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0CkBAIC0xMTk4LDcgKzEyMzgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsMTAgKzEyNTYsMTEgQEAKIENPTkZJR19ISURfQ0hFUlJZPXkKICMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTIzMSwxMCArMTI3MSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMjYxLDE1ICsxMzAyLDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTE0MDAsNiArMTQ0Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQxMSw2ICsxNDU1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0MzQsNiArMTQ3OSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xNDUzLDEwICsxNTAyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUzMywxMiArMTU4NSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE2MjQsNiArMTY3Niw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE2MzMsNiArMTY4Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjUwLDEwICsxNzA0LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTY2NSwxMSArMTcyMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xNjc4LDIzICsxNzM3LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTcxOSw3ICsxNzgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzYxLDExICsxODIxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBmMjM0MjhjLi5kOGIzNjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTIzLDI4ICsxMjUsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsNiArMjQ0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg2LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3OCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUxNywxMSArNTI1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQzLDYgKzU1NCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTcwLDYgKzU4Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY2Niw5ICs2NzksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxNSwxMCArNzMwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODIyLDYgKzgzNCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MzYsOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2MSw2ICs4NzYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC04NzQsNyArODkwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTkzOSw2ICs5NTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTk3LDcgKzEwMTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDg2LDYgKzExMDIsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwNyw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExMzgsMTEgKzExNTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDAyNzE2ZjcuLjAwZmFkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjExIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTE2LDI5ICsxMTgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTUxLDYgKzE1NCw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM2LDYgKzI0MCw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjQ5LDYgKzI1NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQxNiw2ICs0MjIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3Nyw3ICs0ODQsNiBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9TQkM4MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02MDQsNyArNjEwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY1MiwxMCArNjYwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA0LDYgKzcwOSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03OTMsMTUgKzgwMCwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI0LDYgKzgzNSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzMiw2ICsxMDQ0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMDgwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwOTMsNiArMTEwOCw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMjEsNyArMTEzNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2Myw2ICsxMTc4LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IDRhOTZjYjYuLjY0ZGZmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMSArMTI5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjYzLDYgKzI2Niw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDMsNyArMzQ4LDggQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM1OCw3ICszNjQsNyBAQAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNzcsNiArMzgzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMyw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MzMsOSArNDQxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjA4LDYgKzYxNiw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NTYsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzQsNiArNjg2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzc3LDcgKzc5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODAwLDcgKzgxNiw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC04MjgsMTAgKzg0Myw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzNSw2ICs5NDcsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk5MCw5ICsxMDAzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDI1LDE0ICsxMDM1LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTEwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwOTQsOSArMTExNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExMzUsNiArMTE1NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNDUsNiArMTE2NSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNTgsNyArMTE3OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4MSw2ICsxMjAxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzMyw2ICsxMjU0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldApAQCAtMTI5MSw2ICsxMzEzLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzgsNiArMTM2MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzk3LDcgKzE0MjEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTE0LDYgKzE1MzcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyOSw2ICsxNTUzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1NTAsNyArMTU3NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNTkxLDEzICsxNjE1LDE1IEBACiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjA1LDE2ICsxNjMxLDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZWU2YWNjNjUuLmExMmU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyNToyMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzkwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzNCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCw3ICsxNTYsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODksNiArMTkzLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMjA2LDcgKzIxMSw3IEBACiBDT05GSUdfTVBDODV4eF9SREI9eQogQ09ORklHX1NPQ1JBVEVTPXkKIENPTkZJR19LU0k4NTYwPXkKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKK0NPTkZJR19YRVNfTVBDODV4eD15CiBDT05GSUdfU1RYX0dQMz15CiBDT05GSUdfVFFNODU0MD15CiBDT05GSUdfVFFNODU0MT15CkBAIC0yNTksMTAgKzI2NCwxMCBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMDcsNyArMzEzLDcgQEAKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkBAIC0zMTUsNyArMzIxLDggQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CitDT05GSUdfUkFQSURJTz15CitDT05GSUdfUkFQSURJT19ESVNDX1RJTUVPVVQ9MzAKIAogIwogIyBBZHZhbmNlZCBzZXR1cApAQCAtMzQ1LDcgKzM1Miw3IEBACiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCitDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNjksMTIgKzM3NiwxMiBAQAogQ09ORklHX0FSUEQ9eQogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKQEAgLTQxMSw2ICs0MTgsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDEsNiArNDQ5LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ4LDcgKzQ1Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2MSw2ICs0NjksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NTQsNiArNTYzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01OTMsMTEgKzYwMywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjMzLDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjQ3LDYgKzY2MSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyMyw3ICs3MzgsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTc1MCw3ICs3NjcsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzc4LDEwICs3OTQsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03OTgsNiArODExLDcgQEAKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC04OTgsNiArOTEyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1NSw5ICs5NzAsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk5MSwxNSArMTAwMywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyMCw2ICsxMDM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAzMCw2ICsxMDQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTA0OSw2ICsxMDY3LDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTUyLDcgKzExNzEsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc1LDYgKzExOTMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNDYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEyNDEsNyArMTI2MSw2IEBACiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTE0MjksNiArMTQ0OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDk5LDcgKzE1MTksNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYyMCw2ICsxNjM5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjM3LDYgKzE2NTcsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY1NiwxMCArMTY3NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjgzLDEwICsxNzA2LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MTQsNyArMTczNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzU3LDExICsxNzc5LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NjksMTYgKzE3OTMsMTYgQEAKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwppbmRleCBkYjA4MmNlLi5jZDcwYjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyNjowMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TTVA9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg5LDExICs5MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMyLDIyICsxMzUsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTUsOCArMTU3LDEwIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTIsNiArMTk2LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMjA2LDkgKzIxMSwxMCBAQAogQ09ORklHX01QQzg1eHhfTURTPXkKIENPTkZJR19NUEM4NTM2X0RTPXkKIENPTkZJR19NUEM4NXh4X0RTPXkKK0NPTkZJR19NUEM4NXh4X1JEQj15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAorQ09ORklHX1hFU19NUEM4NXh4PXkKIENPTkZJR19TVFhfR1AzPXkKIENPTkZJR19UUU04NTQwPXkKIENPTkZJR19UUU04NTQxPXkKQEAgLTI2MSwxMSArMjY3LDExIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODMsNiArMjg5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMTAsNyArMzE3LDcgQEAKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX01TST15CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CkBAIC0zMTgsNyArMzI1LDggQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CitDT05GSUdfUkFQSURJTz15CitDT05GSUdfUkFQSURJT19ESVNDX1RJTUVPVVQ9MzAKIAogIwogIyBBZHZhbmNlZCBzZXR1cApAQCAtMzQ4LDcgKzM1Niw3IEBACiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCitDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zNzIsMTIgKzM4MCwxMiBAQAogQ09ORklHX0FSUEQ9eQogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKQEAgLTQxNCw2ICs0MjIsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDQsNiArNDUzLDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDUxLDcgKzQ2MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0NzMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NTcsNiArNTY3LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01OTYsMTEgKzYwNywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MjMsNiArNjM3LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjUwLDYgKzY2NSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyNiw3ICs3NDIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTc1Myw3ICs3NzEsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzgxLDEwICs3OTgsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MDEsNiArODE1LDcgQEAKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC05MDEsNiArOTE2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1OCw5ICs5NzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk5NCwxNSArMTAwNywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyMyw2ICsxMDQwLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAzMyw2ICsxMDUxLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTA1Miw2ICsxMDcxLDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTU1LDcgKzExNzUsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc4LDYgKzExOTcsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjMwLDYgKzEyNTAsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEyNDQsNyArMTI2NSw2IEBACiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTE0MzIsNiArMTQ1Miw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTAyLDcgKzE1MjMsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYyMyw2ICsxNjQzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjQwLDYgKzE2NjEsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY1OSwxMCArMTY4MSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjg2LDEwICsxNzEwLDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MTcsNyArMTc0MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzYwLDExICsxNzgzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NzIsMTYgKzE3OTcsMTYgQEAKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKaW5kZXggNjgwOWI2MS4uNDBkNmYwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzYsMTEgKzc4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTMsMjggKzExNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzMywxMCArMjM3LDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTQsNiArMjU4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDAsNiArMzQ1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM3Niw3ICszODMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjcsNiArNDczLDggQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CkBAIC00NzYsMTAgKzQ4NCw3IEBACiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTIwLDYgKzUyNSw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTMwLDYgKzUzNiw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNTk1LDYgKzYwMiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02MDUsOSArNjE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY0MSw3ICs2NTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzA1LDYgKzcxNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NjMsNyArNzczLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODM2LDYgKzg0NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NTEsNiArODYxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTg3MSw3ICs4ODIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTAyLDExICs5MTIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwppbmRleCAwZTg2ODRhLi41YjNhYmI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzMywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCw3ICsxNTUsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTMsMTMgKzI1NiwxMyBAQAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzcsNiArMjgwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEwLDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDM2LDYgKzQ0MSw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Myw3ICs0NDksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NTYsNiArNDYxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTQ5LDYgKzU1NSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTg4LDExICs1OTUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjE1LDYgKzYyNSw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NTMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MTgsNyArNzMwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03NjYsMTAgKzc4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4Myw2ICs4OTQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTM4LDkgKzk1MCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTc0LDE1ICs5ODMsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMDMsNiArMTAxNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMTMsNiArMTAyNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwMzIsNiArMTA0Nyw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTEzNSw3ICsxMTUxLDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OCw2ICsxMTczLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIxMCw2ICsxMjI2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMzg5LDYgKzE0MDYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ1OSw3ICsxNDc3LDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NzcsNiArMTU5NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTk0LDYgKzE2MTIsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTYxMywxMCArMTYzMiwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjM5LDEwICsxNjYwLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTY2OSw3ICsxNjkwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzExLDExICsxNzMxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKaW5kZXggZGJlOGU4NjkuLjFkYTM0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc3LDExICs3OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE1LDI4ICsxMTgsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsMTAgKzI0NSwxMCBAQAogQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYyLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ0LDYgKzM0OSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzczLDYgKzM3OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODAsNyArMzg3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzkzLDYgKzM5OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTQwLDE2ICs1NDcsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MjIsNyArNjI4LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4Myw2ICs2ODgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03NDIsNyArNzQ4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODE0LDYgKzgxOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODMxLDYgKzgzNyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODQ3LDEwICs4NTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtODcyLDEwICs4ODEsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwppbmRleCA0Zjg2ODFjLi4yMGJhMGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKQEAgLTEsNDkgKzEsNTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzMKLSMgVHVlIE1heSAyNyAxNjowODowNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmMzCisjIFR1ZSBPY3QgIDYgMTA6Mjc6MTggMjAwOQogIwogQ09ORklHX1BQQzY0PXkKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIworQ09ORklHX1BQQ19CT09LM1NfNjQ9eQorIyBDT05GSUdfUFBDX0JPT0szRV82NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szUz15CiBDT05GSUdfUE9XRVI0X09OTFk9eQogQ09ORklHX1BPV0VSND15CiAjIENPTkZJR19UVU5FX0NFTEwgaXMgbm90IHNldAogQ09ORklHX1BQQ19GUFU9eQogQ09ORklHX0FMVElWRUM9eQorIyBDT05GSUdfVlNYIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfNjQ9eQogQ09ORklHX1BQQ19NTV9TTElDRVM9eQogIyBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19PRj15CkBAIC01MSwxMSArNjAsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzIsMTAgKzg0LDIwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtODQsMTMgKzEwNiwxNyBAQAogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC05OCwzMiArMTI0LDUyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTEzMSwxMSArMTc3LDEwIEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKQEAgLTE1MCwxOSArMTk1LDE0IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CiAjCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUEFTRU1JPXkKQEAgLTE3OCw4ICsyMTgsMTAgQEAKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9RUEFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19OQVRJVkU9eQorQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQogIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKQEAgLTIxMyw2ICsyNTUsNyBAQAogIwogQ09ORklHX1BQQ19QQVNFTUlfQ1BVRlJFUT15CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIyNiwxNiArMjY5LDE5IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX0haPTEwMDAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKQEAgLTI0Myw2ICsyODksNyBAQAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTI1MywyMCArMzAwLDI4IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQorIyBDT05GSUdfUFBDXzRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX1BQQ182NEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9OQogIyBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKQEAgLTI4NSw2ICszNDAsOCBAQAogQ09ORklHX1BDSV9NU0k9eQogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15CiBDT05GSUdfUENNQ0lBX0RFQlVHPXkKIENPTkZJR19QQ01DSUE9eQpAQCAtMzAxLDEzICszNTgsMTAgQEAKIENPTkZJR19FTEVDVFJBX0NGPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zNTYsOSArNDEwLDExIEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM2OCwyNSArNDI0LDMyIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zOTgsMTUgKzQ2MSwxOSBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKIApAQCAtNDc4LDExICs1NDUsMTcgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MDEsMjkgKzU3NCw0MSBAQAogIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwogIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci1DT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERVNDU0k9eQogQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKIENPTkZJR19JREVfUFJPQ19GUz15CiAKQEAgLTU0MiwxNCArNjI3LDEzIEBACiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldApAQCAtNTYzLDggKzY0Nyw2IEBACiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSERfT05MWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC01ODYsMTAgKzY2OCw2IEBACiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQogQ09ORklHX0NIUl9ERVZfU0NIPXkKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CkBAIC02MDYsNiArNjg0LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02MTQsMTEgKzY5NCwxNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldApAQCAtNjI2LDcgKzcxMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzcsMTAgKzcyMSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNjYyLDYgKzc1MCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjkwLDYgKzc3OSw3IEBACiBDT05GSUdfUEFUQV9QQ01DSUE9eQogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcwMywxMiArNzkzLDE1IEBACiAjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9eQogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC03MjUsMTIgKzgxOCwxOSBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT15CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzUzLDYgKzg1Myw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTc2MSwxOSArODY0LDIzIEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTc4MywxOSArODkwLDIyIEBACiAjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTgwNiwzMCArOTE2LDQwIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogQ09ORklHX1BBU0VNSV9NQUM9eQorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTg3NCwxNyArOTk0LDIzIEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldApAQCAtOTAwLDYgKzEwMjYsNyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldApAQCAtOTI2LDEwICsxMDUzLDEzIEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTV9QQVNFTUk9eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldApAQCAtOTQ4LDU3ICsxMDc4LDg1IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotQ09ORklHX0kyQ19QQVNFTUk9eQotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUEFTRU1JPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fTEVHQUNZPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CkBAIC0xMDA2LDE0ICsxMTY0LDE3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtMTAyOCwxMCArMTE4OSwxNCBAQAogQ09ORklHX1NFTlNPUlNfTE05MD15CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKQEAgLTEwMzksNiArMTIwNCw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDUwLDQ0ICsxMjE3LDQwIEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiBDT05GSUdfRFJNPXkKK0NPTkZJR19EUk1fS01TX0hFTFBFUj15CitDT05GSUdfRFJNX1RUTT15CiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX1JBREVPTj15CkBAIC0xMDk5LDYgKzEyNjIsNyBAQAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTExNDAsNiArMTMwNCw3IEBACiAjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldApAQCAtMTE0OCwxMiArMTMxMywxNiBAQAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC0xMTc3LDE1ICsxMzQ2LDkgQEAKIENPTkZJR19MT0dPX0xJTlVYX01PTk89eQogQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTk4LDI0ICsxMzYxLDI0IEBACiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9SQVdNSURJX1NFUT15CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENJPXkKICMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CkBAIC0xMjM0LDYgKzEzOTcsNyBAQAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldApAQCAtMTI0Niw2ICsxNDEwLDggQEAKICMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKQEAgLTEyNjIsNiArMTQyOCw3IEBACiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CkBAIC0xMjc3LDU3ICsxNDQ0LDY0IEBACiAjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgUG93ZXJNYWMgZGV2aWNlcwotIwotCi0jCi0jIEFMU0EgUG93ZXJQQyBkZXZpY2VzCi0jCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKIENPTkZJR19TTkRfVVNCX0FVRElPPXkKIENPTkZJR19TTkRfVVNCX1VTWDJZPXkKICMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBkZXZpY2VzCi0jCitDT05GSUdfU05EX1BDTUNJQT15CiAjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAotIwogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCi0jCi0KLSMKLSMgU29DIEF1ZGlvIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgT01BUAotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0tZRT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CitDT05GSUdfSElEX0tFTlNJTkdUT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTM0MywxOCArMTUxNywyNiBAQAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTM2Myw2ICsxNTQ1LDggQEAKIENPTkZJR19VU0JfU0w4MTFfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xMzcwLDIwICsxNTU0LDIwIEBACiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEzOTksNyArMTU4Myw2IEBACiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xNDEyLDcgKzE1OTUsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xNDIwLDcgKzE2MDMsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTE0MjksNyArMTYxMSwxNSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTQ0Myw2ICsxNjMzLDcgQEAKICMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0VEQUNfTU1fRURBQz15CiBDT05GSUdfRURBQ19QQVNFTUk9eQorIyBDT05GSUdfRURBQ19DUEM5MjUgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTQ3Miw2ICsxNjYzLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQ4MSwyMSArMTY3NSwzMSBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTUwNCwxMSArMTcwOCwxMyBAQAogIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1MTYsNiArMTcyMiwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUyNSw2ICsxNzM1LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKQEAgLTE1NDksMTYgKzE3NjQsMTQgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19DT05GSUdGU19GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xNTc4LDggKzE3OTEsMTAgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1OTAsMTggKzE4MDUsMTcgQEAKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xNjcyLDI1ICsxODg2LDMwIEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX0lUVV9UPXkKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNzAwLDE4ICsxOTE5LDI1IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTcyMSwyNiArMTk0Nyw3MSBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCkBAIC0xNzQ5LDIzICsyMDIwLDM0IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX1hPUl9CTE9DS1M9eQogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNzkzLDE0ICsyMDc1LDIwIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKIENPTkZJR19DUllQVE9fU0hBMjU2PXkKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKQEAgLTE4MzAsNyArMjExOCwxMyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFmNDYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDIxOTkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgRnJpIE9jdCAxNiAxMTozNzoxNSAyMDA5CisjCitDT05GSUdfUFBDNjQ9eQorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQk9PSzNTXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNFXzY0PXkKK0NPTkZJR19QUENfQk9PSzNFPXkKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzY0PXkKK0NPTkZJR19QUENfQk9PSzNFX01NVT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTMyCitDT05GSUdfNjRCSVQ9eQorQ09ORklHX1dPUkRfU0laRT02NAorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQorQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0NPTVBBVD15CitDT05GSUdfU1lTVklQQ19DT01QQVQ9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfVEFTS1NUQVRTPXkKK0NPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQorIyBDT05GSUdfVEFTS19YQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQorIyBDT05GSUdfQ0dST1VQX0NQVUFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorQ09ORklHX0JMT0NLX0NPTVBBVD15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgZHJpdmVycworIworIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19JT01NVV9WTUVSR0U9eQorQ09ORklHX0lPTU1VX0hFTFBFUj15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CitDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMworIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorQ09ORklHX1BDSV9NU0k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CitDT05GSUdfQ0FSREJVUz15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHX1BDST1tCisjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAwMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19ORVQ9eQorQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD15CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KKyMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz15CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CitDT05GSUdfQkxLX0RFVl9GRD15CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX1RJTUlOR1M9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX05FVExJTks9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKK0NPTkZJR19TQ1NJX0lQUj15CitDT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQorQ09ORklHX1NDU0lfSVBSX0RVTVA9eQorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MUEZDPW0KKyMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ERUJVRz1tCisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMMjQ9eQorQ09ORklHX0FUQV9TRkY9eQorQ09ORklHX1NBVEFfU1ZXPXkKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9BVVRPREVURUNUPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CitDT05GSUdfTURfUkFJRDEwPXkKK0NPTkZJR19NRF9SQUlENDU2PXkKKyMgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENl9QUT15CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorIyBDT05GSUdfRE1fTE9HX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KKyMgQ09ORklHX0RNX01VTFRJUEFUSF9RTCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9NVUxUSVBBVEhfU1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0PXkKK0NPTkZJR19JRUVFMTM5NF9PSENJMTM5ND15CisjIENPTkZJR19JRUVFMTM5NF9QQ0lMWU5YIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5NF9TQlAyPW0KK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0X1JPTV9FTlRSWT15CitDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfUkFXSU89eQorQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCitDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KKyMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CitDT05GSUdfV0lOREZBUk09eQorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorQ09ORklHX0JST0FEQ09NX1BIWT1tCisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorQ09ORklHX1NVTkdFTT15CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorQ09ORklHX1ZPUlRFWD15CisjIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX1BDTkVUMzI9eQorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX0FDRU5JQz15CitDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19USUdPTjM9eQorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKK0NPTkZJR19JWEdCPW0KKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19UUj15CitDT05GSUdfSUJNT0w9eQorIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAorIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SQVdfRFJJVkVSPXkKK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CisjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorQ09ORklHX0kyQ19BTUQ4MTExPXkKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKK0NPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9CQUNLTElHSFQ9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorQ09ORklHX0ZCX09GPXkKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQVRST1g9eQorQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQorQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15CitDT05GSUdfRkJfTUFUUk9YX0c9eQorQ09ORklHX0ZCX01BVFJPWF9JMkM9bQorQ09ORklHX0ZCX01BVFJPWF9NQVZFTj1tCitDT05GSUdfRkJfUkFERU9OPXkKK0NPTkZJR19GQl9SQURFT05fSTJDPXkKK0NPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKKyMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CitDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ01DSUE9eQorIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0tZRT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CitDT05GSUdfSElEX0tFTlNJTkdUT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfR1JFRU5BU0lBPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1pFUk9QTFVTPXkKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORD1tCisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CitDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCitDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lTRVI9bQorQ09ORklHX0VEQUM9eQorCisjCisjIFJlcG9ydGluZyBzdWJzeXN0ZW1zCisjCisjIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19FREFDX01NX0VEQUM9eQorIyBDT05GSUdfRURBQ19DUEM5MjUgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDJfRlNfWElQPXkKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRlNfRlM9eQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGU19TRUNVUklUWT15CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YyX0FDTD15CitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WM19BQ0w9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MjA0OAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorQ09ORklHX0xBVEVOQ1lUT1A9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19HRU5FUklDX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFTT0ZGX1RSQUNFUj15CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CitDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKK0NPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQorQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQorQ09ORklHX1hNT049eQorIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CitDT05GSUdfSVJRU1RBQ0tTPXkKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9eQorQ09ORklHX0FTWU5DX0NPUkU9eQorQ09ORklHX0FTWU5DX01FTUNQWT15CitDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19DVFI9bQorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19HSEFTSD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPW0KKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwppbmRleCBmZjk2YmI0Li5iNzkxMTIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjAsMjkgKzEyMiwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTUsNiArMTU4LDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzksNiArMjQzLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNTIsNiArMjU3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDEsNiArNDA3LDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwOCw3ICs0MTUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDIwLDYgKzQyNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgxLDcgKzQ4OCw2IEBACiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1NCQzgyNDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTY2NCw3ICs2NzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzEyLDEwICs3MjAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjQsNiArNzY5LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTc3NCw2ICs3ODAsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKQEAgLTg1NSwxNSArODYyLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04ODYsNiArODk3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtOTA1LDcgKzkxNyw2IEBACiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCkBAIC05MjIsNiArOTMzLDcgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CkBAIC05NDAsNiArOTUyLDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTE0OCw2ICsxMTYxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTgzLDEwICsxMTk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEyMDksNiArMTIyNSw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyMzcsNyArMTI1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI3OSw2ICsxMjk1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwppbmRleCAxMjkzYzQ2Li5lZjUwY2U0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTMxLDI4ICsxMzMsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDQsMTIgKzI0NywxMiBAQAogQ09ORklHX0JJTkZNVF9NSVNDPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjcsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjAsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODksNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Niw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDksNiArNDE0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNjMzLDYgKzYzOSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjcyLDExICs2NzksMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02OTgsNiArNzA4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MjUsNiArNzM2LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODIzLDkgKzgzNSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODcxLDEwICs4ODUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NzcsNiArOTg4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDMxLDkgKzEwNDMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNTEsNiArMTA2MCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTAwLDYgKzExMTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTExLDkgKzExMjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTEzMiw2ICsxMTQ1LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTU2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTE2Miw3ICsxMTc3LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTg2LDYgKzEyMDAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfVFdJTkhBTj15CiBDT05GSUdfSElEX0tFTlNJTkdUT049eQogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjM5LDYgKzEyNTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNDA0LDYgKzE0MjAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ2Myw3ICsxNDgwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xNTc2LDYgKzE1OTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU5Myw2ICsxNjEwLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE2MTQsNyArMTYzMiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNjQ1LDExICsxNjYyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKaW5kZXggMjgzODRkYy4uNTI0MjYzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE4LDI4ICsxMjAsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDMsNiArMjQ2LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQwNSw5ICs0MTIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjE5LDYgKzYyNiw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY1Nyw3ICs2NjUsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjcwLDYgKzY4MCw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTcyOSwxMCArNzQwLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg3Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MDYsNiArOTExLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTE2LDYgKzkyMiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTYxLDYgKzk2OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTExNDEsNiArMTE0OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjEwLDcgKzEyMTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogQ09ORklHX0VYUE9SVEZTPW0KIApAQCAtMTMwNyw2ICsxMzE1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMyNCw2ICsxMzMzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNDQsNiArMTM1NCw4IEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCA5ZGFkZTE1ZC4uNmQ5NGQyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMTUsNyArMTUsMTYgQEAKIAogCS8qIERNQSBvcGVyYXRpb25zIG9uIHRoYXQgZGV2aWNlICovCiAJc3RydWN0IGRtYV9tYXBfb3BzCSpkbWFfb3BzOwotCXZvaWQJCQkqZG1hX2RhdGE7CisKKwkvKgorCSAqIFdoZW4gYW4gaW9tbXUgaXMgaW4gdXNlLCBkbWFfZGF0YSBpcyB1c2VkIGFzIGEgcHRyIHRvIHRoZSBiYXNlIG9mIHRoZQorCSAqIGlvbW11X3RhYmxlLiAgT3RoZXJ3aXNlLCBpdCBpcyBhIHNpbXBsZSBudW1lcmljYWwgb2Zmc2V0LgorCSAqLworCXVuaW9uIHsKKwkJZG1hX2FkZHJfdAlkbWFfb2Zmc2V0OworCQl2b2lkCQkqaW9tbXVfdGFibGVfYmFzZTsKKwl9IGRtYV9kYXRhOworCiAjaWZkZWYgQ09ORklHX1NXSU9UTEIKIAlkbWFfYWRkcl90CQltYXhfZGlyZWN0X2RtYV9hZGRyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGNiMmNhNDEuLmUyODFkYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0yNiw3ICsyNiw2IEBACiBleHRlcm4gdm9pZCBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KTsKIAogI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKIC8qCkBAIC05MCw2ICs4OSwyOCBAQAogCWRldi0+YXJjaGRhdGEuZG1hX29wcyA9IG9wczsKIH0KIAorLyoKKyAqIGdldF9kbWFfb2Zmc2V0KCkKKyAqCisgKiBHZXQgdGhlIGRtYSBvZmZzZXQgb24gY29uZmlndXJhdGlvbnMgd2hlcmUgdGhlIGRtYSBhZGRyZXNzIGNhbiBiZSBkZXRlcm1pbmVkCisgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJ5IGxvb2tpbmcgYXQgYSBzaW1wbGUgb2Zmc2V0LiAgRGlyZWN0IGRtYSBhbmQKKyAqIHN3aW90bGIgdXNlIHRoaXMgZnVuY3Rpb24sIGJ1dCBpdCBpcyB0eXBpY2FsbHkgbm90IHVzZWQgYnkgaW1wbGVtZW50YXRpb25zCisgKiB3aXRoIGFuIGlvbW11LgorICovCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZ2V0X2RtYV9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmRtYV9vZmZzZXQ7CisKKwlyZXR1cm4gUENJX0RSQU1fT0ZGU0VUOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IG9mZikKK3sKKwlpZiAoZGV2KQorCQlkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmRtYV9vZmZzZXQgPSBvZmY7Cit9CisKIC8qIHRoaXMgd2lsbCBiZSByZW1vdmVkIHNvb24gKi8KICNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCiAKQEAgLTE4MSwxMiArMjAyLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwaHlzX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IHBhZGRyKQogewotCXJldHVybiBwYWRkciArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiBwYWRkciArIGdldF9kbWFfb2Zmc2V0KGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgZG1hX3RvX3BoeXMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRhZGRyKQogewotCXJldHVybiBkYWRkciAtIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiBkYWRkciAtIGdldF9kbWFfb2Zmc2V0KGRldik7CiB9CiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaAppbmRleCAzYTE3OTgyLi4yMDc3OGE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaApAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX1ZJTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwNDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9SRE1BCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA4MDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0xMQU4JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMTAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQlVMSwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAyMDAwMCkKKyNkZWZpbmUgRldfRkVBVFVSRV9CVUxLX1JFTU9WRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1hEQUJSCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwNDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfTVVMVElUQ0UJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA4MDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9TUExQQVIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDEwMDAwMCkKQEAgLTQ1LDggKzQ1LDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9MUEFSCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwNDAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1BTM19MVjEJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDgwMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9CRUFUCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAxMDAwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0JVTEtfUkVNT1ZFCUFTTV9DT05TVCgweDAwMDAwMDAwMDIwMDAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDA0MDAwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX0NNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNTgsOCArNTcsOSBAQAogCQlGV19GRUFUVVJFX1BFUkYgfCBGV19GRUFUVVJFX0RVTVAgfCBGV19GRUFUVVJFX0lOVEVSUlVQVCB8CiAJCUZXX0ZFQVRVUkVfTUlHUkFURSB8IEZXX0ZFQVRVUkVfUEVSRk1PTiB8IEZXX0ZFQVRVUkVfQ1JRIHwKIAkJRldfRkVBVFVSRV9WSU8gfCBGV19GRUFUVVJFX1JETUEgfCBGV19GRUFUVVJFX0xMQU4gfAotCQlGV19GRUFUVVJFX0JVTEsgfCBGV19GRUFUVVJFX1hEQUJSIHwgRldfRkVBVFVSRV9NVUxUSVRDRSB8Ci0JCUZXX0ZFQVRVUkVfU1BMUEFSIHwgRldfRkVBVFVSRV9MUEFSIHwgRldfRkVBVFVSRV9DTU8sCisJCUZXX0ZFQVRVUkVfQlVMS19SRU1PVkUgfCBGV19GRUFUVVJFX1hEQUJSIHwKKwkJRldfRkVBVFVSRV9NVUxUSVRDRSB8IEZXX0ZFQVRVUkVfU1BMUEFSIHwgRldfRkVBVFVSRV9MUEFSIHwKKwkJRldfRkVBVFVSRV9DTU8sCiAJRldfRkVBVFVSRV9QU0VSSUVTX0FMV0FZUyA9IDAsCiAJRldfRkVBVFVSRV9JU0VSSUVTX1BPU1NJQkxFID0gRldfRkVBVFVSRV9JU0VSSUVTIHwgRldfRkVBVFVSRV9MUEFSLAogCUZXX0ZFQVRVUkVfSVNFUklFU19BTFdBWVMgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oCmluZGV4IDc0NjRjMGQuLmVkZmM5ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oCkBAIC03MCw2ICs3MCwxNiBAQAogCiBzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW9tbXVfdGFibGVfYmFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJhc2UpCit7CisJZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5pb21tdV90YWJsZV9iYXNlID0gYmFzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpnZXRfaW9tbXVfdGFibGVfYmFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEuaW9tbXVfdGFibGVfYmFzZTsKK30KKwogLyogRnJlZXMgdGFibGUgZm9yIGFuIGluZGl2aWR1YWwgZGV2aWNlIG5vZGUgKi8KIGV4dGVybiB2b2lkIGlvbW11X2ZyZWVfdGFibGUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGNvbnN0IGNoYXIgKm5vZGVfbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaAppbmRleCBjY2M2OGI1Li41YTllZGU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCkBAIC0yOSw3ICsyOSw3IEBACiB2b2lkIHJlbGVhc2VfcG1jX2hhcmR3YXJlKHZvaWQpOwogdm9pZCBwcGNfZW5hYmxlX3BtY3Modm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIHBwY19zZXRfcG11X2ludXNlKGludCBpbnVzZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCmluZGV4IDZjM2UxZjQuLmVjMGIwYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZQlfUEFHRV9OT19DQUNIRQkweDAwNAkvKiBJOiBjYWNoaW5nIGlzIGluaGliaXRlZCAqLwogI2RlZmluZQlfUEFHRV9XUklURVRIUlUJMHgwMDgJLyogVzogY2FjaGluZyBpcyB3cml0ZS10aHJvdWdoICovCiAjZGVmaW5lCV9QQUdFX1VTRVIJMHgwMTAJLyogbWF0Y2hlcyBvbmUgb2YgdGhlIHpvbmUgcGVybWlzc2lvbiBiaXRzICovCisjZGVmaW5lCV9QQUdFX1NQRUNJQUwJMHgwMjAJLyogc29mdHdhcmU6IFNwZWNpYWwgcGFnZSAqLwogI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLwogI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLwogI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaAppbmRleCA5NGU5Nzk3MS4uZGQ1ZWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KICNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDA4CS8qIFNXIGVudHJ5LCBmb3JjZWQgdG8gMCBieSB0aGUgVExCIG1pc3MgKi8KIAogLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKICAqIGludG8gdGhlIFRMQi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IGMzYjY1MDcuLmYyYjM3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMjUsOSArMjUsNiBAQAogI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKICNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCiAjaWZuZGVmIF9QQUdFXzRLX1BGTgogI2RlZmluZSBfUEFHRV80S19QRk4JCTAKICNlbmRpZgpAQCAtMTc5LDcgKzE3Niw1IEBACiAjZGVmaW5lIEhBVkVfUEFHRV9BR1AKIAogLyogQWR2ZXJ0aXNlIHN1cHBvcnQgZm9yIF9QQUdFX1NQRUNJQUwgKi8KLSNpZmRlZiBfUEFHRV9TUEVDSUFMCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0jZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDBiOWM5MTMuLjAzYzg2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTcxMSw2ICs3MTEsOCBAQAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc0NS83NTUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwppbmRleCA4N2RkYjNmLi4zNzc3MWE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKQEAgLTE4LDcgKzE4LDcgQEAKIHN0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewotCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCisJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwKIAkJCQkgICAgZG1hX2hhbmRsZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZmxhZywKIAkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7CiB9CkBAIC0yNiw3ICsyNiw3IEBACiBzdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworCWlvbW11X2ZyZWVfY29oZXJlbnQoZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwogfQogCiAvKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQpAQCAtMzksOCArMzksOCBAQAogCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgcGFnZSwgb2Zmc2V0LCBzaXplLAotCQkJICAgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgcGFnZSwgb2Zmc2V0LAorCQkJICAgICAgc2l6ZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIApAQCAtNDgsNyArNDgsNyBAQAogCQkJCSBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlpb21tdV91bm1hcF9wYWdlKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9wYWdlKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKIAkJCSBhdHRycyk7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLAorCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywKIAkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIApAQCAtNjUsMTQgKzY1LDE0IEBACiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9zZyhnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywgZGlyZWN0aW9uLAogCQkgICAgICAgYXR0cnMpOwogfQogCiAvKiBXZSBzdXBwb3J0IERNQSB0by9mcm9tIGFueSBtZW1vcnkgcGFnZSB2aWEgdGhlIGlvbW11ICovCiBzdGF0aWMgaW50IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KTsKIAogCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgewogCQlwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwppbmRleCAyMWI3ODRkLi42MjE1MDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKQEAgLTIxLDEzICsyMSw2IEBACiAgKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgUENJX0RSQU1fT0ZGU0VULgogICovCiAKLXVuc2lnbmVkIGxvbmcgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2KQotCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKLQotCXJldHVybiBQQ0lfRFJBTV9PRkZTRVQ7Ci19CiAKIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQpAQCAtMzcsNyArMzAsNyBAQAogCXJldCA9IF9fZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CiAJaWYgKHJldCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX29mZnNldChkZXYpOwogCXJldHVybiByZXQ7CiAjZWxzZQogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNTEsNyArNDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAogCXJldHVybiByZXQ7CiAjZW5kaWYKQEAgLTc1LDcgKzY4LDcgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCQlfX2RtYV9zeW5jX3BhZ2Uoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CiAJfQpAQCAtMTEwLDcgKzEwMyw3IEBACiB7CiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKLQlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0ICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCArIGdldF9kbWFfb2Zmc2V0KGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDkwMGUwZWUuLjk3NjMyNjdlMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNjU4LDQyICs2NTgsNDMgQEAKIAljbXBkaQlyMCwwCiAJY3JhbmRjCWVxLGNyMSo0K2VxLGVxCiAJYm5lCXJlc3RvcmUKLQkvKiBoZXJlIHdlIGFyZSBwcmVlbXB0aW5nIHRoZSBjdXJyZW50IHRhc2sgKi8KLTE6Ci0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JYmwJLnRyYWNlX2hhcmRpcnFzX29uCi0JLyogTm90ZTogd2UganVzdCBjbG9iYmVyZWQgcjEwIHdoaWNoIHVzZWQgdG8gY29udGFpbiB0aGUgcHJldmlvdXMKLQkgKiBNU1IgYmVmb3JlIHRoZSBoYXJkLWRpc2FibGluZyBkb25lIGJ5IHRoZSBjYWxsZXIgb2YgZG9fd29yay4KLQkgKiBXZSBkb24ndCBoYXZlIHRoYXQgdmFsdWUgYW55bW9yZSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGFzCi0JICogd2Ugd2lsbCBoYXJkLWVuYWJsZSB1bmNvbmRpdGlvbmFsbHksIHdlIGNhbiBqdXN0IHJlbG9hZCB0aGUKLQkgKiBjdXJyZW50IE1TUiBpbnRvIHIxMAorCisJLyogSGVyZSB3ZSBhcmUgcHJlZW1wdGluZyB0aGUgY3VycmVudCB0YXNrLgorCSAqCisJICogRW5zdXJlIGludGVycnVwdHMgYXJlIHNvZnQtZGlzYWJsZWQuIFdlIGFsc28gcHJvcGVybHkgbWFyaworCSAqIHRoZSBQQUNBIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBoYXJkLWRpc2FibGVkCisJICogYW5kIHRyYWNlIHRoZSBjaGFuZ2UKIAkgKi8KLQltZm1zcglyMTAKLSNlbmRpZiAvKiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MgKi8KLQlsaQlyMCwxCisJbGkJcjAsMAogCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykKIAlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCisJVFJBQ0VfRElTQUJMRV9JTlRTCisKKwkvKiBDYWxsIHRoZSBzY2hlZHVsZXIgd2l0aCBzb2Z0IElSUXMgb2ZmICovCisxOglibAkucHJlZW1wdF9zY2hlZHVsZV9pcnEKKworCS8qIEhhcmQtZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluIChhbmQgdXBkYXRlIFBBQ0EpICovCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKLQl3cnRlZWkJMQotCWJsCS5wcmVlbXB0X3NjaGVkdWxlCiAJd3J0ZWVpCTAKICNlbHNlCi0Jb3JpCXIxMCxyMTAsTVNSX0VFCi0JbXRtc3JkCXIxMCwxCQkvKiByZWVuYWJsZSBpbnRlcnJ1cHRzICovCi0JYmwJLnByZWVtcHRfc2NoZWR1bGUKIAltZm1zcglyMTAKLQljbHJyZGkJcjkscjEsVEhSRUFEX1NISUZUCi0JcmxkaWNsCXIxMCxyMTAsNDgsMQkvKiBkaXNhYmxlIGludGVycnVwdHMgYWdhaW4gKi8KKwlybGRpY2wJcjEwLHIxMCw0OCwxCiAJcm90bGRpCXIxMCxyMTAsMTYKIAltdG1zcmQJcjEwLDEKICNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLworCWxpCXIwLDAKKwlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCisKKwkvKiBSZS10ZXN0IGZsYWdzIGFuZCBldmVudHVhbGx5IGxvb3AgKi8KKwljbHJyZGkJcjkscjEsVEhSRUFEX1NISUZUCiAJbGQJcjQsVElfRkxBR1MocjkpCiAJYW5kaS4JcjAscjQsX1RJRl9ORUVEX1JFU0NIRUQKIAlibmUJMWIKIAliCXJlc3RvcmUKIAogdXNlcl93b3JrOgotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KKwogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIAl3cnRlZWkJMQpAQCAtMTAzOCw4ICsxMDM5LDcgQEAKIAkgKiBXZSBhcmUgaW4gYSBtb2R1bGUgdXNpbmcgdGhlIG1vZHVsZSdzIFRPQy4KIAkgKiBTd2l0Y2ggdG8gb3VyIFRPQyB0byBydW4gaW5zaWRlIHRoZSBjb3JlIGtlcm5lbC4KIAkgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjQsZnRyYWNlX3JldHVybl90b19oYW5kbGVyKQotCWxkCXIyLCA4KHI0KQorCWxkCXIyLCBQQUNBVE9DKHIxMykKIAogCWJsCS5mdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKIAlub3AKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwppbmRleCA5MDQ4Zjk2Li4yNGRjYzBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCBmZThmNzFkLi42NDFjNzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMjgyLDEyICsyODIsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGdkYl9yZWdzOwogCWludCByZWc7Ci0jaWZkZWYgQ09ORklHX1NQRQotCXVuaW9uIHsKLQkJdTMyIHYzMlsyXTsKLQkJdTY0IHY2NDsKLQl9IGFjYzsKLSNlbmRpZgogCiAJZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCiAJCVVOUEFDSzY0KHJlZ3MtPmdwcltyZWddLCBwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBlOWY0ODQwLi5lOGRmZGJkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExMTcsNyArMTExNyw3IEBACiAKIAkJLyogSG9vayB1cCBkZWZhdWx0IERNQSBvcHMgKi8KIAkJc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKLQkJc2QtPmRtYV9kYXRhID0gKHZvaWQgKilQQ0lfRFJBTV9PRkZTRVQ7CisJCXNldF9kbWFfb2Zmc2V0KCZkZXYtPmRldiwgUENJX0RSQU1fT0ZGU0VUKTsKIAogCQkvKiBBZGRpdGlvbmFsIHBsYXRmb3JtIERNQS9pb21tdSBzZXR1cCAqLwogCQlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKICAqIFJlcGFyZW50IHJlc291cmNlIGNoaWxkcmVuIG9mIHByIHRoYXQgY29uZmxpY3Qgd2l0aCByZXMKICAqIHVuZGVyIHJlcywgYW5kIG1ha2UgcmVzIHJlcGxhY2UgdGhvc2UgY2hpbGRyZW4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKK3N0YXRpYyBpbnQgcmVwYXJlbnRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpwLCAqKnBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggYmE5NDlhMi4uY2NmNTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC05Nyw3ICs5Nyw5IEBACiAJICogdG8gZG8gYW4gYXBwcm9wcmlhdGUgVExCIGZsdXNoIGhlcmUgdG9vCiAJICovCiAJaWYgKGJ1cy0+c2VsZikgeworI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07CisjZW5kaWYKIAogCQlwcl9kZWJ1ZygiSU8gdW5tYXBwaW5nIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJCSBwY2lfbmFtZShidXMtPnNlbGYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYmJjYmFlMS4uODdmMTY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTExNiwyMCArMTE2LDIzIEBACiBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKKwl1bnNpZ25lZCBsb25nIHNpaHYgPSBNTUNSQV9TSUhWOworCXVuc2lnbmVkIGxvbmcgc2lwciA9IE1NQ1JBX1NJUFI7CiAKIAlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKIAkJcmV0dXJuIDA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KIAogCWlmIChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpIHsKLQkJaWYgKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJSFYpCi0JCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCQlyZXR1cm4gKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJUFIpID8KLQkJCVBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlzaWh2ID0gUE9XRVI2X01NQ1JBX1NJSFY7CisJCXNpcHIgPSBQT1dFUjZfTU1DUkFfU0lQUjsKIAl9Ci0JaWYgKG1tY3JhICYgTU1DUkFfU0lIVikKKworCS8qIFBSIGhhcyBwcmlvcml0eSBvdmVyIEhWLCBzbyBvcmRlciBiZWxvdyBpcyBpbXBvcnRhbnQgKi8KKwlpZiAobW1jcmEgJiBzaXByKQorCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCWlmICgobW1jcmEgJiBzaWh2KSAmJiAoZnJlZXplX2V2ZW50c19rZXJuZWwgIT0gTU1DUjBfRkNIVikpCiAJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7Ci0JcmV0dXJuIChtbWNyYSAmIE1NQ1JBX1NJUFIpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDoKLQkJUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CisJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwYTMyMTY0Li5jOTMwYWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTAxNiw5ICsxMDE2LDEzIEBACiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCWludCBjdXJyX2ZyYW1lID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CiAJZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBydGggPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIG1ydGggPSAtMTsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworCWV4dGVybiB2b2lkIG1vZF9yZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwlydGggPSAqKHVuc2lnbmVkIGxvbmcgKilydGg7CisJbXJ0aCA9ICh1bnNpZ25lZCBsb25nKW1vZF9yZXR1cm5fdG9faGFuZGxlcjsKKwltcnRoID0gKih1bnNpZ25lZCBsb25nICopbXJ0aDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTEwNDQsNyArMTA0OCw3IEBACiAJCWlmICghZmlyc3RmcmFtZSB8fCBpcCAhPSBscikgewogCQkJcHJpbnRrKCJbIlJFRyJdIFsiUkVHIl0gJXBTIiwgc3AsIGlwLCAodm9pZCAqKWlwKTsKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JCQlpZiAoaXAgPT0gYWRkciAmJiBjdXJyX2ZyYW1lID49IDApIHsKKwkJCWlmICgoaXAgPT0gcnRoIHx8IGlwID09IG1ydGgpICYmIGN1cnJfZnJhbWUgPj0gMCkgewogCQkJCXByaW50aygiICglcFMpIiwKIAkJCQkgICAgICAgKHZvaWQgKiljdXJyZW50LT5yZXRfc3RhY2tbY3Vycl9mcmFtZV0ucmV0KTsKIAkJCQljdXJyX2ZyYW1lLS07CkBAIC0xMTY1LDcgKzExNjksMjIgQEAKIAogdW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyAxVEIgc2VnbWVudHMgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIHJhbmRvbWlzZQorCSAqIHRoZSBoZWFwLCB3ZSBjYW4gcHV0IGl0IGFib3ZlIDFUQiBzbyBpdCBpcyBiYWNrZWQgYnkgYSAxVEIKKwkgKiBzZWdtZW50LiBPdGhlcndpc2UgdGhlIGhlYXAgd2lsbCBiZSBpbiB0aGUgYm90dG9tIDFUQgorCSAqIHdoaWNoIGFsd2F5cyB1c2VzIDI1Nk1CIHNlZ21lbnRzIGFuZCB0aGlzIG1heSByZXN1bHQgaW4gYQorCSAqIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICovCisJaWYgKCFpc18zMmJpdF90YXNrKCkgJiYgKG1tdV9oaWdodXNlcl9zc2l6ZSA9PSBNTVVfU0VHU0laRV8xVCkpCisJCWJhc2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBtbS0+YnJrLCAxVUwgPDwgU0lEX1NISUZUXzFUKTsKKyNlbmRpZgorCisJcmV0ID0gUEFHRV9BTElHTihiYXNlICsgYnJrX3JuZCgpKTsKIAogCWlmIChyZXQgPCBtbS0+YnJrKQogCQlyZXR1cm4gbW0tPmJyazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDg2NDMzNGIuLmJhZmFjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtODAwLDcgKzgwMCw3IEBACiAJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CiAJaWYgKHJvb3QgIT0gMCkgewogCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KLQkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUuLi4iKTsKKwkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydC4uLiIpOwogCQlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmcmV0LAogCQkJCSAgQUREUigiaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCIpLAogCQkJCSAgcm9vdCwKQEAgLTgxNCw2ICs4MTQsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWNhbGxfcHJvbSgiY2xvc2UiLCAxLCAwLCByb290KTsKKwkJcHJvbV9wcmludGYoIiBub3QgaW1wbGVtZW50ZWRcbiIpOwogCX0KIAogCS8qIG5vIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgY2FsbCwgdHJ5IHRoZSBvbGQgd2F5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNzk3ZWE5NS4uMDRmNjM4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA5MmRjODQ0Li5hMTM2YTExYzQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCXJldHVybiBwcGNfbWQuc2V0X3J0Y190aW1lKCZ0bSk7CiB9CiAKLXZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCitzdGF0aWMgdm9pZCBfX3JlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdGF0aWMgaW50IGZpcnN0ID0gMTsKQEAgLTgwMCwxMCArODAwLDIzIEBACiAJCXJldHVybjsKIAl9CiAJcHBjX21kLmdldF9ydGNfdGltZSgmdG0pOworCiAJdHMtPnR2X3NlYyA9IG1rdGltZSh0bS50bV95ZWFyKzE5MDAsIHRtLnRtX21vbisxLCB0bS50bV9tZGF5LAogCQkJICAgIHRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjKTsKIH0KIAordm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlfX3JlYWRfcGVyc2lzdGVudF9jbG9jayh0cyk7CisKKwkvKiBTYW5pdGl6ZSBpdCBpbiBjYXNlIHJlYWwgdGltZSBjbG9jayBpcyBzZXQgYmVsb3cgRVBPQ0ggKi8KKwlpZiAodHMtPnR2X3NlYyA8IDApIHsKKwkJdHMtPnR2X3NlYyA9IDA7CisJCXRzLT50dl9uc2VjID0gMDsKKwl9CisJCQorfQorCiAvKiBjbG9ja3NvdXJjZSBjb2RlICovCiBzdGF0aWMgY3ljbGVfdCBydGNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwppbmRleCAzZmFhZjI5Li4xMzdkYzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtNTAsNiArNTAsOSBAQAogLyogTWF4IHN1cHBvcnRlZCBzaXplIGZvciBzeW1ib2wgbmFtZXMgKi8KICNkZWZpbmUgTUFYX1NZTU5BTUUJNjQKIAorLyogVGhlIGFsaWdubWVudCBvZiB0aGUgdkRTTyAqLworI2RlZmluZSBWRFNPX0FMSUdOTUVOVAkoMSA8PCAxNikKKwogZXh0ZXJuIGNoYXIgdmRzbzMyX3N0YXJ0LCB2ZHNvMzJfZW5kOwogc3RhdGljIHZvaWQgKnZkc28zMl9rYmFzZSA9ICZ2ZHNvMzJfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IHZkc28zMl9wYWdlczsKQEAgLTIzMSwxNSArMjM0LDI4IEBACiAJICogcGljayBhIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHZEU08gaW4gcHJvY2VzcyBzcGFjZS4gV2UgdHJ5IHRvIHB1dCBpdAogCSAqIGF0IHZkc29fYmFzZSB3aGljaCBpcyB0aGUgIm5hdHVyYWwiIGJhc2UgZm9yIGl0LCBidXQgd2UgbWlnaHQgZmFpbAogCSAqIGFuZCBlbmQgdXAgcHV0dGluZyBpdCBlbHNld2hlcmUuCisJICogQWRkIGVub3VnaCB0byB0aGUgc2l6ZSBzbyB0aGF0IHRoZSByZXN1bHQgY2FuIGJlIGFsaWduZWQuCiAJICovCiAJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAl2ZHNvX2Jhc2UgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCB2ZHNvX2Jhc2UsCi0JCQkJICAgICAgdmRzb19wYWdlcyA8PCBQQUdFX1NISUZULCAwLCAwKTsKKwkJCQkgICAgICAodmRzb19wYWdlcyA8PCBQQUdFX1NISUZUKSArCisJCQkJICAgICAgKChWRFNPX0FMSUdOTUVOVCAtIDEpICYgUEFHRV9NQVNLKSwKKwkJCQkgICAgICAwLCAwKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKHZkc29fYmFzZSkpIHsKIAkJcmMgPSB2ZHNvX2Jhc2U7CiAJCWdvdG8gZmFpbF9tbWFwc2VtOwogCX0KIAorCS8qIEFkZCByZXF1aXJlZCBhbGlnbm1lbnQuICovCisJdmRzb19iYXNlID0gQUxJR04odmRzb19iYXNlLCBWRFNPX0FMSUdOTUVOVCk7CisKKwkvKgorCSAqIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgY2FsbGluZworCSAqIGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nIG9yIHRoZSBwZXJmIGNvdW50ZXIgbW1hcCB0cmFja2luZyBjb2RlCisJICogd2lsbCBmYWlsIHRvIHJlY29nbmlzZSBpdCBhcyBhIHZEU08gKHNpbmNlIGFyY2hfdm1hX25hbWUgZmFpbHMpLgorCSAqLworCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKKwogCS8qCiAJICogb3VyIHZtYSBmbGFncyBkb24ndCBoYXZlIFZNX1dSSVRFIHNvIGJ5IGRlZmF1bHQsIHRoZSBwcm9jZXNzIGlzbid0CiAJICogYWxsb3dlZCB0byB3cml0ZSB0aG9zZSBwYWdlcy4KQEAgLTI2MCwxMSArMjc2LDEwIEBACiAJCQkJICAgICBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUN8CiAJCQkJICAgICBWTV9BTFdBWVNEVU1QLAogCQkJCSAgICAgdmRzb19wYWdlbGlzdCk7Ci0JaWYgKHJjKQorCWlmIChyYykgeworCQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSAwOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKLQotCS8qIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QgKi8KLQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisJfQogCiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKaW5kZXggOTA0ZWYxMy4uMDU0NmJjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMjUsNyArMjUsNyBAQAogCS4gPSBBTElHTigxNik7CiAJLnRleHQJCTogewogCQkqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiogX19mdHJfYWx0XyopCi0JfQorCX0JCSAgICAgIAkgICAgICAJCQk6dGV4dAogCVBST1ZJREUoX19ldGV4dCA9IC4pOwogCVBST1ZJREUoX2V0ZXh0ID0gLik7CiAJUFJPVklERShldGV4dCA9IC4pOwpAQCAtNTYsNyArNTYsNyBAQAogCS5maXh1cAkJOiB7ICooLmZpeHVwKSB9CiAKIAkuZHluYW1pYwk6IHsgKiguZHluYW1pYykgfQkJOnRleHQJOmR5bmFtaWMKLQkuZ290CQk6IHsgKiguZ290KSB9CisJLmdvdAkJOiB7ICooLmdvdCkgfQkJCTp0ZXh0CiAJLnBsdAkJOiB7ICooLnBsdCkgfQogCiAJX2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBiYzdiNDFlLi43N2Y2NDIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTEwNTQsNiArMTA1NCw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJdGJsID0ga21hbGxvYyhzaXplb2YoKnRibCksIEdGUF9LRVJORUwpOworCWlmICh0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlvZl9wYXJzZV9kbWFfd2luZG93KGRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUsIGRtYV93aW5kb3csCiAJCQkgICAgJnRibC0+aXRfaW5kZXgsICZvZmZzZXQsICZzaXplKTsKQEAgLTEyMzMsNyArMTIzNSw3IEBACiAJCXZpb19jbW9fc2V0X2RtYV9vcHModmlvZGV2KTsKIAllbHNlCiAJCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9vcHMgPSAmZG1hX2lvbW11X29wczsKLQl2aW9kZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHZpb19idWlsZF9pb21tdV90YWJsZSh2aW9kZXYpOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZ2aW9kZXYtPmRldiwgdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2RldikpOwogCXNldF9kZXZfbm9kZSgmdmlvZGV2LT5kZXYsIG9mX25vZGVfdG9fbmlkKG9mX25vZGUpKTsKIAogCS8qIGluaXQgZ2VuZXJpYyAnc3RydWN0IGRldmljZScgZmllbGRzOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDU4ZGE0MDcuLjI3NzM1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCiBFTlRSWShfc3RleHQpCiAKQEAgLTcxLDEyICs3Miw3IEBACiAJLyogUmVhZC1vbmx5IGRhdGEgKi8KIAlST0RBVEEKIAotCS8qIEV4Y2VwdGlvbiAmIGJ1ZyB0YWJsZXMgKi8KLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMCkKIAogCU5PVEVTIDprZXJuZWwgOm5vdGVzCiAKQEAgLTkzLDEyICs4OSw3IEBACiAgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfYmVnaW4gPSAuOwotCi0JLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0gOmtlcm5lbAorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkgOmtlcm5lbAogCiAJLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkZWQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwKIAkgKiB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBmcm9tIF9fYnVnX3RhYmxlCkBAIC0xMjIsMjMgKzExMywxNiBAQAogI2VuZGlmCiAJfQogCi0JLiA9IEFMSUdOKDE2KTsKIAkuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKKwkJSU5JVF9TRVRVUCgxNikKIAl9CiAKIAkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JCX0KKwkJSU5JVF9DQUxMUworCX0KIAogCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAogCVNFQ1VSSVRZX0lOSVQKQEAgLTE2OSwxNCArMTUzLDEwIEBACiAJCV9fc3RvcF9fX2Z3X2Z0cl9maXh1cCA9IC47CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKKwkJSU5JVF9SQU1fRlMKIAl9Ci0jZW5kaWYKKwogCVBFUkNQVShQQUdFX1NJWkUpCiAKIAkuID0gQUxJR04oOCk7CkBAIC0yNDAsMzYgKzIyMCwyNSBAQAogI2VuZGlmCiAKIAkvKiBUaGUgaW5pdGlhbCB0YXNrIGFuZCBrZXJuZWwgc3RhY2sgKi8KLSNpZmRlZiBDT05GSUdfUFBDMzIKLQkuID0gQUxJR04oODE5Mik7Ci0jZWxzZQotCS4gPSBBTElHTigxNjM4NCk7Ci0jZW5kaWYKIAkuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmluaXRfdGFzaykKKwkJSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpCiAJfQogCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5wYWdlX2FsaWduZWQpCisJCVBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSkKIAl9CiAKLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQorCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEucmVhZF9tb3N0bHkpCisJCVJFQURfTU9TVExZX0RBVEEoTDFfQ0FDSEVfQllURVMpCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ub3NhdmVfYmVnaW4gPSAuOwotCQkqKC5kYXRhLm5vc2F2ZSkKLQkJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JCV9fbm9zYXZlX2VuZCA9IC47CisJCU5PU0FWRV9EQVRBCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CkBAIC0yODAsMTQgKzI0OSw3IEBACiAgKiBBbmQgZmluYWxseSB0aGUgYnNzCiAgKi8KIAotCS5ic3MgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ic3Nfc3RhcnQgPSAuOwotCQkqKC5zYnNzKSAqKC5zY29tbW9uKQotCQkqKC5keW5ic3MpCi0JCSooLmJzcykKLQkJKihDT01NT04pCi0JCV9fYnNzX3N0b3AgPSAuOwotCX0KKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2VuZCA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKaW5kZXggNDdlZTYwMy4uMmFhMzcxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga3ZtcHBjX2V4aXRfdGltaW5nX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrdm1wcGNfZXhpdF90aW1pbmdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bXBwY19leGl0X3RpbWluZ19mb3BzID0gewogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBrdm1wcGNfZXhpdF90aW1pbmdfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaCBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKaW5kZXggYmIxM2IxZi4uODA2ZWY2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCkBAIC00OCw3ICs0OCwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19hY2NvdW50X2V4aXRfc3RhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0eXBlKQogewogCS8qIHR5cGUgaGFzIHRvIGJlIGtub3duIGF0IGJ1aWxkIHRpbWUgZm9yIG9wdGltaXphdGlvbiAqLworCisJLyogVGhlIEJVSUxEX0JVR19PTiBiZWxvdyBicmVha3MgaW4gZnVubnkgd2F5cywgY29tbWVudGVkIG91dAorCSAqIGZvciBub3cgLi4uIC1CZW5ICiAJQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHR5cGUpKTsKKwkqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRVhUX0lOVFJfRVhJVFM6CiAJCXZjcHUtPnN0YXQuZXh0X2ludHJfZXhpdHMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCBjMmY5M2RjLi5iZTRmMzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0yNSw4ICsyNSw4IEBACiAgKiAgICAgYWxzbyBjbGVhciBtbS0+Y3B1X3ZtX21hc2sgYml0cyB3aGVuIHByb2Nlc3NlcyBhcmUgbWlncmF0ZWQKICAqLwogCi0jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQotI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQorLy8jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQorLy8jZGVmaW5lIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVCAgIDMxCiAvLyNkZWZpbmUgREVCVUdfSEFSREVSCiAKIC8qIFdlIGRvbid0IHVzZSBERUJVRyBiZWNhdXNlIGl0IHRlbmRzIHRvIGJlIGNvbXBpbGVkIGluIGFsd2F5cyBub3dhZGF5cwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKaW5kZXggODNmMTU1MS4uNTMwNDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCisjaW5jbHVkZSAibW11X2RlY2wuaCIKKwogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE2Niw3ICsxNjgsNyBAQAogICogc3VwcG9ydCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5LgogICovCiAKLXN0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUpCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcHRlID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7CiAJaWYgKHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJiAhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKQEAgLTE3NSw2ICsxNzcsMTcgQEAKIAkJaWYgKCFwZykKIAkJCXJldHVybiBwdGU7CiAJCWlmICghdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKSkgeworI2lmZGVmIENPTkZJR184eHgKKwkJCS8qIE9uIDh4eCwgY2FjaGUgY29udHJvbCBpbnN0cnVjdGlvbnMgKHBhcnRpY3VsYXJseQorCQkJICogImRjYnN0IiBmcm9tIGZsdXNoX2RjYWNoZV9pY2FjaGUpIGZhdWx0IGFzIHdyaXRlCisJCQkgKiBvcGVyYXRpb24gaWYgdGhlcmUgaXMgYW4gdW5wb3B1bGF0ZWQgVExCIGVudHJ5CisJCQkgKiBmb3IgdGhlIGFkZHJlc3MgaW4gcXVlc3Rpb24uIFRvIHdvcmthcm91bmQgdGhhdCwKKwkJCSAqIHdlIGludmFsaWRhdGUgdGhlIFRMQiBoZXJlLCB0aHVzIGF2b2lkaW5nIGRjYnN0CisJCQkgKiBtaXNiZWhhdmlvdXIuCisJCQkgKi8KKwkJCS8qIDh4eCBkb2Vzbid0IGNhcmUgYWJvdXQgUElELCBzaXplIG9yIGluZCBhcmdzICovCisJCQlfdGxiaWxfdmEoYWRkciwgMCwgMCwgMCk7CisjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBnKTsKIAkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKTsKIAkJfQpAQCAtMTk0LDcgKzIwNyw3IEBACiAgKiBhcyB3ZSBkb24ndCBoYXZlIHR3byBiaXRzIHRvIHNwYXJlIGZvciBfUEFHRV9FWEVDIGFuZCBfUEFHRV9IV0VYRUMgc28KICAqIGluc3RlYWQgd2UgImZpbHRlciBvdXQiIHRoZSBleGVjIHBlcm1pc3Npb24gZm9yIG5vbiBjbGVhbiBwYWdlcy4KICAqLwotc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGc7CiAKQEAgLTI3Niw3ICsyODksNyBAQAogCSAqIHRoaXMgY29udGV4dCBtaWdodCBub3QgaGF2ZSBiZWVuIGFjdGl2YXRlZCB5ZXQgd2hlbiB0aGlzCiAJICogaXMgY2FsbGVkLgogCSAqLwotCXB0ZSA9IHNldF9wdGVfZmlsdGVyKHB0ZSk7CisJcHRlID0gc2V0X3B0ZV9maWx0ZXIocHRlLCBhZGRyKTsKIAogCS8qIFBlcmZvcm0gdGhlIHNldHRpbmcgb2YgdGhlIFBURSAqLwogCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCmluZGV4IGJjNDRkYzQuLjk1Y2UzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwpAQCAtNzIsMTkgKzcyLDE3IEBACiAxOgogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCAqLwogCi0JLyogdm1hbGxvYy9pb3JlbWFwIG1hcHBpbmcgZW5jb2RpbmcgYml0cywgdGhlICJsaSIgaW5zdHJ1Y3Rpb25zIGJlbG93Ci0JICogd2lsbCBiZSBwYXRjaGVkIGJ5IHRoZSBrZXJuZWwgYXQgYm9vdAorCS8qIHZtYWxsb2MgbWFwcGluZyBnZXRzIHRoZSBlbmNvZGluZyBmcm9tIHRoZSBQQUNBIGFzIHRoZSBtYXBwaW5nCisJICogY2FuIGJlIGRlbW90ZWQgZnJvbSA2NEsgLT4gNEsgZHluYW1pY2FsbHkgb24gc29tZSBtYWNoaW5lcwogCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgaXMgaW4gdm1hbGxvYyBvciBpb3JlbWFwIHNwYWNlICovCiAJY2xybGRpCXIxMSxyMTAsNDgKIAljbXBsZGkJcjExLChWTUFMTE9DX1NJWkUgPj4gMjgpIC0gMQogCWJndAk1ZgogCWxoeglyMTEsUEFDQVZNQUxMT0NTTExQKHIxMykKIAliCTZmCiA1OgotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKLV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCisJLyogSU8gbWFwcGluZyAqLworCV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCiAJbGkJcjExLDAKIDY6CiBCRUdJTl9GVFJfU0VDVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwppbmRleCBlZjFjY2NmLi5mMjg4Mjc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBjMzFlNWI1My4uZDQ1YmU1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKQEAgLTUxLDYgKzUxLDggQEAKIC8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KIHN0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CiAJImludGVyY29udHJvbCxkaWdzeS1tdGMiLAorCSJtYW5yb2xhbmQsbXVjbWM1MiIsCisJIm1hbnJvbGFuZCx1YzEwMSIsCiAJInBoeXRlYyxwY20wMzAiLAogCSJwaHl0ZWMscGNtMDMyIiwKIAkicHJvbWVzcyxtb3Rpb25wcm8iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKaW5kZXggNTFmY2FlNC4uZjlhZWUxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCkBAIC0xMzIsMTIgKzEzMiwyNSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1cy0+aXJxID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9idXM7CisJfQogCiAJYnVzLT5uYW1lID0gImVwODI0OGUtbWRpby1iaXRiYW5nIjsKIAlidXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwogCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcmVzLnN0YXJ0KTsKIAotCXJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgb2ZkZXYtPm5vZGUpOworCXJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlX2lycToKKwlrZnJlZShidXMtPmlycSk7CitlcnJfZnJlZV9idXM6CisJZnJlZV9tZGlvX2JpdGJhbmcoYnVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGVwODI0OGVfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCmluZGV4IGFjYTU3NDEuLmE4NmMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYXhvbl9tc2k6IGNvdWxkbid0IHBhcnNlIGRjciBwcm9wZXJ0aWVzIG9uICVzXG4iLAogCQkJZG4tPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX21zaWM7CiAJfQogCiAJbXNpYy0+ZGNyX2hvc3QgPSBkY3JfbWFwKGRuLCBkY3JfYmFzZSwgZGNyX2xlbik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYwppbmRleCA5M2IwZWZkLi4zOWQzNjFjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgdm9pZCBjZWxsZWJfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5hcmNoZGF0YS5kbWFfb3BzID0gZ2V0X3BjaV9kbWFfb3BzKCk7Ci0JZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSA9ICh2b2lkICopY2VsbGViX2RtYV9kaXJlY3Rfb2Zmc2V0OworCXNldF9kbWFfb2Zmc2V0KGRldiwgY2VsbGViX2RtYV9kaXJlY3Rfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgY2VsbGViX3BjaV9kbWFfZGV2X3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwppbmRleCA0MTZkYjE3Li5jYTViZmRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwpAQCAtNjU3LDE1ICs2NTcsMTMgQEAKIAogc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICphcmNoZGF0YSA9ICZkZXYtPmFyY2hkYXRhOwotCiAJLyogT3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIHRoZXNlIGFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlICovCiAJaWYgKGdldF9kbWFfb3BzKGRldikgPT0gJmRtYV9pb21tdV9maXhlZF9vcHMpCiAJCWNlbGxfZG1hX2Rldl9zZXR1cF9maXhlZChkZXYpOwogCWVsc2UgaWYgKGdldF9wY2lfZG1hX29wcygpID09ICZkbWFfaW9tbXVfb3BzKQotCQlhcmNoZGF0YS0+ZG1hX2RhdGEgPSBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZShkZXYsIGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldikpOwogCWVsc2UgaWYgKGdldF9wY2lfZG1hX29wcygpID09ICZkbWFfZGlyZWN0X29wcykKLQkJYXJjaGRhdGEtPmRtYV9kYXRhID0gKHZvaWQgKiljZWxsX2RtYV9kaXJlY3Rfb2Zmc2V0OworCQlzZXRfZG1hX29mZnNldChkZXYsIGNlbGxfZG1hX2RpcmVjdF9vZmZzZXQpOwogCWVsc2UKIAkJQlVHKCk7CiB9CkBAIC05NzMsMTEgKzk3MSwxMCBAQAogCiBzdGF0aWMgdm9pZCBjZWxsX2RtYV9kZXZfc2V0dXBfZml4ZWQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfYXJjaGRhdGEgKmFyY2hkYXRhID0gJmRldi0+YXJjaGRhdGE7CiAJdTY0IGFkZHI7CiAKIAlhZGRyID0gY2VsbF9pb21tdV9nZXRfZml4ZWRfYWRkcmVzcyhkZXYpICsgZG1hX2lvbW11X2ZpeGVkX2Jhc2U7Ci0JYXJjaGRhdGEtPmRtYV9kYXRhID0gKHZvaWQgKilhZGRyOworCXNldF9kbWFfb2Zmc2V0KGRldiwgYWRkcik7CiAKIAlkZXZfZGJnKGRldiwgImlvbW11OiBmaXhlZCBhZGRyID0gJWxseFxuIiwgYWRkcik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCA4ZjA3OWI4Li44ODRlOGJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCV9fc2ltcGxlX2F0dHJfY2hlY2tfZm9ybWF0KF9fZm10LCAwdWxsKTsJCQlcCiAJcmV0dXJuIHNwdWZzX2F0dHJfb3Blbihpbm9kZSwgZmlsZSwgX19nZXQsIF9fc2V0LCBfX2ZtdCk7CVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fZm9wcyA9IHsJCQkJXAogCS5vd25lcgkgPSBUSElTX01PRFVMRSwJCQkJCQlcCiAJLm9wZW4JID0gX19mb3BzICMjIF9vcGVuLAkJCQkJXAogCS5yZWxlYXNlID0gc3B1ZnNfYXR0cl9yZWxlYXNlLAkJCQkJXApAQCAtMzA5LDcgKzMwOSw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZW1fbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWVtX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbWVtX21tYXBfZmF1bHQsCiAJLmFjY2VzcyA9IHNwdWZzX21lbV9tbWFwX2FjY2VzcywKIH07CkBAIC00MzYsNyArNDM2LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4NDAwMCwgU1BVRlNfQ05UTF9NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfY250bF9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19jbnRsX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfY250bF9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTE0Myw3ICsxMTQzLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDFfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMV9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX3NpZ25hbDFfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTEyNzksNyArMTI3OSw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwyX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDJfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19zaWduYWwyX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHgwMDAwLCBTUFVGU19NU1NfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21zc19tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tc3NfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19tc3NfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDAwMDAsIFNQVUZTX1BTX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19wc21hcF9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19wc21hcF9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX3BzbWFwX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xNTE3LDcgKzE1MTcsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHgzMDAwLCBTUFVGU19NRkNfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21mY19tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZmNfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19tZmNfbW1hcF9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQppbmRleCBjYzcxNjFmLi5jZTAxNDkyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQpAQCAtMSwxOCArMSw5IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogCi1leHRyYS15ICs9IGR0Lm8KLQogb2JqLXkgKz0gZXhjZXB0aW9uLm8KLW9iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdF9tb2QubyBtZi5vIGxwZXZlbnRzLm8gXAorb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0Lm8gbWYubyBscGV2ZW50cy5vIFwKIAlodmNhbGwubyBwcm9jLm8gaHRhYi5vIGlvbW11Lm8gbWlzYy5vIGlycS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIG9iai0kKENPTkZJR19WSU9QQVRIKSArPSB2aW9wYXRoLm8gdmlvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrc3ltcy5vCi0KLXF1aWV0X2NtZF9kdF9zdHJpbmdzID0gRFRfU1RSICAkQAotICAgICAgY21kX2R0X3N0cmluZ3MgPSAkKE9CSkNPUFkpIC0tcmVuYW1lLXNlY3Rpb24gLnJvZGF0YS5zdHIxLjg9LmR0X3N0cmluZ3MgXAotCQkJCSQ8ICRACi0KLSQob2JqKS9kdF9tb2QubzoJJChvYmopL2R0Lm8KLQkkKGNhbGwgaWZfY2hhbmdlZCxkdF9zdHJpbmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwppbmRleCBjNWE4N2E3Li43ZjQ1YTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwpAQCAtNTEsMTEgKzUxLDE2IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgY3JlYXRlZCBieSB0aGUgbGlua2VyIHNjcmlwdCBhdCB0aGUgc3RhcnQgYW5kIGVuZAotICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGZpbGUuCisgKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBtYXJrZWQgd2l0aCB0aGUgRFMgbWFjcm8uCiAgKi8KIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19zdGFydFtdOwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX2VuZFtdOwogCisjZGVmaW5lIERTKHMpCSh7CVwKKwlzdGF0aWMgY29uc3QgY2hhciBfX3NbXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRfc3RyaW5ncyIpKSkgPSBzOyBcCisJX19zOwkJXAorfSkKKwogc3RydWN0IGlzZXJpZXNfZmxhdF9kdCB7CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIGhlYWRlcjsKIAl1NjQgcmVzZXJ2ZV9tYXBbMl07CkBAIC02NCw5ICs2OSw4IEBACiBzdGF0aWMgdm9pZCAqIF9faW5pdGRhdGEgZHRfZGF0YTsKIAogLyoKLSAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSBzZWN0aW9uCi0gKiB0aGF0IHdlIHJlbmFtZSB0byAuZHRfc3RyaW5ncyB1c2luZyBvYmpjb3B5IGFuZCBjYXB0dXJlCi0gKiBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgorICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIC5kdF9zdHJpbmdzIHNlY3Rpb24KKyAqIHRoYXQgd2UgY2FwdHVyZSBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX2NwdVtdID0gImNwdSI7CiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX21lbW9yeVtdID0gIm1lbW9yeSI7CkBAIC0xNzMsNyArMTc3LDcgQEAKIAogI2RlZmluZSBkdF9lbmRfbm9kZShkdCkgZHRfcHVzaF91MzIoZHQsIE9GX0RUX0VORF9OT0RFKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0xOTEsNDQgKzE5NSwzMiBAQAogCS8qIFRoZSBhY3R1YWwgZGF0YS4gKi8KIAlkdF9wdXNoX2J5dGVzKGR0LCBkYXRhLCBsZW4pOwogfQorI2RlZmluZSBkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBsZW4pCV9fZHRfcHJvcCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpLCAobGVuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Bfc3RyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICpkYXRhKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHN0cmxlbihkYXRhKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KLX0KKyNkZWZpbmUgZHRfcHJvcF9zdHIoZHQsIG5hbWUsIGRhdGEpCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc3RybGVuKChkYXRhKSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQl1MzIgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91MzIoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91MzIoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGR0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQl1NjQgZGF0YSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBfX2R0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAorCQljb25zdCBjaGFyICpuYW1lLCB1NjQgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91NjQoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91NjQoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTY0X2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHU2NCkgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91NjRfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTY0KSAqIChuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyX2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHUzMikgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91MzJfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTMyKSAqIChuKSkKIAotI2lmZGVmIG5vdHlldAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfZW1wdHkoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgTlVMTCwgMCk7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgZHRfcHJvcF9lbXB0eShkdCwgbmFtZSkJCWR0X3Byb3AoKGR0KSwgbmFtZSwgTlVMTCwgMCkKIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2NwdXMoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCmluZGV4IDZjMWUxMDEuLjlkNTNjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJcGRuLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCAtMSk7CiAJZWxzZQogCQlrZnJlZSh0YmwpOwotCXBkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHBkbi0+aW9tbXVfdGFibGU7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnBkZXYtPmRldiwgcGRuLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZQogI2RlZmluZSBwY2lfZG1hX2Rldl9zZXR1cF9pc2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCmluZGV4IGEwZmYwM2EuLjdiMWQ2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogI2VuZGlmCiAKLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9pb2JtYXA7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCAmaW9tbXVfdGFibGVfaW9ibWFwKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2J1cyAqYikgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDIxMjI2YjcuLjQxNGNhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC01NDAsOCArNTQwLDExIEBACiAJLyogTWFrZSBzdXJlIElSUSBpcyBkaXNhYmxlZCAqLwogCWt3X3dyaXRlX3JlZyhyZWdfaWVyLCAwKTsKIAotCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQgKi8KLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCAwLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKKwkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0LiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0CisJICogd2FudCB0aGF0IGludGVycnVwdCBkaXNhYmxlZCBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIKKwkgKiBzdXNwZW5kIG9yIHdlJ2xsIGhhdmUgaXNzdWVzIHJ1bm5pbmcgdGhlIHBmdW5jcworCSAqLworCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfVElNRVIsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwppbmRleCBhYjY5OTI1Li45MzdhNTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXR1cm4gbl9yZWFkICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR0bF9mb3BzID0gewogCS5vcGVuCQk9IGR0bF9maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBkdGxfZmlsZV9yZWxlYXNlLAogCS5yZWFkCQk9IGR0bF9maWxlX3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCmluZGV4IDVhNzA3ZGEuLjBhMTRkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCkBAIC01MSwxMSArNTEsMTAgQEAKIAl7RldfRkVBVFVSRV9WSU8sCQkiaGNhbGwtdmlvIn0sCiAJe0ZXX0ZFQVRVUkVfUkRNQSwJCSJoY2FsbC1yZG1hIn0sCiAJe0ZXX0ZFQVRVUkVfTExBTiwJCSJoY2FsbC1sTEFOIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMSywJCSJoY2FsbC1idWxrIn0sCisJe0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiAJe0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKIAl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKIAl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiB9OwogCiAvKiBCdWlsZCB1cCB0aGUgZmlybXdhcmUgZmVhdHVyZXMgYml0bWFzayB1c2luZyB0aGUgY29udGVudHMgb2YKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggNjYxYzhlMC4uMWEwMDAwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQkJCSAgIHBoYi0+bm9kZSk7CiAJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBoYiwgZG4sIHRibCk7CiAJCVBDSV9ETihkbiktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBoYi0+bm9kZSk7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJZG4gPSBkbi0+cGFyZW50OwogCiAJaWYgKGRuICYmIFBDSV9ETihkbikpCi0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9tbXU6IERldmljZSAlcyBoYXMgbm8gaW9tbXUgdGFibGVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCSAqLwogCWlmIChkbWFfd2luZG93ID09IE5VTEwgfHwgcGRuLT5wYXJlbnQgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygiICBubyBkbWEgd2luZG93IGZvciBkZXZpY2UsIGxpbmtpbmcgdG8gcGFyZW50XG4iKTsKLQkJZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBQQ0lfRE4ocGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKHBkbiktPmlvbW11X3RhYmxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTU0LDcgKzU1NCw3IEBACiAJCXByX2RlYnVnKCIgIGZvdW5kIERNQSB3aW5kb3csIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CiAJfQogCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBwY2ktPmlvbW11X3RhYmxlOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgcGNpLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZSAgLyogQ09ORklHX1BDSSAqLwogI2RlZmluZSBwY2lfZG1hX2J1c19zZXR1cF9wU2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwppbmRleCBiZjJlMWFjLi4xMTY0YzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCkBAIC00MzIsOCArNDMyLDYgQEAKIAkJLyogUmVhZCBjb25maWcgc3BhY2UgYmFjayBzbyB3ZSBjYW4gcmVzdG9yZSBhZnRlciByZXNldCAqLwogCQlyZWFkX21zaV9tc2codmlycSwgJm1zZyk7CiAJCWVudHJ5LT5tc2cgPSBtc2c7Ci0KLQkJdW5tYXNrX21zaV9pcnEodmlycSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCA0MTlmOGE2Li5iOWJmMGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KQEAgLTIxOSw2ICsyMjAsMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCiB7CisJLyoKKwkgKiBUaGUgZ2VuZXJpYyBNU0kgY29kZSByZXR1cm5zIHdpdGggdGhlIGludGVycnVwdCBkaXNhYmxlZCBvbiB0aGUKKwkgKiBjYXJkLCB1c2luZyB0aGUgTVNJIG1hc2sgYml0cy4gRmlybXdhcmUgZG9lc24ndCBhcHBlYXIgdG8gdW5tYXNrCisJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgorCSAqLworCWlmIChpcnFfdG9fZGVzYyh2aXJxKS0+bXNpX2Rlc2MpCisJCXVubWFza19tc2lfaXJxKHZpcnEpOworCiAJLyogdW5tYXNrIGl0ICovCiAJeGljc191bm1hc2tfaXJxKHZpcnEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3JlbG9jc19jaGVjay5wbCBiL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI1NzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IMKpIDIwMDkgSUJNIENvcnBvcmF0aW9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyMgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHNjcmlwdCBjaGVja3MgdGhlIHJlbGNvYXRpb25zIG9mIGEgdm1saW51eCBmb3IgInN1c3BpY2lvdXMiCisjIHJlbG9jYXRpb25zLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitpZiAoJCNBUkdWICE9IDEpIHsKKwlkaWUgIiQwIFtwYXRoIHRvIG9iamR1bXBdIFtwYXRoIHRvIHZtbGludXhdXG4iOworfQorCisjIEhhdmUgS2J1aWxkIHN1cHBseSB0aGUgcGF0aCB0byBvYmpkdW1wIHNvIHdlIGhhbmRsZSBjcm9zcyBjb21waWxhdGlvbi4KK215ICRvYmpkdW1wID0gc2hpZnQ7CitteSAkdm1saW51eCA9IHNoaWZ0OworbXkgJGJhZF9yZWxvY3NfY291bnQgPSAwOworbXkgJGJhZF9yZWxvY3MgPSAiIjsKK215ICRvbGRfYmludXRpbHMgPSAwOworCitvcGVuKEZELCAiJG9iamR1bXAgLVIgJHZtbGludXh8Iikgb3IgZGllOword2hpbGUgKDxGRD4pIHsKKwlzdHVkeSAkXzsKKworCSMgT25seSBsb29rIGF0IHJlbGNvYXRpb24gbGluZXMuCisJbmV4dCBpZiAoIS9ccytSXy8pOworCisJIyBUaGVzZSByZWxvY2F0aW9ucyBhcmUgb2theQorCW5leHQgaWYgKC9SX1BQQzY0X1JFTEFUSVZFLyBvciAvUl9QUEM2NF9OT05FLyBvcgorCSAgICAgICAgIC9SX1BQQzY0X0FERFI2NFxzK21hY2hfLyk7CisKKwkjIElmIHdlIHNlZSB0aGlzIHR5cGUgb2YgcmVsY29hdGlvbiBpdCdzIGFuIGlkaWNhdGlvbiB0aGF0CisJIyB3ZSAvbWF5LyBiZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBiaW51dGlscy4KKwlpZiAoL1JfUFBDNjRfVUFERFI2NC8pIHsKKwkJJG9sZF9iaW51dGlscysrOworCX0KKworCSRiYWRfcmVsb2NzX2NvdW50Kys7CisJJGJhZF9yZWxvY3MgLj0gJF87Cit9CisKK2lmICgkYmFkX3JlbG9jc19jb3VudCkgeworCXByaW50ICJXQVJOSU5HOiAkYmFkX3JlbG9jc19jb3VudCBiYWQgcmVsb2NhdGlvbnNcbiI7CisJcHJpbnQgJGJhZF9yZWxvY3M7Cit9CisKK2lmICgkb2xkX2JpbnV0aWxzKSB7CisJcHJpbnQgIldBUk5JTkc6IFlvdSBuZWVkIGF0IGJpbnV0aWxzID49IDIuMTkgdG8gYnVpbGQgYSAiLgorCSAgICAgICJDT05GSUdfUkVMQ09BVEFCTEUga2VybmVsXG4iOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYwppbmRleCA4OTYzOWVjLi5hZTNjNGRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJLyogV2Ugb25seSBoYXZlIG9uZSBpb21tdSB0YWJsZSBvbiB0aGUgbWFjIGZvciBub3csIHdoaWNoIG1ha2VzCiAJICogdGhpbmdzIHNpbXBsZS4gU2V0dXAgYWxsIFBDSSBkZXZpY2VzIHRvIHBvaW50IHRvIHRoaXMgdGFibGUKIAkgKi8KLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9kYXJ0OworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgJmlvbW11X3RhYmxlX2RhcnQpOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfZG1hX2J1c19zZXR1cF9kYXJ0KHN0cnVjdCBwY2lfYnVzICpidXMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggMGUwOWE0NS4uYmRiZTk2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMzM1LDYgKzMzNSwxNiBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgaW50IHVucmVjb3ZlcmFibGVfZXhjcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfNHh4CisJLyogV2UgaGF2ZSBubyBNU1JfUkkgYml0IG9uIDR4eCwgc28gd2Ugc2ltcGx5IHJldHVybiBmYWxzZSAqLworCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKChyZWdzLT5tc3IgJiBNU1JfUkkpID09IDApOworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgeG1vbl9jb3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZnJvbWlwaSkKIHsKIAlpbnQgY21kID0gMDsKQEAgLTM4OCw3ICszOTgsNyBAQAogCWJwID0gTlVMTDsKIAlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkKIAkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7Ci0JaWYgKGJwIHx8IChyZWdzLT5tc3IgJiBNU1JfUkkpID09IDApCisJaWYgKGJwIHx8IHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJZnJvbWlwaSA9IDA7CiAKIAlpZiAoIWZyb21pcGkpIHsKQEAgLTM5OSw3ICs0MDksNyBAQAogCQkJICAgICAgIGNwdSwgQlBfTlVNKGJwKSk7CiAJCQl4bW9uX3ByaW50X3N5bWJvbChyZWdzLT5uaXAsICIgIiwgIilcbiIpOwogCQl9Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCQlpZiAodW5yZWNvdmVyYWJsZV9leGNwKHJlZ3MpKQogCQkJcHJpbnRmKCJXQVJOSU5HOiBleGNlcHRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAiCiAJCQkgICAgICAgImNhbid0IGNvbnRpbnVlXG4iKTsKIAkJcmVsZWFzZV9vdXRwdXRfbG9jaygpOwpAQCAtNDkwLDcgKzUwMCw3IEBACiAJCQlwcmludGYoIlN0b3BwZWQgYXQgYnJlYWtwb2ludCAleCAoIiwgQlBfTlVNKGJwKSk7CiAJCQl4bW9uX3ByaW50X3N5bWJvbChyZWdzLT5uaXAsICIgIiwgIilcbiIpOwogCQl9Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCQlpZiAodW5yZWNvdmVyYWJsZV9leGNwKHJlZ3MpKQogCQkJcHJpbnRmKCJXQVJOSU5HOiBleGNlcHRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAiCiAJCQkgICAgICAgImNhbid0IGNvbnRpbnVlXG4iKTsKIAkJcmVtb3ZlX2JwdHMoKTsKQEAgLTUwNyw2ICs1MTcsMTUgQEAKIAlpbl94bW9uID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0JPT0tFCisJaWYgKHJlZ3MtPm1zciAmIE1TUl9ERSkgeworCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKKwkJaWYgKGJwICE9IE5VTEwpIHsKKwkJCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKSAmYnAtPmluc3RyWzBdOworCQkJYXRvbWljX2luYygmYnAtPnJlZl9jb3VudCk7CisJCX0KKwl9CisjZWxzZQogCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKSB7CiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCQlpZiAoYnAgIT0gTlVMTCkgewpAQCAtNTIwLDcgKzUzOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0KKyNlbmRpZgogCWluc2VydF9jcHVfYnB0cygpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODg0LDYgKzkwMywxNCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19CT09LRQorc3RhdGljIGludCBkb19zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CisJcmV0dXJuIDE7Cit9CisjZWxzZQogLyoKICAqIFN0ZXAgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCiAgKiBTb21lIGluc3RydWN0aW9ucyB3ZSBlbXVsYXRlLCBvdGhlcnMgd2UgZXhlY3V0ZSB3aXRoIE1TUl9TRSBzZXQuCkBAIC05MTQsNiArOTQxLDcgQEAKIAlyZWdzLT5tc3IgfD0gTVNSX1NFOwogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGJvb3RjbWRzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA3MDRkZDM5Li43N2RmNzI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQl9CiAJCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKVNVQkNfU1RJQjYgfAogCQkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7Ci0JCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNzsKKwkJCWRpYWcyMDRfc3RvcmVfc2MgPSBTVUJDX1NUSUI2OwogCQkJZGlhZzIwNF9pbmZvX3R5cGUgPSBJTkZPX0VYVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCAyNGIxMjQ0Li5mMjM5NjFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTc4LDcgKzc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBjcHV0aW1lX3RvX21zZWNzKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwKTsKKwlyZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNjAsNyArMTYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIGlubGluZSBjbG9ja190CiBjcHV0aW1lNjRfdG9fY2xvY2tfdChjcHV0aW1lNjRfdCBjcHV0aW1lKQogewotICAgICAgIHJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisgICAgICAgcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RydWN0IHMzOTBfaWRsZV9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKaW5kZXggYTM1NmM5NS4uOGEwOTZiOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTE0LDEwICsxNCwxMSBAQAogI2lmbmRlZiBfUzM5MF9ERUxBWV9ICiAjZGVmaW5lIF9TMzkwX0RFTEFZX0gKIAotZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7Ci1leHRlcm4gdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIHVkZWxheV9zaW1wbGUodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKTsKIGV4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CiAKLSNkZWZpbmUgdWRlbGF5KG4pIF9fdWRlbGF5KG4pCisjZGVmaW5lIHVkZWxheShuKSBfX3VkZWxheSgodW5zaWduZWQgbG9uZyBsb25nKSAobikpCisjZGVmaW5lIG1kZWxheShuKSBfX3VkZWxheSgodW5zaWduZWQgbG9uZyBsb25nKSAobikgKiAxMDAwKQogCiAjZW5kaWYgLyogZGVmaW5lZChfUzM5MF9ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDc0ZDBiYmIuLmU4ODU0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTkyLDYgKzkyLDE4IEBACiAvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLwogI2RlZmluZSBSXzM5MF9OVU0JNjEKIAorLyogQml0cyBwcmVzZW50IGluIEFUX0hXQ0FQLiAqLworI2RlZmluZSBIV0NBUF9TMzkwX0VTQU4zCTEKKyNkZWZpbmUgSFdDQVBfUzM5MF9aQVJDSAkyCisjZGVmaW5lIEhXQ0FQX1MzOTBfU1RGTEUJNAorI2RlZmluZSBIV0NBUF9TMzkwX01TQQkJOAorI2RlZmluZSBIV0NBUF9TMzkwX0xESVNQCTE2CisjZGVmaW5lIEhXQ0FQX1MzOTBfRUlNTQkJMzIKKyNkZWZpbmUgSFdDQVBfUzM5MF9ERlAJCTY0CisjZGVmaW5lIEhXQ0FQX1MzOTBfSFBBR0UJMTI4CisjZGVmaW5lIEhXQ0FQX1MzOTBfRVRGM0VICTI1NgorI2RlZmluZSBIV0NBUF9TMzkwX0hJR0hfR1BSUwk1MTIKKwogLyoKICAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNTM5MjYzZi4uOTVkY2YxOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMzExLDYgKzMxMSwxMCBAQAogCV9fdTMyCQlvcmlnX2dwcjI7CiB9IHMzOTBfY29tcGF0X3JlZ3M7CiAKK3R5cGVkZWYgc3RydWN0Cit7CisJX191MzIJCWdwcnNfaGlnaFtOVU1fR1BSU107Cit9IHMzOTBfY29tcGF0X3JlZ3NfaGlnaDsKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBkNjliZWMwLi5jZmI4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtOSw2ICs5LDIxIEBACiAjaWZuZGVmIF9BU01fUzM5MF9VQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fUzM5MF9VQ09OVEVYVF9ICiAKKyNkZWZpbmUgVUNfRVhURU5ERUQJMHgwMDAwMDAwMQorCisjaWZuZGVmIF9fczM5MHhfXworCitzdHJ1Y3QgdWNvbnRleHRfZXh0ZW5kZWQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJX3NpZ3JlZ3MJICB1Y19tY29udGV4dDsKKwl1bnNpZ25lZCBsb25nCSAgdWNfc2lnbWFza1syXTsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZ3Byc19oaWdoWzE2XTsKK307CisKKyNlbmRpZgorCiBzdHJ1Y3QgdWNvbnRleHQgewogCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKIAlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwppbmRleCBiNTM3Y2IwLi5lZWU5OTk4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwpAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBzaWdjb250ZXh0MzIgc2M7CiAJX3NpZ3JlZ3MzMiBzcmVnczsKIAlpbnQgc2lnbm87CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKIAlfX3U4IHJldGNvZGVbUzM5MF9TWVNDQUxMX1NJWkVdOwogfSBzaWdmcmFtZTMyOwogCkBAIC00OCw2ICs0OSw3IEBACiAJX191OCByZXRjb2RlW1MzOTBfU1lTQ0FMTF9TSVpFXTsKIAljb21wYXRfc2lnaW5mb190IGluZm87CiAJc3RydWN0IHVjb250ZXh0MzIgdWM7CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKIH0gcnRfc2lnZnJhbWUzMjsKIAogaW50IGNvcHlfc2lnaW5mb190b191c2VyMzIoY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnRvLCBzaWdpbmZvX3QgKmZyb20pCkBAIC0zNDQsNiArMzQ2LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MzIgX191c2VyICp1cmVncykKK3sKKwlfX3UzMiBncHJzX2hpZ2hbTlVNX0dQUlNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9HUFJTOyBpKyspCisJCWdwcnNfaGlnaFtpXSA9IHJlZ3MtPmdwcnNbaV0gPj4gMzI7CisKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIodXJlZ3MsICZncHJzX2hpZ2gsIHNpemVvZihncHJzX2hpZ2gpKTsKK30KKworc3RhdGljIGludCByZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3UzMiBfX3VzZXIgKnVyZWdzKQoreworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CisJaW50IGVyciwgaTsKKworCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJmdwcnNfaGlnaCwgdXJlZ3MsIHNpemVvZihncHJzX2hpZ2gpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BSUzsgaSsrKQorCQkqKF9fdTMyICopJnJlZ3MtPmdwcnNbaV0gPSBncHJzX2hpZ2hbaV07CisJcmV0dXJuIDA7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zaWdyZXR1cm4odm9pZCkKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKQEAgLTM2Myw2ICszODksOCBAQAogCiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+c3JlZ3MpKQogCQlnb3RvIGJhZGZyYW1lOworCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQorCQlnb3RvIGJhZGZyYW1lOwogCiAJcmV0dXJuIHJlZ3MtPmdwcnNbMl07CiAKQEAgLTM5NCw2ICs0MjIsOCBAQAogCiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpKQogCQlnb3RvIGJhZGZyYW1lOworCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQorCQlnb3RvIGJhZGZyYW1lOwogCiAJZXJyID0gX19nZXRfdXNlcihzc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CiAJc3Quc3Nfc3AgPSBjb21wYXRfcHRyKHNzX3NwKTsKQEAgLTQ3NCw2ICs1MDQsOCBAQAogCiAJaWYgKHNhdmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+c3JlZ3MpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKKwlpZiAoc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAJaWYgKF9fcHV0X3VzZXIoKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+c3JlZ3MsICZmcmFtZS0+c2Muc3JlZ3MpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIApAQCAtNTI5LDEzICs1NjEsMTQgQEAKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKIAkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwllcnIgfD0gX19wdXRfdXNlcihVQ19FWFRFTkRFRCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKIAllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5ncHJzWzE1XSksCiAJICAgICAgICAgICAgICAgICAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CiAJZXJyIHw9IHNhdmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpOworCWVyciB8PSBzYXZlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpOwogCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA2ODJmYjY5Li5jYmQ5OTAxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC00MDksNyArNDA5LDcgQEAKIAkuZ2xvYmwJc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcgogc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKLQlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCisJbGdmcgklcjMsJXIzCQkJIyBsb25nCiAJamcJc3lzX3RydW5jYXRlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCiAJLmdsb2JsCXN5czMyX2Z0cnVuY2F0ZV93cmFwcGVyCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggYmY4YjRhZS4uZTQ5ZTllMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtNTUsNiArNTUsNyBAQAogCQlkaXNhYmxlZF93YWl0KDApOwogCiAJc2NoZWRfY2xvY2tfYmFzZV9jYyA9IFRPRF9VTklYX0VQT0NIOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV9jbG9jayA9IHNjaGVkX2Nsb2NrX2Jhc2VfY2M7CiB9CiAKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTApAQCAtMTY3LDYgKzE2OCwxNCBAQAogCQlyZXR1cm47CiAJfQogCisJLyogcmUtaW5pdGlhbGl6ZSBjcHV0aW1lIGFjY291bnRpbmcuICovCisJc2NoZWRfY2xvY2tfYmFzZV9jYyA9IGdldF9jbG9jaygpOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV9jbG9jayA9IHNjaGVkX2Nsb2NrX2Jhc2VfY2M7CisJUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyID0gMHg3ZmZmZmZmZmZmZmZmZmZmVUxMOworCVMzOTBfbG93Y29yZS51c2VyX3RpbWVyID0gMDsKKwlTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyID0gMDsKKwlhc20gdm9sYXRpbGUoIlNQVCAwKCUwKSIgOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lcikpOworCiAJLyogcmUtc2V0dXAgYm9vdCBjb21tYW5kIGxpbmUgd2l0aCBuZXcgaXBsIHZtIHBhcm1zICovCiAJaXBsX3VwZGF0ZV9wYXJhbWV0ZXJzKCk7CiAJc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwppbmRleCBmNDNkMmVlLi40ODIxNWQxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCkBAIC01NjUsMTAgKzU2NSwxMCBAQAogCWxoCSVyNywweDhhCQkjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQogCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJVFJBQ0VfSVJRU19PRkYKLQlsCSVyMSxfX1RJX3Rhc2soJXI5KQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjEpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXIxKSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjEpLF9fTENfUEVSX0FDQ0VTU19JRAorCWwJJXI4LF9fVElfdGFzayglcjkpCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hdG1pZCgyLCVyOCksX19MQ19QRVJfQVRNSUQKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2FkZHJlc3MoNCwlcjgpLF9fTENfUEVSX0FERFJFU1MKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2FjY2Vzc19pZCgxLCVyOCksX19MQ19QRVJfQUNDRVNTX0lECiAJb2kJX19USV9mbGFncyszKCVyOSksX1RJRl9TSU5HTEVfU1RFUCAjIHNldCBUSUZfU0lOR0xFX1NURVAKIAlUUkFDRV9JUlFTX09OCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCBhNmY3YjIwLi45YWZmMWQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtNTQzLDEwICs1NDMsMTAgQEAKIAltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSxfX0xDX1NZTkNfRU5URVJfVElNRVIKIAlsbGdoCSVyNyxfX0xDX1NWQ19JTlRfQ09ERQkjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQogCWxnCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAotCWxnCSVyMSxfX1RJX3Rhc2soJXI5KQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjEpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXIxKSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjEpLF9fTENfUEVSX0FDQ0VTU19JRAorCWxnCSVyOCxfX1RJX3Rhc2soJXI5KQorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCiAJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCmluZGV4IDU3YmRjYjEuLmY1ZmUzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwpAQCAtMTg1LDkgKzE4NSw2IEBACiB7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CiAKLQkvKiBObWkncyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLiAqLwotCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCi0JCWdvdG8gb3V0OwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQogCQlnb3RvIG91dDsKIAlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHBhcmVudCwgaXAsICZ0cmFjZS5kZXB0aCwgMCkgPT0gLUVCVVNZKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggZWU1N2E0Mi4uNDg5MGFjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0xNTk1LDEwICsxNTk1LDkgQEAKIHsKIAlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKIAkJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQllbHNlIHsKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JCWZvciAoOzspOwotCX0KKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKKwlmb3IgKDs7KTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaHV0ZG93bl9hY3Rpb24gc3RvcF9hY3Rpb24gPSB7U0hVVERPV05fQUNUSU9OX1NUT1BfU1RSLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWIyZTNlZC4uNjM5MzgwYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC01NSw2ICs1NSw4IEBACiAvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYyAqLwogdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CisJdmZyZWUobW9kLT5hcmNoLnN5bWluZm8pOworCW1vZC0+YXJjaC5zeW1pbmZvID0gTlVMTDsKIAl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KIApAQCAtNDAyLDYgKzQwNCw3IEBACiAJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKIAl2ZnJlZShtZS0+YXJjaC5zeW1pbmZvKTsKKwltZS0+YXJjaC5zeW1pbmZvID0gTlVMTDsKIAlyZXR1cm4gbW9kdWxlX2J1Z19maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKaW5kZXggODAyYzhhYi4uMDcyOWYzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCkBAIC0zMSw5ICszMSw5IEBACiAKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzldID0geworCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbMTBdID0gewogCQkiZXNhbjMiLCAiemFyY2giLCAic3RmbGUiLCAibXNhIiwgImxkaXNwIiwgImVpbW0iLCAiZGZwIiwKLQkJImVkYXQiLCAiZXRmM2VoIgorCQkiZWRhdCIsICJldGYzZWgiLCAiaGlnaGdwcnMiCiAJfTsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxjOwogCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCSAgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCiAJCQkgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKIAkJc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJCWlmIChod2NhcF9zdHJbaV0gJiYgKGVsZl9od2NhcCAmICgxVUwgPDwgaSkpKQogCQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7CiAJCXNlcV9wdXRzKG0sICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYTg3Mzg2Ny4uNjUzYzZhMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC01Nyw2ICs1Nyw3IEBACiBlbnVtIHMzOTBfcmVnc2V0IHsKIAlSRUdTRVRfR0VORVJBTCwKIAlSRUdTRVRfRlAsCisJUkVHU0VUX0dFTkVSQUxfRVhURU5ERUQsCiB9OwogCiBzdGF0aWMgdm9pZApAQCAtODc5LDYgKzg4MCw2NyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfdWxvbmdfdCAqZ3Byc19oaWdoOworCisJZ3Byc19oaWdoID0gKGNvbXBhdF91bG9uZ190ICopCisJCSZ0YXNrX3B0X3JlZ3ModGFyZ2V0KS0+Z3Byc1twb3MgLyBzaXplb2YoY29tcGF0X3Vsb25nX3QpXTsKKwlpZiAoa2J1ZikgeworCQljb21wYXRfdWxvbmdfdCAqayA9IGtidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCSprKysgPSAqZ3Byc19oaWdoOworCQkJZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKmspOworCQl9CisJfSBlbHNlIHsKKwkJY29tcGF0X3Vsb25nX3QgX191c2VyICp1ID0gdWJ1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJaWYgKF9fcHV0X3VzZXIoKmdwcnNfaGlnaCwgdSsrKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCp1KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfdWxvbmdfdCAqZ3Byc19oaWdoOworCWludCByYyA9IDA7CisKKwlncHJzX2hpZ2ggPSAoY29tcGF0X3Vsb25nX3QgKikKKwkJJnRhc2tfcHRfcmVncyh0YXJnZXQpLT5ncHJzW3BvcyAvIHNpemVvZihjb21wYXRfdWxvbmdfdCldOworCWlmIChrYnVmKSB7CisJCWNvbnN0IGNvbXBhdF91bG9uZ190ICprID0ga2J1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJKmdwcnNfaGlnaCA9ICprKys7CisJCQkqZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKmspOworCQl9CisJfSBlbHNlIHsKKwkJY29uc3QgY29tcGF0X3Vsb25nX3QgIF9fdXNlciAqdSA9IHVidWY7CisJCXdoaWxlIChjb3VudCA+IDAgJiYgIXJjKSB7CisJCQl1bnNpZ25lZCBsb25nIHdvcmQ7CisJCQlyYyA9IF9fZ2V0X3VzZXIod29yZCwgdSsrKTsKKwkJCWlmIChyYykKKwkJCQlicmVhazsKKwkJCSpncHJzX2hpZ2ggPSB3b3JkOworCQkJKmdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCp1KTsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBzMzkwX2NvbXBhdF9yZWdzZXRzW10gPSB7CiAJW1JFR1NFVF9HRU5FUkFMXSA9IHsKIAkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJTVEFUVVMsCkBAIC04OTYsNiArOTU4LDE0IEBACiAJCS5nZXQgPSBzMzkwX2ZwcmVnc19nZXQsCiAJCS5zZXQgPSBzMzkwX2ZwcmVnc19zZXQsCiAJfSwKKwlbUkVHU0VUX0dFTkVSQUxfRVhURU5ERURdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlhTVEFUVVMsCisJCS5uID0gc2l6ZW9mKHMzOTBfY29tcGF0X3JlZ3NfaGlnaCkgLyBzaXplb2YoY29tcGF0X2xvbmdfdCksCisJCS5zaXplID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuYWxpZ24gPSBzaXplb2YoY29tcGF0X2xvbmdfdCksCisJCS5nZXQgPSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfZ2V0LAorCQkuc2V0ID0gczM5MF9jb21wYXRfcmVnc19oaWdoX3NldCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfczM5MF9jb21wYXRfdmlldyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCA5ZWQxM2ExZS4uMDYxNDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzI5LDcgKzcyOSw3IEBACiAKIAlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCiAJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKLQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCQllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9FVEYzRUg7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhZGRpdGlvbmFsIGZhY2lsaXRpZXMgd2l0aCBzdG9yZS1mYWNpbGl0eS1saXN0LWV4dGVuZGVkLgpAQCAtNzQ4LDExICs3NDgsMjAgQEAKIAkgICAgX19zdGZsZSgmZmFjaWxpdHlfbGlzdF9leHRlbmRlZCwgMSkgPiAwKSB7CiAJCWlmICgoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQyKSkpCiAJCSAgICAmJiAoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQ0KSkpKQotCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA2OworCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfREZQOwogCX0KIAorCS8qCisJICogSHVnZSBwYWdlIHN1cHBvcnQgSFdDQVBfUzM5MF9IUEFHRSBpcyBiaXQgNy4KKwkgKi8KIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCi0JCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKKwkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSFBBR0U7CisKKwkvKgorCSAqIDY0LWJpdCByZWdpc3RlciBzdXBwb3J0IGZvciAzMS1iaXQgcHJvY2Vzc2VzCisJICogSFdDQVBfUzM5MF9ISUdIX0dQUlMgaXMgYml0IDkuCisJICovCisJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSElHSF9HUFJTOwogCiAJc3dpdGNoIChTMzkwX2xvd2NvcmUuY3B1X2lkLm1hY2hpbmUpIHsKIAljYXNlIDB4OTY3MjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGM5MzJjYWEuLjkzZTUyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNzYsNyArNzYsNiBAQAogCV9fdTMyIHN0YXR1czsKIAogCXN3aXRjaCAoc2lnbmFsX3Byb2Nlc3Nvcl9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2UpKSB7Ci0JY2FzZSBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ6CiAJY2FzZSBzaWdwX3N0YXR1c19zdG9yZWQ6CiAJCS8qIENoZWNrIGZvciBzdG9wcGVkIGFuZCBjaGVjayBzdG9wIHN0YXRlICovCiAJCWlmIChzdGF0dXMgJiAweDUwKQpAQCAtNjM4LDYgKzYzNyw4IEBACiAJLyogV2FpdCB1bnRpbCB0YXJnZXQgY3B1IGlzIGRvd24gKi8KIAl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCWNwdV9yZWxheCgpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CiB9CkBAIC02NDUsOCArNjQ2LDggQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JQlVHKCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CiAJZm9yICg7Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IGZlOTI3ZDAuLjBjMjZjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtNDMsNyArNDMsNyBAQAogCWxnaGkJJXIxLDB4MTAwMAogCiAJLyogU2F2ZSBDUFUgYWRkcmVzcyAqLwotCXN0YXAJX19MQ19DUFVfQUREUkVTUyglcjEpCisJc3RhcAlfX0xDX0NQVV9BRERSRVNTKCVyMCkKIAogCS8qIFN0b3JlIHJlZ2lzdGVycyAqLwogCW12YwkweDMxOCg0LCVyMSksX19TRl9FTVBUWSglcjE1KQkvKiBtb3ZlIHByZWZpeCB0byBsb3djb3JlICovCkBAIC02OSw4ICs2OSwyMSBAQAogCXN0bWcJJXIwLCVyMTUsMHgyODAoJXIxKQkJLyogc3RvcmUgZ2VuZXJhbCByZWdpc3RlcnMgKi8KIAogCXN0cHQJMHgzMjgoJXIxKQkJCS8qIHN0b3JlIHRpbWVyICovCisJc3RjawlfX1NGX0VNUFRZKCVyMTUpCQkvKiBzdG9yZSBjbG9jayAqLwogCXN0Y2tjCTB4MzMwKCVyMSkJCQkvKiBzdG9yZSBjbG9jayBjb21wYXJhdG9yICovCiAKKwkvKiBVcGRhdGUgY3B1dGltZSBhY2NvdW50aW5nIGJlZm9yZSBnb2luZyB0byBzbGVlcCAqLworCWxnCSVyMCxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCisJc2xnCSVyMCwweDMyOCglcjEpCisJYWxnCSVyMCxfX0xDX1NZU1RFTV9USU1FUgorCXN0ZwklcjAsX19MQ19TWVNURU1fVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSwweDMyOCglcjEpCisJbGcJJXIwLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKKwlzbGcJJXIwLF9fU0ZfRU1QVFkoJXIxNSkKKwlhbGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwlzdGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9DTE9DSyg4KSxfX1NGX0VNUFRZKCVyMTUpCisKIAkvKiBBY3RpdmF0ZSBEQVQgKi8KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQKIApAQCAtMTU5LDggKzE3Miw3IEBACiAJbGFybAklcjEsLkxyZXN1bWVfY3B1CQkvKiBSZXN1bWUgQ1BVIGFkZHJlc3M6IHIyICovCiAJc3RhcAkwKCVyMSkKIAlsbGdoCSVyMiwwKCVyMSkKLQlsZ2hpCSVyMywweDEwMDAKLQlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMykJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KKwlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMCkJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KIAljZ3IJJXIxLCVyMgogCWplCXJlc3RvcmVfcmVnaXN0ZXJzCQkvKiByMSA9IHIyIC0+IG5vdGhpbmcgdG8gZG8gKi8KIAlsYXJsCSVyNCwuTHJlc3RhcnRfc3VzcGVuZF9wc3cJLyogU2V0IG5ldyByZXN0YXJ0IFBTVyAqLwpAQCAtMTg3LDYgKzE5OSw3IEBACiAJYnJjCTIsNGIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDU6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TVE9QCS8qIHN0b3AgcmVzdW1lIChjdXJyZW50KSBDUFUgKi8KKwlicmMJMiw1YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNjoJagk2YgogCiByZXN0YXJ0X3N1c3BlbmQ6CkBAIC0xOTQsMTQgKzIwNywxOCBAQAogCWxsZ2gJJXIyLDAoJXIxKQogNzoKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NFTlNFCS8qIFdhaXQgZm9yIHJlc3VtZSBDUFUgKi8KKwlicmMJOCw3YgkJCS8qIGFjY2VwdGVkLCBzdGF0dXMgMCwgc3RpbGwgcnVubmluZyAqLwogCWJyYwkyLDdiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiAJdG1sbAklcjksMHg0MAkJLyogVGVzdCBpZiByZXN1bWUgQ1BVIGlzIHN0b3BwZWQgKi8KIAlqegk3YgogCiByZXN0b3JlX3JlZ2lzdGVyczoKIAkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotCWxnaGkJJXIxMywweDEwMDAJCS8qICVyMSA9IHBvaW50ZXIgdG8gc2F2ZSBhcmFlICovCisJbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyZWEgKi8KIAorCS8qIElnbm9yZSB0aW1lIHNwZW50IGluIHN1c3BlbmRlZCBzdGF0ZS4gKi8KKwlsbGdmCSVyMSwweDMxOCglcjEzKQorCXN0Y2sJX19MQ19MQVNUX1VQREFURV9DTE9DSyglcjEpCiAJc3B0CTB4MzI4KCVyMTMpCQkvKiByZXByb2dyYW0gdGltZXIgKi8KIAkvL3Nja2MJMHgzMzAoJXIxMykJCS8qIHNldCBjbG9jayBjb21wYXJhdG9yICovCiAKQEAgLTIyOSw5ICsyNDYsNiBAQAogCS8qIExvYWQgb2xkIHN0YWNrICovCiAJbGcJJXIxNSwweDJmOCglcjEzKQogCi0JLyogUG9pbnRlciB0byBzYXZlIGFyZWEgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCi0KIAkvKiBSZXN0b3JlIHByZWZpeCByZWdpc3RlciAqLwogCXNweAkweDMxOCglcjEzKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCmluZGV4IDQ1YTNlOWEuLmFkZmIzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCkBAIC0yNDcsNiArMjQ3LDEzIEBACiAJfQogCiAJLyoKKwkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKKwkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQorCSAqIHdpbGwgZmFpbCB0byByZWNvZ25pc2UgaXQgYXMgYSB2RFNPIChzaW5jZSBhcmNoX3ZtYV9uYW1lIGZhaWxzKS4KKwkgKi8KKwljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisKKwkvKgogCSAqIG91ciB2bWEgZmxhZ3MgZG9uJ3QgaGF2ZSBWTV9XUklURSBzbyBieSBkZWZhdWx0LCB0aGUgcHJvY2VzcwogCSAqIGlzbid0IGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UgcGFnZXMuCiAJICogZ2RiIGNhbiBicmVhayB0aGF0IHdpdGggcHRyYWNlIGludGVyZmFjZSwgYW5kIHRodXMgdHJpZ2dlciBDT1cKQEAgLTI2NywxNCArMjc0LDcgQEAKIAkJCQkgICAgIFZNX0FMV0FZU0RVTVAsCiAJCQkJICAgICB2ZHNvX3BhZ2VsaXN0KTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0X3VwOwotCi0JLyogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdCAqLwotCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKLQotCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOwotCisJCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IDA7CiBvdXRfdXA6CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGJjMTVlZjkuLmE2OGFjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUxLDYgKzUxLDcgQEAKIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lc2hhcmVkID0gLjsJCS8qIEVuZCBvZiBzaGFyZWFibGUgZGF0YSAqLworCV9zZGF0YSA9IC47CQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KIAogCUVYQ0VQVElPTl9UQUJMRSgxNikgOmRhdGEKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IGVjNWVlZTcuLjA2Y2NlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAorKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTU4LDcgKzU4LDcgQEAKIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CiBpbnQga3ZtX3MzOTBfaW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhY3Rpb24pOwogCi1zdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtCiAJCS0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggOTdjMWVjYTguLjc1MmIzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTI1LDEzICsyNSwxMyBAQAogCWFzbSB2b2xhdGlsZSgiMDogYnJjdCAlMCwwYiIgOiA6ICJkIiAoKGxvb3BzLzIpICsgMSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VkZWxheV9kaXNhYmxlZCh1bnNpZ25lZCBsb25nIHVzZWNzKQorc3RhdGljIHZvaWQgX191ZGVsYXlfZGlzYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgY3IwLCBjcjBfc2F2ZWQ7CiAJdTY0IGNsb2NrX3NhdmVkOwogCiAJY2xvY2tfc2F2ZWQgPSBsb2NhbF90aWNrX2Rpc2FibGUoKTsKLQlzZXRfY2xvY2tfY29tcGFyYXRvcihnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMikpOworCXNldF9jbG9ja19jb21wYXJhdG9yKGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKSk7CiAJX19jdGxfc3RvcmUoY3IwX3NhdmVkLCAwLCAwKTsKIAljcjAgPSAoY3IwX3NhdmVkICYgMHhmZmZmMDBlMCkgfCAweDAwMDAwODAwOwogCV9fY3RsX2xvYWQoY3IwICwgMCwgMCk7CkBAIC00NiwyMCArNDYsMjUgQEAKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyB1c2VjcykKK3N0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1NjQgZW5kLCB0aW1lOworCXU2NCBjbG9ja19zYXZlZDsKKwl1NjQgZW5kOwogCiAJbWFzayA9IHBzd19rZXJuZWxfYml0cyB8IFBTV19NQVNLX1dBSVQgfCBQU1dfTUFTS19FWFQgfCBQU1dfTUFTS19JTzsKLQllbmQgPSBnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMik7CisJZW5kID0gZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpOwogCWRvIHsKLQkJdGltZSA9IGVuZCA8IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID8KLQkJCWVuZCA6IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yOwotCQlzZXRfY2xvY2tfY29tcGFyYXRvcih0aW1lKTsKKwkJY2xvY2tfc2F2ZWQgPSAwOworCQlpZiAoZW5kIDwgUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpIHsKKwkJCWNsb2NrX3NhdmVkID0gbG9jYWxfdGlja19kaXNhYmxlKCk7CisJCQlzZXRfY2xvY2tfY29tcGFyYXRvcihlbmQpOworCQl9CiAJCXRyYWNlX2hhcmRpcnFzX29uKCk7CiAJCV9fbG9hZF9wc3dfbWFzayhtYXNrKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJaWYgKGNsb2NrX3NhdmVkKQorCQkJbG9jYWxfdGlja19lbmFibGUoY2xvY2tfc2F2ZWQpOwogCX0gd2hpbGUgKGdldF9jbG9jaygpIDwgZW5kKTsKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CkBAIC02Nyw3ICs3Miw3IEBACiAvKgogICogV2FpdHMgZm9yICd1c2VjcycgbWljcm9zZWNvbmRzIHVzaW5nIHRoZSBUT0QgY2xvY2sgY29tcGFyYXRvci4KICAqLwotdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTAxLDExICsxMDYsMTEgQEAKICAqIFNpbXBsZSB1ZGVsYXkgdmFyaWFudC4gVG8gYmUgdXNlZCBvbiBzdGFydHVwIGFuZCByZWJvb3QKICAqIHdoZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGlzbid0IHdvcmtpbmcuCiAgKi8KLXZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcykKIHsKIAl1NjQgZW5kOwogCi0JZW5kID0gZ2V0X2Nsb2NrKCkgKyAoKHU2NCkgdXNlY3MgPDwgMTIpOworCWVuZCA9IGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKTsKIAl3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpCiAJCWNwdV9yZWxheCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwppbmRleCAzZjE1YWFmLi41OGRhM2Y0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwpAQCAtMzYsNyArMzYsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIGp6ICAgIDdmXG4iCisJCSI5OiBqeiAgICA3ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtNDcsNyArNDcsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDRmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUyKSwwKCUxKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMTA6IlNMUiIgICUwLCU0XG4iCiAJCSIgICJBTFIiICAlMiwlNFxuIgogCQkiNDoiTEhJIiAgJTQsLTFcbiIKIAkJIiAgIkFMUiIgICU0LCUwXG4iCS8qIGNvcHkgcmVtYWluaW5nIHNpemUsIHN1YnRyYWN0IDEgKi8KQEAgLTYxLDcgKzYxLDcgQEAKIAkJIiAgIGogICAgIDhmXG4iCiAJCSI3OiJTTFIiICAlMCwlMFxuIgogCQkiODogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw0YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDRiKSBFWF9UQUJMRSg5YiwyYikgRVhfVEFCTEUoMTBiLDRiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogImQiIChyZWcwKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTgyLDcgKzgyLDcgQEAKIAl0bXAxID0gLTQwOTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCUwLCUxKSwwKCUyKSwwXG4iCi0JCSIgICBqeiAgICA0ZlxuIgorCQkiNjoganogICAgNGZcbiIKIAkJIjE6IkFMUiIgICUwLCUzXG4iCiAJCSIgICJTTFIiICAlMSwlM1xuIgogCQkiICAiU0xSIiAgJTIsJTNcbiIKQEAgLTkzLDExICs5MywxMSBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUxKSwwKCUyKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiNzoiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSI0OiJTTFIiICAlMCwlMFxuIgogCQkiNTogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw1YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDViKSBFWF9UQUJMRSg2YiwyYikgRVhfVEFCTEUoN2IsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCmluZGV4IGQyZmZiYWQuLjA3ZGVhZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKQEAgLTM2LDEyICszNiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGp6ICAgIDhmXG4iCisJCSIxMDpqeiAgICA4ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiMTE6am56ICAgMWJcbiIKIAkJIiAgIGogICAgIDhmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iCS8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtNTAsNyArNTAsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSI0OiBtdmNwICAwKCU0LCUyKSwwKCUxKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjEyOiJTTFIiICAlMCwlNFxuIgogCQkiICAiQUxSIiAgJTIsJTRcbiIKIAkJIjU6IkxISSIgICU0LC0xXG4iCiAJCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCkBAIC02NSw2ICs2NSw3IEBACiAJCSI4OiJTTFIiICAlMCwlMFxuIgogCQkiOTogXG4iCiAJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNWIpCisJCUVYX1RBQkxFKDEwYiwzYikgRVhfVEFCTEUoMTFiLDNiKSBFWF9UQUJMRSgxMmIsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTg1LDEyICs4NiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIGp6ICAgIDVmXG4iCisJCSI3OiBqeiAgICA1ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3MgIDAoJTAsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiODogam56ICAgMWJcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iIC8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtOTksMTEgKzEwMCwxMiBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDZmXG4iCiAJCSI0OiBtdmNzICAwKCU0LCUxKSwwKCUyKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjk6IlNMUiIgICUwLCU0XG4iCiAJCSIgICBqICAgICA2ZlxuIgogCQkiNToiU0xSIiAgJTAsJTBcbiIKIAkJIjY6IFxuIgogCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMmIsM2IpIEVYX1RBQkxFKDRiLDZiKQorCQlFWF9UQUJMRSg3YiwzYikgRVhfVEFCTEUoOGIsM2IpIEVYX1RBQkxFKDliLDZiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBjNjBiZmIzLi4yNzU3YzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTI3OSw3ICsyNzksMTAgQEAKIAkvKiBsZXRzIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHJlcGxhY2UgdGhlIG1tICovCiAJdGFza19sb2NrKHRzayk7CiAJaWYgKCF0c2stPm1tIHx8IGF0b21pY19yZWFkKCZ0c2stPm1tLT5tbV91c2VycykgPiAxIHx8Ci0JICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0gfHwgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSkgeworI2lmZGVmIENPTkZJR19BSU8KKwkgICAgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSB8fAorI2VuZGlmCisJICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0pIHsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjk1LDcgKzI5OCwxMCBAQAogCS8qIE5vdyBsZXRzIGNoZWNrIGFnYWluIGlmIHNvbWV0aGluZyBoYXBwZW5lZCAqLwogCXRhc2tfbG9jayh0c2spOwogCWlmICghdHNrLT5tbSB8fCBhdG9taWNfcmVhZCgmdHNrLT5tbS0+bW1fdXNlcnMpID4gMSB8fAotCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tIHx8ICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkpIHsKKyNpZmRlZiBDT05GSUdfQUlPCisJICAgICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkgfHwKKyNlbmRpZgorCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tKSB7CiAJCW1tcHV0KG1tKTsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYjk0MDQyNC4uODhjZGViOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzcsNyArMzcsNiBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCXNlbGVjdCBIQVZFX0ZUUkFDRV9TWVNDQUxMUwogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlmIE1NVQpAQCAtMTIyLDYgKzEyMSw5IEBACiAJYm9vbAogCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKwlib29sCisKIGNvbmZpZyBTWVNfU1VQUE9SVFNfU01QCiAJYm9vbAogCkBAIC0xOTYsNiArMTk4LDcgQEAKIAlzZWxlY3QgQ1BVX0hBU19TUl9SQgogCXNlbGVjdCBDUFVfSEFTX0ZQVSBpZiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0g0QQogCWJvb2wKQEAgLTIxMCw2ICsyMTMsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVX0hBU19GUFUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1RNVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIE1NVQogCiBjb25maWcgQ1BVX1NIWDIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBmYzUxYTkxLi42NmU0MGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTE5OSw3ICsxOTksNyBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIFwKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIFwKIAkgICAgICAgekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZQogUEhPTlkgKz0gbWFrZXRvb2xzICQoQk9PVF9UQVJHRVRTKSBGT1JDRQogCkBAIC0yMjUsNiArMjI1LDcgQEAKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCiAJQGVjaG8gJyogdUltYWdlICAJICAgICAgICAgICAtIEFsaWFzIHRvIGJvb3RhYmxlIFUtQm9vdCBpbWFnZScKIAlAZWNobyAnICB1SW1hZ2Uuc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIFMtcmVjb3JkIGZvciBVLUJvb3QnCisJQGVjaG8gJyAgdUltYWdlLmJpbgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYmluKScKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCmluZGV4IDBhMzdjOGIuLjk5ZmZjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCkBAIC0yMDUsOCArMjA1LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBBOgogCSAqIC9QQ0NfQ0QxLCAvUENDX0NEMiwgIFBDQ19CVkQxLCBQQ0NfQlZEMiwKIAkgKiAvSU9JUzE2LCAgSVJRNCwJSVJRNSwJICBVU0IxZF9TVVNQRU5ECmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCBlYmU5OTIyLi5hNGI3NDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKQEAgLTQyLDggKzQyLDYgQEAKIAkvKiBBY2tub3dsZWRnZSBhbnkgcHJldmlvdXMgZXZlbnRzICovCiAJLyogWFhYICovCiAKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCiAJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggOTZiYzE2OS4uM2IxY2ViNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgpAQCAtMzgsNiArMzksMjAgQEAKICAqICAweDE4MDBfMDAwMCAgTUZJICAgICAgICAgICAgICAxNmJpdAogICovCiAKKy8qIFNXSVRDSAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERTMlsxXSA9IEZsYXNoUk9NIHdyaXRlIHByb3RlY3QgIE9OICAgICA6IHdyaXRlIHByb3RlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IE5vIHdyaXRlIHByb3RlY3QKKyAqIERTMlsyXSA9IFJNSUkgLyBUUywgU0NJRiAgICAgICAgIE9OICAgICA6IFJNSUkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFRTLCBTQ0lGMworICogRFMyWzNdID0gQ2FtZXJhIC8gVmlkZW8gICAgICAgICAgT04gICAgIDogQ2FtZXJhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYgICAgOiBOVFNDL1BBTCAoSU4pCisgKiBEUzJbNV0gPSBOVFNDX09VVCBDbG9jayAgICAgICAgICBPTiAgICAgOiBPbiBib2FyZCBPU0MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFNINzcyNCBEVl9DTEsKKyAqIERTMls2LTddID0gTU1DIC8gU0QgICAgICAgICAgICAgIE9OLU9GRiA6IFNECisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYtT04gOiBNTUMKKyAqLworCiAvKiBIZWFydGJlYXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9Owogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKQEAgLTcwLDcgKzg1LDcgQEAKIAkJLm5hbWUgPSAiYm9vdCBsb2FkZXIiLAogCQkub2Zmc2V0ID0gMCwKIAkJLnNpemUgPSAoNSAqIDEwMjQgKiAxMDI0KSwKLQkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfSwgewogCQkubmFtZSA9ICJmcmVlLWFyZWEiLAogCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELApAQCAtMTIxLDYgKzEzNiw3IEBACiBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaF9ldGhfcGxhdCA9IHsKIAkucGh5ID0gMHgxZiwgLyogU01TQyBMQU44NzAwICovCiAJLmVkbWFjX2VuZGlhbiA9IEVETUFDX0xJVFRMRV9FTkRJQU4sCisJLmV0aGVyX2xpbmtfYWN0aXZlX2xvdyA9IDEKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoX2V0aF9kZXZpY2UgPSB7CkBAIC0zNzUsNiArMzkxLDQzIEBACiAJfSwKIH07CiAKKy8qIFRvdWNoU2NyZWVuICovCisjZGVmaW5lIElSUTAgMzIKK3N0YXRpYyBpbnQgdHNfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlpbnQgdmFsID0gMDsKKwlncGlvX2ZyZWUoR1BJT19GTl9JTlRDX0lSUTApOworCWdwaW9fcmVxdWVzdChHUElPX1BUWjAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRaMCk7CisKKwl2YWwgPSBncGlvX2dldF92YWx1ZShHUElPX1BUWjApOworCisJZ3Bpb19mcmVlKEdQSU9fUFRaMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKworCXJldHVybiB2YWwgPyAwIDogMTsKK30KKworc3RhdGljIGludCB0c19pbml0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0c2MyMDA3X2luZm8gPSB7CisJLm1vZGVsCQkJPSAyMDA3LAorCS54X3BsYXRlX29obXMJCT0gMTgwLAorCS5nZXRfcGVuZG93bl9zdGF0ZQk9IHRzX2dldF9wZW5kb3duX3N0YXRlLAorCS5pbml0X3BsYXRmb3JtX2h3CT0gdHNfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdHNfaTJjX2NsaWVudHMgPSB7CisJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkudHlwZQkJPSAidHNjMjAwNyIsCisJLnBsYXRmb3JtX2RhdGEJPSAmdHNjMjAwN19pbmZvLAorCS5pcnEJCT0gSVJRMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC00NTksNiArNTEyLDExIEBACiAjZGVmaW5lIElPRFJJVkVBICAweEE0MDUwMThBCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3NldHVwKHZvaWQpCiB7CisJLyogZW5hYmxlIFNUQVRVUzAsIFNUQVRVUzIgYW5kIFBEU1RBVFVTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOworCiAJLyogZW5hYmxlIFNDSUZBMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUYwX1RYRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfUlhELCBOVUxMKTsKQEAgLTU4OSw2ICs2NDcsMTAgQEAKIAkJICovCiAJCWdwaW9fcmVxdWVzdChHUElPX1BURjQsIE5VTEwpOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEY0LCAxKTsKKworCQkvKiBlbmFibGUgVG91Y2hTY3JlZW4gKi8KKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnRzX2kyY19jbGllbnRzLCAxKTsKKwkJc2V0X2lycV90eXBlKElSUTAsIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJfQogCiAJLyogZW5hYmxlIENFVTAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCAyNWNkZjczNS4uNTI4MDEzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0zNSw3ICszNCw3IEBACiAJaW50IG1pbm9yOwogCWludCByZXQgPSAtRU5PRU5UOwogCi0JbG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAltaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOwogCWlmIChtaW5vciA8IERFVkNPVU5UKSB7CiAJCWlmIChvcGVuQ250ID4gMCkgewpAQCAtNDUsNyArNDQsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MCw4ICs1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2lvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGdpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgaW50IGRhdGE7CiAJc3RhdGljIHVuc2lnbmVkIGludCBhZGRyID0gMDsKQEAgLTEyOSw3ICsxMjcsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gZ2lvX29wZW4sCS8qIG9wZW4gKi8KIAkucmVsZWFzZSA9IGdpb19jbG9zZSwJLyogcmVsZWFzZSAqLwotCS5pb2N0bCA9IGdpb19pb2N0bCwJLyogaW9jdGwgKi8KKwkudW5sb2NrZWRfaW9jdGwgPSBnaW9faW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnaW9faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCA0YWYzYTc3Li5jMzc2MTdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwpAQCAtMTEsMTAgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCmluZGV4IGFmNjRkMDMuLmE1YzBkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYwpAQCAtMTUsMTQgKzE1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpZmRlZiBDT05GSUdfTVRECiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByc2tfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLApAQCAtNDEsNiArMzksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gcnNrX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShyc2tfcGFydGl0aW9ucyksCiAJLndpZHRoCQk9IDIsCiB9OwogCkBAIC02MCw3ICs2MCw4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKyNpZmRlZiBDT05GSUdfTVRECitzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfaW5mbyByc2tfZmxhc2hfbWFwID0gewogCS5uYW1lCQk9ICJSU0srIEZsYXNoIiwKQEAgLTY4LDYgKzY5LDEwIEBACiAJLmJhbmt3aWR0aAk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkKIHsKIAlpbnQgbnJfcGFydHMgPSAwOwpAQCAtNzcsMTQgKzgyLDE0IEBACiAJbnJfcGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQsIHByb2JlcywKIAkJCQkJJnBhcnNlZF9wYXJ0aXRpb25zLCAwKTsKIAkvKiBJZiB0aGVyZSBpcyBubyBwYXJ0aXRpb24gdGFibGUsIHVzZWQgdGhlIGhhcmQgY29kZWQgdGFibGUgKi8KLQlpZiAobnJfcGFydHMgPD0gMCkgewotCQlmbGFzaF9kYXRhLnBhcnRzID0gcnNrX3BhcnRpdGlvbnM7Ci0JCWZsYXNoX2RhdGEubnJfcGFydHMgPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKTsKLQl9IGVsc2UgeworCWlmIChucl9wYXJ0cyA+IDApIHsKIAkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCQlmbGFzaF9kYXRhLnBhcnRzID0gcGFyc2VkX3BhcnRpdGlvbnM7CiAJfQogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkge30KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnNrX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZmbGFzaF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDAwOTczZTAuLmU3OGMzYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KQEAgLTI1NSw2ICsyNTYsNjUgQEAKIAl9LAogfTsKIAorLyogRlNJICovCisvKgorICogRlNJLUEgdXNlIGV4dGVybmFsIGNsb2NrIHdoaWNoIGNhbWUgZnJvbSBhazQ2NHguCisgKiBTbywgd2Ugc2hvdWxkIGNoYW5nZSBwYXJlbnQgb2YgZnNpCisgKi8KKyNkZWZpbmUgRkNMS0FDUgkJMHhhNDE1MDAwOAorc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCisJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCisJc3RhdHVzICY9IH4weDAwMDAwMGZmOworCXN0YXR1cyB8PSAweDAwMDAwMDgwOworCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2ltY2tfY2xrX29wcyA9IHsKKwkuaW5pdCA9IGZzaW1ja19pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnNpbWNrYV9jbGsgPSB7CisJLm5hbWUJCT0gImZzaW1ja2FfY2xrIiwKKwkuaWQJCT0gLTEsCisJLm9wcwkJPSAmZnNpbWNrX2Nsa19vcHMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRkNMS0FDUiwKKwkucmF0ZQkJPSAwLCAvKiB1bmtub3duICovCit9OworCitzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7CisJLnBvcnRhX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYgfAorCQkgICAgICAgU0hfRlNJX09VVF9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9PRk1UKFBDTSkgfAorCQkgICAgICAgU0hfRlNJX0lGTVQoUENNKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiRlNJIiwKKwkJLnN0YXJ0CT0gMHhGRTNDMDAwMCwKKwkJLmVuZAk9IDB4RkUzQzAyMWQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMTA4LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZzaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2ZzaSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZzaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGZzaV9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZnNpX2luZm8sCisJfSwKK307CisKIC8qIEtFWVNDIGluIFNvQyAoTmVlZHMgU1czMy0yIHNldCB0byBPTikgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBrZXlzY19pbmZvID0gewogCS5tb2RlID0gU0hfS0VZU0NfTU9ERV8xLApAQCAtMzk5LDYgKzQ1OSw3IEBACiAJJnNoX2V0aF9kZXZpY2UsCiAJJnNoNzcyNF91c2IwX2hvc3RfZGV2aWNlLAogCSZzaDc3MjRfdXNiMV9nYWRnZXRfZGV2aWNlLAorCSZmc2lfZGV2aWNlLAogfTsKIAogI2RlZmluZSBFRVBST01fT1AgICAweEJBMjA2MDAwCkBAIC00NjYsMTEgKzUyNywxMyBAQAogc3RhdGljIGludCBfX2luaXQgZGV2aWNlc19zZXR1cCh2b2lkKQogewogCXUxNiBzdyA9IGN0cmxfaW53KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KKwlzdHJ1Y3QgY2xrICpmc2lhX2NsazsKIAogCS8qIFJlc2V0IFJlbGVhc2UgKi8KIAljdHJsX291dHcoY3RybF9pbncoRlBHQV9PVVQpICYKIAkJICB+KCgxIDw8IDEpICB8IC8qIExBTiAqLwogCQkgICAgKDEgPDwgNikgIHwgLyogVklERU8gREFDICovCisJCSAgICAoMSA8PCA3KSAgfCAvKiBBSzQ2NDMgKi8KIAkJICAgICgxIDw8IDEyKSB8IC8qIFVTQjAgKi8KIAkJICAgICgxIDw8IDE0KSksIC8qIFJNSUkgKi8KIAkJICBGUEdBX09VVCk7CkBAIC02MDksNiArNjcyLDMyIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgICAgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDAsICAgICBOVUxMKTsKIAorCS8qIGVuYWJsZSBGU0kgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lNQ0tCLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lNQ0tBLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQVNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQUJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQUxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQUJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQUxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0FPLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQlNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQlNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQkJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQkxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQkJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQkxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0JPLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQVNELCAgICBOVUxMKTsKKworCS8qIGNoYW5nZSBwYXJlbnQgb2YgRlNJIEEgKi8KKwlmc2lhX2NsayA9IGNsa19nZXQoTlVMTCwgImZzaWFfY2xrIik7CisJY2xrX3JlZ2lzdGVyKCZmc2ltY2thX2Nsayk7CisJY2xrX3NldF9wYXJlbnQoZnNpYV9jbGssICZmc2ltY2thX2Nsayk7CisJY2xrX3NldF9yYXRlKGZzaWFfY2xrLCAxMTAwMCk7CisJY2xrX3NldF9yYXRlKCZmc2ltY2thX2NsaywgMTEwMDApOworCWNsa19wdXQoZnNpYV9jbGspOworCiAJLyoKIAkgKiBlbmFibGUgU0gtRXRoCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBhMTMxNjg3Li5jYjhjZjU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0yMCwxMSArMjAsMTIgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogCitzdWZmaXgteSA6PSBiaW4KIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYQordGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIApAQCAtODgsNiArODksOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmJpbjogJChvYmopL3ZtbGludXguYmluCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLG5vbmUpCisKIE9CSkNPUFlGTEFHU192bWxpbnV4LnNyZWMgOj0gLUkgYmluYXJ5IC1PIHNyZWMKICQob2JqKS92bWxpbnV4LnNyZWM6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXgKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKaW5kZXggNmMzOGE0My4uMmY3OGQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTY6MDQ6MTEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIEZyaSBTZXAgMjUgMTE6MjI6NTAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MSwxMSArNjAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg4LDE4ICs5OCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTA3LDYgKzExOCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTksNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSw3ICsxNTAsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTY5LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTQzUsMzg0MDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIgogCiAjCkBAIC0zMTYsNyArMzM0LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjQsNiArMzg4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTMsNiArNDE4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAwLDcgKzQyNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMyw2ICs0MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODAsNiArNTA2LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01ODMsNyArNjEwLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYzNywxMiArNjYzLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcyNiw2ICs3NTAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzM2LDYgKzc2MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CkBAIC03NTcsOSArNzgzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03ODAsNiArODAzLDExIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKQEAgLTgwNCwxMSArODMyLDE1IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjgsOCArODYwLDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTk1Nyw2ICs5OTMsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC05OTIsNiArMTAzMCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTAwMyw2ICsxMDQyLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEwNTYsOCArMTA5NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMjIsNyArMTE2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDIsNiArMTI0Myw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMTIsOCArMTI1NCwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTIyMSw2ICsxMjY2LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIzNCw3ICsxMjgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc1LDExICsxMzIwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzNDEsNSArMTM4OCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKaW5kZXggOTU3MTdhMC4uYWVkYmQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyNDo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1NjowNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NiwxOSArOTYsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDgsNiArMTE5LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMCw3ICsxMzUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY3LDYgKzE4Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxOCw2ICsyMzQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMjIsNyArMzM5LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHBhbmljPTMiCiAKICMKQEAgLTM5NSw2ICs0MTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQyNCw2ICs0NDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MzEsNyArNDUxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ0LDYgKzQ2Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTYsNyArNTE2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTYxLDEwICs1ODUsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYwNSwxMyArNjI2LDE0IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfTUFQTEU9eQorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNjc1LDExICs2OTcsMTUgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MTYsNiArNzQyLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04MDcsNyArODM0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTg2MSw4ICs4ODcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTIyLDcgKzk1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtOTQ5LDYgKzk3Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NTgsOCArOTg2LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtOTY3LDYgKzk5OCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTk4MCw3ICsxMDEyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwMTIsMTEgKzEwNDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTA3OSw1ICsxMTEyLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKaW5kZXggOWEyMmM2NC4uMDc3NDkyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNwotIyBUdWUgU2VwICA4IDEzOjU2OjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU2OjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTU5LDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNzksMTUgKzgwLDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEPTAKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQ9MAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMDcsMjAgKzEwMiwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0yMzcsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE5LDcgKzMxNCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCiAKICMKQEAgLTM4Miw2ICszNzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0MTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01MzAsMTAgKzUyOCw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYyNSw2ICs2MjAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTcsOSArNjUzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02OTMsMTEgKzY4NiwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxNyw2ICs3MTMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03NzEsNiArNzY4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC04NzUsNiArODczLDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19GU05PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw2ICs5NzQsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTg5LDcgKzk4OSw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCmluZGV4IDIwNTBhNzY2Li5hYzY0Njk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM3Ci0jIFdlZCBBdWcgMjYgMDk6MDk6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NDU6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNjAsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05NywyMCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMjMyLDYgKzIzMiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMTUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwLCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbT0xMjBNIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzg4LDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQyNCw3ICs0MjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzcsNiArNDQwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDQ2LDkgKzQ1MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTA0LDYgKzUwOCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjY2LDEwICs2NzEsNyBAQAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTMsMTEgKzcxNSwxNSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKQEAgLTc3MSw2ICs3NzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODA0LDkgKzgxMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODU2LDExICs4NjAsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MCw4ICs4ODgsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTkzNiw4ICs5NDYsMTAgQEAKIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVPXkKICMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfSTJDX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKQEAgLTEwMDMsNyArMTAxNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyNiw2ICsxMDM3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMDcwLDYgKzEwODIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE3NCw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjY1LDYgKzEyODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTMyOSw3ICsxMzQ2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQwOSw2ICsxNDI1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MjMsNyArMTQ0MCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0NDYsNyArMTQ2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ4NywxMSArMTUwMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCmluZGV4IDQ5NzQxNGMuLjg2YzliYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6MzUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiwxNyArMzksMjQgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC03MCwxOCArODAsMTkgQEAKICMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtODksNiArMTAwLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0JBU0VfU01BTEw9MQpAQCAtMTI1LDYgKzE0MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTE2NSw3ICsxODEsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTE3Myw2ICsxODgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNTAsNyArMjY2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDExICszMzgsMTQgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00MDksNiArNDI5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTQxNiw4ICs0MzcsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC00MjUsNiArNDQ5LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNDQ5LDQgKzQ3NCw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCmluZGV4IDc3Njg0ZWQuLjRjMGY4MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MzAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iX2Vkb3NrNzc2MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTEsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTIsNiArMTIzLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNCw3ICsxMzksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcxLDYgKzE4Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNiw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDQsNyArMzIxLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDIwMDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4zOi9zY3JpcHRzL2ZpbGVzeXMgaXA9MTkyLjE2OC4wLjQiCiAKICMKQEAgLTM2Nyw2ICszODUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MTUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI2LDkgKzQ0Niw5IEBACiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfREVCVUc9eQogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU2MywxMCArNTgzLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ5LDYgKzY2Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTksNiArNjc3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0g3NzYwPXkKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldApAQCAtNjgwLDIwICs2OTksMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKIENPTkZJR19JMkNfREVCVUdfQ0hJUD15CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzEyLDggKzczMiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTgzNyw4ICs4NTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05MDAsNyArOTI0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NzQsNiArOTk3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDEwLDE4ICsxMDM0LDIzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtMTAyOSw2ICsxMDU4LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDExICsxMDc1LDExIEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjQsNyArMTA5NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC0xMTAwLDExICsxMTI5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTY4LDUgKzExOTksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKaW5kZXggODgxMTI4ZS4uOWI3ODU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI3OjIxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU4OjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwxOSArMTAyLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE0LDcgKzIzMiw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIyMiw2ICsyMzksNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogCiAjCkBAIC0zNzEsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDIxLDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NzcsNiArNDk4LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NTQsNyArNTc2LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYxMCwxMCArNjMxLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA1LDExICs3MjMsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTksNiArODQxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg4OCw2ICs5MTEsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTMwLDggKzk1NCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTk5Nyw3ICsxMDIzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA3MSw2ICsxMDk2LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMDgsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTEwOTYsNiArMTEyNiw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMDksNyArMTE0MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTQxLDExICsxMTcxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMDgsNSArMTI0MCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCmluZGV4IDMyNDlkNDYuLmY1OWJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI4OjEyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU5OjQ1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODEsMTggKzkxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDAsNiArMTExLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEwNyw3ICsxMjIsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1NCw2ICsxNjksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xOTksNiArMjE1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg4LDcgKzMwNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMyMiw2ICszNDAsNyBAQAogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQVBNX0VNVUxBVElPTj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAKQEAgLTM5MCw3ICs0MDksNiBAQAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtMzk5LDYgKzQxNyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTQyOCwxMyArNDQ3LDE0IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfSFA2WFg9eQorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTQ1Miw2ICs0NzIsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNywxMSArNTI4LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYzLDcgKzY4OCw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03MjUsNyArNzUyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC03ODIsNiArODA4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTc5MSw4ICs4MTgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MDAsNiArODMwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODEzLDcgKzg0NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODU0LDExICs4ODQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTkyMCw0ICs5NTIsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCmluZGV4IGMwZjkyNjMuLjAyNTkwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDk6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MDE6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTgsMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC03OCwxNSArNzksOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTEwNiwyMCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE3Myw2ICsxNjcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE5LDYgKzIxNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMSw3ICsyOTcsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHF1aWV0IgogCiAjCkBAIC0zMjQsNiArMzIxLDcgQEAKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjIsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDAxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDg5LDYgKzQ4OSw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTUyMCw5ICs1MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTU1NiwxMSArNTU0LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNTgwLDYgKzU4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTcxOCw2ICs3MjAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzMyLDcgKzczNSw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwppbmRleCBjZWY2MTMxLi44YWU2NWQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBUaHUgQXVnIDIwIDIxOjU4OjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjU0OjIyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTYwLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTAyLDIwICsxMDMsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTkwLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzYsNiArMjM3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE5LDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzEsMTE1MjAwIgogCiAjCkBAIC0zNDMsNiArMzQ2LDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CkBAIC0zODMsNiArMzg3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MjMsNiArNDI4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMyLDkgKzQzOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTAwLDcgKzUwNiwxMiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKIAogIwogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwpAQCAtNTY0LDExICs1NzUsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CkBAIC02MjEsNiArNjM2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjUzLDkgKzY2OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjg5LDExICs3MDIsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTMsNiArNzI5LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODU2LDYgKzg3Myw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTQxLDYgKzk2MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDAyLDYgKzEwMjIsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxNiw3ICsxMDM3LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IGJhMDU3MzkuLmMyYTlhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyODo0NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODowNTo0OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOSArOTMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNCw2ICsxMTUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE2LDcgKzEzMSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjMsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA4LDYgKzIyNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQxMSw2ICs0MjksNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Miw2ICs0NjEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDksNyArNDY5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYyLDYgKzQ4MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTYzMSw2ICs2NTEsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKQEAgLTY1Myw3ICs2NzQsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03MjksNiArNzU0LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03NTQsMTAgKzc4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2OCwxMCArODkxLDIwIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtODg2LDkgKzkxOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MTAsNiArOTQxLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTkyOCwxMSArOTYwLDExIEBACiBDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2MSw2ICs5OTMsNyBAQAogQ09ORklHX0hJRF9FWktFWT1tCiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049bQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD1tCiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDExLDYgKzEwNDQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTE3Nyw4ICsxMjExLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjUxLDcgKzEyODcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQpAQCAtMTMzMSw2ICsxMzY2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNDAsOCArMTM3NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEzNTAsNiArMTM4OSw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzYzLDcgKzE0MDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTM5NSwxMSArMTQzNCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNDYyLDUgKzE1MDMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKaW5kZXggYzBiYzJmZC4uZWMwYzBiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI5OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjA5OjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE5ICs5MywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTYsNyArMTMxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Myw2ICsxNzgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk1LDcgKzMxMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtNDExLDYgKzQyOSw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ1OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjAsNiArNDc5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTcyLDEyICs1OTIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01OTksNiArNjIxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MjcsNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NDUsNyArNjY5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzI1LDYgKzc1Myw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzUwLDEwICs3NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NjMsMTAgKzg4OSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTg4MSw5ICs5MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTA1LDYgKzkzOSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MjMsNyArOTU4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMjEsOCArMTA1NSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA4OSw3ICsxMTI1LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTE1NSw2ICsxMTkwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNjQsOCArMTIwMCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTIxMyw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTg3LDcgKzEyMjcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTIxOSwxMSArMTI1OCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjg2LDUgKzEzMjcsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IGM1ODU5ZTguLjc5MDkxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzA6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTA6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTEsMTggKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTExLDYgKzEyMiwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjMsNyArMTM4LDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDYsNyArMzIzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzY4LDYgKzM4Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQxNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MjQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyOCw5ICs0NDgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTU4OSwxMCArNjA5LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjMxLDEzICs2NDgsMTUgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzIwLDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNzIxLDExICs3NDUsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjksOCArODU2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05NzYsNiArMTAwNCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAwNiwyNCArMTAzNSwzMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTAzNiwxNiArMTA3MSwxNSBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0NDMwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3Nyw1ICsxMTExLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKaW5kZXggZTVhMjFlMS4uNmJiNTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTQ6MzUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwNiw2ICsxMTcsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEzLDcgKzEyOCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYwLDYgKzE3NSw3IEBACiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMj15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTEsNiArMjI3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvaGRhMSIKIAogIwpAQCAtMzY0LDYgKzM4Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkzLDYgKzQxMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMCw3ICs0MjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTMsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTksMTAgKzUxOSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTYxLDEwICs1NzgsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU3NSw5ICs2MDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYyLDggKzY4NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzI2LDEyICs3NTMsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC04MDMsNiArODMwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgxMiw4ICs4NDAsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MjEsNiArODUyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODM0LDcgKzg2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODc1LDExICs5MDYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk0Myw1ICs5NzYsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwppbmRleCBiMThjZmQzLi42NTAxODI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxNjowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODoxNzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg5LDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMSw2ICsxMjMsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIyLDcgKzEzOSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzgsNyArMTU1LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIyNCw2ICsyNDIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDgsNyArMzI3LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2VyaWFsIGlwPW9uIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCIKIAogIwpAQCAtMzI4LDcgKzM0OCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzc2LDYgKzQwMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA2LDYgKzQzMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNCw3ICs0NDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjcsNiArNDU0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM2LDkgKzQ2NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDcgKzYxMyw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MjEsMTAgKzY0OCw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1OSwxNCArNjgzLDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNzE1LDYgKzc0NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTcyNSw2ICs3NTUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzQ2LDE1ICs3NzcsMTcgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CkBAIC03NzcsMTEgKzgxMCwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgwMSw4ICs4MzcsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTIyLDcgKzk2MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC05NTIsMTMgKzk4OSwxMyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKLUNPTkZJR19TVVBFUkhfQlVJTFRfSU5fTTY2NTkyPXkKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldApAQCAtMTAxNyw2ICsxMDU0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDY0LDggKzExMDIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTEyNiw3ICsxMTY2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzEyMDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNzIsMTEgKzEyMTIsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExODgsNiArMTIzMiw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTAwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjAxLDcgKzEyNDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CkBAIC0xMjQwLDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMDgsNSArMTM1NCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwppbmRleCA2N2VkZDNmLi43ZmMxOTUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzM6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjA6NTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwxOCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAyLDcgKzMxOSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgogCiAjCkBAIC0zNjMsNiArMzgxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDMsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDE0LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NzcsMTAgKzU5Nyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY2NiwxMSArNjgzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzcwLDggKzc5MSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04NDEsNyArODY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODc3LDYgKzg5OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MTYsMTggKzkzOSwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0c9eQogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtOTM1LDYgKzk2Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtOTQ3LDE2ICs5NzYsMTUgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHgwMDAwMDAwMAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4YTQwMDAxNTAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC05ODcsNSArMTAxNSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCAxMDdhOGUzLi45MDNiMDIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzQ6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjQ6MzEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwyMCArMTAyLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE1LDYgKzEyNywxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3NCw2ICsxOTEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMjI5LDYgKzI0Nyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNSw3ICszMzQsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCkBAIC0zOTYsNiArNDE2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtNDI4LDYgKzQ0OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQzNiw3ICs0NTgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDcwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDYwLDkgKzQ4Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUxMyw2ICs1MzUsNyBAQAogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTY1MSwxMSArNjc0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjc3LDYgKzcwMiw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzA0LDYgKzczMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyMiw3ICs3NDksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MDQsNiArODM1LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MjksMTAgKzg2MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg3MywxMyArOTAyLDE3IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05MzMsNiArOTY2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjEsNiArOTk1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTk4NywxOSArMTAyMiwyNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA0OSw2ICsxMDkxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA2MCw3ICsxMTAzLDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTEwODEsMTQgKzExMjMsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTAxLDExICsxMTQ2LDExIEBACiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY5LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMjEsOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODksMTIgKzEzMzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzcwLDYgKzE0MTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDA0LDIxICsxNDUzLDI3IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjcsNiArMTQ4Miw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0NSwxMSArMTUwMSwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NjQsNyArMTUyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwNiwxMSArMTU2MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NzMsNSArMTYzMCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwppbmRleCA4YTNkYzMwLi4yN2ZmNDZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6Mzc6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mjk6MjMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQ0LDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU2LDEyICs2NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMjAgKzEwMiwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xMTcsNiArMTI4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyOSw3ICsxNDUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc4LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIzMSw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzksNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzM4LDcgKzM1NSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTQxOSw2ICs0MzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC00NTIsNiArNDcxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDYwLDcgKzQ4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ3Myw2ICs0OTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01OTEsMTEgKzYxMSwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxNyw2ICs2MzksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0NCw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NjIsNyArNjg2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzIxLDYgKzc0OSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzQ2LDEwICs3NzUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03OTAsMTQgKzgxNiwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4ODIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg3OSw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSElHSExBTkRFUj15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKQEAgLTkwNiwxNSArOTM5LDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtOTM1LDE0ICs5NzAsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTkzLDYgKzEwMzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDA0LDkgKzEwNTAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyNiwxNCArMTA3MCwxNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwOTksMTEgKzExNDYsMTEgQEAKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY3LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMTksOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODYsMTIgKzEzMzYsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzY3LDYgKzE0MTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDAxLDIyICsxNDUyLDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjUsNiArMTQ4Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0MiwxMSArMTUwMSwxMSBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHXzRLU1RBQ0tTPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDYxLDcgKzE1MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDMsMTEgKzE1NjEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTcxLDUgKzE2MzEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKaW5kZXggNTVjMzY1Ni4uYzQwZGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM5OjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM0OjI5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODYsMTkgKzk2LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMTcsNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yODUsNyArMzAzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zZXJpYWwgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC0zMDksNiArMzI4LDcgQEAKICMKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiAjIENPTkZJR19ORVQgaXMgbm90IHNldApAQCAtMzI3LDkgKzM0Nyw5IEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNDk4LDYgKzUxOCwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC01OTcsNyArNjIyLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJTEVfTE9DS0lORyBpcyBub3Qgc2V0CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzIsNyArNjU5LDYgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTY2OCw3ICs2OTQsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02ODYsNiArNzExLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02OTgsMTEgKzcyNCwxNSBAQAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC03MTIsNiArNzQyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzQxLDQgKzc3Miw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKaW5kZXggNjllNjE5OS4uNWNhYmRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQwOjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM1OjA0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMywyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEyNCw3ICsxNDEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcyLDYgKzE4OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMjYsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpZ25vcmVfbG9nbGV2ZWwiCiAKICMKQEAgLTMzMiw2ICszNTEsNyBAQAogIwogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19ORVQ9eQpAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQyNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMCw3ICs0MzIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzIsOSArNDUzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNTkxLDEwICs2MTIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzksNiArNjk3LDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNjk5LDYgKzcyMiwxMCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03NDEsNyArNzY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC03NjQsNiArNzkwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODExLDYgKzgzOCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTU0LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05OTAsNyArMTAyMCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC0xMDE2LDcgKzEwNDUsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDkwLDYgKzExMTgsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjksMjIgKzExNTgsMjggQEAKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19ERUJVR19TRz15CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTExNTIsNiArMTE4Nyw3IEBACiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE3MCwxMCArMTIwNiwxMCBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmZlODAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfREVCVUdfQk9PVE1FTT15Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDMsNSArMTIzOSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCmluZGV4IGM2ZTliMWMuLmY1MjFlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM2OjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw4ICsyOSwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwyMCArOTQsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTE5LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIyLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCiAKICMKQEAgLTM3OCw2ICszOTgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MjksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MTYsNyArNDM4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI5LDYgKzQ1MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTU0MiwxMSArNTY0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY4LDYgKzU5Miw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTk1LDYgKzYyMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTYxMyw3ICs2MzksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC02NzMsNiArNzAzLDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs3MjUsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcxOSwxMCArNzUxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDEwICs4NjksMjAgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC04NjIsOSArOTAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODgwLDEyICs5MTcsMTUgQEAKIENPTkZJR19NRkRfU001MDE9eQogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05NjksNiArMTAwOSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTA3MSw3ICsxMTEyLDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NCw2ICsxMTM0LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTgzLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyMTMsNiArMTI1NSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMjUyLDYgKzEyOTUsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyOTMsOCArMTMzNywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM1Nyw3ICsxNDAzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNDIzLDYgKzE0NjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MzQsMTEgKzE0ODAsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE0NTAsNiArMTUwMCw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDYzLDcgKzE1MTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTQ5NSwxMSArMTU0NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTYyLDUgKzE2MTQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwppbmRleCBiYzEwNDY5ZC4uYTE1NmNkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDM6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mzk6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg0LDIwICs5NCwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIGVhcmx5cHJpbnRrPXNlcmlhbCIKIAogIwpAQCAtMzc4LDYgKzM5OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA4LDYgKzQyOSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNiw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjksNiArNDUwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM4LDkgKzQ2MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDk5LDYgKzUyMSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MjcsMTEgKzY1MCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1Myw2ICs2NzgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4MCw2ICs3MDYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzI1LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzU4LDYgKzc4OSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03NzksNiArODExLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MDQsMTAgKzgzNyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkyNSwxMCArOTU1LDIwIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk4Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk2NSwxMiArMTAwMywxNSBAQAogQ09ORklHX01GRF9TTTUwMT15CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwNTQsNiArMTA5NSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTE1Niw3ICsxMTk4LDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3OSw2ICsxMjIwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjY5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyOTgsNiArMTM0MSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMzM3LDYgKzEzODEsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNzgsOCArMTQyMywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ0Myw3ICsxNDkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNTA5LDYgKzE1NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjAsMTEgKzE1NjcsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE1MzYsNiArMTU4Nyw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNTQ5LDcgKzE2MDEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTU4MSwxMSArMTYzMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjQ4LDUgKzE3MDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKaW5kZXggNzUzZmIyNy4uMDU1NTM2YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQzOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQwOjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Il9TREs3NzgwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKQEAgLTg4LDIwICs5OCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEwLDYgKzEyMSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjIsNyArMTM3LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTIyNSw2ICsyNDEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzMxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDE4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9Im1lbT0xMjhNIGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3Jvb3RmcyIKIAogIwpAQCAtNDM1LDYgKzQ1Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDk2LDYgKzUxNSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTUwMyw3ICs1MjMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01MTYsNiArNTM1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNjc3LDEyICs2OTcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDQsNiArNzI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MzIsNiArNzU1LDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03NjAsNyArNzg0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODA0LDEwICs4MzIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2MiwxMiArODg3LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpAQCAtODc1LDYgKzkwMSw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTQ3LDYgKzk3NCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NTQsNyArOTg2LDYgQEAKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTg2LDYgKzEwMTcsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTA3MiwxMSArMTEwNCwxMSBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5OSw2ICsxMTMxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0OSw2ICsxMTgyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEyNzgsNiArMTMxMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQ1LDcgKzEzODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDI1LDYgKzE0NTksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjEsMTggKzE0OTYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDgwLDYgKzE1MjAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0OTUsMTEgKzE1MzYsMTEgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxNCw3ICsxNTU1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKQEAgLTE1NTAsMTEgKzE1OTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2MTcsNSArMTY1OSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKaW5kZXggOGRkMmYxMy4uMWNkMTc3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NjoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0NToyOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTMsMTIgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEwNSwxOSArMTE0LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEyNiw2ICsxMzcsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzcsNyArMTUzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE4NSw2ICsyMDEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0zMTksNyArMzM2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MzLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zODksNiArNDA3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTksNiArNDM4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDI2LDcgKzQ0Niw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ0OCw5ICs0NjcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg4LDEwICs2MDcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDcsMTEgKzY2MywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc0Niw4ICs3NjYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzgyLDggKzgwNCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC04MDksNyArODI5LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg0Niw2ICs4NjUsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODgyLDIwICs5MDIsMjcgQEAKIENPTkZJR19ERUJVR19MSVNUPXkKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC05MDQsNiArOTMxLDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC05MjAsMTAgKzk0OCwxMCBAQAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM4LDcgKzk2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC05NzQsMTEgKzEwMDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwNDYsNSArMTA3NSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggMThmNDZkZS4uNTUzMTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NzowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0Njo1NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OCwxOCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA4LDYgKzExOSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTksNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSw3ICsxNTAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE2OSw2ICsxODQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNiArMjMwLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCiAKICMKQEAgLTMxNiw3ICszMzQsMTIgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM2MCw2ICszODMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICs0MTMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTYsNyArNDIxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjAsMTAgKzU4NCw3IEBACiBDT05GSUdfTUlJPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzEsNiArNjkyLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjgxLDYgKzcwMyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwMiwyMCArNzI1LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTc4OCw2ICs4MTQsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtODIyLDcgKzg0OSw2IEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ1LDYgKzg3MSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs5MDQsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtODkxLDYgKzkxOSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9eQogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTkwLDggKzEwMTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTAyOCw4ICsxMDU5LDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDYyLDcgKzEwOTEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE0OSw4ICsxMTc4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTkyLDcgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExNzMsNyArMTIwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjA1LDExICsxMjM3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyNzMsNSArMTMwNyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggNzI0YmI3Ny4uNjkyMWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0Nzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1MDowNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDE3ICs0MCwyNCBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03MywzMSArODMsMzYgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfQkFTRV9TTUFMTD0xCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQ0LDYgKzE1OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI2Miw3ICsyNzgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00NjksMTEgKzQ4NiwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTUwNyw3ICs1MjgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNTU5LDcgKzU3OSw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTU5NCw3ICs2MTYsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKQEAgLTYxOSw3ICs2NDAsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02MzcsNiArNjU3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTY0NSw4ICs2NjYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjc4LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjgwLDQgKzcwNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCmluZGV4IDZjYTZhMmYuLjNhYmIwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDg6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTA6NTIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE4ICs5MywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAyLDYgKzExMywxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTMsNyArMTI4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2MCw2ICsxNzUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDUsNiArMjIxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg5LDcgKzMwNiw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM1NSw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTEsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA5LDkgKzQyOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU0NywxMCArNTY2LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDIsMTAgKzY1OCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjU2LDkgKzY4Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02OTIsNyArNzE2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTc0Niw3ICs3NjksOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODE1LDcgKzg0MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODQ5LDYgKzg3Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldApAQCAtODU3LDggKzg4MiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4OTQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC04NzgsNyArOTA3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkxMCwxMSArOTM4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk3OSw1ICsxMDA5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCBiOGFhZTExLi4xYTQzY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ5OjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjUzOjMyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwxOCArOTQsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTM2OCw2ICszODYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzMyw2ICs0NTIsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0MCw3ICs0NjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjQsOSArNDgzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU5Nyw3ICs2MTYsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjA1LDYgKzYyMyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTY1OCwxMCArNjc3LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTksMTEgKzczNSwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyOCw4ICs4NDgsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTg2Niw4ICs4ODgsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY0LDI0ICs5ODQsMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTk5NCwxNCArMTAyMCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTYsNyArMTA0MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMDU5LDExICsxMDgzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTEyNyw1ICsxMTUzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwppbmRleCAzMDZlMjFjLi5iOGEzYzhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjUwOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU3OjExIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODksMTggKzk5LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwOSw2ICsxMjAsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIwLDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjcsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEyLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGEyIgogCiAjCkBAIC0zNzMsNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzgsNiArNDU3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDUsNyArNDY1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY5LDkgKzQ4OCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDEsNyBAQAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3MiwxMiArNjg5LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzYyLDcgKzc4NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtNzg1LDYgKzgwNyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTgzMSw2ICs4NTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtOTAwLDYgKzkyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05NjEsOCArOTg2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDAyLDggKzEwMjksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMzYsNyArMTA2MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTUsNiArMTExOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTI0LDI0ICsxMTQ5LDMwIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExNTQsMTQgKzExODUsMTMgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMTc2LDcgKzEyMDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTIxOSwxMSArMTI0OCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyODcsNSArMTMxOCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKaW5kZXggNjE5NDM4Mi4uZDcwOWI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo1NDoyNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1Nzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMyw2ICsxMjQsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDEsNyArMTU3LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzYsNiArMTkyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjMzLDYgKzI1MCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNyw3ICszMzUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzYsNyArMzU1LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zODEsNiArNDA2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDM2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE3LDcgKzQ0NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMCw2ICs0NTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5NCw3ICs1MjEsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNTAyLDYgKzUyOCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzNSwxMCArNTYyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01NzcsMTIgKzYwMSwxMyBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTYzMSwxMCArNjU2LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDUsOSArNjgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4MSw3ICs3MTQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzc4LDggKzgxMCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODM5LDcgKzg3Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODY2LDYgKzg5OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODc4LDggKzkxMiwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04ODksNiArOTI2LDcgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkwMiw3ICs5NDAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTM0LDExICs5NzEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAwMiw1ICsxMDQxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZwppbmRleCAzZWU3ODNhMC4uNTZiMGI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgTW9uIEp1biAyOSAxNjoyODo0MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMTo1MDo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC00Miw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU0LDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMjAgKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE0NCw3ICsxNTAsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc4LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ5LDYgKzI1Nyw4IEBACiAjCiBDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKIENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9LRlIyUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VDT1ZFQyBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTI2OSw3ICsyNzksMTAgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLSMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTEyCisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgQ29tcGFuaW9uIENoaXBzCkBAIC0zMDUsNyArMzE4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVNDMywxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzI1LDcgKzMzOSwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAyLDYgKzQyMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwOSw3ICs0MzEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Myw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDg5LDYgKzUxMSw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjQ4LDEyICs2NzEsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk3LDE0ICs3MTgsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzgwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc2NCw2ICs3OTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzg2LDkgKzgxNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODM4LDExICs4NjMsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2Miw4ICs4OTEsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTg3NiwyNCArOTA3LDI0IEBACiBDT05GSUdfVklERU9fVjRMMl9DT01NT049eQogIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQogCiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIwogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj15CitDT05GSUdfTUVESUFfVFVORVI9bQogIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15Ci1DT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQotQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT0JVRl9HRU49eQogQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUc9eQpAQCAtOTA0LDYgKzkzNSw3IEBACiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBPXkKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldApAQCAtOTE5LDE1ICs5NTEsMTggQEAKIENPTkZJR19VU0JfR1NQQ0E9bQogIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKQEAgLTk1Nyw2ICs5OTIsMjYgQEAKICMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfTUFYX0FEQVBURVJTPTgKKyMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU01TX1NJQU5PX01EVFYgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC0xMDE3LDEwICsxMDcyLDgwIEBACiAjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPW0KKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCitDT05GSUdfU05EX1NPQ19TSDRfRlNJPW0KK0NPTkZJR19TTkRfRlNJX0FLNDY0Mj15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCitDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTPW0KK0NPTkZJR19TTkRfU09DX1dNX0hVQlM9bQorQ09ORklHX1NORF9TT0NfQUQxODM2PW0KK0NPTkZJR19TTkRfU09DX0FEMTkzOD1tCitDT05GSUdfU05EX1NPQ19BRDczMzExPW0KK0NPTkZJR19TTkRfU09DX0FLNDEwND1tCitDT05GSUdfU05EX1NPQ19BSzQ1MzU9bQorQ09ORklHX1NORF9TT0NfQUs0NjQyPW0KK0NPTkZJR19TTkRfU09DX0NTNDI3MD1tCitDT05GSUdfU05EX1NPQ19MMz1tCitDT05GSUdfU05EX1NPQ19QQ00zMDA4PW0KK0NPTkZJR19TTkRfU09DX1NQRElGPW0KK0NPTkZJR19TTkRfU09DX1NTTTI2MDI9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjM9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjY9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9bQorQ09ORklHX1NORF9TT0NfVURBMTM0WD1tCitDT05GSUdfU05EX1NPQ19VREExMzgwPW0KK0NPTkZJR19TTkRfU09DX1dNODUxMD1tCitDT05GSUdfU05EX1NPQ19XTTg1MjM9bQorQ09ORklHX1NORF9TT0NfV004NTgwPW0KK0NPTkZJR19TTkRfU09DX1dNODcyOD1tCitDT05GSUdfU05EX1NPQ19XTTg3MzE9bQorQ09ORklHX1NORF9TT0NfV004NzUwPW0KK0NPTkZJR19TTkRfU09DX1dNODc1Mz1tCitDT05GSUdfU05EX1NPQ19XTTg3NzY9bQorQ09ORklHX1NORF9TT0NfV004OTAwPW0KK0NPTkZJR19TTkRfU09DX1dNODkwMz1tCitDT05GSUdfU05EX1NPQ19XTTg5NDA9bQorQ09ORklHX1NORF9TT0NfV004OTYwPW0KK0NPTkZJR19TTkRfU09DX1dNODk2MT1tCitDT05GSUdfU05EX1NPQ19XTTg5NzE9bQorQ09ORklHX1NORF9TT0NfV004OTc0PW0KK0NPTkZJR19TTkRfU09DX1dNODk4OD1tCitDT05GSUdfU05EX1NPQ19XTTg5OTA9bQorQ09ORklHX1NORF9TT0NfV004OTkzPW0KK0NPTkZJR19TTkRfU09DX1dNOTA4MT1tCitDT05GSUdfU05EX1NPQ19NQVg5ODc3PW0KKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzExNjgsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEwNzIsNiArMTE5OCw3IEBACiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKQEAgLTEwODYsOSArMTIxMywxMSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTExNTEsOSArMTI4MCw0NiBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTc9eQorQ09ORklHX1VTQl9SOEE2NjU5Nz15CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTExNzYsNiArMTM0Miw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMjMsNiArMTM5MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjc5LDYgKzE0NDgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxNTEzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQyMyw2ICsxNTkyLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQzMyw4ICsxNjAzLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQyLDYgKzE2MTUsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDU1LDcgKzE2MjksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0OTYsMTEgKzE2NjksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Miw1ICsxNzM3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwppbmRleCA1NjRiZjdiLi43YmM5MjZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAwOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU4OjU4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg0LDE4ICs5NCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzU4LDYgKzM3Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg3LDYgKzQwNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5NCw3ICs0MTQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTYzLDcgKzU4Miw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTksMTAgKzYxNyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjY1LDEwICs2ODAsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY3OSw5ICs3MDQsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NjYsOCArNzg5LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MzgsNyArODYzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04ODUsNiArOTA5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODk0LDggKzkxOSwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkwMyw2ICs5MzEsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05MTYsNyArOTQ1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0OCwxMSArOTc2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMTYsNSArMTA0Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggZWI0MzFjNC4uYzIwYWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMTo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNyw2ICsxMTgsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzMyw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwMCIKIAogIwpAQCAtMzgyLDYgKzQwMCw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQzMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxOCw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzYsOSArNDU1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTc0LDEwICs1OTMsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzMiwxMCArNjQ4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDYsOSArNjcyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODA2LDcgKzgzMiw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODMzLDYgKzg1OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NDIsOCArODY4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODUxLDYgKzg4MCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTg2NCw3ICs4OTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtODk2LDExICs5MjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTY1LDUgKzk5Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggNzU2YmVlYy4uODJiYWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMzo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04MSwxOSArOTEsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwMSw2ICsxMTIsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEyLDcgKzEyOCw4IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU5LDYgKzE3Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MD15CkBAIC0xOTksNyArMjE3LDYgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg3LDggKzMwNSw5IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODEwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLjExNTIwMCByb290PS9kZXYvc2RhMSIKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODIsNiArNDAxLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg5LDcgKzQwOSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MDYsOSArNDI1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTQ5LDYgKzU2OCw3IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQEAgLTU4NywxMSArNjA3LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjEyLDYgKzYzNCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjUzLDcgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjQ4LDggKzY3MiwxMyBAQAogIwogCiAjCi0jIEEgbmV3IGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15CisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCiAjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTcyNCwxMCArNzUzLDcgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjEsMTAgKzg0NywxOSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CkBAIC04MzMsNyArODY4LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTg1Nyw2ICs4OTEsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTM3LDExICs5NzIsMTEgQEAKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2NCw2ICs5OTksNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDA5LDYgKzEwNDUsNyBAQAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMjQzLDYgKzEyODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTMsOCArMTI5MSwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMjYzLDYgKzEzMDQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjc2LDcgKzEzMTgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMzA5LDYgKzEzNTAsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTM3MSw1ICsxNDEzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IDdmZWRhYWUuLmRkMGU4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNDo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowNzoxNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC05MSwyMCArMTAxLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMiw3ICszMjEsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgbWVtPTY0TSByb290PS9kZXYvbmZzIgogCiAjCkBAIC0zODIsNiArNDAyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE5LDcgKzQ0MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjEzLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNjAzLDcgKzYyNiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY3OSw2ICs3MDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcwNCwxMCArNzMyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODA0LDEwICs4MjksMjAgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MjIsOSArODU3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODYxLDYgKzg5NCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NzksNyArOTEzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTk0NCw4ICs5NzcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDExLDEyICsxMDQ2LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTEwOCw2ICsxMTQzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE5LDExICsxMTU1LDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMTM0LDYgKzExNzQsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE0Nyw3ICsxMTg4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTg5LDExICsxMjI5LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI1OSw1ICsxMzAxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCBjMjk2Y2E1Li42NjIxNTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA2OjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjExOjQ5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg3LDE4ICs5NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDcsNiArMTE4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjcsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTIsNyArMzEwLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzc0LDYgKzM5Myw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ2MCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjksOSArNDg5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNjA1LDEwICs2MjUsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4Niw2ICs3MDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzIzLDcgKzc0NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03NzUsOCArNzk2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTgxMyw4ICs4MzYsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg0Nyw3ICs4NjgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTg3NCw2ICs4OTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Myw4ICs5MDQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04OTMsNiArOTE3LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTA2LDcgKzkzMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk2MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDA2LDUgKzEwMzIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwppbmRleCBiYTI2YmUxLi5lMDY3MTlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToxNDowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDYsMTQgKzU1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTkyLDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTMsMTMgKzEyMiwxOCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjksNiArMTgzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMjksNiBAQAogIwogIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAogIwotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ2LDYgKzI2MSw4IEBACiAjIEJvYXJkIHN1cHBvcnQKICMKICMgQ09ORklHX1NIXzc3MjRfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tGUjJSMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUNPVkVDIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMzE4LDcgKzMzNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM0NSw2ICszNjMsNyBAQAogQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtNDI3LDYgKzQ0Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC00MzcsNiArNDU3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNDU2LDIwICs0NzcsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00ODgsOCArNTEwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNTQwLDYgKzU2NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtNTg3LDcgKzYxMiw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NjksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjU0LDExICs2ODIsMTUgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC02NjgsNiArNzAwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjkyLDQgKzcyNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzYzcmRwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCmluZGV4IGIxZDliMjMuLjE5NGZmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDc6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTU6MzcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkyLDE5ICsxMDIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTI2LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNSw3ICsxNDIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNyArMjMyLDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjIyLDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzIsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIHJvb3RkZWxheT0xMCIKIAogIwpAQCAtMzcxLDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAxLDYgKzQyMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQwOSw3ICs0MzAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODgsNiArNTA5LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NjUsNyArNTg3LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYyMSwxMCArNjQyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzE2LDExICs3MzQsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MzAsNiArODUyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg5OSw2ICs5MjIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTIzLDYgKzk0Nyw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTU2LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMjIsNyArMTA1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5Niw2ICsxMTIzLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMDcsMTEgKzExMzUsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExMjEsNiArMTE1Myw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMzQsNyArMTE2Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTY2LDExICsxMTk4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMzIsNSArMTI2Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IDQyNmE4OGYuLjM0YmVkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjA1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjE3OjE2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NSwxNCArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMTkgKzk4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMiwxMyArMTIxLDE4IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsxODAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MD15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDcgKzIyNSw2IEBACiAjCiAjIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCiAjCi1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIxOCw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTMsNyArMzI4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzM4LDYgKzM1NCw3IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKQEAgLTQyMCw2ICs0MzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNDMwLDYgKzQ0OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTQ0OSwyMCArNDY4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDgxLDggKzUwMSwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTUzMyw2ICs1NTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTU4MCw3ICs2MDMsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjYwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTY0NywxMSArNjczLDE1IEBACiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5MSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTY4NSw0ICs3MTYsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwppbmRleCBlZDMxNmY2Li41MWNiYWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjM5OjIwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15Ci1DT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDEsMTAgKzQzLDE3IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNjcsOCArNzcsNyBAQAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKQEAgLTc5LDcgKzg4LDcgQEAKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CkBAIC05MywyOCArMTAyLDM3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CitDT05GSUdfUEVSRl9DT1VOVEVSUz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCitDT05GSUdfR0NPVl9LRVJORUw9eQogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjcsNyArMTQ1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc2LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzQsMTIgQEAKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0Sz15CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIyMyw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzEsNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjU2LDYgKzI4MSw3IEBACiAjCiAjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TSDc3ODVMQ1I9eQorIyBDT05GSUdfU0hfU0g3Nzg1TENSX1BUIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMjY0LDE0ICsyOTAsMjkgQEAKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX1NIX0NQVV9GUkVRPXkKIAogIwogIyBETUEgc3VwcG9ydApAQCAtMjk5LDEyICszNDAsMTIgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0dVU0E9eQotIyBDT05GSUdfU1BBUlNFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFX0lSUT15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0zMTIsNyArMzUzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDggKzM2Myw3IEBACiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKQEAgLTMzOSw4ICszODAsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zOTIsNiArNDM4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTQsNiArNDYxLDggQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKQEAgLTQyMSw2ICs0NzAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MjksNyArNDc5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQyLDE4ICs0OTEsMTcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1ODYsOCBAQAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTYxLDcgKzYxMCw3IEBACiBDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQpAQCAtNTkxLDYgKzY0MCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjYyLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjkwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjU3LDcgKzcwOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY5MCw2ICs3NDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5NywxMiArNzU0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTczOSwyNSArNzkxLDQyIEBACiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKIENPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPW0KIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC03NjYsNyArODM1LDEyIEBACiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NzcsNyArODUxLDcgQEAKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIApAQCAtNzk2LDEyICs4NzAsMTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODA5LDYgKzg4MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzOCw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg2NCwyMSArOTM4LDQyIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfU0hfV0RUPXkKKyMgQ09ORklHX1NIX1dEVF9NTUFQIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKQEAgLTg5NiwxNCArOTkxLDE3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MTUsMTIgKzEwMTMsMTEgQEAKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KLUNPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQotQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRk9QUz1tCi1DT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtOTU1LDcgKzEwNTIsNyBAQAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU001MDE9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldApAQCAtOTgxLDE0ICsxMDc4LDExMiBAQAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX1NVUEVSSF9NT05PPXkKK0NPTkZJR19MT0dPX1NVUEVSSF9WR0ExNj15CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CitDT05GSUdfU05EX1JBV01JREk9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9eQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKK0NPTkZJR19TTkRfT1BMM19MSUJfU0VRPXkKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD15CitDT05GSUdfU05EX09QTDNfTElCPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NNSVBDST15CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDEsMzQgKzExOTYsMzkgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfRFJBR09OUklTRT1tCisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1BFVEFMWU5YPXkKLUNPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQotQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KK0NPTkZJR19ISURfR1JFRU5BU0lBPW0KKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz1tCisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPW0KICMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9bQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMDQwLDEzICsxMjQwLDE0IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xMDYxLDEwICsxMjYyLDggQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CkBAIC0xMTMzLDcgKzEzMzIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDMsNyArMTM0MiwyOSBAQAogIwogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST1tCisjIENPTkZJR19NTUNfU0RIQ0lfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09bQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxNDAwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjAzLDkgKzE0MjUsMjAgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CitDT05GSUdfVUlPPW0KKyMgQ09ORklHX1VJT19DSUYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TTVggaXMgbm90IHNldAorIyBDT05GSUdfVUlPX0FFQyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUENJX0dFTkVSSUMgaXMgbm90IHNldAogCiAjCiAjIFRJIFZMWU5RCkBAIC0xMjI1LDEzICsxNDU4LDE1IEBACiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI3NSw5ICsxNTEwLDkgQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldApAQCAtMTI5NywyMCArMTUzMiwyMCBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQpAQCAtMTM3Myw4NSArMTYwOCw2OSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX1NUQUNLX1RSQUNFUj15CitDT05GSUdfS01FTVRSQUNFPXkKK0NPTkZJR19XT1JLUVVFVUVfVFJBQ0VSPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1BST0ZJTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19EV0FSRl9VTldJTkRFUj15CitDT05GSUdfTUNPVU5UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDY1LDcgKzE2ODQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDcsMTEgKzE3MjUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTU2LDcgKzE3NzYsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE1NzMsNSArMTc5Myw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggMDA0ZTZmNS4uOGMyYzQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowOTozNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyMzoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksOCArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQotQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMjUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI3LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjI0LDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwNiw3ICszMjIsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODYsNiArNDAzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTUsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDIzLDcgKzQ0Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNiw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ0NSw5ICs0NjQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDYgKzYwNCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzMsNiArNjU0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjUxLDcgKzY3MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY4NCw2ICs3MTAsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5MSwxMCArNzE4LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzQ0LDEzICs3NjgsMTcgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtODAzLDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzMiw2ICs4NjEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg1OCwyMCArODg4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODkwLDE0ICs5MjEsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05ODIsNyArMTAxNiw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNSw2ICsxMDM4LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTA1NSw2ICsxMDg5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExNzMsNiArMTIwOCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTIyNCw4ICsxMjYwLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI5MSwxMiArMTMyOSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKQEAgLTEzNzIsNiArMTQxMCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MDcsMTggKzE0NDYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDI2LDYgKzE0NzAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDAsMTEgKzE0ODUsMTEgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NTksNyArMTUwNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwMSwxMSArMTU0NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NjcsNSArMTYxMyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCmluZGV4IGFkN2Q2MDkuLjkyMTE1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjEwOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjI3OjE3IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03NywxOCArODcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtOTYsMTIgKzEwNywxNiBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDgsNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMTkzLDYgKzIwOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI3NCw3ICsyOTEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDIxMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9MWYwMSBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo2NGsoZmlybSlybywtKHN5cykgbmV0ZGV2PTM0LDB4MzAwLGV0aDAgIgogCiAjCkBAIC0zMzksNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzg3LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc1LDcgKzM5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUyOSwxMCArNTQ4LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01OTEsMTEgKzYwNywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY3Miw3ICs2OTIsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03MDksOCArNzMxLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTczMiw3ICs3NTIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC03NjgsNiArNzg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC03NzUsOCArNzk1LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtNzg1LDYgKzgwOCw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzk3LDcgKzgyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC04MjgsMTEgKzg1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC04OTUsNSArOTIwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCmluZGV4IDIwN2IwYzkuLmUzODU4ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMTowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyOToyNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMzAsNyArMzEsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU1LDEyICs2NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTExLDE5ICsxMjAsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTM1LDYgKzE0NiwxMSBAQAogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xNDcsNyArMTYzLDcgQEAKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTk2LDYgKzIxMiw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI1Niw2ICsyNzMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zNTMsNyArMzcxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAxMDAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1iaW9zIGlnbm9yZV9sb2dsZXZlbCIKIAogIwpAQCAtNDM4LDYgKzQ1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDg5LDYgKzUwOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTYyLDcgKzU4Myw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01NzAsNiArNTkwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjAyLDEyICs2MjMsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc1LDYgKzY5NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY4NSw2ICs3MDUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwNiw5ICs3MjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcyOSwxMSArNzQ3LDE1IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzYyLDggKzc4NCwxMiBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODA4LDYgKzgzNCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9bQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtODYyLDYgKzg4OSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQpAQCAtODc2LDEwICs5MDQsMTEgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldApAQCAtOTM5LDYgKzk2OCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTUwLDYgKzk4MCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMDAyLDggKzEwMzMsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjMsNyArMTA5Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTEyOSw2ICsxMTYxLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTY0LDIyICsxMTk3LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xMTg4LDYgKzEyMjgsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTAgKzEyNDYsMTAgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjIzLDcgKzEyNjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI1NSwxMSArMTI5NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzIyLDUgKzEzNjQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwppbmRleCAyYmUyZDc1Li5jYjkxOWEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDM6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzM6MDAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTcsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTk1LDIxICs5NiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xNzUsNiArMTc1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjIwLDYgKzIyMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxMiw3ICszMTQsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM3NCw2ICszNzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwMyw2ICs0MDcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDE1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE4LDEwICs2MjIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcxNCw3ICs3MTUsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM2LDYgKzczNiw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04MTgsNiArODE5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODgyLDcgKzg4NCw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTIyLDcgKzkyNCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCA1ZDk3MDI2Li5iOWZlOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzU6MDMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTggKzkzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDMsNiArMTE0LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTQsNyArMzExLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00MDIsMTAgKzQyMCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNDE2LDkgKzQ0NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00OTUsNyArNTIxLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTU1OSw3ICs1ODcsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC01NzcsNiArNjA0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTU4Niw4ICs2MTQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjI2LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjIzLDQgKzY1NSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCA3YWQwODBlLi4yY2E3OWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMjo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozNjozNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CkBAIC05MCwxOSArMTAwLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDcsNyArMzI0LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA5ZTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMzg0MDBOODEgcm9vdD0vZGV2L25mcyBpcD06Ojo6OmV0aDE6YXV0b2NvbmYgcnciCiAKICMKQEAgLTUwOSw2ICs1MjcsNyBAQAogIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD15CkBAIC01OTUsNiArNjE0LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02MDMsNyArNjIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE2LDYgKzYzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTYyOCw5ICs2NDgsOSBAQAogQ09ORklHX01URD1tCiBDT05GSUdfTVREX0RFQlVHPXkKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC04MjAsNiArODQwLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtODMyLDcgKzg1MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTkzMSw2ICs5NTYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTk1NiwxMCArOTgyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTA4NywxMCArMTExMCwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTExMDUsOSArMTEzOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNDksNiArMTE4MCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTY3LDcgKzExOTksNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsNiArMTI0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xNDE2LDggKzE0NDgsMTAgQEAKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDg5LDcgKzE1MjMsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU5MSw2ICsxNjI0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjIxLDIzICsxNjU1LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTY1MCwxNCArMTY5MCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NzIsNyArMTcxMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzE1LDExICsxNzUzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQpAQCAtMTc5MCw1ICsxODMwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwppbmRleCA2MDhmZTU2Li5iMDEyY2E3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxNDozNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTo0MjozMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMyw2ICsxMjQsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0MCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDEsNyArMTU2LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzYsNiArMTkxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjMzLDYgKzI0OSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMzEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCIKIAogIwpAQCAtMzM0LDcgKzM1MiwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzgyLDYgKzQwNiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDE5ICs0MzYsMTcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9bQogIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTPXkKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKLQotIwotIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgotIwogQ09ORklHX01BQzgwMjExX1JDX1BJRD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQpAQCAtNDQ0LDYgKzQ2Nyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ1Myw5ICs0NzcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTkwLDcgKzYxNCw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTgsNiArNjIxLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjMxLDEwICs2NTUsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOXzgwMjExPXkKIENPTkZJR19MSUJFUlRBUz1tCkBAIC02NDgsMTIgKzY2OSwxMyBAQAogIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSOTE3MF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CiAKICMKQEAgLTc1MCwxMCArNzcyLDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03NjQsOSArNzk2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgxMyw2ICs4NDMsNyBAQAogIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CkBAIC04MjcsOSArODU4LDkgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15Ci0jIENPTkZJR19TVVBFUkhfT05fQ0hJUF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKQEAgLTg5Myw2ICs5MjQsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTE3LDYgKzk0OSw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTQ5LDggKzk4MywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAxNCw3ICsxMDUwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDkxLDYgKzExMjYsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTAzLDggKzExMzksMTEgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTExMiw2ICsxMTUxLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTEyNSw3ICsxMTY1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTY3LDExICsxMjA2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CkBAIC0xMjM1LDUgKzEyNzYsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKaW5kZXggZWUxOTg3ZS4uOWY4YWVlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjE1OjI4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjQ2OjEzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDExICsxNCwxMyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTI5LDcgKzMxLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01NCwxNCArNjQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTExLDIwICsxMTksMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEzNCw2ICsxNDIsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ2LDcgKzE1OSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xOTUsNiArMjA4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjQ0LDcgKzI1OCw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNjUsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMjIsNiArMzM2LDcgQEAKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMzM0LDcgKzM0OSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM0Myw2ICszNTksOCBAQAogIyBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lFUE9SVEJVUz15CiBDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAorIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogQ09ORklHX1BDSUVBU1BNPXkKIENPTkZJR19QQ0lFQVNQTV9ERUJVRz15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzg1LDcgQEAKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfTkVUPXkKQEAgLTQyMCw2ICs0MzksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Miw3ICs0NjIsNiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CkBAIC00NTAsNiArNDY5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDU4LDcgKzQ3OCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ3MSw2ICs0OTAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MCw5ICs1MDAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNjIwLDYgKzY0MCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNjQxLDYgKzY2Miw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjY4LDYgKzY5MCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY4Niw3ICs3MDksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03ODIsNiArODA5LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03ODksMTAgKzgxNyw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg0MiwxNCArODY3LDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05MDIsNiArOTMyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09QQ0E9eQpAQCAtOTMxLDYgKzk2Miw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTk1OCwxNSArOTkwLDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtOTg3LDE0ICsxMDIxLDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTA4OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNTYsOSArMTEwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci1DT05GSUdfVEhFUk1BTF9IV01PTj15CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA3OSw4ICsxMTIyLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTEwOTksNiArMTE0NCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTgzLDcgKzEyMjksNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDYsNiArMTI1MSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTMwMSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMzczLDYgKzE0MjAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE0MjIsNiArMTQ3MCw3IEBACiBDT05GSUdfRVhUNF9GU19YQVRUUj15CiAjIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0pCRDI9eQpAQCAtMTQzMSw5ICsxNDgwLDExIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19CVFJGU19GUz15CiAjIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0OTksMTIgKzE1NTAsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xNTc2LDYgKzE2MjcsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTYxMCwxOCArMTY2MiwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNjMzLDExICsxNjkwLDExIEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZWIwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNjUyLDcgKzE3MDksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2OTQsMTEgKzE3NTAsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc2NCw1ICsxODIyLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IDE5ODdmM2UuLjA2ZTIyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAotCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIF9fU1BJTl9MT0NLX1VOTE9DS0VEKChuYW1lKS53YWl0X2xvY2spLCBcCiAJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCiAJICBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwppbmRleCA2YjVkMTkxLi5hMzUxZWQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCkBAIC02OCw3ICs2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW1hc2tfaXJxX2NoaXAgPSB7Ci0JLnR5cGVuYW1lCT0gIlNSLklNQVNLIiwKKwkubmFtZQkJPSAiU1IuSU1BU0siLAogCS5tYXNrCQk9IG1hc2tfaW1hc2tfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX2ltYXNrX2lycSwKIAkubWFza19hY2sJPSBtYXNrX2ltYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwppbmRleCA2YzA5MmYxLi4wNmU3ZTI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCkBAIC04NSw3ICs4NSw3IEBACiBzdGF0aWMgdm9pZCBlbmRfaW50Y19pcnEodW5zaWduZWQgaW50IGlycSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW50Y19pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiSU5UQyIsCisJLm5hbWUgPSAiSU5UQyIsCiAJLnN0YXJ0dXAgPSBzdGFydHVwX2ludGNfaXJxLAogCS5zaHV0ZG93biA9IHNodXRkb3duX2ludGNfaXJxLAogCS5lbmFibGUgPSBlbmFibGVfaW50Y19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggMDE1MTkzMy4uYmI0MDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTUyLDggKzE1Miw2IEBACiAJbW92LmwJMWYsIHIwCiAJbW92LmwJQHIwLCByNgogCi0Jc3RpCi0KIAltb3YubAkzZiwgcjAKIAltb3YubAk0ZiwgcjEKIAltb3YJcjE1LCByNApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCAzNTA5Nzc1Li41NDkxYjA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtMzczLDYgKzM3NCwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCkBAIC0zODUsNiArMzk4LDcgQEAKIAkmdnB1X2RldmljZSwKIAkmdmV1X2RldmljZSwKIAkmanB1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzcyMl9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IDJjOTAxZjQ0Ni4uMTJmZjU2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewogCS5uYW1lID0gIlRNVTAiLApAQCAtMjQwLDYgKzI0MSwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLApAQCAtMjQ5LDYgKzI2Miw3IEBACiAJJnRtdTVfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZzY2lfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3NzgwX2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IGJjNGQ4ZDcuLmQ3NmEyMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMjAsMTEgKzIwLDExIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZi5oPgogI2luY2x1ZGUgPGFzbS91bndpbmRlci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLSNpbmNsdWRlIDxhc20vZHdhcmYuaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiAvKiBSZXNlcnZlIGVub3VnaCBtZW1vcnkgZm9yIHR3byBzdGFjayBmcmFtZXMgKi8KQEAgLTU1NSw5ICs1NTUsMzAgQEAKIAkgKiBOT1RFOiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXR1cCBieSB0aGUKIAkgKiB0aW1lIHRoaXMgZnVuY3Rpb24gbWFrZXMgaXRzIGZpcnN0IGZ1bmN0aW9uIGNhbGwuCiAJICovCi0JaWYgKCFwYyAmJiAhcHJldikKKwlpZiAoIXBjIHx8ICFwcmV2KQogCQlwYyA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGV4dF9hZGRyKCk7CiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJLyoKKwkgKiBJZiBvdXIgc3RhY2sgaGFzIGJlZW4gcGF0Y2hlZCBieSB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCisJICogdGhlbiB3ZSBtaWdodCBzZWUgdGhlIGFkZHJlc3Mgb2YgcmV0dXJuX3RvX2hhbmRsZXIoKSB3aGVyZSB3ZQorCSAqIGV4cGVjdGVkIHRvIGZpbmQgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuCisJICovCisJaWYgKHBjID09ICh1bnNpZ25lZCBsb25nKSZyZXR1cm5fdG9faGFuZGxlcikgeworCQlpbnQgaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaGF2ZSBubyB3YXkgb2YgdHJhY2tpbmcgaG93IG1hbnkKKwkJICogcmV0dXJuX3RvX2hhbmRsZXIoKSdzIHdlJ3ZlIHNlZW4uIElmIHRoZXJlIGlzIG1vcmUKKwkJICogdGhhbiBvbmUgcGF0Y2hlZCByZXR1cm4gYWRkcmVzcyBvbiBvdXIgc3RhY2ssCisJCSAqIGNvbXBsYWluIGxvdWRseS4KKwkJICovCisJCVdBUk5fT04oaW5kZXggPiAwKTsKKworCQlwYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCX0KKyNlbmRpZgorCiAJZnJhbWUgPSBtZW1wb29sX2FsbG9jKGR3YXJmX2ZyYW1lX3Bvb2wsIEdGUF9BVE9NSUMpOwogCWlmICghZnJhbWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkd2FyZiBmcmFtZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDY4ZDkyMjMuLjNlYjg0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMjEsNyArMTIxLDcgQEAKIEVOVFJZKHJlc3VtZV91c2Vyc3BhY2UpCiAJISByODogY3VycmVudF90aHJlYWRfaW5mbwogCWNsaQotCVRSQUNFX0lSUVNfT2ZGCisJVFJBQ0VfSVJRU19PRkYKIAltb3YubAlAKFRJX0ZMQUdTLHI4KSwgcjAJCSEgY3VycmVudF90aHJlYWRfaW5mby0+ZmxhZ3MKIAl0c3QJIyhfVElGX1dPUktfTUFTSyAmIDB4ZmYpLCByMAogCWJ0L3MJX19yZXN0b3JlX2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwppbmRleCBhM2RjYzZkLi4yYzQ4ZTI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjkxLDMxICsyOTEsNDggQEAKIAlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwogfQogCi12b2lkIGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2ludCBzeXNjYWxsX25hbWVfdG9fbnIoY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfc3lzY2FsbHM7IGkrKykKKwkJaWYgKHN5c2NhbGxzX21ldGFkYXRhW2ldKQorCQkJaWYgKCFzdHJjbXAoc3lzY2FsbHNfbWV0YWRhdGFbaV0tPm5hbWUsIG5hbWUpKQorCQkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9lbnRlcl9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZW50ZXJfaWQgPSBpZDsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9leGl0X2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5leGl0X2lkID0gaWQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqbWV0YTsKIAl1bnNpZ25lZCBsb25nICoqcHN5c19zeXNjYWxsX3RhYmxlID0gJnN5c19jYWxsX3RhYmxlOwotCXN0YXRpYyBhdG9taWNfdCByZWZzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZWZzKSAhPSAxKQotCQlnb3RvIGVuZDsKIAogCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCiAJCQkJCUZUUkFDRV9TWVNDQUxMX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkgewogCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1lTQ0FMTF9NQVg7IGkrKykgewogCQltZXRhID0gZmluZF9zeXNjYWxsX21ldGEocHN5c19zeXNjYWxsX3RhYmxlW2ldKTsKIAkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOwogCX0KLQlyZXR1cm47CiAKLQkvKiBQYXJhbm9pZDogYXZvaWQgb3ZlcmZsb3cgKi8KLWVuZDoKLQlhdG9taWNfZGVjKCZyZWZzKTsKKwlyZXR1cm4gMDsKIH0KK2FyY2hfaW5pdGNhbGwoYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IDRmZjUwNzIuLmI4ZmE2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTE0Nyw2ICsxNDcsOSBAQAogCiB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogeworCWlmIChQWFNFRyhhZGRyKSA+PSBQMVNFRykKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOworCiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIGdlbmVyaWNfaW9fYmFzZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggN2NiOTMzYi4uZWFjN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEwNiw3ICsxMDcsNyBAQAogc3RhdGljIHVuaW9uIGlycV9jdHggKnNvZnRpcnFfY3R4W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKIAotYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSBfX2lycV9lbnRyeSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKaW5kZXggNTQ4ZjY2MDcuLmNiY2U2MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xMzMsNCArMTM0LDYgQEAKIAogCWlmICghc2hfbXYubXZfbnJfaXJxcykKIAkJc2hfbXYubXZfbnJfaXJxcyA9IE5SX0lSUVM7CisKKwlfX3NldF9pb19wb3J0X2Jhc2UoUDJTRUcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggZjlkNDRmOC4uOTliNGZiNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC01NDksNiArNTQ5LDggQEAKIAogCWlmIChjcHUgPT0gMCkKIAkJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6ICVzXG4iLCBnZXRfc3lzdGVtX3R5cGUoKSk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBjcHUpOwogCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogJXNcbiIsIGluaXRfdXRzbmFtZSgpLT5tYWNoaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCmluZGV4IDhkYmUyNmIuLjQ0NGNjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwpAQCAtODQsNiArODQsMjEgQEAKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyX2k0X2V2ZW4pOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyU0kxMl9pNCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbSk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJOCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTE2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyMCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTI4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMzYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0NCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTUyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k1Nik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNjApOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyX2k0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggNjcyOTcwMy4uM2RiMzc0MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQorCWlmICghKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiAwOwogCiAJaWYgKCF1c2VkX21hdGgoKSkgewpAQCAtMTk5LDcgKzE5OSw3IEBACiAjdW5kZWYgQ09QWQogCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQotCWlmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CiAJCWludCBvd25lZF9mcDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCkBAIC00NzIsNiArNDcyLDcgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoT1JfUjBfUjAsICZmcmFtZS0+cmV0Y29kZVs2XSk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChfX05SX3J0X3NpZ3JldHVybiksICZmcmFtZS0+cmV0Y29kZVs3XSk7CiAJCXJlZ3MtPnByID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVncy0+cHIsIHJlZ3MtPnByICsgc2l6ZW9mKGZyYW1lLT5yZXRjb2RlKSk7CiAJfQogCiAJaWYgKGVycikKQEAgLTQ5Nyw4ICs0OTgsNiBAQAogCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKIAkJIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBmcmFtZSwgcmVncy0+cGMsIHJlZ3MtPnByKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKLQogCXJldHVybiAwOwogCiBnaXZlX3NpZ3NlZ3Y6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDQ0MmQ4ZDQuLjE2MGRiMTAwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMzUsNiArMzUsOCBAQAogewogCXN0cnVjdCBzaF9jcHVpbmZvICpjID0gY3B1X2RhdGEgKyBjcHU7CiAKKwltZW1jcHkoYywgJmJvb3RfY3B1X2RhdGEsIHNpemVvZihzdHJ1Y3Qgc2hfY3B1aW5mbykpOworCiAJYy0+bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCA2YWJhOWFmLi43YTJlZTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KQEAgLTU0LDggKzU1LDggQEAKIC8qIGJpdGZpZWxkOiAxOiB3YXJuIDI6IGZpeHVwIDQ6IHNpZ25hbCAtPiBjb21iaW5hdGlvbnMgMnw0ICYmIDF8Mnw0IGFyZSBub3QKICAgIHZhbGlkISAqLwogc3RhdGljIGludCBzZV91c2VybW9kZSA9IDM7Ci0vKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlICovCi1zdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm4gPSAxOworLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBjb25zdCBjaGFyICpzZV91c2VybW9kZV9hY3Rpb25bXSA9IHsKQEAgLTE1OSwxMiArMTYwLDEyIEBACiAKIAlvb3BzX2VudGVyKCk7CiAKLQljb25zb2xlX3ZlcmJvc2UoKTsKIAlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJY29uc29sZV92ZXJib3NlKCk7CiAJYnVzdF9zcGlubG9ja3MoMSk7CiAKIAlwcmludGsoIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwotCisJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCXByaW50X21vZHVsZXMoKTsKIAlzaG93X3JlZ3MocmVncyk7CiAKQEAgLTE4MCw2ICsxODEsNyBAQAogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCW9vcHNfZXhpdCgpOwogCiAJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKIAkJY3Jhc2hfa2V4ZWMocmVncyk7CkBAIC0xOTAsNyArMTkyLDYgQEAKIAlpZiAocGFuaWNfb25fb29wcykKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwogCi0Jb29wc19leGl0KCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApAQCAtNDUyLDYgKzQ1MywxMiBAQAogCXVfaW50IHJtOwogCWludCByZXQsIGluZGV4OwogCisJLyoKKwkgKiBYWFg6IFdlIGNhbid0IGhhbmRsZSBtaXhlZCAxNi8zMi1iaXQgaW5zdHJ1Y3Rpb25zIHlldAorCSAqLworCWlmIChpbnN0cnVjdGlvbl9zaXplKGluc3RydWN0aW9uKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWluZGV4ID0gKGluc3RydWN0aW9uPj44KSYxNTsJLyogMHgwRjAwICovCiAJcm0gPSByZWdzLT5yZWdzW2luZGV4XTsKIApAQCAtNjE5LDkgKzYyNiw5IEBACiAKIAkJc2VfdXNlciArPSAxOwogCi0jaWZuZGVmIENPTkZJR19DUFVfU0gyQQogCQlzZXRfZnMoVVNFUl9EUyk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh1MTYgKikocmVncy0+cGMgJiB+MSksIDIpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIChpbnNuX3NpemVfdCAqKShyZWdzLT5wYyAmIH4xKSwKKwkJCQkgICBzaXplb2YoaW5zdHJ1Y3Rpb24pKSkgewogCQkJc2V0X2ZzKG9sZGZzKTsKIAkJCWdvdG8gdXNwYWNlX3NlZ3Y7CiAJCX0KQEAgLTYzMyw3ICs2NDAsNiBAQAogCQkJICAgICAgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCiAJCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAogCQkJICAgICAgIGluc3RydWN0aW9uKTsKLSNlbmRpZgogCiAJCWlmIChzZV91c2VybW9kZSAmIDIpCiAJCQlnb3RvIGZpeHVwOwpAQCAtNjczLDEyICs2NzksNiBAQAogCX0gZWxzZSB7CiAJCXNlX3N5cyArPSAxOwogCi0JCWlmIChzZV9rZXJubW9kZV93YXJuKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkgICAgICAgIm9uIGJlaGFsZiBvZiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAotCQkJICAgICAgIGluc3RydWN0aW9uKTsKLQogCQlpZiAocmVncy0+cGMgJiAxKQogCQkJZGllKCJ1bmFsaWduZWQgcHJvZ3JhbSBjb3VudGVyIiwgcmVncywgZXJyb3JfY29kZSk7CiAKQEAgLTY5Miw2ICs2OTIsMTIgQEAKIAkJCWRpZSgiaW5zbiBmYXVsdGluZyBpbiBkb19hZGRyZXNzX2Vycm9yIiwgcmVncywgMCk7CiAJCX0KIAorCQlpZiAoc2Vfa2Vybm1vZGVfd2FybikKKwkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgorCQkJICAgICAgICJvbiBiZWhhbGYgb2YgXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAorCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKKwkJCSAgICAgICBpbnN0cnVjdGlvbik7CisKIAkJaGFuZGxlX3VuYWxpZ25lZF9hY2Nlc3MoaW5zdHJ1Y3Rpb24sIHJlZ3MsCiAJCQkJCSZ1c2VyX21lbV9hY2Nlc3MsIDApOwogCQlzZXRfZnMob2xkZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDY0ZGMxYWQuLjdmN2I1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTIyNyw3ICsyMjcsNyBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIkh1Z2VUTEIgcGFnZSBzaXplIgotCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFICYmIChDUFVfU0g0IHx8IENQVV9TSDUpICYmIE1NVQorCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV8xTUIgaWYgUEFHRV9TSVpFXzY0S0IKIAlkZWZhdWx0IEhVR0VUTEJfUEFHRV9TSVpFXzY0SwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCBiMjQ1M2JiLi5iN2YyMzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgTUFYX0RDQUNIRV9QQUdFUwk2NAkvKiBYWFg6IFR1bmUgZm9yIHdheXMgKi8KICNkZWZpbmUgTUFYX0lDQUNIRV9QQUdFUwkzMgogCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4ZWNfb2Zmc2V0KTsKIAogLyoKQEAgLTQzLDcgKzQzLDcgQEAKICAqIENhbGxlZCBmcm9tIGtlcm5lbC9tb2R1bGUuYzpzeXNfaW5pdF9tb2R1bGUgYW5kIHJvdXRpbmUgZm9yIGEub3V0IGZvcm1hdCwKICAqIHNpZ25hbCBoYW5kbGVyIGNvZGUgYW5kIGtwcm9iZXMgY29kZQogICovCi1zdGF0aWMgdm9pZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmFyZ3MpCiB7CiAJc3RydWN0IGZsdXNoZXJfZGF0YSAqZGF0YSA9IGFyZ3M7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwpAQCAtNzIsNiArNzIsNyBAQAogCiAJZm9yICh2ID0gc3RhcnQ7IHYgPCBlbmQ7IHYgKz0gTDFfQ0FDSEVfQllURVMpIHsKIAkJdW5zaWduZWQgbG9uZyBpY2FjaGVhZGRyOworCQlpbnQgaiwgbjsKIAogCQlfX29jYndiKHYpOwogCkBAIC03OSw4ICs4MCwxMCBAQAogCQkJCWNwdV9kYXRhLT5pY2FjaGUuZW50cnlfbWFzayk7CiAKIAkJLyogQ2xlYXIgaS1jYWNoZSBsaW5lIHZhbGlkLWJpdCAqLworCQluID0gYm9vdF9jcHVfZGF0YS5pY2FjaGUubl9hbGlhc2VzOwogCQlmb3IgKGkgPSAwOyBpIDwgY3B1X2RhdGEtPmljYWNoZS53YXlzOyBpKyspIHsKLQkJCV9fcmF3X3dyaXRlbCgwLCBpY2FjaGVhZGRyKTsKKwkJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspCisJCQkJX19yYXdfd3JpdGVsKDAsIGljYWNoZWFkZHIgKyAoaiAqIFBBR0VfU0laRSkpOwogCQkJaWNhY2hlYWRkciArPSBjcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyOwogCQl9CiAJfQpAQCAtODksOCArOTIsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgZXhlY19vZmZzZXQgPSAwOwogCkBAIC0xMDMsOCArMTA1LDcgQEAKIAkJZXhlY19vZmZzZXQgPSAweDIwMDAwMDAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fZmx1c2hfY2FjaGVfNDA5NihzdGFydCB8IFNIX0NBQ0hFX0FTU09DLAotCQkJICAgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CisJX19mbHVzaF9jYWNoZV9vbmUoc3RhcnQgfCBTSF9DQUNIRV9BU1NPQywgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xMjksOCArMTMwLDggQEAKIAogCQkvKiBMb29wIGFsbCB0aGUgRC1jYWNoZSAqLwogCQluID0gYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IDQwOTYpCi0JCQlmbHVzaF9jYWNoZV80MDk2KGFkZHIsIHBoeXMpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkKKwkJCWZsdXNoX2NhY2hlX29uZShhZGRyLCBwaHlzKTsKIAl9CiAKIAl3bWIoKTsKQEAgLTMxOCwxMSArMzE5LDExIEBACiAJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIEQtY2FjaGUgd2hlbiB3ZSBoYXZlIGFsaWFzICovCiAJaWYgKChhZGRyZXNzXnBoeXMpICYgYWxpYXNfbWFzaykgewogCQkvKiBMb29wIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJCS8qIExvb3AgYW5vdGhlciA0SyBvZiB0aGUgRC1jYWNoZSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHBoeXMgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTMzNyw3ICszMzgsNyBAQAogCQkgKiBrZXJuZWwgaGFzIG5ldmVyIGV4ZWN1dGVkIHRoZSBjb2RlIHRocm91Z2ggaXRzIGlkZW50aXR5CiAJCSAqIHRyYW5zbGF0aW9uLgogCQkgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CkBAIC0zOTMsNyArMzk0LDcgQEAKIH0KIAogLyoqCi0gKiBfX2ZsdXNoX2NhY2hlXzQwOTYKKyAqIF9fZmx1c2hfY2FjaGVfb25lCiAgKgogICogQGFkZHI6ICBhZGRyZXNzIGluIG1lbW9yeSBtYXBwZWQgY2FjaGUgYXJyYXkKICAqIEBwaHlzOiAgUDEgYWRkcmVzcyB0byBmbHVzaCAoaGFzIHRvIG1hdGNoIHRhZ3MgaWYgYWRkciBoYXMgJ0EnIGJpdApAQCAtNDA2LDcgKzQwNyw3IEBACiAgKiBvcGVyYXRpb24gKHB1cmdlL3dyaXRlLWJhY2spIGlzIHNlbGVjdGVkIGJ5IHRoZSBsb3dlciAyIGJpdHMgb2YKICAqICdwaHlzJy4KICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCkKIHsKIAlpbnQgd2F5X2NvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKaW5kZXggMmNhZGVlMi4uMjYwMTkzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCkBAIC03OCw3ICs3OCw3IEBACiAvKgogICogV3JpdGViYWNrJkludmFsaWRhdGUgdGhlIEQtY2FjaGUgb2YgdGhlIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCV9fZmx1c2hfZGNhY2hlX3BhZ2UoUEhZU0FERFIocGFnZV9hZGRyZXNzKHBhZ2UpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggMzVjMzdiNy4uYTJkYzdmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCXJldHVybjsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwZm5fdmFsaWQocGZuKSAmJiBwYWdlX21hcHBpbmcocGFnZSkpIHsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKIAkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKIAkJaWYgKGRpcnR5KSB7CiAJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0yNjUsNiArMjY1LDggQEAKIAogdm9pZCBfX2luaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfZGlzYWJsZWQgPSAhKF9fcmF3X3JlYWRsKENDUikgJiBDQ1JfQ0FDSEVfRU5BQkxFKTsKKwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuaWNhY2hlKTsKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmRjYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5zY2FjaGUpOwpAQCAtMjczLDYgKzI3NSwxMyBAQAogCV9fZmx1c2hfcHVyZ2VfcmVnaW9uCQk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAlfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uCT0gbm9vcF9fZmx1c2hfcmVnaW9uOwogCisJLyoKKwkgKiBObyBmbHVzaGluZyBpcyBuZWNlc3NhcnkgaW4gdGhlIGRpc2FibGVkIGNhY2hlIGNhc2Ugc28gd2UgY2FuCisJICoganVzdCBrZWVwIHRoZSBub29wIGZ1bmN0aW9ucyBpbiBsb2NhbF9mbHVzaF8uLigpIGFuZCBfX2ZsdXNoXy4uKCkKKwkgKi8KKwlpZiAodW5saWtlbHkoY2FjaGVfZGlzYWJsZWQpKQorCQlnb3RvIHNraXA7CisKIAlpZiAoYm9vdF9jcHVfZGF0YS5mYW1pbHkgPT0gQ1BVX0ZBTUlMWV9TSDIpIHsKIAkJZXh0ZXJuIHZvaWQgX193ZWFrIHNoMl9jYWNoZV9pbml0KHZvaWQpOwogCkBAIC0zMTIsNSArMzIxLDYgQEAKIAkJc2g1X2NhY2hlX2luaXQoKTsKIAl9CiAKK3NraXA6CiAJZW1pdF9jYWNoZV9wYXJhbXMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKaW5kZXggYzMyNTA2MS4uYTg2ZWFhOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkgKgogCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCiAJICovCi0JaWYgKHVubGlrZWx5KHNpemUgPj0gMHgxMDAwMDAwKSkgeworCWlmICh1bmxpa2VseShwaHlzX2FkZHIgPj0gUDFTRUcpKSB7CiAJCXVuc2lnbmVkIGxvbmcgbWFwcGVkID0gcG1iX3JlbWFwKGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwgZmxhZ3MpOwogCiAJCWlmIChsaWtlbHkobWFwcGVkKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggYjFhNzE0YS4uYWFkZTMxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMzMsNiArMzMsOCBAQAogCiAjZGVmaW5lIE5SX1BNQl9FTlRSSUVTCTE2CiAKK3N0YXRpYyB2b2lkIF9fcG1iX3VubWFwKHN0cnVjdCBwbWJfZW50cnkgKik7CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1iX2NhY2hlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcG1iX21hcDsKIApAQCAtMjE4LDkgKzIyMCwxMCBAQAogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBtYl9lbnRyeSAqcG1icDsKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwLCAqcG1iZTsKIAl1bnNpZ25lZCBsb25nIHdhbnRlZDsKIAlpbnQgcG1iX2ZsYWdzLCBpOworCWxvbmcgZXJyOwogCiAJLyogQ29udmVydCB0eXBpY2FsIHBncHJvdCB2YWx1ZSB0byB0aGUgUE1CIGVxdWl2YWxlbnQgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkgewpAQCAtMjM2LDIwICsyMzksMjIgQEAKIAogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKSB7Ci0JCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CiAJCWludCByZXQ7CiAKIAkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKIAkJCWNvbnRpbnVlOwogCiAJCXBtYmUgPSBwbWJfYWxsb2ModmFkZHIsIHBoeXMsIHBtYl9mbGFncyB8IHBtYl9zaXplc1tpXS5mbGFnKTsKLQkJaWYgKElTX0VSUihwbWJlKSkKLQkJCXJldHVybiBQVFJfRVJSKHBtYmUpOworCQlpZiAoSVNfRVJSKHBtYmUpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBtYmUpOworCQkJZ290byBvdXQ7CisJCX0KIAogCQlyZXQgPSBzZXRfcG1iX2VudHJ5KHBtYmUpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCXBtYl9mcmVlKHBtYmUpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJcGh5cwkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKQEAgLTI2NCwxMiArMjY5LDI1IEBACiAJCQlwbWJwLT5saW5rID0gcG1iZTsKIAogCQlwbWJwID0gcG1iZTsKKworCQkvKgorCQkgKiBJbnN0ZWFkIG9mIHRyeWluZyBzbWFsbGVyIHNpemVzIG9uIGV2ZXJ5IGl0ZXJhdGlvbgorCQkgKiAoZXZlbiBpZiB3ZSBzdWNjZWVkIGluIGFsbG9jYXRpbmcgc3BhY2UpLCB0cnkgdXNpbmcKKwkJICogcG1iX3NpemVzW2ldLnNpemUgYWdhaW4uCisJCSAqLworCQlpLS07CiAJfQogCiAJaWYgKHNpemUgPj0gMHgxMDAwMDAwKQogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIHdhbnRlZCAtIHNpemU7CisKK291dDoKKwlpZiAocG1icCkKKwkJX19wbWJfdW5tYXAocG1icCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yODMsMTIgKzMwMSwxOSBAQAogCWlmICh1bmxpa2VseSghcG1iZSkpCiAJCXJldHVybjsKIAorCV9fcG1iX3VubWFwKHBtYmUpOworfQorCitzdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorewogCVdBUk5fT04oIXRlc3RfYml0KHBtYmUtPmVudHJ5LCAmcG1iX21hcCkpOwogCiAJZG8gewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJsaW5rID0gcG1iZTsKIAotCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisJCWlmIChwbWJlLT5lbnRyeSAhPSBQTUJfTk9fRU5UUlkpCisJCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisKIAkJcG1iZSA9IHBtYmxpbmstPmxpbms7CiAKIAkJcG1iX2ZyZWUocG1ibGluayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggOTdmY2E0Ni4uMDVlZjUzOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogCXNlbGVjdCBSVENfQ0xBU1MKIAlzZWxlY3QgUlRDX0RSVl9NNDhUNTkKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCkBAIC00OCw2ICs0OSw3IEBACiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKIAogY29uZmlnIEFSQ0hfREVGQ09ORklHCiAJc3RyaW5nCkBAIC0xMDIsNiArMTA0LDkgQEAKIGNvbmZpZyBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksKIAlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKIAorY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CisKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlib29sCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCmluZGV4IDUyYTQyMDguLmJiZjkxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCkBAIC02MSwxNCArNjEsMTQgQEAKIHVuc2lnbmVkIGxvbmcgbGFzdGZyZWxubzsKIGJ0Zml4dXAgKmxhc3RmOwogCi12b2lkIGZhdGFsKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci12b2lkIGZhdGFsKHZvaWQpCitzdGF0aWMgdm9pZCBmYXRhbCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworc3RhdGljIHZvaWQgZmF0YWwodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIk1hbGZvcm1lZCBvdXRwdXQgZnJvbSBvYmpkdW1wXG4lc1xuIiwgYnVmZmVyKTsKIAlleGl0KDEpOwogfQogCi1idGZpeHVwICpmaW5kKGludCB0eXBlLCBjaGFyICpuYW1lKQorc3RhdGljIGJ0Zml4dXAgKmZpbmQoaW50IHR5cGUsIGNoYXIgKm5hbWUpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgewpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiBhcnJheSArIGxhc3QgLSAxOwogfQogCi12b2lkIHNldF9tb2RlIChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBzZXRfbW9kZSAoY2hhciAqYnVmZmVyKQogewogICAJZm9yIChtb2RlID0gMDs7IG1vZGUrKykKIAkJaWYgKGJ1ZmZlclttb2RlXSA8ICcwJyB8fCBidWZmZXJbbW9kZV0gPiAnOScpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKaW5kZXggZThkYzlhZC4uYWM5NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYwpAQCAtMzUsMTcgKzM1LDE3IEBACiAgKiBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmx5LgogICovCiAKLXVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQogewogCXJldHVybiAocFswXSA8PCA4KSB8IHBbMV07CiB9CiAKLXVuc2lnbmVkIGludCBsZDQoY2hhciAqcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGQ0KGNoYXIgKnApCiB7CiAJcmV0dXJuIChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKIH0KIAotdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCitzdGF0aWMgdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCiB7CiAJcFswXSA9IHggPj4gMjQ7CiAJcFsxXSA9IHggPj4gMTY7CkBAIC01Myw3ICs1Myw3IEBACiAJcFszXSA9IHg7CiB9CiAKLXZvaWQgdXNhZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJLyogZnNfaW1nLmd6IGlzIGFuIGltYWdlIG9mIGluaXRpYWwgcmFtZGlzay4gKi8KIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBwaWdneWJhY2sgdm1saW51eC5hb3V0IFN5c3RlbS5tYXAgZnNfaW1nLmd6XG4iKTsKQEAgLTYxLDcgKzYxLDcgQEAKIAlleGl0KDEpOwogfQogCi12b2lkIGRpZShjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBkaWUoY2hhciAqc3RyKQogewogCXBlcnJvciAoc3RyKTsKIAlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCmluZGV4IGM2M2ZkMWIuLmEyNmE2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIC8qIE5vdGU6IHJ1biB0aGlzIG9uIGFuIGEub3V0IGtlcm5lbCAodXNlIGVsZnRvYW91dCBmb3IgaXQpLCBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmxseQogICAgdXNhZ2U6IHBpZ2d5YmFjayB2bWxpbnV4IFN5c3RlbS5tYXAgdGFpbCwgd2hlcmUgdGFpbCBpcyBnemlwcGVkIGZzIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sgKi8KIAotdm9pZCBkaWUoY2hhciAqc3RyKQorc3RhdGljIHZvaWQgZGllKGNoYXIgKnN0cikKIHsKIAlwZXJyb3IgKHN0cik7CiAJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKaW5kZXggNGY2M2VkOC4uMTYyMDA3NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKQEAgLTcsMTcgKzcsNyBAQAogI2lmbmRlZiBfX1NQQVJDX0hBUkRJUlFfSAogI2RlZmluZSBfX1NQQVJDX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovIC8qIFhYWCBQMyBJcyBpdD8gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQogI2RlZmluZSBIQVJESVJRX0JJVFMgICAgOAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KIAogI2VuZGlmIC8qIF9fU1BBUkNfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaAppbmRleCBlYTQzMDU3Li5jYmY0ODAxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKQEAgLTYsMTAgKzYsMTAgQEAKICNpZm5kZWYgX1NQQVJDX0lSUV9ICiAjZGVmaW5lIF9TUEFSQ19JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KICNkZWZpbmUgTlJfSVJRUyAgICAxNgogCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAKIGV4dGVybiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggMGZmOTJmYS4uZjNjYjc5MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTQxLDggKzQxLDggQEAKICNkZWZpbmUgTE9XX09CUF9BRERSRVNTCQlfQUMoMHgwMDAwMDAwMGYwMDAwMDAwLFVMKQogI2RlZmluZSBISV9PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKLSNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCi0jZGVmaW5lIFZNRU1NQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMTAwMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNRU1NQVBfQkFTRQkJX0FDKDB4MDAwMDAxMDAwMDAwMDAwMCxVTCkKIAogI2RlZmluZSB2bWVtbWFwCQkJKChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfQkFTRSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggMjVlODQ4Zi4uZDQ3YTk4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC02Myw2ICs2MywxMCBAQAogCQkJICAgICA6IDogOiAibWVtb3J5Iik7IFwKIH0gd2hpbGUgKDApCiAKKy8qIFRoZSBrZXJuZWwgYWx3YXlzIGV4ZWN1dGVzIGluIFRTTyBtZW1vcnkgbW9kZWwgdGhlc2UgZGF5cywKKyAqIGFuZCBmdXJ0aGVybW9yZSBtb3N0IHNwYXJjNjQgY2hpcHMgaW1wbGVtZW50IG1vcmUgc3RyaW5nZW50CisgKiBtZW1vcnkgb3JkZXJpbmcgdGhhbiByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWNhdGlvbnMuCisgKi8KICNkZWZpbmUgbWIoKQltZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCIpCiAjZGVmaW5lIHJtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCiAjZGVmaW5lIHdtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAppbmRleCA2Y2RiZjdlLi45ZDgzZDNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKQEAgLTI1OCw4ICsyNTgsNiBAQAogc3RhdGljIGlubGluZSB1MzIgdmlvX2RyaW5nX2F2YWlsKHN0cnVjdCB2aW9fZHJpbmdfc3RhdGUgKmRyLAogCQkJCSAgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKIHsKLQlNQVlCRV9CVUlMRF9CVUdfT04oIWlzX3Bvd2VyX29mXzIocmluZ19zaXplKSk7Ci0KIAlyZXR1cm4gKGRyLT5wZW5kaW5nIC0KIAkJKChkci0+cHJvZCAtIGRyLT5jb25zKSAmIChyaW5nX3NpemUgLSAxKSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TCmluZGV4IDNlYTZlOGMuLjFkMzYxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMKQEAgLTI4MCw4ICsyODAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCiAJLyogRG8gbm90IHVzZSB0aGUgVFNCIGZvciB2bWVtbWFwLiAgKi8KLQltb3YJCShWTUVNTUFQX0JBU0UgPj4gMjQpLCAlZzUKLQlzbGx4CQklZzUsIDI0LCAlZzUKKwltb3YJCShWTUVNTUFQX0JBU0UgPj4gNDApLCAlZzUKKwlzbGx4CQklZzUsIDQwLCAlZzUKIAljbXAJCSVnNCwlZzUKIAliZ2V1LHBuCQkleGNjLCBrdm1hcF92bWVtbWFwCiAJIG5vcApAQCAtMjkzLDggKzI5Myw4IEBACiAJc2V0aGkJCSVoaShNT0RVTEVTX1ZBRERSKSwgJWc1CiAJY21wCQklZzQsICVnNQogCWJsdSxwbgkJJXhjYywga3ZtYXBfZHRsYl9sb25ncGF0aAotCSBtb3YJCShWTUFMTE9DX0VORCA+PiAyNCksICVnNQotCXNsbHgJCSVnNSwgMjQsICVnNQorCSBtb3YJCShWTUFMTE9DX0VORCA+PiA0MCksICVnNQorCXNsbHgJCSVnNSwgNDAsICVnNQogCWNtcAkJJWc0LCAlZzUKIAliZ2V1LHBuCQkleGNjLCBrdm1hcF9kdGxiX2xvbmdwYXRoCiAJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwppbmRleCBhZGY1ZjI3Li5jYjNjNzJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwpAQCAtMTI0MiwxMyArMTI0MiwxMyBAQAogCXNucHJpbnRmKGxwLT50eF9pcnFfbmFtZSwgTERDX0lSUV9OQU1FX01BWCwgIiVzIFRYIiwgbmFtZSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnJ4X2lycSwgbGRjX3J4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCQkJICBscC0+cnhfaXJxX25hbWUsIGxwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcmVxdWVzdF9pcnEobHAtPmNmZy50eF9pcnEsIGxkY190eCwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSAgbHAtPnR4X2lycV9uYW1lLCBscCk7CiAJaWYgKGVycikgewogCQlmcmVlX2lycShscC0+Y2ZnLnJ4X2lycSwgbHApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDJkNmExYjEuLmZhNTkzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTU2LDcgKzU2LDggQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW01BWF9IV0VWRU5UU107CiAJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoTUFYX0hXRVZFTlRTKV07CiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdFVkVOVFMpXTsKLQlpbnQgZW5hYmxlZDsKKwl1NjQJCQlwY3I7CisJaW50CQkJZW5hYmxlZDsKIH07CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cykgPSB7IC5lbmFibGVkID0gMSwgfTsKIApAQCAtNjgsOCArNjksMzAgQEAKICNkZWZpbmUgUElDX0xPV0VSCTB4MDIKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZXZlbnRfZW5jb2RlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqcG1hcCkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBwbWFwLT5lbmNvZGluZyA8PCAxNikgfCBwbWFwLT5waWNfbWFzazsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9kZWNvZGUodW5zaWduZWQgbG9uZyB2YWwsIHUxNiAqZW5jLCB1OCAqbXNrKQoreworCSptc2sgPSB2YWwgJiAweGZmOworCSplbmMgPSB2YWwgPj4gMTY7Cit9CisKKyNkZWZpbmUgQyh4KSBQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjeAorCisjZGVmaW5lIENBQ0hFX09QX1VOU1VQUE9SVEVECTB4ZmZmZQorI2RlZmluZSBDQUNIRV9PUF9OT05TRU5TRQkweGZmZmYKKwordHlwZWRlZiBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgY2FjaGVfbWFwX3QKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOworCiBzdHJ1Y3Qgc3BhcmNfcG11IHsKIAljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAJKigqZXZlbnRfbWFwKShpbnQpOworCWNvbnN0IGNhY2hlX21hcF90CQkqY2FjaGVfbWFwOwogCWludAkJCQltYXhfZXZlbnRzOwogCWludAkJCQl1cHBlcl9zaGlmdDsKIAlpbnQJCQkJbG93ZXJfc2hpZnQ7CkBAIC04MCwyMSArMTAzLDEwOSBAQAogCWludAkJCQlsb3dlcl9ub3A7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CiAJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDAwMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCiAJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMDAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMHgwMDA5LCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAwMDksIFBJQ19VUFBFUiB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqdWx0cmEzaV9ldmVudF9tYXAoaW50IGV2ZW50X2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqdWx0cmEzX2V2ZW50X21hcChpbnQgZXZlbnRfaWQpCiB7Ci0JcmV0dXJuICZ1bHRyYTNpX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKKwlyZXR1cm4gJnVsdHJhM19wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IHVsdHJhM2lfcG11ID0gewotCS5ldmVudF9tYXAJPSB1bHRyYTNpX2V2ZW50X21hcCwKLQkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUodWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcCksCitzdGF0aWMgY29uc3QgY2FjaGVfbWFwX3QgdWx0cmEzX2NhY2hlX21hcCA9IHsKK1tDKEwxRCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDA5LCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDksIFBJQ19VUFBFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwYSwgUElDX0xPV0VSIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MGEsIFBJQ19VUFBFUiB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTDFJKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDksIFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwOSwgUElDX1VQUEVSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKExMKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MGMsIFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYywgUElDX1VQUEVSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDBjLCBQSUNfTE9XRVIgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYywgUElDX1VQUEVSIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhEVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MTIsIFBJQ19VUFBFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhJVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MTEsIFBJQ19VUFBFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhCUFUpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNfcG11ID0geworCS5ldmVudF9tYXAJPSB1bHRyYTNfZXZlbnRfbWFwLAorCS5jYWNoZV9tYXAJPSAmdWx0cmEzX2NhY2hlX21hcCwKKwkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUodWx0cmEzX3BlcmZtb25fZXZlbnRfbWFwKSwKIAkudXBwZXJfc2hpZnQJPSAxMSwKIAkubG93ZXJfc2hpZnQJPSA0LAogCS5ldmVudF9tYXNrCT0gMHgzZiwKQEAgLTEwMiw2ICsyMTMsMTIxIEBACiAJLmxvd2VyX25vcAk9IDB4MTQsCiB9OwogCisvKiBOaWFnYXJhMSBpcyB2ZXJ5IGxpbWl0ZWQuICBUaGUgdXBwZXIgUElDIGlzIGhhcmQtbG9ja2VkIHRvIGNvdW50CisgKiBvbmx5IGluc3RydWN0aW9ucywgc28gaXQgaXMgZnJlZSBydW5uaW5nIHdoaWNoIGNyZWF0ZXMgYWxsIGtpbmRzIG9mCisgKiBwcm9ibGVtcy4gIFNvbWUgaGFyZHdhcmUgZGVzaWducyBtYWtlIG9uZSB3b25kZXIgaWYgdGhlIGNyZWF0b3IKKyAqIGV2ZW4gbG9va2VkIGF0IGhvdyB0aGlzIHN0dWZmIGdldHMgdXNlZCBieSBzb2Z0d2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwLCBQSUNfVVBQRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdID0geyAweDAwLCBQSUNfVVBQRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMCwgUElDX05PTkUgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAzLCBQSUNfTE9XRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKm5pYWdhcmExX2V2ZW50X21hcChpbnQgZXZlbnRfaWQpCit7CisJcmV0dXJuICZuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07Cit9CisKK3N0YXRpYyBjb25zdCBjYWNoZV9tYXBfdCBuaWFnYXJhMV9jYWNoZV9tYXAgPSB7CitbQyhMMUQpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMywgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzLCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMMUkpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMCwgUElDX1VQUEVSIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDIsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMTCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA3LCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDcsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKERUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNSwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKElUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNCwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEJQVSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmExX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gbmlhZ2FyYTFfZXZlbnRfbWFwLAorCS5jYWNoZV9tYXAJPSAmbmlhZ2FyYTFfY2FjaGVfbWFwLAorCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcCksCisJLnVwcGVyX3NoaWZ0CT0gMCwKKwkubG93ZXJfc2hpZnQJPSA0LAorCS5ldmVudF9tYXNrCT0gMHg3LAorCS51cHBlcl9ub3AJPSAweDAsCisJLmxvd2VyX25vcAk9IDB4MCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgbmlhZ2FyYTJfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKIAlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LApAQCAtMTE2LDE0ICszNDIsMTAyIEBACiAJcmV0dXJuICZuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CiB9CiAKK3N0YXRpYyBjb25zdCBjYWNoZV9tYXBfdCBuaWFnYXJhMl9jYWNoZV9tYXAgPSB7CitbQyhMMUQpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjA4LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMwMiwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyMTAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMMUkpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKExMKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMzAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjEwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMyMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoRFRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDBiMDgsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhJVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4YjA0LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoQlBVKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgbmlhZ2FyYTJfcG11ID0gewogCS5ldmVudF9tYXAJPSBuaWFnYXJhMl9ldmVudF9tYXAsCisJLmNhY2hlX21hcAk9ICZuaWFnYXJhMl9jYWNoZV9tYXAsCiAJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKG5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwKSwKIAkudXBwZXJfc2hpZnQJPSAxOSwKIAkubG93ZXJfc2hpZnQJPSA2LAogCS5ldmVudF9tYXNrCT0gMHhmZmYsCiAJLmh2X2JpdAkJPSAweDgsCi0JLmlycV9iaXQJPSAweDAzLAorCS5pcnFfYml0CT0gMHgzMCwKIAkudXBwZXJfbm9wCT0gMHgyMjAsCiAJLmxvd2VyX25vcAk9IDB4MjIwLAogfTsKQEAgLTE1MSwyMyArNDY1LDMwIEBACiAJCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKLQkJCQkJICAgIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAl1NjQgdmFsLCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKLQlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgaHdjLT5jb25maWcpOworCXZhbCA9IGNwdWMtPnBjcjsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGh3Yy0+Y29uZmlnOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAotCQkJCQkgICAgIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJdTY0IG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOwogCXU2NCBub3AgPSBub3BfZm9yX2luZGV4KGlkeCk7Ci0JdTY0IHZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl1NjQgdmFsOwogCi0JcGNyX29wcy0+d3JpdGUoKHZhbCAmIH5tYXNrKSB8IG5vcCk7CisJdmFsID0gY3B1Yy0+cGNyOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gbm9wOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKQEAgLTE4Miw3ICs1MDMsNyBAQAogCWNwdWMtPmVuYWJsZWQgPSAxOwogCWJhcnJpZXIoKTsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgPSBjcHVjLT5wY3I7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXRVZFTlRTOyBpKyspIHsKIAkJc3RydWN0IHBlcmZfZXZlbnQgKmNwID0gY3B1Yy0+ZXZlbnRzW2ldOwpAQCAtMTk0LDcgKzUxNSw5IEBACiAJCXZhbCB8PSBod2MtPmNvbmZpZ19iYXNlOwogCX0KIAotCXBjcl9vcHMtPndyaXRlKHZhbCk7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAogdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKQEAgLTIwNywxMCArNTMwLDEyIEBACiAKIAljcHVjLT5lbmFibGVkID0gMDsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgPSBjcHVjLT5wY3I7CiAJdmFsICY9IH4oUENSX1VUUkFDRSB8IFBDUl9TVFJBQ0UgfAogCQkgc3BhcmNfcG11LT5odl9iaXQgfCBzcGFyY19wbXUtPmlycV9iaXQpOwotCXBjcl9vcHMtPndyaXRlKHZhbCk7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAogc3RhdGljIHUzMiByZWFkX3BtYyhpbnQgaWR4KQpAQCAtMjQyLDcgKzU2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCisJCQkJICAgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwpAQCAtMjgyLDE5ICs2MDcsMTkgQEAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAogCWNwdWMtPmV2ZW50c1tpZHhdID0gZXZlbnQ7CiAJc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKIAogCXNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOwotCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoY3B1YywgaHdjLCBpZHgpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU2NCBzcGFyY19wZXJmX2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCi0JCQkJICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorCQkJCSAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJaW50IHNoaWZ0ID0gNjQgLSAzMjsKIAl1NjQgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7CkBAIC0zMjQsNyArNjQ5LDcgQEAKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7Ci0Jc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAogCWJhcnJpZXIoKTsKIApAQCAtMzM4LDE4ICs2NjMsMjkgQEAKIHN0YXRpYyB2b2lkIHNwYXJjX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwogCXNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKIH0KIAogc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogeworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3BhcmNfcG11X2VuYWJsZV9ldmVudChod2MsIGh3Yy0+aWR4KTsKKworCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoY3B1YywgaHdjLCBod2MtPmlkeCk7CiB9CiAKIHN0YXRpYyBhdG9taWNfdCBhY3RpdmVfZXZlbnRzID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKIAorc3RhdGljIHZvaWQgcGVyZl9zdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCXN0b3Bfbm1pX3dhdGNoZG9nKE5VTEwpOworCWNwdWMtPnBjciA9IHBjcl9vcHMtPnJlYWQoKTsKK30KKwogdm9pZCBwZXJmX2V2ZW50X2dyYWJfcG1jKHZvaWQpCiB7CiAJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmFjdGl2ZV9ldmVudHMpKQpAQCAtMzU4LDcgKzY5NCw3IEBACiAJbXV0ZXhfbG9jaygmcG1jX2dyYWJfbXV0ZXgpOwogCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykgPT0gMCkgewogCQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpID4gMCkgewotCQkJb25fZWFjaF9jcHUoc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJb25fZWFjaF9jcHUocGVyZl9zdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAJCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOwogCQl9CiAJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOwpAQCAtMzc1LDMwICs3MTEsMTYwIEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpzcGFyY19tYXBfY2FjaGVfZXZlbnQodTY0IGNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZSwgY2FjaGVfb3AsIGNhY2hlX3Jlc3VsdDsKKwljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnBtYXA7CisKKwlpZiAoIXNwYXJjX3BtdS0+Y2FjaGVfbWFwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCWNhY2hlX3R5cGUgPSAoY29uZmlnID4+ICAwKSAmIDB4ZmY7CisJaWYgKGNhY2hlX3R5cGUgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9NQVgpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJY2FjaGVfb3AgPSAoY29uZmlnID4+ICA4KSAmIDB4ZmY7CisJaWYgKGNhY2hlX29wID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWNhY2hlX3Jlc3VsdCA9IChjb25maWcgPj4gMTYpICYgMHhmZjsKKwlpZiAoY2FjaGVfcmVzdWx0ID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlwbWFwID0gJigoKnNwYXJjX3BtdS0+Y2FjaGVfbWFwKVtjYWNoZV90eXBlXVtjYWNoZV9vcF1bY2FjaGVfcmVzdWx0XSk7CisKKwlpZiAocG1hcC0+ZW5jb2RpbmcgPT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJaWYgKHBtYXAtPmVuY29kaW5nID09IENBQ0hFX09QX05PTlNFTlNFKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXJldHVybiBwbWFwOworfQorCiBzdGF0aWMgdm9pZCBod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXBlcmZfZXZlbnRfcmVsZWFzZV9wbWMoKTsKIH0KIAorLyogTWFrZSBzdXJlIGFsbCBldmVudHMgY2FuIGJlIHNjaGVkdWxlZCBpbnRvIHRoZSBoYXJkd2FyZSBhdAorICogdGhlIHNhbWUgdGltZS4gIFRoaXMgaXMgc2ltcGxpZmllZCBieSB0aGUgZmFjdCB0aGF0IHdlIG9ubHkKKyAqIG5lZWQgdG8gc3VwcG9ydCAyIHNpbXVsdGFuZW91cyBIVyBldmVudHMuCisgKi8KK3N0YXRpYyBpbnQgc3BhcmNfY2hlY2tfY29uc3RyYWludHModW5zaWduZWQgbG9uZyAqZXZlbnRzLCBpbnQgbl9ldikKK3sKKwlpZiAobl9ldiA8PSBwZXJmX21heF9ldmVudHMpIHsKKwkJdTggbXNrMSwgbXNrMjsKKwkJdTE2IGR1bW15OworCisJCWlmIChuX2V2ID09IDEpCisJCQlyZXR1cm4gMDsKKwkJQlVHX09OKG5fZXYgIT0gMik7CisJCXBlcmZfZXZlbnRfZGVjb2RlKGV2ZW50c1swXSwgJmR1bW15LCAmbXNrMSk7CisJCXBlcmZfZXZlbnRfZGVjb2RlKGV2ZW50c1sxXSwgJmR1bW15LCAmbXNrMik7CisKKwkJLyogSWYgYm90aCBldmVudHMgY2FuIGdvIG9uIGFueSBjb3VudGVyLCBPSy4gICovCisJCWlmIChtc2sxID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpICYmCisJCSAgICBtc2syID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgb25lIGV2ZW50IGlzIGxpbWl0ZWQgdG8gYSBzcGVjaWZpYyBjb3VudGVyLAorCQkgKiBhbmQgdGhlIG90aGVyIGNhbiBnbyBvbiBib3RoLCBPSy4KKwkJICovCisJCWlmICgobXNrMSA9PSBQSUNfVVBQRVIgfHwgbXNrMSA9PSBQSUNfTE9XRVIpICYmCisJCSAgICBtc2syID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisJCWlmICgobXNrMiA9PSBQSUNfVVBQRVIgfHwgbXNrMiA9PSBQSUNfTE9XRVIpICYmCisJCSAgICBtc2sxID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgdGhlIGV2ZW50cyBhcmUgZml4ZWQgdG8gZGlmZmVyZW50IGNvdW50ZXJzLCBPSy4gICovCisJCWlmICgobXNrMSA9PSBQSUNfVVBQRVIgJiYgbXNrMiA9PSBQSUNfTE9XRVIpIHx8CisJCSAgICAobXNrMSA9PSBQSUNfTE9XRVIgJiYgbXNrMiA9PSBQSUNfVVBQRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogT3RoZXJ3aXNlLCB0aGVyZSBpcyBhIGNvbmZsaWN0LiAgKi8KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZXhjbHVkZXMoc3RydWN0IHBlcmZfZXZlbnQgKipldnRzLCBpbnQgbl9wcmV2LCBpbnQgbl9uZXcpCit7CisJaW50IGV1ID0gMCwgZWsgPSAwLCBlaCA9IDA7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBpLCBuLCBmaXJzdDsKKworCW4gPSBuX3ByZXYgKyBuX25ldzsKKwlpZiAobiA8PSAxKQorCQlyZXR1cm4gMDsKKworCWZpcnN0ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWV2ZW50ID0gZXZ0c1tpXTsKKwkJaWYgKGZpcnN0KSB7CisJCQlldSA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcjsKKwkJCWVrID0gZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWw7CisJCQllaCA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHY7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZSBpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICE9IGV1IHx8CisJCQkgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCAhPSBlayB8fAorCQkJICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9odiAhPSBlaCkgeworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXAsIGludCBtYXhfY291bnQsCisJCQkgIHN0cnVjdCBwZXJmX2V2ZW50ICpldnRzW10sIHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJaW50IG4gPSAwOworCisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChncm91cCkpIHsKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC0xOworCQlldnRzW25dID0gZ3JvdXA7CisJCWV2ZW50c1tuKytdID0gZ3JvdXAtPmh3LmV2ZW50X2Jhc2U7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSAmJgorCQkgICAgZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7CisJCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQkJcmV0dXJuIC0xOworCQkJZXZ0c1tuXSA9IGV2ZW50OworCQkJZXZlbnRzW24rK10gPSBldmVudC0+aHcuZXZlbnRfYmFzZTsKKwkJfQorCX0KKwlyZXR1cm4gbjsKK30KKwogc3RhdGljIGludCBfX2h3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZldmVudC0+YXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZ0c1tNQVhfSFdFVkVOVFNdOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXVuc2lnbmVkIGxvbmcgZXZlbnRzW01BWF9IV0VWRU5UU107CiAJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOwogCXU2NCBlbmM7CisJaW50IG47CiAKIAlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoYXR0ci0+dHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpCisJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hBUkRXQVJFKSB7CisJCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOworCX0gZWxzZSBpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUpIHsKKwkJcG1hcCA9IHNwYXJjX21hcF9jYWNoZV9ldmVudChhdHRyLT5jb25maWcpOworCQlpZiAoSVNfRVJSKHBtYXApKQorCQkJcmV0dXJuIFBUUl9FUlIocG1hcCk7CisJfSBlbHNlCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBlcmZfZXZlbnRfZ3JhYl9wbWMoKTsKLQlldmVudC0+ZGVzdHJveSA9IGh3X3BlcmZfZXZlbnRfZGVzdHJveTsKLQogCS8qIFdlIHNhdmUgdGhlIGVuYWJsZSBiaXRzIGluIHRoZSBjb25maWdfYmFzZS4gIFNvIHRvCiAJICogdHVybiBvZmYgc2FtcGxpbmcganVzdCB3cml0ZSAnY29uZmlnJywgYW5kIHRvIGVuYWJsZQogCSAqIHRoaW5ncyB3cml0ZSAnY29uZmlnIHwgY29uZmlnX2Jhc2UnLgpAQCAtNDExLDE1ICs4NzcsMzkgQEAKIAlpZiAoIWF0dHItPmV4Y2x1ZGVfaHYpCiAJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gc3BhcmNfcG11LT5odl9iaXQ7CiAKKwlod2MtPmV2ZW50X2Jhc2UgPSBwZXJmX2V2ZW50X2VuY29kZShwbWFwKTsKKworCWVuYyA9IHBtYXAtPmVuY29kaW5nOworCisJbiA9IDA7CisJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpIHsKKwkJbiA9IGNvbGxlY3RfZXZlbnRzKGV2ZW50LT5ncm91cF9sZWFkZXIsCisJCQkJICAgcGVyZl9tYXhfZXZlbnRzIC0gMSwKKwkJCQkgICBldnRzLCBldmVudHMpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXZlbnRzW25dID0gaHdjLT5ldmVudF9iYXNlOworCWV2dHNbbl0gPSBldmVudDsKKworCWlmIChjaGVja19leGNsdWRlcyhldnRzLCBuLCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3BhcmNfY2hlY2tfY29uc3RyYWludHMoZXZlbnRzLCBuICsgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVHJ5IHRvIGRvIGFsbCBlcnJvciBjaGVja2luZyBiZWZvcmUgdGhpcyBwb2ludCwgYXMgdW53aW5kaW5nCisJICogc3RhdGUgYWZ0ZXIgZ3JhYmJpbmcgdGhlIFBNQyBpcyBkaWZmaWN1bHQuCisJICovCisJcGVyZl9ldmVudF9ncmFiX3BtYygpOworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCiAJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKIAkJaHdjLT5zYW1wbGVfcGVyaW9kID0gTUFYX1BFUklPRDsKIAkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKIAkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwogCX0KIAotCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOwotCi0JZW5jID0gcG1hcC0+ZW5jb2Rpbmc7CiAJaWYgKHBtYXAtPnBpY19tYXNrICYgUElDX1VQUEVSKSB7CiAJCWh3Yy0+aWR4ID0gUElDX1VQUEVSX0lOREVYOwogCQllbmMgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CkBAIC00NzIsNyArOTYyLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9ldmVudF9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpfX2FyZ3MpCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQogewogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwpAQCAtNTEzLDcgKzEwMDMsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CkBAIC01MjUsOCArMTAxNSwxNSBAQAogCiBzdGF0aWMgYm9vbCBfX2luaXQgc3VwcG9ydGVkX3BtdSh2b2lkKQogewotCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzaSIpKSB7Ci0JCXNwYXJjX3BtdSA9ICZ1bHRyYTNpX3BtdTsKKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhMyIpIHx8CisJICAgICFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTMrIikgfHwKKwkgICAgIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhM2kiKSB8fAorCSAgICAhc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmE0KyIpKSB7CisJCXNwYXJjX3BtdSA9ICZ1bHRyYTNfcG11OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhIikpIHsKKwkJc3BhcmNfcG11ID0gJm5pYWdhcmExX3BtdTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAibmlhZ2FyYTIiKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKaW5kZXggMTM4OTEwYy4uZDgwYTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC03OSw2ICs3OSw3IEBACiAKIAllcnIgPSAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAl3cml0ZV9sb2NrKCZkZXZ0cmVlX2xvY2spOwogCXByZXZwID0gJmRwLT5wcm9wZXJ0aWVzOwogCXdoaWxlICgqcHJldnApIHsKQEAgLTg4LDkgKzg5LDcgQEAKIAkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKIAkJCWludCByZXQ7CiAKLQkJCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAJCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPm5vZGUsIG5hbWUsIHZhbCwgbGVuKTsKLQkJCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWlmIChyZXQgPj0gMCkgewpAQCAtMTA5LDYgKzEwOCw3IEBACiAJCXByZXZwID0gJigqcHJldnApLT5uZXh0OwogCX0KIAl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCiAJLyogWFhYIFVwYXRlIHByb2NmcyBpZiBuZWNlc3NhcnkuLi4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBmZjY4MzczLi5hYTM2MjIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTQyMCw3ICsxNDIwLDcgQEAKIAlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQorc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKIHsKIAlpZiAoY3B1X3RvX25vZGUoZnJvbSkgPT0gY3B1X3RvX25vZGUodG8pKQogCQlyZXR1cm4gTE9DQUxfRElTVEFOQ0U7CkBAIC0xNDI4LDE4ICsxNDI4LDUzIEBACiAJCXJldHVybiBSRU1PVEVfRElTVEFOQ0U7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCXBtZF90ICpuZXc7CisKKwkJbmV3ID0gX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgbmV3KTsKKwl9CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgeworCQlwdGVfdCAqbmV3OworCisJCW5ldyA9IF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBuZXcpOworCX0KK30KKwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZGVsdGE7CiAJdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVJTlZBTDsKIAotCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCi0JCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCi0JCQkJICAgIHBjcHVfY3B1X2Rpc3RhbmNlLCBwY3B1X2FsbG9jX2Jvb3RtZW0sCi0JCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKLQlpZiAocmMpCi0JCXBhbmljKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJzdCBjaHVuayAoJWQpIiwgcmMpOworCWlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHsKKwkJcmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKKwkJCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCisJCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKKwkJCQkJICAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKKwkJaWYgKHJjKQorCQkJcHJfd2FybmluZygiUEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksICIKKwkJCQkgICAiZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKKwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOworCX0KKwlpZiAocmMgPCAwKQorCQlyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCisJCQkJCSAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgcGNwdV9mcmVlX2Jvb3RtZW0sCisJCQkJCSAgIHBjcHVfcG9wdWxhdGVfcHRlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiY2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CiAKIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKaW5kZXggYjk1NmZkNy4uZDIzMWNiZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwpAQCAtNjE3LDcgKzYxNyw3IEBACiAJCXJzMiA9IGZwc19yZWd2YWwoZiwgUlMyKGluc24pKTsKIAogCQlyZF92YWwgPSAwOwotCQlzcmMyID0gKHJzMiA+PiAob3BmID09IEZNVUw4eDE2QVVfT1BGKSA/IDE2IDogMCk7CisJCXNyYzIgPSByczIgPj4gKG9wZiA9PSBGTVVMOHgxNkFVX09QRiA/IDE2IDogMCk7CiAJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCA0OyBieXRlKyspIHsKIAkJCXUxNiBzcmMxID0gKHJzMSA+PiAoYnl0ZSAqIDgpKSAmIDB4MDBmZjsKIAkJCXUzMiBwcm9kID0gc3JjMSAqIHNyYzI7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IGE3MGE1ZTEuLjE4ODZkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwYWdlICYmIHBhZ2VfbWFwcGluZyhwYWdlKSkgeworCWlmIChwYWdlKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGdfZmxhZ3M7CiAKIAkJcGdfZmxhZ3MgPSBwYWdlLT5mbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKaW5kZXggZjk3Y2I4Yi4uZjkwMjRiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CS8qIGZvciBIWiAqLwogIAogI2lmZGVmIENPTkZJR19TUEFSQzY0CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCmluZGV4IDE0YTEwMmUuLmNmOGE5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImxpbnV4L2lycXJldHVybi5oIgogI2luY2x1ZGUgImxpbnV4L2tkLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJjaGFuX2tlcm4uaCIKICNpbmNsdWRlICJpcnFfa2Vybi5oIgogI2luY2x1ZGUgImlycV91c2VyLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKaW5kZXggMTk5MzAwOC4uNGViYzhhMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJsaW51eC9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaW51eC9saXN0LmgiCiAjaW5jbHVkZSAibGludXgvbXV0ZXguaCIKKyNpbmNsdWRlICJsaW51eC93b3JrcXVldWUuaCIKICNpbmNsdWRlICJhc20vYXRvbWljLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCmluZGV4IDM3ZWNjNTUuLmFjNTViOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCkBAIC0xNiwxMSArMTYsNyBAQAogCiAgIC4gPSBBTElHTig0MDk2KTsKICAgLm5vdGUgOiB7ICooLm5vdGUuKikgfQotICBfX2V4X3RhYmxlIDogewotCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JKihfX2V4X3RhYmxlKQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLSAgfQorICBFWENFUFRJT05fVEFCTEUoMCkKIAogICBCVUdfVEFCTEUKIApAQCAtNDMsMjggKzM5LDE3IEBACiAgIH0KIAkKICAgLmluaXQuc2V0dXAgOiB7Ci0JX19zZXR1cF9zdGFydCA9IC47Ci0JKiguaW5pdC5zZXR1cCkKLQlfX3NldHVwX2VuZCA9IC47CisJSU5JVF9TRVRVUCgwKQogICB9CiAKLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEucGVyY3B1IDogewotCV9fcGVyX2NwdV9zdGFydCA9IC4gOwotCSooLmRhdGEucGVyY3B1KQotCV9fcGVyX2NwdV9lbmQgPSAuIDsKLSAgfQorICBQRVJDUFUoMzIpCiAJCiAgIC5pbml0Y2FsbC5pbml0IDogewotCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCUlOSVRDQUxMUwotCV9faW5pdGNhbGxfZW5kID0gLjsKKwlJTklUX0NBTExTCiAgIH0KIAogICAuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJQ09OX0lOSVRDQUxMCiAgIH0KIAogICAudW1sLmluaXRjYWxsLmluaXQgOiB7CkBAIC0xMTgsOCArMTAzLDYgQEAKIAogICAgLiA9IEFMSUdOKDQwOTYpOwogICAuaW5pdC5yYW1mcyA6IHsKLQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JKiguaW5pdC5yYW1mcykKLQlfX2luaXRyYW1mc19lbmQgPSAuOworCUlOSVRfUkFNX0ZTCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCmluZGV4IDcxNWExODguLjdmY2FkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKQEAgLTE2LDExICsxNiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKQEAgLTk2LDggKzkyLDcgQEAKICAgLmluaXRfYXJyYXkgICAgIDogeyAqKC5pbml0X2FycmF5KSB9CiAgIC5maW5pX2FycmF5ICAgICA6IHsgKiguZmluaV9hcnJheSkgfQogICAuZGF0YSAgICAgICAgICAgOiB7Ci0gICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsJCS8qIGluaXRfdGFzayAqLwotICAgICooLmRhdGEuaW5pdF90YXNrKQorICAgIElOSVRfVEFTS19EQVRBKEtFUk5FTF9TVEFDS19TSVpFKQogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CiAgICAgKiguZGF0YS5pbml0X2lycXN0YWNrKQogICAgIERBVEFfREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCA0NTRjZGI0Li4wMzkyNzBiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpbnV4L2tlcm5lbF9zdGF0LmgiCiAjaW5jbHVkZSAibGludXgvbW9kdWxlLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJsaW51eC9zZXFfZmlsZS5oIgogI2luY2x1ZGUgImFzLWxheW91dC5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCmluZGV4IDJlYmQzOTcuLmU3YTZjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKQEAgLTIyLDExICsyMiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCiAgIC50ZXh0ICAgICAgOgpAQCAtNTIsOCArNDgsNyBAQAogICBpbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAgIC5kYXRhICAgIDoKICAgewotICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KLSAgICAqKC5kYXRhLmluaXRfdGFzaykKKyAgICBJTklUX1RBU0tfREFUQShLRVJORUxfU1RBQ0tfU0laRSkKICAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwogICAgICooLmRhdGEuaW5pdF9pcnFzdGFjaykKICAgICBEQVRBX0RBVEEKQEAgLTgxLDE5ICs3NiwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuc2JzcyAgICAgIDoKLSAgewotICAgX19ic3Nfc3RhcnQgPSAuOwotICAgUFJPVklERShfYnNzX3N0YXJ0ID0gLik7Ci0gICAqKC5zYnNzKQotICAgKiguc2NvbW1vbikKLSAgfQotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gIH0KKyAgX19ic3Nfc3RhcnQgPSAuOworICBQUk9WSURFKF9ic3Nfc3RhcnQgPSAuKTsKKyAgU0JTUygwKQorICBCU1MoMCkKICAgX2VuZCA9IC47CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCA5MzY5ODc5Li43MmFjZTk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTg2LDEwICs4Niw2IEBACiBjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBGQVNUX0NNUFhDSEdfTE9DQUwKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBNTVUKIAlkZWZfYm9vbCB5CiAKQEAgLTQzMiw2ICs0MjgsMTcgQEAKIAkgIG9mIEZsYXQgTG9naWNhbC4gIFlvdSB3aWxsIG5lZWQgYSBuZXcgbHlueGVyLmVsZiBmaWxlIHRvIGZsYXNoIHlvdXIKIAkgIGZpcm13YXJlIHdpdGggLSBzZW5kIGVtYWlsIHRvIDxNYXJ0aW4uQmxpZ2hAdXMuaWJtLmNvbT4uCiAKK2NvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlib29sCisJIyBNQ0UgY29kZSBjYWxscyBtZW1vcnlfZmFpbHVyZSgpOgorCWRlcGVuZHMgb24gWDg2X01DRQorCSMgT24gMzItYml0IHRoaXMgYWRkcyB0b28gYmlnIG9mIE5PREVTX1NISUZUIGFuZCB3ZSBydW4gb3V0IG9mIHBhZ2UgZmxhZ3M6CisJZGVwZW5kcyBvbiAhWDg2X05VTUFRCisJIyBPbiAzMi1iaXQgU1BBUlNFTUVNIGFkZHMgdG9vIGJpZyBvZiBTRUNUSU9OU19XSURUSDoKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNCisJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlkZWZhdWx0IHkKKwogY29uZmlnIFg4Nl9WSVNXUwogCWJvb2wgIlNHSSAzMjAvNTQwIChWaXN1YWwgV29ya3N0YXRpb24pIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSSAmJiBYODZfTVBQQVJTRSAmJiBQQ0lfR09ESVJFQ1QKQEAgLTQ4NCw3ICs0OTEsNyBAQAogc291cmNlICJhcmNoL3g4Ni94ZW4vS2NvbmZpZyIKIAogY29uZmlnIFZNSQotCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IgorCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCS0tLWhlbHAtLS0KQEAgLTQ5Myw2ICs1MDAsMTUgQEAKIAkgIGF0IHRoZSBtb21lbnQpLCBieSBsaW5raW5nIHRoZSBrZXJuZWwgdG8gYSBHUEwtZWQgUk9NIG1vZHVsZQogCSAgcHJvdmlkZWQgYnkgdGhlIGh5cGVydmlzb3IuCiAKKwkgIEFzIG9mIFNlcHRlbWJlciAyMDA5LCBWTXdhcmUgaGFzIHN0YXJ0ZWQgYSBwaGFzZWQgcmV0aXJlbWVudAorCSAgb2YgdGhpcyBmZWF0dXJlIGZyb20gVk13YXJlJ3MgcHJvZHVjdHMuIFBsZWFzZSBzZWUKKwkgIGZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgZm9yIGRldGFpbHMuICBJZiB5b3UgYXJlCisJICBwbGFubmluZyB0byBlbmFibGUgdGhpcyBvcHRpb24sIHBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdAorCSAgbGl2ZSBtaWdyYXRlIGEgVk1JIGVuYWJsZWQgVk0gdG8gYSBmdXR1cmUgVk13YXJlIHByb2R1Y3QsCisJICB3aGljaCBkb2Vzbid0IHN1cHBvcnQgVk1JLiBTbyBpZiB5b3UgZXhwZWN0IHlvdXIga2VybmVsIHRvCisJICBzZWFtbGVzc2x5IG1pZ3JhdGUgdG8gbmV3ZXIgVk13YXJlIHByb2R1Y3RzLCBrZWVwIHRoaXMKKwkgIGRpc2FibGVkLgorCiBjb25maWcgS1ZNX0NMT0NLCiAJYm9vbCAiS1ZNIHBhcmF2aXJ0dWFsaXplZCBjbG9jayIKIAlzZWxlY3QgUEFSQVZJUlQKQEAgLTE0MjcsMTIgKzE0NDMsOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLiBPbmx5IGVtYmVkZGVkIHNob3VsZCBzYXkgTiBoZXJlLgogCi1jb25maWcgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCi0JYm9vbAotCiBjb25maWcgQ0NfU1RBQ0tQUk9URUNUT1IKIAlib29sICJFbmFibGUgLWZzdGFjay1wcm90ZWN0b3IgYnVmZmVyIG92ZXJmbG93IGRldGVjdGlvbiAoRVhQRVJJTUVOVEFMKSIKLQlzZWxlY3QgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCiAJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zLCBhIGNhbmFyeSB2YWx1ZSBvbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCA1Mjc1MTliLi4yNjQ5ODQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNDAwLDcgKzQwMCw3IEBACiAKIGNvbmZpZyBYODZfQ01QWENIRzY0CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X1BBRSB8fCBYODZfNjQKKwlkZXBlbmRzIG9uICFNMzg2ICYmICFNNDg2CiAKICMgdGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgLW1hcmNoPS4uIG9wdGlvbnMgd2hlcmUgdGhlIGNvbXBpbGVyCiAjIGdlbmVyYXRlcyBjbW92LgpAQCAtNDEyLDYgKzQxMiw3IEBACiAJaW50CiAJZGVmYXVsdCAiNjQiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjYiIGlmIFg4Nl8zMiAmJiBYODZfUDZfTk9QCisJZGVmYXVsdCAiNSIgaWYgWDg2XzMyICYmIFg4Nl9DTVBYQ0hHNjQKIAlkZWZhdWx0ICI0IiBpZiBYODZfMzIgJiYgKFg4Nl9YQUREIHx8IFg4Nl9DTVBYQ0hHIHx8IFg4Nl9CU1dBUCB8fCBYODZfV1BfV09SS1NfT0spCiAJZGVmYXVsdCAiMyIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCBhMDEyZWU4Li5kMmQyNGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtNzYsNyArNzYsNiBAQAogCWNjX2hhc19zcCA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl8kKEJJVFMpLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKICAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpICQoYmlhcmNoKSkseSkKICAgICAgICAgICAgICAgICBzdGFja3AteSA6PSAtZnN0YWNrLXByb3RlY3RvcgotICAgICAgICAgICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9IC1mc3RhY2stcHJvdGVjdG9yLWFsbAogICAgICAgICAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICQod2FybmluZyBzdGFjayBwcm90ZWN0b3IgZW5hYmxlZCBidXQgbm8gY29tcGlsZXIgc3VwcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCmluZGV4IDc1ZTRmMDAuLmY1NDNiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtMjMsMTMgKzIzLDE0IEBACiAgKi8KIAkudGV4dAogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotCS5zZWN0aW9uICIudGV4dC5oZWFkIiwiYXgiLEBwcm9nYml0cworCV9fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKIAljbGQKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggZjYyYzI4NC4uMDc3ZTFiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yNCw2ICsyNCw3IEBACiAJLmNvZGUzMgogCS50ZXh0CiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KQEAgLTMzLDcgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLQkuc2VjdGlvbiAiLnRleHQuaGVhZCIKKwlfX0hFQUQKIAkuY29kZTMyCiBFTlRSWShzdGFydHVwXzMyKQogCWNsZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwppbmRleCBjYzM1M2UxLi5mNDE5M2JiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtMSwzICsxLDUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCiBPVVRQVVRfRk9STUFUKENPTkZJR19PVVRQVVRfRk9STUFULCBDT05GSUdfT1VUUFVUX0ZPUk1BVCwgQ09ORklHX09VVFBVVF9GT1JNQVQpCiAKICN1bmRlZiBpMzg2CkBAIC0xOCw5ICsyMCw5IEBACiAJICogYWRkcmVzcyAwLgogCSAqLwogCS4gPSAwOwotCS50ZXh0LmhlYWQgOiB7CisJLmhlYWQudGV4dCA6IHsKIAkJX2hlYWQgPSAuIDsKLQkJKigudGV4dC5oZWFkKQorCQlIRUFEX1RFWFQKIAkJX2VoZWFkID0gLiA7CiAJfQogCS5yb2RhdGEuY29tcHJlc3NlZCA6IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCmluZGV4IDBmNmVjNDU1Li4wM2MwNjgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkCisrKyBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKQEAgLTUzLDYgKzUzLDkgQEAKIAogCS9ESVNDQVJELyA6IHsgKigubm90ZSopIH0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gMHg4MDAwLCAiU2V0dXAgdG9vIGJpZyEiKTsKIAkuID0gQVNTRVJUKGhkciA9PSAweDFmMSwgIlRoZSBzZXR1cCBoZWFkZXIgaGFzIHRoZSB3cm9uZyBvZmZzZXQhIik7CiAJLyogTmVjZXNzYXJ5IGZvciB0aGUgdmVyeS1vbGQtbG9hZGVyIGNoZWNrIHRvIHdvcmsuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCmluZGV4IDU4NWVkZWIuLjQ5YzU1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtODIsNyArODIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTE2LDcgKzExNiw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2RlY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkgeworCWlmICghaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDc0NjE5YzQuLjU4MWIwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBfX0FVRElUX0FSQ0hfTEUJICAgMHg0MDAwMDAwMAogCiAjaWZuZGVmIENPTkZJR19BVURJVFNZU0NBTEwKLSNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKLSNkZWZpbmUgc3lzcmV0bF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKyNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpYTMyX3JldF9mcm9tX3N5c19jYWxsCisjZGVmaW5lIHN5c3JldGxfYXVkaXQgaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKICNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAoKGlhMzJfc3lzY2FsbF9lbmQgLSBpYTMyX3N5c19jYWxsX3RhYmxlKS84KQpAQCAtMzksMTIgKzM5LDEyIEBACiAJLmVuZG0gCiAKIAkvKiBjbG9iYmVycyAlZWF4ICovCQotCS5tYWNybyAgQ0xFQVJfUlJFR1MgX3I5PXJheAorCS5tYWNybyAgQ0xFQVJfUlJFR1Mgb2Zmc2V0PTAsIF9yOT1yYXgKIAl4b3JsIAklZWF4LCVlYXgKLQltb3ZxCSVyYXgsUjExKCVyc3ApCi0JbW92cQklcmF4LFIxMCglcnNwKQotCW1vdnEJJVxfcjksUjkoJXJzcCkKLQltb3ZxCSVyYXgsUjgoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTEoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTAoJXJzcCkKKwltb3ZxCSVcX3I5LFxvZmZzZXQrUjkoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSOCglcnNwKQogCS5lbmRtCiAKIAkvKgpAQCAtMTcyLDYgKzE3MiwxMCBAQAogCW1vdmwJUklQLVIxMSglcnNwKSwlZWR4CQkvKiBVc2VyICVlaXAgKi8KIAlDRklfUkVHSVNURVIgcmlwLHJkeAogCVJFU1RPUkVfQVJHUyAxLDI0LDEsMSwxLDEKKwl4b3JxCSVyOCwlcjgKKwl4b3JxCSVyOSwlcjkKKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXIxMSwlcjExCiAJcG9wZnEKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKIAkvKkNGSV9SRVNUT1JFIHJmbGFncyovCkBAIC0yMDAsOSArMjA0LDkgQEAKIAltb3ZsIFJESS1BUkdPRkZTRVQoJXJzcCksJXI4ZAkvKiByZWxvYWQgNXRoIHN5c2NhbGwgYXJnICovCiAJLmVuZG0KIAotCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQsZWJwc2F2ZT1SQlAKKwkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0CiAJdGVzdGwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF9yZXRfZnJvbV9zeXNfY2FsbAorCWpueiBpYTMyX3JldF9mcm9tX3N5c19jYWxsCiAJVFJBQ0VfSVJRU19PTgogCXN0aQogCW1vdmwgJWVheCwlZXNpCQkvKiBzZWNvbmQgYXJnLCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwpAQCAtMjEzLDEzICsyMTcsMTMgQEAKIAljYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdAogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW1vdmwgUkFYLUFSR09GRlNFVCglcnNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwotCW1vdmwgXGVicHNhdmUtQVJHT0ZGU0VUKCVyc3ApLCVlYnAgLyogcmVsb2FkIHVzZXIgcmVnaXN0ZXIgdmFsdWUgKi8KIAltb3ZsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwlZWRpCiAJY2xpCiAJVFJBQ0VfSVJRU19PRkYKIAl0ZXN0bCAlZWRpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF93aXRoX2NoZWNrCi0Jam1wIFxleGl0CisJanogXGV4aXQKKwlDTEVBUl9SUkVHUyAtQVJHT0ZGU0VUCisJam1wIGludF93aXRoX2NoZWNrCiAJLmVuZG0KIAogc3lzZW50ZXJfYXVkaXRzeXM6CkBAIC0zMjksNiArMzMzLDkgQEAKIAlDRklfUkVHSVNURVIgcmlwLHJjeAogCW1vdmwgRUZMQUdTLUFSR09GRlNFVCglcnNwKSwlcjExZAkKIAkvKkNGSV9SRUdJU1RFUiByZmxhZ3MscjExKi8KKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXI5LCVyOQorCXhvcnEJJXI4LCVyOAogCVRSQUNFX0lSUVNfT04KIAltb3ZsIFJTUC1BUkdPRkZTRVQoJXJzcCksJWVzcAogCUNGSV9SRVNUT1JFIHJzcApAQCAtMzQzLDcgKzM1MCw3IEBACiAJam1wIGNzdGFyX2Rpc3BhdGNoCiAKIHN5c3JldGxfYXVkaXQ6Ci0JYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwsIFJDWCAvKiB1c2VyICVlYnAgaW4gUkNYIHNsb3QgKi8KKwlhdWRpdHN5c19leGl0IHN5c3JldGxfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKIGNzdGFyX3RyYWNlc3lzOgpAQCAtMzUzLDcgKzM2MCw3IEBACiAjZW5kaWYKIAl4Y2hnbCAlcjlkLCVlYnAKIAlTQVZFX1JFU1QKLQlDTEVBUl9SUkVHUyByOQorCUNMRUFSX1JSRUdTIDAsIHI5CiAJbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkJLyogcHRyYWNlIGNhbiBjaGFuZ2UgdGhpcyBmb3IgYSBiYWQgc3lzY2FsbCAqLwogCW1vdnEgJXJzcCwlcmRpICAgICAgICAvKiAmcHRfcmVncyAtPiBhcmcxICovCiAJY2FsbCBzeXNjYWxsX3RyYWNlX2VudGVyCkBAIC00MjUsNiArNDMyLDggQEAKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpICMgeHh4OiByaXAgcmVsYXRpdmUKIGlhMzJfc3lzcmV0OgogCW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCitpYTMyX3JldF9mcm9tX3N5c19jYWxsOgorCUNMRUFSX1JSRUdTIC1BUkdPRkZTRVQKIAlqbXAgaW50X3JldF9mcm9tX3N5c19jYWxsIAogCiBpYTMyX3RyYWNlc3lzOgkJCSAKQEAgLTQ0Miw4ICs0NTEsOCBAQAogCiBpYTMyX2JhZHN5czoKIAltb3ZxICQwLE9SSUdfUkFYLUFSR09GRlNFVCglcnNwKQotCW1vdnEgJC1FTk9TWVMsUkFYLUFSR09GRlNFVCglcnNwKQotCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKwltb3ZxICQtRU5PU1lTLCVyYXgKKwlqbXAgaWEzMl9zeXNyZXQKIAogcXVpZXRfbmlfc3lzY2FsbDoKIAltb3ZxICQtRU5PU1lTLCVyYXgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKaW5kZXggYWM5NTk5NS4uNGIxODA4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKQEAgLTMxLDYgKzMxLDcgQEAKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKHUxNiBkZXZpZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2luaXQodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQogc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaAppbmRleCA3YzVlZjhiLi40NmZjNDc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmgKQEAgLTE2MSw3ICsxNjEsOCBAQAogCSAgICAiYWRjbCAkMCwgJTAJO1xuIgogCSAgICA6ICI9JnIiIChzdW0pCiAJICAgIDogInIiIChzYWRkciksICJyIiAoZGFkZHIpLAotCSAgICAgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pKTsKKwkgICAgICAiciIgKGh0b25sKGxlbikpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKQorCSAgICA6ICJtZW1vcnkiKTsKIAogCXJldHVybiBjc3VtX2ZvbGQoc3VtKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAppbmRleCA4MmNlYjc4Li5lZTE5MzFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCkBAIC0zMTIsMTkgKzMxMiwyMyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNtcHhjaGdfNDg2X3U2NCh2b2xhdGlsZSB2b2lkICosIHU2NCwgdTY0KTsKIAotI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKLQlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gNCkpCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0KChwdHIpLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JX19yZXQ7CQkJCQkJCQlcCi19KQorI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAobyk7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19uZXcgPSAobik7CQkJCVwKKwlhbHRlcm5hdGl2ZV9pbygiY2FsbCBjbXB4Y2hnOGJfZW11IiwJCQlcCisJCQkibG9jazsgY21weGNoZzhiICglJWVzaSkiICwJCVwKKwkJICAgICAgIFg4Nl9GRUFUVVJFX0NYOCwJCQkJXAorCQkgICAgICAgIj1BIiAoX19yZXQpLAkJCQlcCisJCSAgICAgICAiUyIgKChwdHIpKSwgIjAiIChfX29sZCksCQlcCisJCSAgICAgICAiYiIgKCh1bnNpZ25lZCBpbnQpX19uZXcpLAkJXAorCQkgICAgICAgImMiICgodW5zaWduZWQgaW50KShfX25ldz4+MzIpKQkJXAorCQkgICAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwlfX3JldDsgfSkKKworCisKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBlOGRlMmY2Li42MTdiZDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZXNjX2Jhc2UoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQogewotCXJldHVybiBkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KTsKKwlyZXR1cm4gKHVuc2lnbmVkKShkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19iYXNlKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBiYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMGVlNzcwZC4uNmEyNWQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xNCw2ICsxNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50Lmg+CiAKKyNpZmRlZiBDT05GSUdfSVNBCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygyNCkKKyNlbHNlCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygzMikKKyNlbmRpZgorCiBleHRlcm4gZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3M7CiBleHRlcm4gaW50IGlvbW11X21lcmdlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXY7CkBAIC0xMjQsMTAgKzEzMCw4IEBACiAJaWYgKGRtYV9hbGxvY19mcm9tX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJm1lbW9yeSkpCiAJCXJldHVybiBtZW1vcnk7CiAKLQlpZiAoIWRldikgeworCWlmICghZGV2KQogCQlkZXYgPSAmeDg2X2RtYV9mYWxsYmFja19kZXY7Ci0JCWdmcCB8PSBHRlBfRE1BOwotCX0KIAogCWlmICghaXNfZGV2aWNlX2RtYV9jYXBhYmxlKGRldikpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2JlMDAwNC4uZDgzODkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC03OTYsNiArNzk2LDcgQEAKICNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIGludCBrdm1fdW5tYXBfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwogaW50IGt2bV9hZ2VfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSk7CiBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IGI2MDhhNjQuLmYxMzYzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0xMzMsNiArMTMzLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcDVfbWNlKHZvaWQpIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSk7CisKIHZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBtY2VfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDhhZWJjYzQuLmVmYjM4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtODQwLDQyICs4NDAsMjIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGY7Ci0KLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuc2F2ZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiBmOworCXJldHVybiBQVk9QX0NBTExFRTAodW5zaWduZWQgbG9uZywgcHZfaXJxX29wcy5zYXZlX2ZsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGYpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAotCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUxKHB2X2lycV9vcHMucmVzdG9yZV9mbCwgZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9kaXNhYmxlKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIpOworCVBWT1BfVkNBTExFRTAocHZfaXJxX29wcy5pcnFfZGlzYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2VuYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggZGQwZjViMy4uOTM1NzQ3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC00OTQsMTAgKzQ5NCwxMSBAQAogI2RlZmluZSBFWFRSQV9DTE9CQkVSUwogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMKICNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCisvKiBbcmVdYXggaXNuJ3QgYW4gYXJnLCBidXQgdGhlIHJldHVybiB2YWwgKi8KICNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCi0JCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeCwgX19lYXggPSBfX2VheAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTCiAKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJEIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJIlMiICgodW5zaWduZWQgbG9uZykoeCkpCkBAIC01MDksNiArNTEwLDcgQEAKIAkJCQkiPWMiIChfX2VjeCkKICNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQogCisvKiB2b2lkIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYWxsb3dlZCBbcmVdYXggZm9yIHNjcmF0Y2ggKi8KICNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQogI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKIApAQCAtNTgzLDggKzU4NSw4IEBACiAJCSAgICAgICBWRVhUUkFfQ0xPQkJFUlMsCQkJCQlcCiAJCSAgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCi0JX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCQlcCiAJCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCiAJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCmluZGV4IDdiNDY3YmYuLmQxZjRhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTI3Nyw2ICsyNzcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiBleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CitleHRlcm4gdm9pZCBzZXRfbngodm9pZCk7CiBleHRlcm4gaW50IG54X2VuYWJsZWQ7CiAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGMzNDI5ZTguLmM5Nzg2NDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkJKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQogCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spCSgoc3RydWN0IHB0X3JlZ3MgKikodHNrKS0+dGhyZWFkLnNwMCAtIDEpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykJCS0xIC8qIHNvcnJ5LiBkb2Vzbid0IHdvcmsgZm9yIHN5c2NhbGwuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19pcCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDZmMDY5NWQuLjQwZTM3YjEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKQEAgLTE2NSwyMSArMTY2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19ub2RlKGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXNrOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDA0ZWI2YzkuLmQxNDE0YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KIAogCiAvKgpAQCAtMTE0LDcgKzExNiw3IEBACiAvKgogICogVGhlIGxhcmdlc3QgcG9zc2libGUgTkFTSUQgb2YgYSBDIG9yIE0gYnJpY2sgKCsgMikKICAqLwotI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19OT0RFUyAqIDIpCisjZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX0JMQURFUyAqIDIpCiAKIHN0cnVjdCB1dl9zY2lyX3MgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtMjMwLDYgKzIzMiwyMCBAQAogCXJldHVybiB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKF9fcGEodikpOwogfQogCisvKiBnbm9kZSAtPiBwbm9kZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dwYV90b19nbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwlyZXR1cm4gZ3BhID4+IHV2X2h1Yl9pbmZvLT5tX3ZhbDsKK30KKworLyogZ3BhIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ncGFfdG9fcG5vZGUodW5zaWduZWQgbG9uZyBncGEpCit7CisJdW5zaWduZWQgbG9uZyBuX21hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5uX3ZhbCkgLSAxOworCisJcmV0dXJuIHV2X2dwYV90b19nbm9kZShncGEpICYgbl9tYXNrOworfQorCiAvKiBwbm9kZSwgb2Zmc2V0IC0tPiBzb2NrZXQgdmlydHVhbCAqLwogc3RhdGljIGlubGluZSB2b2lkICp1dl9wbm9kZV9vZmZzZXRfdG9fdmFkZHIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKQEAgLTQyMSw5ICs0MzcsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl9odWJfc2VuZF9pcGkoaW50IHBub2RlLCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgZG1vZGUgPSBkZXN0X0ZpeGVkOworCisJaWYgKHZlY3RvciA9PSBOTUlfVkVDVE9SKQorCQlkbW9kZSA9IGRlc3RfTk1JOwogCiAJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKIAkJCSgoYXBpY2lkKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkJCShkbW9kZSA8PCBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX1NIRlQpIHwKIAkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCmluZGV4IDhjNDRjMjMuLjU5Y2RmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogUDQsIENvcmUgYW5kIGJleW9uZCBDUFVzCiAJICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgotCSAgICAoYy0+eDg2ID4gMHg2IHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMTQpKSkKKwkgICAgKGMtPng4NiA+IDB4ZiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE0KSkpCiAJCQlmbGFncy0+Ym1fY29udHJvbCA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXRfYm1fY2hlY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCmluZGV4IDdkYTAwYjcuLjA2MGZmZjhmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCkBAIC01Nyw1ICs1Nyw4IEBACiAJCSooLm5vdGUqKQogCX0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gV0FLRVVQX1NJWkUsICJXYWtldXAgdG9vIGJpZyEiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA5OGYyMzBmLi4wMjg1NTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xMjIwLDYgKzEyMjAsOCBAQAogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMV0gPSAwOwogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMl0gPSAwOwogCisJYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjMoZGV2aWQpOworCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXIgKi8KIAlkb21haW4tPmRldl9jbnQgLT0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCBiNGI2MWQ0Li5jMjAwMDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJd3JpdGVsKGN0cmwsIGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NPTlRST0xfT0ZGU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGlvbW11X2ZlYXR1cmVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTggYml0KQorc3RhdGljIHZvaWQgaW9tbXVfZmVhdHVyZV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1OCBiaXQpCiB7CiAJdTMyIGN0cmw7CiAKQEAgLTUxOSw2ICs1MTksMjYgQEAKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldIHw9ICgxIDw8IF9iaXQpOwogfQogCitzdGF0aWMgaW50IGdldF9kZXZfZW50cnlfYml0KHUxNiBkZXZpZCwgdTggYml0KQoreworCWludCBpID0gKGJpdCA+PiA1KSAmIDB4MDc7CisJaW50IF9iaXQgPSBiaXQgJiAweDFmOworCisJcmV0dXJuIChhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldICYgKDEgPDwgX2JpdCkpID4+IF9iaXQ7Cit9CisKKwordm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpCit7CisJaW50IHN5c21ndDsKKworCXN5c21ndCA9IGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMSkgfAorCQkgKGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMikgPDwgMSk7CisKKwlpZiAoc3lzbWd0ID09IDB4MDEpCisJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfSVcpOworfQorCiAvKiBXcml0ZXMgdGhlIHNwZWNpZmljIElPTU1VIGZvciBhIGRldmljZSBpbnRvIHRoZSBybG9va3VwIHRhYmxlICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2lvbW11X2Zvcl9kZXZpY2Uoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkZXZpZCkKIHsKQEAgLTU0Nyw2ICs1NjcsOCBAQAogCWlmIChmbGFncyAmIEFDUElfREVWRkxBR19MSU5UMSkKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9MSU5UMV9QQVNTKTsKIAorCWFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKGRldmlkKTsKKwogCXNldF9pb21tdV9mb3JfZGV2aWNlKGlvbW11LCBkZXZpZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IGY1ZjU4ODYuLjMyNmMyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMzUyLDE0ICszNTIsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZGlyX2FkZHJzKTsgaSsrKSB7CiAJCWFsaWFzLnYgPSB1dl9yZWFkX2xvY2FsX21tcihyZWRpcl9hZGRyc1tpXS5hbGlhcyk7Ci0JCWlmIChhbGlhcy5zLmJhc2UgPT0gMCkgeworCQlpZiAoYWxpYXMucy5lbmFibGUgJiYgYWxpYXMucy5iYXNlID09IDApIHsKIAkJCSpzaXplID0gKDFVTCA8PCBhbGlhcy5zLm1fYWxpYXMpOwogCQkJcmVkaXJlY3QudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLnJlZGlyZWN0KTsKIAkJCSpiYXNlID0gKHVuc2lnbmVkIGxvbmcpcmVkaXJlY3Qucy5kZXN0X2Jhc2UgPDwgREVTVF9TSElGVDsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlCVUcoKTsKKwkqYmFzZSA9ICpzaXplID0gMDsKIH0KIAogZW51bSBtYXBfdHlwZSB7bWFwX3diLCBtYXBfdWN9OwpAQCAtNjE5LDEyICs2MTksMTIgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF9iYXNlID0gbG93bWVtX3JlZGlyX2Jhc2U7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfdG9wID0gbG93bWVtX3JlZGlyX3NpemU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5tX3ZhbCA9IG1fdmFsOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBtX3ZhbDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbl92YWw7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGUgPSBwbm9kZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSBwbm9kZV9tYXNrOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDFVTCA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggN2Q1YzNiMC4uOGI1ODFkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtNTI2LDE1ICs1MjYsMjEgQEAKIAogc3RhdGljIGludCBhY3BpX2NwdWZyZXFfYmxhY2tsaXN0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQkvKiBodHRwOi8vd3d3LmludGVsLmNvbS9Bc3NldHMvUERGL3NwZWN1cGRhdGUvMzE0NTU0LnBkZgorCS8qIEludGVsIFhlb24gUHJvY2Vzc29yIDcxMDAgU2VyaWVzIFNwZWNpZmljYXRpb24gVXBkYXRlCisJICogaHR0cDovL3d3dy5pbnRlbC5jb20vQXNzZXRzL1BERi9zcGVjdXBkYXRlLzMxNDU1NC5wZGYKIAkgKiBBTDMwOiBBIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIChNQ0UpIE9jY3VycmluZyBkdXJpbmcgYW4KIAkgKiBFbmhhbmNlZCBJbnRlbCBTcGVlZFN0ZXAgVGVjaG5vbG9neSBSYXRpbyBDaGFuZ2UgTWF5IENhdXNlCi0JICogQm90aCBQcm9jZXNzb3IgQ29yZXMgdG8gTG9jayBVcCB3aGVuIEhUIGlzIGVuYWJsZWQqLworCSAqIEJvdGggUHJvY2Vzc29yIENvcmVzIHRvIExvY2sgVXAuICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgewogCQlpZiAoKGMtPng4NiA9PSAxNSkgJiYKIAkJICAgIChjLT54ODZfbW9kZWwgPT0gNikgJiYKLQkJICAgIChjLT54ODZfbWFzayA9PSA4KSAmJiBzbXRfY2FwYWJsZSgpKQorCQkgICAgKGMtPng4Nl9tYXNrID09IDgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJhY3BpLWNwdWZyZXE6IEludGVsKFIpICIKKwkJCSAgICAiWGVvbihSKSA3MTAwIEVycmF0YSBBTDMwLCBwcm9jZXNzb3JzIG1heSAiCisJCQkgICAgImxvY2sgdXAgb24gZnJlcXVlbmN5IGNoYW5nZXM6IGRpc2FibGluZyAiCisJCQkgICAgImFjcGktY3B1ZnJlcS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CisJCSAgICB9CiAJCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU0OSwxMyArNTU1LDE4IEBACiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0YXRpYyBpbnQgYmxhY2tsaXN0ZWQ7CisjZW5kaWYKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfaW5pdFxuIik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JcmVzdWx0ID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OworCWlmIChibGFja2xpc3RlZCkKKwkJcmV0dXJuIGJsYWNrbGlzdGVkOworCWJsYWNrbGlzdGVkID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKKwlpZiAoYmxhY2tsaXN0ZWQpCisJCXJldHVybiBibGFja2xpc3RlZDsKICNlbmRpZgogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBjZTJlZDNlLi5jYWJkMmZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAJCQltZW1jcHkoZWJsY3IsIHNhbXVlbDJfZWJsY3IsIHNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKLQkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOworCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjI7CiAJCQlpZiAoYy0+eDg2X21hc2sgPCA4KSB7CiAJCQkJY3B1X21vZGVsID0gQ1BVX1NBTVVFTDI7CiAJCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNjM5NGFhNS4uM2YxMmRhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAJCSAqIHNldCBpdCB0byAxIHRvIGF2b2lkIHByb2JsZW1zIGluIHRoZSBmdXR1cmUuCiAJCSAqIEZvciBhbGwgb3RoZXJzIGl0J3MgYSBCSU9TIGJ1Zy4KIAkJICovCi0JCWlmICghYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMSkKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTEpCiAJCQlwcmludGsoS0VSTl9FUlIgRldfV0FSTiBQRlggIkludmFsaWQgemVybyB0cmFuc2l0aW9uICIKIAkJCQkibGF0ZW5jeVxuIik7CiAJCW1heF9sYXRlbmN5ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDY5MTFlOTEuLjNhZTVhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMjMyLDI4ICsyMzIsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGdldF9mcmVxX2RhdGEgewotCXVuc2lnbmVkIGludCBzcGVlZDsKLQl1bnNpZ25lZCBpbnQgcHJvY2Vzc29yOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0X2ZyZXFfZGF0YSh2b2lkICpfZGF0YSkKK3N0YXRpYyB2b2lkIGdldF9mcmVxX2RhdGEodm9pZCAqX3NwZWVkKQogewotCXN0cnVjdCBnZXRfZnJlcV9kYXRhICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50ICpzcGVlZCA9IF9zcGVlZDsKIAotCWRhdGEtPnNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koZGF0YS0+cHJvY2Vzc29yKTsKKwkqc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGdldF9mcmVxX2RhdGEgZGF0YSA9IHsgLnByb2Nlc3NvciA9IGNwdSB9OworCXVuc2lnbmVkIGludCBzcGVlZDsKIAogCS8qIFlvdSdyZSBzdXBwb3NlZCB0byBlbnN1cmUgQ1BVIGlzIG9ubGluZS4gKi8KLQlpZiAoc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZ2V0X2ZyZXFfZGF0YSwgJmRhdGEsIDEpICE9IDApCisJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGdldF9mcmVxX2RhdGEsICZzcGVlZCwgMSkgIT0gMCkKIAkJQlVHKCk7CiAKLQlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIGRhdGEuc3BlZWQpOwotCXJldHVybiBkYXRhLnNwZWVkOworCWRwcmludGsoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgc3BlZWQpOworCXJldHVybiBzcGVlZDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKaW5kZXggNzAyOWYwZS4uNDcyNzYzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYwpAQCAtOTgsOCArOTgsOSBAQAogfTsKIAogLyogSW5qZWN0IG1jZSBvbiBjdXJyZW50IENQVSAqLwotc3RhdGljIGludCByYWlzZV9sb2NhbChzdHJ1Y3QgbWNlICptKQorc3RhdGljIGludCByYWlzZV9sb2NhbCh2b2lkKQogeworCXN0cnVjdCBtY2UgKm0gPSAmX19nZXRfY3B1X3ZhcihpbmplY3RtKTsKIAlpbnQgY29udGV4dCA9IE1DSl9DVFgobS0+aW5qZWN0X2ZsYWdzKTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY3B1ID0gbS0+ZXh0Y3B1OwpAQCAtMTY3LDEyICsxNjgsMTIgQEAKIAkJCX0KIAkJCWNwdV9yZWxheCgpOwogCQl9Ci0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogCQlwdXRfY3B1KCk7CiAJCXB1dF9vbmxpbmVfY3B1cygpOwogCX0gZWxzZQogI2VuZGlmCi0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogfQogCiAvKiBFcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDJmNWFhYjIuLjcyMWE3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC04NSw2ICs4NSwxOCBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2UsIG1jZXNfc2Vlbik7CiBzdGF0aWMgaW50CQkJY3B1X21pc3Npbmc7CiAKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQoreworCXByX2VtZXJnKCJObyBodW1hbiByZWFkYWJsZSBNQ0UgZGVjb2Rpbmcgc3VwcG9ydCBvbiB0aGlzIENQVSB0eXBlLlxuIik7CisJcHJfZW1lcmcoIlJ1biB0aGUgbWVzc2FnZSB0aHJvdWdoICdtY2Vsb2cgLS1hc2NpaScgdG8gZGVjb2RlLlxuIik7Cit9CisKKy8qCisgKiBDUFUvY2hpcHNldCBzcGVjaWZpYyBFREFDIGNvZGUgY2FuIHJlZ2lzdGVyIGEgY2FsbGJhY2sgaGVyZSB0byBwcmludAorICogTUNFIGVycm9ycyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm06CisgKi8KK3ZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSkgPSBkZWZhdWx0X2RlY29kZV9tY2U7CitFWFBPUlRfU1lNQk9MKHg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKTsKIAogLyogTUNBIGJhbmtzIHBvbGxlZCBieSB0aGUgcGVyaW9kIHBvbGxpbmcgdGltZXIgZm9yIGNvcnJlY3RlZCBldmVudHMgKi8KIERFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcykgPSB7CkBAIC0xNjUsNDkgKzE3Nyw0NiBAQAogCXNldF9iaXQoMCwgJm1jZV9uZWVkX25vdGlmeSk7CiB9CiAKLXZvaWQgX193ZWFrIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKLXsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewotCXByaW50ayhLRVJOX0VNRVJHCi0JICAgICAgICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMTZMeCBCYW5rICVkOiAlMDE2THhcbiIsCisJcHJfZW1lcmcoIkNQVSAlZDogTWFjaGluZSBDaGVjayBFeGNlcHRpb246ICUxNkx4IEJhbmsgJWQ6ICUwMTZMeFxuIiwKIAkgICAgICAgbS0+ZXh0Y3B1LCBtLT5tY2dzdGF0dXMsIG0tPmJhbmssIG0tPnN0YXR1cyk7CisKIAlpZiAobS0+aXApIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKLQkJICAgICAgICEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAotCQkgICAgICAgbS0+Y3MsIG0tPmlwKTsKKwkJcHJfZW1lcmcoIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKKwkJCSEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAorCQkJCW0tPmNzLCBtLT5pcCk7CisKIAkJaWYgKG0tPmNzID09IF9fS0VSTkVMX0NTKQogCQkJcHJpbnRfc3ltYm9sKCJ7JXN9IiwgbS0+aXApOwotCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiVFNDICVsbHggIiwgbS0+dHNjKTsKLQlpZiAobS0+YWRkcikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiQUREUiAlbGx4ICIsIG0tPmFkZHIpOwotCWlmIChtLT5taXNjKQotCQlwcmludGsoS0VSTl9DT05UICJNSVNDICVsbHggIiwgbS0+bWlzYyk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKLQkJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLAotCQkJbS0+YXBpY2lkKTsKIAotCWRlY29kZV9tY2UobSk7CisJcHJfZW1lcmcoIlRTQyAlbGx4ICIsIG0tPnRzYyk7CisJaWYgKG0tPmFkZHIpCisJCXByX2NvbnQoIkFERFIgJWxseCAiLCBtLT5hZGRyKTsKKwlpZiAobS0+bWlzYykKKwkJcHJfY29udCgiTUlTQyAlbGx4ICIsIG0tPm1pc2MpOworCisJcHJfY29udCgiXG4iKTsKKwlwcl9lbWVyZygiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKKwkJbS0+Y3B1dmVuZG9yLCBtLT5jcHVpZCwgbS0+dGltZSwgbS0+c29ja2V0aWQsIG0tPmFwaWNpZCk7CisKKwkvKgorCSAqIFByaW50IG91dCBodW1hbi1yZWFkYWJsZSBkZXRhaWxzIGFib3V0IHRoZSBNQ0UgZXJyb3IsCisJICogKGlmIHRoZSBDUFUgaGFzIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGF0KToKKwkgKi8KKwl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayhtKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbWNlX2hlYWQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5IQVJEV0FSRSBFUlJPUlxuIik7CisJcHJfZW1lcmcoIlxuSEFSRFdBUkUgRVJST1JcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQogewotCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iCi0jaWYgKCFkZWZpbmVkKENPTkZJR19FREFDKSB8fCAhZGVmaW5lZChDT05GSUdfQ1BVX1NVUF9BTUQpKQotCSAgICAgICAiUnVuIHRocm91Z2ggbWNlbG9nIC0tYXNjaWkgdG8gZGVjb2RlIGFuZCBjb250YWN0IHlvdXIgaGFyZHdhcmUgdmVuZG9yXG4iCi0jZW5kaWYKLQkgICAgICAgKTsKKwlwcl9lbWVyZygiVGhpcyBpcyBub3QgYSBzb2Z0d2FyZSBwcm9ibGVtIVxuIik7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpAQCAtMjIxLDYgKzIzMCw3IEBACiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYW5pYyh2b2lkKQogewogCWxvbmcgdGltZW91dCA9IFBBTklDX1RJTUVPVVQqVVNFQ19QRVJfU0VDOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXdoaWxlICh0aW1lb3V0LS0gPiAwKQpAQCAtMjg4LDYgKzI5OCw3IEBACiBzdGF0aWMgaW50IG1zcl90b19vZmZzZXQodTMyIG1zcikKIHsKIAl1bnNpZ25lZCBiYW5rID0gX19nZXRfY3B1X3ZhcihpbmplY3RtLmJhbmspOworCiAJaWYgKG1zciA9PSByaXBfbXNyKQogCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IG1jZSwgaXApOwogCWlmIChtc3IgPT0gTVNSX0lBMzJfTUN4X1NUQVRVUyhiYW5rKSkKQEAgLTMwNSwxMyArMzE2LDI1IEBACiBzdGF0aWMgdTY0IG1jZV9yZG1zcmwodTMyIG1zcikKIHsKIAl1NjQgdjsKKwogCWlmIChfX2dldF9jcHVfdmFyKGluamVjdG0pLmZpbmlzaGVkKSB7CiAJCWludCBvZmZzZXQgPSBtc3JfdG9fb2Zmc2V0KG1zcik7CisKIAkJaWYgKG9mZnNldCA8IDApCiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuICoodTY0ICopKChjaGFyICopJl9fZ2V0X2NwdV92YXIoaW5qZWN0bSkgKyBvZmZzZXQpOwogCX0KLQlyZG1zcmwobXNyLCB2KTsKKworCWlmIChyZG1zcmxfc2FmZShtc3IsICZ2KSkgeworCQlXQVJOX09OQ0UoMSwgIm1jZTogVW5hYmxlIHRvIHJlYWQgbXNyICVkIVxuIiwgbXNyKTsKKwkJLyoKKwkJICogUmV0dXJuIHplcm8gaW4gY2FzZSB0aGUgYWNjZXNzIGZhdWx0ZWQuIFRoaXMgc2hvdWxkCisJCSAqIG5vdCBoYXBwZW4gbm9ybWFsbHkgYnV0IGNhbiBoYXBwZW4gaWYgdGhlIENQVSBkb2VzCisJCSAqIHNvbWV0aGluZyB3ZWlyZCwgb3IgaWYgdGhlIGNvZGUgaXMgYnVnZ3kuCisJCSAqLworCQl2ID0gMDsKKwl9CisKIAlyZXR1cm4gdjsKIH0KIApAQCAtMzE5LDYgKzM0Miw3IEBACiB7CiAJaWYgKF9fZ2V0X2NwdV92YXIoaW5qZWN0bSkuZmluaXNoZWQpIHsKIAkJaW50IG9mZnNldCA9IG1zcl90b19vZmZzZXQobXNyKTsKKwogCQlpZiAob2Zmc2V0ID49IDApCiAJCQkqKHU2NCAqKSgoY2hhciAqKSZfX2dldF9jcHVfdmFyKGluamVjdG0pICsgb2Zmc2V0KSA9IHY7CiAJCXJldHVybjsKQEAgLTQxNSw3ICs0MzksNyBAQAogCQltLT5pcCA9IG1jZV9yZG1zcmwocmlwX21zcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAvKgogICogQ2FsbGVkIGFmdGVyIGludGVycnVwdHMgaGF2ZSBiZWVuIHJlZW5hYmxlZCBhZ2FpbgogICogd2hlbiBhIE1DRSBoYXBwZW5lZCBkdXJpbmcgYW4gaW50ZXJydXB0cyBvZmYgcmVnaW9uCkBAIC0xMTcyLDYgKzExOTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWItPmN0bCA9IC0xVUxMOwogCQliLT5pbml0ID0gMTsKIAl9CkBAIC0xMTg5LDcgKzEyMTQsOCBAQAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwogCiAJYiA9IGNhcCAmIE1DR19CQU5LQ05UX01BU0s7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKKwlpZiAoIWJhbmtzKQorCQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOwogCiAJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTIwMyw2ICsxMjI5LDcgQEAKIAliYW5rcyA9IGI7CiAJaWYgKCFtY2VfYmFua3MpIHsKIAkJaW50IGVyciA9IG1jZV9iYW5rc19pbml0KCk7CisKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTIzNyw2ICsxMjY0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKCFiLT5pbml0KQogCQkJY29udGludWU7CiAJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCBiLT5jdGwpOwpAQCAtMTYyNiw2ICsxNjU0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkxMSw2ICsxOTQwLDcgQEAKIAkJY21jaV9jbGVhcigpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkyOCw2ICsxOTU4LDcgQEAKIAkJY21jaV9yZWVuYWJsZSgpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgYi0+Y3RsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCmluZGV4IDg4OWY2NjUuLjdjNzg1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDYzYTU2ZDEuLmIzYTFkYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMzQsMjAgKzM0LDMxIEBACiAvKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gcmVwb3J0aW5nIHRoZXJtYWwgZXZlbnRzICovCiAjZGVmaW5lIENIRUNLX0lOVEVSVkFMCQkoMzAwICogSFopCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3U2NCwgbmV4dF9jaGVjaykgPSBJTklUSUFMX0pJRkZJRVM7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhlcm1hbF90aHJvdHRsZV9jb3VudCk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpOworLyoKKyAqIEN1cnJlbnQgdGhlcm1hbCB0aHJvdHRsaW5nIHN0YXRlOgorICovCitzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSB7CisJYm9vbAkJCWlzX3Rocm90dGxlZDsKIAotc3RhdGljIGF0b21pY190IHRoZXJtX3Rocm90X2VuCQk9IEFUT01JQ19JTklUKDApOworCXU2NAkJCW5leHRfY2hlY2s7CisJdW5zaWduZWQgbG9uZwkJdGhyb3R0bGVfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF90aHJvdHRsZV9jb3VudDsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSwgdGhlcm1hbF9zdGF0ZSk7CisKK3N0YXRpYyBhdG9taWNfdCB0aGVybV90aHJvdF9lbgk9IEFUT01JQ19JTklUKDApOwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKF9uYW1lKQkJCQlcCiAJc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI19uYW1lLCBOVUxMKQogCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKG5hbWUpCQkJXAotc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCVwKLQkJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJICAgICAgY2hhciAqYnVmKQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKAkJCQlcCisJCQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAkJCQlcCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljaGFyICpidWYpCQkJCQlcCiB7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAogCXNzaXplX3QgcmV0OwkJCQkJCQlcCkBAIC01NSw3ICs2Niw3IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CS8qIENQVSBob3RwbHVnICovCQkJXAogCWlmIChjcHVfb25saW5lKGNwdSkpCQkJCQkJXAogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwJCQkJXAotCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3Rocm90dGxlXyMjbmFtZSwgY3B1KSk7CVwKKwkJCSAgICAgIHBlcl9jcHUodGhlcm1hbF9zdGF0ZSwgY3B1KS5uYW1lKTsJXAogCWVsc2UJCQkJCQkJCVwKIAkJcmV0ID0gMDsJCQkJCQlcCiAJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCkBAIC02MywxMSArNzQsMTEgQEAKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCiB9CiAKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKGNvdW50KTsKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKGNvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKHRocm90dGxlX2NvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKHRocm90dGxlX2NvdW50KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRoZXJtYWxfdGhyb3R0bGVfYXR0cnNbXSA9IHsKLQkmYXR0cl9jb3VudC5hdHRyLAorCSZhdHRyX3Rocm90dGxlX2NvdW50LmF0dHIsCiAJTlVMTAogfTsKIApAQCAtOTMsMzMgKzEwNCwzOSBAQAogICogICAgICAgICAgMSA6IEV2ZW50IHNob3VsZCBiZSBsb2dnZWQgZnVydGhlciwgYW5kIGEgbWVzc2FnZSBoYXMgYmVlbgogICogICAgICAgICAgICAgIHByaW50ZWQgdG8gdGhlIHN5c2xvZy4KICAqLwotc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGludCBjdXJyKQorc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGJvb2wgaXNfdGhyb3R0bGVkKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191NjQgdG1wX2ppZmZzID0gZ2V0X2ppZmZpZXNfNjQoKTsKLQlib29sIHdhc190aHJvdHRsZWQgPSBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfYWN0aXZlKTsKLQlib29sIGlzX3Rocm90dGxlZCA9IF9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpID0gY3VycjsKKwlzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50IHRoaXNfY3B1OworCWJvb2wgd2FzX3Rocm90dGxlZDsKKwl1NjQgbm93OworCisJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbm93ID0gZ2V0X2ppZmZpZXNfNjQoKTsKKwlzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKKworCXdhc190aHJvdHRsZWQgPSBzdGF0ZS0+aXNfdGhyb3R0bGVkOworCXN0YXRlLT5pc190aHJvdHRsZWQgPSBpc190aHJvdHRsZWQ7CiAKIAlpZiAoaXNfdGhyb3R0bGVkKQotCQlfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKys7CisJCXN0YXRlLT50aHJvdHRsZV9jb3VudCsrOwogCi0JaWYgKCEod2FzX3Rocm90dGxlZCBeIGlzX3Rocm90dGxlZCkgJiYKLQkgICAgdGltZV9iZWZvcmU2NCh0bXBfamlmZnMsIF9fZ2V0X2NwdV92YXIobmV4dF9jaGVjaykpKQorCWlmICh0aW1lX2JlZm9yZTY0KG5vdywgc3RhdGUtPm5leHRfY2hlY2spICYmCisJCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQgIT0gc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQpCiAJCXJldHVybiAwOwogCi0JX19nZXRfY3B1X3ZhcihuZXh0X2NoZWNrKSA9IHRtcF9qaWZmcyArIENIRUNLX0lOVEVSVkFMOworCXN0YXRlLT5uZXh0X2NoZWNrID0gbm93ICsgQ0hFQ0tfSU5URVJWQUw7CisJc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQgPSBzdGF0ZS0+dGhyb3R0bGVfY291bnQ7CiAKIAkvKiBpZiB3ZSBqdXN0IGVudGVyZWQgdGhlIHRoZXJtYWwgZXZlbnQgKi8KIAlpZiAoaXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiBUZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsICIKLQkJICAgICAgICJjcHUgY2xvY2sgdGhyb3R0bGVkICh0b3RhbCBldmVudHMgPSAlbHUpXG4iLAotCQkgICAgICAgY3B1LCBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6IFRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwgdGhpc19jcHUsIHN0YXRlLT50aHJvdHRsZV9jb3VudCk7CiAKIAkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKHdhc190aHJvdHRsZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgY3B1KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgdGhpc19jcHUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIxMyw3ICsyMzAsNyBAQAogCV9fdTY0IG1zcl92YWw7CiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKLQlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpKQorCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKChtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpICE9IDApKQogCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KG1zcl92YWwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwppbmRleCAzMTU3MzhjLi43M2M4NmRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CiAKIAlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOwotCXByaW50ayhLRVJOX0lORk8gInRvdGFsIFJBTSBjb3ZlcnJlZDogJWxkTVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKIAkgICAgICAgcmFuZ2Vfc3VtcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKIAlpZiAobXRycl9jaHVua19zaXplICYmIG10cnJfZ3Jhbl9zaXplKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IGYwNGU3MjUuLjNjMWIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC05NiwxNyArOTYsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKIAljaGFyICpwdHI7CiAJY2hhciBsaW5lW0xJTkVfU0laRV07CisJaW50IGxlbmd0aDsKIAlzaXplX3QgbGluZWxlbjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoIWxlbikKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQobGluZSwgMCwgTElORV9TSVpFKTsKLQlpZiAobGVuID4gTElORV9TSVpFKQotCQlsZW4gPSBMSU5FX1NJWkU7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZiwgbGVuIC0gMSkpCisKKwlsZW5ndGggPSBsZW47CisJbGVuZ3RoLS07CisKKwlpZiAobGVuZ3RoID4gTElORV9TSVpFIC0gMSkKKwkJbGVuZ3RoID0gTElORV9TSVpFIC0gMTsKKworCWlmIChsZW5ndGggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihsaW5lLCBidWYsIGxlbmd0aCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbGluZWxlbiA9IHN0cmxlbihsaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggYTNjN2FkYi4uYjU4MDFjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTE3OTAsNiArMTc5MCw5IEBACiB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlpZiAoIXg4Nl9wbXUuYXBpYyB8fCAheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm47CisKIAlhcGljLT5zZW5kX0lQSV9zZWxmKExPQ0FMX1BFTkRJTkdfVkVDVE9SKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggZjdjZGIzYi4uY2Q5N2NlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC0xNiw2ICsxNiwyMiBAQAogLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKIAorc3RhdGljIGlubGluZSBib29sIGlzX2NyYXNoZWRfcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworI2lmbmRlZiBDT05GSUdfWDg2X1BBRQorCS8qCisJICogbm9uLVBBRSBrZHVtcCBrZXJuZWwgZXhlY3V0ZWQgZnJvbSBhIFBBRSBvbmUgd2lsbCBjcm9wIGhpZ2ggcHRlCisJICogYml0cyBhbmQgcG9rZSB1bndhbnRlZCBzcGFjZSBjb3VudGluZyBhZ2FpbiBmcm9tIGFkZHJlc3MgMCwgd2UKKwkgKiBkb24ndCB3YW50IHRoYXQuIHB0ZSBtdXN0IGZpdCBpbnRvIHVuc2lnbmVkIGxvbmcuIEluIGZhY3QgdGhlCisJICogdGVzdCBjaGVja3MgaGlnaCAxMiBiaXRzIGZvciBiZWluZyB6ZXJvIChwZm4gd2lsbCBiZSBzaGlmdGVkIGxlZnQKKwkgKiBieSBQQUdFX1NISUZUKS4KKwkgKi8KKwlyZXR1cm4gcHRlX3BmbihwZm5fcHRlKHBmbiwgX19wZ3Byb3QoMCkpKSA9PSBwZm47CisjZWxzZQorCXJldHVybiB0cnVlOworI2VuZGlmCit9CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCkBAIC00MSw2ICs1Nyw5IEBACiAJaWYgKCFjc2l6ZSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWlzX2NyYXNoZWRfcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRUZBVUxUOworCiAJdmFkZHIgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9QVEUwKTsKIAogCWlmICghdXNlcmJ1ZikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggODU0MTliYi4uZDE3ZDQ4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzc4LDggKzEzNzgsOCBAQAogCWlmIChtYiA8IDE2KQogCQlyZXR1cm4gMTAyNCoxMDI0OwogCi0JLyogVG8gMzJNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLwotCXJldHVybiAzMioxMDI0KjEwMjQ7CisJLyogVG8gNjRNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLworCXJldHVybiA2NCoxMDI0KjEwMjQ7CiB9CiAKICNkZWZpbmUgTUFYX1JFU09VUkNFX1NJWkUgKChyZXNvdXJjZV9zaXplX3QpLTEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggMmFjZmQzZi4uYjljODMwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMTc4LDYgKzE3OCwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfY29uc29sZV9yZWdpc3RlcihzdHJ1Y3QgY29uc29sZSAqY29uLCBpbnQga2VlcF9lYXJseSkKIHsKKwlpZiAoZWFybHlfY29uc29sZS0+aW5kZXggIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRVJST1I6IGVhcmx5cHJpbnRrPSAlcyBhbHJlYWR5IHVzZWRcbiIsCisJCSAgICAgICBjb24tPm5hbWUpOworCQlyZXR1cm47CisJfQogCWVhcmx5X2NvbnNvbGUgPSBjb247CiAJaWYgKGtlZXBfZWFybHkpCiAJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKQEAgLTIwMSw4ICsyMDYsMTEgQEAKIAogCXdoaWxlICgqYnVmICE9ICdcMCcpIHsKIAkJaWYgKCFzdHJuY21wKGJ1ZiwgInNlcmlhbCIsIDYpKSB7Ci0JCQllYXJseV9zZXJpYWxfaW5pdChidWYgKyA2KTsKKwkJCWJ1ZiArPSA2OworCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmKTsKIAkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJmVhcmx5X3NlcmlhbF9jb25zb2xlLCBrZWVwKTsKKwkJCWlmICghc3RybmNtcChidWYsICIsdHR5UyIsIDUpKQorCQkJCWJ1ZiArPSA1OwogCQl9CiAJCWlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKIAkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGFkNWJkOTguLmNkY2ZiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTQ1NCw4ICs0NTQsMTAgQEAKIAlpZiAoYWRkX2VmaV9tZW1tYXApCiAJCWRvX2FkZF9lZmlfbWVtbWFwKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBlZmlfZ2V0X3RpbWU7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBlZmlfc2V0X3J0Y19tbXNzOworI2VuZGlmCiAKIAkvKiBTZXR1cCBmb3IgRUZJIHJ1bnRpbWUgc2VydmljZSAqLwogCXJlYm9vdF90eXBlID0gQk9PVF9FRkk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCAyMThhYWQ3Li4wNTBjMjc4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC03OSw3ICs3OSw3IEBACiAgKiBhbnkgcGFydGljdWxhciBHRFQgbGF5b3V0LCBiZWNhdXNlIHdlIGxvYWQgb3VyIG93biBhcyBzb29uIGFzIHdlCiAgKiBjYW4uCiAgKi8KLS5zZWN0aW9uIC50ZXh0LmhlYWQsImF4IixAcHJvZ2JpdHMKK19fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKIAkvKiB0ZXN0IEtFRVBfU0VHTUVOVFMgZmxhZyB0byBzZWUgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgYXNraW5nCiAJCXVzIHRvIG5vdCByZWxvYWQgc2VnbWVudHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGQwYmMwYTEuLjc4MGNkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtNDAsNyArNDAsNyBAQAogTDNfU1RBUlRfS0VSTkVMID0gcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCkKIAogCS50ZXh0Ci0JLnNlY3Rpb24gLnRleHQuaGVhZAorCV9fSEVBRAogCS5jb2RlNjQKIAkuZ2xvYmwgc3RhcnR1cF82NAogc3RhcnR1cF82NDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCmluZGV4IDQzY2VjNmIuLjljM2JkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYwpAQCAtMTAsNiArMTAsMTYgQEAKIEVYUE9SVF9TWU1CT0wobWNvdW50KTsKICNlbmRpZgogCisvKgorICogTm90ZSwgdGhpcyBpcyBhIHByb3RvdHlwZSB0byBnZXQgYXQgdGhlIHN5bWJvbCBmb3IKKyAqIHRoZSBleHBvcnQsIGJ1dCBkb250IHVzZSBpdCBmcm9tIEMgY29kZSwgaXQgaXMgdXNlZAorICogYnkgYXNzZW1ibHkgY29kZSBhbmQgaXMgbm90IHVzaW5nIEMgY2FsbGluZyBjb252ZW50aW9uIQorICovCisjaWZuZGVmIENPTkZJR19YODZfQ01QWENIRzY0CitleHRlcm4gdm9pZCBjbXB4Y2hnOGJfZW11KHZvaWQpOworRVhQT1JUX1NZTUJPTChjbXB4Y2hnOGJfZW11KTsKKyNlbmRpZgorCiAvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA3NDY1NmQxLi4wNGJiZDUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC02MywxMCArNjMsMTAgQEAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwogCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ05UIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUE1JIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19wZXJmX2lycXMpOwotCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUE5EIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19wZW5kaW5nX2lycXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKaW5kZXggMzY2YmFhMS4uZjRjNTM4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCkBAIC0zMTcsNiArMzE3LDEyIEBACiAJCXJldHVybiBVQ09ERV9ORk9VTkQ7CiAJfQogCisJaWYgKCoodTMyICopZmlybXdhcmUtPmRhdGEgIT0gVUNPREVfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGludmFsaWQgVUNPREVfTUFHSUMgKDB4JTA4eClcbiIsCisJCSAgICAgICAqKHUzMiAqKWZpcm13YXJlLT5kYXRhKTsKKwkJcmV0dXJuIFVDT0RFX0VSUk9SOworCX0KKwogCXJldCA9IGdlbmVyaWNfbG9hZF9taWNyb2NvZGUoY3B1LCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwogCiAJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCA2NGI4MzhlLi5hNmU4MDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogLyoKICAqIFRoaXMgdmFyaWFibGUgYmVjb21lcyAxIGlmIGlvbW11PXB0IGlzIHBhc3NlZCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KLSAqIElmIHRoaXMgdmFyaWFibGUgaXMgMSwgSU9NTVUgaW1wbGVtZW50YXRpb25zIGRvIG5vIERNQSByYW5zbGF0aW9uIGZvcgorICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHRyYW5zbGF0aW9uIGZvcgogICogZGV2aWNlcyBhbmQgYWxsb3cgZXZlcnkgZGV2aWNlIHRvIGFjY2VzcyB0byB3aG9sZSBwaHlzaWNhbCBtZW1vcnkuIFRoaXMgaXMKICAqIHVzZWZ1bCBpZiBhIHVzZXIgd2FudCB0byB1c2UgYW4gSU9NTVUgb25seSBmb3IgS1ZNIGRldmljZSBhc3NpZ25tZW50IHRvCiAgKiBndWVzdHMgYW5kIG5vdCBmb3IgZHJpdmVyIGRtYSB0cmFuc2xhdGlvbi4KQEAgLTQ1LDEyICs0NSwxMCBAQAogZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3MgX19yZWFkX21vc3RseSA9IDA7CiBFWFBPUlRfU1lNQk9MKGJhZF9kbWFfYWRkcmVzcyk7CiAKLS8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gQmV0dGVyIHdvdWxkCi0gICBiZSBwcm9iYWJseSBhIHNtYWxsZXIgRE1BIG1hc2ssIGJ1dCB0aGlzIGlzIGJ1Zy10by1idWcgY29tcGF0aWJsZQotICAgdG8gb2xkZXIgaTM4Ni4gKi8KKy8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gKi8KIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXYgPSB7CiAJLmluaXRfbmFtZSA9ICJmYWxsYmFjayBkZXZpY2UiLAotCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJLmNvaGVyZW50X2RtYV9tYXNrID0gSVNBX0RNQV9CSVRfTUFTSywKIAkuZG1hX21hc2sgPSAmeDg2X2RtYV9mYWxsYmFja19kZXYuY29oZXJlbnRfZG1hX21hc2ssCiB9OwogRVhQT1JUX1NZTUJPTCh4ODZfZG1hX2ZhbGxiYWNrX2Rldik7CkBAIC0zMTEsNyArMzA5LDcgQEAKIAlhbWRfaW9tbXVfc2h1dGRvd24oKTsKIH0KIC8qIE11c3QgZXhlY3V0ZSBhZnRlciBQQ0kgc3Vic3lzdGVtICovCi1mc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7Cityb290ZnNfaW5pdGNhbGwocGNpX2lvbW11X2luaXQpOwogCiAjaWZkZWYgQ09ORklHX1BDSQogLyogTWFueSBWSUEgYnJpZGdlcyBzZWVtIHRvIGNvcnJ1cHQgZGF0YSBmb3IgREFDLiBEaXNhYmxlIGl0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggOThhODI3ZS4uYTdmMWI2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGFkNTM1YjYuLmViNjJjYmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNjY0LDMgKzY2NCw4IEBACiAJcmV0dXJuIGRvX2FyY2hfcHJjdGwoY3VycmVudCwgY29kZSwgYWRkcik7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgS1NUS19FU1Aoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0lBMzIpKSA/CisJCQkodGFza19wdF9yZWdzKHRhc2spLT5zcCkgOiAoKHRhc2spLT50aHJlYWQudXNlcnNwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCAyNzM0OWY5Li5mOTMwNzg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogI2luY2x1ZGUgPGFjcGkvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00MzUsNiArNDM2LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81IiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBBcHBsZSBNYWNtaW5pMywxICovCisJCS5jYWxsYmFjayA9IHNldF9wY2lfcmVib290LAorCQkuaWRlbnQgPSAiQXBwbGUgTWFjbWluaTMsMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNtaW5pMywxIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggZTA5ZjBlMi4uMmEzNGY5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTY2MCw2ICs2NjAsMTMgQEAKIAkJfSwKIAl9LAogCXsKKwkJLmNhbGxiYWNrID0gZG1pX2xvd19tZW1vcnlfY29ycnVwdGlvbiwKKwkJLmlkZW50ID0gIlBob2VuaXgvTVNDIEJJT1MiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4L01TQyIpLAorCQl9LAorCX0sCisJewogCS8qCiAJICogQU1JIEJJT1Mgd2l0aCBsb3cgbWVtb3J5IGNvcnJ1cHRpb24gd2FzIGZvdW5kIG9uIEludGVsIERHNDVJRCBib2FyZC4KIAkgKiBJdCBoYXNlIGRpZmZlcmVudCBETUlfQklPU19WRU5ET1IgPSAiSW50ZWwgQ29ycC4iLCBmb3Igbm93IHdlIHdpbGwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGRjYjAwZDIuLmJlMjU3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtMzgsNyArMzgsOCBAQAogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyBzaXplb2YobG9uZykpOwogI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3MtPnNwOworCQl1bnNpZ25lZCBsb25nICpzcCA9CisJCQkodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQkvKgogCQkgKiBSZXR1cm4gYWRkcmVzcyBpcyBlaXRoZXIgZGlyZWN0bHkgYXQgc3RhY2sgcG9pbnRlcgogCQkgKiBvciBhYm92ZSBhIHNhdmVkIGZsYWdzLiBFZmxhZ3MgaGFzIGJpdHMgMjItMzEgemVybywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCA1MDNjMWYyLi4xNzQwYzg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC0yMyw4ICsyMyw2IEBACiBzdGF0aWMgc3RydWN0IGJhdV9jb250cm9sCSoqdXZfYmF1X3RhYmxlX2Jhc2VzIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgaW50CQkJdXZfYmF1X3JldHJ5X2xpbWl0IF9fcmVhZF9tb3N0bHk7CiAKLS8qIHBvc2l0aW9uIG9mIHBub2RlICh3aGljaCBpcyBuYXNpZD4+MSk6ICovCi1zdGF0aWMgaW50CQkJdXZfbnNoaWZ0IF9fcmVhZF9tb3N0bHk7CiAvKiBiYXNlIHBub2RlIGluIHRoaXMgcGFydGl0aW9uICovCiBzdGF0aWMgaW50CQkJdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgX19yZWFkX21vc3RseTsKIApAQCAtNzIzLDcgKzcyMSw3IEBACiAJQlVHX09OKCFhZHApOwogCiAJcGEgPSB1dl9ncGEoYWRwKTsgLyogbmVlZCB0aGUgcmVhbCBuYXNpZCovCi0JbiA9IHBhID4+IHV2X25zaGlmdDsKKwluID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAltID0gcGEgJiB1dl9tbWFzazsKIAogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCkBAIC03NzgsNyArNzc2LDcgQEAKIAkgKiBuZWVkIHRoZSBwbm9kZSBvZiB3aGVyZSB0aGUgbWVtb3J5IHdhcyByZWFsbHkgYWxsb2NhdGVkCiAJICovCiAJcGEgPSB1dl9ncGEocHFwKTsKLQlwbiA9IHBhID4+IHV2X25zaGlmdDsKKwlwbiA9IHV2X2dwYV90b19wbm9kZShwYSk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLAogCQkJICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QsCiAJCQkgICAgICAoKHVuc2lnbmVkIGxvbmcpcG4gPDwgVVZfUEFZTE9BRFFfUE5PREVfU0hJRlQpIHwKQEAgLTg0Myw4ICs4NDEsNyBAQAogCQkJCSAgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjdXJfY3B1KSk7CiAKIAl1dl9iYXVfcmV0cnlfbGltaXQgPSAxOwotCXV2X25zaGlmdCA9IHV2X2h1Yl9pbmZvLT5uX3ZhbDsKLQl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisJdXZfbW1hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCkgLSAxOwogCW5ibGFkZXMgPSB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7CiAKIAl1dl9iYXVfdGFibGVfYmFzZXMgPSAoc3RydWN0IGJhdV9jb250cm9sICoqKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKaW5kZXggNjk5ZjdlZS4uY2QwMjIxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCkBAIC0zLDggKzMsMTYgQEAKICNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0FDUElfU0xFRVApCisjZGVmaW5lIF9fdHJhbXBpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YQorI2Vsc2UKKyNkZWZpbmUgX190cmFtcGluaXQgX19jcHVpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YSBfX2NwdWluaXRkYXRhCisjZW5kaWYKKwogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICpfX2NwdWluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKK3Vuc2lnbmVkIGNoYXIgKl9fdHJhbXBpbml0ZGF0YSB0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKFRSQU1QT0xJTkVfQkFTRSk7CiAKIHZvaWQgX19pbml0IHJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkodm9pZCkKIHsKQEAgLTI2LDcgKzM0LDcgQEAKICAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgogICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX190cmFtcGluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQogewogCW1lbWNweSh0cmFtcG9saW5lX2Jhc2UsIHRyYW1wb2xpbmVfZGF0YSwgVFJBTVBPTElORV9TSVpFKTsKIAlyZXR1cm4gdmlydF90b19waHlzKHRyYW1wb2xpbmVfYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCA1OTZkNTRjLi4zYWYyZGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorLnNlY3Rpb24gLnJvZGF0YSwgImEiLCBAcHJvZ2JpdHMKKyNlbHNlCiAvKiBXZSBjYW4gZnJlZSB1cCB0aGUgdHJhbXBvbGluZSBhZnRlciBib290dXAgaWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gKi8KIF9fQ1BVSU5JVFJPREFUQQorI2VuZGlmCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggYTY2NWM3MS4uN2UzN2RjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTcyLDExICs3Miw5IEBACiAKIC8qCiAgKiBUaGUgSURUIGhhcyB0byBiZSBwYWdlLWFsaWduZWQgdG8gc2ltcGxpZnkgdGhlIFBlbnRpdW0KLSAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLi4gV2UgaGF2ZSBhIHNwZWNpYWwgbGluayBzZWdtZW50Ci0gKiBmb3IgdGhpcy4KKyAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLgogICovCi1nYXRlX2Rlc2MgaWR0X3RhYmxlW05SX1ZFQ1RPUlNdCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmlkdCIpKSkgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CitnYXRlX2Rlc2MgaWR0X3RhYmxlW05SX1ZFQ1RPUlNdIF9fcGFnZV9hbGlnbmVkX2RhdGEgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CiAjZW5kaWYKIAogREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2Nfc3luYy5jIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKaW5kZXggMDI3YjViNC4uZjM3OTMwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSkpIHsKLQkJcHJfaW5mbygiU2tpcHBpbmcgc3luY2hyb25pemF0aW9uIGNoZWNrcyBhcyBUU0MgaXMgcmVsaWFibGUuXG4iKTsKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJTa2lwcGluZyBzeW5jaHJvbml6YXRpb24gY2hlY2tzIGFzIFRTQyBpcyByZWxpYWJsZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggMzFlNmY2Yy4uZDQzMGU0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAKIAlwdl9pbmZvLnBhcmF2aXJ0X2VuYWJsZWQgPSAxOwogCXB2X2luZm8ua2VybmVsX3JwbCA9IGtlcm5lbF9jcyAmIFNFR01FTlRfUlBMX01BU0s7Ci0JcHZfaW5mby5uYW1lID0gInZtaSI7CisJcHZfaW5mby5uYW1lID0gInZtaSBbZGVwcmVjYXRlZF0iOwogCiAJcHZfaW5pdF9vcHMucGF0Y2ggPSB2bWlfcGF0Y2g7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYTQ2YWNjYy4uM2M2OGZlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTY1LDE3ICs2NSwxMSBAQAogI2VuZGlmCiAKIAkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwotCi0JLyogYm9vdHN0cmFwcGluZyBjb2RlICovCi0JLnRleHQuaGVhZCA6IEFUKEFERFIoLnRleHQuaGVhZCkgLSBMT0FEX09GRlNFVCkgewotCQlfdGV4dCA9IC47Ci0JCSooLnRleHQuaGVhZCkKLQl9IDp0ZXh0ID0gMHg5MDkwCi0KLQkvKiBUaGUgcmVzdCBvZiB0aGUgdGV4dCAqLwogCS50ZXh0IDogIEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKKwkJX3RleHQgPSAuOworCQkvKiBib290c3RyYXBwaW5nIGNvZGUgKi8KKwkJSEVBRF9URVhUCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkvKiBub3QgcmVhbGx5IG5lZWRlZCwgYWxyZWFkeSBwYWdlIGFsaWduZWQgKi8KIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCSooLnRleHQucGFnZV9hbGlnbmVkKQogI2VuZGlmCkBAIC05NCwxMyArODgsNyBAQAogCiAJTk9URVMgOnRleHQgOm5vdGUKIAotCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCS4gPSBBTElHTigxNik7Ci0JX19leF90YWJsZSA6IEFUKEFERFIoX19leF90YWJsZSkgLSBMT0FEX09GRlNFVCkgewotCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9IDp0ZXh0ID0gMHg5MDkwCisJRVhDRVBUSU9OX1RBQkxFKDE2KSA6dGV4dCA9IDB4OTA5MAogCiAJUk9fREFUQShQQUdFX1NJWkUpCiAKQEAgLTExOCw3ICsxMDYsNiBAQAogI2VuZGlmCiAKIAkJUEFHRV9BTElHTkVEX0RBVEEoUEFHRV9TSVpFKQotCQkqKC5kYXRhLmlkdCkKIAogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpCiAKQEAgLTEzNSwyNCArMTIyLDIxIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCiAjZGVmaW5lIFZTWVNDQUxMX0FERFIgKC0xMCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZTWVNDQUxMX1BIWVNfQUREUiAoKExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKQotI2RlZmluZSBWU1lTQ0FMTF9WSVJUX0FERFIgKChBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKQogCi0jZGVmaW5lIFZMT0FEX09GRlNFVCAoVlNZU0NBTExfQUREUiAtIFZTWVNDQUxMX1BIWVNfQUREUikKKyNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gX192c3lzY2FsbF8wICsgTE9BRF9PRkZTRVQpCiAjZGVmaW5lIFZMT0FEKHgpIChBRERSKHgpIC0gVkxPQURfT0ZGU0VUKQogCi0jZGVmaW5lIFZWSVJUX09GRlNFVCAoVlNZU0NBTExfQUREUiAtIFZTWVNDQUxMX1ZJUlRfQUREUikKKyNkZWZpbmUgVlZJUlRfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gX192c3lzY2FsbF8wKQogI2RlZmluZSBWVklSVCh4KSAoQUREUih4KSAtIFZWSVJUX09GRlNFVCkKIAorCS4gPSBBTElHTig0MDk2KTsKKwlfX3ZzeXNjYWxsXzAgPSAuOworCiAJLiA9IFZTWVNDQUxMX0FERFI7Ci0JLnZzeXNjYWxsXzAgOiBBVChWU1lTQ0FMTF9QSFlTX0FERFIpIHsKKwkudnN5c2NhbGxfMCA6IEFUKFZMT0FEKC52c3lzY2FsbF8wKSkgewogCQkqKC52c3lzY2FsbF8wKQogCX0gOnVzZXIKIAotCV9fdnN5c2NhbGxfMCA9IFZTWVNDQUxMX1ZJUlRfQUREUjsKLQogCS4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKIAkudnN5c2NhbGxfZm4gOiBBVChWTE9BRCgudnN5c2NhbGxfZm4pKSB7CiAJCSooLnZzeXNjYWxsX2ZuKQpAQCAtMTkyLDExICsxNzYsOSBAQAogCQkqKC52c3lzY2FsbF8zKQogCX0KIAotCS4gPSBWU1lTQ0FMTF9WSVJUX0FERFIgKyBQQUdFX1NJWkU7CisJLiA9IF9fdnN5c2NhbGxfMCArIFBBR0VfU0laRTsKIAogI3VuZGVmIFZTWVNDQUxMX0FERFIKLSN1bmRlZiBWU1lTQ0FMTF9QSFlTX0FERFIKLSN1bmRlZiBWU1lTQ0FMTF9WSVJUX0FERFIKICN1bmRlZiBWTE9BRF9PRkZTRVQKICN1bmRlZiBWTE9BRAogI3VuZGVmIFZWSVJUX09GRlNFVApAQCAtMjE5LDM2ICsyMDEsMTIgQEAKIAlQRVJDUFVfVkFERFIoMCwgOnBlcmNwdSkKICNlbmRpZgogCi0JLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCTppbml0CiAjZW5kaWYKIAotCS5pbml0LmRhdGEgOiBBVChBRERSKC5pbml0LmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsKLQkJSU5JVF9EQVRBCi0JfQotCi0JLiA9IEFMSUdOKDE2KTsKLQkuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKLQl9Ci0JLmluaXRjYWxsLmluaXQgOiBBVChBRERSKC5pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQotCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQorCUlOSVRfREFUQV9TRUNUSU9OKDE2KQogCiAJLng4Nl9jcHVfZGV2LmluaXQgOiBBVChBRERSKC54ODZfY3B1X2Rldi5pbml0KSAtIExPQURfT0ZGU0VUKSB7CiAJCV9feDg2X2NwdV9kZXZfc3RhcnQgPSAuOwpAQCAtMjU2LDggKzIxNCw2IEBACiAJCV9feDg2X2NwdV9kZXZfZW5kID0gLjsKIAl9CiAKLQlTRUNVUklUWV9JTklUCi0KIAkuID0gQUxJR04oOCk7CiAJLnBhcmFpbnN0cnVjdGlvbnMgOiBBVChBRERSKC5wYXJhaW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fcGFyYWluc3RydWN0aW9ucyA9IC47CkBAIC0yODgsMTUgKzI0NCw2IEBACiAJCUVYSVRfREFUQQogCX0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47Ci0JfQotI2VuZGlmCi0KICNpZiAhZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCAhZGVmaW5lZChDT05GSUdfU01QKQogCVBFUkNQVShQQUdFX1NJWkUpCiAjZW5kaWYKQEAgLTM1OCw2ICszMDUsOSBAQAogCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKyAqLwogLiA9IEFTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKIAkgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCA4MmFkNTIzLi4xNDRlN2Y2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJICogaXRzZWxmIHdpdGggdGhlIGluaXRpYWwgY291bnQgYW5kIGNvbnRpbnVlcyBjb3VudGluZwogCSAqIGZyb20gdGhlcmUuCiAJICovCi0JcmVtYWluaW5nID0gaHJ0aW1lcl9leHBpcmVzX3JlbWFpbmluZygmcHMtPnBpdF90aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKIAllbGFwc2VkID0gcHMtPnBpdF90aW1lci5wZXJpb2QgLSBrdGltZV90b19ucyhyZW1haW5pbmcpOwogCWVsYXBzZWQgPSBtb2RfNjQoZWxhcHNlZCwgcHMtPnBpdF90aW1lci5wZXJpb2QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDFhZTVjZWJhLi4yM2MyMTc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYworKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuYwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJaWYgKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXJlbWFpbmluZyA9IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoJmFwaWMtPmxhcGljX3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmFwaWMtPmxhcGljX3RpbWVyLnRpbWVyKTsKIAlpZiAoa3RpbWVfdG9fbnMocmVtYWluaW5nKSA8IDApCiAJCXJlbWFpbmluZyA9IGt0aW1lX3NldCgwLCAwKTsKIApAQCAtNjY0LDcgKzY2NCw3IEBACiB7CiAJa3RpbWVfdCBub3cgPSBhcGljLT5sYXBpY190aW1lci50aW1lci5iYXNlLT5nZXRfdGltZSgpOwogCi0JYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kID0gYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfVE1JQ1QpICoKKwlhcGljLT5sYXBpY190aW1lci5wZXJpb2QgPSAodTY0KWFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSAqCiAJCSAgICBBUElDX0JVU19DWUNMRV9OUyAqIGFwaWMtPmRpdmlkZV9jb3VudDsKIAlhdG9taWNfc2V0KCZhcGljLT5sYXBpY190aW1lci5wZW5kaW5nLCAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IGVjYTQxYWUuLjgxOGI5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAibW11dHJhY2UuaCIKIAorI2RlZmluZSBTUFRFX0hPU1RfV1JJVEVBQkxFICgxVUxMIDw8IFBUX0ZJUlNUX0FWQUlMX0JJVFNfU0hJRlQpCisKICNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCiBzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyB7CkBAIC02MzQsOSArNjM2LDcgQEAKIAlpZiAoKnNwdGUgJiBzaGFkb3dfYWNjZXNzZWRfbWFzaykKIAkJa3ZtX3NldF9wZm5fYWNjZXNzZWQocGZuKTsKIAlpZiAoaXNfd3JpdGVibGVfcHRlKCpzcHRlKSkKLQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7Ci0JZWxzZQotCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBzcC0+cm9sZS5sZXZlbCk7CiAJaWYgKCEqcm1hcHApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJybWFwX3JlbW92ZTogJXAgJWxseCAwLT5CVUdcbiIsIHNwdGUsICpzcHRlKTsKQEAgLTc0OCw3ICs3NDgsOCBAQAogCXJldHVybiB3cml0ZV9wcm90ZWN0ZWQ7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3VubWFwX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApCitzdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQogewogCXU2NCAqc3B0ZTsKIAlpbnQgbmVlZF90bGJfZmx1c2ggPSAwOwpAQCAtNzYzLDggKzc2NCw0NyBAQAogCXJldHVybiBuZWVkX3RsYl9mbHVzaDsKIH0KIAorc3RhdGljIGludCBrdm1fc2V0X3B0ZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IG5lZWRfZmx1c2ggPSAwOworCXU2NCAqc3B0ZSwgbmV3X3NwdGU7CisJcHRlX3QgKnB0ZXAgPSAocHRlX3QgKilkYXRhOworCXBmbl90IG5ld19wZm47CisKKwlXQVJOX09OKHB0ZV9odWdlKCpwdGVwKSk7CisJbmV3X3BmbiA9IHB0ZV9wZm4oKnB0ZXApOworCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7CisJd2hpbGUgKHNwdGUpIHsKKwkJQlVHX09OKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGUpKTsKKwkJcm1hcF9wcmludGsoImt2bV9zZXRfcHRlX3JtYXBwOiBzcHRlICVwICVsbHhcbiIsIHNwdGUsICpzcHRlKTsKKwkJbmVlZF9mbHVzaCA9IDE7CisJCWlmIChwdGVfd3JpdGUoKnB0ZXApKSB7CisJCQlybWFwX3JlbW92ZShrdm0sIHNwdGUpOworCQkJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIE5VTEwpOworCQl9IGVsc2UgeworCQkJbmV3X3NwdGUgPSAqc3B0ZSAmfiAoUFQ2NF9CQVNFX0FERFJfTUFTSyk7CisJCQluZXdfc3B0ZSB8PSAodTY0KW5ld19wZm4gPDwgUEFHRV9TSElGVDsKKworCQkJbmV3X3NwdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7CisJCQluZXdfc3B0ZSAmPSB+U1BURV9IT1NUX1dSSVRFQUJMRTsKKwkJCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKQorCQkJCWt2bV9zZXRfcGZuX2RpcnR5KHNwdGVfdG9fcGZuKCpzcHRlKSk7CisJCQlfX3NldF9zcHRlKHNwdGUsIG5ld19zcHRlKTsKKwkJCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgc3B0ZSk7CisJCX0KKwl9CisJaWYgKG5lZWRfZmx1c2gpCisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQga3ZtX2hhbmRsZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwKLQkJCSAgaW50ICgqaGFuZGxlcikoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCkpCisJCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSwKKwkJCSAgaW50ICgqaGFuZGxlcikoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZGF0YSkpCiB7CiAJaW50IGksIGo7CiAJaW50IHJldHZhbCA9IDA7CkBAIC03ODYsMTMgKzgyNiwxNSBAQAogCQlpZiAoaHZhID49IHN0YXJ0ICYmIGh2YSA8IGVuZCkgewogCQkJZ2ZuX3QgZ2ZuX29mZnNldCA9IChodmEgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKIAotCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLCAmbWVtc2xvdC0+cm1hcFtnZm5fb2Zmc2V0XSk7CisJCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sICZtZW1zbG90LT5ybWFwW2dmbl9vZmZzZXRdLAorCQkJCQkgIGRhdGEpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2opIHsKIAkJCQlpbnQgaWR4ID0gZ2ZuX29mZnNldDsKIAkJCQlpZHggLz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQVF9ESVJFQ1RPUllfTEVWRUwgKyBqKTsKIAkJCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sCi0JCQkJCSZtZW1zbG90LT5scGFnZV9pbmZvW2pdW2lkeF0ucm1hcF9wZGUpOworCQkJCQkmbWVtc2xvdC0+bHBhZ2VfaW5mb1tqXVtpZHhdLnJtYXBfcGRlLAorCQkJCQlkYXRhKTsKIAkJCX0KIAkJfQogCX0KQEAgLTgwMiwxMCArODQ0LDE2IEBACiAKIGludCBrdm1fdW5tYXBfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpCiB7Ci0JcmV0dXJuIGt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCBrdm1fdW5tYXBfcm1hcHApOworCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgMCwga3ZtX3VubWFwX3JtYXBwKTsKIH0KIAotc3RhdGljIGludCBrdm1fYWdlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApCit2b2lkIGt2bV9zZXRfc3B0ZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwgcHRlX3QgcHRlKQoreworCWt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCAodW5zaWduZWQgbG9uZykmcHRlLCBrdm1fc2V0X3B0ZV9ybWFwcCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IHlvdW5nID0gMDsKQEAgLTg0MSwxMyArODg5LDEzIEBACiAJZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBnZm4pOwogCXJtYXBwID0gZ2ZuX3RvX3JtYXAodmNwdS0+a3ZtLCBnZm4sIHNwLT5yb2xlLmxldmVsKTsKIAotCWt2bV91bm1hcF9ybWFwcCh2Y3B1LT5rdm0sIHJtYXBwKTsKKwlrdm1fdW5tYXBfcm1hcHAodmNwdS0+a3ZtLCBybWFwcCwgMCk7CiAJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiB9CiAKIGludCBrdm1fYWdlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKQogewotCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwga3ZtX2FnZV9ybWFwcCk7CisJcmV0dXJuIGt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCAwLCBrdm1fYWdlX3JtYXBwKTsKIH0KIAogI2lmZGVmIE1NVV9ERUJVRwpAQCAtMTc1Niw3ICsxODA0LDcgQEAKIAkJICAgIHVuc2lnbmVkIHB0ZV9hY2Nlc3MsIGludCB1c2VyX2ZhdWx0LAogCQkgICAgaW50IHdyaXRlX2ZhdWx0LCBpbnQgZGlydHksIGludCBsZXZlbCwKIAkJICAgIGdmbl90IGdmbiwgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlLAotCQkgICAgYm9vbCBjYW5fdW5zeW5jKQorCQkgICAgYm9vbCBjYW5fdW5zeW5jLCBib29sIHJlc2V0X2hvc3RfcHJvdGVjdGlvbikKIHsKIAl1NjQgc3B0ZTsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3ODMsNiArMTgzMSw5IEBACiAJCXNwdGUgfD0ga3ZtX3g4Nl9vcHMtPmdldF9tdF9tYXNrKHZjcHUsIGdmbiwKIAkJCWt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAorCWlmIChyZXNldF9ob3N0X3Byb3RlY3Rpb24pCisJCXNwdGUgfD0gU1BURV9IT1NUX1dSSVRFQUJMRTsKKwogCXNwdGUgfD0gKHU2NClwZm4gPDwgUEFHRV9TSElGVDsKIAogCWlmICgocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQpAQCAtMTgyOCw3ICsxODc5LDggQEAKIAkJCSB1bnNpZ25lZCBwdF9hY2Nlc3MsIHVuc2lnbmVkIHB0ZV9hY2Nlc3MsCiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LAogCQkJIGludCAqcHR3cml0ZSwgaW50IGxldmVsLCBnZm5fdCBnZm4sCi0JCQkgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlKQorCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSwKKwkJCSBib29sIHJlc2V0X2hvc3RfcHJvdGVjdGlvbikKIHsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwogCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNwdGVwKTsKQEAgLTE4NjAsNyArMTkxMiw4IEBACiAJfQogCiAJaWYgKHNldF9zcHRlKHZjcHUsIHNwdGVwLCBwdGVfYWNjZXNzLCB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKLQkJICAgICAgZGlydHksIGxldmVsLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUpKSB7CisJCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlLAorCQkgICAgICByZXNldF9ob3N0X3Byb3RlY3Rpb24pKSB7CiAJCWlmICh3cml0ZV9mYXVsdCkKIAkJCSpwdHdyaXRlID0gMTsKIAkJa3ZtX3g4Nl9vcHMtPnRsYl9mbHVzaCh2Y3B1KTsKQEAgLTE4NzcsOCArMTkzMCw3IEBACiAJcGFnZV9oZWFkZXJfdXBkYXRlX3Nsb3QodmNwdS0+a3ZtLCBzcHRlcCwgZ2ZuKTsKIAlpZiAoIXdhc19ybWFwcGVkKSB7CiAJCXJtYXBfY291bnQgPSBybWFwX2FkZCh2Y3B1LCBzcHRlcCwgZ2ZuKTsKLQkJaWYgKCFpc19ybWFwX3NwdGUoKnNwdGVwKSkKLQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKIAkJaWYgKHJtYXBfY291bnQgPiBSTUFQX1JFQ1lDTEVfVEhSRVNIT0xEKQogCQkJcm1hcF9yZWN5Y2xlKHZjcHUsIHNwdGVwLCBnZm4pOwogCX0gZWxzZSB7CkBAIC0xOTA5LDcgKzE5NjEsNyBAQAogCQlpZiAoaXRlcmF0b3IubGV2ZWwgPT0gbGV2ZWwpIHsKIAkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBpdGVyYXRvci5zcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKIAkJCQkgICAgIDAsIHdyaXRlLCAxLCAmcHRfd3JpdGUsCi0JCQkJICAgICBsZXZlbCwgZ2ZuLCBwZm4sIGZhbHNlKTsKKwkJCQkgICAgIGxldmVsLCBnZm4sIHBmbiwgZmFsc2UsIHRydWUpOwogCQkJKyt2Y3B1LT5zdGF0LnBmX2ZpeGVkOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggZDJmZWM5Yy4uNzI1NThmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI3Myw5ICsyNzMsMTMgQEAKIAlpZiAobW11X25vdGlmaWVyX3JldHJ5KHZjcHUsIHZjcHUtPmFyY2gudXBkYXRlX3B0ZS5tbXVfc2VxKSkKIAkJcmV0dXJuOwogCWt2bV9nZXRfcGZuKHBmbik7CisJLyoKKwkgKiB3ZSBjYWxsIG1tdV9zZXRfc3B0ZSgpIHdpdGggcmVzZXRfaG9zdF9wcm90ZWN0aW9uID0gdHJ1ZSBiZWFjdXNlIHRoYXQKKwkgKiB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGZuIHdhcyBmZXRjaGVkIGZyb20gZ2V0X3VzZXJfcGFnZXMod3JpdGUgPSAxKS4KKwkgKi8KIAltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZSwgcGFnZS0+cm9sZS5hY2Nlc3MsIHB0ZV9hY2Nlc3MsIDAsIDAsCiAJCSAgICAgZ3B0ZSAmIFBUX0RJUlRZX01BU0ssIE5VTEwsIFBUX1BBR0VfVEFCTEVfTEVWRUwsCi0JCSAgICAgZ3B0ZV90b19nZm4oZ3B0ZSksIHBmbiwgdHJ1ZSk7CisJCSAgICAgZ3B0ZV90b19nZm4oZ3B0ZSksIHBmbiwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC0zMDgsNyArMzEyLDcgQEAKIAkJCQkgICAgIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAogCQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKIAkJCQkgICAgIHB0d3JpdGUsIGxldmVsLAotCQkJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSk7CisJCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlLCB0cnVlKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTU1OCw2ICs1NjIsNyBAQAogc3RhdGljIGludCBGTkFNRShzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CiAJaW50IGksIG9mZnNldCwgbnJfcHJlc2VudDsKKwlib29sIHJlc2V0X2hvc3RfcHJvdGVjdGlvbjsKIAogCW9mZnNldCA9IG5yX3ByZXNlbnQgPSAwOwogCkBAIC01OTUsOSArNjAwLDE2IEBACiAKIAkJbnJfcHJlc2VudCsrOwogCQlwdGVfYWNjZXNzID0gc3AtPnJvbGUuYWNjZXNzICYgRk5BTUUoZ3B0ZV9hY2Nlc3MpKHZjcHUsIGdwdGUpOworCQlpZiAoIShzcC0+c3B0W2ldICYgU1BURV9IT1NUX1dSSVRFQUJMRSkpIHsKKwkJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQkJcmVzZXRfaG9zdF9wcm90ZWN0aW9uID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IDE7CisJCX0KIAkJc2V0X3NwdGUodmNwdSwgJnNwLT5zcHRbaV0sIHB0ZV9hY2Nlc3MsIDAsIDAsCiAJCQkgaXNfZGlydHlfZ3B0ZShncHRlKSwgUFRfUEFHRV9UQUJMRV9MRVZFTCwgZ2ZuLAotCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSk7CisJCQkgc3B0ZV90b19wZm4oc3AtPnNwdFtpXSksIHRydWUsIGZhbHNlLAorCQkJIHJlc2V0X2hvc3RfcHJvdGVjdGlvbik7CiAJfQogCiAJcmV0dXJuICFucl9wcmVzZW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDk0NGNjOWMuLmMxNzQwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTc2Nyw2ICs3NjcsOCBAQAogCQlyZHRzY2xsKHRzY190aGlzKTsKIAkJZGVsdGEgPSB2Y3B1LT5hcmNoLmhvc3RfdHNjIC0gdHNjX3RoaXM7CiAJCXN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICs9IGRlbHRhOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQlzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0ICs9IGRlbHRhOwogCQl2Y3B1LT5jcHUgPSBjcHU7CiAJCWt2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKIAkJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwpAQCAtMjA1NywxMCArMjA1OSwxNCBAQAogCiAJc3dpdGNoIChlY3gpIHsKIAljYXNlIE1TUl9JQTMyX1RTQzogewotCQl1NjQgdHNjOworCQl1NjQgdHNjX29mZnNldDsKIAotCQlyZHRzY2xsKHRzYyk7Ci0JCSpkYXRhID0gc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKyB0c2M7CisJCWlmIChpc19uZXN0ZWQoc3ZtKSkKKwkJCXRzY19vZmZzZXQgPSBzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0OworCQllbHNlCisJCQl0c2Nfb2Zmc2V0ID0gc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQ7CisKKwkJKmRhdGEgPSB0c2Nfb2Zmc2V0ICsgbmF0aXZlX3JlYWRfdHNjKCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1TUl9LNl9TVEFSOgpAQCAtMjE0NiwxMCArMjE1MiwxNyBAQAogCiAJc3dpdGNoIChlY3gpIHsKIAljYXNlIE1TUl9JQTMyX1RTQzogewotCQl1NjQgdHNjOworCQl1NjQgdHNjX29mZnNldCA9IGRhdGEgLSBuYXRpdmVfcmVhZF90c2MoKTsKKwkJdTY0IGdfdHNjX29mZnNldCA9IDA7CiAKLQkJcmR0c2NsbCh0c2MpOwotCQlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCA9IGRhdGEgLSB0c2M7CisJCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQkJZ190c2Nfb2Zmc2V0ID0gc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgLQorCQkJCSAgICAgICBzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0OworCQkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCA9IHRzY19vZmZzZXQ7CisJCX0KKworCQlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCA9IHRzY19vZmZzZXQgKyBnX3RzY19vZmZzZXQ7CisKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVNSX0s2X1NUQVI6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggZjM4MTIwMS4uZWQ1M2I0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtNzA5LDcgKzcwOSw3IEBACiAJaWYgKHZjcHUtPmNwdSAhPSBjcHUpIHsKIAkJdmNwdV9jbGVhcih2bXgpOwogCQlrdm1fbWlncmF0ZV90aW1lcnModmNwdSk7Ci0JCXZwaWRfc3luY192Y3B1X2FsbCh2bXgpOworCQlzZXRfYml0KEtWTV9SRVFfVExCX0ZMVVNILCAmdmNwdS0+cmVxdWVzdHMpOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlsaXN0X2FkZCgmdm14LT5sb2NhbF92Y3B1c19saW5rLAogCQkJICZwZXJfY3B1KHZjcHVzX29uX2NwdSwgY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggYmU0NTFlZTQ0Li5hZTA3ZDI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0xNTkxLDYgKzE1OTEsOCBAQAogCiAJaWYgKGNwdWlkLT5uZW50IDwgMSkKIAkJZ290byBvdXQ7CisJaWYgKGNwdWlkLT5uZW50ID4gS1ZNX01BWF9DUFVJRF9FTlRSSUVTKQorCQljcHVpZC0+bmVudCA9IEtWTV9NQVhfQ1BVSURfRU5UUklFUzsKIAlyID0gLUVOT01FTTsKIAljcHVpZF9lbnRyaWVzID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpICogY3B1aWQtPm5lbnQpOwogCWlmICghY3B1aWRfZW50cmllcykKQEAgLTE2OTAsNyArMTY5Miw3IEBACiAJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKIAogCXIgPSAtRUlOVkFMOwotCWlmICghYmFua19udW0pCisJaWYgKCFiYW5rX251bSB8fCBiYW5rX251bSA+PSBLVk1fTUFYX01DRV9CQU5LUykKIAkJZ290byBvdXQ7CiAJaWYgKG1jZ19jYXAgJiB+KEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCB8IDB4ZmYgfCAweGZmMDAwMCkpCiAJCWdvdG8gb3V0OwpAQCAtNDA0OSw3ICs0MDUxLDcgQEAKIAlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZHRhYmxlLmJhc2UgKyBpbmRleCo4LCBzZWdfZGVzYywgc2l6ZW9mKCpzZWdfZGVzYyksIHZjcHUpOwogfQogCi1zdGF0aWMgdTMyIGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7CiAJdTMyIGJhc2VfYWRkciA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDllNjA5MjAuLjg1ZjVkYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDkgQEAKICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwogICAgICAgICBsaWIteSArPSBzdHJzdHJfMzIubwogICAgICAgICBsaWIteSArPSBzZW1hcGhvcmVfMzIubyBzdHJpbmdfMzIubwotCitpZm5lcSAoJChDT05GSUdfWDg2X0NNUFhDSEc2NCkseSkKKyAgICAgICAgbGliLXkgKz0gY21weGNoZzhiX2VtdS5vCitlbmRpZgogICAgICAgICBsaWItJChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14XzMyLm8KIGVsc2UKICAgICAgICAgb2JqLXkgKz0gaW9fNjQubyBpb21hcF9jb3B5XzY0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jbXB4Y2hnOGJfZW11LlMgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGNiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICoJb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworCisudGV4dAorCisvKgorICogSW5wdXRzOgorICogJWVzaSA6IG1lbW9yeSBsb2NhdGlvbiB0byBjb21wYXJlCisgKiAlZWF4IDogbG93IDMyIGJpdHMgb2Ygb2xkIHZhbHVlCisgKiAlZWR4IDogaGlnaCAzMiBiaXRzIG9mIG9sZCB2YWx1ZQorICogJWVieCA6IGxvdyAzMiBiaXRzIG9mIG5ldyB2YWx1ZQorICogJWVjeCA6IGhpZ2ggMzIgYml0cyBvZiBuZXcgdmFsdWUKKyAqLworRU5UUlkoY21weGNoZzhiX2VtdSkKK0NGSV9TVEFSVFBST0MKKworIworIyBFbXVsYXRlICdjbXB4Y2hnOGIgKCVlc2kpJyBvbiBVUCBleGNlcHQgd2UgZG9uJ3QKKyMgc2V0IHRoZSB3aG9sZSBaRiB0aGluZyAoY2FsbGVyIHdpbGwganVzdCBjb21wYXJlCisjIGVheDplZHggd2l0aCB0aGUgZXhwZWN0ZWQgdmFsdWUpCisjCitjbXB4Y2hnOGJfZW11OgorCXB1c2hmbAorCWNsaQorCisJY21wbCAgKCVlc2kpLCAlZWF4CisJam5lIG5vdF9zYW1lCisJY21wbCA0KCVlc2kpLCAlZWR4CisJam5lIGhhbGZfc2FtZQorCisJbW92bCAlZWJ4LCAgKCVlc2kpCisJbW92bCAlZWN4LCA0KCVlc2kpCisKKwlwb3BmbAorCXJldAorCisgbm90X3NhbWU6CisJbW92bCAgKCVlc2kpLCAlZWF4CisgaGFsZl9zYW1lOgorCW1vdmwgNCglZXNpKSwgJWVkeAorCisJcG9wZmwKKwlyZXQKKworQ0ZJX0VORFBST0MKK0VORFBST0MoY21weGNoZzhiX2VtdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggOWI1YTlmNS4uMDY2MzBkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTEsOSArMSwxMCBAQAogb2JqLXkJOj0gIGluaXQubyBpbml0XyQoQklUUykubyBmYXVsdC5vIGlvcmVtYXAubyBleHRhYmxlLm8gcGFnZWF0dHIubyBtbWFwLm8gXAotCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubworCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubyBzZXR1cF9ueC5vCiAKICMgTWFrZSBzdXJlIF9fcGh5c19hZGRyIGhhcyBubyBzdGFja3Byb3RlY3Rvcgogbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiBDRkxBR1NfcGh5c2FkZHIubwkJOj0gJChub3N0YWNrcCkKK0NGTEFHU19zZXR1cF9ueC5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmotJChDT05GSUdfU01QKQkJKz0gdGxiLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IDA2MDcxMTkuLjczZmZkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI4LDY5ICsyOCw2IEBACiAjZW5kaWYKIDsKIAotaW50IG54X2VuYWJsZWQ7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCi1zdGF0aWMgaW50IGRpc2FibGVfbnggX19jcHVpbml0ZGF0YTsKLQotLyoKLSAqIG5vZXhlYyA9IG9ufG9mZgotICoKLSAqIENvbnRyb2wgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgZm9yIHByb2Nlc3Nlcy4KLSAqCi0gKiBvbiAgICAgIEVuYWJsZQotICogb2ZmICAgICBEaXNhYmxlCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG5vZXhlY19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKCFzdHIpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7Ci0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkaXNhYmxlX254ID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRpc2FibGVfbnggPSAxOwotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Ci0JfQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X254KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7Ci0KLQlpZiAoY3B1X2hhc19wYWUgJiYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+IDB4ODAwMDAwMDEpKSB7Ci0JCWNwdWlkKDB4ODAwMDAwMDEsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKLQotCQlpZiAoKHZbM10gJiAoMSA8PCAyMCkpICYmICFkaXNhYmxlX254KSB7Ci0JCQlyZG1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlsIHw9IEVGRVJfTlg7Ci0JCQl3cm1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlueF9lbmFibGVkID0gMTsKLQkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQl9Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbngodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotdm9pZCBfX2NwdWluaXQgY2hlY2tfZWZlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZWZlcjsKLQotCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0JaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCiAJCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IDMzNGU2M2MuLjJmZWI5YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTE3MCw4ICsxNzAsNyBAQAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBoeXNfYWRkciArIHNpemUpLAogCQkJCXByb3RfdmFsLCBuZXdfcHJvdF92YWwpOwotCQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gZXJyX2ZyZWVfbWVtdHlwZTsKIAkJfQogCQlwcm90X3ZhbCA9IG5ld19wcm90X3ZhbDsKIAl9CkBAIC0xOTcsMjYgKzE5NiwyNSBAQAogCSAqLwogCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKIAlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycl9mcmVlX21lbXR5cGU7CiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7CiAKLQlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwcm90X3ZhbCkpIHsKLQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCWZyZWVfdm1fYXJlYShhcmVhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkKKwkJZ290byBlcnJfZnJlZV9hcmVhOwogCi0JaWYgKGlvcmVtYXBfcGFnZV9yYW5nZSh2YWRkciwgdmFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIHByb3QpKSB7Ci0JCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCQlmcmVlX3ZtX2FyZWEoYXJlYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpCisJCWdvdG8gZXJyX2ZyZWVfYXJlYTsKIAogCXJldF9hZGRyID0gKHZvaWQgX19pb21lbSAqKSAodmFkZHIgKyBvZmZzZXQpOwogCW1taW90cmFjZV9pb3JlbWFwKHVuYWxpZ25lZF9waHlzX2FkZHIsIHVuYWxpZ25lZF9zaXplLCByZXRfYWRkcik7CiAKIAlyZXR1cm4gcmV0X2FkZHI7CitlcnJfZnJlZV9hcmVhOgorCWZyZWVfdm1fYXJlYShhcmVhKTsKK2Vycl9mcmVlX21lbXR5cGU6CisJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCA3MjU3Y2YzLi5lNzhjZDBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtODEsNiArODEsNyBAQAogdm9pZCBwYXRfaW5pdCh2b2lkKQogewogCXU2NCBwYXQ7CisJYm9vbCBib290X2NwdSA9ICFib290X3BhdF9zdGF0ZTsKIAogCWlmICghcGF0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTEyMiw4ICsxMjMsMTAgQEAKIAkJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgYm9vdF9wYXRfc3RhdGUpOwogCiAJd3Jtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKLQlwcmludGsoS0VSTl9JTkZPICJ4ODYgUEFUIGVuYWJsZWQ6IGNwdSAlZCwgb2xkIDB4JUx4LCBuZXcgMHglTHhcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CisKKwlpZiAoYm9vdF9jcHUpCisJCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CiB9CiAKICN1bmRlZiBQQVQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NldHVwX254LmMgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxM2Q4ZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vc2V0dXBfbnguYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKK2ludCBueF9lbmFibGVkOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQorc3RhdGljIGludCBkaXNhYmxlX254IF9fY3B1aW5pdGRhdGE7CisKKy8qCisgKiBub2V4ZWMgPSBvbnxvZmYKKyAqCisgKiBDb250cm9sIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzIGZvciBwcm9jZXNzZXMuCisgKgorICogb24gICAgICBFbmFibGUKKyAqIG9mZiAgICAgRGlzYWJsZQorICovCitzdGF0aWMgaW50IF9faW5pdCBub2V4ZWNfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXN0cm5jbXAoc3RyLCAib24iLCAyKSkgeworCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9OWDsKKwkJZGlzYWJsZV9ueCA9IDA7CisJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJvZmYiLCAzKSkgeworCQlkaXNhYmxlX254ID0gMTsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX05YOworCX0KKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2V4ZWMiLCBub2V4ZWNfc2V0dXApOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQordm9pZCBfX2luaXQgc2V0X254KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7CisKKwlpZiAoY3B1X2hhc19wYWUgJiYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+IDB4ODAwMDAwMDEpKSB7CisJCWNwdWlkKDB4ODAwMDAwMDEsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKKworCQlpZiAoKHZbM10gJiAoMSA8PCAyMCkpICYmICFkaXNhYmxlX254KSB7CisJCQlyZG1zcihNU1JfRUZFUiwgbCwgaCk7CisJCQlsIHw9IEVGRVJfTlg7CisJCQl3cm1zcihNU1JfRUZFUiwgbCwgaCk7CisJCQlueF9lbmFibGVkID0gMTsKKwkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOworCQl9CisJfQorfQorI2Vsc2UKK3ZvaWQgc2V0X254KHZvaWQpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3ZvaWQgX19jcHVpbml0IGNoZWNrX2VmZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVmZXI7CisKKwlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOworCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQorCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNTJlNjJlNS4uYjIyZDEzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgbGF0KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfbW1hcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMgYi9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jCmluZGV4IGI1MzIyNWQuLmUxMzNjZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMKKysrIGIvYXJjaC94ODYveGVuL2RlYnVnZnMuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHUzMl9hcnJheV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdTMyX2FycmF5X2ZvcHMgPSB7CiAJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JPSB1MzJfYXJyYXlfb3BlbiwKIAkucmVsZWFzZT0geGVuX2FycmF5X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggNTQ0ZWI3NC4uZGZiZjcwZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMTc4LDYgKzE3OCw3IEBACiBzdGF0aWMgdm9pZCB4ZW5fY3B1aWQodW5zaWduZWQgaW50ICpheCwgdW5zaWduZWQgaW50ICpieCwKIAkJICAgICAgdW5zaWduZWQgaW50ICpjeCwgdW5zaWduZWQgaW50ICpkeCkKIHsKKwl1bnNpZ25lZCBtYXNrZWJ4ID0gfjA7CiAJdW5zaWduZWQgbWFza2VjeCA9IH4wOwogCXVuc2lnbmVkIG1hc2tlZHggPSB+MDsKIApAQCAtMTg1LDkgKzE4NiwxNiBAQAogCSAqIE1hc2sgb3V0IGluY29udmVuaWVudCBmZWF0dXJlcywgdG8gdHJ5IGFuZCBkaXNhYmxlIGFzIG1hbnkKIAkgKiB1bnN1cHBvcnRlZCBrZXJuZWwgc3Vic3lzdGVtcyBhcyBwb3NzaWJsZS4KIAkgKi8KLQlpZiAoKmF4ID09IDEpIHsKKwlzd2l0Y2ggKCpheCkgeworCWNhc2UgMToKIAkJbWFza2VjeCA9IGNwdWlkX2xlYWYxX2VjeF9tYXNrOwogCQltYXNrZWR4ID0gY3B1aWRfbGVhZjFfZWR4X21hc2s7CisJCWJyZWFrOworCisJY2FzZSAweGI6CisJCS8qIFN1cHByZXNzIGV4dGVuZGVkIHRvcG9sb2d5IHN0dWZmICovCisJCW1hc2tlYnggPSAwOworCQlicmVhazsKIAl9CiAKIAlhc20oWEVOX0VNVUxBVEVfUFJFRklYICJjcHVpZCIKQEAgLTE5Nyw2ICsyMDUsNyBAQAogCQkgICI9ZCIgKCpkeCkKIAkJOiAiMCIgKCpheCksICIyIiAoKmN4KSk7CiAKKwkqYnggJj0gbWFza2VieDsKIAkqY3ggJj0gbWFza2VjeDsKIAkqZHggJj0gbWFza2VkeDsKIH0KQEAgLTEwNzUsNiArMTA4NCw4IEBACiAJICogU2V0IHVwIHNvbWUgcGFnZXRhYmxlIHN0YXRlIGJlZm9yZSBzdGFydGluZyB0byBzZXQgYW55IHB0ZXMuCiAJICovCiAKKwl4ZW5faW5pdF9tbXVfb3BzKCk7CisKIAkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KIAlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwogCWlmICgheGVuX2luaXRpYWxfZG9tYWluKCkpCkBAIC0xMDgyLDYgKzEwOTMsMTEgQEAKIAogCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX0lPTUFQOwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIFdvcmsgb3V0IGlmIHdlIHN1cHBvcnQgTlggKi8KKwljaGVja19lZmVyKCk7CisjZW5kaWYKKwogCXhlbl9zZXR1cF9mZWF0dXJlcygpOwogCiAJLyogR2V0IG1mbiBsaXN0ICovCkBAIC0xMDk0LDcgKzExMTAsNiBAQAogCSAqLwogCXhlbl9zZXR1cF9zdGFja3Byb3RlY3RvcigpOwogCi0JeGVuX2luaXRfbW11X29wcygpOwogCXhlbl9pbml0X2lycV9vcHMoKTsKIAl4ZW5faW5pdF9jcHVpZF9tYXNrKCk7CiAKQEAgLTExMjMsMTEgKzExMzgsNiBAQAogCiAJcGdkID0gKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2U7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogV29yayBvdXQgaWYgd2Ugc3VwcG9ydCBOWCAqLwotCWNoZWNrX2VmZXIoKTsKLSNlbmRpZgotCiAJLyogRG9uJ3QgZG8gdGhlIGZ1bGwgdmNwdV9pbmZvIHBsYWNlbWVudCBzdHVmZiB1bnRpbCB3ZSBoYXZlIGEKIAkgICBwb3NzaWJsZSBtYXAgYW5kIGEgbm9uLWR1bW15IHNoYXJlZF9pbmZvLiAqLwogCXBlcl9jcHUoeGVuX3ZjcHUsIDApID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCmluZGV4IDE5MDg1ZmYuLjE5ZjdkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwpAQCAtMTMsNiArMTMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDkyMWI2ZmYuLjliNTI2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNSw2ICsxNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CkBAIC0xMDcsNDEgKzEwOSwxOCBAQAogCiAgIC5maXh1cCAgIDogeyAqKC5maXh1cCkgfQogCi0gIC4gPSBBTElHTigxNik7Ci0KLSAgX19leF90YWJsZSA6IHsKLSAgICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICAgICooX19leF90YWJsZSkKLSAgICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0gIH0KLQorICBFWENFUFRJT05fVEFCTEUoMTYpCiAgIC8qIERhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUpOwogICBfZmRhdGEgPSAuOwotICAuZGF0YSA6Ci0gIHsKLSAgICBEQVRBX0RBVEEKLSAgICBDT05TVFJVQ1RPUlMKLSAgICAuID0gQUxJR04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFKTsKLSAgICAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotICB9Ci0KKyAgUldfREFUQV9TRUNUSU9OKFhDSEFMX0lDQUNIRV9MSU5FU0laRSwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsKIAotICAvKiBUaGUgaW5pdGlhbCB0YXNrICovCi0gIC4gPSBBTElHTig4MTkyKTsKLSAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQotCiAgIC8qIEluaXRpYWxpemF0aW9uIGNvZGUgYW5kIGRhdGE6ICovCiAKLSAgLiA9IEFMSUdOKDEgPDwgMTIpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLSAgCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9CisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAogICAuaW5pdC5kYXRhIDoKICAgewpAQCAtMTY4LDM2ICsxNDcsMTUgQEAKIAkJICAgLkRlYnVnSW50ZXJydXB0VmVjdG9yLnRleHQpOwogICAKICAgICBfX2Jvb3RfcmVsb2NfdGFibGVfZW5kID0gQUJTT0xVVEUoLikgOworCisgICAgSU5JVF9TRVRVUChYQ0hBTF9JQ0FDSEVfTElORVNJWkUpCisgICAgSU5JVF9DQUxMUworICAgIENPTl9JTklUQ0FMTAorICAgIFNFQ1VSSVRZX0lOSVRDQUxMCisgICAgSU5JVF9SQU1fRlMKICAgfQogCi0gIC4gPSBBTElHTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUpOwotCi0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0KLSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5pbml0Y2FsbC5pbml0IDogewotCUlOSVRDQUxMUwotICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLQotICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5jb25faW5pdGNhbGwuaW5pdCA6IHsgKiguY29uX2luaXRjYWxsLmluaXQpIH0KLSAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQotICBTRUNVUklUWV9JTklUCi0KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdHJhbWZzX3N0YXJ0ID0uOwotICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOwotI2VuZGlmCi0KLSAgUEVSQ1BVKDQwOTYpCi0KKyAgUEVSQ1BVKFBBR0VfU0laRSkKIAogICAvKiBXZSBuZWVkIHRoaXMgZHVtbXkgc2VnbWVudCBoZXJlICovCiAKQEAgLTI1MiwxNiArMjEwLDExIEBACiAJCSAgLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci5saXRlcmFsKQogCiAgIC4gPSAoTE9BREFERFIoIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IudGV4dCApICsgU0laRU9GKCAuRG91YmxlRXhjZXB0aW9uVmVjdG9yLnRleHQgKSArIDMpICYgfiAzOwotICAuID0gQUxJR04oMSA8PCAxMik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCiAgIF9faW5pdF9lbmQgPSAuOwogCi0gIC4gPSBBTElHTig4MTkyKTsKLQotICAvKiBCU1Mgc2VjdGlvbiAqLwotICBfYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyA6IHsgKiguYnNzLnBhZ2VfYWxpZ25lZCkgKiguYnNzKSB9Ci0gIF9ic3NfZW5kID0gLjsKKyAgQlNTX1NFQ1RJT04oMCwgODE5MiwgMCkKIAogICBfZW5kID0gLjsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWJhcnJpZXIuYyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKaW5kZXggNjU5M2FiMy4uODg3M2I5YiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWJhcnJpZXIuYworKysgYi9ibG9jay9ibGstYmFycmllci5jCkBAIC0zNTAsNiArMzUwLDcgQEAKIAogCWlmIChiaW8tPmJpX3ByaXZhdGUpCiAJCWNvbXBsZXRlKGJpby0+YmlfcHJpdmF0ZSk7CisJX19mcmVlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7CiAKIAliaW9fcHV0KGJpbyk7CiB9CkBAIC0zNzIsMzAgKzM3Myw1MCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAJaW50IHR5cGUgPSBmbGFncyAmIERJU0NBUkRfRkxfQkFSUklFUiA/CiAJCURJU0NBUkRfQkFSUklFUiA6IERJU0NBUkRfTk9CQVJSSUVSOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmICghcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKQorCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXdoaWxlIChucl9zZWN0cyAmJiAhcmV0KSB7Ci0JCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMCk7Ci0JCWlmICghYmlvKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXVuc2lnbmVkIGludCBzZWN0b3Jfc2l6ZSA9IHEtPmxpbWl0cy5sb2dpY2FsX2Jsb2NrX3NpemU7CisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzID0KKwkJCW1pbihxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycywgVUlOVF9NQVggPj4gOSk7CiAKKwkJYmlvID0gYmlvX2FsbG9jKGdmcF9tYXNrLCAxKTsKKwkJaWYgKCFiaW8pCisJCQlnb3RvIG91dDsKKwkJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CiAJCWJpby0+YmlfZW5kX2lvID0gYmxrZGV2X2Rpc2NhcmRfZW5kX2lvOwogCQliaW8tPmJpX2JkZXYgPSBiZGV2OwogCQlpZiAoZmxhZ3MgJiBESVNDQVJEX0ZMX1dBSVQpCiAJCQliaW8tPmJpX3ByaXZhdGUgPSAmd2FpdDsKIAotCQliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKKwkJLyoKKwkJICogQWRkIGEgemVyb2VkIG9uZS1zZWN0b3IgcGF5bG9hZCBhcyB0aGF0J3Mgd2hhdAorCQkgKiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgbmVlZC4gIElmIHdlJ2xsIGV2ZXIgbmVlZAorCQkgKiBtb3JlIHRoZSBpbnRlcmZhY2Ugd2lsbCBuZWVkIHJldmlzaXRpbmcuCisJCSAqLworCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0X2ZyZWVfYmlvOworCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgc2VjdG9yX3NpemUsIDApIDwgc2VjdG9yX3NpemUpCisJCQlnb3RvIG91dF9mcmVlX3BhZ2U7CiAKLQkJaWYgKG5yX3NlY3RzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpIDw8IDk7Ci0JCQlucl9zZWN0cyAtPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKLQkJCXNlY3RvciArPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKKwkJLyoKKwkJICogQW5kIG92ZXJyaWRlIHRoZSBiaW8gc2l6ZSAtIHRoZSB3YXkgZGlzY2FyZCB3b3JrcyB3ZQorCQkgKiB0b3VjaCBtYW55IG1vcmUgYmxvY2tzIG9uIGRpc2sgdGhhbiB0aGUgYWN0dWFsIHBheWxvYWQKKwkJICogbGVuZ3RoLgorCQkgKi8KKwkJaWYgKG5yX3NlY3RzID4gbWF4X2Rpc2NhcmRfc2VjdG9ycykgeworCQkJYmlvLT5iaV9zaXplID0gbWF4X2Rpc2NhcmRfc2VjdG9ycyA8PCA5OworCQkJbnJfc2VjdHMgLT0gbWF4X2Rpc2NhcmRfc2VjdG9yczsKKwkJCXNlY3RvciArPSBtYXhfZGlzY2FyZF9zZWN0b3JzOwogCQl9IGVsc2UgewogCQkJYmlvLT5iaV9zaXplID0gbnJfc2VjdHMgPDwgOTsKIAkJCW5yX3NlY3RzID0gMDsKQEAgLTQxNCw1ICs0MzUsMTEgQEAKIAkJYmlvX3B1dChiaW8pOwogCX0KIAlyZXR1cm4gcmV0Oworb3V0X2ZyZWVfcGFnZToKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK291dF9mcmVlX2JpbzoKKwliaW9fcHV0KGJpbyk7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07CiB9CiBFWFBPUlRfU1lNQk9MKGJsa2Rldl9pc3N1ZV9kaXNjYXJkKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDgxMzUyMjguLjcxZGE1MTEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImJsay5oIgogCiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JlbWFwKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoYmxvY2tfcnFfcmVtYXApOwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChibG9ja19iaW9fY29tcGxldGUpOwogCiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pOwpAQCAtMTAyOSw3ICsxMDMwLDcgQEAKIAlpZiAobm93ID09IHBhcnQtPnN0YW1wKQogCQlyZXR1cm47CiAKLQlpZiAocGFydC0+aW5fZmxpZ2h0KSB7CisJaWYgKHBhcnRfaW5fZmxpZ2h0KHBhcnQpKSB7CiAJCV9fcGFydF9zdGF0X2FkZChjcHUsIHBhcnQsIHRpbWVfaW5fcXVldWUsCiAJCQkJcGFydF9pbl9mbGlnaHQocGFydCkgKiAobm93IC0gcGFydC0+c3RhbXApKTsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgaW9fdGlja3MsIChub3cgLSBwYXJ0LT5zdGFtcCkpOwpAQCAtMTEyNCw3ICsxMTI1LDYgQEAKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RJU0NBUkQ7CiAJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkKIAkJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKLQkJcmVxLT5xLT5wcmVwYXJlX2Rpc2NhcmRfZm4ocmVxLT5xLCByZXEpOwogCX0gZWxzZSBpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKQogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfSEFSREJBUlJJRVI7CiAKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50IGZmID0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCWludCByd19mbGFnczsKIAotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKQEAgLTE0MzcsNyArMTQzNyw4IEBACiAJCQlnb3RvIGVuZF9pbzsKIAkJfQogCi0JCWlmICh1bmxpa2VseShucl9zZWN0b3JzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpKSB7CisJCWlmICh1bmxpa2VseSghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgJiYKKwkJCSAgICAgbnJfc2VjdG9ycyA+IHF1ZXVlX21heF9od19zZWN0b3JzKHEpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJiaW8gdG9vIGJpZyBkZXZpY2UgJXMgKCV1ID4gJXUpXG4iLAogCQkJICAgICAgIGJkZXZuYW1lKGJpby0+YmlfYmRldiwgYiksCiAJCQkgICAgICAgYmlvX3NlY3RvcnMoYmlvKSwKQEAgLTE0NzAsNyArMTQ3MSw3IEBACiAJCQlnb3RvIGVuZF9pbzsKIAogCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgJiYKLQkJICAgICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwkJICAgICFibGtfcXVldWVfZGlzY2FyZChxKSkgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIGVuZF9pbzsKIAkJfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA4MzQxM2ZmLi42NmQ0YWE4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtMzQsMjMgKzM0LDYgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3ByZXBfcnEpOwogCiAvKioKLSAqIGJsa19xdWV1ZV9zZXRfZGlzY2FyZCAtIHNldCBhIGRpc2NhcmRfc2VjdG9ycyBmdW5jdGlvbiBmb3IgcXVldWUKLSAqIEBxOgkJcXVldWUKLSAqIEBkZm46CXByZXBhcmVfZGlzY2FyZCBmdW5jdGlvbgotICoKLSAqIEl0J3MgcG9zc2libGUgZm9yIGEgcXVldWUgdG8gcmVnaXN0ZXIgYSBkaXNjYXJkIGNhbGxiYWNrIHdoaWNoIGlzIHVzZWQKLSAqIHRvIHRyYW5zZm9ybSBhIGRpc2NhcmQgcmVxdWVzdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGUKLSAqIGhhcmR3YXJlLiBJZiBub25lIGlzIHJlZ2lzdGVyZWQsIHRoZW4gZGlzY2FyZCByZXF1ZXN0cyBhcmUgZmFpbGVkCi0gKiB3aXRoICVFT1BOT1RTVVBQLgotICoKLSAqLwotdm9pZCBibGtfcXVldWVfc2V0X2Rpc2NhcmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHByZXBhcmVfZGlzY2FyZF9mbiAqZGZuKQotewotCXEtPnByZXBhcmVfZGlzY2FyZF9mbiA9IGRmbjsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3NldF9kaXNjYXJkKTsKLQotLyoqCiAgKiBibGtfcXVldWVfbWVyZ2VfYnZlYyAtIHNldCBhIG1lcmdlX2J2ZWMgZnVuY3Rpb24gZm9yIHF1ZXVlCiAgKiBAcToJCXF1ZXVlCiAgKiBAbWJmbjoJbWVyZ2VfYnZlY19mbgpAQCAtMTExLDcgKzk0LDkgQEAKIAlsaW0tPm1heF9od19zZWdtZW50cyA9IE1BWF9IV19TRUdNRU5UUzsKIAlsaW0tPnNlZ19ib3VuZGFyeV9tYXNrID0gQkxLX1NFR19CT1VOREFSWV9NQVNLOwogCWxpbS0+bWF4X3NlZ21lbnRfc2l6ZSA9IE1BWF9TRUdNRU5UX1NJWkU7Ci0JbGltLT5tYXhfc2VjdG9ycyA9IGxpbS0+bWF4X2h3X3NlY3RvcnMgPSBTQUZFX01BWF9TRUNUT1JTOworCWxpbS0+bWF4X3NlY3RvcnMgPSBCTEtfREVGX01BWF9TRUNUT1JTOworCWxpbS0+bWF4X2h3X3NlY3RvcnMgPSBJTlRfTUFYOworCWxpbS0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IFNBRkVfTUFYX1NFQ1RPUlM7CiAJbGltLT5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsaW0tPnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBsaW0tPmlvX21pbiA9IDUxMjsKIAlsaW0tPmJvdW5jZV9wZm4gPSAodW5zaWduZWQgbG9uZykoQkxLX0JPVU5DRV9BTlkgPj4gUEFHRV9TSElGVCk7CiAJbGltLT5hbGlnbm1lbnRfb2Zmc2V0ID0gMDsKQEAgLTE2NCw2ICsxNDksNyBAQAogCXEtPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcTsKIAogCWJsa19zZXRfZGVmYXVsdF9saW1pdHMoJnEtPmxpbWl0cyk7CisJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIFNBRkVfTUFYX1NFQ1RPUlMpOwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgYSBsb2NrLCBmYWxsIGJhY2sgdG8gb3VyIGVtYmVkZGVkCkBAIC0yNTQsNiArMjQwLDE4IEBACiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyk7CiAKIC8qKgorICogYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMgLSBzZXQgbWF4IHNlY3RvcnMgZm9yIGEgc2luZ2xlIGRpc2NhcmQKKyAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKKyAqIEBtYXhfZGlzY2FyZF9zZWN0b3JzOiBtYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIHRvIGRpc2NhcmQKKyAqKi8KK3ZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKQoreworCXEtPmxpbWl0cy5tYXhfZGlzY2FyZF9zZWN0b3JzID0gbWF4X2Rpc2NhcmRfc2VjdG9yczsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMpOworCisvKioKICAqIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyAtIHNldCBtYXggcGh5cyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCiAgKiBAbWF4X3NlZ21lbnRzOiAgbWF4IG51bWJlciBvZiBzZWdtZW50cwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCBiNzhjOWMzLi44YTZkODFhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiAJaWYgKHJldCkgewogCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOwogCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7CisJCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGlza190b19kZXYoZGlzaykpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNDY1LDExICs0NjYsMTEgQEAKIAlpZiAoV0FSTl9PTighcSkpCiAJCXJldHVybjsKIAotCWlmIChxLT5yZXF1ZXN0X2ZuKSB7CisJaWYgKHEtPnJlcXVlc3RfZm4pCiAJCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEpOwogCi0JCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZxLT5rb2JqKTsKLQkJa29iamVjdF9wdXQoJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKLQl9CisJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKKwlrb2JqZWN0X2RlbCgmcS0+a29iaik7CisJYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhkaXNrX3RvX2RldihkaXNrKSk7CisJa29iamVjdF9wdXQoJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10YWcuYyBiL2Jsb2NrL2Jsay10YWcuYwppbmRleCAyZTVjZmViLi42YjBmNTJjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGFnLmMKKysrIGIvYmxvY2svYmxrLXRhZy5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJbWF4X2RlcHRoIC09IDI7CiAJCWlmICghbWF4X2RlcHRoKQogCQkJbWF4X2RlcHRoID0gMTsKLQkJaWYgKHEtPmluX2ZsaWdodFswXSA+IG1heF9kZXB0aCkKKwkJaWYgKHEtPmluX2ZsaWdodFtCTEtfUldfQVNZTkNdID4gbWF4X2RlcHRoKQogCQkJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCAxY2E4MTNiLi5hYTFlOTUzIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VbMl07CiAJdW5zaWduZWQgaW50IGNmcV9zbGljZV9hc3luY19ycTsKIAl1bnNpZ25lZCBpbnQgY2ZxX3NsaWNlX2lkbGU7CisJdW5zaWduZWQgaW50IGNmcV9sYXRlbmN5OwogCiAJc3RydWN0IGxpc3RfaGVhZCBjaWNfbGlzdDsKIApAQCAtMTgwLDYgKzE4MSw4IEBACiAJICogRmFsbGJhY2sgZHVtbXkgY2ZxcSBmb3IgZXh0cmVtZSBPT00gY29uZGl0aW9ucwogCSAqLwogCXN0cnVjdCBjZnFfcXVldWUgb29tX2NmcXE7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3N5bmNfcnE7CiB9OwogCiBlbnVtIGNmcXFfc3RhdGVfZmxhZ3MgewpAQCAtMTkzLDYgKzE5Niw3IEBACiAJQ0ZRX0NGUVFfRkxBR19zbGljZV9uZXcsCS8qIG5vIHJlcXVlc3RzIGRpc3BhdGNoZWQgaW4gc2xpY2UgKi8KIAlDRlFfQ0ZRUV9GTEFHX3N5bmMsCQkvKiBzeW5jaHJvbm91cyBxdWV1ZSAqLwogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGhhcyBkb25lIGEgY29vcCBqdW1wIG9mIHRoZSBxdWV1ZSAqLworCUNGUV9DRlFRX0ZMQUdfY29vcF9wcmVlbXB0LAkvKiBjb29wIHByZWVtcHQgKi8KIH07CiAKICNkZWZpbmUgQ0ZRX0NGUVFfRk5TKG5hbWUpCQkJCQkJXApAQCAtMjE5LDYgKzIyMyw3IEBACiBDRlFfQ0ZRUV9GTlMoc2xpY2VfbmV3KTsKIENGUV9DRlFRX0ZOUyhzeW5jKTsKIENGUV9DRlFRX0ZOUyhjb29wKTsKK0NGUV9DRlFRX0ZOUyhjb29wX3ByZWVtcHQpOwogI3VuZGVmIENGUV9DRlFRX0ZOUwogCiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKQEAgLTIyNyw3ICsyMzIsNyBAQAogCWJsa19hZGRfdHJhY2VfbXNnKChjZnFkKS0+cXVldWUsICJjZnEgIiBmbXQsICMjYXJncykKIAogc3RhdGljIHZvaWQgY2ZxX2Rpc3BhdGNoX2luc2VydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLXN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqLCBpbnQsCitzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKiwgYm9vbCwKIAkJCQkgICAgICAgc3RydWN0IGlvX2NvbnRleHQgKiwgZ2ZwX3QpOwogc3RhdGljIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ZxX2NpY19sb29rdXAoc3RydWN0IGNmcV9kYXRhICosCiAJCQkJCQlzdHJ1Y3QgaW9fY29udGV4dCAqKTsKQEAgLTIzOCwyNyArMjQzLDI0IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9xdWV1ZSAqY2ljX3RvX2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCi0JCQkJCSAgICBpbnQgaXNfc3luYykKKwkJCQkJICAgIGJvb2wgaXNfc3luYykKIHsKLQlyZXR1cm4gY2ljLT5jZnFxWyEhaXNfc3luY107CisJcmV0dXJuIGNpYy0+Y2ZxcVtpc19zeW5jXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNpY19zZXRfY2ZxcShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYywKLQkJCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBpbnQgaXNfc3luYykKKwkJCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBib29sIGlzX3N5bmMpCiB7Ci0JY2ljLT5jZnFxWyEhaXNfc3luY10gPSBjZnFxOworCWNpYy0+Y2ZxcVtpc19zeW5jXSA9IGNmcXE7CiB9CiAKIC8qCiAgKiBXZSByZWdhcmQgYSByZXF1ZXN0IGFzIFNZTkMsIGlmIGl0J3MgZWl0aGVyIGEgcmVhZCBvciBoYXMgdGhlIFNZTkMgYml0CiAgKiBzZXQgKGluIHdoaWNoIGNhc2UgaXQgY291bGQgYWxzbyBiZSBkaXJlY3QgV1JJVEUpLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGlubGluZSBib29sIGNmcV9iaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOwogfQogCiAvKgpAQCAtMjg1LDcgKzI4Nyw3IEBACiAgKiBpZiBhIHF1ZXVlIGlzIG1hcmtlZCBzeW5jIGFuZCBoYXMgc3luYyBpbyBxdWV1ZWQuIEEgc3luYyBxdWV1ZSB3aXRoIGFzeW5jCiAgKiBpbyBvbmx5LCBzaG91bGQgbm90IGdldCBmdWxsIHN5bmMgc2xpY2UgbGVuZ3RoLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjZnFfcHJpb19zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBzeW5jLAorc3RhdGljIGlubGluZSBpbnQgY2ZxX3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIHN5bmMsCiAJCQkJIHVuc2lnbmVkIHNob3J0IHByaW8pCiB7CiAJY29uc3QgaW50IGJhc2Vfc2xpY2UgPSBjZnFkLT5jZnFfc2xpY2Vbc3luY107CkBAIC0zMTMsNyArMzE1LDcgQEAKICAqIGlzbid0IHZhbGlkIHVudGlsIHRoZSBmaXJzdCByZXF1ZXN0IGZyb20gdGhlIGRpc3BhdGNoIGlzIGFjdGl2YXRlZAogICogYW5kIHRoZSBzbGljZSB0aW1lIHNldC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX3NsaWNlX3VzZWQoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfc2xpY2VfdXNlZChzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCiAJCXJldHVybiAwOwpAQCAtNDg4LDcgKzQ5MCw3IEBACiAgKiB3ZSB3aWxsIHNlcnZpY2UgdGhlIHF1ZXVlcy4KICAqLwogc3RhdGljIHZvaWQgY2ZxX3NlcnZpY2VfdHJlZV9hZGQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJCSBpbnQgYWRkX2Zyb250KQorCQkJCSBib29sIGFkZF9mcm9udCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CiAJc3RydWN0IGNmcV9xdWV1ZSAqX19jZnFxOwpAQCAtNTA0LDExICs1MDYsMjAgQEAKIAkJfSBlbHNlCiAJCQlyYl9rZXkgKz0gamlmZmllczsKIAl9IGVsc2UgaWYgKCFhZGRfZnJvbnQpIHsKKwkJLyoKKwkJICogR2V0IG91ciByYiBrZXkgb2Zmc2V0LiBTdWJ0cmFjdCBhbnkgcmVzaWR1YWwgc2xpY2UKKwkJICogdmFsdWUgY2FycmllZCBmcm9tIGxhc3Qgc2VydmljZS4gQSBuZWdhdGl2ZSByZXNpZAorCQkgKiBjb3VudCBpbmRpY2F0ZXMgc2xpY2Ugb3ZlcnJ1biwgYW5kIHRoaXMgc2hvdWxkIHBvc2l0aW9uCisJCSAqIHRoZSBuZXh0IHNlcnZpY2UgdGltZSBmdXJ0aGVyIGF3YXkgaW4gdGhlIHRyZWUuCisJCSAqLwogCQlyYl9rZXkgPSBjZnFfc2xpY2Vfb2Zmc2V0KGNmcWQsIGNmcXEpICsgamlmZmllczsKLQkJcmJfa2V5ICs9IGNmcXEtPnNsaWNlX3Jlc2lkOworCQlyYl9rZXkgLT0gY2ZxcS0+c2xpY2VfcmVzaWQ7CiAJCWNmcXEtPnNsaWNlX3Jlc2lkID0gMDsKLQl9IGVsc2UKLQkJcmJfa2V5ID0gMDsKKwl9IGVsc2UgeworCQlyYl9rZXkgPSAtSFo7CisJCV9fY2ZxcSA9IGNmcV9yYl9maXJzdCgmY2ZxZC0+c2VydmljZV90cmVlKTsKKwkJcmJfa2V5ICs9IF9fY2ZxcSA/IF9fY2ZxcS0+cmJfa2V5IDogamlmZmllczsKKwl9CiAKIAlpZiAoIVJCX0VNUFRZX05PREUoJmNmcXEtPnJiX25vZGUpKSB7CiAJCS8qCkBAIC01NDIsNyArNTUzLDcgQEAKIAkJCW4gPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkgPiBjZnFfY2xhc3NfaWRsZShfX2NmcXEpKQogCQkJbiA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZSBpZiAocmJfa2V5IDwgX19jZnFxLT5yYl9rZXkpCisJCWVsc2UgaWYgKHRpbWVfYmVmb3JlKHJiX2tleSwgX19jZnFxLT5yYl9rZXkpKQogCQkJbiA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlCiAJCQluID0gJigqcCktPnJiX3JpZ2h0OwpAQCAtODIyLDggKzgzMywxMCBAQAogCSAqIHJlcG9zaXRpb24gaW4gZmlmbyBpZiBuZXh0IGlzIG9sZGVyIHRoYW4gcnEKIAkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJnJxLT5xdWV1ZWxpc3QpICYmICFsaXN0X2VtcHR5KCZuZXh0LT5xdWV1ZWxpc3QpICYmCi0JICAgIHRpbWVfYmVmb3JlKG5leHQtPnN0YXJ0X3RpbWUsIHJxLT5zdGFydF90aW1lKSkKKwkgICAgdGltZV9iZWZvcmUocnFfZmlmb190aW1lKG5leHQpLCBycV9maWZvX3RpbWUocnEpKSkgewogCQlsaXN0X21vdmUoJnJxLT5xdWV1ZWxpc3QsICZuZXh0LT5xdWV1ZWxpc3QpOworCQlycV9zZXRfZmlmb190aW1lKHJxLCBycV9maWZvX3RpbWUobmV4dCkpOworCX0KIAogCWNmcV9yZW1vdmVfcmVxdWVzdChuZXh0KTsKIH0KQEAgLTgzOSw3ICs4NTIsNyBAQAogCSAqIERpc2FsbG93IG1lcmdlIG9mIGEgc3luYyBiaW8gaW50byBhbiBhc3luYyByZXF1ZXN0LgogCSAqLwogCWlmIChjZnFfYmlvX3N5bmMoYmlvKSAmJiAhcnFfaXNfc3luYyhycSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIExvb2t1cCB0aGUgY2ZxcSB0aGF0IHRoaXMgYmlvIHdpbGwgYmUgcXVldWVkIHdpdGguIEFsbG93CkBAIC04NDcsMTMgKzg2MCwxMCBAQAogCSAqLwogCWNpYyA9IGNmcV9jaWNfbG9va3VwKGNmcWQsIGN1cnJlbnQtPmlvX2NvbnRleHQpOwogCWlmICghY2ljKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJY2ZxcSA9IGNpY190b19jZnFxKGNpYywgY2ZxX2Jpb19zeW5jKGJpbykpOwotCWlmIChjZnFxID09IFJRX0NGUVEocnEpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOworCXJldHVybiBjZnFxID09IFJRX0NGUVEocnEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NmcV9zZXRfYWN0aXZlX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKQEAgLTg4MSw3ICs4OTEsNyBAQAogICovCiBzdGF0aWMgdm9pZAogX19jZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCSAgICBpbnQgdGltZWRfb3V0KQorCQkgICAgYm9vbCB0aW1lZF9vdXQpCiB7CiAJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJzbGljZSBleHBpcmVkIHQ9JWQiLCB0aW1lZF9vdXQpOwogCkBAIC05MDksNyArOTE5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCB0aW1lZF9vdXQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIHRpbWVkX291dCkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY2ZxZC0+YWN0aXZlX3F1ZXVlOwogCkBAIC05MzcsMTAgKzk0NywxMyBAQAogewogCWlmICghY2ZxcSkgewogCQljZnFxID0gY2ZxX2dldF9uZXh0X3F1ZXVlKGNmcWQpOwotCQlpZiAoY2ZxcSkKKwkJaWYgKGNmcXEgJiYgIWNmcV9jZnFxX2Nvb3BfcHJlZW1wdChjZnFxKSkKIAkJCWNmcV9jbGVhcl9jZnFxX2Nvb3AoY2ZxcSk7CiAJfQogCisJaWYgKGNmcXEpCisJCWNmcV9jbGVhcl9jZnFxX2Nvb3BfcHJlZW1wdChjZnFxKTsKKwogCV9fY2ZxX3NldF9hY3RpdmVfcXVldWUoY2ZxZCwgY2ZxcSk7CiAJcmV0dXJuIGNmcXE7CiB9CkBAIC0xMDIxLDcgKzEwMzQsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2Nsb3NlX2Nvb3BlcmF0b3Ioc3RydWN0IGNmcV9kYXRhICpjZnFkLAogCQkJCQkgICAgICBzdHJ1Y3QgY2ZxX3F1ZXVlICpjdXJfY2ZxcSwKLQkJCQkJICAgICAgaW50IHByb2JlKQorCQkJCQkgICAgICBib29sIHByb2JlKQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAKQEAgLTEwODUsNiArMTA5OCwxNSBAQAogCWlmICghY2ljIHx8ICFhdG9taWNfcmVhZCgmY2ljLT5pb2MtPm5yX3Rhc2tzKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBJZiBvdXIgYXZlcmFnZSB0aGluayB0aW1lIGlzIGxhcmdlciB0aGFuIHRoZSByZW1haW5pbmcgdGltZQorCSAqIHNsaWNlLCB0aGVuIGRvbid0IGlkbGUuIFRoaXMgYXZvaWRzIG92ZXJydW5uaW5nIHRoZSBhbGxvdHRlZAorCSAqIHRpbWUgc2xpY2UuCisJICovCisJaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpICYmCisJICAgIChjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzIDwgY2ljLT50dGltZV9tZWFuKSkKKwkJcmV0dXJuOworCiAJY2ZxX21hcmtfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7CiAKIAkvKgpAQCAtMTEyNCw5ICsxMTQ2LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpjZnFfY2hlY2tfZmlmbyhzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewotCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGNmcXEtPmNmcWQ7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCBmaWZvOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IE5VTEw7CiAKIAlpZiAoY2ZxX2NmcXFfZmlmb19leHBpcmUoY2ZxcSkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTEzNiwxMyArMTE1NiwxMSBAQAogCWlmIChsaXN0X2VtcHR5KCZjZnFxLT5maWZvKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmaWZvID0gY2ZxX2NmcXFfc3luYyhjZnFxKTsKIAlycSA9IHJxX2VudHJ5X2ZpZm8oY2ZxcS0+Zmlmby5uZXh0KTsKLQotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBycS0+c3RhcnRfdGltZSArIGNmcWQtPmNmcV9maWZvX2V4cGlyZVtmaWZvXSkpCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHJxX2ZpZm9fdGltZShycSkpKQogCQlycSA9IE5VTEw7CiAKLQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgImZpZm89JXAiLCBycSk7CisJY2ZxX2xvZ19jZnFxKGNmcXEtPmNmcWQsIGNmcXEsICJmaWZvPSVwIiwgcnEpOwogCXJldHVybiBycTsKIH0KIApAQCAtMTI0MywxNiArMTI2MSw4MyBAQAogCXJldHVybiBkaXNwYXRjaGVkOwogfQogCitzdGF0aWMgYm9vbCBjZnFfbWF5X2Rpc3BhdGNoKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3sKKwl1bnNpZ25lZCBpbnQgbWF4X2Rpc3BhdGNoOworCisJLyoKKwkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTworCSAqLworCWlmIChjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJiBjZnFkLT5ycV9pbl9kcml2ZXJbQkxLX1JXX0FTWU5DXSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAorCSAqLworCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CisJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQorCQltYXhfZGlzcGF0Y2ggPSAxOworCisJLyoKKwkgKiBEb2VzIHRoaXMgY2ZxcSBhbHJlYWR5IGhhdmUgdG9vIG11Y2ggSU8gaW4gZmxpZ2h0PworCSAqLworCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IG1heF9kaXNwYXRjaCkgeworCQkvKgorCQkgKiBpZGxlIHF1ZXVlIG11c3QgYWx3YXlzIG9ubHkgaGF2ZSBhIHNpbmdsZSBJTyBpbiBmbGlnaHQKKwkJICovCisJCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCisJCSAqLworCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFNvbGUgcXVldWUgdXNlciwgYWxsb3cgYmlnZ2VyIHNsaWNlCisJCSAqLworCQltYXhfZGlzcGF0Y2ggKj0gNDsKKwl9CisKKwkvKgorCSAqIEFzeW5jIHF1ZXVlcyBtdXN0IHdhaXQgYSBiaXQgYmVmb3JlIGJlaW5nIGFsbG93ZWQgZGlzcGF0Y2guCisJICogV2UgYWxzbyByYW1wIHVwIHRoZSBkaXNwYXRjaCBkZXB0aCBncmFkdWFsbHkgZm9yIGFzeW5jIElPLAorCSAqIGJhc2VkIG9uIHRoZSBsYXN0IHN5bmMgSU8gd2Ugc2VydmljZWQKKwkgKi8KKwlpZiAoIWNmcV9jZnFxX3N5bmMoY2ZxcSkgJiYgY2ZxZC0+Y2ZxX2xhdGVuY3kpIHsKKwkJdW5zaWduZWQgbG9uZyBsYXN0X3N5bmMgPSBqaWZmaWVzIC0gY2ZxZC0+bGFzdF9lbmRfc3luY19ycTsKKwkJdW5zaWduZWQgaW50IGRlcHRoOworCisJCWRlcHRoID0gbGFzdF9zeW5jIC8gY2ZxZC0+Y2ZxX3NsaWNlWzFdOworCQlpZiAoIWRlcHRoICYmICFjZnFxLT5kaXNwYXRjaGVkKQorCQkJZGVwdGggPSAxOworCQlpZiAoZGVwdGggPCBtYXhfZGlzcGF0Y2gpCisJCQltYXhfZGlzcGF0Y2ggPSBkZXB0aDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIGJlbG93IHRoZSBjdXJyZW50IG1heCwgYWxsb3cgYSBkaXNwYXRjaAorCSAqLworCXJldHVybiBjZnFxLT5kaXNwYXRjaGVkIDwgbWF4X2Rpc3BhdGNoOworfQorCiAvKgogICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gY2ZxcSwgbW92aW5nIHRoZW0gdG8gdGhlIHJlcXVlc3QgcXVldWUKICAqIGRpc3BhdGNoIGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3N0YXRpYyBib29sIGNmcV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKIAlCVUdfT04oUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSk7CiAKKwlpZiAoIWNmcV9tYXlfZGlzcGF0Y2goY2ZxZCwgY2ZxcSkpCisJCXJldHVybiBmYWxzZTsKKwogCS8qCiAJICogZm9sbG93IGV4cGlyZWQgcGF0aCwgZWxzZSBnZXQgZmlyc3QgbmV4dCBhdmFpbGFibGUKIAkgKi8KQEAgLTEyNzEsNiArMTM1Niw4IEBACiAJCWF0b21pY19sb25nX2luYygmY2ljLT5pb2MtPnJlZmNvdW50KTsKIAkJY2ZxZC0+YWN0aXZlX2NpYyA9IGNpYzsKIAl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTEyODEsNyArMTM2OCw2IEBACiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKLQl1bnNpZ25lZCBpbnQgbWF4X2Rpc3BhdGNoOwogCiAJaWYgKCFjZnFkLT5idXN5X3F1ZXVlcykKIAkJcmV0dXJuIDA7CkBAIC0xMjk0LDQ4ICsxMzgwLDExIEBACiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTworCSAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIHRoaXMgY2ZxcSwgaWYgaXQgaXMgYWxsb3dlZAogCSAqLwotCWlmIChjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJiBjZnFkLT5ycV9pbl9kcml2ZXJbQkxLX1JXX0FTWU5DXSkKKwlpZiAoIWNmcV9kaXNwYXRjaF9yZXF1ZXN0KGNmcWQsIGNmcXEpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBhbiBhc3luYyBxdWV1ZSBhbmQgd2UgaGF2ZSBzeW5jIElPIGluIGZsaWdodCwgbGV0IGl0IHdhaXQKLQkgKi8KLQlpZiAoY2ZxZC0+c3luY19mbGlnaHQgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCXJldHVybiAwOwotCi0JbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07Ci0JaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQotCQltYXhfZGlzcGF0Y2ggPSAxOwotCi0JLyoKLQkgKiBEb2VzIHRoaXMgY2ZxcSBhbHJlYWR5IGhhdmUgdG9vIG11Y2ggSU8gaW4gZmxpZ2h0PwotCSAqLwotCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IG1heF9kaXNwYXRjaCkgewotCQkvKgotCQkgKiBpZGxlIHF1ZXVlIG11c3QgYWx3YXlzIG9ubHkgaGF2ZSBhIHNpbmdsZSBJTyBpbiBmbGlnaHQKLQkJICovCi0JCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJCXJldHVybiAwOwotCi0JCS8qCi0JCSAqIFdlIGhhdmUgb3RoZXIgcXVldWVzLCBkb24ndCBhbGxvdyBtb3JlIElPIGZyb20gdGhpcyBvbmUKLQkJICovCi0JCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA+IDEpCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiB3ZSBhcmUgdGhlIG9ubHkgcXVldWUsIGFsbG93IHVwIHRvIDQgdGltZXMgb2YgJ3F1YW50dW0nCi0JCSAqLwotCQlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSA0ICogbWF4X2Rpc3BhdGNoKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBEaXNwYXRjaCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNmcXEKLQkgKi8KLQljZnFfZGlzcGF0Y2hfcmVxdWVzdChjZnFkLCBjZnFxKTsKIAljZnFxLT5zbGljZV9kaXNwYXRjaCsrOwogCWNmcV9jbGVhcl9jZnFxX211c3RfZGlzcGF0Y2goY2ZxcSk7CiAKQEAgLTE2MzUsNyArMTY4NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9pbml0X2NmcXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJICBwaWRfdCBwaWQsIGludCBpc19zeW5jKQorCQkJICBwaWRfdCBwaWQsIGJvb2wgaXNfc3luYykKIHsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5yYl9ub2RlKTsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5wX25vZGUpOwpAQCAtMTY1NSw3ICsxNzA0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2ZpbmRfYWxsb2NfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgaXNfc3luYywKK2NmcV9maW5kX2FsbG9jX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLAogCQkgICAgIHN0cnVjdCBpb19jb250ZXh0ICppb2MsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsICpuZXdfY2ZxcSA9IE5VTEw7CkBAIC0xNzE5LDcgKzE3NjgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqCi1jZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGlzX3N5bmMsIHN0cnVjdCBpb19jb250ZXh0ICppb2MsCitjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCSAgICAgIGdmcF90IGdmcF9tYXNrKQogewogCWNvbnN0IGludCBpb3ByaW8gPSB0YXNrX2lvcHJpbyhpb2MpOwpAQCAtMTk1MSwxMCArMjAwMCwxMyBAQAogCWVuYWJsZV9pZGxlID0gb2xkX2lkbGUgPSBjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKIAogCWlmICghYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykgfHwgIWNmcWQtPmNmcV9zbGljZV9pZGxlIHx8Ci0JICAgIChjZnFkLT5od190YWcgJiYgQ0lDX1NFRUtZKGNpYykpKQorCSAgICAoIWNmcWQtPmNmcV9sYXRlbmN5ICYmIGNmcWQtPmh3X3RhZyAmJiBDSUNfU0VFS1koY2ljKSkpCiAJCWVuYWJsZV9pZGxlID0gMDsKIAllbHNlIGlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSkgewotCQlpZiAoY2ljLT50dGltZV9tZWFuID4gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCisJCXVuc2lnbmVkIGludCBzbGljZV9pZGxlID0gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGU7CisJCWlmIChzYW1wbGVfdmFsaWQoY2ljLT5zZWVrX3NhbXBsZXMpICYmIENJQ19TRUVLWShjaWMpKQorCQkJc2xpY2VfaWRsZSA9IG1zZWNzX3RvX2ppZmZpZXMoQ0ZRX01JTl9UVCk7CisJCWlmIChjaWMtPnR0aW1lX21lYW4gPiBzbGljZV9pZGxlKQogCQkJZW5hYmxlX2lkbGUgPSAwOwogCQllbHNlCiAJCQllbmFibGVfaWRsZSA9IDE7CkBAIC0xOTczLDcgKzIwMjUsNyBAQAogICogQ2hlY2sgaWYgbmV3X2NmcXEgc2hvdWxkIHByZWVtcHQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcXVldWUuIFJldHVybiAwIGZvcgogICogbm8gb3IgaWYgd2UgYXJlbid0IHN1cmUsIGEgMSB3aWxsIGNhdXNlIGEgcHJlZW1wdC4KICAqLwotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGNmcV9zaG91bGRfcHJlZW1wdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKm5ld19jZnFxLAogCQkgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC0xOTgxLDQ4ICsyMDMzLDU2IEBACiAKIAljZnFxID0gY2ZxZC0+YWN0aXZlX3F1ZXVlOwogCWlmICghY2ZxcSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChjZnFfc2xpY2VfdXNlZChjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJaWYgKGNmcV9jbGFzc19pZGxlKG5ld19jZnFxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBpZiB0aGUgbmV3IHJlcXVlc3QgaXMgc3luYywgYnV0IHRoZSBjdXJyZW50bHkgcnVubmluZyBxdWV1ZSBpcwogCSAqIG5vdCwgbGV0IHRoZSBzeW5jIHJlcXVlc3QgaGF2ZSBwcmlvcml0eS4KIAkgKi8KIAlpZiAocnFfaXNfc3luYyhycSkgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogU28gYm90aCBxdWV1ZXMgYXJlIHN5bmMuIExldCB0aGUgbmV3IHJlcXVlc3QgZ2V0IGRpc2sgdGltZSBpZgogCSAqIGl0J3MgYSBtZXRhZGF0YSByZXF1ZXN0IGFuZCB0aGUgY3VycmVudCBxdWV1ZSBpcyBkb2luZyByZWd1bGFyIElPLgogCSAqLwogCWlmIChycV9pc19tZXRhKHJxKSAmJiAhY2ZxcS0+bWV0YV9wZW5kaW5nKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCiAJICovCiAJaWYgKGNmcV9jbGFzc19ydChuZXdfY2ZxcSkgJiYgIWNmcV9jbGFzc19ydChjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJaWYgKCFjZnFkLT5hY3RpdmVfY2ljIHx8ICFjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIGlmIHRoaXMgcmVxdWVzdCBpcyBhcy1nb29kIGFzIG9uZSB3ZSB3b3VsZCBleHBlY3QgZnJvbSB0aGUKIAkgKiBjdXJyZW50IGNmcXEsIGxldCBpdCBwcmVlbXB0CiAJICovCi0JaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBycSkpCi0JCXJldHVybiAxOworCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpICYmICghY2ZxX2NmcXFfY29vcChuZXdfY2ZxcSkgfHwKKwkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPT0gMSkpIHsKKwkJLyoKKwkJICogTWFyayBuZXcgcXVldWUgY29vcF9wcmVlbXB0LCBzbyBpdHMgY29vcCBmbGFnIHdpbGwgbm90IGJlCisJCSAqIGNsZWFyZWQgd2hlbiBuZXcgcXVldWUgZ2V0cyBzY2hlZHVsZWQgYXQgdGhlIHZlcnkgZmlyc3QgdGltZQorCQkgKi8KKwkJY2ZxX21hcmtfY2ZxcV9jb29wX3ByZWVtcHQobmV3X2NmcXEpOworCQljZnFfbWFya19jZnFxX2Nvb3AobmV3X2NmcXEpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC0yMTA3LDYgKzIxNjcsNyBAQAogCiAJY2ZxX2FkZF9ycV9yYihycSk7CiAKKwlycV9zZXRfZmlmb190aW1lKHJxLCBqaWZmaWVzICsgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlW3JxX2lzX3N5bmMocnEpXSk7CiAJbGlzdF9hZGRfdGFpbCgmcnEtPnF1ZXVlbGlzdCwgJmNmcXEtPmZpZm8pOwogCiAJY2ZxX3JxX2VucXVldWVkKGNmcWQsIGNmcXEsIHJxKTsKQEAgLTIxNTcsOCArMjIxOCwxMCBAQAogCWlmIChjZnFfY2ZxcV9zeW5jKGNmcXEpKQogCQljZnFkLT5zeW5jX2ZsaWdodC0tOwogCi0JaWYgKHN5bmMpCisJaWYgKHN5bmMpIHsKIAkJUlFfQ0lDKHJxKS0+bGFzdF9lbmRfcmVxdWVzdCA9IG5vdzsKKwkJY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IG5vdzsKKwl9CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGFjdGl2ZSBxdWV1ZSwgY2hlY2sgaWYgaXQgbmVlZHMgdG8gYmUgZXhwaXJlZCwKQEAgLTIyODQsNyArMjM0Nyw3IEBACiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAJY29uc3QgaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOwotCWNvbnN0IGludCBpc19zeW5jID0gcnFfaXNfc3luYyhycSk7CisJY29uc3QgYm9vbCBpc19zeW5jID0gcnFfaXNfc3luYyhycSk7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNDgwLDggKzI1NDMsOSBAQAogCWNmcWQtPmNmcV9zbGljZVsxXSA9IGNmcV9zbGljZV9zeW5jOwogCWNmcWQtPmNmcV9zbGljZV9hc3luY19ycSA9IGNmcV9zbGljZV9hc3luY19ycTsKIAljZnFkLT5jZnFfc2xpY2VfaWRsZSA9IGNmcV9zbGljZV9pZGxlOworCWNmcWQtPmNmcV9sYXRlbmN5ID0gMTsKIAljZnFkLT5od190YWcgPSAxOwotCisJY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IGppZmZpZXM7CiAJcmV0dXJuIGNmcWQ7CiB9CiAKQEAgLTI1NDksNiArMjYxMyw3IEBACiBTSE9XX0ZVTkNUSU9OKGNmcV9zbGljZV9zeW5jX3Nob3csIGNmcWQtPmNmcV9zbGljZVsxXSwgMSk7CiBTSE9XX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19zaG93LCBjZnFkLT5jZnFfc2xpY2VbMF0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfcnFfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxLCAwKTsKK1NIT1dfRlVOQ1RJT04oY2ZxX2xvd19sYXRlbmN5X3Nob3csIGNmcWQtPmNmcV9sYXRlbmN5LCAwKTsKICN1bmRlZiBTSE9XX0ZVTkNUSU9OCiAKICNkZWZpbmUgU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgsIF9fQ09OVikJCQlcCkBAIC0yNTgwLDYgKzI2NDUsNyBAQAogU1RPUkVfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3N0b3JlLCAmY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxLCBVSU5UX01BWCwgMSk7CiBTVE9SRV9GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfcnFfc3RvcmUsICZjZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEsIDEsCiAJCVVJTlRfTUFYLCAwKTsKK1NUT1JFX0ZVTkNUSU9OKGNmcV9sb3dfbGF0ZW5jeV9zdG9yZSwgJmNmcWQtPmNmcV9sYXRlbmN5LCAwLCAxLCAwKTsKICN1bmRlZiBTVE9SRV9GVU5DVElPTgogCiAjZGVmaW5lIENGUV9BVFRSKG5hbWUpIFwKQEAgLTI1OTUsNiArMjY2MSw3IEBACiAJQ0ZRX0FUVFIoc2xpY2VfYXN5bmMpLAogCUNGUV9BVFRSKHNsaWNlX2FzeW5jX3JxKSwKIAlDRlFfQVRUUihzbGljZV9pZGxlKSwKKwlDRlFfQVRUUihsb3dfbGF0ZW5jeSksCiAJX19BVFRSX05VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKaW5kZXggNzg2NWEzNC4uOWJkMDg2YyAxMDA2NDQKLS0tIGEvYmxvY2svY29tcGF0X2lvY3RsLmMKKysrIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKQEAgLTIxLDYgKzIxLDExIEBACiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF9pbnRfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOwogfQogCitzdGF0aWMgaW50IGNvbXBhdF9wdXRfdWludCh1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlyZXR1cm4gcHV0X3VzZXIodmFsLCAoY29tcGF0X3VpbnRfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOworfQorCiBzdGF0aWMgaW50IGNvbXBhdF9wdXRfbG9uZyh1bnNpZ25lZCBsb25nIGFyZywgbG9uZyB2YWwpCiB7CiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF9sb25nX3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKQEAgLTczNCw2ICs3MzksMTQgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSERJT19HRVRHRU86CiAJCXJldHVybiBjb21wYXRfaGRpb19nZXRnZW8oZGlzaywgYmRldiwgY29tcGF0X3B0cihhcmcpKTsKKwljYXNlIEJMS1BCU1pHRVQ6CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLSU9NSU46CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X2lvX21pbihiZGV2KSk7CisJY2FzZSBCTEtJT09QVDoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfdWludChhcmcsIGJkZXZfaW9fb3B0KGJkZXYpKTsKKwljYXNlIEJMS0FMSUdOT0ZGOgorCQlyZXR1cm4gY29tcGF0X3B1dF9pbnQoYXJnLCBiZGV2X2FsaWdubWVudF9vZmZzZXQoYmRldikpOwogCWNhc2UgQkxLRkxTQlVGOgogCWNhc2UgQkxLUk9TRVQ6CiAJY2FzZSBCTEtESVNDQVJEOgpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMTk3NWI2MS4uYTg0NzA0NiAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC0xMDU5LDkgKzEwNTksNyBAQAogCQlyZXR1cm4gY291bnQ7CiAKIAlzdHJsY3B5KGVsZXZhdG9yX25hbWUsIG5hbWUsIHNpemVvZihlbGV2YXRvcl9uYW1lKSk7Ci0Jc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSk7Ci0KLQllID0gZWxldmF0b3JfZ2V0KGVsZXZhdG9yX25hbWUpOworCWUgPSBlbGV2YXRvcl9nZXQoc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSkpOwogCWlmICghZSkgewogCQlwcmludGsoS0VSTl9FUlIgImVsZXZhdG9yOiB0eXBlICVzIG5vdCBmb3VuZFxuIiwgZWxldmF0b3JfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggZDNlNmI1OC4uMWY0ZDFkZSAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0xMzgsNiArMTM4LDExIEBACiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOwogfQogCitzdGF0aWMgaW50IHB1dF91aW50KHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKK30KKwogc3RhdGljIGludCBwdXRfbG9uZyh1bnNpZ25lZCBsb25nIGFyZywgbG9uZyB2YWwpCiB7CiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGxvbmcgX191c2VyICopYXJnKTsKQEAgLTI2MywxMCArMjY4LDE4IEBACiAJCXJldHVybiBwdXRfbG9uZyhhcmcsIChiZGktPnJhX3BhZ2VzICogUEFHRV9DQUNIRV9TSVpFKSAvIDUxMik7CiAJY2FzZSBCTEtST0dFVDoKIAkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X3JlYWRfb25seShiZGV2KSAhPSAwKTsKLQljYXNlIEJMS0JTWkdFVDogLyogZ2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKGNmLiBCTEtTU1pHRVQpICovCisJY2FzZSBCTEtCU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2Ugc29mdCBibG9jayBzaXplIChjZi4gQkxLU1NaR0VUKSAqLwogCQlyZXR1cm4gcHV0X2ludChhcmcsIGJsb2NrX3NpemUoYmRldikpOwotCWNhc2UgQkxLU1NaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIGhhcmR3YXJlIHNlY3RvciBzaXplICovCisJY2FzZSBCTEtTU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgbG9naWNhbCBibG9jayBzaXplICovCiAJCXJldHVybiBwdXRfaW50KGFyZywgYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLUEJTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBwaHlzaWNhbCBibG9jayBzaXplICovCisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShiZGV2KSk7CisJY2FzZSBCTEtJT01JTjoKKwkJcmV0dXJuIHB1dF91aW50KGFyZywgYmRldl9pb19taW4oYmRldikpOworCWNhc2UgQkxLSU9PUFQ6CisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfaW9fb3B0KGJkZXYpKTsKKwljYXNlIEJMS0FMSUdOT0ZGOgorCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfYWxpZ25tZW50X29mZnNldChiZGV2KSk7CiAJY2FzZSBCTEtTRUNUR0VUOgogCQlyZXR1cm4gcHV0X3VzaG9ydChhcmcsIHF1ZXVlX21heF9zZWN0b3JzKGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKSk7CiAJY2FzZSBCTEtSQVNFVDoKZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IGQ5YWE3MzMuLjBhNTVkYTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKaW5kZXggYjg4ZGI2ZC4uNmI1Y2M0ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKQEAgLTI2LDE0ICsyNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2FzeW5jX3R4Lmg+CiAKIC8qKgotICogc2NyaWJibGUgLSBzcGFjZSB0byBob2xkIHRocm93YXdheSBQIGJ1ZmZlciBmb3Igc3luY2hyb25vdXMgZ2VuX3N5bmRyb21lCisgKiBwcV9zY3JpYmJsZV9wYWdlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBvciBRIGJ1ZmZlciBmb3IKKyAqIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQogICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNjcmliYmxlOwotCi1zdGF0aWMgYm9vbCBpc19yYWlkNl96ZXJvX2Jsb2NrKHN0cnVjdCBwYWdlICpwKQotewotCXJldHVybiBwID09ICh2b2lkICopIHJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcHFfc2NyaWJibGVfcGFnZTsKIAogLyogdGhlIHN0cnVjdCBwYWdlICpibG9ja3NbXSBwYXJhbWV0ZXIgcGFzc2VkIHRvIGFzeW5jX2dlbl9zeW5kcm9tZSgpCiAgKiBhbmQgYXN5bmNfc3luZHJvbWVfdmFsKCkgY29udGFpbnMgdGhlICdQJyBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0CkBAIC04Myw3ICs3OSw3IEBACiAJICogc291cmNlcyBhbmQgdXBkYXRlIHRoZSBjb2VmZmljaWVudHMgYWNjb3JkaW5nbHkKIAkgKi8KIAlmb3IgKGkgPSAwLCBpZHggPSAwOyBpIDwgc3JjX2NudDsgaSsrKSB7Ci0JCWlmIChpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpCisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlkbWFfc3JjW2lkeF0gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIGJsb2Nrc1tpXSwgb2Zmc2V0LCBsZW4sCiAJCQkJCSAgICBETUFfVE9fREVWSUNFKTsKQEAgLTE2MCw5ICsxNTYsOSBAQAogCQlzcmNzID0gKHZvaWQgKiopIGJsb2NrczsKIAogCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7Ci0JCWlmIChpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKSB7CiAJCQlCVUdfT04oaSA+IGRpc2tzIC0gMyk7IC8qIFAgb3IgUSBjYW4ndCBiZSB6ZXJvICovCi0JCQlzcmNzW2ldID0gYmxvY2tzW2ldOworCQkJc3Jjc1tpXSA9ICh2b2lkKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CiAJCX0gZWxzZQogCQkJc3Jjc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pICsgb2Zmc2V0OwogCX0KQEAgLTE4NiwxMCArMTgyLDE0IEBACiAgKiBibG9ja3NbZGlza3MtMV0gdG8gTlVMTC4gIFdoZW4gUCBvciBRIGlzIG9taXR0ZWQgJ2xlbicgbXVzdCBiZSA8PQogICogUEFHRV9TSVpFIGFzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiB0aGlzIHNpemUgaXMgdXNlZCBpbiB0aGUKICAqIHN5bmNocm9ub3VzIHBhdGguICAnZGlza3MnIGFsd2F5cyBhY2NvdW50cyBmb3IgYm90aCBkZXN0aW5hdGlvbgotICogYnVmZmVycy4KKyAqIGJ1ZmZlcnMuICBJZiBhbnkgc291cmNlIGJ1ZmZlcnMgKGJsb2Nrc1tpXSB3aGVyZSBpIDwgZGlza3MgLSAyKSBhcmUKKyAqIHNldCB0byBOVUxMIHRob3NlIGJ1ZmZlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSByYWlkNl96ZXJvX3BhZ2UKKyAqIGluIHRoZSBzeW5jaHJvbm91cyBwYXRoIGFuZCBvbWl0dGVkIGluIHRoZSBoYXJkd2FyZS1hc3luY2hyb25vdXMKKyAqIHBhdGguCiAgKgogICogJ2Jsb2Nrcycgbm90ZTogaWYgc3VibWl0LT5zY3JpYmJsZSBpcyBOVUxMIHRoZW4gdGhlIGNvbnRlbnRzIG9mCi0gKiAnYmxvY2tzJyBtYXkgYmUgb3ZlcnJpZGRlbgorICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJ3cml0dGVuIHRvIHBlcmZvcm0gYWRkcmVzcyBjb252ZXJzaW9ucworICogKGRtYV9tYXBfcGFnZSgpIG9yIHBhZ2VfYWRkcmVzcygpKS4KICAqLwogc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKIGFzeW5jX2dlbl9zeW5kcm9tZShzdHJ1Y3QgcGFnZSAqKmJsb2NrcywgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGRpc2tzLApAQCAtMjI3LDExICsyMjcsMTEgQEAKIAlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAKIAlpZiAoIVAoYmxvY2tzLCBkaXNrcykpIHsKLQkJUChibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlQKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWlmICghUShibG9ja3MsIGRpc2tzKSkgewotCQlRKGJsb2NrcywgZGlza3MpID0gc2NyaWJibGU7CisJCVEoYmxvY2tzLCBkaXNrcykgPSBwcV9zY3JpYmJsZV9wYWdlOwogCQlCVUdfT04obGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFKTsKIAl9CiAJZG9fc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCBvZmZzZXQsIGRpc2tzLCBsZW4sIHN1Ym1pdCk7CkBAIC0yNjUsOCArMjY1LDEwIEBACiAJCQkJCQkgICAgICBsZW4pOwogCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UgPSBjaGFuID8gY2hhbi0+ZGV2aWNlIDogTlVMTDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCXVuc2lnbmVkIGNoYXIgY29lZnNbZGlza3MtMl07CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3MgPSBzdWJtaXQtPmNiX2ZuID8gRE1BX1BSRVBfSU5URVJSVVBUIDogMDsKIAlkbWFfYWRkcl90ICpkbWFfc3JjID0gTlVMTDsKKwlpbnQgc3JjX2NudCA9IDA7CiAKIAlCVUdfT04oZGlza3MgPCA0KTsKIApAQCAtMjg1LDIyICsyODcsMzIgQEAKIAkJCSBfX2Z1bmNfXywgZGlza3MsIGxlbik7CiAJCWlmICghUChibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1A7CisJCWVsc2UKKwkJCXBxWzBdID0gZG1hX21hcF9wYWdlKGRldiwgUChibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAkJaWYgKCFRKGJsb2NrcywgZGlza3MpKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUTsKKwkJZWxzZQorCQkJcHFbMV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBRKGJsb2NrcywgZGlza3MpLAorCQkJCQkgICAgIG9mZnNldCwgbGVuLAorCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCiAJCWlmIChzdWJtaXQtPmZsYWdzICYgQVNZTkNfVFhfRkVOQ0UpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfRkVOQ0U7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKQogCQkJaWYgKGxpa2VseShibG9ja3NbaV0pKSB7Ci0JCQkJQlVHX09OKGlzX3JhaWQ2X3plcm9fYmxvY2soYmxvY2tzW2ldKSk7Ci0JCQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKLQkJCQkJCQkgIG9mZnNldCwgbGVuLAotCQkJCQkJCSAgRE1BX1RPX0RFVklDRSk7CisJCQkJZG1hX3NyY1tzcmNfY250XSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKKwkJCQkJCQkJb2Zmc2V0LCBsZW4sCisJCQkJCQkJCURNQV9UT19ERVZJQ0UpOworCQkJCWNvZWZzW3NyY19jbnRdID0gcmFpZDZfZ2ZleHBbaV07CisJCQkJc3JjX2NudCsrOwogCQkJfQogCiAJCWZvciAoOzspIHsKIAkJCXR4ID0gZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfcHFfdmFsKGNoYW4sIHBxLCBkbWFfc3JjLAotCQkJCQkJCSAgICBkaXNrcyAtIDIsCi0JCQkJCQkJICAgIHJhaWQ2X2dmZXhwLAorCQkJCQkJCSAgICBzcmNfY250LAorCQkJCQkJCSAgICBjb2VmcywKIAkJCQkJCQkgICAgbGVuLCBwcXJlcywKIAkJCQkJCQkgICAgZG1hX2ZsYWdzKTsKIAkJCWlmIChsaWtlbHkodHgpKQpAQCAtMzczLDkgKzM4NSw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFzeW5jX3BxX2luaXQodm9pZCkKIHsKLQlzY3JpYmJsZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJcHFfc2NyaWJibGVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAKLQlpZiAoc2NyaWJibGUpCisJaWYgKHBxX3NjcmliYmxlX3BhZ2UpCiAJCXJldHVybiAwOwogCiAJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIHNwYXJlIHBhZ2VcbiIsIF9fZnVuY19fKTsKQEAgLTM4NSw3ICszOTcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXN5bmNfcHFfZXhpdCh2b2lkKQogewotCXB1dF9wYWdlKHNjcmliYmxlKTsKKwlwdXRfcGFnZShwcV9zY3JpYmJsZV9wYWdlKTsKIH0KIAogbW9kdWxlX2luaXQoYXN5bmNfcHFfaW5pdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCmluZGV4IDZkNzNkZGUuLjk0M2YyYWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCkBAIC0xMzEsOCArMTMxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzQoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNChpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmEsICpiOwpAQCAtMTQzLDggKzE0Myw4IEBACiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKIAotCXAgPSBibG9ja3NbNC0yXTsKLQlxID0gYmxvY2tzWzQtMV07CisJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKKwlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCiAJYSA9IGJsb2Nrc1tmYWlsYV07CiAJYiA9IGJsb2Nrc1tmYWlsYl07CkBAIC0xNzAsOCArMTcwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzUoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNShpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmcsICpkcCwgKmRxOwpAQCAtMTgxLDIxICsxODEsMjIgQEAKIAlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2JfZm4gPSBzdWJtaXQtPmNiX2ZuOwogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKGdvb2QpOwotCWludCBpOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCisJCQljb250aW51ZTsKIAkJaWYgKGkgPT0gZmFpbGEgfHwgaSA9PSBmYWlsYikKIAkJCWNvbnRpbnVlOwotCQllbHNlIHsKLQkJCWdvb2QgPSBpOwotCQkJYnJlYWs7Ci0JCX0KKwkJZ29vZCA9IGk7CisJCWdvb2Rfc3JjcysrOwogCX0KLQlCVUdfT04oaSA+PSAzKTsKKwlCVUdfT04oZ29vZF9zcmNzID4gMSk7CiAKLQlwID0gYmxvY2tzWzUtMl07Ci0JcSA9IGJsb2Nrc1s1LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAlnID0gYmxvY2tzW2dvb2RdOwogCiAJLyogQ29tcHV0ZSBzeW5kcm9tZSB3aXRoIHplcm8gZm9yIHRoZSBtaXNzaW5nIGRhdGEgcGFnZXMKQEAgLTI2MywxMCArMjY0LDEwIEBACiAJICogZGVsdGEgcCBhbmQgZGVsdGEgcQogCSAqLwogCWRwID0gYmxvY2tzW2ZhaWxhXTsKLQlibG9ja3NbZmFpbGFdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxhXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTJdID0gZHA7CiAJZHEgPSBibG9ja3NbZmFpbGJdOwotCWJsb2Nrc1tmYWlsYl0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGJdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAogCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLCBzY3JpYmJsZSk7CkBAIC0zMjMsNiArMzI0LDggQEAKIGFzeW5jX3JhaWQ2XzJkYXRhX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKIAkJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogeworCWludCBub25femVyb19zcmNzLCBpOworCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKIAkJc3dhcChmYWlsYSwgZmFpbGIpOwpAQCAtMzM0LDExICszMzcsMTMgQEAKIAkgKi8KIAlpZiAoIXN1Ym1pdC0+c2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCQllbHNlCisJCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOwogCiAJCXJhaWQ2XzJkYXRhX3JlY292KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBwdHJzKTsKIApAQCAtMzQ3LDE5ICszNTIsMzAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3dpdGNoIChkaXNrcykgewotCWNhc2UgNDoKKwlub25femVyb19zcmNzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMiAmJiBub25femVyb19zcmNzIDwgNDsgaSsrKQorCQlpZiAoYmxvY2tzW2ldKQorCQkJbm9uX3plcm9fc3JjcysrOworCXN3aXRjaCAobm9uX3plcm9fc3JjcykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgMiBzb3VyY2VzIC0gdGhlIGZhaWxlZCBkZXZpY2VzLiAqLworCQlCVUcoKTsKKworCWNhc2UgMjoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgemVybyBzb3VyY2UgcHEKIAkJICogb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMgY2FzZSksIHNvCi0JCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA0IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA0IGRpc2sgYXJyYXkgd2l0aAorCQkgKiBib3RoIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzQoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwotCWNhc2UgNToKKwkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNChkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCWNhc2UgMzoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgc2luZ2xlCiAJCSAqIHNvdXJjZSBwcSBvcGVyYXRpb24gKGluIGNvbnRyYXN0IHRvIHRoZSBzeW5jaHJvbm91cwotCQkgKiBjYXNlKSwgc28gZXhwbGljaXRseSBoYW5kbGUgdGhlIDUgZGlzayBzcGVjaWFsIGNhc2UKKwkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA1IGRpc2sKKwkJICogYXJyYXkgd2l0aCAyIG9mIDMgZGF0YSBkaXNrcyBtaXNzaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNShieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CisJCXJldHVybiBfXzJkYXRhX3JlY292XzUoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gX18yZGF0YV9yZWNvdl9uKGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJfQpAQCAtMzg1LDYgKzQwMSw3IEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAJc3RydWN0IHBhZ2UgKnNyY3NbMl07CiAKIAlwcl9kZWJ1ZygiJXM6IGRpc2tzOiAlZCBsZW46ICV6dVxuIiwgX19mdW5jX18sIGRpc2tzLCBieXRlcyk7CkBAIC0zOTQsMTEgKzQxMSwxMyBAQAogCSAqLwogCWlmICghc2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl9kYXRhcF9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBwdHJzKTsKIApAQCAtNDA3LDYgKzQyNiwyMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlnb29kX3NyY3MgPSAwOworCWdvb2QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKSB7CisJCWlmIChpID09IGZhaWxhKQorCQkJY29udGludWU7CisJCWlmIChibG9ja3NbaV0pIHsKKwkJCWdvb2QgPSBpOworCQkJZ29vZF9zcmNzKys7CisJCQlpZiAoZ29vZF9zcmNzID4gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlCVUdfT04oZ29vZF9zcmNzID09IDApOworCiAJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKIAlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCkBAIC00MTQsMTQgKzQ0NywxMyBAQAogCSAqIFVzZSB0aGUgZGVhZCBkYXRhIHBhZ2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGRlbHRhIHEKIAkgKi8KIAlkcSA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0xXSA9IGRxOwogCi0JLyogaW4gdGhlIDQgZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQotCSAqIG11bHRpcGxpY2F0aW9uCisJLyogaW4gdGhlIDQtZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQorCSAqIG11bHRpcGxpY2F0aW9uIHdpdGggdGhlIG9uZSBnb29kIGRhdGEgYmxvY2suCiAJICovCi0JaWYgKGRpc2tzID09IDQpIHsKLQkJaW50IGdvb2QgPSBmYWlsYSA9PSAwID8gMSA6IDA7CisJaWYgKGdvb2Rfc3JjcyA9PSAxKSB7CiAJCXN0cnVjdCBwYWdlICpnID0gYmxvY2tzW2dvb2RdOwogCiAJCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IGI0NTlhOTAuLjc5MTgyZGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTQ0LDIwICs0NCwyMyBAQAogCXZvaWQgKmNiX3BhcmFtX29yaWcgPSBzdWJtaXQtPmNiX3BhcmFtOwogCWVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3Nfb3JpZyA9IHN1Ym1pdC0+ZmxhZ3M7CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3M7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfZGVzdDsKIAogCS8qIG1hcCB0aGUgZGVzdCBiaWRyZWN0aW9uYWwgaW4gY2FzZSBpdCBpcyByZS11c2VkIGFzIGEgc291cmNlICovCiAJZG1hX2Rlc3QgPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIGRlc3QsIG9mZnNldCwgbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewogCQkvKiBvbmx5IG1hcCB0aGUgZGVzdCBvbmNlICovCisJCWlmICghc3JjX2xpc3RbaV0pCisJCQljb250aW51ZTsKIAkJaWYgKHVubGlrZWx5KHNyY19saXN0W2ldID09IGRlc3QpKSB7Ci0JCQlkbWFfc3JjW2ldID0gZG1hX2Rlc3Q7CisJCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX2Rlc3Q7CiAJCQljb250aW51ZTsKIAkJfQotCQlkbWFfc3JjW2ldID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAotCQkJCQkgIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV9zcmNbeG9yX3NyY19jbnQrK10gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIHNyY19saXN0W2ldLCBvZmZzZXQsCisJCQkJCQkgICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCX0KKwlzcmNfY250ID0geG9yX3NyY19jbnQ7CiAKIAl3aGlsZSAoc3JjX2NudCkgewogCQlzdWJtaXQtPmZsYWdzID0gZmxhZ3Nfb3JpZzsKQEAgLTEyMyw3ICsxMjYsNyBAQAogCSAgICBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlpbnQgaTsKLQlpbnQgeG9yX3NyY19jbnQ7CisJaW50IHhvcl9zcmNfY250ID0gMDsKIAlpbnQgc3JjX29mZiA9IDA7CiAJdm9pZCAqZGVzdF9idWY7CiAJdm9pZCAqKnNyY3M7CkBAIC0xMzUsOCArMTM4LDkgQEAKIAogCS8qIGNvbnZlcnQgdG8gYnVmZmVyIHBvaW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKLQkJc3Jjc1tpXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7Ci0KKwkJaWYgKHNyY19saXN0W2ldKQorCQkJc3Jjc1t4b3Jfc3JjX2NudCsrXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCS8qIHNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJZGVzdF9idWYgPSBwYWdlX2FkZHJlc3MoZGVzdCkgKyBvZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZGQ4NzI5ZC4uOTNkMmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTIxMSw2ICsyMTEsMTggQEAKIAlzZWxlY3QgQUNQSV9DT05UQUlORVIKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1IKKwl0cmlzdGF0ZSAiUHJvY2Vzc29yIEFnZ3JlZ2F0b3IiCisJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBYODYKKwloZWxwCisJICBBQ1BJIDQuMCBkZWZpbmVzIHByb2Nlc3NvciBBZ2dyZWdhdG9yLCB3aGljaCBlbmFibGVzIE9TIHRvIHBlcmZvcm0KKwkgIHNwZWNpZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKKwkgIHByb2Nlc3NvcnMgaW4gdGhlIHBsYXRmb3JtLiBDdXJyZW50bHkgb25seSBsb2dpY2FsIHByb2Nlc3NvciBpZGxpbmcKKwkgIGlzIGRlZmluZWQsIHdoaWNoIGlzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gVGhpcyBkcml2ZXIKKwkgIHN1cHBvcnRzIHRoZSBuZXcgZGV2aWNlLgorCiBjb25maWcgQUNQSV9USEVSTUFMCiAJdHJpc3RhdGUgIlRoZXJtYWwgWm9uZSIKIAlkZXBlbmRzIG9uIEFDUElfUFJPQ0VTU09SCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggODJjZDQ5ZC4uNzcwMjExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNjIsMyArNjIsNSBAQAogcHJvY2Vzc29yLXkJCQk6PSBwcm9jZXNzb3JfY29yZS5vIHByb2Nlc3Nvcl90aHJvdHRsaW5nLm8KIHByb2Nlc3Nvci15CQkJKz0gcHJvY2Vzc29yX2lkbGUubyBwcm9jZXNzb3JfdGhlcm1hbC5vCiBwcm9jZXNzb3ItJChDT05GSUdfQ1BVX0ZSRVEpCSs9IHByb2Nlc3Nvcl9wZXJmbGliLm8KKworb2JqLSQoQ09ORklHX0FDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1IpICs9IGFjcGlfcGFkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOThiOTY5MC4uYjZlZDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKIAkJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsCiAJCQkJCQkgICh1MzIpIGFjLT5zdGF0ZSk7CisJCWFjcGlfbm90aWZpZXJfY2FsbF9jaGFpbihkZXZpY2UsIGV2ZW50LCAodTMyKSBhYy0+c3RhdGUpOwogI2lmZGVmIENPTkZJR19BQ1BJX1NZU0ZTX1BPV0VSCiAJCWtvYmplY3RfdWV2ZW50KCZhYy0+Y2hhcmdlci5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiBhY3BpX3BhZC5jIEFDUEkgUHJvY2Vzc29yIEFnZ3JlZ2F0b3IgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfQ0xBU1MJInByb2Nlc3Nvcl9hZ2dyZWdhdG9yIgorI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0RFVklDRV9OQU1FICJQcm9jZXNzb3IgQWdncmVnYXRvciIKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9OT1RJRlkgMHg4MAorc3RhdGljIERFRklORV9NVVRFWChpc29sYXRlZF9jcHVzX2xvY2spOworCisjZGVmaW5lIE1XQUlUX1NVQlNUQVRFX01BU0sJKDB4ZikKKyNkZWZpbmUgTVdBSVRfQ1NUQVRFX01BU0sJKDB4ZikKKyNkZWZpbmUgTVdBSVRfU1VCU1RBVEVfU0laRQkoNCkKKyNkZWZpbmUgQ1BVSURfTVdBSVRfTEVBRiAoNSkKKyNkZWZpbmUgQ1BVSUQ1X0VDWF9FWFRFTlNJT05TX1NVUFBPUlRFRCAoMHgxKQorI2RlZmluZSBDUFVJRDVfRUNYX0lOVEVSUlVQVF9CUkVBSwkoMHgyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcG93ZXJfc2F2aW5nX213YWl0X2VheDsKK3N0YXRpYyB2b2lkIHBvd2VyX3NhdmluZ19td2FpdF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKwl1bnNpZ25lZCBpbnQgaGlnaGVzdF9jc3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBoaWdoZXN0X3N1YmNzdGF0ZSA9IDA7CisJaW50IGk7CisKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NV0FJVCkpCisJCXJldHVybjsKKwlpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCA8IENQVUlEX01XQUlUX0xFQUYpCisJCXJldHVybjsKKworCWNwdWlkKENQVUlEX01XQUlUX0xFQUYsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJaWYgKCEoZWN4ICYgQ1BVSUQ1X0VDWF9FWFRFTlNJT05TX1NVUFBPUlRFRCkgfHwKKwkgICAgIShlY3ggJiBDUFVJRDVfRUNYX0lOVEVSUlVQVF9CUkVBSykpCisJCXJldHVybjsKKworCWVkeCA+Pj0gTVdBSVRfU1VCU1RBVEVfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgNyAmJiBlZHg7IGkrKywgZWR4ID4+PSBNV0FJVF9TVUJTVEFURV9TSVpFKSB7CisJCWlmIChlZHggJiBNV0FJVF9TVUJTVEFURV9NQVNLKSB7CisJCQloaWdoZXN0X2NzdGF0ZSA9IGk7CisJCQloaWdoZXN0X3N1YmNzdGF0ZSA9IGVkeCAmIE1XQUlUX1NVQlNUQVRFX01BU0s7CisJCX0KKwl9CisJcG93ZXJfc2F2aW5nX213YWl0X2VheCA9IChoaWdoZXN0X2NzdGF0ZSA8PCBNV0FJVF9TVUJTVEFURV9TSVpFKSB8CisJCShoaWdoZXN0X3N1YmNzdGF0ZSAtIDEpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfT04sICZpKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCS8qCisJCSAqIEFNRCBGYW0xMGggVFNDIHdpbGwgdGljayBpbiBhbGwKKwkJICogQy9QL1MwL1MxIHN0YXRlcyB3aGVuIHRoaXMgYml0IGlzIHNldC4KKwkJICovCisJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpKQorCQkJcmV0dXJuOworCisJCS8qRkFMTCBUSFJPVUdIKi8KKwlkZWZhdWx0OgorCQkvKiBUU0MgY291bGQgaGFsdCBpbiBpZGxlLCBzbyBub3RpZnkgdXNlcnMgKi8KKwkJbWFya190c2NfdW5zdGFibGUoIlRTQyBoYWx0cyBpbiBpZGxlIik7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV93ZWlnaHRbTlJfQ1BVU107CitzdGF0aWMgaW50IHRza19pbl9jcHVbTlJfQ1BVU10gPSB7WzAgLi4uIE5SX0NQVVMtMV0gPSAtMX07CitzdGF0aWMgREVDTEFSRV9CSVRNQVAocGFkX2J1c3lfY3B1c19iaXRzLCBOUl9DUFVTKTsKK3N0YXRpYyB2b2lkIHJvdW5kX3JvYmluX2NwdSh1bnNpZ25lZCBpbnQgdHNrX2luZGV4KQoreworCXN0cnVjdCBjcHVtYXNrICpwYWRfYnVzeV9jcHVzID0gdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpOworCWNwdW1hc2tfdmFyX3QgdG1wOworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBtaW5fd2VpZ2h0ID0gLTEsIHByZWZlcnJlZF9jcHU7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXAsIEdGUF9LRVJORUwpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWNwdW1hc2tfY2xlYXIodG1wKTsKKwlmb3JfZWFjaF9jcHUoY3B1LCBwYWRfYnVzeV9jcHVzKQorCQljcHVtYXNrX29yKHRtcCwgdG1wLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpKTsKKwljcHVtYXNrX2FuZG5vdCh0bXAsIGNwdV9vbmxpbmVfbWFzaywgdG1wKTsKKwkvKiBhdm9pZCBIVCBzaWJpbGluZ3MgaWYgcG9zc2libGUgKi8KKwlpZiAoY3B1bWFza19lbXB0eSh0bXApKQorCQljcHVtYXNrX2FuZG5vdCh0bXAsIGNwdV9vbmxpbmVfbWFzaywgcGFkX2J1c3lfY3B1cyk7CisJaWYgKGNwdW1hc2tfZW1wdHkodG1wKSkgeworCQltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJCXJldHVybjsKKwl9CisJZm9yX2VhY2hfY3B1KGNwdSwgdG1wKSB7CisJCWlmIChjcHVfd2VpZ2h0W2NwdV0gPCBtaW5fd2VpZ2h0KSB7CisJCQltaW5fd2VpZ2h0ID0gY3B1X3dlaWdodFtjcHVdOworCQkJcHJlZmVycmVkX2NwdSA9IGNwdTsKKwkJfQorCX0KKworCWlmICh0c2tfaW5fY3B1W3Rza19pbmRleF0gIT0gLTEpCisJCWNwdW1hc2tfY2xlYXJfY3B1KHRza19pbl9jcHVbdHNrX2luZGV4XSwgcGFkX2J1c3lfY3B1cyk7CisJdHNrX2luX2NwdVt0c2tfaW5kZXhdID0gcHJlZmVycmVkX2NwdTsKKwljcHVtYXNrX3NldF9jcHUocHJlZmVycmVkX2NwdSwgcGFkX2J1c3lfY3B1cyk7CisJY3B1X3dlaWdodFtwcmVmZXJyZWRfY3B1XSsrOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YocHJlZmVycmVkX2NwdSkpOworfQorCitzdGF0aWMgdm9pZCBleGl0X3JvdW5kX3JvYmluKHVuc2lnbmVkIGludCB0c2tfaW5kZXgpCit7CisJc3RydWN0IGNwdW1hc2sgKnBhZF9idXN5X2NwdXMgPSB0b19jcHVtYXNrKHBhZF9idXN5X2NwdXNfYml0cyk7CisJY3B1bWFza19jbGVhcl9jcHUodHNrX2luX2NwdVt0c2tfaW5kZXhdLCBwYWRfYnVzeV9jcHVzKTsKKwl0c2tfaW5fY3B1W3Rza19pbmRleF0gPSAtMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpZGxlX3BjdCA9IDU7IC8qIHBlcmNlbnRhZ2UgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfcm9iaW5fdGltZSA9IDEwOyAvKiBzZWNvbmQgKi8KK3N0YXRpYyBpbnQgcG93ZXJfc2F2aW5nX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsuc2NoZWRfcHJpb3JpdHkgPSAxfTsKKwlpbnQgZG9fc2xlZXA7CisJdW5zaWduZWQgaW50IHRza19pbmRleCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisJdTY0IGxhc3RfamlmZmllcyA9IDA7CisKKwlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfUlIsICZwYXJhbSk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgY3B1OworCQl1NjQgZXhwaXJlX3RpbWU7CisKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCisJCS8qIHJvdW5kIHJvYmluIHRvIGNwdXMgKi8KKwkJaWYgKGxhc3RfamlmZmllcyArIHJvdW5kX3JvYmluX3RpbWUgKiBIWiA8IGppZmZpZXMpIHsKKwkJCWxhc3RfamlmZmllcyA9IGppZmZpZXM7CisJCQlyb3VuZF9yb2Jpbl9jcHUodHNrX2luZGV4KTsKKwkJfQorCisJCWRvX3NsZWVwID0gMDsKKworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAorCQkgKiBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKKworCQlleHBpcmVfdGltZSA9IGppZmZpZXMgKyBIWiAqICgxMDAgLSBpZGxlX3BjdCkgLyAxMDA7CisKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FTlRFUiwKKwkJCQkmY3B1KTsKKwkJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOworCisJCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CisJCQlzbXBfbWIoKTsKKwkJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQkJX19td2FpdChwb3dlcl9zYXZpbmdfbXdhaXRfZWF4LCAxKTsKKworCQkJc3RhcnRfY3JpdGljYWxfdGltaW5ncygpOworCQkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VYSVQsCisJCQkJJmNwdSk7CisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJCWlmIChqaWZmaWVzID4gZXhwaXJlX3RpbWUpIHsKKwkJCQlkb19zbGVlcCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOworCisJCS8qCisJCSAqIGN1cnJlbnQgc2NoZWRfcnQgaGFzIHRocmVzaG9sZCBmb3IgcnQgdGFzayBydW5uaW5nIHRpbWUuCisJCSAqIFdoZW4gYSBydCB0YXNrIHVzZXMgOTUlIENQVSB0aW1lLCB0aGUgcnQgdGhyZWFkIHdpbGwgYmUKKwkJICogc2NoZWR1bGVkIG91dCBmb3IgNSUgQ1BVIHRpbWUgdG8gbm90IHN0YXJ2ZSBvdGhlciB0YXNrcy4gQnV0CisJCSAqIHRoZSBtZWNoYW5pc20gb25seSB3b3JrcyB3aGVuIGFsbCBDUFVzIGhhdmUgUlQgdGFzayBydW5uaW5nLAorCQkgKiBhcyBpZiBvbmUgQ1BVIGhhc24ndCBSVCB0YXNrLCBSVCB0YXNrIGZyb20gb3RoZXIgQ1BVcyB3aWxsCisJCSAqIGJvcnJvdyBDUFUgdGltZSBmcm9tIHRoaXMgQ1BVIGFuZCBjYXVzZSBSVCB0YXNrIHVzZSA+IDk1JQorCQkgKiBDUFUgdGltZS4gVG8gbWFrZSAnYXZvaWQgc3RhcmF0aW9uJyB3b3JrLCB0YWtlcyBhIG5hcCBoZXJlLgorCQkgKi8KKwkJaWYgKGRvX3NsZWVwKQorCQkJc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZShIWiAqIGlkbGVfcGN0IC8gMTAwKTsKKwl9CisKKwlleGl0X3JvdW5kX3JvYmluKHRza19pbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBzX3Rza3NbTlJfQ1BVU107CitzdGF0aWMgdW5zaWduZWQgaW50IHBzX3Rza19udW07CitzdGF0aWMgaW50IGNyZWF0ZV9wb3dlcl9zYXZpbmdfdGFzayh2b2lkKQoreworCXBzX3Rza3NbcHNfdHNrX251bV0gPSBrdGhyZWFkX3J1bihwb3dlcl9zYXZpbmdfdGhyZWFkLAorCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXBzX3Rza19udW0sCisJCSJwb3dlcl9zYXZpbmcvJWQiLCBwc190c2tfbnVtKTsKKwlpZiAocHNfdHNrc1twc190c2tfbnVtXSkgeworCQlwc190c2tfbnVtKys7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9wb3dlcl9zYXZpbmdfdGFzayh2b2lkKQoreworCWlmIChwc190c2tfbnVtID4gMCkgeworCQlwc190c2tfbnVtLS07CisJCWt0aHJlYWRfc3RvcChwc190c2tzW3BzX3Rza19udW1dKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wb3dlcl9zYXZpbmdfdGFza19udW0odW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAobnVtID4gcHNfdHNrX251bSkgeworCQl3aGlsZSAocHNfdHNrX251bSA8IG51bSkgeworCQkJaWYgKGNyZWF0ZV9wb3dlcl9zYXZpbmdfdGFzaygpKQorCQkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAobnVtIDwgcHNfdHNrX251bSkgeworCQl3aGlsZSAocHNfdHNrX251bSA+IG51bSkKKwkJCWRlc3Ryb3lfcG93ZXJfc2F2aW5nX3Rhc2soKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfaWRsZV9jcHVzKHVuc2lnbmVkIGludCBudW1fY3B1cykKK3sKKwlnZXRfb25saW5lX2NwdXMoKTsKKworCW51bV9jcHVzID0gbWluX3QodW5zaWduZWQgaW50LCBudW1fY3B1cywgbnVtX29ubGluZV9jcHVzKCkpOworCXNldF9wb3dlcl9zYXZpbmdfdGFza19udW0obnVtX2NwdXMpOworCisJcHV0X29ubGluZV9jcHVzKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhY3BpX3BhZF9pZGxlX2NwdXNfbnVtKHZvaWQpCit7CisJcmV0dXJuIHBzX3Rza19udW07Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX3JydGltZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobnVtIDwgMSB8fCBudW0gPj0gMTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJvdW5kX3JvYmluX3RpbWUgPSBudW07CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfcnJ0aW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkIiwgcm91bmRfcm9iaW5fdGltZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIocnJ0aW1lLCBTX0lSVUdPfFNfSVdVU1IsCisJYWNwaV9wYWRfcnJ0aW1lX3Nob3csCisJYWNwaV9wYWRfcnJ0aW1lX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZXBjdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobnVtIDwgMSB8fCBudW0gPj0gMTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWlkbGVfcGN0ID0gbnVtOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVwY3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQiLCBpZGxlX3BjdCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaWRsZXBjdCwgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX2lkbGVwY3Rfc2hvdywKKwlhY3BpX3BhZF9pZGxlcGN0X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZWNwdXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlhY3BpX3BhZF9pZGxlX2NwdXMobnVtKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlY3B1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBjcHVtYXNrX3NjbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpZGxlY3B1cywgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX2lkbGVjcHVzX3Nob3csCisJYWNwaV9wYWRfaWRsZWNwdXNfc3RvcmUpOworCitzdGF0aWMgaW50IGFjcGlfcGFkX2FkZF9zeXNmcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZXBjdCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX3JydGltZSk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZXBjdCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9ycnRpbWUpOworfQorCisvKiBRdWVyeSBmaXJtd2FyZSBob3cgbWFueSBDUFVzIHNob3VsZCBiZSBpZGxlICovCitzdGF0aWMgaW50IGFjcGlfcGFkX3B1cihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqbnVtX2NwdXMpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlOworCWludCByZXYsIG51bSwgcmV0ID0gLUVJTlZBTDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QVVIiLCBOVUxMLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRUlOVkFMOworCXBhY2thZ2UgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAocGFja2FnZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSB8fCBwYWNrYWdlLT5wYWNrYWdlLmNvdW50ICE9IDIpCisJCWdvdG8gb3V0OworCXJldiA9IHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbMF0uaW50ZWdlci52YWx1ZTsKKwludW0gPSBwYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzWzFdLmludGVnZXIudmFsdWU7CisJaWYgKHJldiAhPSAxKQorCQlnb3RvIG91dDsKKwkqbnVtX2NwdXMgPSBudW07CisJcmV0ID0gMDsKK291dDoKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuIHJldDsKK30KKworLyogTm90aWZ5IGZpcm13YXJlIGhvdyBtYW55IENQVXMgYXJlIGlkbGUgKi8KK3N0YXRpYyB2b2lkIGFjcGlfcGFkX29zdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0LAorCXVpbnQzMl90IGlkbGVfY3B1cykKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbM10gPSB7CisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJCXsudHlwZSA9IEFDUElfVFlQRV9CVUZGRVIsfSwKKwl9OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0ID0gezMsIHBhcmFtc307CisKKwlwYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZOworCXBhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlID0gIHN0YXQ7CisJcGFyYW1zWzJdLmJ1ZmZlci5sZW5ndGggPSA0OworCXBhcmFtc1syXS5idWZmZXIucG9pbnRlciA9ICh2b2lkICopJmlkbGVfY3B1czsKKwlhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NUIiwgJmFyZ19saXN0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wYWRfaGFuZGxlX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJaW50IG51bV9jcHVzLCByZXQ7CisJdWludDMyX3QgaWRsZV9jcHVzOworCisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlpZiAoYWNwaV9wYWRfcHVyKGhhbmRsZSwgJm51bV9jcHVzKSkgeworCQltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJCXJldHVybjsKKwl9CisJcmV0ID0gYWNwaV9wYWRfaWRsZV9jcHVzKG51bV9jcHVzKTsKKwlpZGxlX2NwdXMgPSBhY3BpX3BhZF9pZGxlX2NwdXNfbnVtKCk7CisJaWYgKCFyZXQpCisJCWFjcGlfcGFkX29zdChoYW5kbGUsIDAsIGlkbGVfY3B1cyk7CisJZWxzZQorCQlhY3BpX3BhZF9vc3QoaGFuZGxlLCAxLCAwKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwKKwl2b2lkICpkYXRhKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZOgorCQlhY3BpX3BhZF9oYW5kbGVfbm90aWZ5KGhhbmRsZSk7CisJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZGV2aWNlLCBldmVudCwgMCk7CisJCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAorCQkJZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HIlVuc3VwcG9ydGVkIGV2ZW50IFsweCV4XVxuIiwgZXZlbnQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfREVWSUNFX05BTUUpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTKTsKKworCWlmIChhY3BpX3BhZF9hZGRfc3lzZnMoZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCisJCUFDUElfREVWSUNFX05PVElGWSwgYWNwaV9wYWRfbm90aWZ5LCBkZXZpY2UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlhY3BpX3BhZF9yZW1vdmVfc3lzZnMoZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAorCWludCB0eXBlKQoreworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJYWNwaV9wYWRfaWRsZV9jcHVzKDApOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQlBQ1BJX0RFVklDRV9OT1RJRlksIGFjcGlfcGFkX25vdGlmeSk7CisJYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKGRldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcGFkX2RldmljZV9pZHNbXSA9IHsKKwl7IkFDUEkwMDBDIiwgMH0sCisJeyIiLCAwfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHBhZF9kZXZpY2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3BhZF9kcml2ZXIgPSB7CisJLm5hbWUgPSAicHJvY2Vzc29yX2FnZ3JlZ2F0b3IiLAorCS5jbGFzcyA9IEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfQ0xBU1MsCisJLmlkcyA9IHBhZF9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3BhZF9hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3BhZF9yZW1vdmUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFkX2luaXQodm9pZCkKK3sKKwlwb3dlcl9zYXZpbmdfbXdhaXRfaW5pdCgpOworCWlmIChwb3dlcl9zYXZpbmdfbXdhaXRfZWF4ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wYWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFjcGlfcGFkX2V4aXQodm9pZCkKK3sKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9wYWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWNwaV9wYWRfaW5pdCk7Cittb2R1bGVfZXhpdChhY3BpX3BhZF9leGl0KTsKK01PRFVMRV9BVVRIT1IoIlNoYW9odWEgTGk8c2hhb2h1YS5saUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIEFnZ3JlZ2F0b3IgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKaW5kZXggOGU2NzllZi4uYTQ0NzFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaApAQCAtMTAzLDkgKzEwMyw5IEBACiAKICNkZWZpbmUgQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UICAgICAgICAweDEwMDAKIAotLyogU2l6ZSBvZiBjYWNoZWQgbWVtb3J5IG1hcHBpbmcgZm9yIHN5c3RlbSBtZW1vcnkgb3BlcmF0aW9uIHJlZ2lvbiAqLworLyogRGVmYXVsdCBwYWdlIHNpemUgZm9yIHVzZSBpbiBtYXBwaW5nIG1lbW9yeSBmb3Igb3BlcmF0aW9uIHJlZ2lvbnMgKi8KIAotI2RlZmluZSBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkUgIDQwOTYKKyNkZWZpbmUgQUNQSV9ERUZBVUxUX1BBR0VfU0laRSAgICAgICAgICA0MDk2CS8qIE11c3QgYmUgcG93ZXIgb2YgMiAqLwogCiAvKiBvd25lcl9pZCB0cmFja2luZy4gOCBlbnRyaWVzIGFsbG93cyBmb3IgMjU1IG93bmVyX2lkcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKaW5kZXggM2E1NGI3My4uMmJkODNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwpAQCAtNzcsNyArNzcsOCBAQAogCXZvaWQgKmxvZ2ljYWxfYWRkcl9wdHIgPSBOVUxMOwogCXN0cnVjdCBhY3BpX21lbV9zcGFjZV9jb250ZXh0ICptZW1faW5mbyA9IHJlZ2lvbl9jb250ZXh0OwogCXUzMiBsZW5ndGg7Ci0JYWNwaV9zaXplIHdpbmRvd19zaXplOworCWFjcGlfc2l6ZSBtYXBfbGVuZ3RoOworCWFjcGlfc2l6ZSBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGg7CiAjaWZkZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAogCXUzMiByZW1haW5kZXI7CiAjZW5kaWYKQEAgLTE0NCwyNSArMTQ1LDM5IEBACiAJCX0KIAogCQkvKgotCQkgKiBEb24ndCBhdHRlbXB0IHRvIG1hcCBtZW1vcnkgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiwgYW5kCi0JCSAqIGNvbnN0cmFpbiB0aGUgbWF4aW11bSBtYXBwaW5nIHNpemUgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUuCisJCSAqIEF0dGVtcHQgdG8gbWFwIGZyb20gdGhlIHJlcXVlc3RlZCBhZGRyZXNzIHRvIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4KKwkJICogSG93ZXZlciwgd2Ugd2lsbCBuZXZlciBtYXAgbW9yZSB0aGFuIG9uZSBwYWdlLCBub3Igd2lsbCB3ZSBjcm9zcworCQkgKiBhIHBhZ2UgYm91bmRhcnkuCiAJCSAqLwotCQl3aW5kb3dfc2l6ZSA9IChhY3BpX3NpemUpCisJCW1hcF9sZW5ndGggPSAoYWNwaV9zaXplKQogCQkgICAgKChtZW1faW5mby0+YWRkcmVzcyArIG1lbV9pbmZvLT5sZW5ndGgpIC0gYWRkcmVzcyk7CiAKLQkJaWYgKHdpbmRvd19zaXplID4gQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFKSB7Ci0JCQl3aW5kb3dfc2l6ZSA9IEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRTsKKwkJLyoKKwkJICogSWYgbWFwcGluZyB0aGUgZW50aXJlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSByZWdpb24gd2lsbCBjcm9zcworCQkgKiBhIHBhZ2UgYm91bmRhcnksIGp1c3QgbWFwIHVwIHRvIHRoZSBwYWdlIGJvdW5kYXJ5LCBkbyBub3QgY3Jvc3MuCisJCSAqIE9uIHNvbWUgc3lzdGVtcywgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5IHdoaWxlIG1hcHBpbmcgcmVnaW9ucworCQkgKiBjYW4gY2F1c2Ugd2FybmluZ3MgaWYgdGhlIHBhZ2VzIGhhdmUgZGlmZmVyZW50IGF0dHJpYnV0ZXMKKwkJICogZHVlIHRvIHJlc291cmNlIG1hbmFnZW1lbnQKKwkJICovCisJCXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCA9CisJCSAgICBBQ1BJX1JPVU5EX1VQKGFkZHJlc3MsIEFDUElfREVGQVVMVF9QQUdFX1NJWkUpIC0gYWRkcmVzczsKKworCQlpZiAoIXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCkgeworCQkJcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoID0gQUNQSV9ERUZBVUxUX1BBR0VfU0laRTsKKwkJfQorCisJCWlmIChtYXBfbGVuZ3RoID4gcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoKSB7CisJCQltYXBfbGVuZ3RoID0gcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoOwogCQl9CiAKIAkJLyogQ3JlYXRlIGEgbmV3IG1hcHBpbmcgc3RhcnRpbmcgYXQgdGhlIGFkZHJlc3MgZ2l2ZW4gKi8KIAotCQltZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcyA9Ci0JCQlhY3BpX29zX21hcF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWRkcmVzcywgd2luZG93X3NpemUpOworCQltZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLCBtYXBfbGVuZ3RoKTsKIAkJaWYgKCFtZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcykgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIkNvdWxkIG5vdCBtYXAgbWVtb3J5IGF0ICU4LjhYJTguOFgsIHNpemUgJVgiLAogCQkJCSAgICBBQ1BJX0ZPUk1BVF9OQVRJVkVfVUlOVChhZGRyZXNzKSwKLQkJCQkgICAgKHUzMikgd2luZG93X3NpemUpKTsKKwkJCQkgICAgKHUzMikgbWFwX2xlbmd0aCkpOwogCQkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSAwOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KQEAgLTE3MCw3ICsxODUsNyBAQAogCQkvKiBTYXZlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBtYXBwaW5nIHNpemUgKi8KIAogCQltZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MgPSBhZGRyZXNzOwotCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IHdpbmRvd19zaXplOworCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IG1hcF9sZW5ndGg7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCAxMzVmYmZlLi43NDExOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC05NCwzNiArOTQsMzMgQEAKIAogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19nZXRfZGV2aWNlKTsKIAorYWNwaV9zdGF0dXMgYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsIHN0YSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZXR1cm4gQUVfT0s7CisKKwlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgeworCQkqc3RhID0gQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8CisJCSAgICAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKKwkJcmV0dXJuIEFFX09LOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCiBpbnQgYWNwaV9idXNfZ2V0X3N0YXR1cyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc3RhID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YTsKIAorCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAmc3RhKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBFdmFsdWF0ZSBfU1RBIGlmIHByZXNlbnQuCi0JICovCi0JaWYgKGRldmljZS0+ZmxhZ3MuZHluYW1pY19zdGF0dXMpIHsKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gKGludClzdGE7Ci0JfQotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gQUNQSSBzcGVjIHNvbWUgZGV2aWNlIGNhbiBiZSBwcmVzZW50IGFuZCBmdW5jdGlvbmFsCi0JICogZXZlbiBpZiB0aGUgcGFyZW50IGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGlvbmFsLgotCSAqIEluIHN1Y2ggY29uZGl0aW9ucyB0aGUgY2hpbGQgZGV2aWNlIHNob3VsZCBub3QgaW5oZXJpdCB0aGUgc3RhdHVzCi0JICogZnJvbSB0aGUgcGFyZW50LgotCSAqLwotCWVsc2UKLQkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPQotCQkgICAgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKKwlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9IChpbnQpIHN0YTsKIAogCWlmIChkZXZpY2UtPnN0YXR1cy5mdW5jdGlvbmFsICYmICFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBbJXNdIHN0YXR1cyBbJTA4eF06ICIKQEAgLTEzNSwxMCArMTMyLDggQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSBzdGF0dXMgWyUwOHhdXG4iLAogCQkJICBkZXZpY2UtPnBucC5idXNfaWQsCiAJCQkgICh1MzIpIFNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpKSk7Ci0KIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19nZXRfc3RhdHVzKTsKIAogdm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOTMzNWI4Ny4uMGM5YzZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMjUxLDYgKzI1MSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZTsKIAorCWlmICghbGlkX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIobGlkX2RldmljZS0+aGFuZGxlLCAiX0xJRCIsIE5VTEwsCiAJCQkJICAgICAgICZzdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggM2EyY2ZlZi4uNzMzOGI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkZXBlbmRlbnRfZGV2aWNlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvdHBsdWdfZGV2aWNlczsKIAotCXN0cnVjdCBsaXN0X2hlYWQgc2liaWxpbmc7CisJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRvY2tfZGV2aWNlOwogfTsKIHN0YXRpYyBMSVNUX0hFQUQoZG9ja19zdGF0aW9ucyk7CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogCWlmIChpc19kb2NrKGhhbmRsZSkpCiAJCXJldHVybiAxOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJaWYgKGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKSkKIAkJCXJldHVybiAxOwogCX0KQEAgLTYxOSw3ICs2MTksNyBAQAogCSAqIG1ha2Ugc3VyZSB0aGlzIGhhbmRsZSBpcyBmb3IgYSBkZXZpY2UgZGVwZW5kZW50IG9uIHRoZSBkb2NrLAogCSAqIHRoaXMgd291bGQgaW5jbHVkZSB0aGUgZG9jayBzdGF0aW9uIGl0c2VsZgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJLyoKIAkJICogQW4gQVRBIGJheSBjYW4gYmUgaW4gYSBkb2NrIGFuZCBpdHNlbGYgY2FuIGJlIGVqZWN0ZWQKIAkJICogc2VwZXJhdGVseSwgc28gdGhlcmUgYXJlIHR3byAnZG9jayBzdGF0aW9ucycgd2hpY2ggbmVlZCB0aGUKQEAgLTY1MSw3ICs2NTEsNyBAQAogCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCWRkID0gZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpOwogCQlpZiAoZGQpCiAJCQlkb2NrX2RlbF9ob3RwbHVnX2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCWlmIChldmVudCAhPSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0sgJiYgZXZlbnQgIT0gQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLCiAJICAgJiYgZXZlbnQgIT0gQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVCkKIAkJcmV0dXJuIDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQlpZiAoZG9ja19zdGF0aW9uLT5oYW5kbGUgPT0gaGFuZGxlKSB7CiAJCQlzdHJ1Y3QgZG9ja19kYXRhICpkb2NrX2RhdGE7CiAKQEAgLTk1OCw3ICs5NTgsNyBAQAogCWRvY2tfc3RhdGlvbi0+bGFzdF9kb2NrX3RpbWUgPSBqaWZmaWVzIC0gSFo7CiAJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+c2liaWxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPnNpYmxpbmcpOwogCXNwaW5fbG9ja19pbml0KCZkb2NrX3N0YXRpb24tPmRkX2xvY2spOwogCW11dGV4X2luaXQoJmRvY2tfc3RhdGlvbi0+aHBfbG9jayk7CiAJQVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRCgmZG9ja19ub3RpZmllcl9saXN0KTsKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKIAogCWRvY2tfc3RhdGlvbl9jb3VudCsrOwotCWxpc3RfYWRkKCZkb2NrX3N0YXRpb24tPnNpYmlsaW5nLCAmZG9ja19zdGF0aW9ucyk7CisJbGlzdF9hZGQoJmRvY2tfc3RhdGlvbi0+c2libGluZywgJmRvY2tfc3RhdGlvbnMpOwogCXJldHVybiAwOwogCiBkb2NrX2FkZF9lcnJfdW5yZWdpc3RlcjoKQEAgLTExNDksNyArMTE0OSw3IEBACiAJc3RydWN0IGRvY2tfc3RhdGlvbiAqdG1wOwogCiAJdW5yZWdpc3Rlcl9hY3BpX2J1c19ub3RpZmllcigmZG9ja19hY3BpX25vdGlmaWVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZG9ja19zdGF0aW9uLCB0bXAsICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZG9ja19zdGF0aW9uLCB0bXAsICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKQogCQlkb2NrX3JlbW92ZShkb2NrX3N0YXRpb24pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGY3MDc5NjAuLmJhZWYyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0xMTksNiArMTE5LDggQEAKIH0gKmJvb3RfZWMsICpmaXJzdF9lYzsKIAogc3RhdGljIGludCBFQ19GTEFHU19NU0k7IC8qIE91dC1vZi1zcGVjIE1TSSBjb250cm9sbGVyICovCitzdGF0aWMgaW50IEVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQ7IC8qIEFTVVN0ZWMgRUNEVHMgbmVlZCB0byBiZSB2YWxpZGF0ZWQgKi8KK3N0YXRpYyBpbnQgRUNfRkxBR1NfU0tJUF9EU0RUX1NDQU47IC8qIE5vdCBhbGwgQklPUyBzdXJ2aXZlIGVhcmx5IERTRFQgc2NhbiAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBNYW5hZ2VtZW50CkBAIC0yMzIsMTAgKzIzNCw4IEBACiAJCQl9CiAJCQlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7CiAJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7Ci0JCWlmICghZWMtPmN1cnItPmlycV9jb3VudCB8fAotCQkgICAgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikpCisJCWlmIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpCiAJCQlicmVhazsKLQkJLyogdHJ5IHJlc3RhcnQgY29tbWFuZCBpZiB3ZSBnZXQgYW55IGZhbHNlIGludGVycnVwdHMgKi8KIAkJcHJfZGVidWcoUFJFRklYICJjb250cm9sbGVyIHJlc2V0LCByZXN0YXJ0IHRyYW5zYWN0aW9uXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKIAkJc3RhcnRfdHJhbnNhY3Rpb24oZWMpOwpAQCAtODk5LDYgKzg5OSw0NCBAQAogCXsiIiwgMH0sCiB9OwogCisvKiBTb21lIEJJT1MgZG8gbm90IHN1cnZpdmUgZWFybHkgRFNEVCBzY2FuLCBza2lwIGl0ICovCitzdGF0aWMgaW50IGVjX3NraXBfZHNkdF9zY2FuKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19TS0lQX0RTRFRfU0NBTiA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIEFTVVN0ZWsgb2Z0ZW4gc3VwcGxpZXMgdXMgd2l0aCBicm9rZW4gRUNEVCwgdmFsaWRhdGUgaXQgKi8KK3N0YXRpYyBpbnQgZWNfdmFsaWRhdGVfZWNkdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJRUNfRkxBR1NfVkFMSURBVEVfRUNEVCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIE1TSSBFQyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudCwgZW5hYmxlIGl0ICovCitzdGF0aWMgaW50IGVjX2ZsYWdfbXNpKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19NU0kgPSAxOworCUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBlY19kbWlfdGFibGVbXSA9IHsKKwl7CisJZWNfc2tpcF9kc2R0X3NjYW4sICJDb21wYWwgSkZMOTIiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkNPTVBBTCIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkpGTDkyIikgfSwgTlVMTH0sCisJeworCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgeworCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJNaWNyby1TdGFyIiksCisJRE1JX01BVENIKERNSV9DSEFTU0lTX1ZFTkRPUiwgIk1JQ1JPLVN0YXIiKSB9LCBOVUxMfSwKKwl7CisJZWNfdmFsaWRhdGVfZWNkdCwgIkFTVVMgaGFyZHdhcmUiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkFTVVMiKSB9LCBOVUxMfSwKKwl7fSwKK307CisKKwogaW50IF9faW5pdCBhY3BpX2VjX2VjZHRfcHJvYmUodm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC05MTEsMTEgKzk0OSw3IEBACiAJLyoKIAkgKiBHZW5lcmF0ZSBhIGJvb3QgZWMgY29udGV4dAogCSAqLwotCWlmIChkbWlfbmFtZV9pbl92ZW5kb3JzKCJNaWNyby1TdGFyIikgfHwKLQkgICAgZG1pX25hbWVfaW5fdmVuZG9ycygiTm90ZWJvb2siKSkgewotCQlwcl9pbmZvKFBSRUZJWCAiRW5hYmxpbmcgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIEVDIGZyb20gTVNJLlxuIik7Ci0JCUVDX0ZMQUdTX01TSSA9IDE7Ci0JfQorCWRtaV9jaGVja19zeXN0ZW0oZWNfZG1pX3RhYmxlKTsKIAlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19FQ0RULCAxLAogCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmVjZHRfcHRyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTkyNiw3ICs5NjAsNyBAQAogCQlib290X2VjLT5oYW5kbGUgPSBBQ1BJX1JPT1RfT0JKRUNUOwogCQlhY3BpX2dldF9oYW5kbGUoQUNQSV9ST09UX09CSkVDVCwgZWNkdF9wdHItPmlkLCAmYm9vdF9lYy0+aGFuZGxlKTsKIAkJLyogRG9uJ3QgdHJ1c3QgRUNEVCwgd2hpY2ggY29tZXMgZnJvbSBBU1VTVGVrICovCi0JCWlmICghZG1pX25hbWVfaW5fdmVuZG9ycygiQVNVUyIpICYmIEVDX0ZMQUdTX01TSSA9PSAwKQorCQlpZiAoIUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQpCiAJCQlnb3RvIGluc3RhbGw7CiAJCXNhdmVkX2VjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWMpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzYXZlZF9lYykKQEAgLTkzNCw2ICs5NjgsMTAgQEAKIAkJbWVtY3B5KHNhdmVkX2VjLCBib290X2VjLCBzaXplb2Yoc3RydWN0IGFjcGlfZWMpKTsKIAkvKiBmYWxsIHRocm91Z2ggKi8KIAl9CisKKwlpZiAoRUNfRkxBR1NfU0tJUF9EU0RUX1NDQU4pCisJCXJldHVybiAtRU5PREVWOworCiAJLyogVGhpcyB3b3JrYXJvdW5kIGlzIG5lZWRlZCBvbmx5IG9uIHNvbWUgYnJva2VuIG1hY2hpbmVzLAogCSAqIHdoaWNoIHJlcXVpcmUgZWFybHkgRUMsIGJ1dCBmYWlsIHRvIHByb3ZpZGUgRUNEVCAqLwogCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWCAiTG9vayB1cCBFQyBpbiBEU0RUXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA1NjMzYjg2Li43YzFjNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC0xMTYxLDcgKzExNjEsMTMgQEAKIAkJCSAgICAgICByZXNfbGlzdF9lbGVtLT5uYW1lLAogCQkJICAgICAgIChsb25nIGxvbmcpIHJlc19saXN0X2VsZW0tPnN0YXJ0LAogCQkJICAgICAgIChsb25nIGxvbmcpIHJlc19saXN0X2VsZW0tPmVuZCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBEZXZpY2UgbmVlZHMgYW4gQUNQSSBkcml2ZXJcbiIpOworCQkJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfTEFYKQorCQkJCXByaW50ayhLRVJOX05PVElDRSAiQUNQSTogVGhpcyBjb25mbGljdCBtYXkiCisJCQkJICAgICAgICIgY2F1c2UgcmFuZG9tIHByb2JsZW1zIGFuZCBzeXN0ZW0iCisJCQkJICAgICAgICIgaW5zdGFiaWxpdHlcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogSWYgYW4gQUNQSSBkcml2ZXIgaXMgYXZhaWxhYmxlIgorCQkJICAgICAgICIgZm9yIHRoaXMgZGV2aWNlLCB5b3Ugc2hvdWxkIHVzZSBpdCBpbnN0ZWFkIG9mIgorCQkJICAgICAgICIgdGhlIG5hdGl2ZSBkcml2ZXJcbiIpOwogCQl9CiAJCWlmIChhY3BpX2VuZm9yY2VfcmVzb3VyY2VzID09IEVORk9SQ0VfUkVTT1VSQ0VTX1NUUklDVCkKIAkJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IDMxMTIyMjEuLjFhZjgwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCkBAIC0zODksNiArMzg5LDE3IEBACiAKIAkJcGJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCQlwY2lfZGV2X3B1dChwZGV2KTsKKworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZm9yIGEgbm9uLVBDSSBkZXZpY2UgdGhhdCBoYXMgYQorCQkgKiBQQ0kgcGFyZW50IChlZy4gYSBkaXNrIHVuZGVyIGEgUENJIFNBVEEgY29udHJvbGxlcikuICBJbiB0aGF0CisJCSAqIGNhc2UgcGRldi0+c3Vib3JkaW5hdGUgd2lsbCBiZSBOVUxMIGZvciB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKCFwYnVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJOb3QgYSBQQ0ktdG8tUENJIGJyaWRnZVxuIik7CisJCQlwZGV2ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CiAJfQogb3V0OgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0bXAsICZkZXZpY2VfbGlzdCwgbm9kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKaW5kZXggZTZiZmQ3Ny4uMmVmNzAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKKysrIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKQEAgLTI5NCw3ICsyOTQsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIGRhdGE7CisJLyogX1BUUCByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uemVybyBvdGhlcndpc2UgKi8KKwlpZiAoZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RyaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCmluZGV4IGQwZDU1MGQuLmQwZDI1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2MuYwpAQCAtMzkzLDExICszOTMsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAljaGFyIHN0cmJ1Zls1XTsKIAljaGFyIHN0cls1XSA9ICIiOwotCWludCBsZW4gPSBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gY291bnQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpmb3VuZF9kZXYgPSBOVUxMOwogCiAJaWYgKGxlbiA+IDQpCiAJCWxlbiA9IDQ7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0cmJ1ZiwgYnVmZmVyLCBsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggYzJkNGQ2ZS4uZWM3NDJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCSAgICAubm90aWZpZXJfY2FsbCA9IGFjcGlfY3B1X3NvZnRfbm90aWZ5LAogfTsKIAotc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBhY3BpX3Byb2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC04NjMsMTMgKzg2Myw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9zeXNmczsKIAl9CiAKLQlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKLQkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCQlwcmludGsoIiAlZCB0aHJvdHRsaW5nIHN0YXRlcyIsIHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50KTsKLQkJcHJpbnRrKCIpXG4iKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3JlbW92ZV9zeXNmczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggY2M2MWE2Mi4uYmJkMDY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTExNjYsNyArMTE2Niw2IEBACiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAjZW5kaWYKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWlmIChib290X29wdGlvbl9pZGxlX292ZXJyaWRlKQogCQlyZXR1cm4gMDsKQEAgLTEyMTQsMTMgKzEyMTMsNiBAQAogCQlhY3BpX3Byb2Nlc3Nvcl9zZXR1cF9jcHVpZGxlKHByKTsKIAkJaWYgKGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KSkKIAkJCXJldHVybiAtRUlPOwotCi0JCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJDUFUlZCAocG93ZXIgc3RhdGVzOiIsIHByLT5pZCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gcHItPnBvd2VyLmNvdW50OyBpKyspCi0JCQlpZiAocHItPnBvd2VyLnN0YXRlc1tpXS52YWxpZCkKLQkJCQlwcmludGsoIiBDJWRbQyVkXSIsIGksCi0JCQkJICAgICAgIHByLT5wb3dlci5zdGF0ZXNbaV0udHlwZSk7Ci0JCXByaW50aygiKVxuIik7CiAJfQogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCS8qICdwb3dlcicgW1JdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IDRjNmMxNGMuLjFjNWQ3YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC0xMTMzLDE1ICsxMTMzLDE1IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmcgKnB0aHJvdHRsaW5nOwogCisJaWYgKCFwcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJwYmxrX2FkZHJlc3NbMHglMDh4XSBkdXR5X29mZnNldFslZF0gZHV0eV93aWR0aFslZF1cbiIsCiAJCQkgIHByLT50aHJvdHRsaW5nLmFkZHJlc3MsCiAJCQkgIHByLT50aHJvdHRsaW5nLmR1dHlfb2Zmc2V0LAogCQkJICBwci0+dGhyb3R0bGluZy5kdXR5X3dpZHRoKSk7CiAKLQlpZiAoIXByKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qCiAJICogRXZhbHVhdGUgX1BUQywgX1RTUyBhbmQgX1RQQwogCSAqIFRoZXkgbXVzdCBhbGwgYmUgcHJlc2VudCBvciBub25lIG9mIHRoZW0gY2FuIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCA0MDhlYmRlLi4xNGE3NDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgQUNQSV9CVVNfSElECQkJIkxOWFNZQlVTIgogI2RlZmluZSBBQ1BJX0JVU19ERVZJQ0VfTkFNRQkJIlN5c3RlbSBCdXMiCiAKKyNkZWZpbmUgQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpICAgICghKGRldmljZSktPnBhcmVudCkKKwogc3RhdGljIExJU1RfSEVBRChhY3BpX2RldmljZV9saXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9idXNfaWRfbGlzdCk7CiBERUZJTkVfTVVURVgoYWNwaV9kZXZpY2VfbG9jayk7CkBAIC00Myw0MCArNDUsMTkgQEAKIHsKIAlpbnQgbGVuOwogCWludCBjb3VudDsKLQotCWlmICghYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkICYmICFhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpCi0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAogCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKIAlzaXplIC09IGxlbjsKIAotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKLQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJIGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZhY3BpX2Rldi0+cG5wLmlkcywgbGlzdCkgeworCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwgaWQtPmlkKTsKIAkJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBzaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxlbiArPSBjb3VudDsKIAkJc2l6ZSAtPSBjb3VudDsKIAl9CiAKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQljaWRfbGlzdCA9IGFjcGlfZGV2LT5wbnAuY2lkX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJCSBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7Ci0JCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlcyBjaWRbJWldIGV4Y2VlZHMgZXZlbnQgYnVmZmVyIHNpemUiLAotCQkJCSAgICAgICBhY3BpX2Rldi0+cG5wLmRldmljZV9uYW1lLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWxlbiArPSBjb3VudDsKLQkJCXNpemUgLT0gY291bnQ7Ci0JCX0KLQl9Ci0KIAltb2RhbGlhc1tsZW5dID0gJ1wwJzsKIAlyZXR1cm4gbGVuOwogfQpAQCAtMTgzLDcgKzE2NCw3IEBACiBhY3BpX2RldmljZV9oaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaGlkLCAwNDQ0LCBhY3BpX2RldmljZV9oaWRfc2hvdywgTlVMTCk7CiAKQEAgLTIxOSwxNyArMjAwLDEzIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkgewotCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVuZDsKIAotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkIHx8IGRldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZW5kOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIElmIGRldmljZSBoYXMgX0VKMCwgJ2VqZWN0JyBmaWxlIGlzIGNyZWF0ZWQgdGhhdCBpcyB1c2VkIHRvIHRyaWdnZXIKQEAgLTI1NSwxMSArMjMyLDggQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9lamVjdCk7CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCB8fCBkZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwotCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7CiAJaWYgKGRldi0+aGFuZGxlKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfcGF0aCk7CiB9CkBAIC0yNzEsNiArMjQ1LDcgQEAKIAkJCSAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZHMpCiB7CiAJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaHdpZDsKIAogCS8qCiAJICogSWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gbG9hZCBkZXZpY2UKQEAgLTI3OSw0MCArMjU0LDMwIEBACiAJaWYgKCFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkKSB7Ci0JCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykgewotCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwgZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpKQorCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShod2lkLCAmZGV2aWNlLT5wbnAuaWRzLCBsaXN0KQorCQkJaWYgKCFzdHJjbXAoKGNoYXIgKikgaWQtPmlkLCBod2lkLT5pZCkpCiAJCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKLQkJCS8qIGNvbXBhcmUgbXVsdGlwbGUgX0NJRCBlbnRyaWVzIGFnYWluc3QgZHJpdmVyIGlkcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwKLQkJCQkJICAgIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKSkKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9CiAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9tYXRjaF9kZXZpY2VfaWRzKTsKIAorc3RhdGljIHZvaWQgYWNwaV9mcmVlX2lkcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWQsIHRtcCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkgeworCQlrZnJlZShpZC0+aWQpOworCQlrZnJlZShpZCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCWtmcmVlKGFjcGlfZGV2LT5wbnAuY2lkX2xpc3QpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWtmcmVlKGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MudW5pcXVlX2lkKQotCQlrZnJlZShhY3BpX2Rldi0+cG5wLnVuaXF1ZV9pZCk7CisJYWNwaV9mcmVlX2lkcyhhY3BpX2Rldik7CiAJa2ZyZWUoYWNwaV9kZXYpOwogfQogCkBAIC0zNzgsMTUgKzM0MywxMyBAQAogc3RhdGljIGludCBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQljaGFyICpoaWQ7CiAKLQloaWQgPSBhY3BpX2RldmljZV9oaWQoZGV2aWNlKTsKLQlpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCiAJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKIAkJCQkJCSAgICAgZGV2aWNlKTsKLQllbHNlIGlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJZWxzZSBpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJICAgICBhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQsCkBAIC00MDQsMTAgKzM2NywxMCBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKLQllbHNlIGlmICghc3RyY21wKGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKSkKKwllbHNlIGlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKIAllbHNlCkBAIC00NzQsMTIgKzQzNywxMiBAQAogCS51ZXZlbnQJCT0gYWNwaV9kZXZpY2VfdWV2ZW50LAogfTsKIAotc3RhdGljIGludCBhY3BpX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCQkgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQpCitzdGF0aWMgaW50IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2J1c19pZCAqYWNwaV9kZXZpY2VfYnVzX2lkLCAqbmV3X2J1c19pZDsKIAlpbnQgZm91bmQgPSAwOworCiAJLyoKIAkgKiBMaW5rYWdlCiAJICogLS0tLS0tLQpAQCAtNTAxLDggKzQ2NCw5IEBACiAJICogSWYgZmFpbGVkLCBjcmVhdGUgb25lIGFuZCBsaW5rIGl0IGludG8gYWNwaV9idXNfaWRfbGlzdAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWNwaV9kZXZpY2VfYnVzX2lkLCAmYWNwaV9idXNfaWRfbGlzdCwgbm9kZSkgewotCQlpZighc3RyY21wKGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkPyBkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA6ICJkZXZpY2UiKSkgewotCQkJYWNwaV9kZXZpY2VfYnVzX2lkLT5pbnN0YW5jZV9ubyArKzsKKwkJaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsCisJCQkgICAgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpKSB7CisJCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vKys7CiAJCQlmb3VuZCA9IDE7CiAJCQlrZnJlZShuZXdfYnVzX2lkKTsKIAkJCWJyZWFrOwpAQCAtNTEwLDcgKzQ3NCw3IEBACiAJfQogCWlmICghZm91bmQpIHsKIAkJYWNwaV9kZXZpY2VfYnVzX2lkID0gbmV3X2J1c19pZDsKLQkJc3RyY3B5KGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkID8gZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgOiAiZGV2aWNlIik7CisJCXN0cmNweShhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpOwogCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmYWNwaV9kZXZpY2VfYnVzX2lkLT5ub2RlLCAmYWNwaV9idXNfaWRfbGlzdCk7CiAJfQpAQCAtNTI0LDcgKzQ4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIAogCWlmIChkZXZpY2UtPnBhcmVudCkKLQkJZGV2aWNlLT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCQlkZXZpY2UtPmRldi5wYXJlbnQgPSAmZGV2aWNlLT5wYXJlbnQtPmRldjsKIAlkZXZpY2UtPmRldi5idXMgPSAmYWNwaV9idXNfdHlwZTsKIAlkZXZpY2UtPmRldi5yZWxlYXNlID0gJmFjcGlfZGV2aWNlX3JlbGVhc2U7CiAJcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkZXZpY2UtPmRldik7CkBAIC02NjQsNiArNjI4LDMzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlIEVudW1lcmF0aW9uCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9idXNfZ2V0X3BhcmVudChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXQ7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisKKwkvKgorCSAqIEZpeGVkIGhhcmR3YXJlIGRldmljZXMgZG8gbm90IGFwcGVhciBpbiB0aGUgbmFtZXNwYWNlIGFuZCBkbyBub3QKKwkgKiBoYXZlIGhhbmRsZXMsIGJ1dCB3ZSBmYWJyaWNhdGUgYWNwaV9kZXZpY2VzIGZvciB0aGVtLCBzbyB3ZSBoYXZlCisJICogdG8gZGVhbCB3aXRoIHRoZW0gc3BlY2lhbGx5LgorCSAqLworCWlmIChoYW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuIGFjcGlfcm9vdDsKKworCWRvIHsKKwkJc3RhdHVzID0gYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJmhhbmRsZSk7CisJCWlmIChzdGF0dXMgPT0gQUVfTlVMTF9FTlRSWSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gYWNwaV9yb290OworCisJCXJldCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0dXJuIGRldmljZTsKKwl9IHdoaWxlICgxKTsKK30KKwogYWNwaV9zdGF0dXMKIGFjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqZWpkKQogewpAQCAtODc2LDExICs4NjcsNiBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy5keW5hbWljX3N0YXR1cyA9IDE7CiAKLQkvKiBQcmVzZW5jZSBvZiBfQ0lEIGluZGljYXRlcyAnY29tcGF0aWJsZV9pZHMnICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0NJRCIsICZ0ZW1wKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOwotCiAJLyogUHJlc2VuY2Ugb2YgX1JNViBpbmRpY2F0ZXMgJ3JlbW92YWJsZScgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUk1WIiwgJnRlbXApOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKQEAgLTkxOCw4ICs5MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9nZXRfYnVzaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkJICBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWNoYXIgYnVzX2lkWzVdID0geyAnPycsIDAgfTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBzaXplb2YoYnVzX2lkKSwgYnVzX2lkIH07CkBAIC05MzEsMTAgKzkxNiwxMiBAQAogCSAqIFRoZSBkZXZpY2UncyBCdXMgSUQgaXMgc2ltcGx5IHRoZSBvYmplY3QgbmFtZS4KIAkgKiBUQkQ6IFNob3VsZG4ndCB0aGlzIHZhbHVlIGJlIHVuaXF1ZSAod2l0aGluIHRoZSBBQ1BJIG5hbWVzcGFjZSk/CiAJICovCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKKwlpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpKSB7CiAJCXN0cmNweShkZXZpY2UtPnBucC5idXNfaWQsICJBQ1BJIik7Ci0JCWJyZWFrOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZXZpY2UtPmRldmljZV90eXBlKSB7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlBXUkYiKTsKIAkJYnJlYWs7CkBAIC05NDIsNyArOTI5LDcgQEAKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlNMUEYiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfU0lOR0xFX05BTUUsICZidWZmZXIpOworCQlhY3BpX2dldF9uYW1lKGRldmljZS0+aGFuZGxlLCBBQ1BJX1NJTkdMRV9OQU1FLCAmYnVmZmVyKTsKIAkJLyogQ2xlYW4gdXAgdHJhaWxpbmcgdW5kZXJzY29yZXMgKGlmIGFueSkgKi8KIAkJZm9yIChpID0gMzsgaSA+IDE7IGktLSkgewogCQkJaWYgKGJ1c19pZFtpXSA9PSAnXycpCkBAIC0xMDAwLDIwNCArOTg3LDEzNCBAQAogCXJldHVybiBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRENLIiwgJnRtcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KgotYWNwaV9hZGRfY2lkKAotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICAgICAgICAgKmluZm8sCi0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgICAgICAgICAqbmV3X2NpZCkKK2NoYXIgKmFjcGlfZGV2aWNlX2hpZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICAgICpjaWQ7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dF9pZF9zdHJpbmc7Ci0JYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBjaWRfbGVuZ3RoOwotCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NpZF9sZW5ndGg7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpoaWQ7CiAKKwloaWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2UtPnBucC5pZHMsIHN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkLCBsaXN0KTsKKwlyZXR1cm4gaGlkLT5pZDsKK30KK0VYUE9SVF9TWU1CT0woYWNwaV9kZXZpY2VfaGlkKTsKIAotCS8qIEFsbG9jYXRlIG5ldyBDSUQgbGlzdCB3aXRoIHJvb20gZm9yIHRoZSBuZXcgQ0lEICovCitzdGF0aWMgdm9pZCBhY3BpX2FkZF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqZGV2X2lkKQoreworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAotCWlmICghbmV3X2NpZCkKLQkJbmV3X2NpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplOwotCWVsc2UgaWYgKGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUpCi0JCW5ld19jaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZSArCi0JCQluZXdfY2lkLT5sZW5ndGggKyBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpOwotCWVsc2UKLQkJbmV3X2NpZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCkgKyBuZXdfY2lkLT5sZW5ndGg7CisJaWQgPSBrbWFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkKQorCQlyZXR1cm47CiAKLQljaWQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChuZXdfY2lkX2xlbmd0aCk7Ci0JaWYgKCFjaWQpIHsKLQkJcmV0dXJuIE5VTEw7CisJaWQtPmlkID0ga21hbGxvYyhzdHJsZW4oZGV2X2lkKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghaWQtPmlkKSB7CisJCWtmcmVlKGlkKTsKKwkJcmV0dXJuOwogCX0KIAotCWNpZC0+bGlzdF9zaXplID0gbmV3X2NpZF9sZW5ndGg7Ci0JY2lkLT5jb3VudCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsKLQlpZiAobmV3X2NpZCkKLQkJY2lkLT5jb3VudCsrOwotCW5leHRfaWRfc3RyaW5nID0gKGNoYXIgKikgY2lkLT5pZHMgKyAoY2lkLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOwotCi0JLyogQ29weSBhbGwgZXhpc3RpbmcgQ0lEcyAqLwotCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsgaSsrKSB7Ci0JCWNpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLmxlbmd0aDsKLQkJY2lkLT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7Ci0JCWNpZC0+aWRzW2ldLmxlbmd0aCA9IGNpZF9sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5pZHNbaV0uc3RyaW5nLAotCQkJY2lkX2xlbmd0aCk7Ci0KLQkJbmV4dF9pZF9zdHJpbmcgKz0gY2lkX2xlbmd0aDsKLQl9Ci0KLQkvKiBBcHBlbmQgdGhlIG5ldyBDSUQgKi8KLQotCWlmIChuZXdfY2lkKSB7Ci0JCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOwotCQljaWQtPmlkc1tpXS5sZW5ndGggPSBuZXdfY2lkLT5sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIG5ld19jaWQtPnN0cmluZywgbmV3X2NpZC0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gY2lkOworCXN0cmNweShpZC0+aWQsIGRldl9pZCk7CisJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZkZXZpY2UtPnBucC5pZHMpOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9zZXRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgICAgICBpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NldF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbyA9IE5VTEw7Ci0JY2hhciAqaGlkID0gTlVMTDsKLQljaGFyICp1aWQgPSBOVUxMOwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKLQljaGFyICpjaWRfYWRkID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CisJaW50IGk7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKGRldmljZS0+ZGV2aWNlX3R5cGUpIHsKIAljYXNlIEFDUElfQlVTX1RZUEVfREVWSUNFOgotCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwkJaWYgKEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlKSkgeworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1NZU1RFTV9ISUQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UtPnBhcmVudCkpIHsKKwkJCS8qIFxfU0JfLCB0aGUgb25seSByb290LWxldmVsIG5hbWVzcGFjZSBkZXZpY2UgKi8KKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CVVNfSElEKTsKKwkJCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOworCQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywgQUNQSV9CVVNfQ0xBU1MpOworCQkJYnJlYWs7CisJCX0KKworCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhkZXZpY2UtPmhhbmRsZSwgJmluZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzOiBFcnJvciByZWFkaW5nIGRldmljZSBpbmZvXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkKLQkJCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZzsKLQkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9VSUQpCi0JCQl1aWQgPSBpbmZvLT51bmlxdWVfaWQuc3RyaW5nOwotCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nKTsKKwkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9DSUQpIHsKIAkJCWNpZF9saXN0ID0gJmluZm8tPmNvbXBhdGlibGVfaWRfbGlzdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykKKwkJCQlhY3BpX2FkZF9pZChkZXZpY2UsIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKKwkJfQogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikgewogCQkJZGV2aWNlLT5wbnAuYnVzX2FkZHJlc3MgPSBpbmZvLT5hZGRyZXNzOwogCQkJZGV2aWNlLT5mbGFncy5idXNfYWRkcmVzcyA9IDE7CiAJCX0KIAotCQkvKiBJZiB3ZSBoYXZlIGEgdmlkZW8vYmF5L2RvY2sgZGV2aWNlLCBhZGQgb3VyIHNlbGZkZWZpbmVkCi0JCSAgIEhJRCB0byB0aGUgQ0lEIGxpc3QuIExpa2UgdGhhdCB0aGUgdmlkZW8vYmF5L2RvY2sgZHJpdmVycwotCQkgICB3aWxsIGdldCBhdXRvbG9hZGVkIGFuZCB0aGUgZGV2aWNlIG1pZ2h0IHN0aWxsIG1hdGNoCi0JCSAgIGFnYWluc3QgYW5vdGhlciBkcml2ZXIuCi0JCSovCisJCWtmcmVlKGluZm8pOworCisJCS8qCisJCSAqIFNvbWUgZGV2aWNlcyBkb24ndCByZWxpYWJseSBoYXZlIF9ISURzICYgX0NJRHMsIHNvIGFkZAorCQkgKiBzeW50aGV0aWMgSElEcyB0byBtYWtlIHN1cmUgZHJpdmVycyBjYW4gZmluZCB0aGVtLgorCQkgKi8KIAkJaWYgKGFjcGlfaXNfdmlkZW9fZGV2aWNlKGRldmljZSkpCi0JCQljaWRfYWRkID0gQUNQSV9WSURFT19ISUQ7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfVklERU9fSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfYmF5X21hdGNoKGRldmljZSkpKQotCQkJY2lkX2FkZCA9IEFDUElfQkFZX0hJRDsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CQVlfSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZG9ja19tYXRjaChkZXZpY2UpKSkKLQkJCWNpZF9hZGQgPSBBQ1BJX0RPQ0tfSElEOworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0RPQ0tfSElEKTsKIAogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfUE9XRVI6Ci0JCWhpZCA9IEFDUElfUE9XRVJfSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUE9XRVJfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjoKLQkJaGlkID0gQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRDsKLQkJYnJlYWs7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKLQkJaGlkID0gQUNQSV9TWVNURU1fSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUFJPQ0VTU09SX09CSkVDVF9ISUQpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfVEhFUk1BTDoKLQkJaGlkID0gQUNQSV9USEVSTUFMX0hJRDsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1RIRVJNQUxfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1BPV0VSRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1NMRUVQRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKTsKIAkJYnJlYWs7CiAJfQogCiAJLyoKLQkgKiBcX1NCCi0JICogLS0tLQotCSAqIEZpeCBmb3IgdGhlIHN5c3RlbSByb290IGJ1cyBkZXZpY2UgLS0gdGhlIG9ubHkgcm9vdC1sZXZlbCBkZXZpY2UuCisJICogV2UgYnVpbGQgYWNwaV9kZXZpY2VzIGZvciBzb21lIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIF9ISUQgb3IgX0NJRCwKKwkgKiBlLmcuLCBQQ0kgYnJpZGdlcyBhbmQgc2xvdHMuICBEcml2ZXJzIGNhbid0IGJpbmQgdG8gdGhlc2Ugb2JqZWN0cywKKwkgKiBidXQgd2UgZG8gdXNlIHRoZW0gaW5kaXJlY3RseSBieSB0cmF2ZXJzaW5nIHRoZSBhY3BpX2RldmljZSB0cmVlLgorCSAqIFRoaXMgZ2VuZXJpYyBJRCBpc24ndCB1c2VmdWwgZm9yIGRyaXZlciBiaW5kaW5nLCBidXQgaXQgcHJvdmlkZXMKKwkgKiB0aGUgdXNlZnVsIHByb3BlcnR5IHRoYXQgImV2ZXJ5IGFjcGlfZGV2aWNlIGhhcyBhbiBJRC4iCiAJICovCi0JaWYgKCgoYWNwaV9oYW5kbGUpcGFyZW50ID09IEFDUElfUk9PVF9PQkpFQ1QpICYmICh0eXBlID09IEFDUElfQlVTX1RZUEVfREVWSUNFKSkgewotCQloaWQgPSBBQ1BJX0JVU19ISUQ7Ci0JCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOwotCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLCBBQ1BJX0JVU19DTEFTUyk7Ci0JfQotCi0JaWYgKGhpZCkgewotCQlkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAoaGlkKSArIDEpOwotCQlpZiAoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCwgaGlkKTsKLQkJCWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPSAxOwotCQl9Ci0JfQotCWlmICghZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkKLQkJZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgPSAiIjsKLQotCWlmICh1aWQpIHsKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuICh1aWQpICsgMSk7Ci0JCWlmIChkZXZpY2UtPnBucC51bmlxdWVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC51bmlxdWVfaWQsIHVpZCk7Ci0JCQlkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCA9IDE7Ci0JCX0KLQl9Ci0JaWYgKCFkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCkKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gIiI7Ci0KLQlpZiAoY2lkX2xpc3QgfHwgY2lkX2FkZCkgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpsaXN0OwotCi0JCWlmIChjaWRfYWRkKSB7Ci0JCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBjaWQ7Ci0JCQljaWQubGVuZ3RoID0gc3RybGVuIChjaWRfYWRkKSArIDE7Ci0JCQljaWQuc3RyaW5nID0gY2lkX2FkZDsKLQotCQkJbGlzdCA9IGFjcGlfYWRkX2NpZChpbmZvLCAmY2lkKTsKLQkJfSBlbHNlIHsKLQkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgTlVMTCk7Ci0JCX0KLQotCQlpZiAobGlzdCkgewotCQkJZGV2aWNlLT5wbnAuY2lkX2xpc3QgPSBsaXN0OwotCQkJaWYgKGNpZF9hZGQpCi0JCQkJZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcyA9IDE7Ci0JCX0KLQl9Ci0KLQlrZnJlZShpbmZvKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5wbnAuaWRzKSkKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCAiZGV2aWNlIik7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQorc3RhdGljIGludCBhY3BpX2RldmljZV9zZXRfY29udGV4dChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlpbnQgcmVzdWx0ID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKIAkvKgogCSAqIENvbnRleHQKIAkgKiAtLS0tLS0tCiAJICogQXR0YWNoIHRoaXMgJ3N0cnVjdCBhY3BpX2RldmljZScgdG8gdGhlIEFDUEkgb2JqZWN0LiAgVGhpcyBtYWtlcwotCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBOb3RlIHRoYXQgd2UgbmVlZAotCSAqIHRvIGJlIGNhcmVmdWwgd2l0aCBmaXhlZC1mZWF0dXJlIGRldmljZXMgYXMgdGhleSBhbGwgYXR0YWNoIHRvIHRoZQotCSAqIHJvb3Qgb2JqZWN0LgorCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBGaXhlZCBoYXJkd2FyZQorCSAqIGRldmljZXMgaGF2ZSBubyBoYW5kbGVzLCBzbyB3ZSBza2lwIHRoZW0uCiAJICovCi0JaWYgKHR5cGUgIT0gQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04gJiYKLQkgICAgdHlwZSAhPSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikgewotCQlzdGF0dXMgPSBhY3BpX2F0dGFjaF9kYXRhKGRldmljZS0+aGFuZGxlLAotCQkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoIWRldmljZS0+aGFuZGxlKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIGF0dGFjaGluZyBkZXZpY2UgZGF0YVxuIik7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQl9Ci0JfQotCXJldHVybiByZXN1bHQ7CisJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwKKwkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBhY3BpX2J1c19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBybWRldmljZSkKQEAgLTEyMjMsMTcgKzExNDAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWNwaV9hZGRfc2luZ2xlX29iamVjdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKLQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLAotCQkJc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQorc3RhdGljIGludCBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAorCQkJCSAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGEsCisJCQkJICBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCi0KLQlpZiAoIWNoaWxkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKIAlkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldmljZSkgewpAQCAtMTI0MSw3NSArMTE1NSwzMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5wbnAuaWRzKTsKKwlkZXZpY2UtPmRldmljZV90eXBlID0gdHlwZTsKIAlkZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKLQlkZXZpY2UtPnBhcmVudCA9IHBhcmVudDsKKwlkZXZpY2UtPnBhcmVudCA9IGFjcGlfYnVzX2dldF9wYXJlbnQoaGFuZGxlKTsKIAlkZXZpY2UtPmJ1c19vcHMgPSAqb3BzOyAvKiB3b3Jrcm91bmQgZm9yIG5vdCBjYWxsIC5zdGFydCAqLworCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gc3RhOwogCi0KLQlhY3BpX2RldmljZV9nZXRfYnVzaWQoZGV2aWNlLCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX2dldF9idXNpZChkZXZpY2UpOwogCiAJLyoKIAkgKiBGbGFncwogCSAqIC0tLS0tCi0JICogR2V0IHByaW9yIHRvIGNhbGxpbmcgYWNwaV9idXNfZ2V0X3N0YXR1cygpIHNvIHdlIGtub3cgd2hldGhlcgotCSAqIG9yIG5vdCBfU1RBIGlzIHByZXNlbnQuICBOb3RlIHRoYXQgd2Ugb25seSBsb29rIGZvciBvYmplY3QKLQkgKiBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzIHVudGlsIHdlIGtub3cgdGhlIGRldmljZSBpcwotCSAqIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgorCSAqIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgZm9yIG9iamVjdCBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzCisJICogdW50aWwgd2Uga25vdyB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgogCSAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9mbGFncyhkZXZpY2UpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCiAJLyoKLQkgKiBTdGF0dXMKLQkgKiAtLS0tLS0KLQkgKiBTZWUgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LiAgV2UgYWx3YXlzIGFzc3VtZSB0aGF0IG5vbi1EZXZpY2UKLQkgKiBhbmQgbm9uLVByb2Nlc3NvciBvYmplY3RzIChlLmcuIHRoZXJtYWwgem9uZXMsIHBvd2VyIHJlc291cmNlcywKLQkgKiBldGMuKSBhcmUgcHJlc2VudCwgZnVuY3Rpb25pbmcsIGV0Yy4gKGF0IGxlYXN0IHdoZW4gcGFyZW50IG9iamVjdAotCSAqIGlzIHByZXNlbnQpLiAgTm90ZSB0aGF0IF9TVEEgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHNvbWUKLQkgKiBvYmplY3RzIChlLmcuIHBvd2VyIHJlc291cmNlcykgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIGhvdyB3ZSB1c2UKLQkgKiBpdC4KLQkgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOgotCWNhc2UgQUNQSV9CVVNfVFlQRV9ERVZJQ0U6Ci0JCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9zdGF0dXMoZGV2aWNlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShyZXN1bHQpKSB7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJLyoKLQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbCwgdGhlCi0JCSAqIGRldmljZSBzaG91bGQgbm90IGJlIGFkZGVkIHRvIExpbnV4IEFDUEkgZGV2aWNlIHRyZWUuCi0JCSAqIFdoZW4gdGhlIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGluYWwsCi0JCSAqIGl0IHNob3VsZCBiZSBhZGRlZCB0byBMaW51eCBBQ1BJIHRyZWUuIEZvciBleGFtcGxlIDogYmF5Ci0JCSAqIGRldmljZSAsIGRvY2sgZGV2aWNlLgotCQkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgaXQgaXMgdW5uY2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JCSAqIGJheSBkZXZpY2Ugb3IgZG9jayBkZXZpY2UuCi0JCSAqLwotCQlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQgJiYgIWRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwpIHsKLQkJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKLQkJICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOwotCQlicmVhazsKLQl9Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgRGV2aWNlCiAJICogLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBUQkQ6IFN5bmNoIHdpdGggQ29yZSdzIGVudW1lcmF0aW9uL2luaXRpYWxpemF0aW9uIHByb2Nlc3MuCiAJICovCi0KLQkvKgotCSAqIEhhcmR3YXJlIElELCBVbmlxdWUgSUQsICYgQnVzIEFkZHJlc3MKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0JYWNwaV9kZXZpY2Vfc2V0X2lkKGRldmljZSwgcGFyZW50LCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX3NldF9pZChkZXZpY2UpOwogCiAJLyoKIAkgKiBQb3dlciBNYW5hZ2VtZW50CkBAIC0xMzQxLDEwICsxMjExLDEwIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoKHJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSwgdHlwZSkpKQorCWlmICgocmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlKSkpCiAJCWdvdG8gZW5kOwogCi0JcmVzdWx0ID0gYWNwaV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlLCBwYXJlbnQpOworCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAKIAkvKgogCSAqIEJpbmQgX0FEUi1CYXNlZCBEZXZpY2VzIHdoZW4gaG90IGFkZApAQCAtMTM1NSwxNjUgKzEyMjUsMTQzIEBACiAJfQogCiBlbmQ6Ci0JaWYgKCFyZXN1bHQpCisJaWYgKCFyZXN1bHQpIHsKKwkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCSJBZGRpbmcgJXMgWyVzXSBwYXJlbnQgJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmRldiksCisJCQkgKGNoYXIgKikgYnVmZmVyLnBvaW50ZXIsCisJCQkgZGV2aWNlLT5wYXJlbnQgPyBkZXZfbmFtZSgmZGV2aWNlLT5wYXJlbnQtPmRldikgOgorCQkJCQkgICIobnVsbCkiKSk7CisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAkJKmNoaWxkID0gZGV2aWNlOwotCWVsc2UKKwl9IGVsc2UKIAkJYWNwaV9kZXZpY2VfcmVsZWFzZSgmZGV2aWNlLT5kZXYpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBhY3BpX2J1c19zY2FuKHN0cnVjdCBhY3BpX2RldmljZSAqc3RhcnQsIHN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcykKKyNkZWZpbmUgQUNQSV9TVEFfREVGQVVMVCAoQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8IFwKKwkJCSAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpCisKK3N0YXRpYyBpbnQgYWNwaV9idXNfdHlwZV9hbmRfc3RhdHVzKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICp0eXBlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpjaGlsZCA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgcGhhbmRsZSA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgY2hhbmRsZSA9IE5VTEw7Ci0JYWNwaV9vYmplY3RfdHlwZSB0eXBlID0gMDsKLQl1MzIgbGV2ZWwgPSAxOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX29iamVjdF90eXBlIGFjcGlfdHlwZTsKIAorCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoaGFuZGxlLCAmYWNwaV90eXBlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFzdGFydCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBzdGFydDsKLQlwaGFuZGxlID0gc3RhcnQtPmhhbmRsZTsKLQotCS8qCi0JICogUGFyc2UgdGhyb3VnaCB0aGUgQUNQSSBuYW1lc3BhY2UsIGlkZW50aWZ5IGFsbCAnZGV2aWNlcycsIGFuZAotCSAqIGNyZWF0ZSBhIG5ldyAnc3RydWN0IGFjcGlfZGV2aWNlJyBmb3IgZWFjaC4KLQkgKi8KLQl3aGlsZSAoKGxldmVsID4gMCkgJiYgcGFyZW50KSB7Ci0KLQkJc3RhdHVzID0gYWNwaV9nZXRfbmV4dF9vYmplY3QoQUNQSV9UWVBFX0FOWSwgcGhhbmRsZSwKLQkJCQkJICAgICAgY2hhbmRsZSwgJmNoYW5kbGUpOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgc2NvcGUgaXMgZXhoYXVzdGVkIHRoZW4gbW92ZSBvdXIgd2F5IGJhY2sgdXAuCi0JCSAqLwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWxldmVsLS07Ci0JCQljaGFuZGxlID0gcGhhbmRsZTsKLQkJCWFjcGlfZ2V0X3BhcmVudChwaGFuZGxlLCAmcGhhbmRsZSk7Ci0JCQlpZiAocGFyZW50LT5wYXJlbnQpCi0JCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoY2hhbmRsZSwgJnR5cGUpOworCXN3aXRjaCAoYWNwaV90eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfQU5ZOgkJLyogZm9yIEFDUElfUk9PVF9PQkpFQ1QgKi8KKwljYXNlIEFDUElfVFlQRV9ERVZJQ0U6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7CisJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGhhbmRsZSwgc3RhKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBpcyBhIHNjb3BlIG9iamVjdCB0aGVuIHBhcnNlIGl0IChkZXB0aC1maXJzdCkuCi0JCSAqLwotCQlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfU0NPUEUpIHsKLQkJCWxldmVsKys7Ci0JCQlwaGFuZGxlID0gY2hhbmRsZTsKLQkJCWNoYW5kbGUgPSBOVUxMOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gb2JqZWN0cyB0aGF0IHdlIGNvbnNpZGVyICdkZXZpY2VzJy4KLQkJICovCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEFDUElfVFlQRV9ERVZJQ0U6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1RIRVJNQUw6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9USEVSTUFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG9wcy0+YWNwaV9vcF9hZGQpCi0JCQlzdGF0dXMgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZjaGlsZCwgcGFyZW50LAotCQkJCWNoYW5kbGUsIHR5cGUsIG9wcyk7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9kZXZpY2UoY2hhbmRsZSwgJmNoaWxkKTsKLQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjsKKwkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoaGFuZGxlLCBzdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQljb250aW51ZTsKLQotCQlpZiAob3BzLT5hY3BpX29wX3N0YXJ0ICYmICEob3BzLT5hY3BpX29wX2FkZCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChjaGlsZCk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIGVuYWJsZWQsIGFuZCBmdW5jdGlvbmluZyB0aGVuCi0JCSAqIHBhcnNlIGl0cyBzY29wZSAoZGVwdGgtZmlyc3QpLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8KLQkJICogcmVwcmVzZW50IGFic2VudCBkZXZpY2VzIHRvIGZhY2lsaXRhdGUgUG5QIG5vdGlmaWNhdGlvbnMKLQkJICogLS0gYnV0IG9ubHkgdGhlIHN1YnRyZWUgaGVhZCAobm90IGFsbCBvZiBpdHMgY2hpbGRyZW4sCi0JCSAqIHdoaWNoIHdpbGwgYmUgZW51bWVyYXRlZCB3aGVuIHRoZSBwYXJlbnQgaXMgaW5zZXJ0ZWQpLgotCQkgKgotCQkgKiBUQkQ6IE5lZWQgbm90aWZpY2F0aW9ucyBhbmQgb3RoZXIgZGV0ZWN0aW9uIG1lY2hhbmlzbXMKLQkJICogICAgICBpbiBwbGFjZSBiZWZvcmUgd2UgY2FuIGZ1bGx5IGltcGxlbWVudCB0aGlzLgotCQkgKi8KLQkJIC8qCi0JCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbCwgaXQgaXMgYWxzbwotCQkgKiBuZWNlc3NhcnkgdG8gc2NhbiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UuCi0JCSAqLwotCQlpZiAoY2hpbGQtPnN0YXR1cy5wcmVzZW50IHx8ICghY2hpbGQtPnN0YXR1cy5wcmVzZW50ICYmCi0JCQkJCWNoaWxkLT5zdGF0dXMuZnVuY3Rpb25hbCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfZ2V0X25leHRfb2JqZWN0KEFDUElfVFlQRV9BTlksIGNoYW5kbGUsCi0JCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKLQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJCWxldmVsKys7Ci0JCQkJcGhhbmRsZSA9IGNoYW5kbGU7Ci0JCQkJY2hhbmRsZSA9IE5VTEw7Ci0JCQkJcGFyZW50ID0gY2hpbGQ7Ci0JCQl9Ci0JCX0KKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIEFDUElfVFlQRV9USEVSTUFMOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfVEhFUk1BTDsKKwkJKnN0YSA9IEFDUElfU1RBX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYnVzX2NoZWNrX2FkZChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsCisJCQkJICAgICAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKK3sKKwlzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMgPSBjb250ZXh0OworCWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBhY3BpX2J1c190eXBlX2FuZF9zdGF0dXMoaGFuZGxlLCAmdHlwZSwgJnN0YSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIEFFX09LOworCisJaWYgKCEoc3RhICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpICYmCisJICAgICEoc3RhICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSkKKwkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisKKwkvKgorCSAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYW4gYWNwaV9kZXZpY2UgZnJvbSBhIHByZXZpb3VzIGVudW1lcmF0aW9uLiAgSWYKKwkgKiBzbywgd2UgbmVlZG4ndCBhZGQgaXQgYWdhaW4sIGJ1dCB3ZSBtYXkgc3RpbGwgaGF2ZSB0byBzdGFydCBpdC4KKwkgKi8KKwlkZXZpY2UgPSBOVUxMOworCWFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwlpZiAob3BzLT5hY3BpX29wX2FkZCAmJiAhZGV2aWNlKQorCQlhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGhhbmRsZSwgdHlwZSwgc3RhLCBvcHMpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCisJaWYgKG9wcy0+YWNwaV9vcF9zdGFydCAmJiAhKG9wcy0+YWNwaV9vcF9hZGQpKSB7CisJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChkZXZpY2UpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gQUVfQ1RSTF9ERVBUSDsKKwl9CisKKwlpZiAoISpyZXR1cm5fdmFsdWUpCisJCSpyZXR1cm5fdmFsdWUgPSBkZXZpY2U7CisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW4oYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMsCisJCQkgc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXZvaWQgKmRldmljZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBhY3BpX2J1c19jaGVja19hZGQoaGFuZGxlLCAwLCBvcHMsICZkZXZpY2UpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBoYW5kbGUsIEFDUElfVUlOVDMyX01BWCwKKwkJCQkgICAgYWNwaV9idXNfY2hlY2tfYWRkLCBvcHMsICZkZXZpY2UpOworCisJaWYgKGNoaWxkKQorCQkqY2hpbGQgPSBkZXZpY2U7CisJcmV0dXJuIDA7Cit9CisKIGludAogYWNwaV9idXNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAogCSAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAogCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CiAJb3BzLmFjcGlfb3BfYWRkID0gMTsKIAotCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoY2hpbGQsIHBhcmVudCwgaGFuZGxlLCB0eXBlLCAmb3BzKTsKLQlpZiAoIXJlc3VsdCkKLQkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbigqY2hpbGQsICZvcHMpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19hZGQpOwogCiBpbnQgYWNwaV9idXNfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAorCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CisJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVzdWx0ID0gYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KGRldmljZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKLQkJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGRldmljZSwgJm9wcyk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJYWNwaV9idXNfc2NhbihkZXZpY2UtPmhhbmRsZSwgJm9wcywgTlVMTCk7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX3N0YXJ0KTsKIApAQCAtMTU3MiwxNSArMTQyMCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9idXNfdHJpbSk7CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfc2Nhbl9maXhlZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKnJvb3QpCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW5fZml4ZWQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKLQlpZiAoIXJvb3QpCi0JCXJldHVybiAtRU5PREVWOwotCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKQEAgLTE1ODksMTYgKzE0MzQsMTYgQEAKIAkgKiBFbnVtZXJhdGUgYWxsIGZpeGVkLWZlYXR1cmUgZGV2aWNlcy4KIAkgKi8KIAlpZiAoKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfUE9XRVJfQlVUVE9OKSA9PSAwKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgYWNwaV9yb290LAotCQkJCQkJTlVMTCwKKwkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBOVUxMLAogCQkJCQkJQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04sCisJCQkJCQlBQ1BJX1NUQV9ERUZBVUxULAogCQkJCQkJJm9wcyk7CiAJfQogCiAJaWYgKChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1NMRUVQX0JVVFRPTikgPT0gMCkgewotCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGFjcGlfcm9vdCwKLQkJCQkJCU5VTEwsCisJCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgTlVMTCwKIAkJCQkJCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAorCQkJCQkJQUNQSV9TVEFfREVGQVVMVCwKIAkJCQkJCSZvcHMpOwogCX0KIApAQCAtMTYyMSwyNCArMTQ2NiwxNSBAQAogCX0KIAogCS8qCi0JICogQ3JlYXRlIHRoZSByb290IGRldmljZSBpbiB0aGUgYnVzJ3MgZGV2aWNlIHRyZWUKLQkgKi8KLQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZhY3BpX3Jvb3QsIE5VTEwsIEFDUElfUk9PVF9PQkpFQ1QsCi0JCQkJCUFDUElfQlVTX1RZUEVfU1lTVEVNLCAmb3BzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIERvbmU7Ci0KLQkvKgogCSAqIEVudW1lcmF0ZSBkZXZpY2VzIGluIHRoZSBBQ1BJIG5hbWVzcGFjZS4KIAkgKi8KLQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuX2ZpeGVkKGFjcGlfcm9vdCk7CisJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihBQ1BJX1JPT1RfT0JKRUNULCAmb3BzLCAmYWNwaV9yb290KTsKIAogCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGFjcGlfcm9vdCwgJm9wcyk7CisJCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW5fZml4ZWQoKTsKIAogCWlmIChyZXN1bHQpCiAJCWFjcGlfZGV2aWNlX3VucmVnaXN0ZXIoYWNwaV9yb290LCBBQ1BJX0JVU19SRU1PVkFMX05PUk1BTCk7CiAKLURvbmU6CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggYTkwYWZjYy4uNGNjMWI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTQxMyw2ICs0MTMsMzAgQEAKIAkJfSwKIAl9LAogCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgUGF2aWxpb24gZHY0IiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY0IiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIFBhdmlsaW9uIGR2NyIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NyIpLAorCQl9LAorCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBDb21wYXEgUHJlc2FyaW8gQ1E0MCBOb3RlYm9vayBQQyIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNvbXBhcSBQcmVzYXJpbyBDUTQwIE5vdGVib29rIFBDIiksCisJCX0sCisJfSwKKwl7CiAJLmNhbGxiYWNrID0gaW5pdF9vbGRfc3VzcGVuZF9vcmRlcmluZywKIAkuaWRlbnQgPSAiUGFuYXNvbmljIENGNTEtMkwiLAogCS5tYXRjaGVzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA5NGIxYTRjLi4wNWRmZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBhY3BpX3ZpZGVvX2RldmljZV93cml0ZV9icmlnaHRuZXNzKHN0cnVjdCBmaWxlICpmaWxlLAogCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3Nfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTEwOSw3ICsxMTA5LDEyIEBACiAJICovCiAKIAkvKiBEb2VzIHRoaXMgZGV2aWNlIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nPyAqLwotCWlmICh2aWRlby0+Y2FwLl9ET1MpIHsKKwlpZiAodmlkZW8tPmNhcC5fRE9TIHx8IHZpZGVvLT5jYXAuX0RPRCkgeworCQlpZiAoIXZpZGVvLT5jYXAuX0RPUykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcKKwkJCQkiQUNQSSglcykgZGVmaW5lcyBfRE9EIGJ1dCBub3QgX0RPU1xuIiwKKwkJCQlhY3BpX2RldmljZV9iaWQodmlkZW8tPmRldmljZSkpOworCQl9CiAJCXZpZGVvLT5mbGFncy5tdWx0aWhlYWQgPSAxOwogCQlzdGF0dXMgPSAwOwogCX0KQEAgLTEyMTgsNyArMTIyMyw3IEBACiAJdTMyIHN0YXRlID0gMDsKIAogCi0JaWYgKCFkZXYgfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIWRldiB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKQEAgLTEyNzUsNyArMTI4MCw3IEBACiAJaW50IGk7CiAKIAotCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MgfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIWRldiB8fCAhZGV2LT5icmlnaHRuZXNzIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTU1Nyw3ICsxNTYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgb3B0LCBvcHRpb25zOwogCiAKLQlpZiAoIXZpZGVvIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCF2aWRlbyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX3ZpZGVvX2J1c19QT1NUX29wdGlvbnModmlkZW8sICZvcHRpb25zKTsKQEAgLTE1OTcsNyArMTYwMiw3IEBACiAJdW5zaWduZWQgbG9uZyBvcHQ7CiAKIAotCWlmICghdmlkZW8gfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIXZpZGVvIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTk4Niw2ICsxOTkxLDEwIEBACiAKIAlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldmljZSwgbGV2ZWxfbmV4dCk7CiAKKwlpZiAoIXJlc3VsdCkKKwkJYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZShkZXZpY2UtPmJhY2tsaWdodCwKKwkJCQkgICAgICAgQkFDS0xJR0hUX1VQREFURV9IT1RLRVkpOworCiBvdXQ6CiAJaWYgKHJlc3VsdCkKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIHN3aXRjaCB0aGUgYnJpZ2h0bmVzc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKaW5kZXggNzAzMmYyNS4uNTc1NTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIERvZXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSAmJgorCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKIAkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQogCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGFjZDExNjI3Li5hMzI0MWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIAlIT1NUX1ZFUlNJT04JCT0gMHgxMCwgLyogQUhDSSBzcGVjLiB2ZXJzaW9uIGNvbXBsaWFuY3kgKi8KIAlIT1NUX0VNX0xPQwkJPSAweDFjLCAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBsb2NhdGlvbiAqLwogCUhPU1RfRU1fQ1RMCQk9IDB4MjAsIC8qIEVuY2xvc3VyZSBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKwlIT1NUX0NBUDIJCT0gMHgyNCwgLyogaG9zdCBjYXBhYmlsaXRpZXMsIGV4dGVuZGVkICovCiAKIAkvKiBIT1NUX0NUTCBiaXRzICovCiAJSE9TVF9SRVNFVAkJPSAoMSA8PCAwKSwgIC8qIHJlc2V0IGNvbnRyb2xsZXI7IHNlbGYtY2xlYXIgKi8KQEAgLTEyOSwxNiArMTMwLDI5IEBACiAJSE9TVF9BSENJX0VOCQk9ICgxIDw8IDMxKSwgLyogQUhDSSBlbmFibGVkICovCiAKIAkvKiBIT1NUX0NBUCBiaXRzICovCisJSE9TVF9DQVBfU1hTCQk9ICgxIDw8IDUpLCAgLyogU3VwcG9ydHMgRXh0ZXJuYWwgU0FUQSAqLwogCUhPU1RfQ0FQX0VNUwkJPSAoMSA8PCA2KSwgIC8qIEVuY2xvc3VyZSBNYW5hZ2VtZW50IHN1cHBvcnQgKi8KLQlIT1NUX0NBUF9TU0MJCT0gKDEgPDwgMTQpLCAvKiBTbHVtYmVyIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9DQ0MJCT0gKDEgPDwgNyksICAvKiBDb21tYW5kIENvbXBsZXRpb24gQ29hbGVzY2luZyAqLworCUhPU1RfQ0FQX1BBUlQJCT0gKDEgPDwgMTMpLCAvKiBQYXJ0aWFsIHN0YXRlIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9TU0MJCT0gKDEgPDwgMTQpLCAvKiBTbHVtYmVyIHN0YXRlIGNhcGFibGUgKi8KKwlIT1NUX0NBUF9QSU9fTVVMVEkJPSAoMSA8PCAxNSksIC8qIFBJTyBtdWx0aXBsZSBEUlEgc3VwcG9ydCAqLworCUhPU1RfQ0FQX0ZCUwkJPSAoMSA8PCAxNiksIC8qIEZJUy1iYXNlZCBzd2l0Y2hpbmcgc3VwcG9ydCAqLwogCUhPU1RfQ0FQX1BNUAkJPSAoMSA8PCAxNyksIC8qIFBvcnQgTXVsdGlwbGllciBzdXBwb3J0ICovCisJSE9TVF9DQVBfT05MWQkJPSAoMSA8PCAxOCksIC8qIFN1cHBvcnRzIEFIQ0kgbW9kZSBvbmx5ICovCiAJSE9TVF9DQVBfQ0xPCQk9ICgxIDw8IDI0KSwgLyogQ29tbWFuZCBMaXN0IE92ZXJyaWRlIHN1cHBvcnQgKi8KKwlIT1NUX0NBUF9MRUQJCT0gKDEgPDwgMjUpLCAvKiBTdXBwb3J0cyBhY3Rpdml0eSBMRUQgKi8KIAlIT1NUX0NBUF9BTFBNCQk9ICgxIDw8IDI2KSwgLyogQWdncmVzc2l2ZSBMaW5rIFBNIHN1cHBvcnQgKi8KIAlIT1NUX0NBUF9TU1MJCT0gKDEgPDwgMjcpLCAvKiBTdGFnZ2VyZWQgU3Bpbi11cCAqLworCUhPU1RfQ0FQX01QUwkJPSAoMSA8PCAyOCksIC8qIE1lY2hhbmljYWwgcHJlc2VuY2Ugc3dpdGNoICovCiAJSE9TVF9DQVBfU05URgkJPSAoMSA8PCAyOSksIC8qIFNOb3RpZmljYXRpb24gcmVnaXN0ZXIgKi8KIAlIT1NUX0NBUF9OQ1EJCT0gKDEgPDwgMzApLCAvKiBOYXRpdmUgQ29tbWFuZCBRdWV1ZWluZyAqLwogCUhPU1RfQ0FQXzY0CQk9ICgxIDw8IDMxKSwgLyogUENJIERBQyAoNjQtYml0IERNQSkgc3VwcG9ydCAqLwogCisJLyogSE9TVF9DQVAyIGJpdHMgKi8KKwlIT1NUX0NBUDJfQk9ICQk9ICgxIDw8IDApLCAgLyogQklPUy9PUyBoYW5kb2ZmIHN1cHBvcnRlZCAqLworCUhPU1RfQ0FQMl9OVk1IQ0kJPSAoMSA8PCAxKSwgIC8qIE5WTUhDSSBzdXBwb3J0ZWQgKi8KKwlIT1NUX0NBUDJfQVBTVAkJPSAoMSA8PCAyKSwgIC8qIEF1dG9tYXRpYyBwYXJ0aWFsIHRvIHNsdW1iZXIgKi8KKwogCS8qIHJlZ2lzdGVycyBmb3IgZWFjaCBTQVRBIHBvcnQgKi8KIAlQT1JUX0xTVF9BRERSCQk9IDB4MDAsIC8qIGNvbW1hbmQgbGlzdCBETUEgYWRkciAqLwogCVBPUlRfTFNUX0FERFJfSEkJPSAweDA0LCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgaGkgKi8KQEAgLTI2Nyw4ICsyODEsMTAgQEAKIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiB7CiAJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIEFIQ0lfSEZMQUdfKiAqLwogCXUzMgkJCWNhcDsJCS8qIGNhcCB0byB1c2UgKi8KKwl1MzIJCQljYXAyOwkJLyogY2FwMiB0byB1c2UgKi8KIAl1MzIJCQlwb3J0X21hcDsJLyogcG9ydCBtYXAgdG8gdXNlICovCiAJdTMyCQkJc2F2ZWRfY2FwOwkvKiBzYXZlZCBpbml0aWFsIGNhcCAqLworCXUzMgkJCXNhdmVkX2NhcDI7CS8qIHNhdmVkIGluaXRpYWwgY2FwMiAqLwogCXUzMgkJCXNhdmVkX3BvcnRfbWFwOwkvKiBzYXZlZCBpbml0aWFsIHBvcnRfbWFwICovCiAJdTMyIAkJCWVtX2xvYzsgLyogZW5jbG9zdXJlIG1hbmFnZW1lbnQgbG9jYXRpb24gKi8KIH07CkBAIC0zMzEsMTIgKzM0NywxNSBAQAogCiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXBzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcDIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfcG9ydF9jbWQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKK0RFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXAyLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXAyLCBOVUxMKTsKIERFVklDRV9BVFRSKGFoY2lfaG9zdF92ZXJzaW9uLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF92ZXJzaW9uLCBOVUxMKTsKIERFVklDRV9BVFRSKGFoY2lfcG9ydF9jbWQsIFNfSVJVR08sIGFoY2lfc2hvd19wb3J0X2NtZCwgTlVMTCk7CiAKQEAgLTM0NSw2ICszNjQsNyBAQAogCSZkZXZfYXR0cl9lbV9tZXNzYWdlX3R5cGUsCiAJJmRldl9hdHRyX2VtX21lc3NhZ2UsCiAJJmRldl9hdHRyX2FoY2lfaG9zdF9jYXBzLAorCSZkZXZfYXR0cl9haGNpX2hvc3RfY2FwMiwKIAkmZGV2X2F0dHJfYWhjaV9ob3N0X3ZlcnNpb24sCiAJJmRldl9hdHRyX2FoY2lfcG9ydF9jbWQsCiAJTlVMTApAQCAtNDQ3LDcgKzQ2Nyw4IEBACiAJW2JvYXJkX2FoY2lfc2I2MDBdID0KIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMIHwKLQkJCQkgQUhDSV9IRkxBR19OT19NU0kgfCBBSENJX0hGTEFHX1NFQ1QyNTUpLAorCQkJCSBBSENJX0hGTEFHX05PX01TSSB8IEFIQ0lfSEZMQUdfU0VDVDI1NSB8CisJCQkJIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKQEAgLTU1NCw3ICs1NzUsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAogCS8qIEFNRCAqLwotCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBTQjkwMCAqLworCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBIdWRzb24tMiAqLwogCS8qIEFNRCBpcyB1c2luZyBSQUlEIGNsYXNzIG9ubHkgZm9yIGFoY2kgY29udHJvbGxlcnMgKi8KIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSAgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmZmZiwgYm9hcmRfYWhjaSB9LApAQCAtNTg0LDYgKzYwNSw3IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1OSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU4MCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIExpbnV4IElEICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCkBAIC03MzIsNiArNzU0LDE2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGhwcml2LT5jYXApOwogfQogCitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXAyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOworCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGhwcml2LT5jYXAyKTsKK30KKwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTc3MSw3ICs4MDMsNyBAQAogCQkJCSAgICAgc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdikKIHsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBwY2ltX2lvbWFwX3RhYmxlKHBkZXYpW0FIQ0lfUENJX0JBUl07Ci0JdTMyIGNhcCwgcG9ydF9tYXA7CisJdTMyIGNhcCwgY2FwMiwgdmVycywgcG9ydF9tYXA7CiAJaW50IGk7CiAJaW50IG12OwogCkBAIC03ODQsNiArODE2LDE0IEBACiAJaHByaXYtPnNhdmVkX2NhcCA9IGNhcCA9IHJlYWRsKG1taW8gKyBIT1NUX0NBUCk7CiAJaHByaXYtPnNhdmVkX3BvcnRfbWFwID0gcG9ydF9tYXAgPSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsKIAorCS8qIENBUDIgcmVnaXN0ZXIgaXMgb25seSBkZWZpbmVkIGZvciBBSENJIDEuMiBhbmQgbGF0ZXIgKi8KKwl2ZXJzID0gcmVhZGwobW1pbyArIEhPU1RfVkVSU0lPTik7CisJaWYgKCh2ZXJzID4+IDE2KSA+IDEgfHwKKwkgICAoKHZlcnMgPj4gMTYpID09IDEgJiYgKHZlcnMgJiAweEZGRkYpID49IDB4MjAwKSkKKwkJaHByaXYtPnNhdmVkX2NhcDIgPSBjYXAyID0gcmVhZGwobW1pbyArIEhPU1RfQ0FQMik7CisJZWxzZQorCQlocHJpdi0+c2F2ZWRfY2FwMiA9IGNhcDIgPSAwOworCiAJLyogc29tZSBjaGlwcyBoYXZlIGVycmF0YSBwcmV2ZW50aW5nIDY0Yml0IHVzZSAqLwogCWlmICgoY2FwICYgSE9TVF9DQVBfNjQpICYmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHXzMyQklUX09OTFkpKSB7CiAJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LApAQCAtODY5LDYgKzkwOSw3IEBACiAKIAkvKiByZWNvcmQgdmFsdWVzIHRvIHVzZSBkdXJpbmcgb3BlcmF0aW9uICovCiAJaHByaXYtPmNhcCA9IGNhcDsKKwlocHJpdi0+Y2FwMiA9IGNhcDI7CiAJaHByaXYtPnBvcnRfbWFwID0gcG9ydF9tYXA7CiB9CiAKQEAgLTg4Nyw2ICs5MjgsOCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07CiAKIAl3cml0ZWwoaHByaXYtPnNhdmVkX2NhcCwgbW1pbyArIEhPU1RfQ0FQKTsKKwlpZiAoaHByaXYtPnNhdmVkX2NhcDIpCisJCXdyaXRlbChocHJpdi0+c2F2ZWRfY2FwMiwgbW1pbyArIEhPU1RfQ0FQMik7CiAJd3JpdGVsKGhwcml2LT5zYXZlZF9wb3J0X21hcCwgbW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CiAJKHZvaWQpIHJlYWRsKG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOwkvKiBmbHVzaCAqLwogfQpAQCAtMjUzNCwxMyArMjU3NywxNCBAQAogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhvc3QtPmRldik7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gaG9zdC0+aW9tYXBbQUhDSV9QQ0lfQkFSXTsKLQl1MzIgdmVycywgY2FwLCBpbXBsLCBzcGVlZDsKKwl1MzIgdmVycywgY2FwLCBjYXAyLCBpbXBsLCBzcGVlZDsKIAljb25zdCBjaGFyICpzcGVlZF9zOwogCXUxNiBjYzsKIAljb25zdCBjaGFyICpzY2NfczsKIAogCXZlcnMgPSByZWFkbChtbWlvICsgSE9TVF9WRVJTSU9OKTsKIAljYXAgPSBocHJpdi0+Y2FwOworCWNhcDIgPSBocHJpdi0+Y2FwMjsKIAlpbXBsID0gaHByaXYtPnBvcnRfbWFwOwogCiAJc3BlZWQgPSAoY2FwID4+IDIwKSAmIDB4ZjsKQEAgLTI1ODMsMjUgKzI2MjcsMjkgQEAKIAkJImZsYWdzOiAiCiAJCSIlcyVzJXMlcyVzJXMlcyIKIAkJIiVzJXMlcyVzJXMlcyVzIgotCQkiJXNcbiIKKwkJIiVzJXMlcyVzJXMlc1xuIgogCQksCiAKLQkJY2FwICYgKDEgPDwgMzEpID8gIjY0Yml0ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMzApID8gIm5jcSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI5KSA/ICJzbnRmICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjgpID8gImlsY2sgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNykgPyAic3RhZyAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI2KSA/ICJwbSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI1KSA/ICJsZWQgIiA6ICIiLAotCi0JCWNhcCAmICgxIDw8IDI0KSA/ICJjbG8gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxOSkgPyAibnogIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxOCkgPyAib25seSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE3KSA/ICJwbXAgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxNSkgPyAicGlvICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTQpID8gInNsdW0gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxMykgPyAicGFydCAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDYpID8gImVtcyAiOiAiIgorCQljYXAgJiBIT1NUX0NBUF82NCA/ICI2NGJpdCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX05DUSA/ICJuY3EgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TTlRGID8gInNudGYgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9NUFMgPyAiaWxjayAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NTUyA/ICJzdGFnICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQUxQTSA/ICJwbSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0xFRCA/ICJsZWQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9DTE8gPyAiY2xvICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfT05MWSA/ICJvbmx5ICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUE1QID8gInBtcCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0ZCUyA/ICJmYnMgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9QSU9fTVVMVEkgPyAicGlvICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU1NDID8gInNsdW0gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9QQVJUID8gInBhcnQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9DQ0MgPyAiY2NjICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfRU1TID8gImVtcyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NYUyA/ICJzeHMgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX0FQU1QgPyAiYXBzdCAiIDogIiIsCisJCWNhcDIgJiBIT1NUX0NBUDJfTlZNSENJID8gIm52bXAgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX0JPSCA/ICJib2ggIiA6ICIiCiAJCSk7CiB9CiAKQEAgLTI2NTAsMTcgKzI2OTgsMTUgQEAKIAl9CiB9CiAKLS8qCi0gKiBTQjYwMCBhaGNpIGNvbnRyb2xsZXIgb24gY2VydGFpbiBib2FyZHMgY2FuJ3QgZG8gNjRiaXQgRE1BIHdpdGgKLSAqIG9sZGVyIEJJT1MuCi0gKi8KLXN0YXRpYyBib29sIGFoY2lfc2I2MDBfMzJiaXRfb25seShzdHJ1Y3QgcGNpX2RldiAqcGRldikKKy8qIG9ubHkgc29tZSBTQjYwMCBhaGNpIGNvbnRyb2xsZXJzIGNhbiBkbyA2NGJpdCBETUEgKi8KK3N0YXRpYyBib29sIGFoY2lfc2I2MDBfZW5hYmxlXzY0Yml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzeXNpZHNbXSA9IHsKIAkJLyoKIAkJICogVGhlIG9sZGVzdCB2ZXJzaW9uIGtub3duIHRvIGJlIGJyb2tlbiBpcyAwOTAxIGFuZAogCQkgKiB3b3JraW5nIGlzIDE1MDEgd2hpY2ggd2FzIHJlbGVhc2VkIG9uIDIwMDctMTAtMjYuCi0JCSAqIEZvcmNlIDMyYml0IERNQSBvbiBhbnl0aGluZyBvbGRlciB0aGFuIDE1MDEuCisJCSAqIEVuYWJsZSA2NGJpdCBETUEgb24gMTUwMSBhbmQgYW55dGhpbmcgbmV3ZXIuCisJCSAqCiAJCSAqIFBsZWFzZSByZWFkIGJrbyM5NDEyIGZvciBtb3JlIGluZm8uCiAJCSAqLwogCQl7CkBAIC0yNjczLDQ2ICsyNzE5LDU3IEBACiAJCQkuZHJpdmVyX2RhdGEgPSAiMjAwNzEwMjYiLAkvKiB5eXl5bW1kZCAqLwogCQl9LAogCQkvKgotCQkgKiBJdCdzIHlldCB1bmtub3duIHdoZXRoZXIgbW9yZSByZWNlbnQgQklPUyBmaXhlcyB0aGUKLQkJICogcHJvYmxlbS4gIEJsYWNrbGlzdCB0aGUgd2hvbGUgYm9hcmQgZm9yIHRoZSB0aW1lCi0JCSAqIGJlaW5nLiAgUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyB0aHJlYWQgZm9yIG1vcmUKLQkJICogaW5mby4KKwkJICogQWxsIEJJT1MgdmVyc2lvbnMgZm9yIHRoZSBNU0kgSzlBMiBQbGF0aW51bSAoTVMtNzM3NikKKwkJICogc3VwcG9ydCA2NGJpdCBETUEuCiAJCSAqCi0JCSAqIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmlkZS80MjMyNgorCQkgKiBCSU9TIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAxLjUgaGFkIHRoZSBNYW51ZmFjdHVyZXIgRE1JCisJCSAqIGZpZWxkcyBhcyAiTUlDUk8tU1RBUiBJTlRFUkFOVElPTkFMIENPLixMVEQiLgorCQkgKiBUaGlzIHNwZWxsaW5nIG1pc3Rha2Ugd2FzIGZpeGVkIGluIEJJT1MgdmVyc2lvbiAxLjUsIHNvCisJCSAqIDEuNSBhbmQgbGF0ZXIgaGF2ZSB0aGUgTWFudWZhY3R1cmVyIGFzCisJCSAqICJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLExURCIuCisJCSAqIFNvIHRyeSB0byBtYXRjaCBvbiBETUlfQk9BUkRfVkVORE9SIG9mICJNSUNSTy1TVEFSIElOVEVSIi4KKwkJICoKKwkJICogQklPUyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS45IGhhZCBhIEJvYXJkIFByb2R1Y3QgTmFtZQorCQkgKiBETUkgZmllbGQgb2YgIk1TLTczNzYiLiBUaGlzIHdhcyBjaGFuZ2VkIHRvIGJlCisJCSAqICJLOUEyIFBsYXRpbnVtIChNUy03Mzc2KSIgaW4gdmVyc2lvbiAxLjksIGJ1dCB3ZSBjYW4gc3RpbGwKKwkJICogbWF0Y2ggb24gRE1JX0JPQVJEX05BTUUgb2YgIk1TLTczNzYiLgogCQkgKi8KIAkJewotCQkJLmlkZW50ID0gIkdpZ2FieXRlIEdBLU1BNjlWTS1TMiIsCisJCQkuaWRlbnQgPSAiTVNJIEs5QTIgUGxhdGludW0iLAogCQkJLm1hdGNoZXMgPSB7CiAJCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCi0JCQkJCSAgIkdpZ2FieXRlIFRlY2hub2xvZ3kgQ28uLCBMdGQuIiksCi0JCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiR0EtTUE2OVZNLVMyIiksCisJCQkJCSAgIk1JQ1JPLVNUQVIgSU5URVIiKSwKKwkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJNUy03Mzc2IiksCiAJCQl9LAogCQl9LAogCQl7IH0KIAl9OwogCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICptYXRjaDsKKwlpbnQgeWVhciwgbW9udGgsIGRhdGU7CisJY2hhciBidWZbOV07CiAKIAltYXRjaCA9IGRtaV9maXJzdF9tYXRjaChzeXNpZHMpOwogCWlmIChwZGV2LT5idXMtPm51bWJlciAhPSAwIHx8IHBkZXYtPmRldmZuICE9IFBDSV9ERVZGTigweDEyLCAwKSB8fAogCSAgICAhbWF0Y2gpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChtYXRjaC0+ZHJpdmVyX2RhdGEpIHsKLQkJaW50IHllYXIsIG1vbnRoLCBkYXRlOwotCQljaGFyIGJ1Zls5XTsKKwlpZiAoIW1hdGNoLT5kcml2ZXJfZGF0YSkKKwkJZ290byBlbmFibGVfNjRiaXQ7CiAKLQkJZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCAmbW9udGgsICZkYXRlKTsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNGQlMDJkJTAyZCIsIHllYXIsIG1vbnRoLCBkYXRlKTsKKwlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsICZtb250aCwgJmRhdGUpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDRkJTAyZCUwMmQiLCB5ZWFyLCBtb250aCwgZGF0ZSk7CiAKLQkJaWYgKHN0cmNtcChidWYsIG1hdGNoLT5kcml2ZXJfZGF0YSkgPj0gMCkKLQkJCXJldHVybiBmYWxzZTsKLQorCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApCisJCWdvdG8gZW5hYmxlXzY0Yml0OworCWVsc2UgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBCSU9TIHRvbyBvbGQsICIKIAkJCSAgICJmb3JjaW5nIDMyYml0IERNQSwgdXBkYXRlIEJJT1NcbiIsIG1hdGNoLT5pZGVudCk7Ci0JfSBlbHNlCi0JCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IHRoaXMgYm9hcmQgY2FuJ3QgIgotCQkJICAgImRvIDY0Yml0IERNQSwgZm9yY2luZyAzMmJpdFxuIiwgbWF0Y2gtPmlkZW50KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAorZW5hYmxlXzY0Yml0OgorCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IGVuYWJsaW5nIDY0Yml0IERNQVxuIiwKKwkJICAgbWF0Y2gtPmlkZW50KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjg1OCw2ICsyOTE1LDU1IEBACiAJcmV0dXJuIHBkZXYtPmJ1cy0+bnVtYmVyID09ICh2YWwgPj4gOCkgJiYgcGRldi0+ZGV2Zm4gPT0gKHZhbCAmIDB4ZmYpOwogfQogCisjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCitzdGF0aWMgdm9pZCBhaGNpX2d0Zl9maWx0ZXJfd29ya2Fyb3VuZChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN5c2lkc1tdID0geworCQkvKgorCQkgKiBBc3BpcmUgMzgxMFQgaXNzdWVzIGEgYnVuY2ggb2YgU0FUQSBlbmFibGUgY29tbWFuZHMKKwkJICogdmlhIF9HVEYgaW5jbHVkaW5nIGFuIGludmFsaWQgb25lIGFuZCBvbmUgd2hpY2ggaXMKKwkJICogcmVqZWN0ZWQgYnkgdGhlIGRldmljZS4gIEFtb25nIHRoZSBzdWNjZXNzZnVsIG9uZXMKKwkJICogaXMgRlBETUEgbm9uLXplcm8gb2Zmc2V0IGVuYWJsZSB3aGljaCB3aGVuIGVuYWJsZWQKKwkJICogb25seSBvbiB0aGUgZHJpdmUgc2lkZSBsZWFkcyB0byBOQ1EgY29tbWFuZAorCQkgKiBmYWlsdXJlcy4gIEZpbHRlciBpdCBvdXQuCisJCSAqLworCQl7CisJCQkuaWRlbnQgPSAiQXNwaXJlIDM4MTBUIiwKKwkJCS5tYXRjaGVzID0geworCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSAzODEwVCIpLAorCQkJfSwKKwkJCS5kcml2ZXJfZGF0YSA9ICh2b2lkICopQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCwKKwkJfSwKKwkJeyB9CisJfTsKKwljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pID0gZG1pX2ZpcnN0X21hdGNoKHN5c2lkcyk7CisJdW5zaWduZWQgaW50IGZpbHRlcjsKKwlpbnQgaTsKKworCWlmICghZG1pKQorCQlyZXR1cm47CisKKwlmaWx0ZXIgPSAodW5zaWduZWQgbG9uZylkbWktPmRyaXZlcl9kYXRhOworCWRldl9wcmludGsoS0VSTl9JTkZPLCBob3N0LT5kZXYsCisJCSAgICJhcHBseWluZyBleHRyYSBBQ1BJIF9HVEYgZmlsdGVyIDB4JXggZm9yICVzXG4iLAorCQkgICBmaWx0ZXIsIGRtaS0+aWRlbnQpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisJCXN0cnVjdCBhdGFfbGluayAqbGluazsKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKKworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkKKwkJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpCisJCQkJZGV2LT5ndGZfZmlsdGVyIHw9IGZpbHRlcjsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK3t9CisjZW5kaWYKKwogc3RhdGljIGludCBhaGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwpAQCAtMjkyNiw5ICszMDMyLDkgQEAKIAlpZiAoYm9hcmRfaWQgPT0gYm9hcmRfYWhjaV9zYjcwMCAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDQwKQogCQlocHJpdi0+ZmxhZ3MgJj0gfkFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUw7CiAKLQkvKiBhcHBseSBzYjYwMCAzMmJpdCBvbmx5IHF1aXJrICovCi0JaWYgKGFoY2lfc2I2MDBfMzJiaXRfb25seShwZGV2KSkKLQkJaHByaXYtPmZsYWdzIHw9IEFIQ0lfSEZMQUdfMzJCSVRfT05MWTsKKwkvKiBvbmx5IHNvbWUgU0I2MDBzIGNhbiBkbyA2NGJpdCBETUEgKi8KKwlpZiAoYWhjaV9zYjYwMF9lbmFibGVfNjRiaXQocGRldikpCisJCWhwcml2LT5mbGFncyAmPSB+QUhDSV9IRkxBR18zMkJJVF9PTkxZOwogCiAJaWYgKChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkgfHwgcGNpX2VuYWJsZV9tc2kocGRldikpCiAJCXBjaV9pbnR4KHBkZXYsIDEpOwpAQCAtMzAyMyw2ICszMTI5LDkgQEAKIAkvKiBhcHBseSB3b3JrYXJvdW5kIGZvciBBU1VTIFA1VyBESCBEZWx1eGUgbWFpbmJvYXJkICovCiAJYWhjaV9wNXdkaF93b3JrYXJvdW5kKGhvc3QpOwogCisJLyogYXBwbHkgZ3RmIGZpbHRlciBxdWlyayAqLworCWFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKGhvc3QpOworCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCiAJcmMgPSBhaGNpX2NvbmZpZ3VyZV9kbWFfbWFza3MocGRldiwgaHByaXYtPmNhcCAmIEhPU1RfQ0FQXzY0KTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwppbmRleCAwMTk2NGI2Li5iMDg4MmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKQEAgLTIwLDE5ICsyMCw5IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKLWVudW0gewotCUFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSCT0gMSA8PCAwLAotCUFUQV9BQ1BJX0ZJTFRFUl9MT0NLCT0gMSA8PCAxLAotCUFUQV9BQ1BJX0ZJTFRFUl9ESVBNCT0gMSA8PCAyLAotCi0JQVRBX0FDUElfRklMVEVSX0RFRkFVTFQJPSBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUiB8Ci0JCQkJICBBVEFfQUNQSV9GSUxURVJfTE9DSyB8Ci0JCQkJICBBVEFfQUNQSV9GSUxURVJfRElQTSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlciA9IEFUQV9BQ1BJX0ZJTFRFUl9ERUZBVUxUOwordW5zaWduZWQgaW50IGF0YV9hY3BpX2d0Zl9maWx0ZXIgPSBBVEFfQUNQSV9GSUxURVJfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChhY3BpX2d0Zl9maWx0ZXIsIGF0YV9hY3BpX2d0Zl9maWx0ZXIsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFjcGlfZ3RmX2ZpbHRlciwgImZpbHRlciBtYXNrIGZvciBBQ1BJIF9HVEYgY29tbWFuZHMsIHNldCB0byBmaWx0ZXIgb3V0ICgweDE9c2V0IHhmZXJtb2RlLCAweDI9bG9jay9mcmVlemUgbG9jaywgMHg0PURJUE0pIik7CitNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZ3RmX2ZpbHRlciwgImZpbHRlciBtYXNrIGZvciBBQ1BJIF9HVEYgY29tbWFuZHMsIHNldCB0byBmaWx0ZXIgb3V0ICgweDE9c2V0IHhmZXJtb2RlLCAweDI9bG9jay9mcmVlemUgbG9jaywgMHg0PURJUE0sIDB4OD1GUERNQSBub24temVybyBvZmZzZXQsIDB4MTA9RlBETUEgRE1BIFNldHVwIEZJUyBhdXRvLWFjdGl2YXRlKSIpOwogCiAjZGVmaW5lIE5PX1BPUlRfTVVMVAkJMHhmZmZmCiAjZGVmaW5lIFNBVEFfQURSKHJvb3QsIHBtcCkJKCgocm9vdCkgPDwgMTYpIHwgKHBtcCkpCkBAIC02MTMsMTAgKzYwMywxMSBAQAogCXRmLT5jb21tYW5kID0gZ3RmLT50Zls2XTsJLyogMHgxZjcgKi8KIH0KIAotc3RhdGljIGludCBhdGFfYWNwaV9maWx0ZXJfdGYoY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCitzdGF0aWMgaW50IGF0YV9hY3BpX2ZpbHRlcl90ZihzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICpwdGYpCiB7Ci0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUikgeworCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUikgewogCQkvKiBsaWJhdGEgZG9lc24ndCB1c2UgQUNQSSB0byBjb25maWd1cmUgdHJhbnNmZXIgbW9kZS4KIAkJICogSXQgd2lsbCBvbmx5IGNvbmZ1c2UgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBTa2lwLgogCQkgKi8KQEAgLTYyNSw3ICs2MTYsNyBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfTE9DSykgeworCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfTE9DSykgewogCQkvKiBCSU9TIHdyaXRlcnMsIHNvcnJ5IGJ1dCB3ZSBkb24ndCB3YW5uYSBsb2NrCiAJCSAqIGZlYXR1cmVzIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IHNhaWQgc28uCiAJCSAqLwpAQCAtNjQ3LDEyICs2MzgsMjMgQEAKIAkJCXJldHVybiAxOwogCX0KIAotCWlmIChhdGFfYWNwaV9ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0RJUE0pIHsKKwlpZiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9TRVRfRkVBVFVSRVMgJiYKKwkgICAgdGYtPmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUpIHsKIAkJLyogaW5oaWJpdCBlbmFibGluZyBESVBNICovCi0JCWlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUyAmJgotCQkgICAgdGYtPmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUgJiYKKwkJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNICYmCiAJCSAgICB0Zi0+bnNlY3QgPT0gU0FUQV9ESVBNKQogCQkJcmV0dXJuIDE7CisKKwkJLyogaW5oaWJpdCBGUERNQSBub24temVybyBvZmZzZXQgKi8KKwkJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQgJiYKKwkJICAgICh0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9PRkZTRVQgfHwKKwkJICAgICB0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9JTl9PUkRFUikpCisJCQlyZXR1cm4gMTsKKworCQkvKiBpbmhpYml0IEZQRE1BIGF1dG8gYWN0aXZhdGlvbiAqLworCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0ZQRE1BX0FBICYmCisJCSAgICB0Zi0+bnNlY3QgPT0gU0FUQV9GUERNQV9BQSkKKwkJCXJldHVybiAxOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzA0LDcgKzcwNiw3IEBACiAJCXBwdGYgPSAmcHRmOwogCX0KIAotCWlmICghYXRhX2FjcGlfZmlsdGVyX3RmKCZ0ZiwgcHB0ZikpIHsKKwlpZiAoIWF0YV9hY3BpX2ZpbHRlcl90ZihkZXYsICZ0ZiwgcHB0ZikpIHsKIAkJcnRmID0gdGY7CiAJCWVycl9tYXNrID0gYXRhX2V4ZWNfaW50ZXJuYWwoZGV2LCAmcnRmLCBOVUxMLAogCQkJCQkgICAgIERNQV9OT05FLCBOVUxMLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDBkZGFmNDMuLmRjNzI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNDkxOSwxMCArNDkxOSwxMSBAQAogICovCiB2b2lkIGF0YV9xY19mcmVlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCXVuc2lnbmVkIGludCB0YWc7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisJYXAgPSBxYy0+YXA7CiAKIAlxYy0+ZmxhZ3MgPSAwOwogCXRhZyA9IHFjLT50YWc7CkBAIC00OTM0LDExICs0OTM1LDEzIEBACiAKIHZvaWQgX19hdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXN0cnVjdCBhdGFfbGluayAqbGluayA9IHFjLT5kZXYtPmxpbms7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCiAJV0FSTl9PTl9PTkNFKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKTsKKwlhcCA9IHFjLT5hcDsKKwlsaW5rID0gcWMtPmRldi0+bGluazsKIAogCWlmIChsaWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQogCQlhdGFfc2dfY2xlYW4ocWMpOwpAQCAtNTAyOCwxMiArNTAzMSwxNCBAQAogCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfRkFJTEVEOwogCiAJCWlmICh1bmxpa2VseShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0ZBSUxFRCkpIHsKLQkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkgewotCQkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCi0JCQkJZmlsbF9yZXN1bHRfdGYocWMpOworCQkJLyogYWx3YXlzIGZpbGwgcmVzdWx0IFRGIGZvciBmYWlsZWQgcWMgKi8KKwkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKworCQkJaWYgKCFhdGFfdGFnX2ludGVybmFsKHFjLT50YWcpKQogCQkJCWF0YV9xY19zY2hlZHVsZV9laChxYyk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJZWxzZQorCQkJCV9fYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXJldHVybjsKIAkJfQogCiAJCVdBUk5fT05fT05DRShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTik7CkBAIC01NTkxLDYgKzU1OTYsOSBAQAogCiAJCWRldi0+bGluayA9IGxpbms7CiAJCWRldi0+ZGV2bm8gPSBkZXYgLSBsaW5rLT5kZXZpY2U7CisjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCisJCWRldi0+Z3RmX2ZpbHRlciA9IGF0YV9hY3BpX2d0Zl9maWx0ZXI7CisjZW5kaWYKIAkJYXRhX2Rldl9pbml0KGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCBhMDQ0ODhmLi5iYmEyYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMjY2NywxNCArMjY2NywxNCBAQAogCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKIAkJZGV2LT5mbGFncyAmPSB+QVRBX0RGTEFHX1NMRUVQSU5HOwogCi0JCWlmICghYXRhX3BoeXNfbGlua19vZmZsaW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7Ci0JCQkvKiBhcHBseSBjbGFzcyBvdmVycmlkZSAqLwotCQkJaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfQVRBKQotCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX0FUQTsKLQkJCWVsc2UgaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfU0VNQikKLQkJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9TRU1CX1VOU1VQOwotCQl9IGVsc2UKLQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CisJCWlmIChhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpCisJCQljb250aW51ZTsKKworCQkvKiBhcHBseSBjbGFzcyBvdmVycmlkZSAqLworCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9BVEE7CisJCWVsc2UgaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfU0VNQikKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7CiAJfQogCiAJLyogcmVjb3JkIGN1cnJlbnQgbGluayBzcGVlZCAqLwpAQCAtMjcxMywzNCArMjcxMyw0OCBAQAogCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19FSF9QRU5ESU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAotCS8qIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KKwkvKgorCSAqIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KIAkgKiBIb3RwbHVnIGNvdWxkIGhhdmUgaGFwcGVuZWQgZHVyaW5nIHJlc2V0IGFuZCBzb21lCiAJICogY29udHJvbGxlcnMgZmFpbCB0byB3YWl0IHdoaWxlIGEgZHJpdmUgaXMgc3Bpbm5pbmcgdXAgYWZ0ZXIKIAkgKiBiZWluZyBob3RwbHVnZ2VkIGNhdXNpbmcgbWlzZGV0ZWN0aW9uLiAgQnkgY3Jvc3MgY2hlY2tpbmcKLQkgKiBsaW5rIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgdGhvc2UgY29uZGl0aW9ucwotCSAqIGNhbiBiZSByZWxpYWJseSBkZXRlY3RlZCBhbmQgcmV0cmllZC4KKwkgKiBsaW5rIG9uL29mZmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQsIHRob3NlCisJICogY29uZGl0aW9ucyBjYW4gYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYW5kIHJldHJpZWQuCiAJICovCiAJbnJfdW5rbm93biA9IDA7CiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewotCQkvKiBjb252ZXJ0IGFsbCBBVEFfREVWX1VOS05PV04gdG8gQVRBX0RFVl9OT05FICovCi0JCWlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgewotCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKLQkJCWlmIChhdGFfcGh5c19saW5rX29ubGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkKKwkJaWYgKGF0YV9waHlzX2xpbmtfb25saW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7CisJCQlpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKKwkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICJsaW5rIG9ubGluZSAiCisJCQkJCSAgICAgICAiYnV0IGRldmljZSBtaXNjbGFzc2lmZWRcbiIpOworCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CiAJCQkJbnJfdW5rbm93bisrOworCQkJfQorCQl9IGVsc2UgaWYgKGF0YV9waHlzX2xpbmtfb2ZmbGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkgeworCQkJaWYgKGF0YV9jbGFzc19lbmFibGVkKGNsYXNzZXNbZGV2LT5kZXZub10pKQorCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgb2ZmbGluZSwgIgorCQkJCQkgICAgICAgImNsZWFyaW5nIGNsYXNzICVkIHRvIE5PTkVcbiIsCisJCQkJCSAgICAgICBjbGFzc2VzW2Rldi0+ZGV2bm9dKTsKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CisJCX0gZWxzZSBpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKKwkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgc3RhdHVzIHVua25vd24sICIKKwkJCQkgICAgICAgImNsZWFyaW5nIFVOS05PV04gdG8gTk9ORVxuIik7CisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwogCQl9CiAJfQogCiAJaWYgKGNsYXNzaWZ5ICYmIG5yX3Vua25vd24pIHsKIAkJaWYgKHRyeSA8IG1heF90cmllcykgewogCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImxpbmsgb25saW5lIGJ1dCAiCi0JCQkJICAgICAgICJkZXZpY2UgbWlzY2xhc3NpZmllZCwgcmV0cnlpbmdcbiIpOworCQkJCQkiJWQgZGV2aWNlcyBtaXNjbGFzc2lmaWVkLCByZXRyeWluZ1xuIiwKKwkJCQkJbnJfdW5rbm93bik7CiAJCQlmYWlsZWRfbGluayA9IGxpbms7CiAJCQlyYyA9IC1FQUdBSU47CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywKLQkJCSAgICAgICAibGluayBvbmxpbmUgYnV0IGRldmljZSBtaXNjbGFzc2lmaWVkLCAiCi0JCQkgICAgICAgImRldmljZSBkZXRlY3Rpb24gbWlnaHQgZmFpbFxuIik7CisJCQkJImxpbmsgb25saW5lIGJ1dCAlZCBkZXZpY2VzIG1pc2NsYXNzaWZpZWQsICIKKwkJCQkiZGV2aWNlIGRldGVjdGlvbiBtaWdodCBmYWlsXG4iLCBucl91bmtub3duKTsKIAl9CiAKIAkvKiByZXNldCBzdWNjZXNzZnVsLCBzY2hlZHVsZSByZXZhbGlkYXRpb24gKi8KQEAgLTI5NjcsMTIgKzI5ODEsMTQgQEAKIAkgKiBkZXZpY2UgZGV0ZWN0aW9uIG1lc3NhZ2VzIGJhY2t3YXJkcy4KIAkgKi8KIAlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7Ci0JCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpIHx8Ci0JCSAgICBkZXYtPmNsYXNzID09IEFUQV9ERVZfUE1QKQorCQlpZiAoIShuZXdfbWFzayAmICgxIDw8IGRldi0+ZGV2bm8pKSkKIAkJCWNvbnRpbnVlOwogCiAJCWRldi0+Y2xhc3MgPSBlaGMtPmNsYXNzZXNbZGV2LT5kZXZub107CiAKKwkJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCQljb250aW51ZTsKKwogCQllaGMtPmkuZmxhZ3MgfD0gQVRBX0VISV9QUklOVElORk87CiAJCXJjID0gYXRhX2Rldl9jb25maWd1cmUoZGV2KTsKIAkJZWhjLT5pLmZsYWdzICY9IH5BVEFfRUhJX1BSSU5USU5GTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggYmU4ZTI2Mi4uODIzZTYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTExOCw2ICsxMTgsOCBAQAogCiAvKiBsaWJhdGEtYWNwaS5jICovCiAjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCitleHRlcm4gdW5zaWduZWQgaW50IGF0YV9hY3BpX2d0Zl9maWx0ZXI7CisKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Fzc29jaWF0ZV9zYXRhX3BvcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfYWNwaV9hc3NvY2lhdGUoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Rpc3NvY2lhdGUoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IGZjOWM1ZDYuLjE0MzJkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAKIAlpZiAocHJpbnRfaW5mbyAmJiBhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJICYmICFhbGlfYXRhcGlfZG1hKSB7CiAJCWF0YV9kZXZfcHJpbnRrKGFkZXYsIEtFUk5fV0FSTklORywKLQkJCSAgICAgICAiV0FSTklORzogQVRBUEkgRE1BIGRpc2FibGVkIGZvciByZWxpYWJsaXR5IGlzc3Vlcy4gIEl0IGNhbiBiZSBlbmFibGVkXG4iKTsKKwkJCSAgICAgICAiV0FSTklORzogQVRBUEkgRE1BIGRpc2FibGVkIGZvciByZWxpYWJpbGl0eSBpc3N1ZXMuICBJdCBjYW4gYmUgZW5hYmxlZFxuIik7CiAJCWF0YV9kZXZfcHJpbnRrKGFkZXYsIEtFUk5fV0FSTklORywKIAkJCSAgICAgICAiV0FSTklORzogdmlhIHBhdGFfYWxpLmF0YXBpX2RtYSBtb2RwYXJhbSBvciBjb3JyZXNwb25kaW5nIHN5c2ZzIG5vZGUuXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwppbmRleCBhYTRiM2Y2Li5hZTQ0NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUpLCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERSksIH0sCiAKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdHA4Njd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYwppbmRleCA3OTkwZGU5Li42ZmU3ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYwpAQCAtMTE4LDIwICsxMTgsMTMgQEAKIAlpbnQJCXBjaTY2bWh6OwogfTsKIAotc3RhdGljIGlubGluZSB1OCBhdHA4Njd4X3NwZWVkX3RvX21vZGUodTggc3BlZWQpCi17Ci0JcmV0dXJuIHNwZWVkIC0gWEZFUl9VRE1BXzAgKyAxOwotfQotCiBzdGF0aWMgdm9pZCBhdHA4Njd4X3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlzdHJ1Y3QgYXRwODY3eF9wcml2ICpkcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTggc3BlZWQgPSBhZGV2LT5kbWFfbW9kZTsKIAl1OCBiOwotCXU4IG1vZGU7Ci0KLQltb2RlID0gYXRwODY3eF9zcGVlZF90b19tb2RlKHNwZWVkKTsKKwl1OCBtb2RlID0gc3BlZWQgLSBYRkVSX1VETUFfMCArIDE7CiAKIAkvKgogCSAqIERvYyA2LjYuOTogZGVjcmVhc2UgdGhlIHVkbWEgbW9kZSB2YWx1ZSBieSAxIGZvciBzYWZlciBVRE1BIHNwZWVkCkBAIC0xNTYsMjUgKzE0OSwzOCBAQAogCWlvd3JpdGU4KGIsIGRwLT5kbWFfbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHVuc2lnbmVkIGludCBjbGspCitzdGF0aWMgaW50IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCXVuc2lnbmVkIGludCBjbGspCiB7CisJc3RydWN0IGF0cDg2N3hfcHJpdiAqZHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGNoYXIgY2xvY2tzID0gY2xrOwogCisJLyoKKwkgKiBEb2MgNi42Ljk6IGluY3JlYXNlIHRoZSBjbG9jayB2YWx1ZSBieSAxIGZvciBzYWZlciBQSU8gc3BlZWQKKwkgKiBvbiA2Nk1IeiBidXMKKwkgKi8KKwlpZiAoZHAtPnBjaTY2bWh6KQorCQljbG9ja3MrKzsKKwogCXN3aXRjaCAoY2xvY2tzKSB7CiAJY2FzZSAwOgogCQljbG9ja3MgPSAxOwogCQlicmVhazsKLQljYXNlIDEgLi4uIDc6Ci0JCWJyZWFrOwotCWNhc2UgOCAuLi4gMTI6Ci0JCWNsb2NrcyA9IDc7CisJY2FzZSAxIC4uLiA2OgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVFA4NjdYOiBhY3RpdmUgJWRjbGsgaXMgaW52YWxpZC4gIgotCQkJIlVzaW5nIGRlZmF1bHQgOGNsay5cbiIsIGNsayk7Ci0JCWNsb2NrcyA9IDA7CS8qIDggY2xrICovCisJCQkiVXNpbmcgMTJjbGsuXG4iLCBjbGspOworCWNhc2UgOSAuLi4gMTI6CisJCWNsb2NrcyA9IDc7CS8qIDEyIGNsayAqLwogCQlicmVhazsKKwljYXNlIDc6CisJY2FzZSA4OgkvKiBkZWZhdWx0IDggY2xrICovCisJCWNsb2NrcyA9IDA7CisJCWdvdG8gYWN0aXZlX2Nsb2NrX3NoaWZ0X2RvbmU7CiAJfQorCithY3RpdmVfY2xvY2tfc2hpZnRfZG9uZToKIAlyZXR1cm4gY2xvY2tzIDw8IEFUUDg2N1hfSU9fUElPU1BEX0FDVElWRV9TSElGVDsKIH0KIApAQCAtMTg4LDIwICsxOTQsMjAgQEAKIAkJYnJlYWs7CiAJY2FzZSAxIC4uLiAxMToKIAkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJY2xvY2tzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMzogY2FzZSAxNDoKLQkJLS1jbG9ja3M7CisJY2FzZSAxMzoKKwljYXNlIDE0OgorCQktLWNsb2NrczsJLyogYnkgdGhlIHNwZWMgKi8KIAkJYnJlYWs7CiAJY2FzZSAxNToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVRQODY3WDogcmVjb3ZlciAlZGNsayBpcyBpbnZhbGlkLiAiCi0JCQkiVXNpbmcgZGVmYXVsdCAxNWNsay5cbiIsIGNsayk7Ci0JCWNsb2NrcyA9IDA7CS8qIDEyIGNsayAqLworCQkJIlVzaW5nIGRlZmF1bHQgMTJjbGsuXG4iLCBjbGspOworCWNhc2UgMTI6CS8qIGRlZmF1bHQgMTIgY2xrICovCisJCWNsb2NrcyA9IDA7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiBjbG9ja3MgPDwgQVRQODY3WF9JT19QSU9TUERfUkVDT1ZFUl9TSElGVDsKIH0KIApAQCAtMjMwLDI1ICsyMzYsMzggQEAKIAkJYiA9IChiICYgfkFUUDg2N1hfSU9fRE1BTU9ERV9NU1RSX01BU0spOwogCWlvd3JpdGU4KGIsIGRwLT5kbWFfbW9kZSk7CiAKLQliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHQuYWN0aXZlKSB8Ci0JCWF0cDg2N3hfZ2V0X3JlY292ZXJfY2xvY2tzX3NoaWZ0ZWQodC5yZWNvdmVyKTsKLQlpZiAoZHAtPnBjaTY2bWh6KQotCQliICs9IDB4MTA7CisJYiA9IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZChhcCwgdC5hY3RpdmUpIHwKKwkgICAgYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlY292ZXIpOwogCiAJaWYgKGFkZXYtPmRldm5vICYgMSkKIAkJaW93cml0ZTgoYiwgZHAtPnNsYXZlX3Bpb3NwZCk7CiAJZWxzZQogCQlpb3dyaXRlOChiLCBkcC0+bXN0cl9waW9zcGQpOwogCi0JLyoKLQkgKiB1c2UgdGhlIHNhbWUgdmFsdWUgZm9yIGNvbWFuZCB0aW1pbmcgYXMgZm9yIFBJTyB0aW1pbWcKLQkgKi8KKwliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKGFwLCB0LmFjdDhiKSB8CisJICAgIGF0cDg2N3hfZ2V0X3JlY292ZXJfY2xvY2tzX3NoaWZ0ZWQodC5yZWM4Yik7CisKIAlpb3dyaXRlOChiLCBkcC0+ZWlnaHRiX3Bpb3NwZCk7CiB9CiAKK3N0YXRpYyBpbnQgYXRwODY3eF9jYWJsZV9vdmVycmlkZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FSVE9QICYmCisJCShwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QSB8fAorCQkgcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0IpKSB7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdHA4Njd4X2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXJldHVybiBBVEFfQ0JMX1BBVEE0MF9TSE9SVDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisKKwlpZiAoYXRwODY3eF9jYWJsZV9vdmVycmlkZShwZGV2KSkKKwkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCisJcmV0dXJuIEFUQV9DQkxfUEFUQV9VTks7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGF0cDg2N3hfc2h0ID0gewpAQCAtNDcxLDcgKzQ5MCw2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODY3eCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYXRwODY3eF9vcHMsCiAJfTsKQEAgLTUxNSw2ICs1MzMsMjMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRwODY3eF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWF0cDg2N3hfZml4dXAoaG9zdCk7CisKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0cDg2N3hfcGNpX3RibFtdID0gewogCXsgUENJX1ZERVZJQ0UoQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QSksCTAgfSwKIAl7IFBDSV9WREVWSUNFKEFSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0IpLAkwIH0sCkBAIC01MjYsNiArNTYxLDEwIEBACiAJLmlkX3RhYmxlIAk9IGF0cDg2N3hfcGNpX3RibCwKIAkucHJvYmUgCQk9IGF0cDg2N3hfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRwODY3eF9yZWluaXRfb25lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdHA4Njd4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IGY0OTgxNGQuLjNiYmVkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwotCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDQ1NjU3Y2EuLjg4OTg0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDE3ZjlmZjkuLjZmNTA5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzODIsNiArMTM4MiwyNSBAQAogCSAqLwogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0RFTEFZRURfRUgpCiAJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKworCS8qIFBJTyBjb21tYW5kcyBuZWVkIGV4Y2x1c2l2ZSBsaW5rOiBubyBvdGhlciBjb21tYW5kcyBbRE1BIG9yIFBJT10KKwkgKiBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKwkgKiBzZXQgZXhjbF9saW5rIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEgUElPIGNvbW1hbmQgaW4gRE1BIG1vZGUKKwkgKiBvciBhIG5vbi1OQ1EgY29tbWFuZCBpbiBOQ1EgbW9kZS4KKwkgKiBXaGVuIHdlIHJlY2VpdmUgYSBjb21tYW5kIGZyb20gdGhhdCBsaW5rLCBhbmQgdGhlcmUgYXJlIG5vCisJICogb3V0c3RhbmRpbmcgY29tbWFuZHMsIG1hcmsgYSBmbGFnIHRvIGNsZWFyIGV4Y2xfbGluayBhbmQgbGV0CisJICogdGhlIGNvbW1hbmQgZ28gdGhyb3VnaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXAtPmV4Y2xfbGluaykpIHsKKwkJaWYgKGxpbmsgPT0gYXAtPmV4Y2xfbGluaykgeworCQkJaWYgKGFwLT5ucl9hY3RpdmVfbGlua3MpCisJCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfQ0xFQVJfRVhDTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBwb3J0IGlzIGNvbXBsZXRlbHkgaWRsZSwgdGhlbiBhbGxvdyB0aGUgbmV3IHFjLgogCSAqLwpAQCAtMTM5NSw4ICsxNDE0LDE0IEBACiAJICogZG9lc24ndCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgJiYKLQkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAmJiBhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCi0JCXJldHVybiAwOworCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pKSB7CisJCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7CisJCQlhcC0+ZXhjbF9saW5rID0gbGluazsKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJfQorCX0KIAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA4NmE0MDU4Li4xZWI0ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xNTk0LDkgKzE1OTQsMjEgQEAKIAkgICAgIWF0YV9kZXZfZW5hYmxlZChsaW5rLT5kZXZpY2UpKQogCQlzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnLCBkZWFkbGluZSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JZWxzZSBpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywKLQkJCQkibnY6IHNraXBwaW5nIGhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKwllbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCQlpbnQgcmM7CisKKwkJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLCAibnY6IHNraXBwaW5nICIKKwkJCQkJImhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKworCQkvKiBtYWtlIHN1cmUgdGhlIGxpbmsgaXMgb25saW5lICovCisJCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKKwkJCQkJImxpbmsgKGVycm5vPSVkKVxuIiwgcmMpOworCX0KIAogCS8qIGRldmljZSBzaWduYXR1cmUgYWNxdWlzaXRpb24gaXMgdW5yZWxpYWJsZSAqLwogCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggYmRkNDNjNy4uMDJlZmQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC05Myw3ICs5Myw2IEBACiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDUyODcpLCB2dDgyNTEgfSwgLyogMiBzYXRhIGNobmxzIChNYXN0ZXIvU2xhdmUpICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4OTAwMCksIHZ0ODI1MSB9LAotCXsgUENJX1ZERVZJQ0UoVklBLCAweDkwNDApLCB2dDgyNTEgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA5NzNiZjJhLi42M2MxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC02ODksMTUgKzY4OSwxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcml2ZXJfYWRkX2F0dHJzKCVzKSBmYWlsZWRcbiIsCiAJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKIAl9Ci0JZXJyb3IgPSBhZGRfYmluZF9maWxlcyhkcnYpOwotCWlmIChlcnJvcikgewotCQkvKiBEaXR0byAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRfYmluZF9maWxlcyglcykgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisKKwlpZiAoIWRydi0+c3VwcHJlc3NfYmluZF9hdHRycykgeworCQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7CisJCWlmIChlcnJvcikgeworCQkJLyogRGl0dG8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisJCX0KIAl9CiAKIAlrb2JqZWN0X3VldmVudCgmcHJpdi0+a29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOworCiBvdXRfdW5yZWdpc3RlcjoKIAlrZnJlZShkcnYtPnApOwogCWRydi0+cCA9IE5VTEw7CkBAIC03MjAsNyArNzI0LDggQEAKIAlpZiAoIWRydi0+YnVzKQogCQlyZXR1cm47CiAKLQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKQorCQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOwogCWRyaXZlcl9yZW1vdmVfYXR0cnMoZHJ2LT5idXMsIGRydik7CiAJZHJpdmVyX3JlbW92ZV9maWxlKGRydiwgJmRyaXZlcl9hdHRyX3VldmVudCk7CiAJa2xpc3RfcmVtb3ZlKCZkcnYtPnAtPmtub2RlX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZWQyZWJkMy4uZjM2Nzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCXB1dF9kcml2ZXIob3RoZXIpOwogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBEcml2ZXIgJyVzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsICIKIAkJCSJhYm9ydGluZy4uLlxuIiwgZHJ2LT5uYW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0ID0gYnVzX2FkZF9kcml2ZXIoZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggZWQxNTZhMTMuLjRmYTk1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC01MjEsMTEgKzUyMSwxNSBAQAogewogCWludCByZXR2YWwsIGNvZGU7CiAKKwkvKiBtYWtlIHN1cmUgZHJpdmVyIHdvbid0IGhhdmUgYmluZC91bmJpbmQgYXR0cmlidXRlcyAqLworCWRydi0+ZHJpdmVyLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlOworCiAJLyogdGVtcG9yYXJ5IHNlY3Rpb24gdmlvbGF0aW9uIGR1cmluZyBwcm9iZSgpICovCiAJZHJ2LT5wcm9iZSA9IHByb2JlOwogCXJldHZhbCA9IGNvZGUgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIAotCS8qIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKKwkvKgorCSAqIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKIAkgKiB0aGUgbGlzdCBvZiBkcml2ZXJzIGluIG9yZGVyIHRvIHByb2JlIG5ldyBkZXZpY2VzLiAgQ2hlY2sgdG8gc2VlCiAJICogaWYgdGhlIHByb2JlIHdhcyBzdWNjZXNzZnVsLCBhbmQgbWFrZSBzdXJlIGFueSBmb3JjZWQgcHJvYmVzIG9mCiAJICogbmV3IGRldmljZXMgZmFpbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUwZGM0MDcuLjhhYTI0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNTExLDYgKzUxMSw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDM4NTU2ZjYuLmE3NzA0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNTEsOCArNTEsNiBAQAogewogCWludCByZXR2YWwgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIVxuIik7Ci0KIAlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQogCQlyZXR2YWwgPSAtRUlOVkFMOwogCWVsc2UgaWYgKGRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24pCkBAIC05Myw4ICs5MSw2IEBACiAJd2FrZV91cF9hbGwoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7CiAKICBvdXQ6Ci0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIHJldHVybnMgJWQhXG4iLCByZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKaW5kZXggNmZhN2IwZi4uZWI0ZmExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYworKysgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNjQyMiwxNiArNjQyMywxMCBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRTdGF0dXMgaW1wbGVtZW50cyByZWFkaW5nIC9wcm9jL3JkL3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkU3RhdHVzKGNoYXIgKlBhZ2UsIGNoYXIgKipTdGFydCwgb2ZmX3QgT2Zmc2V0LAotCQkJCSBpbnQgQ291bnQsIGludCAqRU9GLCB2b2lkICpEYXRhKQorc3RhdGljIGludCBkYWM5NjBfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKICAgdW5zaWduZWQgY2hhciAqU3RhdHVzTWVzc2FnZSA9ICJPS1xuIjsKLSAgaW50IENvbnRyb2xsZXJOdW1iZXIsIEJ5dGVzQXZhaWxhYmxlOworICBpbnQgQ29udHJvbGxlck51bWJlcjsKICAgZm9yIChDb250cm9sbGVyTnVtYmVyID0gMDsKICAgICAgICBDb250cm9sbGVyTnVtYmVyIDwgREFDOTYwX0NvbnRyb2xsZXJDb3VudDsKICAgICAgICBDb250cm9sbGVyTnVtYmVyKyspCkBAIC02NDQ0LDUyICs2NDM5LDQ5IEBACiAJICBicmVhazsKIAl9CiAgICAgfQotICBCeXRlc0F2YWlsYWJsZSA9IHN0cmxlbihTdGF0dXNNZXNzYWdlKSAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZTdGF0dXNNZXNzYWdlW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworICBzZXFfcHV0cyhtLCBTdGF0dXNNZXNzYWdlKTsKKyAgcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAgREFDOTYwX1Byb2NSZWFkSW5pdGlhbFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vaW5pdGlhbF9zdGF0dXMuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZEluaXRpYWxTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJCWludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOwotICBpbnQgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5Jbml0aWFsU3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPkNvbWJpbmVkU3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfcHJvY19zaG93LCBOVUxMKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAotLyoKLSAgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vY3VycmVudF9zdGF0dXMuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZEN1cnJlbnRTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJCWludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKKwlEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKiltLT5wcml2YXRlOworCXNlcV9wcmludGYobSwgIiUuKnMiLCBDb250cm9sbGVyLT5Jbml0aWFsU3RhdHVzTGVuZ3RoLCBDb250cm9sbGVyLT5Db21iaW5lZFN0YXR1c0J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBtLT5wcml2YXRlOwogICB1bnNpZ25lZCBjaGFyICpTdGF0dXNNZXNzYWdlID0KICAgICAiTm8gUmVidWlsZCBvciBDb25zaXN0ZW5jeSBDaGVjayBpbiBQcm9ncmVzc1xuIjsKICAgaW50IFByb2dyZXNzTWVzc2FnZUxlbmd0aCA9IHN0cmxlbihTdGF0dXNNZXNzYWdlKTsKLSAgaW50IEJ5dGVzQXZhaWxhYmxlOwogICBpZiAoamlmZmllcyAhPSBDb250cm9sbGVyLT5MYXN0Q3VycmVudFN0YXR1c1RpbWUpCiAgICAgewogICAgICAgQ29udHJvbGxlci0+Q3VycmVudFN0YXR1c0xlbmd0aCA9IDA7CkBAIC02NTEzLDQ5ICs2NTA1LDQxIEBACiAJfQogICAgICAgQ29udHJvbGxlci0+TGFzdEN1cnJlbnRTdGF0dXNUaW1lID0gamlmZmllczsKICAgICB9Ci0gIEJ5dGVzQXZhaWxhYmxlID0gQ29udHJvbGxlci0+Q3VycmVudFN0YXR1c0xlbmd0aCAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXNlcV9wcmludGYobSwgIiUuKnMiLCBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoLCBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzQnVmZmVyKTsKKwlyZXR1cm4gMDsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZCBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvY04vdXNlcl9jb21tYW5kLgotKi8KLQotc3RhdGljIGludCBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZChjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkgICAgICBpbnQgQ291bnQsIGludCAqRU9GLCB2b2lkICpEYXRhKQorc3RhdGljIGludCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKLSAgaW50IEJ5dGVzQXZhaWxhYmxlID0gQ29udHJvbGxlci0+VXNlclN0YXR1c0xlbmd0aCAtIE9mZnNldDsKLSAgaWYgKENvdW50ID49IEJ5dGVzQXZhaWxhYmxlKQotICAgIHsKLSAgICAgIENvdW50ID0gQnl0ZXNBdmFpbGFibGU7Ci0gICAgICAqRU9GID0gdHJ1ZTsKLSAgICB9Ci0gIGlmIChDb3VudCA8PSAwKSByZXR1cm4gMDsKLSAgKlN0YXJ0ID0gUGFnZTsKLSAgbWVtY3B5KFBhZ2UsICZDb250cm9sbGVyLT5Vc2VyU3RhdHVzQnVmZmVyW09mZnNldF0sIENvdW50KTsKLSAgcmV0dXJuIENvdW50OworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAotLyoKLSAgREFDOTYwX1Byb2NXcml0ZVVzZXJDb21tYW5kIGltcGxlbWVudHMgd3JpdGluZyAvcHJvYy9yZC9jTi91c2VyX2NvbW1hbmQuCi0qLworc3RhdGljIGludCBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopbS0+cHJpdmF0ZTsKIAotc3RhdGljIGludCBEQUM5NjBfUHJvY1dyaXRlVXNlckNvbW1hbmQoc3RydWN0IGZpbGUgKmZpbGUsCisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPlVzZXJTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPlVzZXJTdGF0dXNCdWZmZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKkJ1ZmZlciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBDb3VudCwgdm9pZCAqRGF0YSkKKwkJCQkgICAgICAgc2l6ZV90IENvdW50LCBsb2ZmX3QgKnBvcykKIHsKLSAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIERhdGE7CisgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAgIHVuc2lnbmVkIGNoYXIgQ29tbWFuZEJ1ZmZlcls4MF07CiAgIGludCBMZW5ndGg7CiAgIGlmIChDb3VudCA+IHNpemVvZihDb21tYW5kQnVmZmVyKS0xKSByZXR1cm4gLUVJTlZBTDsKQEAgLTY1NzIsNiArNjU1NiwxNCBAQAogCSAgICA/IENvdW50IDogLUVCVVNZKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY193cml0ZSwKK307CiAKIC8qCiAgIERBQzk2MF9DcmVhdGVQcm9jRW50cmllcyBjcmVhdGVzIHRoZSAvcHJvYy9yZC8uLi4gZW50cmllcyBmb3IgdGhlCkBAIC02NTg2LDIzICs2NTc4LDE3IEBACiAKIAlpZiAoREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSA9PSBOVUxMKSB7CiAgIAkJREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSA9IHByb2NfbWtkaXIoInJkIiwgTlVMTCk7Ci0gIAkJU3RhdHVzUHJvY0VudHJ5ID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgic3RhdHVzIiwgMCwKKyAgCQlTdGF0dXNQcm9jRW50cnkgPSBwcm9jX2NyZWF0ZSgic3RhdHVzIiwgMCwKIAkJCQkJICAgREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSwKLQkJCQkJICAgREFDOTYwX1Byb2NSZWFkU3RhdHVzLCBOVUxMKTsKKwkJCQkJICAgJmRhYzk2MF9wcm9jX2ZvcHMpOwogCX0KIAogICAgICAgc3ByaW50ZihDb250cm9sbGVyLT5Db250cm9sbGVyTmFtZSwgImMlZCIsIENvbnRyb2xsZXItPkNvbnRyb2xsZXJOdW1iZXIpOwogICAgICAgQ29udHJvbGxlclByb2NFbnRyeSA9IHByb2NfbWtkaXIoQ29udHJvbGxlci0+Q29udHJvbGxlck5hbWUsCiAJCQkJICAgICAgIERBQzk2MF9Qcm9jRGlyZWN0b3J5RW50cnkpOwotICAgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiaW5pdGlhbF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LAotCQkJICAgICBEQUM5NjBfUHJvY1JlYWRJbml0aWFsU3RhdHVzLCBDb250cm9sbGVyKTsKLSAgICAgIGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImN1cnJlbnRfc3RhdHVzIiwgMCwgQ29udHJvbGxlclByb2NFbnRyeSwKLQkJCSAgICAgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cywgQ29udHJvbGxlcik7Ci0gICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeSA9Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgidXNlcl9jb21tYW5kIiwgU19JV1VTUiB8IFNfSVJVU1IsCi0JCQkgICAgICAgQ29udHJvbGxlclByb2NFbnRyeSwgREFDOTYwX1Byb2NSZWFkVXNlckNvbW1hbmQsCi0JCQkgICAgICAgQ29udHJvbGxlcik7Ci0gICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeS0+d3JpdGVfcHJvYyA9IERBQzk2MF9Qcm9jV3JpdGVVc2VyQ29tbWFuZDsKKyAgICAgIHByb2NfY3JlYXRlX2RhdGEoImluaXRpYWxfc3RhdHVzIiwgMCwgQ29udHJvbGxlclByb2NFbnRyeSwgJmRhYzk2MF9pbml0aWFsX3N0YXR1c19wcm9jX2ZvcHMsIENvbnRyb2xsZXIpOworICAgICAgcHJvY19jcmVhdGVfZGF0YSgiY3VycmVudF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX2N1cnJlbnRfc3RhdHVzX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CisgICAgICBVc2VyQ29tbWFuZFByb2NFbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoInVzZXJfY29tbWFuZCIsIFNfSVdVU1IgfCBTX0lSVVNSLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX2ZvcHMsIENvbnRyb2xsZXIpOwogICAgICAgQ29udHJvbGxlci0+Q29udHJvbGxlclByb2NFbnRyeSA9IENvbnRyb2xsZXJQcm9jRW50cnk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCAyNGMzZTIxLi42Mzk5ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zNiw5ICszNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtNjYsNiArNjgsMTIgQEAKIE1PRFVMRV9WRVJTSU9OKCIzLjYuMjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBjY2lzc19hbGxvd19ocHNhOworbW9kdWxlX3BhcmFtKGNjaXNzX2FsbG93X2hwc2EsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoY2Npc3NfYWxsb3dfaHBzYSwKKwkiUHJldmVudCBjY2lzcyBkcml2ZXIgZnJvbSBhY2Nlc3NpbmcgaGFyZHdhcmUga25vd24gdG8gYmUgIgorCSIgc3VwcG9ydGVkIGJ5IHRoZSBocHNhIGRyaXZlciIpOworCiAjaW5jbHVkZSAiY2Npc3NfY21kLmgiCiAjaW5jbHVkZSAiY2Npc3MuaCIKICNpbmNsdWRlIDxsaW51eC9jY2lzc19pb2N0bC5oPgpAQCAtOTksOCArMTA3LDYgQEAKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRCfSwKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9BTllfSUQsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JCVBDSV9DTEFTU19TVE9SQUdFX1JBSUQgPDwgOCwgMHhmZmZmIDw8IDgsIDB9LAogCXswLH0KIH07CiAKQEAgLTEyMSw4ICsxMjcsNiBAQAogCXsweDQwOUQwRTExLCAiU21hcnQgQXJyYXkgNjQwMCBFTSIsICZTQTVfYWNjZXNzfSwKIAl7MHg0MDkxMEUxMSwgIlNtYXJ0IEFycmF5IDZpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMjUxMDNDLCAiU21hcnQgQXJyYXkgUDYwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMzUxMDNDLCAiU21hcnQgQXJyYXkgUDQwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIxMTEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjEyMTAzQywgIlNtYXJ0IEFycmF5IEUyMDAiLCAmU0E1X2FjY2Vzc30sCkBAIC0xMzAsNiArMTM0LDEwIEBACiAJezB4MzIxNDEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjE1MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMzcxMDNDLCAiU21hcnQgQXJyYXkgRTUwMCIsICZTQTVfYWNjZXNzfSwKKy8qIGNvbnRyb2xsZXJzIGJlbG93IHRoaXMgbGluZSBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIGhwc2EgZHJpdmVyLiAqLworI2RlZmluZSBIUFNBX0JPVU5EQVJZIDB4MzIyMzEwM0MKKwl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyM0QxMDNDLCAiU21hcnQgQXJyYXkgUDcwMG0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MTEwM0MsICJTbWFydCBBcnJheSBQMjEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDMxMDNDLCAiU21hcnQgQXJyYXkgUDQxMCIsICZTQTVfYWNjZXNzfSwKQEAgLTEzOCw3ICsxNDYsNiBAQAogCXsweDMyNDkxMDNDLCAiU21hcnQgQXJyYXkgUDgxMiIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRBMTAzQywgIlNtYXJ0IEFycmF5IFA3MTJtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCi0JezB4RkZGRjEwM0MsICJVbmtub3duIFNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAogfTsKIAogLyogSG93IGxvbmcgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgYm9hcmQgdG8gZ28gaW50byBzaW1wbGUgbW9kZSAqLwpAQCAtMTU1LDYgKzE2MiwxMCBAQAogCiBzdGF0aWMgY3Rscl9pbmZvX3QgKmhiYVtNQVhfQ1RMUl07CiAKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNjaXNzX3NjYW5fdGhyZWFkOworc3RhdGljIERFRklORV9NVVRFWChzY2FuX211dGV4KTsKK3N0YXRpYyBMSVNUX0hFQUQoc2Nhbl9xKTsKKwogc3RhdGljIHZvaWQgZG9fY2Npc3NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBjY2lzc19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CkBAIC0xNjQsOSArMTc1LDkgQEAKIHN0YXRpYyBpbnQgY2Npc3NfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKIAogc3RhdGljIGludCBjY2lzc19yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKLXN0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lKTsKK3N0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lLCBpbnQgdmlhX2lvY3RsKTsKIHN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4LAotCQkJICAgaW50IGNsZWFyX2FsbCk7CisJCQkgICBpbnQgY2xlYXJfYWxsLCBpbnQgdmlhX2lvY3RsKTsKIAogc3RhdGljIHZvaWQgY2Npc3NfcmVhZF9jYXBhY2l0eShpbnQgY3RsciwgaW50IGxvZ3ZvbCwgaW50IHdpdGhpcnEsCiAJCQlzZWN0b3JfdCAqdG90YWxfc2l6ZSwgdW5zaWduZWQgaW50ICpibG9ja19zaXplKTsKQEAgLTE4OSw4ICsyMDAsMTMgQEAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zZW5kY21kX2Vycm9yKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpOwogCiBzdGF0aWMgdm9pZCBmYWlsX2FsbF9jbWRzKHVuc2lnbmVkIGxvbmcgY3Rscik7CitzdGF0aWMgaW50IGFkZF90b19zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgaW50IHNjYW5fdGhyZWFkKHZvaWQgKmRhdGEpOwogc3RhdGljIGludCBjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYyk7CitzdGF0aWMgdm9pZCBjY2lzc19oYmFfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2Npc3NfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCk7CitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIGNjaXNzX3Byb2Npbml0KGludCBpKTsKQEAgLTI0NSw3ICsyNjEsMTAgQEAKIAogI2luY2x1ZGUgImNjaXNzX3Njc2kuYyIJCS8qIEZvciBTQ1NJIHRhcGUgc3VwcG9ydCAqLwogCi0jZGVmaW5lIFJBSURfVU5LTk9XTiA2CitzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAorCSJVTktOT1dOIgorfTsKKyNkZWZpbmUgUkFJRF9VTktOT1dOIChzaXplb2YocmFpZF9sYWJlbCkgLyBzaXplb2YocmFpZF9sYWJlbFswXSktMSkKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKQEAgLTI1NSw5ICsyNzQsNiBAQAogI2RlZmluZSBFTkdfR0lHIDEwMDAwMDAwMDAKICNkZWZpbmUgRU5HX0dJR19GQUNUT1IgKEVOR19HSUcvNTEyKQogI2RlZmluZSBFTkdBR0VfU0NTSQkiZW5nYWdlIHNjc2kiCi1zdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAotCSJVTktOT1dOIgotfTsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19jY2lzczsKIApAQCAtMzE4LDcgKzMzNCw3IEBACiAJY3Rscl9pbmZvX3QgKmggPSBzZXEtPnByaXZhdGU7CiAJdW5zaWduZWQgY3RsciA9IGgtPmN0bHI7CiAJbG9mZl90ICpwb3MgPSB2OwotCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSAmaC0+ZHJ2Wypwb3NdOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBoLT5kcnZbKnBvc107CiAKIAlpZiAoKnBvcyA+IGgtPmhpZ2hlc3RfbHVuKQogCQlyZXR1cm4gMDsKQEAgLTMzMSw3ICszNDcsNyBAQAogCXZvbF9zel9mcmFjICo9IDEwMDsKIAlzZWN0b3JfZGl2KHZvbF9zel9mcmFjLCBFTkdfR0lHX0ZBQ1RPUik7CiAKLQlpZiAoZHJ2LT5yYWlkX2xldmVsID4gNSkKKwlpZiAoZHJ2LT5yYWlkX2xldmVsIDwgMCB8fCBkcnYtPnJhaWRfbGV2ZWwgPiBSQUlEX1VOS05PV04pCiAJCWRydi0+cmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKIAlzZXFfcHJpbnRmKHNlcSwgImNjaXNzL2MlZGQlZDoiCiAJCQkiXHQlNHUuJTAydUdCXHRSQUlEICVzXG4iLApAQCAtNDI2LDcgKzQ0Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2Npc3NfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2Npc3NfcHJvY19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGNjaXNzX3NlcV9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCkBAIC00NTQsOSArNDcwLDE5IEBACiAjZGVmaW5lIHRvX2hiYShuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGN0bHJfaW5mbywgZGV2KQogI2RlZmluZSB0b19kcnYobikgY29udGFpbmVyX29mKG4sIGRyaXZlX2luZm9fc3RydWN0LCBkZXYpCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgY2Npc3NfaG9zdF90eXBlID0gewotCS5uYW1lCQk9ICJjY2lzc19ob3N0IiwKLX07CitzdGF0aWMgc3NpemVfdCBob3N0X3N0b3JlX3Jlc2NhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRldik7CisKKwlhZGRfdG9fc2Nhbl9saXN0KGgpOworCXdha2VfdXBfcHJvY2VzcyhjY2lzc19zY2FuX3RocmVhZCk7CisJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZoLT5zY2FuX3dhaXQpOworCisJcmV0dXJuIGNvdW50OworfQorREVWSUNFX0FUVFIocmVzY2FuLCBTX0lXVVNSLCBOVUxMLCBob3N0X3N0b3JlX3Jlc2Nhbik7CiAKIHN0YXRpYyBzc2l6ZV90IGRldl9zaG93X3VuaXF1ZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTYwLDExICs1ODYsMTAxIEBACiB9CiBERVZJQ0VfQVRUUihyZXYsIFNfSVJVR08sIGRldl9zaG93X3JldiwgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IGNjaXNzX3Nob3dfbHVuaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IHRvX2RydihkZXYpOworCXN0cnVjdCBjdGxyX2luZm8gKmggPSB0b19oYmEoZHJ2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgbHVuaWRbOF07CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghZHJ2LT5oZWFkcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCW1lbWNweShsdW5pZCwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGx1bmlkKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIweCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQlsdW5pZFswXSwgbHVuaWRbMV0sIGx1bmlkWzJdLCBsdW5pZFszXSwKKwkJbHVuaWRbNF0sIGx1bmlkWzVdLCBsdW5pZFs2XSwgbHVuaWRbN10pOworfQorREVWSUNFX0FUVFIobHVuaWQsIFNfSVJVR08sIGNjaXNzX3Nob3dfbHVuaWQsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X3JhaWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCWludCByYWlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJhaWQgPSBkcnYtPnJhaWRfbGV2ZWw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKHJhaWQgPCAwIHx8IHJhaWQgPiBSQUlEX1VOS05PV04pCisJCXJhaWQgPSBSQUlEX1VOS05PV047CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBzdHJsZW4ocmFpZF9sYWJlbFtyYWlkXSkgKyA3LCAiUkFJRCAlc1xuIiwKKwkJCXJhaWRfbGFiZWxbcmFpZF0pOworfQorREVWSUNFX0FUVFIocmFpZF9sZXZlbCwgU19JUlVHTywgY2Npc3Nfc2hvd19yYWlkX2xldmVsLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgY2Npc3Nfc2hvd191c2FnZV9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljb3VudCA9IGRydi0+dXNhZ2VfY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlZFxuIiwgY291bnQpOworfQorREVWSUNFX0FUVFIodXNhZ2VfY291bnQsIFNfSVJVR08sIGNjaXNzX3Nob3dfdXNhZ2VfY291bnQsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2Npc3NfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9yZXNjYW4uYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjY2lzc19ob3N0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gY2Npc3NfaG9zdF9hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjY2lzc19ob3N0X2F0dHJfZ3JvdXBzW10gPSB7CisJJmNjaXNzX2hvc3RfYXR0cl9ncm91cCwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGNjaXNzX2hvc3RfdHlwZSA9IHsKKwkubmFtZQkJPSAiY2Npc3NfaG9zdCIsCisJLmdyb3VwcwkJPSBjY2lzc19ob3N0X2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gY2Npc3NfaGJhX3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2Npc3NfZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3VuaXF1ZV9pZC5hdHRyLAogCSZkZXZfYXR0cl9tb2RlbC5hdHRyLAogCSZkZXZfYXR0cl92ZW5kb3IuYXR0ciwKIAkmZGV2X2F0dHJfcmV2LmF0dHIsCisJJmRldl9hdHRyX2x1bmlkLmF0dHIsCisJJmRldl9hdHRyX3JhaWRfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfdXNhZ2VfY291bnQuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC01ODAsMTIgKzY5NiwyNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBjY2lzc19kZXZfdHlwZSA9IHsKIAkubmFtZQkJPSAiY2Npc3NfZGV2aWNlIiwKIAkuZ3JvdXBzCQk9IGNjaXNzX2Rldl9hdHRyX2dyb3VwcywKKwkucmVsZWFzZQk9IGNjaXNzX2RldmljZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBjY2lzc19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiY2Npc3MiLAogfTsKIAorLyoKKyAqIGNjaXNzX2hiYV9yZWxlYXNlIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQKKyAqIG9mIGgtPmRldiBnb2VzIHRvIHplcm8uCisgKi8KK3N0YXRpYyB2b2lkIGNjaXNzX2hiYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKgorCSAqIG5vdGhpbmcgdG8gZG8sIGJ1dCBuZWVkIHRoaXMgdG8gYXZvaWQgYSB3YXJuaW5nCisJICogYWJvdXQgbm90IGhhdmluZyBhIHJlbGVhc2UgaGFuZGxlciBmcm9tIGxpYi9rcmVmLmMuCisJICovCit9CiAKIC8qCiAgKiBJbml0aWFsaXplIHN5c2ZzIGVudHJ5IGZvciBlYWNoIGNvbnRyb2xsZXIuICBUaGlzIHNldHMgdXAgYW5kIHJlZ2lzdGVycwpAQCAtNjA5LDYgKzczNywxNiBAQAogc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlkZXZpY2VfZGVsKCZoLT5kZXYpOworCXB1dF9kZXZpY2UoJmgtPmRldik7IC8qIGZpbmFsIHB1dC4gKi8KK30KKworLyogY2Npc3NfZGV2aWNlX3JlbGVhc2UgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudAorICogb2YgaC0+ZHJ2W3hdZGV2IGdvZXMgdG8gemVyby4KKyAqLworc3RhdGljIHZvaWQgY2Npc3NfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlrZnJlZShkcnYpOwogfQogCiAvKgpAQCAtNjE3LDI0ICs3NTUsMzkgQEAKICAqIC9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXYvY2NpcyMvLiBXZSBhbHNvIGNyZWF0ZSBhIGxpbmsgZnJvbQogICogL3N5cy9ibG9jay9jY2lzcyFjI2QjIHRvIHRoaXMgZW50cnkuCiAgKi8KLXN0YXRpYyBpbnQgY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JCQkJICAgICAgIGRyaXZlX2luZm9fc3RydWN0ICpkcnYsCitzdGF0aWMgbG9uZyBjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAkJCQkgICAgICAgaW50IGRydl9pbmRleCkKIHsKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmZHJ2LT5kZXYpOwotCWRydi0+ZGV2LnR5cGUgPSAmY2Npc3NfZGV2X3R5cGU7Ci0JZHJ2LT5kZXYuYnVzID0gJmNjaXNzX2J1c190eXBlOwotCWRldl9zZXRfbmFtZSgmZHJ2LT5kZXYsICJjJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOwotCWRydi0+ZGV2LnBhcmVudCA9ICZoLT5kZXY7Ci0JcmV0dXJuIGRldmljZV9hZGQoJmRydi0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0tPmRldmljZV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlkZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKKwlkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOworCWRldi0+dHlwZSA9ICZjY2lzc19kZXZfdHlwZTsKKwlkZXYtPmJ1cyA9ICZjY2lzc19idXNfdHlwZTsKKwlkZXZfc2V0X25hbWUoZGV2LCAiYyVkZCVkIiwgaC0+Y3RsciwgZHJ2X2luZGV4KTsKKwlkZXYtPnBhcmVudCA9ICZoLT5kZXY7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmRldmljZV9pbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIGRldmljZV9hZGQoZGV2KTsKIH0KIAogLyoKICAqIFJlbW92ZSBzeXNmcyBlbnRyaWVzIGZvciBhIGxvZ2ljYWwgZHJpdmUuCiAgKi8KLXN0YXRpYyB2b2lkIGNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoZHJpdmVfaW5mb19zdHJ1Y3QgKmRydikKK3N0YXRpYyB2b2lkIGNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGRydl9pbmRleCwKKwlpbnQgY3Rscl9leGl0aW5nKQogewotCWRldmljZV9kZWwoJmRydi0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgYypkMCwgd2Ugb25seSBkZXN0cm95IGl0IG9uIGNvbnRyb2xsZXIgZXhpdCAqLworCWlmIChkcnZfaW5kZXggPT0gMCAmJiAhY3Rscl9leGl0aW5nKQorCQlyZXR1cm47CisKKwlkZXZpY2VfZGVsKGRldik7CisJcHV0X2RldmljZShkZXYpOyAvKiB0aGUgImZpbmFsIiBwdXQuICovCisJaC0+ZHJ2W2Rydl9pbmRleF0gPSBOVUxMOwogfQogCiAvKgpAQCAtNzUxLDcgKzkwNCw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImNjaXNzX29wZW4gJXNcbiIsIGJkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSk7CiAjZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KIAotCWlmIChob3N0LT5idXN5X2luaXRpYWxpemluZyB8fCBkcnYtPmJ1c3lfY29uZmlndXJpbmcpCisJaWYgKGRydi0+YnVzeV9jb25maWd1cmluZykKIAkJcmV0dXJuIC1FQlVTWTsKIAkvKgogCSAqIFJvb3QgaXMgYWxsb3dlZCB0byBvcGVuIHJhdyB2b2x1bWUgemVybyBldmVuIGlmIGl0J3Mgbm90IGNvbmZpZ3VyZWQKQEAgLTc2Nyw3ICs5MjAsOCBAQAogCQkJaWYgKE1JTk9SKGJkZXYtPmJkX2RldikgJiAweDBmKSB7CiAJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCQkvKiBpZiBpdCBpcywgbWFrZSBzdXJlIHdlIGhhdmUgYSBMVU4gSUQgKi8KLQkJCX0gZWxzZSBpZiAoZHJ2LT5MdW5JRCA9PSAwKSB7CisJCQl9IGVsc2UgaWYgKG1lbWNtcChkcnYtPkx1bklELCBDVExSX0xVTklELAorCQkJCXNpemVvZihkcnYtPkx1bklEKSkpIHsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJfQogCQl9CkBAIC0xMTMyLDEyICsxMjg2LDEzIEBACiAJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdEOgogCWNhc2UgQ0NJU1NfUkVWQUxJRFZPTFM6Ci0JCXJldHVybiByZWJ1aWxkX2x1bl90YWJsZShob3N0LCAwKTsKKwkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIDAsIDEpOwogCiAJY2FzZSBDQ0lTU19HRVRMVU5JTkZPOnsKIAkJCUxvZ3ZvbEluZm9fc3RydWN0IGx1bmluZm87CiAKLQkJCWx1bmluZm8uTHVuSUQgPSBkcnYtPkx1bklEOworCQkJbWVtY3B5KCZsdW5pbmZvLkx1bklELCBkcnYtPkx1bklELAorCQkJCXNpemVvZihsdW5pbmZvLkx1bklEKSk7CiAJCQlsdW5pbmZvLm51bV9vcGVucyA9IGRydi0+dXNhZ2VfY291bnQ7CiAJCQlsdW5pbmZvLm51bV9wYXJ0cyA9IDA7CiAJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZsdW5pbmZvLApAQCAtMTQ3NSw3ICsxNjMwLDEwIEBACiAJCS8qIG1ha2Ugc3VyZSB0aGUgZGlzayBoYXMgYmVlbiBhZGRlZCBhbmQgdGhlIGRyaXZlIGlzIHJlYWwKIAkJICogYmVjYXVzZSB0aGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbWlkZGxlIG9mIGluaXRfb25lLgogCQkgKi8KLQkJaWYgKCEoaC0+ZHJ2W2N1cnJfcXVldWVdLnF1ZXVlKSB8fCAhKGgtPmRydltjdXJyX3F1ZXVlXS5oZWFkcykpCisJCWlmICghaC0+ZHJ2W2N1cnJfcXVldWVdKQorCQkJY29udGludWU7CisJCWlmICghKGgtPmRydltjdXJyX3F1ZXVlXS0+cXVldWUpIHx8CisJCQkhKGgtPmRydltjdXJyX3F1ZXVlXS0+aGVhZHMpKQogCQkJY29udGludWU7CiAJCWJsa19zdGFydF9xdWV1ZShoLT5nZW5kaXNrW2N1cnJfcXVldWVdLT5xdWV1ZSk7CiAKQEAgLTE1MzIsMTMgKzE2OTAsMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvZ191bml0X3RvX3Njc2kzYWRkcihjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwKLQl1aW50MzJfdCBsb2dfdW5pdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfdW5pdF90b19zY3NpM2FkZHIoY3Rscl9pbmZvX3QgKmgsCisJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwgdWludDMyX3QgbG9nX3VuaXQpCiB7Ci0JbG9nX3VuaXQgPSBoLT5kcnZbbG9nX3VuaXRdLkx1bklEICYgMHgwM2ZmZjsKLQltZW1zZXQoJnNjc2kzYWRkcls0XSwgMCwgNCk7Ci0JbWVtY3B5KCZzY3NpM2FkZHJbMF0sICZsb2dfdW5pdCwgNCk7Ci0Jc2NzaTNhZGRyWzNdIHw9IDB4NDA7CisJbWVtY3B5KHNjc2kzYWRkciwgaC0+ZHJ2W2xvZ191bml0XS0+THVuSUQsCisJCXNpemVvZihoLT5kcnZbbG9nX3VuaXRdLT5MdW5JRCkpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFNDU0kgdmVuZG9yLCBtb2RlbCwgYW5kIHJldmlzaW9uIG9mIGEgbG9naWNhbCBkcml2ZQpAQCAtMTYxNSwxNiArMTc3MSwyMyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgY2Npc3NfYWRkX2Rpc2soY3Rscl9pbmZvX3QgKmgsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAorLyoKKyAqIGNjaXNzX2FkZF9kaXNrIHNldHMgdXAgdGhlIGJsb2NrIGRldmljZSBxdWV1ZSBmb3IgYSBsb2dpY2FsIGRyaXZlCisgKi8KK3N0YXRpYyBpbnQgY2Npc3NfYWRkX2Rpc2soY3Rscl9pbmZvX3QgKmgsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCQkJCWludCBkcnZfaW5kZXgpCiB7CiAJZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19jY2lzc19yZXF1ZXN0LCAmaC0+bG9jayk7CisJaWYgKCFkaXNrLT5xdWV1ZSkKKwkJZ290byBpbml0X3F1ZXVlX2ZhaWx1cmU7CiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJjY2lzcy9jJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOwogCWRpc2stPm1ham9yID0gaC0+bWFqb3I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBkcnZfaW5kZXggPDwgTldEX1NISUZUOwogCWRpc2stPmZvcHMgPSAmY2Npc3NfZm9wczsKLQlkaXNrLT5wcml2YXRlX2RhdGEgPSAmaC0+ZHJ2W2Rydl9pbmRleF07Ci0JZGlzay0+ZHJpdmVyZnNfZGV2ID0gJmgtPmRydltkcnZfaW5kZXhdLmRldjsKKwlpZiAoY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KGgsIGRydl9pbmRleCkpCisJCWdvdG8gY2xlYW51cF9xdWV1ZTsKKwlkaXNrLT5wcml2YXRlX2RhdGEgPSBoLT5kcnZbZHJ2X2luZGV4XTsKKwlkaXNrLT5kcml2ZXJmc19kZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0tPmRldjsKIAogCS8qIFNldCB1cCBxdWV1ZSBpbmZvcm1hdGlvbiAqLwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGlzay0+cXVldWUsIGgtPnBkZXYtPmRtYV9tYXNrKTsKQEAgLTE2NDIsMTQgKzE4MDUsMjEgQEAKIAlkaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gaDsKIAogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZGlzay0+cXVldWUsCi0JCQkJICAgICBoLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplKTsKKwkJCQkgICAgIGgtPmRydltkcnZfaW5kZXhdLT5ibG9ja19zaXplKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgcXVldWUgZGF0YSBpcyB3cml0dGVuIG91dCBiZWZvcmUgKi8KLQkvKiBzZXR0aW5nIGgtPmRydltkcnZfaW5kZXhdLnF1ZXVlLCBhcyBzZXR0aW5nIHRoaXMgKi8KKwkvKiBzZXR0aW5nIGgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSwgYXMgc2V0dGluZyB0aGlzICovCiAJLyogYWxsb3dzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzdGFydCB0aGUgcXVldWUgKi8KIAl3bWIoKTsKLQloLT5kcnZbZHJ2X2luZGV4XS5xdWV1ZSA9IGRpc2stPnF1ZXVlOworCWgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSA9IGRpc2stPnF1ZXVlOwogCWFkZF9kaXNrKGRpc2spOworCXJldHVybiAwOworCitjbGVhbnVwX3F1ZXVlOgorCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKKwlkaXNrLT5xdWV1ZSA9IE5VTEw7Citpbml0X3F1ZXVlX2ZhaWx1cmU6CisJcmV0dXJuIC0xOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhlIHVzYWdlX2NvdW50IG9mIHRoZSBkcml2ZSB0byBiZSB1cGRhdGVkL2FkZGVkLgpAQCAtMTY2Miw3ICsxODMyLDggQEAKICAqIGlzIGFsc28gdGhlIGNvbnRyb2xsZXIgbm9kZS4gIEFueSBjaGFuZ2VzIHRvIGRpc2sgMCB3aWxsIHNob3cgdXAgb24KICAqIHRoZSBuZXh0IHJlYm9vdC4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgsIGludCBmaXJzdF90aW1lKQorc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgsIGludCBmaXJzdF90aW1lLAorCWludCB2aWFfaW9jdGwpCiB7CiAJY3Rscl9pbmZvX3QgKmggPSBoYmFbY3Rscl07CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CkBAIC0xNjcyLDIxICsxODQzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJldCA9IDA7CiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydmluZm87Ci0JaW50IHdhc19vbmx5X2NvbnRyb2xsZXJfbm9kZTsKIAogCS8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlzayBhbmQgbW9kaWZ5IHRoZSBkcml2ZXIgc3RydWN0dXJlICovCiAJaW5xX2J1ZmYgPSBrbWFsbG9jKHNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlkcnZpbmZvID0ga21hbGxvYyhzaXplb2YoKmRydmluZm8pLCBHRlBfS0VSTkVMKTsKKwlkcnZpbmZvID0ga3phbGxvYyhzaXplb2YoKmRydmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5xX2J1ZmYgPT0gTlVMTCB8fCBkcnZpbmZvID09IE5VTEwpCiAJCWdvdG8gbWVtX21zZzsKIAotCS8qIFNlZSBpZiB3ZSdyZSB0cnlpbmcgdG8gdXBkYXRlIHRoZSAiY29udHJvbGxlciBub2RlIgotCSAqIHRoaXMgd2lsbCBoYXBwZW4gdGhlIHdoZW4gdGhlIGZpcnN0IGxvZ2ljYWwgZHJpdmUgZ2V0cwotCSAqIGNyZWF0ZWQgYnkgQUNVLgotCSAqLwotCXdhc19vbmx5X2NvbnRyb2xsZXJfbm9kZSA9IChkcnZfaW5kZXggPT0gMCAmJgotCQkJCWgtPmRydlswXS5yYWlkX2xldmVsID09IC0xKTsKLQogCS8qIHRlc3RpbmcgdG8gc2VlIGlmIDE2LWJ5dGUgQ0RCcyBhcmUgYWxyZWFkeSBiZWluZyB1c2VkICovCiAJaWYgKGgtPmNjaXNzX3JlYWQgPT0gQ0NJU1NfUkVBRF8xNikgewogCQljY2lzc19yZWFkX2NhcGFjaXR5XzE2KGgtPmN0bHIsIGRydl9pbmRleCwgMSwKQEAgLTE3MTksMTYgKzE4ODIsMTkgQEAKIAkJCQlkcnZpbmZvLT5tb2RlbCwgZHJ2aW5mby0+cmV2KTsKIAljY2lzc19nZXRfc2VyaWFsX25vKGN0bHIsIGRydl9pbmRleCwgMSwgZHJ2aW5mby0+c2VyaWFsX25vLAogCQkJc2l6ZW9mKGRydmluZm8tPnNlcmlhbF9ubykpOworCS8qIFNhdmUgdGhlIGx1bmlkIGluIGNhc2Ugd2UgZGVyZWdpc3RlciB0aGUgZGlzaywgYmVsb3cuICovCisJbWVtY3B5KGRydmluZm8tPkx1bklELCBoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQsCisJCXNpemVvZihkcnZpbmZvLT5MdW5JRCkpOwogCiAJLyogSXMgaXQgdGhlIHNhbWUgZGlzayB3ZSBhbHJlYWR5IGtub3csIGFuZCBub3RoaW5nJ3MgY2hhbmdlZD8gKi8KLQlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0ucmFpZF9sZXZlbCAhPSAtMSAmJgorCWlmIChoLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCAhPSAtMSAmJgogCQkoKG1lbWNtcChkcnZpbmZvLT5zZXJpYWxfbm8sCi0JCQkJaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCAxNikgPT0gMCkgJiYKLQkJZHJ2aW5mby0+YmxvY2tfc2l6ZSA9PSBoLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplICYmCi0JCWRydmluZm8tPm5yX2Jsb2NrcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MgJiYKLQkJZHJ2aW5mby0+aGVhZHMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0uaGVhZHMgJiYKLQkJZHJ2aW5mby0+c2VjdG9ycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5zZWN0b3JzICYmCi0JCWRydmluZm8tPmN5bGluZGVycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5jeWxpbmRlcnMpKQorCQkJCWgtPmRydltkcnZfaW5kZXhdLT5zZXJpYWxfbm8sIDE2KSA9PSAwKSAmJgorCQlkcnZpbmZvLT5ibG9ja19zaXplID09IGgtPmRydltkcnZfaW5kZXhdLT5ibG9ja19zaXplICYmCisJCWRydmluZm8tPm5yX2Jsb2NrcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzICYmCisJCWRydmluZm8tPmhlYWRzID09IGgtPmRydltkcnZfaW5kZXhdLT5oZWFkcyAmJgorCQlkcnZpbmZvLT5zZWN0b3JzID09IGgtPmRydltkcnZfaW5kZXhdLT5zZWN0b3JzICYmCisJCWRydmluZm8tPmN5bGluZGVycyA9PSBoLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzKSkKIAkJCS8qIFRoZSBkaXNrIGlzIHVuY2hhbmdlZCwgbm90aGluZyB0byB1cGRhdGUgKi8KIAkJCWdvdG8gZnJlZXJldDsKIApAQCAtMTczOCwxOCArMTkwNCwxNyBAQAogCSAqIElmIHRoZSBkaXNrIGFscmVhZHkgZXhpc3RzIHRoZW4gZGVyZWdpc3RlciBpdCBiZWZvcmUgcHJvY2VlZGluZwogCSAqICh1bmxlc3MgaXQncyB0aGUgZmlyc3QgZGlzayAoZm9yIHRoZSBjb250cm9sbGVyIG5vZGUpLgogCSAqLwotCWlmIChoLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsICE9IC0xICYmIGRydl9pbmRleCAhPSAwKSB7CisJaWYgKGgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsICE9IC0xICYmIGRydl9pbmRleCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImRpc2sgJWQgaGFzIGNoYW5nZWQuXG4iLCBkcnZfaW5kZXgpOwogCQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAxOworCQloLT5kcnZbZHJ2X2luZGV4XS0+YnVzeV9jb25maWd1cmluZyA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOwogCi0JCS8qIGRlcmVnaXN0ZXJfZGlzayBzZXRzIGgtPmRydltkcnZfaW5kZXhdLnF1ZXVlID0gTlVMTAorCQkvKiBkZXJlZ2lzdGVyX2Rpc2sgc2V0cyBoLT5kcnZbZHJ2X2luZGV4XS0+cXVldWUgPSBOVUxMCiAJCSAqIHdoaWNoIGtlZXBzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHN0YXJ0aW5nCiAJCSAqIHRoZSBxdWV1ZS4KIAkJICovCi0JCXJldCA9IGRlcmVnaXN0ZXJfZGlzayhoLCBkcnZfaW5kZXgsIDApOwotCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGRydl9pbmRleCwgMCwgdmlhX2lvY3RsKTsKIAl9CiAKIAkvKiBJZiB0aGUgZGlzayBpcyBpbiB1c2UgcmV0dXJuICovCkBAIC0xNzU3LDIyICsxOTIyLDMxIEBACiAJCWdvdG8gZnJlZXJldDsKIAogCS8qIFNhdmUgdGhlIG5ldyBpbmZvcm1hdGlvbiBmcm9tIGNjaXNzX2dlb21ldHJ5X2lucXVpcnkKLQkgKiBhbmQgc2VyaWFsIG51bWJlciBpbnF1aXJ5LgorCSAqIGFuZCBzZXJpYWwgbnVtYmVyIGlucXVpcnkuICBJZiB0aGUgZGlzayB3YXMgZGVyZWdpc3RlcmVkCisJICogYWJvdmUsIHRoZW4gaC0+ZHJ2W2Rydl9pbmRleF0gd2lsbCBiZSBOVUxMLgogCSAqLwotCWgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgPSBkcnZpbmZvLT5ibG9ja19zaXplOwotCWgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2NrcyA9IGRydmluZm8tPm5yX2Jsb2NrczsKLQloLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyA9IGRydmluZm8tPmhlYWRzOwotCWgtPmRydltkcnZfaW5kZXhdLnNlY3RvcnMgPSBkcnZpbmZvLT5zZWN0b3JzOwotCWgtPmRydltkcnZfaW5kZXhdLmN5bGluZGVycyA9IGRydmluZm8tPmN5bGluZGVyczsKLQloLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsID0gZHJ2aW5mby0+cmFpZF9sZXZlbDsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCBkcnZpbmZvLT5zZXJpYWxfbm8sIDE2KTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0udmVuZG9yLCBkcnZpbmZvLT52ZW5kb3IsIFZFTkRPUl9MRU4gKyAxKTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0ubW9kZWwsIGRydmluZm8tPm1vZGVsLCBNT0RFTF9MRU4gKyAxKTsKLQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0ucmV2LCBkcnZpbmZvLT5yZXYsIFJFVl9MRU4gKyAxKTsKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0gPT0gTlVMTCkgeworCQlkcnZpbmZvLT5kZXZpY2VfaW5pdGlhbGl6ZWQgPSAwOworCQloLT5kcnZbZHJ2X2luZGV4XSA9IGRydmluZm87CisJCWRydmluZm8gPSBOVUxMOyAvKiBzbyBpdCB3b24ndCBiZSBmcmVlZCBiZWxvdy4gKi8KKwl9IGVsc2UgeworCQkvKiBzcGVjaWFsIGNhc2UgZm9yIGN4ZDAgKi8KKwkJaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgPSBkcnZpbmZvLT5ibG9ja19zaXplOworCQloLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzID0gZHJ2aW5mby0+bnJfYmxvY2tzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+aGVhZHMgPSBkcnZpbmZvLT5oZWFkczsKKwkJaC0+ZHJ2W2Rydl9pbmRleF0tPnNlY3RvcnMgPSBkcnZpbmZvLT5zZWN0b3JzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzID0gZHJ2aW5mby0+Y3lsaW5kZXJzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCA9IGRydmluZm8tPnJhaWRfbGV2ZWw7CisJCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+c2VyaWFsX25vLCBkcnZpbmZvLT5zZXJpYWxfbm8sIDE2KTsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT52ZW5kb3IsIGRydmluZm8tPnZlbmRvciwKKwkJCVZFTkRPUl9MRU4gKyAxKTsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5tb2RlbCwgZHJ2aW5mby0+bW9kZWwsIE1PREVMX0xFTiArIDEpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPnJldiwgZHJ2aW5mby0+cmV2LCBSRVZfTEVOICsgMSk7CisJfQogCiAJKytoLT5udW1fbHVuczsKIAlkaXNrID0gaC0+Z2VuZGlza1tkcnZfaW5kZXhdOwotCXNldF9jYXBhY2l0eShkaXNrLCBoLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MpOworCXNldF9jYXBhY2l0eShkaXNrLCBoLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzKTsKIAogCS8qIElmIGl0J3Mgbm90IGRpc2sgMCAoZHJ2X2luZGV4ICE9IDApCiAJICogb3IgaWYgaXQgd2FzIGRpc2sgMCwgYnV0IHRoZXJlIHdhcyBwcmV2aW91c2x5CkBAIC0xNzgwLDggKzE5NTQsMTUgQEAKIAkgKiAocmFpZF9sZXZlID09IC0xKSB0aGVuIHdlIHdhbnQgdG8gdXBkYXRlIHRoZQogCSAqIGxvZ2ljYWwgZHJpdmUncyBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAoZHJ2X2luZGV4IHx8IGZpcnN0X3RpbWUpCi0JCWNjaXNzX2FkZF9kaXNrKGgsIGRpc2ssIGRydl9pbmRleCk7CisJaWYgKGRydl9pbmRleCB8fCBmaXJzdF90aW1lKSB7CisJCWlmIChjY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpICE9IDApIHsKKwkJCWNjaXNzX2ZyZWVfZ2VuZGlzayhoLCBkcnZfaW5kZXgpOworCQkJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczolZCBjb3VsZCBub3QgdXBkYXRlICIKKwkJCQkiZGlzayAlZFxuIiwgaC0+Y3RsciwgZHJ2X2luZGV4KTsKKwkJCS0taC0+bnVtX2x1bnM7CisJCX0KKwl9CiAKIGZyZWVyZXQ6CiAJa2ZyZWUoaW5xX2J1ZmYpOwpAQCAtMTc5MywyOCArMTk3NCw3MCBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCB0aGUgZmlyc3QgaW5kZXggb2YgdGhlIGNvbnRyb2xsZXJzIGRyaXZlIGFycmF5Ci0gKiB0aGF0IGhhcyBhIC0xIGZvciB0aGUgcmFpZF9sZXZlbCBhbmQgd2lsbCByZXR1cm4gdGhhdCBpbmRleC4gIFRoaXMgaXMKLSAqIHdoZXJlIG5ldyBkcml2ZXMgd2lsbCBiZSBhZGRlZC4gIElmIHRoZSBpbmRleCB0byBiZSByZXR1cm5lZCBpcyBncmVhdGVyCi0gKiB0aGFuIHRoZSBoaWdoZXN0X2x1biBpbmRleCBmb3IgdGhlIGNvbnRyb2xsZXIgdGhlbiBoaWdoZXN0X2x1biBpcyBzZXQKLSAqIHRvIHRoaXMgbmV3IGluZGV4LiAgSWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBpbmRleGVzIHRoZW4gLTEgaXMgcmV0dXJuZWQuCi0gKiAiY29udHJvbGxlcl9ub2RlIiBpcyB1c2VkIHRvIGtub3cgaWYgdGhpcyBpcyBhIHJlYWwgbG9naWNhbCBkcml2ZSwgb3IganVzdAotICogdGhlIGNvbnRyb2xsZXIgbm9kZSwgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGlzIGNvdW50cyB0b3dhcmRzIGhpZ2hlc3RfbHVuLgorICogdGhhdCBoYXMgYSBudWxsIGRydiBwb2ludGVyIGFuZCBhbGxvY2F0ZSB0aGUgZHJpdmUgaW5mbyBzdHJ1Y3QgYW5kCisgKiB3aWxsIHJldHVybiB0aGF0IGluZGV4ICAgVGhpcyBpcyB3aGVyZSBuZXcgZHJpdmVzIHdpbGwgYmUgYWRkZWQuCisgKiBJZiB0aGUgaW5kZXggdG8gYmUgcmV0dXJuZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0X2x1biBpbmRleCBmb3IKKyAqIHRoZSBjb250cm9sbGVyIHRoZW4gaGlnaGVzdF9sdW4gaXMgc2V0ICogdG8gdGhpcyBuZXcgaW5kZXguCisgKiBJZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGluZGV4ZXMgb3IgaWYgdGhhIGFsbG9jYXRpb24gZmFpbHMsIHRoZW4gLTEKKyAqIGlzIHJldHVybmVkLiAgKiAiY29udHJvbGxlcl9ub2RlIiBpcyB1c2VkIHRvIGtub3cgaWYgdGhpcyBpcyBhIHJlYWwKKyAqIGxvZ2ljYWwgZHJpdmUsIG9yIGp1c3QgdGhlIGNvbnRyb2xsZXIgbm9kZSwgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGlzCisgKiBjb3VudHMgdG93YXJkcyBoaWdoZXN0X2x1bi4KICAqLwotc3RhdGljIGludCBjY2lzc19maW5kX2ZyZWVfZHJpdmVfaW5kZXgoaW50IGN0bHIsIGludCBjb250cm9sbGVyX25vZGUpCitzdGF0aWMgaW50IGNjaXNzX2FsbG9jX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBjb250cm9sbGVyX25vZGUpCiB7CiAJaW50IGk7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydjsKIAorCS8qIFNlYXJjaCBmb3IgYW4gZW1wdHkgc2xvdCBmb3Igb3VyIGRyaXZlIGluZm8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ0lTU19NQVhfTFVOOyBpKyspIHsKLQkJaWYgKGhiYVtjdGxyXS0+ZHJ2W2ldLnJhaWRfbGV2ZWwgPT0gLTEpIHsKLQkJCWlmIChpID4gaGJhW2N0bHJdLT5oaWdoZXN0X2x1bikKLQkJCQlpZiAoIWNvbnRyb2xsZXJfbm9kZSkKLQkJCQkJaGJhW2N0bHJdLT5oaWdoZXN0X2x1biA9IGk7CisKKwkJLyogaWYgbm90IGN4ZDAgY2FzZSwgYW5kIGl0J3Mgb2NjdXBpZWQsIHNraXAgaXQuICovCisJCWlmIChoLT5kcnZbaV0gJiYgaSAhPSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIGl0J3MgY3hkMCBjYXNlLCBhbmQgZHJ2IGlzIGFsbG9jJ2VkIGFscmVhZHksIGFuZCBhCisJCSAqIGRpc2sgaXMgY29uZmlndXJlZCB0aGVyZSwgc2tpcCBpdC4KKwkJICovCisJCWlmIChpID09IDAgJiYgaC0+ZHJ2W2ldICYmIGgtPmRydltpXS0+cmFpZF9sZXZlbCAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlJ3ZlIGZvdW5kIGFuIGVtcHR5IHNsb3QuICBVcGRhdGUgaGlnaGVzdF9sdW4KKwkJICogcHJvdmlkZWQgdGhpcyBpc24ndCBqdXN0IHRoZSBmYWtlIGN4ZDAgY29udHJvbGxlciBub2RlLgorCQkgKi8KKwkJaWYgKGkgPiBoLT5oaWdoZXN0X2x1biAmJiAhY29udHJvbGxlcl9ub2RlKQorCQkJaC0+aGlnaGVzdF9sdW4gPSBpOworCisJCS8qIElmIGFkZGluZyBhIHJlYWwgZGlzayBhdCBjeGQwLCBhbmQgaXQncyBhbHJlYWR5IGFsbG9jJ2VkICovCisJCWlmIChpID09IDAgJiYgaC0+ZHJ2W2ldICE9IE5VTEwpCiAJCQlyZXR1cm4gaTsKLQkJfQorCisJCS8qCisJCSAqIEZvdW5kIGFuIGVtcHR5IHNsb3QsIG5vdCBhbHJlYWR5IGFsbG9jJ2VkLiAgQWxsb2NhdGUgaXQuCisJCSAqIE1hcmsgaXQgd2l0aCByYWlkX2xldmVsID09IC0xLCBzbyB3ZSBrbm93IGl0J3MgbmV3IGxhdGVyIG9uLgorCQkgKi8KKwkJZHJ2ID0ga3phbGxvYyhzaXplb2YoKmRydiksIEdGUF9LRVJORUwpOworCQlpZiAoIWRydikKKwkJCXJldHVybiAtMTsKKwkJZHJ2LT5yYWlkX2xldmVsID0gLTE7IC8qIHNvIHdlIGtub3cgaXQncyBuZXcgKi8KKwkJaC0+ZHJ2W2ldID0gZHJ2OworCQlyZXR1cm4gaTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2RyaXZlX2luZm8oY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpCit7CisJa2ZyZWUoaC0+ZHJ2W2Rydl9pbmRleF0pOworCWgtPmRydltkcnZfaW5kZXhdID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4KQoreworCXB1dF9kaXNrKGgtPmdlbmRpc2tbZHJ2X2luZGV4XSk7CisJaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0gTlVMTDsKK30KKwogLyogY2Npc3NfYWRkX2dlbmRpc2sgZmluZHMgYSBmcmVlIGhiYVtdLT5kcnYgc3RydWN0dXJlCiAgKiBhbmQgYWxsb2NhdGVzIGEgZ2VuZGlzayBpZiBuZWVkZWQsIGFuZCBzZXRzIHRoZSBsdW5pZAogICogaW4gdGhlIGRydmluZm8gc3RydWN0dXJlLiAgIEl0IHJldHVybnMgdGhlIGluZGV4IGludG8KQEAgLTE4MjQsMTMgKzIwNDcsMTUgQEAKICAqIGEgbWVhbnMgdG8gdGFsayB0byB0aGUgY29udHJvbGxlciBpbiBjYXNlIG5vIGxvZ2ljYWwKICAqIGRyaXZlcyBoYXZlIHlldCBiZWVuIGNvbmZpZ3VyZWQuCiAgKi8KLXN0YXRpYyBpbnQgY2Npc3NfYWRkX2dlbmRpc2soY3Rscl9pbmZvX3QgKmgsIF9fdTMyIGx1bmlkLCBpbnQgY29udHJvbGxlcl9ub2RlKQorc3RhdGljIGludCBjY2lzc19hZGRfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciBsdW5pZFtdLAorCWludCBjb250cm9sbGVyX25vZGUpCiB7CiAJaW50IGRydl9pbmRleDsKIAotCWRydl9pbmRleCA9IGNjaXNzX2ZpbmRfZnJlZV9kcml2ZV9pbmRleChoLT5jdGxyLCBjb250cm9sbGVyX25vZGUpOworCWRydl9pbmRleCA9IGNjaXNzX2FsbG9jX2RyaXZlX2luZm8oaCwgY29udHJvbGxlcl9ub2RlKTsKIAlpZiAoZHJ2X2luZGV4ID09IC0xKQogCQlyZXR1cm4gLTE7CisKIAkvKkNoZWNrIGlmIHRoZSBnZW5kaXNrIG5lZWRzIHRvIGJlIGFsbG9jYXRlZCAqLwogCWlmICghaC0+Z2VuZGlza1tkcnZfaW5kZXhdKSB7CiAJCWgtPmdlbmRpc2tbZHJ2X2luZGV4XSA9CkBAIC0xODM5LDIzICsyMDY0LDI0IEBACiAJCQlwcmludGsoS0VSTl9FUlIgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCiAJCQkJImFsbG9jYXRlIGEgbmV3IGRpc2sgJWRcbiIsCiAJCQkJaC0+Y3RsciwgZHJ2X2luZGV4KTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyX2ZyZWVfZHJpdmVfaW5mbzsKIAkJfQogCX0KLQloLT5kcnZbZHJ2X2luZGV4XS5MdW5JRCA9IGx1bmlkOwotCWlmIChjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoaCwgJmgtPmRydltkcnZfaW5kZXhdLCBkcnZfaW5kZXgpKQorCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQsIGx1bmlkLAorCQlzaXplb2YoaC0+ZHJ2W2Rydl9pbmRleF0tPkx1bklEKSk7CisJaWYgKGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShoLCBkcnZfaW5kZXgpKQogCQlnb3RvIGVycl9mcmVlX2Rpc2s7Ci0KIAkvKiBEb24ndCBuZWVkIHRvIG1hcmsgdGhpcyBidXN5IGJlY2F1c2Ugbm9ib2R5ICovCiAJLyogZWxzZSBrbm93cyBhYm91dCB0aGlzIGRpc2sgeWV0IHRvIGNvbnRlbmQgKi8KIAkvKiBmb3IgYWNjZXNzIHRvIGl0LiAqLwotCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAwOworCWgtPmRydltkcnZfaW5kZXhdLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIAl3bWIoKTsKIAlyZXR1cm4gZHJ2X2luZGV4OwogCiBlcnJfZnJlZV9kaXNrOgotCXB1dF9kaXNrKGgtPmdlbmRpc2tbZHJ2X2luZGV4XSk7Ci0JaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0gTlVMTDsKKwljY2lzc19mcmVlX2dlbmRpc2soaCwgZHJ2X2luZGV4KTsKK2Vycl9mcmVlX2RyaXZlX2luZm86CisJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xODcyLDIxICsyMDk4LDI1IEBACiAJaWYgKGgtPmdlbmRpc2tbMF0gIT0gTlVMTCkgLyogYWxyZWFkeSBkaWQgdGhpcz8gVGhlbiBiYWlsLiAqLwogCQlyZXR1cm47CiAKLQlkcnZfaW5kZXggPSBjY2lzc19hZGRfZ2VuZGlzayhoLCAwLCAxKTsKLQlpZiAoZHJ2X2luZGV4ID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCi0JCQkiYWRkIGRpc2sgMC5cbiIsIGgtPmN0bHIpOwotCQlyZXR1cm47Ci0JfQotCWgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgPSA1MTI7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0ubnJfYmxvY2tzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyA9IDA7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uc2VjdG9ycyA9IDA7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uY3lsaW5kZXJzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsID0gLTE7Ci0JbWVtc2V0KGgtPmRydltkcnZfaW5kZXhdLnNlcmlhbF9ubywgMCwgMTYpOworCWRydl9pbmRleCA9IGNjaXNzX2FkZF9nZW5kaXNrKGgsIENUTFJfTFVOSUQsIDEpOworCWlmIChkcnZfaW5kZXggPT0gLTEpCisJCWdvdG8gZXJyb3I7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgPSA1MTI7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPm5yX2Jsb2NrcyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmhlYWRzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+c2VjdG9ycyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmN5bGluZGVycyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPnJhaWRfbGV2ZWwgPSAtMTsKKwltZW1zZXQoaC0+ZHJ2W2Rydl9pbmRleF0tPnNlcmlhbF9ubywgMCwgMTYpOwogCWRpc2sgPSBoLT5nZW5kaXNrW2Rydl9pbmRleF07Ci0JY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KTsKKwlpZiAoY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KSA9PSAwKQorCQlyZXR1cm47CisJY2Npc3NfZnJlZV9nZW5kaXNrKGgsIGRydl9pbmRleCk7CisJY2Npc3NfZnJlZV9kcml2ZV9pbmZvKGgsIGRydl9pbmRleCk7CitlcnJvcjoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBjb3VsZCBub3QgIgorCQkiYWRkIGRpc2sgMC5cbiIsIGgtPmN0bHIpOworCXJldHVybjsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBhbmQgcmVtb3ZlIGxvZ2ljYWwgZHJpdmVzIGZyb20gdGhlIExvZ2ljYWwKQEAgLTE4OTcsNyArMjEyNyw4IEBACiAgKiBJTlBVVAogICogaAkJPSBUaGUgY29udHJvbGxlciB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb25zIG9uCiAgKi8KLXN0YXRpYyBpbnQgcmVidWlsZF9sdW5fdGFibGUoY3Rscl9pbmZvX3QgKmgsIGludCBmaXJzdF90aW1lKQorc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUsCisJaW50IHZpYV9pb2N0bCkKIHsKIAlpbnQgY3RsciA9IGgtPmN0bHI7CiAJaW50IG51bV9sdW5zOwpAQCAtMTkwNyw3ICsyMTM4LDcgQEAKIAlpbnQgaTsKIAlpbnQgZHJ2X2ZvdW5kOwogCWludCBkcnZfaW5kZXggPSAwOwotCV9fdTMyIGx1bmlkID0gMDsKKwl1bnNpZ25lZCBjaGFyIGx1bmlkWzhdID0gQ1RMUl9MVU5JRDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQpAQCAtMTk2MCwxMyArMjE5MSwxMyBAQAogCQlkcnZfZm91bmQgPSAwOwogCiAJCS8qIHNraXAgaG9sZXMgaW4gdGhlIGFycmF5IGZyb20gYWxyZWFkeSBkZWxldGVkIGRyaXZlcyAqLwotCQlpZiAoaC0+ZHJ2W2ldLnJhaWRfbGV2ZWwgPT0gLTEpCisJCWlmIChoLT5kcnZbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCWZvciAoaiA9IDA7IGogPCBudW1fbHVuczsgaisrKSB7Ci0JCQltZW1jcHkoJmx1bmlkLCAmbGRfYnVmZi0+TFVOW2pdWzBdLCA0KTsKLQkJCWx1bmlkID0gbGUzMl90b19jcHUobHVuaWQpOwotCQkJaWYgKGgtPmRydltpXS5MdW5JRCA9PSBsdW5pZCkgeworCQkJbWVtY3B5KGx1bmlkLCAmbGRfYnVmZi0+TFVOW2pdWzBdLCBzaXplb2YobHVuaWQpKTsKKwkJCWlmIChtZW1jbXAoaC0+ZHJ2W2ldLT5MdW5JRCwgbHVuaWQsCisJCQkJc2l6ZW9mKGx1bmlkKSkgPT0gMCkgewogCQkJCWRydl9mb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xOTc0LDExICsyMjA1LDExIEBACiAJCWlmICghZHJ2X2ZvdW5kKSB7CiAJCQkvKiBEZXJlZ2lzdGVyIGl0IGZyb20gdGhlIE9TLCBpdCdzIGdvbmUuICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCQloLT5kcnZbaV0uYnVzeV9jb25maWd1cmluZyA9IDE7CisJCQloLT5kcnZbaV0tPmJ1c3lfY29uZmlndXJpbmcgPSAxOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhoLCBpLCAxKTsKLQkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoJmgtPmRydltpXSk7Ci0JCQloLT5kcnZbaV0uYnVzeV9jb25maWd1cmluZyA9IDA7CisJCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhoLCBpLCAxLCB2aWFfaW9jdGwpOworCQkJaWYgKGgtPmRydltpXSAhPSBOVUxMKQorCQkJCWgtPmRydltpXS0+YnVzeV9jb25maWd1cmluZyA9IDA7CiAJCX0KIAl9CiAKQEAgLTE5OTIsMTcgKzIyMjMsMTYgQEAKIAogCQlkcnZfZm91bmQgPSAwOwogCi0JCW1lbWNweSgmbHVuaWQsICZsZF9idWZmLT5MVU5baV1bMF0sIDQpOwotCQlsdW5pZCA9IGxlMzJfdG9fY3B1KGx1bmlkKTsKLQorCQltZW1jcHkobHVuaWQsICZsZF9idWZmLT5MVU5baV1bMF0sIHNpemVvZihsdW5pZCkpOwogCQkvKiBGaW5kIGlmIHRoZSBMVU4gaXMgYWxyZWFkeSBpbiB0aGUgZHJpdmUgYXJyYXkKIAkJICogb2YgdGhlIGRyaXZlci4gIElmIHNvIHRoZW4gdXBkYXRlIGl0cyBpbmZvCiAJCSAqIGlmIG5vdCBpbiB1c2UuICBJZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGZpbmQKIAkJICogdGhlIGZpcnN0IGZyZWUgaW5kZXggYW5kIGFkZCBpdC4KIAkJICovCiAJCWZvciAoaiA9IDA7IGogPD0gaC0+aGlnaGVzdF9sdW47IGorKykgewotCQkJaWYgKGgtPmRydltqXS5yYWlkX2xldmVsICE9IC0xICYmCi0JCQkJaC0+ZHJ2W2pdLkx1bklEID09IGx1bmlkKSB7CisJCQlpZiAoaC0+ZHJ2W2pdICE9IE5VTEwgJiYKKwkJCQltZW1jbXAoaC0+ZHJ2W2pdLT5MdW5JRCwgbHVuaWQsCisJCQkJCXNpemVvZihoLT5kcnZbal0tPkx1bklEKSkgPT0gMCkgewogCQkJCWRydl9pbmRleCA9IGo7CiAJCQkJZHJ2X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTIwMTUsNyArMjI0NSw4IEBACiAJCQlpZiAoZHJ2X2luZGV4ID09IC0xKQogCQkJCWdvdG8gZnJlZXJldDsKIAkJfQotCQljY2lzc191cGRhdGVfZHJpdmVfaW5mbyhjdGxyLCBkcnZfaW5kZXgsIGZpcnN0X3RpbWUpOworCQljY2lzc191cGRhdGVfZHJpdmVfaW5mbyhjdGxyLCBkcnZfaW5kZXgsIGZpcnN0X3RpbWUsCisJCQl2aWFfaW9jdGwpOwogCX0JCS8qIGVuZCBmb3IgKi8KIAogZnJlZXJldDoKQEAgLTIwMzIsNiArMjI2MywyNSBAQAogCWdvdG8gZnJlZXJldDsKIH0KIAorc3RhdGljIHZvaWQgY2Npc3NfY2xlYXJfZHJpdmVfaW5mbyhkcml2ZV9pbmZvX3N0cnVjdCAqZHJpdmVfaW5mbykKK3sKKwkvKiB6ZXJvIG91dCB0aGUgZGlzayBzaXplIGluZm8gKi8KKwlkcml2ZV9pbmZvLT5ucl9ibG9ja3MgPSAwOworCWRyaXZlX2luZm8tPmJsb2NrX3NpemUgPSAwOworCWRyaXZlX2luZm8tPmhlYWRzID0gMDsKKwlkcml2ZV9pbmZvLT5zZWN0b3JzID0gMDsKKwlkcml2ZV9pbmZvLT5jeWxpbmRlcnMgPSAwOworCWRyaXZlX2luZm8tPnJhaWRfbGV2ZWwgPSAtMTsKKwltZW1zZXQoZHJpdmVfaW5mby0+c2VyaWFsX25vLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+c2VyaWFsX25vKSk7CisJbWVtc2V0KGRyaXZlX2luZm8tPm1vZGVsLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+bW9kZWwpKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+cmV2LCAwLCBzaXplb2YoZHJpdmVfaW5mby0+cmV2KSk7CisJbWVtc2V0KGRyaXZlX2luZm8tPnZlbmRvciwgMCwgc2l6ZW9mKGRyaXZlX2luZm8tPnZlbmRvcikpOworCS8qCisJICogZG9uJ3QgY2xlYXIgdGhlIExVTklEIHRob3VnaCwgd2UgbmVlZCB0byByZW1lbWJlciB3aGljaAorCSAqIG9uZSB0aGlzIG9uZSBpcy4KKwkgKi8KK30KKwogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGRlcmVnaXN0ZXIgdGhlIGRpc2sgYW5kIGl0J3MgcXVldWUgZnJvbSB0aGUKICAqIGtlcm5lbC4gIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgbG9jayBoZWxkIGFuZCB0aGUKICAqIGRydiBzdHJ1Y3R1cmVzIGJ1c3lfY29uZmlndXJpbmcgZmxhZyBzZXQuICBJdCdzIHBhcmFtZXRlcnMgYXJlOgpAQCAtMjA0Niw0MyArMjI5Niw0OCBAQAogICogICAgICAgICAgICAgdGhlIGRpc2sgaW4gcHJlcGFyYXRpb24gZm9yIHJlLWFkZGluZyBpdC4gIEluIHRoaXMgY2FzZQogICogICAgICAgICAgICAgdGhlIGhpZ2hlc3RfbHVuIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZCBhbmQgdGhlIEx1bklECiAgKiAgICAgICAgICAgICBzaG91bGQgbm90IGJlIGNsZWFyZWQuCisgKiB2aWFfaW9jdGwKKyAqICAgIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgd2UndmUgcmVhY2hlZCB0aGlzIHBhdGggdmlhIGlvY3RsLgorICogICAgVGhpcyBhZmZlY3RzIHRoZSBtYXhpbXVtIHVzYWdlIGNvdW50IGFsbG93ZWQgZm9yIGMwZDAgdG8gYmUgbWVzc2VkIHdpdGguCisgKiAgICBJZiB0aGlzIHBhdGggaXMgcmVhY2hlZCB2aWEgaW9jdGwoKSwgdGhlbiB0aGUgbWF4X3VzYWdlX2NvdW50IHdpbGwKKyAqICAgIGJlIDEsIGFzIHRoZSBwcm9jZXNzIGNhbGxpbmcgaW9jdGwoKSBoYXMgZ290IHRvIGhhdmUgdGhlIGRldmljZSBvcGVuLgorICogICAgSWYgd2UgZ2V0IGhlcmUgdmlhIHN5c2ZzLCB0aGVuIHRoZSBtYXggdXNhZ2UgY291bnQgd2lsbCBiZSB6ZXJvLgogKi8KIHN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4LAotCQkJICAgaW50IGNsZWFyX2FsbCkKKwkJCSAgIGludCBjbGVhcl9hbGwsIGludCB2aWFfaW9jdGwpCiB7CiAJaW50IGk7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydjsKKwlpbnQgcmVjYWxjdWxhdGVfaGlnaGVzdF9sdW47CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCXJldHVybiAtRVBFUk07CiAKLQlkcnYgPSAmaC0+ZHJ2W2Rydl9pbmRleF07CisJZHJ2ID0gaC0+ZHJ2W2Rydl9pbmRleF07CiAJZGlzayA9IGgtPmdlbmRpc2tbZHJ2X2luZGV4XTsKIAogCS8qIG1ha2Ugc3VyZSBsb2dpY2FsIHZvbHVtZSBpcyBOT1QgaXMgdXNlICovCiAJaWYgKGNsZWFyX2FsbCB8fCAoaC0+Z2VuZGlza1swXSA9PSBkaXNrKSkgewotCQlpZiAoZHJ2LT51c2FnZV9jb3VudCA+IDEpCisJCWlmIChkcnYtPnVzYWdlX2NvdW50ID4gdmlhX2lvY3RsKQogCQkJcmV0dXJuIC1FQlVTWTsKIAl9IGVsc2UgaWYgKGRydi0+dXNhZ2VfY291bnQgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJcmVjYWxjdWxhdGVfaGlnaGVzdF9sdW4gPSAoZHJ2ID09IGgtPmRydltoLT5oaWdoZXN0X2x1bl0pOworCiAJLyogaW52YWxpZGF0ZSB0aGUgZGV2aWNlcyBhbmQgZGVyZWdpc3RlciB0aGUgZGlzay4gIElmIGl0IGlzIGRpc2sKIAkgKiB6ZXJvIGRvIG5vdCBkZXJlZ2lzdGVyIGl0IGJ1dCBqdXN0IHplcm8gb3V0IGl0J3MgdmFsdWVzLiAgVGhpcwogCSAqIGFsbG93cyB1cyB0byBkZWxldGUgZGlzayB6ZXJvIGJ1dCBrZWVwIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVyZWQuCiAJICovCiAJaWYgKGgtPmdlbmRpc2tbMF0gIT0gZGlzaykgewogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwotCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKKwkJaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApIHsKKwkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoaCwgZHJ2X2luZGV4LCAwKTsKIAkJCWRlbF9nZW5kaXNrKGRpc2spOwotCQlpZiAocSkgewotCQkJYmxrX2NsZWFudXBfcXVldWUocSk7Ci0JCQkvKiBTZXQgZHJ2LT5xdWV1ZSB0byBOVUxMIHNvIHRoYXQgd2UgZG8gbm90IHRyeQotCQkJICogdG8gY2FsbCBibGtfc3RhcnRfcXVldWUgb24gdGhpcyBxdWV1ZSBpbiB0aGUKLQkJCSAqIGludGVycnVwdCBoYW5kbGVyCi0JCQkgKi8KLQkJCWRydi0+cXVldWUgPSBOVUxMOwogCQl9CisJCWlmIChxKQorCQkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCS8qIElmIGNsZWFyX2FsbCBpcyBzZXQgdGhlbiB3ZSBhcmUgZGVsZXRpbmcgdGhlIGxvZ2ljYWwKIAkJICogZHJpdmUsIG5vdCBqdXN0IHJlZnJlc2hpbmcgaXRzIGluZm8uICBGb3IgZHJpdmVzCiAJCSAqIG90aGVyIHRoYW4gZGlzayAwIHdlIHdpbGwgY2FsbCBwdXRfZGlzay4gIFdlIGRvIG5vdApAQCAtMjEwNSwzNCArMjM2MCwyMCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOworCQljY2lzc19jbGVhcl9kcml2ZV9pbmZvKGRydik7CiAJfQogCiAJLS1oLT5udW1fbHVuczsKLQkvKiB6ZXJvIG91dCB0aGUgZGlzayBzaXplIGluZm8gKi8KLQlkcnYtPm5yX2Jsb2NrcyA9IDA7Ci0JZHJ2LT5ibG9ja19zaXplID0gMDsKLQlkcnYtPmhlYWRzID0gMDsKLQlkcnYtPnNlY3RvcnMgPSAwOwotCWRydi0+Y3lsaW5kZXJzID0gMDsKLQlkcnYtPnJhaWRfbGV2ZWwgPSAtMTsJLyogVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgdmFyaWFibGUgdG8KLQkJCQkgKiBpbmRpY2F0ZSB0aGF0IHRoaXMgZWxlbWVudCBvZiB0aGUgZHJpdmUKLQkJCQkgKiBhcnJheSBpcyBmcmVlLgotCQkJCSAqLwogCi0JaWYgKGNsZWFyX2FsbCkgewotCQkvKiBjaGVjayB0byBzZWUgaWYgaXQgd2FzIHRoZSBsYXN0IGRpc2sgKi8KLQkJaWYgKGRydiA9PSBoLT5kcnYgKyBoLT5oaWdoZXN0X2x1bikgewotCQkJLyogaWYgc28sIGZpbmQgdGhlIG5ldyBoaWdodGVzdCBsdW4gKi8KLQkJCWludCBpLCBuZXdoaWdoZXN0ID0gLTE7Ci0JCQlmb3IgKGkgPSAwOyBpIDw9IGgtPmhpZ2hlc3RfbHVuOyBpKyspIHsKLQkJCQkvKiBpZiB0aGUgZGlzayBoYXMgc2l6ZSA+IDAsIGl0IGlzIGF2YWlsYWJsZSAqLwotCQkJCWlmIChoLT5kcnZbaV0uaGVhZHMpCi0JCQkJCW5ld2hpZ2hlc3QgPSBpOwotCQkJfQotCQkJaC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OworCS8qIGlmIGl0IHdhcyB0aGUgbGFzdCBkaXNrLCBmaW5kIHRoZSBuZXcgaGlnaHRlc3QgbHVuICovCisJaWYgKGNsZWFyX2FsbCAmJiByZWNhbGN1bGF0ZV9oaWdoZXN0X2x1bikgeworCQlpbnQgaSwgbmV3aGlnaGVzdCA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDw9IGgtPmhpZ2hlc3RfbHVuOyBpKyspIHsKKwkJCS8qIGlmIHRoZSBkaXNrIGhhcyBzaXplID4gMCwgaXQgaXMgYXZhaWxhYmxlICovCisJCQlpZiAoaC0+ZHJ2W2ldICYmIGgtPmRydltpXS0+aGVhZHMpCisJCQkJbmV3aGlnaGVzdCA9IGk7CiAJCX0KLQotCQlkcnYtPkx1bklEID0gMDsKKwkJaC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI0NzksOCArMjcyMCw2IEBACiAJfSBlbHNlIHsJCS8qIEdldCBnZW9tZXRyeSBmYWlsZWQgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgaGVhZHM9JWQsIHNlY3RvcnM9JWQsIGN5bGluZGVycz0lZFxuXG4iLAotCSAgICAgICBkcnYtPmhlYWRzLCBkcnYtPnNlY3RvcnMsIGRydi0+Y3lsaW5kZXJzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI1MTQsOSArMjc1Myw2IEBACiAJCSp0b3RhbF9zaXplID0gMDsKIAkJKmJsb2NrX3NpemUgPSBCTE9DS19TSVpFOwogCX0KLQlpZiAoKnRvdGFsX3NpemUgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYmxvY2tzPSAlbGx1IGJsb2NrX3NpemU9ICVkXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKSp0b3RhbF9zaXplKzEsICpibG9ja19zaXplKTsKIAlrZnJlZShidWYpOwogfQogCkBAIC0yNTY4LDcgKzI4MDQsOCBAQAogCUlucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmYgPSBOVUxMOwogCiAJZm9yIChsb2d2b2wgPSAwOyBsb2d2b2wgPCBDSVNTX01BWF9MVU47IGxvZ3ZvbCsrKSB7Ci0JCWlmIChoLT5kcnZbbG9ndm9sXS5MdW5JRCA9PSBkcnYtPkx1bklEKSB7CisJCWlmIChtZW1jbXAoaC0+ZHJ2W2xvZ3ZvbF0tPkx1bklELCBkcnYtPkx1bklELAorCQkJc2l6ZW9mKGRydi0+THVuSUQpKSA9PSAwKSB7CiAJCQlGT1VORCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtMzA1Myw4ICszMjkwLDcgQEAKIAkvKiBUaGUgZmlyc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgY29udHJvbGxlciBlcnJvciByZXBvcnRpbmcuICovCiAJYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCAzKTsKIAljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IDB4MDQ7CS8qIGZsYWcgZm9yIGRpcmVjdCBsb29rdXAuICovCi0JYy0+SGVhZGVyLkxVTi5Mb2dEZXYuVm9sSWQgPSBkcnYtPkx1bklEOwotCWMtPkhlYWRlci5MVU4uTG9nRGV2Lk1vZGUgPSAxOworCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGRydi0+THVuSUQpKTsKIAljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvLyAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7CiAJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgogCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKQEAgLTMyMzIsMjAgKzM0NjgsMTIxIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCisvKioKKyAqIGFkZF90b19zY2FuX2xpc3QoKSAtIGFkZCBjb250cm9sbGVyIHRvIHJlc2NhbiBxdWV1ZQorICogQGg6CQkgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIEFkZHMgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHJlc2NhbiBxdWV1ZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgcXVldWUuCisgKgorICogcmV0dXJucyAxIGlmIGFkZGVkIHRvIHRoZSBxdWV1ZSwgMCBpZiBza2lwcGVkIChjb3VsZCBiZSBvbiB0aGUKKyAqIHF1ZXVlIGFscmVhZHksIG9yIHRoZSBjb250cm9sbGVyIGNvdWxkIGJlIGluaXRpYWxpemluZyBvciBzaHV0dGluZworICogZG93bikuCisgKiovCitzdGF0aWMgaW50IGFkZF90b19zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2g7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChoLT5idXN5X2luaXRpYWxpemluZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bikpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0X2gsICZzY2FuX3EsIHNjYW5fbGlzdCkgeworCQlpZiAodGVzdF9oID09IGgpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQgJiYgIWgtPmJ1c3lfc2Nhbm5pbmcpIHsKKwkJSU5JVF9DT01QTEVUSU9OKGgtPnNjYW5fd2FpdCk7CisJCWxpc3RfYWRkX3RhaWwoJmgtPnNjYW5fbGlzdCwgJnNjYW5fcSk7CisJCXJldCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmc2Nhbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiByZW1vdmVfZnJvbV9zY2FuX2xpc3QoKSAtIHJlbW92ZSBjb250cm9sbGVyIGZyb20gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCQkgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIFJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgZnJvbSB0aGUgcmVzY2FuIHF1ZXVlIGlmIHByZXNlbnQuIEJsb2NrcyBpZgorICogdGhlIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IGNvbmR1Y3RpbmcgYSByZXNjYW4uCisgKiovCitzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2gsICp0bXBfaDsKKwlpbnQgc2Nhbm5pbmcgPSAwOworCisJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRlc3RfaCwgdG1wX2gsICZzY2FuX3EsIHNjYW5fbGlzdCkgeworCQlpZiAodGVzdF9oID09IGgpIHsKKwkJCWxpc3RfZGVsKCZoLT5zY2FuX2xpc3QpOworCQkJY29tcGxldGVfYWxsKCZoLT5zY2FuX3dhaXQpOworCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoJmgtPmJ1c3lfc2Nhbm5pbmcpCisJCXNjYW5uaW5nID0gMDsKKwltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCisJaWYgKHNjYW5uaW5nKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOworfQorCisvKioKKyAqIHNjYW5fdGhyZWFkKCkgLSBrZXJuZWwgdGhyZWFkIHVzZWQgdG8gcmVzY2FuIGNvbnRyb2xsZXJzCisgKiBAZGF0YToJIElnbm9yZWQuCisgKgorICogQSBrZXJuZWwgdGhyZWFkIHVzZWQgc2NhbiBmb3IgZHJpdmUgdG9wb2xvZ3kgY2hhbmdlcyBvbgorICogY29udHJvbGxlcnMuIFRoZSB0aHJlYWQgcHJvY2Vzc2VzIG9ubHkgb25lIGNvbnRyb2xsZXIgYXQgYSB0aW1lCisgKiB1c2luZyBhIHF1ZXVlLiAgQ29udHJvbGxlcnMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSB1c2luZworICogYWRkX3RvX3NjYW5fbGlzdCgpIGFuZCByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIGVpdGhlciBhZnRlciBkb25lCisgKiBwcm9jZXNzaW5nIG9yIHVzaW5nIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpLgorICoKKyAqIHJldHVybnMgMC4KKyAqKi8KIHN0YXRpYyBpbnQgc2Nhbl90aHJlYWQodm9pZCAqZGF0YSkKIHsKLQljdGxyX2luZm9fdCAqaCA9IGRhdGE7Ci0JaW50IHJjOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCWgtPnJlc2Nhbl93YWl0ID0gJndhaXQ7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAotCWZvciAoOzspIHsKLQkJcmMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJndhaXQpOworCXdoaWxlICgxKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlKCk7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKLQkJaWYgKCFyYykKLQkJCXJlYnVpbGRfbHVuX3RhYmxlKGgsIDApOworCisJCXdoaWxlICgxKSB7CisJCQltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwkJCWlmIChsaXN0X2VtcHR5KCZzY2FuX3EpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaCA9IGxpc3RfZW50cnkoc2Nhbl9xLm5leHQsCisJCQkJICAgICAgIHN0cnVjdCBjdGxyX2luZm8sCisJCQkJICAgICAgIHNjYW5fbGlzdCk7CisJCQlsaXN0X2RlbCgmaC0+c2Nhbl9saXN0KTsKKwkJCWgtPmJ1c3lfc2Nhbm5pbmcgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKworCQkJaWYgKGgpIHsKKwkJCQlyZWJ1aWxkX2x1bl90YWJsZShoLCAwLCAwKTsKKwkJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CisJCQkJbXV0ZXhfbG9jaygmc2Nhbl9tdXRleCk7CisJCQkJaC0+YnVzeV9zY2FubmluZyA9IDA7CisJCQkJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwkJCX0KKwkJfQogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMjY4LDggKzM2MDUsOCBAQAogCWNhc2UgUkVQT1JUX0xVTlNfQ0hBTkdFRDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVwb3J0IExVTiBkYXRhICIKIAkJCSJjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKLQkJaWYgKGgtPnJlc2Nhbl93YWl0KQotCQkJY29tcGxldGUoaC0+cmVzY2FuX3dhaXQpOworCQlhZGRfdG9fc2Nhbl9saXN0KGgpOworCQl3YWtlX3VwX3Byb2Nlc3MoY2Npc3Nfc2Nhbl90aHJlYWQpOwogCQlyZXR1cm4gMTsKIAlicmVhazsKIAljYXNlIFBPV0VSX09SX1JFU0VUOgpAQCAtMzQyMiw3ICszNzU5LDI3IEBACiAJX191NjQgY2ZnX29mZnNldDsKIAlfX3UzMiBjZmdfYmFzZV9hZGRyOwogCV9fdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgcHJvZF9pbmRleCwgZXJyOworCisJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAorCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykgeworCQkvKiBTdGFuZCBhc2lkZSBmb3IgaHBzYSBkcml2ZXIgb24gcmVxdWVzdCAqLworCQlpZiAoY2Npc3NfYWxsb3dfaHBzYSAmJiBwcm9kdWN0c1tpXS5ib2FyZF9pZCA9PSBIUFNBX0JPVU5EQVJZKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkKKwkJCWJyZWFrOworCX0KKwlwcm9kX2luZGV4ID0gaTsKKwlpZiAocHJvZF9pbmRleCA9PSBBUlJBWV9TSVpFKHByb2R1Y3RzKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJInVucmVjb2duaXplZCBib2FyZCBJRDogMHglMDhseCwgaWdub3JpbmcuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpIGJvYXJkX2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogY2hlY2sgdG8gc2VlIGlmIGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzYWJsZWQgKi8KIAkvKiBCRUZPUkUgdHJ5aW5nIHRvIGVuYWJsZSBpdCAqLwpAQCAtMzQ0NiwxMSArMzgwMyw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0Jc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7Ci0Jc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAotCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7Ci0KICNpZmRlZiBDQ0lTU19ERUJVRwogCXByaW50aygiY29tbWFuZCA9ICV4XG4iLCBjb21tYW5kKTsKIAlwcmludGsoImlycSA9ICV4XG4iLCBwZGV2LT5pcnEpOwpAQCAtMzQ4OSw3ICszODQxLDcgQEAKIAkJaWYgKHNjcmF0Y2hwYWQgPT0gQ0NJU1NfRklSTVdBUkVfUkVBRFkpCiAJCQlicmVhazsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsJLyogd2FpdCAxMDBtcyAqLworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CS8qIHdhaXQgMTAwbXMgKi8KIAl9CiAJaWYgKHNjcmF0Y2hwYWQgIT0gQ0NJU1NfRklSTVdBUkVfUkVBRFkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IEJvYXJkIG5vdCByZWFkeS4gIFRpbWVkIG91dC5cbiIpOwpAQCAtMzUzNiwxNCArMzg4OCw5IEBACiAJICogbGVhdmUgYSBsaXR0bGUgcm9vbSBmb3IgaW9jdGwgY2FsbHMuCiAJICovCiAJYy0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihjLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKSB7Ci0JCWlmIChib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkgewotCQkJYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbaV0ucHJvZHVjdF9uYW1lOwotCQkJYy0+YWNjZXNzID0gKihwcm9kdWN0c1tpXS5hY2Nlc3MpOwotCQkJYy0+bnJfY21kcyA9IGMtPm1heF9jb21tYW5kcyAtIDQ7Ci0JCQlicmVhazsKLQkJfQotCX0KKwljLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CisJYy0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOworCWMtPm5yX2NtZHMgPSBjLT5tYXhfY29tbWFuZHMgLSA0OwogCWlmICgocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMF0pICE9ICdDJykgfHwKIAkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzFdKSAhPSAnSScpIHx8CiAJICAgIChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVsyXSkgIT0gJ1MnKSB8fApAQCAtMzU1MiwyNyArMzg5OSw2IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9Ci0JLyogV2UgZGlkbid0IGZpbmQgdGhlIGNvbnRyb2xsZXIgaW4gb3VyIGxpc3QuIFdlIGtub3cgdGhlCi0JICogc2lnbmF0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIGFuIEhQIGRldmljZSBsZXQncyB0cnkgdG8KLQkgKiBiaW5kIHRvIHRoZSBkZXZpY2UgYW5kIGZpcmUgaXQgdXAuIE90aGVyd2lzZSB3ZSBiYWlsLgotCSAqLwotCWlmIChpID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7Ci0JCWlmIChzdWJzeXN0ZW1fdmVuZG9yX2lkID09IFBDSV9WRU5ET1JfSURfSFApIHsKLQkJCWMtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW2ktMV0ucHJvZHVjdF9uYW1lOwotCQkJYy0+YWNjZXNzID0gKihwcm9kdWN0c1tpLTFdLmFjY2Vzcyk7Ci0JCQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBUaGlzIGlzIGFuIHVua25vd24gIgotCQkJCSJTbWFydCBBcnJheSBjb250cm9sbGVyLlxuIgotCQkJCSJjY2lzczogUGxlYXNlIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IGRyaXZlciAiCi0JCQkJImF2YWlsYWJsZSBmcm9tIHd3dy5ocC5jb20uXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBTb3JyeSwgSSBkb24ndCBrbm93IGhvdyIKLQkJCQkiIHRvIGFjY2VzcyB0aGUgU21hcnQgQXJyYXkgY29udHJvbGxlciAlMDhseFxuIgotCQkJCQksICh1bnNpZ25lZCBsb25nKWJvYXJkX2lkKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JCX0KLQl9CiAjaWZkZWYgQ09ORklHX1g4NgogCXsKIAkJLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KQEAgLTM2MTUsNyArMzk0MSw3IEBACiAJCQlicmVhazsKIAkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKKwkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDEpKTsKIAl9CiAKICNpZmRlZiBDQ0lTU19ERUJVRwpAQCAtMzY2OSwxNSArMzk5NSwxNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9oYmEoaW50IGkpCitzdGF0aWMgdm9pZCBmcmVlX2hiYShpbnQgbikKIHsKLQljdGxyX2luZm9fdCAqcCA9IGhiYVtpXTsKLQlpbnQgbjsKKwljdGxyX2luZm9fdCAqaCA9IGhiYVtuXTsKKwlpbnQgaTsKIAotCWhiYVtpXSA9IE5VTEw7Ci0JZm9yIChuID0gMDsgbiA8IENJU1NfTUFYX0xVTjsgbisrKQotCQlwdXRfZGlzayhwLT5nZW5kaXNrW25dKTsKLQlrZnJlZShwKTsKKwloYmFbbl0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBoLT5oaWdoZXN0X2x1biArIDE7IGkrKykKKwkJaWYgKGgtPmdlbmRpc2tbaV0gIT0gTlVMTCkKKwkJCXB1dF9kaXNrKGgtPmdlbmRpc2tbaV0pOworCWtmcmVlKGgpOwogfQogCiAvKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJlLiAqLwpAQCAtMzkxOCwxNCArNDI0NSwxNyBAQAogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAxOwogCUlOSVRfSExJU1RfSEVBRCgmaGJhW2ldLT5jbXBRKTsKIAlJTklUX0hMSVNUX0hFQUQoJmhiYVtpXS0+cmVxUSk7CisJbXV0ZXhfaW5pdCgmaGJhW2ldLT5idXN5X3NodXR0aW5nX2Rvd24pOwogCiAJaWYgKGNjaXNzX3BjaV9pbml0KGhiYVtpXSwgcGRldikgIT0gMCkKLQkJZ290byBjbGVhbjA7CisJCWdvdG8gY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOwogCiAJc3ByaW50ZihoYmFbaV0tPmRldm5hbWUsICJjY2lzcyVkIiwgaSk7CiAJaGJhW2ldLT5jdGxyID0gaTsKIAloYmFbaV0tPnBkZXYgPSBwZGV2OwogCisJaW5pdF9jb21wbGV0aW9uKCZoYmFbaV0tPnNjYW5fd2FpdCk7CisKIAlpZiAoY2Npc3NfY3JlYXRlX2hiYV9zeXNmc19lbnRyeShoYmFbaV0pKQogCQlnb3RvIGNsZWFuMDsKIApAQCAtNDAwMSw4ICs0MzMxLDcgQEAKIAloYmFbaV0tPm51bV9sdW5zID0gMDsKIAloYmFbaV0tPmhpZ2hlc3RfbHVuID0gLTE7CiAJZm9yIChqID0gMDsgaiA8IENJU1NfTUFYX0xVTjsgaisrKSB7Ci0JCWhiYVtpXS0+ZHJ2W2pdLnJhaWRfbGV2ZWwgPSAtMTsKLQkJaGJhW2ldLT5kcnZbal0ucXVldWUgPSBOVUxMOworCQloYmFbaV0tPmRydltqXSA9IE5VTEw7CiAJCWhiYVtpXS0+Z2VuZGlza1tqXSA9IE5VTEw7CiAJfQogCkBAIC00MDM1LDE0ICs0MzY0LDggQEAKIAogCWhiYVtpXS0+Y2Npc3NfbWF4X3NlY3RvcnMgPSAyMDQ4OwogCisJcmVidWlsZF9sdW5fdGFibGUoaGJhW2ldLCAxLCAwKTsKIAloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKLQotCXJlYnVpbGRfbHVuX3RhYmxlKGhiYVtpXSwgMSk7Ci0JaGJhW2ldLT5jY2lzc19zY2FuX3RocmVhZCA9IGt0aHJlYWRfcnVuKHNjYW5fdGhyZWFkLCBoYmFbaV0sCi0JCQkJImNjaXNzX3NjYW4lMDJkIiwgaSk7Ci0JaWYgKElTX0VSUihoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKSkKLQkJcmV0dXJuIFBUUl9FUlIoaGJhW2ldLT5jY2lzc19zY2FuX3RocmVhZCk7Ci0KIAlyZXR1cm4gMTsKIAogY2xlYW40OgpAQCAtNDA2MiwxOCArNDM4NSwxNCBAQAogY2xlYW4xOgogCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSk7CiBjbGVhbjA6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2NsZWFuX25vX3JlbGVhc2VfcmVnaW9uczoKIAloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKLQkvKiBjbGVhbnVwIGFueSBxdWV1ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkICovCi0JZm9yIChqPTA7IGogPD0gaGJhW2ldLT5oaWdoZXN0X2x1bjsgaisrKXsKLQkJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9ICYoaGJhW2ldLT5kcnZbal0pOwotCQlpZiAoZHJ2LT5xdWV1ZSkKLQkJCWJsa19jbGVhbnVwX3F1ZXVlKGRydi0+cXVldWUpOwotCX0KKwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCiAJICovCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9oYmEoaSk7CiAJcmV0dXJuIC0xOwpAQCAtNDEyNSw4ICs0NDQ0LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWt0aHJlYWRfc3RvcChoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKTsKKwltdXRleF9sb2NrKCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAKKwlyZW1vdmVfZnJvbV9zY2FuX2xpc3QoaGJhW2ldKTsKIAlyZW1vdmVfcHJvY19lbnRyeShoYmFbaV0tPmRldm5hbWUsIHByb2NfY2Npc3MpOwogCXVucmVnaXN0ZXJfYmxrZGV2KGhiYVtpXS0+bWFqb3IsIGhiYVtpXS0+ZGV2bmFtZSk7CiAKQEAgLTQxMzYsOCArNDQ1NiwxMCBAQAogCQlpZiAoZGlzaykgewogCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLT5xdWV1ZTsKIAotCQkJaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfVVApCisJCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgeworCQkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoaGJhW2ldLCBqLCAxKTsKIAkJCQlkZWxfZ2VuZGlzayhkaXNrKTsKKwkJCX0KIAkJCWlmIChxKQogCQkJCWJsa19jbGVhbnVwX3F1ZXVlKHEpOwogCQl9CkBAIC00MTcwLDYgKzQ0OTIsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSk7CisJbXV0ZXhfdW5sb2NrKCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAJZnJlZV9oYmEoaSk7CiB9CiAKQEAgLTQyMDIsMTUgKzQ1MjUsMjUgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJLyogU3RhcnQgdGhlIHNjYW4gdGhyZWFkICovCisJY2Npc3Nfc2Nhbl90aHJlYWQgPSBrdGhyZWFkX3J1bihzY2FuX3RocmVhZCwgTlVMTCwgImNjaXNzX3NjYW4iKTsKKwlpZiAoSVNfRVJSKGNjaXNzX3NjYW5fdGhyZWFkKSkgeworCQllcnIgPSBQVFJfRVJSKGNjaXNzX3NjYW5fdGhyZWFkKTsKKwkJZ290byBlcnJfYnVzX3VucmVnaXN0ZXI7CisJfQorCiAJLyogUmVnaXN0ZXIgZm9yIG91ciBQQ0kgZGV2aWNlcyAqLwogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNjaXNzX3BjaV9kcml2ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2J1c19yZWdpc3RlcjsKKwkJZ290byBlcnJfdGhyZWFkX3N0b3A7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogCi1lcnJfYnVzX3JlZ2lzdGVyOgorZXJyX3RocmVhZF9zdG9wOgorCWt0aHJlYWRfc3RvcChjY2lzc19zY2FuX3RocmVhZCk7CitlcnJfYnVzX3VucmVnaXN0ZXI6CiAJYnVzX3VucmVnaXN0ZXIoJmNjaXNzX2J1c190eXBlKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQyMjcsNiArNDU2MCw3IEBACiAJCQljY2lzc19yZW1vdmVfb25lKGhiYVtpXS0+cGRldik7CiAJCX0KIAl9CisJa3RocmVhZF9zdG9wKGNjaXNzX3NjYW5fdGhyZWFkKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL2NjaXNzIiwgTlVMTCk7CiAJYnVzX3VucmVnaXN0ZXIoJmNjaXNzX2J1c190eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaAppbmRleCAwNmE1ZGIyLi4zMTUyNGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBDQ0lTU19ICiAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJjY2lzc19jbWQuaCIKIApAQCAtMjksNyArMzAsNyBAQAogfTsKIHR5cGVkZWYgc3RydWN0IF9kcml2ZV9pbmZvX3N0cnVjdAogewotIAlfX3UzMiAgIEx1bklEOwkKKwl1bnNpZ25lZCBjaGFyIEx1bklEWzhdOwogCWludCAJdXNhZ2VfY291bnQ7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwogCXNlY3Rvcl90IG5yX2Jsb2NrczsKQEAgLTUxLDYgKzUyLDcgQEAKIAljaGFyIHZlbmRvcltWRU5ET1JfTEVOICsgMV07IC8qIFNDU0kgdmVuZG9yIHN0cmluZyAqLwogCWNoYXIgbW9kZWxbTU9ERUxfTEVOICsgMV07ICAgLyogU0NTSSBtb2RlbCBzdHJpbmcgKi8KIAljaGFyIHJldltSRVZfTEVOICsgMV07ICAgICAgIC8qIFNDU0kgcmV2aXNpb24gc3RyaW5nICovCisJY2hhciBkZXZpY2VfaW5pdGlhbGl6ZWQ7ICAgICAvKiBpbmRpY2F0ZXMgd2hldGhlciBkZXYgaXMgaW5pdGlhbGl6ZWQgKi8KIH0gZHJpdmVfaW5mb19zdHJ1Y3Q7CiAKIHN0cnVjdCBjdGxyX2luZm8gCkBAIC04Niw3ICs4OCw3IEBACiAJQllURQljY2lzc19yZWFkX2NhcGFjaXR5OwogCiAJLy8gaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBsb2dpY2FsIHZvbHVtZQotCWRyaXZlX2luZm9fc3RydWN0IGRydltDSVNTX01BWF9MVU5dOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnZbQ0lTU19NQVhfTFVOXTsKIAogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kIGFjY2VzczsKIApAQCAtMTA4LDYgKzExMCw4IEBACiAJaW50CQkJbnJfZnJlZXM7IAogCWludAkJCWJ1c3lfY29uZmlndXJpbmc7CiAJaW50CQkJYnVzeV9pbml0aWFsaXppbmc7CisJaW50CQkJYnVzeV9zY2FubmluZzsKKwlzdHJ1Y3QgbXV0ZXgJCWJ1c3lfc2h1dHRpbmdfZG93bjsKIAogCS8qIFRoaXMgZWxlbWVudCBob2xkcyB0aGUgemVybyBiYXNlZCBxdWV1ZSBudW1iZXIgb2YgdGhlIGxhc3QKIAkgKiBxdWV1ZSB0byBiZSBzdGFydGVkLiAgSXQgaXMgdXNlZCBmb3IgZmFpcm5lc3MuCkBAIC0xMjIsOCArMTI2LDggQEAKIAkvKiBhbmQgc2F2ZWQgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgYWxpdmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gKnJlc2Nhbl93YWl0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2Npc3Nfc2Nhbl90aHJlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCBzY2FuX2xpc3Q7CisJc3RydWN0IGNvbXBsZXRpb24gc2Nhbl93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IGI4MmQ0MzguLjY0MjI2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTE3Nyw3ICsxNzgsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIGlkYV9wcm9jaW5pdChpbnQgaSk7Ci1zdGF0aWMgaW50IGlkYV9wcm9jX2dldF9pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNlbHNlCiBzdGF0aWMgdm9pZCBpZGFfcHJvY2luaXQoaW50IGkpIHt9CiAjZW5kaWYKQEAgLTIwNiw2ICsyMDYsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYXJyYXk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGFfcHJvY19mb3BzOwogCiAvKgogICogR2V0IHVzIGEgZmlsZSBpbiAvcHJvYy9hcnJheSB0aGF0IHNheXMgc29tZXRoaW5nIGFib3V0IGVhY2ggY29udHJvbGxlci4KQEAgLTIxOCwxOSArMjE5LDE2IEBACiAJCWlmICghcHJvY19hcnJheSkgcmV0dXJuOwogCX0KIAotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoaGJhW2ldLT5kZXZuYW1lLCAwLCBwcm9jX2FycmF5LAotCQkJICAgICAgIGlkYV9wcm9jX2dldF9pbmZvLCBoYmFbaV0pOworCXByb2NfY3JlYXRlX2RhdGEoaGJhW2ldLT5kZXZuYW1lLCAwLCBwcm9jX2FycmF5LCAmaWRhX3Byb2NfZm9wcywgaGJhW2ldKTsKIH0KIAogLyoKICAqIFJlcG9ydCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbnRyb2xsZXIuCiAgKi8KLXN0YXRpYyBpbnQgaWRhX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkYV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCW9mZl90IHBvcyA9IDA7Ci0Jb2ZmX3QgbGVuID0gMDsKLQlpbnQgc2l6ZSwgaSwgY3RscjsKLQljdGxyX2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCopZGF0YTsKKwlpbnQgaSwgY3RscjsKKwljdGxyX2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCopbS0+cHJpdmF0ZTsKIAlkcnZfaW5mb190ICpkcnY7CiAjaWZkZWYgQ1BRX1BST0NfUFJJTlRfUVVFVUVTCiAJY21kbGlzdF90ICpjOwpAQCAtMjM4LDcgKzIzNiw3IEBACiAjZW5kaWYKIAogCWN0bHIgPSBoLT5jdGxyOwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlciwgIiVzOiAgQ29tcGFxICVzIENvbnRyb2xsZXJcbiIKKwlzZXFfcHJpbnRmKG0sICIlczogIENvbXBhcSAlcyBDb250cm9sbGVyXG4iCiAJCSIgICAgICAgQm9hcmQgSUQ6IDB4JTA4bHhcbiIKIAkJIiAgICAgICBGaXJtd2FyZSBSZXZpc2lvbjogJWMlYyVjJWNcbiIKIAkJIiAgICAgICBDb250cm9sbGVyIFNpZzogMHglMDhseFxuIgpAQCAtMjU4LDU1ICsyNTYsNTQgQEAKIAkJaC0+bG9nX2RyaXZlcywgaC0+cGh5c19kcml2ZXMsCiAJCWgtPlFkZXB0aCwgaC0+bWF4UXNpbmNlaW5pdCk7CiAKLQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7Ci0JCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIkxvZ2ljYWwgRHJpdmUgSW5mbzpcbiIpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0cyhtLCAiTG9naWNhbCBEcml2ZSBJbmZvOlxuIik7CiAKIAlmb3IoaT0wOyBpPGgtPmxvZ19kcml2ZXM7IGkrKykgewogCQlkcnYgPSAmaC0+ZHJ2W2ldOwotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiaWRhL2MlZGQlZDogYmxrc3o9JWQgbnJfYmxrcz0lZFxuIiwKKwkJc2VxX3ByaW50ZihtLCAiaWRhL2MlZGQlZDogYmxrc3o9JWQgbnJfYmxrcz0lZFxuIiwKIAkJCQljdGxyLCBpLCBkcnYtPmJsa19zaXplLCBkcnYtPm5yX2Jsa3MpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CiAJfQogCiAjaWZkZWYgQ1BRX1BST0NfUFJJTlRfUVVFVUVTCiAJc3Bpbl9sb2NrX2lycXNhdmUoSURBX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsgCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIlxuQ3VycmVudCBRdWV1ZXM6XG4iKTsKLQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3B1dHMobSwgIlxuQ3VycmVudCBRdWV1ZXM6XG4iKTsKIAogCWMgPSBoLT5yZXFROwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJyZXFRID0gJXAiLCBjKTsgcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wcmludGYobSwgInJlcVEgPSAlcCIsIGMpOwogCWlmIChjKSBjPWMtPm5leHQ7CiAJd2hpbGUoYyAmJiBjICE9IGgtPnJlcVEpIHsKLQkJc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIi0+JXAiLCBjKTsKLQkJcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCQlzZXFfcHJpbnRmKG0sICItPiVwIiwgYyk7CiAJCWM9Yy0+bmV4dDsKIAl9CiAKIAljID0gaC0+Y21wUTsKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiXG5jbXBRID0gJXAiLCBjKTsgcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wcmludGYobSwgIlxuY21wUSA9ICVwIiwgYyk7CiAJaWYgKGMpIGM9Yy0+bmV4dDsKIAl3aGlsZShjICYmIGMgIT0gaC0+Y21wUSkgewotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiLT4lcCIsIGMpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJCXNlcV9wcmludGYobSwgIi0+JXAiLCBjKTsKIAkJYz1jLT5uZXh0OwogCX0KIAotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcbiIpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShJREFfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOyAKICNlbmRpZgotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJucl9hbGxvY3MgPSAlZFxubnJfZnJlZXMgPSAlZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJucl9hbGxvY3MgPSAlZFxubnJfZnJlZXMgPSAlZFxuIiwKIAkJCWgtPm5yX2FsbG9jcywgaC0+bnJfZnJlZXMpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKLQotCSplb2YgPSAxOwotCSpzdGFydCA9IGJ1ZmZlcitvZmZzZXQ7Ci0JbGVuIC09IG9mZnNldDsKLQlpZiAobGVuPmxlbmd0aCkKLQkJbGVuID0gbGVuZ3RoOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaWRhX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRhX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkYV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlkYV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGVpc2EsIGludCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGVkZGE5ZWEuLmJkMTEyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC05NDksNyArOTQ5LDcgQEAKIAlsby0+bG9fc3RhdGUgPSBMb191bmJvdW5kOwogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JaWYgKG1heF9wYXJ0ID4gMCkKKwlpZiAobWF4X3BhcnQgPiAwICYmIGJkZXYpCiAJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDQzZjE5MzguLjUxMDQyZjBiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0zLDcgKzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19ibGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCkBAIC0xODMsMzQgKzE4Miw2IEBACiAJCXZibGstPnZxLT52cV9vcHMtPmtpY2sodmJsay0+dnEpOwogfQogCi0vKiByZXR1cm4gQVRBIGlkZW50aWZ5IGRhdGEKLSAqLwotc3RhdGljIGludCB2aXJ0YmxrX2lkZW50aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB2b2lkICphcmdwKQotewotCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgKm9wYXF1ZTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCW9wYXF1ZSA9IGttYWxsb2MoVklSVElPX0JMS19JRF9CWVRFUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvcGFxdWUpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gdmlydGlvX2NvbmZpZ19idWYodmJsay0+dmRldiwgVklSVElPX0JMS19GX0lERU5USUZZLAotCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGlkZW50aWZ5KSwgb3BhcXVlLAotCQlWSVJUSU9fQkxLX0lEX0JZVEVTKTsKLQotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBvcGFxdWUsIFZJUlRJT19CTEtfSURfQllURVMpKQotCQllcnIgPSAtRUZBVUxUOwotCi1vdXRfa2ZyZWU6Ci0Ja2ZyZWUob3BhcXVlKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCB2aXJ0YmxrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOwpAQCAtMjIyLDEwICsxOTMsNiBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7Ci0KLQlpZiAoY21kID09IEhESU9fR0VUX0lERU5USVRZKQotCQlyZXR1cm4gdmlydGJsa19pZGVudGlmeShkaXNrLCBhcmdwKTsKIAogCS8qCiAJICogT25seSBhbGxvdyB0aGUgZ2VuZXJpYyBTQ1NJIGlvY3RscyBpZiB0aGUgaG9zdCBjYW4gc3VwcG9ydCBpdC4KQEAgLTIzMyw3ICsyMDAsOCBAQAogCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZibGstPnZkZXYsIFZJUlRJT19CTEtfRl9TQ1NJKSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKLQlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgYXJncCk7CisJcmV0dXJuIHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsCisJCQkgICAgICAodm9pZCBfX3VzZXIgKilkYXRhKTsKIH0KIAogLyogV2UgcHJvdmlkZSBnZXRnZW8gb25seSB0byBwbGVhc2Ugc29tZSBvbGQgYm9vdGxvYWRlci9wYXJ0aXRpb25pbmcgdG9vbHMgKi8KQEAgLTMzMiw3ICszMDAsNiBAQAogCX0KIAogCXZibGstPmRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSB2YmxrOwotCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfVklSVCwgdmJsay0+ZGlzay0+cXVldWUpOwogCiAJaWYgKGluZGV4IDwgMjYpIHsKIAkJc3ByaW50Zih2YmxrLT5kaXNrLT5kaXNrX25hbWUsICJ2ZCVjIiwgJ2EnICsgaW5kZXggJSAyNik7CkBAIC00NDUsNyArNDEyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fQkxLX0ZfQkFSUklFUiwgVklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwKIAlWSVJUSU9fQkxLX0ZfR0VPTUVUUlksIFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLAotCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksIFZJUlRJT19CTEtfRl9GTFVTSAorCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfRkxVU0gKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCA3YmE5MWFhMy4uNDRiYzhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC01OTEsNiArNTkxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53YWtlcik7CiAKIAljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CkBAIC01OTksMTEgKzYwMCwxMyBAQAogCWJ0dXNiX3N0b3BfdHJhZmZpYyhkYXRhKTsKIAllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAwOworCQlnb3RvIGZhaWxlZDsKIAogCWRhdGEtPmludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKIAorZmFpbGVkOgorCXVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmRlZmVycmVkKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCAwOGE2ZjUwLi42YWFkOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIGNvbmZpZyBTWAogCXRyaXN0YXRlICJTcGVjaWFsaXggU1ggKGFuZCBTSSkgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNYIGFuZCBTSSBtdWx0aXBvcnQgc2VyaWFsIGNhcmRzLgogCSAgUGxlYXNlIHJlYWQgdGhlIGZpbGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zZXJpYWwvc3gudHh0PiBmb3IgZGV0YWlscy4KQEAgLTMzNCw3ICszMzQsNyBAQAogCiBjb25maWcgUklPCiAJdHJpc3RhdGUgIlNwZWNpYWxpeCBSSU8gc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU3BlY2lhbGl4IFJJTywgYSBzbWFydCBzZXJpYWwgY2FyZCB3aGljaAogCSAgZHJpdmVzIGFuIG91dGJvYXJkIGJveCB0aGF0IGNhbiBzdXBwb3J0IHVwIHRvIDEyOCBwb3J0cy4gIFByb2R1Y3QKQEAgLTM5NSw3ICszOTUsNyBAQAogCiBjb25maWcgQTIyMzIKIAl0cmlzdGF0ZSAiQ29tbW9kb3JlIEEyMjMyIHNlcmlhbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFpPUlJPICYmIEJST0tFTl9PTl9TTVAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBzdXBwb3J0cyB0aGUgMjIzMiA3LXBvcnQgc2VyaWFsIGNhcmQgc2hpcHBlZCB3aXRoIHRoZQogCSAgQW1pZ2EgMjAwMCBhbmQgb3RoZXIgWm9ycm8tYnVzIG1hY2hpbmVzLCBkYXRpbmcgZnJvbSAxOTg5LiAgQXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmggYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCmluZGV4IGQ2ZjM2YzAuLjg3MGYxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaApAQCAtMTMxLDcgKzEzMSw3IEBACiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhIHsKIAljb25zdCBzdHJ1Y3QgYWdwX3ZlcnNpb24gKnZlcnNpb247CiAJY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyICpkcml2ZXI7Ci0Jc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAJdm9pZCAqcHJldmlvdXNfc2l6ZTsKIAl2b2lkICpjdXJyZW50X3NpemU7CiAJdm9pZCAqZGV2X3ByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCmluZGV4IDVlYTRkYTguLmRkODRhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYwpAQCAtNDAsNyArNDAsNyBAQAogCXsgMCwgMCwgMCB9LCAvKiBmaWxsZWQgaW4gYnkgYWxwaGFfY29yZV9hZ3Bfc2V0dXAgKi8KIH07CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhbHBoYV9jb3JlX2FncF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFscGhhX2NvcmVfYWdwX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBhbHBoYV9jb3JlX2FncF92bV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDQwNjg0NjcuLjEwZTFmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMTE2MSwxMiArMTE2MSw2IEBACiAKIAlpbnRlbF9pOXh4X3NldHVwX2ZsdXNoKCk7CiAKLSNpZmRlZiBVU0VfUENJX0RNQV9BUEkgCi0JaWYgKHBjaV9zZXRfZG1hX21hc2soaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIERNQV9CSVRfTUFTSygzNikpKQotCQlkZXZfZXJyKCZpbnRlbF9wcml2YXRlLnBjaWRldi0+ZGV2LAotCQkJInNldCBnZnggZGV2aWNlIGRtYSBtYXNrIDM2Yml0IGZhaWxlZCFcbiIpOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1Niw2ICsyNDUwLDExIEBACiAJCQkJJmJyaWRnZS0+bW9kZSk7CiAJfQogCisJaWYgKGJyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeSA9PSBpbnRlbF9pOTY1X21hc2tfbWVtb3J5KQorCQlpZiAocGNpX3NldF9kbWFfbWFzayhpbnRlbF9wcml2YXRlLnBjaWRldiwgRE1BX0JJVF9NQVNLKDM2KSkpCisJCQlkZXZfZXJyKCZpbnRlbF9wcml2YXRlLnBjaWRldi0+ZGV2LAorCQkJCSJzZXQgZ2Z4IGRldmljZSBkbWEgbWFzayAzNmJpdCBmYWlsZWQhXG4iKTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBicmlkZ2UpOwogCXJldHVybiBhZ3BfYWRkX2JyaWRnZShicmlkZ2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwppbmRleCA2MGFiNzUxLi4xYzEyOTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJLmNvbmZpZ3VyZQkJPSBwYXJpc2NfYWdwX2NvbmZpZ3VyZSwKIAkuZmV0Y2hfc2l6ZQkJPSBwYXJpc2NfYWdwX2ZldGNoX3NpemUsCiAJLnRsYl9mbHVzaAkJPSBwYXJpc2NfYWdwX3RsYmZsdXNoLAotCS5tYXNrX21lbW9yeQkJPSBwYXJpc2NfYWdwX3BhZ2VfbWFza19tZW1vcnksCisJLm1hc2tfbWVtb3J5CQk9IHBhcmlzY19hZ3BfbWFza19tZW1vcnksCiAJLm1hc2tzCQkJPSBwYXJpc2NfYWdwX21hc2tzLAogCS5hZ3BfZW5hYmxlCQk9IHBhcmlzY19hZ3BfZW5hYmxlLAogCS5jYWNoZV9mbHVzaAkJPSBnbG9iYWxfY2FjaGVfZmx1c2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jIGIvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYwppbmRleCBhYWNhNDAyLi40ZjU2OGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCXJldHVybiBhcyA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXBtX2Jpb3NfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gYXBtX3JlYWQsCiAJLnBvbGwJCT0gYXBtX3BvbGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDczYTA3NjUuLmZlMmNiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYyBiL2RyaXZlcnMvY2hhci9iZmluLW90cC5jCmluZGV4IGUzZGQyNGIuLjgzNmQ0ZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAjIGRlZmluZSBiZmluX290cF9pb2N0bCBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZpbl9vdHBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmaW5fb3RwX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLnVubG9ja2VkX2lvY3RsID0gYmZpbl9vdHBfaW9jdGwsCiAJLnJlYWQgICAgICAgICAgID0gYmZpbl9vdHBfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggZGY1MDM4Yi4uNDI1NDQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTMzNTQsNyArMzM1NCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogI2lmZGVmIE1PRFVMRQotCQlpZiAoaXNwYXJhbSAmJiBpcnFbaV0pCisJCWlmIChpc3BhcmFtICYmIGkgPCBOUl9DQVJEUyAmJiBpcnFbaV0pCiAJCQljeV9pc2FfaXJxID0gaXJxW2ldOwogCQllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IDUyZTA2NTguLjA0NWM5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4JLyogY3ljbGVfa2VybmVsX2xvY2soKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYl9wLCBvdXRiX3AsIGluYiwgb3V0YiwgZXRjLiAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGZvciBnZXRfdXNlciwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggOWQ1ODllMy4uZGRlNTEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDllNGU1NjkuLmQ0MDBjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKaW5kZXggYWFjMDk4NS4uMzFlN2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBSVENfVkVSU0lPTgkiMS4wNyIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggMjVjZTE1Yi4uYTYzMmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaHZjX3BvbGwpOwogCiAvKioKLSAqIGh2Y19yZXNpemUoKSAtIFVwZGF0ZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbi4KKyAqIF9faHZjX3Jlc2l6ZSgpIC0gVXBkYXRlIHRlcm1pbmFsIHdpbmRvdyBzaXplIGluZm9ybWF0aW9uLgogICogQGhwOgkJSFZDIGNvbnNvbGUgcG9pbnRlcgogICogQHdzOgkJVGVybWluYWwgd2luZG93IHNpemUgc3RydWN0dXJlCiAgKgpAQCAtNjg3LDEyICs2ODcsMTIgQEAKICAqCiAgKiBMb2NraW5nOglMb2NraW5nIGZyZWU7IHRoZSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBob2xkaW5nIGhwLT5sb2NrCiAgKi8KLXZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKQordm9pZCBfX2h2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKIHsKIAlocC0+d3MgPSB3czsKIAlzY2hlZHVsZV93b3JrKCZocC0+dHR5X3Jlc2l6ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChodmNfcmVzaXplKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faHZjX3Jlc2l6ZSk7CiAKIC8qCiAgKiBUaGlzIGt0aHJlYWQgaXMgZWl0aGVyIHBvbGxpbmcgb3IgaW50ZXJydXB0IGRyaXZlbi4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCAzYzg1ZDc4Li4xMDk1MGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBIVkNfQ09OU09MRV9ICiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnNvbGUgYWRhcHRlcnMgdGhhdCBjYW4vd2lsbCBiZSBmb3VuZCBhcwpAQCAtODgsNyArODksMTYgQEAKIHZvaWQgaHZjX2tpY2sodm9pZCk7CiAKIC8qIFJlc2l6ZSBodmMgdHR5IHRlcm1pbmFsIHdpbmRvdyAqLwotZXh0ZXJuIHZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKK2V4dGVybiB2b2lkIF9faHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwLT5sb2NrLCBmbGFncyk7CisJX19odmNfcmVzaXplKGhwLCB3cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKK30KIAogLyogZGVmYXVsdCBub3RpZmllciBmb3IgaXJxIGJhc2VkIG5vdGlmaWNhdGlvbiAqLwogZXh0ZXJuIGludCBub3RpZmllcl9hZGRfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCAwZWNhYzdlLi5iOGE1ZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMjczLDcgKzI3Myw5IEBACiAJY2FzZSBNU0dfVFlQRV9XSU5TSVpFOgogCQlpZiAocmItPm1idWYtPmRhdGFsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3aW5zaXplKSkKIAkJCWJyZWFrOwotCQlodmNfcmVzaXplKHByaXYtPmh2YywgKigoc3RydWN0IHdpbnNpemUgKikgcmItPm1idWYtPmRhdGEpKTsKKwkJLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBodmMgaXMgbG9ja2VkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSB3aGVuIGNhbGxlZCBmcm9tIGh2Y19pdWN2X2dldF9jaGFycygpICovCisJCV9faHZjX3Jlc2l6ZShwcml2LT5odmMsICooKHN0cnVjdCB3aW5zaXplICopIHJiLT5tYnVmLT5kYXRhKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfVFlQRV9FUlJPUjoJLyogaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGViYTk5OWYuLmE2ZWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtNTUsNyArNTUsNyBAQAogCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobih4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLmV2dGNobik7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBfX3dyaXRlX2NvbnNvbGUoY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB4ZW5jb25zX2ludGVyZmFjZSgpOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZDsKQEAgLTc2LDYgKzc2LDI5IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKK3N0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSBsZW47CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgd2hvbGUgYnVmZmVyIGlzIGVtaXR0ZWQsIHBvbGxpbmcgaWYKKwkgKiBuZWNlc3NhcnkuICBXZSBkb24ndCBldmVyIHdhbnQgdG8gcmVseSBvbiB0aGUgaHZjIGRhZW1vbgorCSAqIGJlY2F1c2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uc29sZSBvdXRwdXQgaXMgd2hlbiB0aGUKKwkgKiBrZXJuZWwgaXMgY3JpcHBsZWQuCisJICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgc2VudCA9IF9fd3JpdGVfY29uc29sZShkYXRhLCBsZW4pOworCQkKKwkJZGF0YSArPSBzZW50OworCQlsZW4gLT0gc2VudDsKKworCQlpZiAodW5saWtlbHkobGVuKSkKKwkJCUhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF95aWVsZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZWFkX2NvbnNvbGUodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggMDBkZDNkZS4uMDZhYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlybmdfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXJuZ19iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDk2Mjk2OGYuLjkxNTE1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ2aXJ0aW9faHdybmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA0MWZjMTFkLi42NTU0NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwbWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggMDkwNTA3OS4uZWM1ZTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IGFiMmYzMzQuLjQwMjgzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTE5LDYgKzE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNmM4YjY1ZC4uYTA3NGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHsKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNwZWMuYyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCmluZGV4IDMwZjA5NWEuLjE5OTcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tc3BlYy5jCisrKyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1zcGVjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXNwZWNfdm1fb3BzID0gewogCS5vcGVuID0gbXNwZWNfb3BlbiwKIAkuY2xvc2UgPSBtc3BlY19jbG9zZSwKIAkuZmF1bHQgPSBtc3BlY19mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBlYzU4ZDhjLi5kMzQwMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHR5LmMgYi9kcml2ZXJzL2NoYXIvcHR5LmMKaW5kZXggNTM3NjFjZS4uNjJmMjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI2MSw2ICsyNjIsOSBAQAogCXJldHVybiAwOwogfQogCisvKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLworI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUworCiBzdGF0aWMgaW50IHB0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5OwpAQCAtMzEwLDI0ICszMTQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wcyA9IHsKLQkuaW5zdGFsbCA9IHB0eV9pbnN0YWxsLAotCS5vcGVuID0gcHR5X29wZW4sCi0JLmNsb3NlID0gcHR5X2Nsb3NlLAotCS53cml0ZSA9IHB0eV93cml0ZSwKLQkud3JpdGVfcm9vbSA9IHB0eV93cml0ZV9yb29tLAotCS5mbHVzaF9idWZmZXIgPSBwdHlfZmx1c2hfYnVmZmVyLAotCS5jaGFyc19pbl9idWZmZXIgPSBwdHlfY2hhcnNfaW5fYnVmZmVyLAotCS51bnRocm90dGxlID0gcHR5X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gcHR5X3NldF90ZXJtaW9zLAotCS5yZXNpemUgPSBwdHlfcmVzaXplCi19OwotCi0vKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLwotI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUwotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKLQogc3RhdGljIGludCBwdHlfYnNkX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzQxLDcgKzMyNywxMiBAQAogc3RhdGljIGludCBsZWdhY3lfY291bnQgPSBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVDsKIG1vZHVsZV9wYXJhbShsZWdhY3lfY291bnQsIGludCwgMCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wc19ic2QgPSB7CisvKgorICogVGhlIG1hc3RlciBzaWRlIG9mIGEgcHR5IGNhbiBkbyBUSU9DU1BUTENLIGFuZCB0aHVzCisgKiBoYXMgcHR5X2JzZF9pb2N0bC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBtYXN0ZXJfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKIAkub3BlbiA9IHB0eV9vcGVuLAogCS5jbG9zZSA9IHB0eV9jbG9zZSwKIAkud3JpdGUgPSBwdHlfd3JpdGUsCkBAIC0zNTQsOCArMzQ1LDIzIEBACiAJLnJlc2l6ZSA9IHB0eV9yZXNpemUKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2xhdmVfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKKwkub3BlbiA9IHB0eV9vcGVuLAorCS5jbG9zZSA9IHB0eV9jbG9zZSwKKwkud3JpdGUgPSBwdHlfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBwdHlfd3JpdGVfcm9vbSwKKwkuZmx1c2hfYnVmZmVyID0gcHR5X2ZsdXNoX2J1ZmZlciwKKwkuY2hhcnNfaW5fYnVmZmVyID0gcHR5X2NoYXJzX2luX2J1ZmZlciwKKwkudW50aHJvdHRsZSA9IHB0eV91bnRocm90dGxlLAorCS5zZXRfdGVybWlvcyA9IHB0eV9zZXRfdGVybWlvcywKKwkucmVzaXplID0gcHR5X3Jlc2l6ZQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGxlZ2FjeV9wdHlfaW5pdCh2b2lkKQogeworCXN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKKwogCWlmIChsZWdhY3lfY291bnQgPD0gMCkKIAkJcmV0dXJuOwogCkBAIC0zODMsNyArMzg5LDcgQEAKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSAzODQwMDsKIAlwdHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJcHR5X2RyaXZlci0+b3RoZXIgPSBwdHlfc2xhdmVfZHJpdmVyOwotCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfZHJpdmVyLCAmcHR5X29wcyk7CisJdHR5X3NldF9vcGVyYXRpb25zKHB0eV9kcml2ZXIsICZtYXN0ZXJfcHR5X29wc19ic2QpOwogCiAJcHR5X3NsYXZlX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHlfc2xhdmVfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJwdHlfc2xhdmUiOwpAQCAtMzk5LDcgKzQwNSw3IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfAogCQkJCQlUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXB0eV9zbGF2ZV9kcml2ZXItPm90aGVyID0gcHR5X2RyaXZlcjsKLQl0dHlfc2V0X29wZXJhdGlvbnMocHR5X3NsYXZlX2RyaXZlciwgJnB0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfc2xhdmVfZHJpdmVyLCAmc2xhdmVfcHR5X29wc19ic2QpOwogCiAJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIocHR5X2RyaXZlcikpCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciBwdHkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCAwMWYyNjU0Li5mMTIxMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTMyLDYgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NDMzOTU1Li43ODA1MDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMzEsNiArMzEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwppbmRleCAyZmI0OWU4Li40N2ZhYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgX19FWFBMSUNJVF9ERUZfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGUwZDBmOGIuLmJjNGFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jIGIvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCmluZGV4IDMzYTJiNTMuLjk2MTA4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA1OTQyYTlkNi4uNDUyMzcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCisrKyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwpAQCAtMjIwLDggKzIyMCw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICgobG9uZylpbmZvIDwgKGxvbmcpKCZjeV9wb3J0WzBdKQotCSAgICB8fCAobG9uZykoJmN5X3BvcnRbTlJfUE9SVFNdKSA8IChsb25nKWluZm8pIHsKKwlpZiAoaW5mbyA8ICZjeV9wb3J0WzBdIHx8IGluZm8gPj0gJmN5X3BvcnRbTlJfUE9SVFNdKSB7CiAJCXByaW50aygiV2FybmluZzogY3ljbGFkZXNfcG9ydCBvdXQgb2YgcmFuZ2UgZm9yICglcykgaW4gJXNcbiIsCiAJCQkJbmFtZSwgcm91dGluZSk7CiAJCXJldHVybiAxOwpAQCAtNTIwLDE1ICs1MTksMTMgQEAKIAkJcGFuaWMoIlR4SW50IG9uIGRlYnVnIHBvcnQhISEiKTsKIAl9CiAjZW5kaWYKLQotCWluZm8gPSAmY3lfcG9ydFtjaGFubmVsXTsKLQogCS8qIHZhbGlkYXRlIHRoZSBwb3J0IG51bWJlciAoYXMgY29uZmlndXJlZCBhbmQgb3BlbikgKi8KIAlpZiAoKGNoYW5uZWwgPCAwKSB8fCAoTlJfUE9SVFMgPD0gY2hhbm5lbCkpIHsKIAkJYmFzZV9hZGRyW0N5SUVSXSAmPSB+KEN5VHhNcHR5IHwgQ3lUeFJkeSk7CiAJCWJhc2VfYWRkcltDeVRFT0lSXSA9IEN5Tk9UUkFOUzsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KKwlpbmZvID0gJmN5X3BvcnRbY2hhbm5lbF07CiAJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwogCWlmIChpbmZvLT50dHkgPT0gMCkgewogCQliYXNlX2FkZHJbQ3lJRVJdICY9IH4oQ3lUeE1wdHkgfCBDeVR4UmR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBmZDNkY2VkLi44YzI2MmFhZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggNTNlNTA0Zi4uZGI2ZGNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTI3LDYgKzI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCA4ZjIyODRiLi44MGVhNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBldmVyeXRoaW5nLi4uICovCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDQ1ZDU4MDAuLjQ3YzJkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNjk2LDggKzY5Niw3IEBACiAKIAljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CiAJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKLQlCVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgUkVBRF9QQ1JfUkVTVUxUX1NJWkUsCiAJCQkgICJhdHRlbXB0aW5nIHRvIHJlYWQgYSBwY3IgdmFsdWUiKTsKIAogCWlmIChyYyA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKaW5kZXggMzEwODk5MS4uNjZmYTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCkBAIC00MDIsMjggKzQwMiwyNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGJ1Zi53b3JrLndvcmspOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7Ci0Jc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOwotCWNoYXIgKmNoYXJfYnVmOwotCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOwogCiAJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLwogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCS8qIFNvIHdlIGtub3cgYSBmbHVzaCBpcyBydW5uaW5nICovCi0Jc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKLQloZWFkID0gdHR5LT5idWYuaGVhZDsKLQlpZiAoaGVhZCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmhlYWQgPSBOVUxMOwotCQlmb3IgKDs7KSB7Ci0JCQlpbnQgY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOworCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CisJCQlpbnQgY291bnQ7CisJCQljaGFyICpjaGFyX2J1ZjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOworCisJCQljb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJdGJ1ZiA9IGhlYWQ7Ci0JCQkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7CisJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBMZGlzYyBvciB1c2VyIGlzIHRyeWluZyB0byBmbHVzaCB0aGUgYnVmZmVycwpAQCAtNDQ1LDkgKzQ0Myw5IEBACiAJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KLQkJLyogUmVzdG9yZSB0aGUgcXVldWUgaGVhZCAqLwotCQl0dHktPmJ1Zi5oZWFkID0gaGVhZDsKKwkJY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCX0KKwogCS8qIFdlIG1heSBoYXZlIGEgZGVmZXJyZWQgcmVxdWVzdCB0byBmbHVzaCB0aGUgaW5wdXQgYnVmZmVyLAogCSAgIGlmIHNvIHB1bGwgdGhlIGNoYWluIHVuZGVyIHRoZSBsb2NrIGFuZCBlbXB0eSB0aGUgcXVldWUgKi8KIAlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKSB7CkBAIC00NTUsNyArNDUzLDYgQEAKIAkJY2xlYXJfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKTsKIAkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOwogCX0KLQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOwpAQCAtNDcxLDcgKzQ2OCw3IEBACiAgKi8KIHZvaWQgdHR5X2ZsdXNoX3RvX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggZWExOGExMi4uNTk0OTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKICAqCW9mIHR0eXMgdGhhdCB0aGUgZHJpdmVyIGtlZXBzLgogICoKICAqCVRoaXMgbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlIHNvIHRoYXQgdGhlIGRyaXZlciBwcml2YXRlCi0gKglzaHV0ZG93biBvcHMgY2FuIHNsZWVwIChuZWVkZWQgZm9yIFVTQiBhdCBsZWFzdCkKKyAqCWNsZWFudXAgb3BzIGNhbiBzbGVlcCAobmVlZGVkIGZvciBVU0IgYXQgbGVhc3QpCiAgKi8KIHN0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC0xMzk3LDEwICsxMzk3LDkgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0dHlfc3RydWN0LCBoYW5ndXBfd29yayk7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCi0JaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKLQkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7Ci0JZWxzZQotCQl0dHlfc2h1dGRvd24odHR5KTsKKwlpZiAodHR5LT5vcHMtPmNsZWFudXApCisJCXR0eS0+b3BzLT5jbGVhbnVwKHR0eSk7CisKIAl0dHktPm1hZ2ljID0gMDsKIAl0dHlfZHJpdmVyX2tyZWZfcHV0KGRyaXZlcik7CiAJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKQEAgLTE0MTUsNiArMTQxNCwxMiBAQAogc3RhdGljIHZvaWQgcXVldWVfcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0eV9zdHJ1Y3QsIGtyZWYpOworCisJaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKKwkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7CisJZWxzZQorCQl0dHlfc2h1dGRvd24odHR5KTsKKwogCS8qIFRoZSBoYW5ndXAgcXVldWUgaXMgbm93IGZyZWUgc28gd2UgY2FuIHJldXNlIGl0IHJhdGhlciB0aGFuCiAJICAgd2FzdGUgYSBjaHVuayBvZiBtZW1vcnkgZm9yIGVhY2ggcG9ydCAqLwogCUlOSVRfV09SSygmdHR5LT5oYW5ndXBfd29yaywgcmVsZWFzZV9vbmVfdHR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCBhYWZkYmFlLi5mZWI1NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC01MTgsNyArNTE4LDcgQEAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX2hhbHQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGVhcl9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7Ci0JcmV0dXJuIGNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOworCXJldHVybiBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnR0eS0+YnVmLndvcmspOwogfQogCiAvKioKQEAgLTc1NiwxMiArNzU2LDkgQEAKIAkgKiBOX1RUWS4KIAkgKi8KIAlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgb2xkIGxkaXNjIGlzIHF1aWVzY2VudCAqLwotCQl0dHlfbGRpc2NfaGFsdCh0dHkpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJCS8qIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UgKi8KIAkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJCXR0eV9sZGlzY19oYWx0KHR0eSk7CiAJCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCiAJCQkvKiBTd2l0Y2ggYmFjayB0byBOX1RUWSAqLwogCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9wb3J0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwppbmRleCBhNGJiYjI4Li4yZTg1NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMjIxLDYgKzIyMSw5IEBACiAJICAgdGhlIHBvcnQgaGFzIGp1c3QgaHVuZyB1cCBvciBpcyBpbiBhbm90aGVyIGVycm9yIHN0YXRlICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJCSh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKKwkJLyogSW5kaWNhdGUgd2UgYXJlIG9wZW4gKi8KKwkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJdHR5X3BvcnRfcmFpc2VfZHRyX3J0cyhwb3J0KTsKIAkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCAwZDMyOGI1Li5hMDM1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDI5YzY1MWEuLmVkODZkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC05ODEsOCArOTgxLDEwIEBACiAJCQlnb3RvIGVwZXJtOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnNhLCAoc3RydWN0IHZ0X3NldGFjdGl2YXRlIF9fdXNlciAqKWFyZywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlzaXplb2Yoc3RydWN0IHZ0X3NldGFjdGl2YXRlKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQogCQlpZiAodnNhLmNvbnNvbGUgPT0gMCB8fCB2c2EuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogCiAJY2FzZSBQSU9fVU5JTUFQOgogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0ID0gZG9fdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKKwkJcmV0ID0gY29tcGF0X3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CiAJCWJyZWFrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwppbmRleCBmNDBhYjY5Li40ODQ2ZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCkBAIC01NTksNyArNTU5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBod2ljYXBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh3aWNhcF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS53cml0ZSA9IGh3aWNhcF93cml0ZSwKIAkucmVhZCA9IGh3aWNhcF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMzkzOGM3OC4uZmY1N2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNwdWZyZXFfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltDUFVGUkVRX05BTUVfTEVOXSwgY3B1ZnJlcV9jcHVfZ292ZXJub3IpOwogI2VuZGlmCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdWZyZXFfZHJpdmVyX2xvY2spOwogCkBAIC03NzQsMTAgKzc3NCwxMiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBqOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JaWYgKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpIHsKLQkJcG9saWN5LT5nb3Zlcm5vciA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSk7CisJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdjsKKworCWdvdiA9IF9fZmluZF9nb3Zlcm5vcihwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpKTsKKwlpZiAoZ292KSB7CisJCXBvbGljeS0+Z292ZXJub3IgPSBnb3Y7CiAJCWRwcmludGsoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CkBAIC05NDksMTAgKzk1MSwxMyBAQAogc3RhdGljIGludCBjcHVmcmVxX2FkZF9kZXYoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgajsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgc2libGluZzsKKyNlbmRpZgogCiAJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkpCiAJCXJldHVybiAwOwpAQCAtOTk5LDcgKzEwMDQsMTkgQEAKIAlJTklUX1dPUksoJnBvbGljeS0+dXBkYXRlLCBoYW5kbGVfdXBkYXRlKTsKIAogCS8qIFNldCBnb3Zlcm5vciBiZWZvcmUgLT5pbml0LCBzbyB0aGF0IGRyaXZlciBjb3VsZCBjaGVjayBpdCAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJZm9yX2VhY2hfb25saW5lX2NwdShzaWJsaW5nKSB7CisJCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3AgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIHNpYmxpbmcpOworCQlpZiAoY3AgJiYgY3AtPmdvdmVybm9yICYmCisJCSAgICAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwLT5yZWxhdGVkX2NwdXMpKSkgeworCQkJcG9saWN5LT5nb3Zlcm5vciA9IGNwLT5nb3Zlcm5vcjsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFmb3VuZCkKKwkJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAkvKiBjYWxsIGRyaXZlci4gRnJvbSB0aGVuIG9uIHRoZSBjcHVmcmVxIG11c3QgYmUgYWJsZQogCSAqIHRvIGFjY2VwdCBhbGwgY2FsbHMgdG8gLT52ZXJpZnkgYW5kIC0+c2V0cG9saWN5IGZvciB0aGlzIENQVQogCSAqLwpAQCAtMTExMSw3ICsxMTI4LDggQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpID0gZGF0YS0+Z292ZXJub3I7CisJc3RybmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBkYXRhLT5nb3Zlcm5vci0+bmFtZSwKKwkJCUNQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAKIAkvKiBpZiB3ZSBoYXZlIG90aGVyIENQVXMgc3RpbGwgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSwKQEAgLTExMzUsNyArMTE1Myw4IEBACiAJCQkJY29udGludWU7CiAJCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rIGZvciBjcHUgJXVcbiIsIGopOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaikgPSBkYXRhLT5nb3Zlcm5vcjsKKwkJCXN0cm5jcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaiksCisJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAJCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAiY3B1ZnJlcSIpOwpAQCAtMTYwNiw5ICsxNjI1LDIyIEBACiAKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcikKIHsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgY3B1OworI2VuZGlmCisKIAlpZiAoIWdvdmVybm9yKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBnb3Zlcm5vci0+bmFtZSkpCisJCQlzdHJjcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSwgIlwwIik7CisJfQorI2VuZGlmCisKIAltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAlsaXN0X2RlbCgmZ292ZXJub3ItPmdvdmVybm9yX2xpc3QpOwogCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IGJjMzNkZGMuLmM3YjA4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC0xMTYsOSArMTE2LDkgQEAKIAogCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKIAlpZiAod2FsbCkKLQkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCQkqd2FsbCA9IChjcHV0aW1lNjRfdClqaWZmaWVzX3RvX3VzZWNzKGN1cl93YWxsX3RpbWUpOwogCi0JcmV0dXJuIGlkbGVfdGltZTsKKwlyZXR1cm4gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoaWRsZV90aW1lKTs7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCAwNzE2OTlkLi40YjM0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogCiAJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOwogCWlmICh3YWxsKQotCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisJCSp3YWxsID0gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoY3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gaWRsZV90aW1lOworCXJldHVybiAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhpZGxlX3RpbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCAwMjEyN2U1Li41NWM5YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDcsNiArNDcsMTggQEAKIAkgIFNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlIGRlYnVnZ2luZyBtZXNzYWdlCiAJICBwcmludGVkIHdpbGwgYmUgYWRkZWQgdG8gZGVidWdnaW5nIG1lc3NhZ2UuCiAKKyBjb25maWcgRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIkRlY29kZSBNQ0VzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gKG9ubHkgb24gQU1EIGZvciBub3cpIgorCWRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgJiYgWDg2X01DRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkZWNvZGUgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zCisJICBvY2N1cmluZyBvbiB5b3VyIG1hY2hpbmUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKworCSAgWW91IHNob3VsZCBkZWZpbml0ZWx5IHNheSBZIGhlcmUgaW4gY2FzZSB5b3Ugd2FudCB0byBkZWNvZGUgTUNFcworCSAgd2hpY2ggb2NjdXIgcmVhbGx5IGVhcmx5IHVwb24gYm9vdCwgYmVmb3JlIHRoZSBtb2R1bGUgaW5mcmFzdHJ1Y3R1cmUKKwkgIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCiBjb25maWcgRURBQ19NTV9FREFDCiAJdHJpc3RhdGUgIk1haW4gTWVtb3J5IEVEQUMgKEVycm9yIERldGVjdGlvbiBBbmQgQ29ycmVjdGlvbikgcmVwb3J0aW5nIgogCWhlbHAKQEAgLTU5LDcgKzcxLDcgQEAKIAogY29uZmlnIEVEQUNfQU1ENjQKIAl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCwgRjExaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBLOF9OQiAmJiBYODZfNjQgJiYgUENJICYmIENQVV9TVVBfQU1ECisJZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgSzhfTkIgJiYgWDg2XzY0ICYmIFBDSSAmJiBFREFDX0RFQ09ERV9NQ0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIEFNRCA2NAogCSAgRmFtaWxpZXMgb2YgTWVtb3J5IENvbnRyb2xsZXJzIChLOCwgRjEwaCBhbmQgRjExaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCA3YTQ3M2JiLi5iYzVkYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC02LDcgKzYsNiBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICMKIAotCiBvYmotJChDT05GSUdfRURBQykJCQk6PSBlZGFjX3N0dWIubwogb2JqLSQoQ09ORklHX0VEQUNfTU1fRURBQykJCSs9IGVkYWNfY29yZS5vCiAKQEAgLTE3LDkgKzE2LDcgQEAKIGVkYWNfY29yZS1vYmpzCSs9IGVkYWNfcGNpLm8gZWRhY19wY2lfc3lzZnMubwogZW5kaWYKIAotaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECi1lZGFjX2NvcmUtb2JqcyAgKz0gZWRhY19tY2VfYW1kLm8KLWVuZGlmCitvYmotJChDT05GSUdfRURBQ19ERUNPREVfTUNFKQkJKz0gZWRhY19tY2VfYW1kLm8KIAogb2JqLSQoQ09ORklHX0VEQUNfQU1ENzZYKQkJKz0gYW1kNzZ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQ1BDOTI1KQkJKz0gY3BjOTI1X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGU1NTFlNi4uYTM4ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNSw4ICsxNSw4IEBACiAKIC8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCiBzdHJ1Y3QgYW1kNjRfcHZ0Owotc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaV9sb29rdXBbTUFYX05VTU5PREVTXTsKLXN0YXRpYyBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnRfbG9va3VwW01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IGFtZDY0X3B2dCAqcHZ0X2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CiAKIC8qCiAgKiBTZWUgRjJ4ODAgZm9yIEs4IGFuZCBGMnhbMSwwXTgwIGZvciBGYW0xMCBhbmQgbGF0ZXIuIFRoZSB0YWJsZSBiZWxvdyBpcyBvbmx5CkBAIC0xODksNyArMTg5LDEwIEBACiAvKiBNYXAgZnJvbSBhIENTUk9XIGVudHJ5IHRvIHRoZSBtYXNrIGVudHJ5IHRoYXQgb3BlcmF0ZXMgb24gaXQgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGFtZDY0X21hcF90b19kY3NfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBjc3JvdykKIHsKLQlyZXR1cm4gY3Nyb3cgPj4gKHB2dC0+bnVtX2Rjc20gPj4gMyk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiAmJiBwdnQtPmV4dF9tb2RlbCA8IE9QVEVST05fQ1BVX1JFVl9GKQorCQlyZXR1cm4gY3Nyb3c7CisJZWxzZQorCQlyZXR1cm4gY3Nyb3cgPj4gMTsKIH0KIAogLyogcmV0dXJuIHRoZSAnYmFzZScgYWRkcmVzcyB0aGUgaSd0aCBDUyBlbnRyeSBvZiB0aGUgJ2RjdCcgRFJBTSBjb250cm9sbGVyICovCkBAIC0yNzksMjkgKzI4MiwyNiBAQAogCWludGx2X2VuID0gcHZ0LT5kcmFtX0ludGx2RW5bMF07CiAKIAlpZiAoaW50bHZfZW4gPT0gMCkgewotCQlmb3IgKG5vZGVfaWQgPSAwOyA7ICkgeworCQlmb3IgKG5vZGVfaWQgPSAwOyBub2RlX2lkIDwgRFJBTV9SRUdfQ09VTlQ7IG5vZGVfaWQrKykgewogCQkJaWYgKGFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICgrK25vZGVfaWQgPj0gRFJBTV9SRUdfQ09VTlQpCi0JCQkJZ290byBlcnJfbm9fbWF0Y2g7CisJCQkJZ290byBmb3VuZDsKIAkJfQotCQlnb3RvIGZvdW5kOworCQlnb3RvIGVycl9ub19tYXRjaDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKGludGx2X2VuICE9ICgweDAxIDw8IDgpKSAmJgotCQkgICAgIChpbnRsdl9lbiAhPSAoMHgwMyA8PCA4KSkgJiYKLQkJICAgICAoaW50bHZfZW4gIT0gKDB4MDcgPDwgOCkpKSkgeworCWlmICh1bmxpa2VseSgoaW50bHZfZW4gIT0gMHgwMSkgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwMykgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwNykpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJqdW5rIHZhbHVlIG9mIDB4JXggZXh0cmFjdGVkIGZyb20gIgogCQkJICAgICAiSW50bHZFbiBmaWVsZCBvZiBEUkFNIEJhc2UgUmVnaXN0ZXIgZm9yIG5vZGUgMDogIgotCQkJICAgICAiVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBCSU9TIGJ1Zy5cbiIsIGludGx2X2VuKTsKKwkJCSAgICAgInRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIGEgQklPUyBidWcuXG4iLCBpbnRsdl9lbik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWJpdHMgPSAoKCh1MzIpIHN5c19hZGRyKSA+PiAxMikgJiBpbnRsdl9lbjsKIAogCWZvciAobm9kZV9pZCA9IDA7IDsgKSB7Ci0JCWlmICgocHZ0LT5kcmFtX2xpbWl0W25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCisJCWlmICgocHZ0LT5kcmFtX0ludGx2U2VsW25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCiAJCQlicmVhazsJLyogaW50bHZfc2VsIGZpZWxkIG1hdGNoZXMgKi8KIAogCQlpZiAoKytub2RlX2lkID49IERSQU1fUkVHX0NPVU5UKQpAQCAtMzExLDEwICszMTEsMTAgQEAKIAkvKiBzYW5pdHkgdGVzdCBmb3Igc3lzX2FkZHIgKi8KIAlpZiAodW5saWtlbHkoIWFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCQkgICIlcygpOiBzeXNfYWRkciAweCVseCBmYWxscyBvdXRzaWRlIGJhc2UvbGltaXQgIgotCQkJICAiYWRkcmVzcyByYW5nZSBmb3Igbm9kZSAlZCB3aXRoIG5vZGUgaW50ZXJsZWF2aW5nICIKLQkJCSAgImVuYWJsZWQuXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIsCi0JCQkgIG5vZGVfaWQpOworCQkJICAgICAiJXMoKTogc3lzX2FkZHIgMHglbGx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCisJCQkgICAgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgorCQkJICAgICAiZW5hYmxlZC5cbiIsCisJCQkgICAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJICogYmFzZS9tYXNrIHJlZ2lzdGVyIHBhaXIsIHRlc3QgdGhlIGNvbmRpdGlvbiBzaG93biBuZWFyIHRoZSBzdGFydCBvZgogCSAqIHNlY3Rpb24gMy41LjQgKHAuIDg0LCBCS0RHICMyNjA5NCwgSzgsIHJldkEtRSkuCiAJICovCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQkvKiBUaGlzIERSQU0gY2hpcCBzZWxlY3QgaXMgZGlzYWJsZWQgb24gdGhpcyBub2RlICovCiAJCWlmICgocHZ0LT5kY3NiMFtjc3Jvd10gJiBLOF9EQ1NCX0NTX0VOQUJMRSkgPT0gMCkKQEAgLTczNCw3ICs3MzQsNyBAQAogCXU2NCBiYXNlLCBtYXNrOwogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IENISVBTRUxFQ1RfQ09VTlQpKTsKKwlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IHB2dC0+Y3NfY291bnQpKTsKIAogCWJhc2UgPSBiYXNlX2Zyb21fZGN0X2Jhc2UocHZ0LCBjc3Jvdyk7CiAJbWFzayA9IG1hc2tfZnJvbV9kY3RfbWFzayhwdnQsIGNzcm93KTsKQEAgLTk2MiwzNSArOTYyLDI3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X3NldF9kY3RfYmFzZV9hbmRfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaWYgKHB2dC0+ZXh0X21vZGVsID49IE9QVEVST05fQ1BVX1JFVl9GKSB7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgT1BURVJPTl9DUFVfUkVWX0YpIHsKKwkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0VfRENTQl9CQVNFX0JJVFM7CisJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9FX0RDU01fTUFTS19CSVRTOworCQlwdnQtPmRjc19tYXNrX25vdHVzZWQJPSBSRVZfRV9EQ1NfTk9UVVNFRF9CSVRTOworCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRV9EQ1NfU0hJRlQ7CisJCXB2dC0+Y3NfY291bnQJCT0gODsKKwkJcHZ0LT5udW1fZGNzbQkJPSA4OworCX0gZWxzZSB7CiAJCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFM7CiAJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9GX0YxWGhfRENTTV9NQVNLX0JJVFM7CiAJCXB2dC0+ZGNzX21hc2tfbm90dXNlZAk9IFJFVl9GX0YxWGhfRENTX05PVFVTRURfQklUUzsKIAkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0ZfRjFYaF9EQ1NfU0hJRlQ7CiAKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgewotCQljYXNlIDB4ZjoKLQkJCXB2dC0+bnVtX2Rjc20gPSBSRVZfRl9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDEwOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMF9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDExOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMV9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFtZDY0X3ByaW50ayhLRVJOX0VSUiwgIlVuc3VwcG9ydGVkIGZhbWlseSFcbiIpOwotCQkJYnJlYWs7CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKSB7CisJCQlwdnQtPmNzX2NvdW50ID0gNDsKKwkJCXB2dC0+bnVtX2Rjc20gPSAyOworCQl9IGVsc2UgeworCQkJcHZ0LT5jc19jb3VudCA9IDg7CisJCQlwdnQtPm51bV9kY3NtID0gNDsKIAkJfQotCX0gZWxzZSB7Ci0JCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9FX0RDU0JfQkFTRV9CSVRTOwotCQlwdnQtPmRjc21fbWFzawkJPSBSRVZfRV9EQ1NNX01BU0tfQklUUzsKLQkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0VfRENTX05PVFVTRURfQklUUzsKLQkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0VfRENTX1NISUZUOwotCQlwdnQtPm51bV9kY3NtCQk9IFJFVl9FX0RDU01fQ09VTlQ7CiAJfQogfQogCkBAIC0xMDAzLDcgKzk5NSw3IEBACiAKIAlhbWQ2NF9zZXRfZGN0X2Jhc2VfYW5kX21hc2socHZ0KTsKIAotCWZvciAoY3MgPSAwOyBjcyA8IENISVBTRUxFQ1RfQ09VTlQ7IGNzKyspIHsKKwlmb3IgKGNzID0gMDsgY3MgPCBwdnQtPmNzX2NvdW50OyBjcysrKSB7CiAJCXJlZyA9IEs4X0RDU0IwICsgKGNzICogNCk7CiAJCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwdnQtPmRyYW1fZjJfY3RsLCByZWcsCiAJCQkJCQkmcHZ0LT5kY3NiMFtjc10pOwpAQCAtMTE5Myw3ICsxMTg1LDcgQEAKIAkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgbm9kZSB0aGF0IGRldGVjdGVkIHRoZSBlcnJvci4KIAkgKi8KIAlzcmNfbWNpID0gZmluZF9tY19ieV9zeXNfYWRkcihtY2ksIFN5c3RlbUFkZHJlc3MpOwotCWlmIChzcmNfbWNpKSB7CisJaWYgKCFzcmNfbWNpKSB7CiAJCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAogCQkJICAgICAiZmFpbGVkIHRvIG1hcCBlcnJvciBhZGRyZXNzIDB4JWx4IHRvIGEgbm9kZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpU3lzdGVtQWRkcmVzcyk7CkBAIC0xMzc2LDggKzEzNjgsOCBAQAogCiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKLQlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKCgodTY0KSBoaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCAzMikgfAotCQkJCSgodTY0KSBsb3dfYmFzZSAmIDB4RkZGRjAwMDApKSkgPDwgODsKKwlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCA4KTsKIAogCWxvd19vZmZzZXQgPSBLOF9EUkFNX0xJTUlUX0xPVyArIChkcmFtIDw8IDMpOwogCWhpZ2hfb2Zmc2V0ID0gRjEwX0RSQU1fTElNSVRfSElHSCArIChkcmFtIDw8IDMpOwpAQCAtMTM5OCw5ICsxMzkwLDkgQEAKIAkgKiBFeHRyYWN0IGFkZHJlc3MgdmFsdWVzIGFuZCBmb3JtIGEgTElNSVQgYWRkcmVzcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QKIAkgKiBtZW1vcnkgbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93IDI0IGJpdHMgbmVlZCB0byBiZSBhbGwgb25lcy4KIAkgKi8KLQlsb3dfbGltaXQgfD0gMHgwMDAwRkZGRjsKLQlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPQotCQkoKCgodTY0KSBoaWdoX2xpbWl0IDw8IDMyKSArICh1NjQpIGxvd19saW1pdCkgPDwgOCkgfCAoMHhGRik7CisJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KWhpZ2hfbGltaXQgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJCSgoKHU2NCkgbG93X2xpbWl0ICYgMHhGRkZGMDAwMCkgPDwgOCkgfAorCQkJCTB4MDBGRkZGRkY7CiB9CiAKIHN0YXRpYyB2b2lkIGYxMF9yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKQEAgLTE1NjYsNyArMTU1OCw3IEBACiAKIAlkZWJ1Z2YxKCJJbnB1dEFkZHI9MHgleCAgY2hhbm5lbHNlbGVjdD0lZFxuIiwgaW5fYWRkciwgY3MpOwogCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQljc19iYXNlID0gYW1kNjRfZ2V0X2RjdF9iYXNlKHB2dCwgY3MsIGNzcm93KTsKIAkJaWYgKCEoY3NfYmFzZSAmIEs4X0RDU0JfQ1NfRU5BQkxFKSkKQEAgLTIyNjIsNyArMjI1NCw3IEBACiB7CiAJdTMyIGVjICA9IEVSUk9SX0NPREUoaW5mby0+bmJzbCk7CiAJdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCWludCBlY2NfdHlwZSA9IGluZm8tPm5ic2ggJiAoMHgzIDw8IDEzKTsKKwlpbnQgZWNjX3R5cGUgPSAoaW5mby0+bmJzaCA+PiAxMykgJiAweDM7CiAKIAkvKiBCYWlsIGVhcmx5IG91dCBpZiB0aGlzIHdhcyBhbiAnb2JzZXJ2ZWQnIGVycm9yICovCiAJaWYgKFBQKGVjKSA9PSBLOF9OQlNMX1BQX09CUykKQEAgLTI0OTcsNyArMjQ4OSw3IEBACiAgKiBOT1RFOiBDUFUgUmV2aXNpb24gRGVwZW5kZW50IGNvZGUKICAqCiAgKiBJbnB1dDoKLSAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLkNISVBTRUxFQ1RfQ09VTlQtMSkKKyAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLnB2dC0+Y3NfY291bnQtMSkKICAqCWs4IHByaXZhdGUgcG9pbnRlciB0byAtLT4KICAqCQkJRFJBTSBCYW5rIEFkZHJlc3MgbWFwcGluZyByZWdpc3RlcgogICoJCQlub2RlX2lkCkBAIC0yNTc3LDcgKzI1NjksNyBAQAogCQkocHZ0LT5uYmNmZyAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIgogCQkpOwogCi0JZm9yIChpID0gMDsgaSA8IENISVBTRUxFQ1RfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwdnQtPmNzX2NvdW50OyBpKyspIHsKIAkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaV07CiAKIAkJaWYgKChwdnQtPmRjc2IwW2ldICYgSzhfRENTQl9DU19FTkFCTEUpID09IDApIHsKQEAgLTI5ODgsNyArMjk4MCw3IEBACiAJCWdvdG8gZXJyX2V4aXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwotCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgQ0hJUFNFTEVDVF9DT1VOVCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIHB2dC0+Y3NfY291bnQsIHB2dC0+Y2hhbm5lbF9jb3VudCwgbm9kZV9pZCk7CiAJaWYgKCFtY2kpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKQEAgLTMxNzEsNyArMzE2Myw3IEBACiAJb3BzdGF0ZV9pbml0KCk7CiAKIAlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQotCQlnb3RvIGVycl9leGl0OworCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKQEAgLTMxOTcsOCArMzE4OSw2IEBACiAKIGVycl8ybmRfc3RhZ2U6CiAJZGVidWdmMCgiMm5kIHN0YWdlIGZhaWxlZFxuIik7Ci0KLWVycl9leGl0OgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggOGVhMDdlMjcuLmM2ZjM1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtMTMyLDYgKzEzMiw4IEBACiAjZGVmaW5lIEVEQUNfQU1ENjRfVkVSU0lPTgkJIiBWZXI6IDMuMi4wICIgX19EQVRFX18KICNkZWZpbmUgRURBQ19NT0RfU1RSCQkJImFtZDY0X2VkYWMiCiAKKyNkZWZpbmUgRURBQ19NQVhfTlVNTk9ERVMJCTgKKwogLyogRXh0ZW5kZWQgTW9kZWwgZnJvbSBDUFVJRCwgZm9yIENQVSBSZXZpc2lvbiBudW1iZXJzICovCiAjZGVmaW5lIE9QVEVST05fQ1BVX0xFX1JFVl9DCQkwCiAjZGVmaW5lIE9QVEVST05fQ1BVX1JFVl9ECQkxCkBAIC0xNDIsNyArMTQ0LDcgQEAKICNkZWZpbmUgT1BURVJPTl9DUFVfUkVWX0ZBCQk1CiAKIC8qIEhhcmR3YXJlIGxpbWl0IG9uIENoaXBTZWxlY3Qgcm93cyBwZXIgTUMgYW5kIHByb2Nlc3NvcnMgcGVyIHN5c3RlbSAqLwotI2RlZmluZSBDSElQU0VMRUNUX0NPVU5UCQk4CisjZGVmaW5lIE1BWF9DU19DT1VOVAkJCTgKICNkZWZpbmUgRFJBTV9SRUdfQ09VTlQJCQk4CiAKIApAQCAtMTkzLDcgKzE5NSw2IEBACiAgKi8KICNkZWZpbmUgUkVWX0VfRENTQl9CQVNFX0JJVFMJCSgweEZGRTBGRTAwVUxMKQogI2RlZmluZSBSRVZfRV9EQ1NfU0hJRlQJCQk0Ci0jZGVmaW5lIFJFVl9FX0RDU01fQ09VTlQJCTgKIAogI2RlZmluZSBSRVZfRl9GMVhoX0RDU0JfQkFTRV9CSVRTCSgweDFGRjgzRkUwVUxMKQogI2RlZmluZSBSRVZfRl9GMVhoX0RDU19TSElGVAkJOApAQCAtMjA0LDkgKzIwNSw2IEBACiAgKi8KICNkZWZpbmUgUkVWX0ZfRENTQl9CQVNFX0JJVFMJCSgweDFGRjgzRkUwVUxMKQogI2RlZmluZSBSRVZfRl9EQ1NfU0hJRlQJCQk4Ci0jZGVmaW5lIFJFVl9GX0RDU01fQ09VTlQJCTQKLSNkZWZpbmUgRjEwX0RDU01fQ09VTlQJCQk0Ci0jZGVmaW5lIEYxMV9EQ1NNX0NPVU5UCQkJMgogCiAvKiBEUkFNIENTIE1hc2sgUmVnaXN0ZXJzICovCiAjZGVmaW5lIEs4X0RDU00wCQkJMHg2MApAQCAtMzc0LDEzICszNzIsMTEgQEAKIAogI2RlZmluZSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fV1JJVEUod29yZCwgYml0cykgIFwKIAkJCQkJKEJJVCgoKHdvcmQpICYgMHhGKSArIDIwKSB8IFwKLQkJCQkJQklUKDE3KSB8ICBcCi0JCQkJCSgoYml0cykgJiAweEYpKQorCQkJCQlCSVQoMTcpIHwgYml0cykKIAogI2RlZmluZSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fUkVBRCh3b3JkLCBiaXRzKSAgXAogCQkJCQkoQklUKCgod29yZCkgJiAweEYpICsgMjApIHwgXAotCQkJCQlCSVQoMTYpIHwgIFwKLQkJCQkJKChiaXRzKSAmIDB4RikpCisJCQkJCUJJVCgxNikgfCAgYml0cykKIAogI2RlZmluZSBLOF9OQkNBUAkJCTB4RTgKICNkZWZpbmUgSzhfTkJDQVBfQ09SRVMJCQkoQklUKDEyKXxCSVQoMTMpKQpAQCAtNDQ1LDEyICs0NDEsMTIgQEAKIAl1MzIgZGJhbTE7CQkvKiBEUkFNIEJhc2UgQWRkcmVzcyBNYXBwaW5nIHJlZyBmb3IgRENUMSAqLwogCiAJLyogRFJBTSBDUyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXJzIEYyeFsxLDBdWzVDOjQwXSAqLwotCXUzMiBkY3NiMFtDSElQU0VMRUNUX0NPVU5UXTsKLQl1MzIgZGNzYjFbQ0hJUFNFTEVDVF9DT1VOVF07CisJdTMyIGRjc2IwW01BWF9DU19DT1VOVF07CisJdTMyIGRjc2IxW01BWF9DU19DT1VOVF07CiAKIAkvKiBEUkFNIENTIE1hc2sgUmVnaXN0ZXJzIEYyeFsxLDBdWzZDOjYwXSAqLwotCXUzMiBkY3NtMFtDSElQU0VMRUNUX0NPVU5UXTsKLQl1MzIgZGNzbTFbQ0hJUFNFTEVDVF9DT1VOVF07CisJdTMyIGRjc20wW01BWF9DU19DT1VOVF07CisJdTMyIGRjc20xW01BWF9DU19DT1VOVF07CiAKIAkvKgogCSAqIERlY29kZWQgcGFydHMgb2YgRFJBTSBCQVNFIGFuZCBMSU1JVCBSZWdpc3RlcnMKQEAgLTQ3MCw2ICs0NjYsNyBAQAogCSAqLwogCXUzMiBkY3NiX2Jhc2U7CQkvKiBEQ1NCIGJhc2UgYml0cyAqLwogCXUzMiBkY3NtX21hc2s7CQkvKiBEQ1NNIG1hc2sgYml0cyAqLworCXUzMiBjc19jb3VudDsJCS8qIG51bSBjaGlwIHNlbGVjdHMgKD09IG51bSBEQ1NCIHJlZ2lzdGVycykgKi8KIAl1MzIgbnVtX2Rjc207CQkvKiBOdW1iZXIgb2YgRENTTSByZWdpc3RlcnMgKi8KIAl1MzIgZGNzX21hc2tfbm90dXNlZDsJLyogRENTTSBub3R1c2VkIG1hc2sgYml0cyAqLwogCXUzMiBkY3Nfc2hpZnQ7CQkvKiBEQ1NCIGFuZCBEQ1NNIHNoaWZ0IHZhbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCmluZGV4IGQzNjc1YjcuLjI5ZjFmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCkBAIC0xLDUgKzEsMTEgQEAKICNpbmNsdWRlICJhbWQ2NF9lZGFjLmgiCiAKK3N0YXRpYyBzc2l6ZV90IGFtZDY0X2luamVjdF9zZWN0aW9uX3Nob3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBwdnQtPmluamVjdGlvbi5zZWN0aW9uKTsKK30KKwogLyoKICAqIHN0b3JlIGVycm9yIGluamVjdGlvbiBzZWN0aW9uIHZhbHVlIHdoaWNoIHJlZmVycyB0byBvbmUgb2YgNCAxNi1ieXRlIHNlY3Rpb25zCiAgKiB3aXRoaW4gYSA2NC1ieXRlIGNhY2hlbGluZQpAQCAtMTUsMTIgKzIxLDI2IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnZhbHVlKTsKIAlpZiAocmV0ICE9IC1FSU5WQUwpIHsKKworCQlpZiAodmFsdWUgPiAzKSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIHNlY3Rpb24gMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlwdnQtPmluamVjdGlvbi5zZWN0aW9uID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X3dvcmRfc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLndvcmQpOworfQorCiAvKgogICogc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHdvcmQgdmFsdWUgd2hpY2ggcmVmZXJzIHRvIG9uZSBvZiA5IDE2LWJpdCB3b3JkIG9mIHRoZQogICogMTYtYnl0ZSAoMTI4LWJpdCArIEVDQyBiaXRzKSBzZWN0aW9uCkBAIC0zNywxNCArNTcsMjUgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnZhbHVlKTsKIAlpZiAocmV0ICE9IC1FSU5WQUwpIHsKIAotCQl2YWx1ZSA9ICh2YWx1ZSA8PSA4KSA/IHZhbHVlIDogMDsKLQkJcHZ0LT5pbmplY3Rpb24ud29yZCA9ICh1MzIpIHZhbHVlOworCQlpZiAodmFsdWUgPiA4KSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIHdvcmQgMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAorCQlwdnQtPmluamVjdGlvbi53b3JkID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLmJpdF9tYXApOworfQorCiAvKgogICogc3RvcmUgMTYgYml0IGVycm9yIGluamVjdGlvbiB2ZWN0b3Igd2hpY2ggZW5hYmxlcyBpbmplY3RpbmcgZXJyb3JzIHRvIHRoZQogICogY29ycmVzcG9uZGluZyBiaXQgd2l0aGluIHRoZSBlcnJvciBpbmplY3Rpb24gd29yZCBhYm92ZS4gV2hlbiB1c2VkIGR1cmluZyBhCkBAIC02MCw4ICs5MSwxNCBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDE2LCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgewogCi0JCXB2dC0+aW5qZWN0aW9uLmJpdF9tYXAgPSAodTMyKSB2YWx1ZSAmIDB4RkZGRjsKKwkJaWYgKHZhbHVlICYgMHhGRkZGMDAwMCkgeworCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCQkgICAgICIlczogaW52YWxpZCBFY2NWZWN0b3I6IDB4JWx4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKKwkJcHZ0LT5pbmplY3Rpb24uYml0X21hcCA9ICh1MzIpIHZhbHVlOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xNDcsNyArMTg0LDcgQEAKIAkJCS5uYW1lID0gImluamVjdF9zZWN0aW9uIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X3NlY3Rpb25fc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X3NlY3Rpb25fc3RvcmUsCiAJfSwKIAl7CkBAIC0xNTUsNyArMTkyLDcgQEAKIAkJCS5uYW1lID0gImluamVjdF93b3JkIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X3dvcmRfc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X3dvcmRfc3RvcmUsCiAJfSwKIAl7CkBAIC0xNjMsNyArMjAwLDcgQEAKIAkJCS5uYW1lID0gImluamVjdF9lY2NfdmVjdG9yIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc3RvcmUsCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKaW5kZXggMGMyMWMzNy4uNzEzZWQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMyw2ICszLDcgQEAKIAogc3RhdGljIGJvb2wgcmVwb3J0X2dhcnRfZXJyb3JzOwogc3RhdGljIHZvaWQgKCpuYl9idXNfZGVjb2RlcikoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCAoKm9yaWdfbWNlX2NhbGxiYWNrKShzdHJ1Y3QgbWNlICptKTsKIAogdm9pZCBhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGJvb2wgdikKIHsKQEAgLTM2Miw3ICszNjMsNyBAQAogCQlwcl93YXJuaW5nKCJIdWg/IFVua25vd24gTUNFIGVycm9yIDB4JXhcbiIsIGVjKTsKIH0KIAotdm9pZCBkZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCitzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQogewogCXN0cnVjdCBlcnJfcmVncyByZWdzOwogCWludCBub2RlLCBlY2M7CkBAIC00MjAsMyArNDIxLDMyIEBACiAKIAlhbWRfZGVjb2RlX2Vycl9jb2RlKG0tPnN0YXR1cyAmIDB4ZmZmZik7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IG1jZV9hbWRfaW5pdCh2b2lkKQoreworCS8qCisJICogV2UgY2FuIGRlY29kZSBNQ0VzIGZvciBPcHRlcm9uIGFuZCBsYXRlciBDUFVzOgorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKSkgeworCQkvKiBzYWZlIHRoZSBkZWZhdWx0IGRlY29kZSBtY2UgY2FsbGJhY2sgKi8KKwkJb3JpZ19tY2VfY2FsbGJhY2sgPSB4ODZfbWNlX2RlY29kZV9jYWxsYmFjazsKKworCQl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayA9IGFtZF9kZWNvZGVfbWNlOworCX0KKworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwobWNlX2FtZF9pbml0KTsKKworI2lmZGVmIE1PRFVMRQorc3RhdGljIHZvaWQgX19leGl0IG1jZV9hbWRfZXhpdCh2b2lkKQoreworCXg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrID0gb3JpZ19tY2VfY2FsbGJhY2s7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIE1DRSBkZWNvZGVyIik7CitNT0RVTEVfQUxJQVMoImVkYWMtbWNlLWFtZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2V4aXQobWNlX2FtZF9leGl0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggZDMzNTA4NmYuLjc3YTk1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwpAQCAtMTE3Myw3ICsxMTczLDcgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHB2dC0+YnJhbmNoXzEsIHdoZXJlLAogCQkJCQkmcHZ0LT5iMV9tdHJbc2xvdF9yb3ddKTsKIAkJCWRlYnVnZjIoIk1UUiVkIHdoZXJlPTB4JXggQjEgdmFsdWU9MHgleFxuIiwgc2xvdF9yb3csCi0JCQkJd2hlcmUsIHB2dC0+YjBfbXRyW3Nsb3Rfcm93XSk7CisJCQkJd2hlcmUsIHB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCX0gZWxzZSB7CiAJCQlwdnQtPmIxX210cltzbG90X3Jvd10gPSAwOwogCQl9CkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCXN0cnVjdCBjc3Jvd19pbmZvICpwX2Nzcm93OwogCWludCBlbXB0eSwgY2hhbm5lbF9jb3VudDsKIAlpbnQgbWF4X2Nzcm93czsKLQlpbnQgbXRyOworCWludCBtdHIsIG10cjE7CiAJaW50IGNzcm93X21lZ3M7CiAJaW50IGNoYW5uZWw7CiAJaW50IGNzcm93OwpAQCAtMTI1MSw5ICsxMjUxLDEwIEBACiAKIAkJLyogdXNlIGJyYW5jaCAwIGZvciB0aGUgYmFzaXMgKi8KIAkJbXRyID0gcHZ0LT5iMF9tdHJbY3Nyb3cgPj4gMV07CisJCW10cjEgPSBwdnQtPmIxX210cltjc3JvdyA+PiAxXTsKIAogCQkvKiBpZiBubyBESU1NUyBvbiB0aGlzIHJvdywgY29udGludWUgKi8KLQkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpKQorCQlpZiAoIU1UUl9ESU1NU19QUkVTRU5UKG10cikgJiYgIU1UUl9ESU1NU19QUkVTRU5UKG10cjEpKQogCQkJY29udGludWU7CiAKIAkJLyogRkFLRSBPVVQgVkFMVUVTLCBGSVhNRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKaW5kZXggYjA4YjZkOC4uZjk5ZDEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCkBAIC00Niw5ICs0NiwxMCBAQAogLyogTGltaXRzIGZvciBpNTQwMCAqLwogI2RlZmluZSBOVU1fTVRSU19QRVJfQlJBTkNICTQKICNkZWZpbmUgQ0hBTk5FTFNfUEVSX0JSQU5DSAkyCisjZGVmaW5lIE1BWF9ESU1NU19QRVJfQ0hBTk5FTAlOVU1fTVRSU19QRVJfQlJBTkNICiAjZGVmaW5lCU1BWF9DSEFOTkVMUwkJNAotI2RlZmluZSBNQVhfRElNTVMJCShNQVhfQ0hBTk5FTFMgKiA0KQkvKiBVcCB0byA0IERJTU0ncyBwZXIgY2hhbm5lbCAqLwotI2RlZmluZSBNQVhfQ1NST1dTCQkoTUFYX0RJTU1TICogMikJCS8qIG1heCBwb3NzaWJsZSBjc3Jvd3MgcGVyIGNoYW5uZWwgKi8KKy8qIG1heCBwb3NzaWJsZSBjc3Jvd3MgcGVyIGNoYW5uZWwgKi8KKyNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NU19QRVJfQ0hBTk5FTCkKIAogLyogRGV2aWNlIDE2LAogICogRnVuY3Rpb24gMDogU3lzdGVtIEFkZHJlc3MKQEAgLTMzMSw3ICszMzIsNiBAQAogCiBzdHJ1Y3QgaTU0MDBfZGltbV9pbmZvIHsKIAlpbnQgbWVnYWJ5dGVzOwkJLyogc2l6ZSwgMCBtZWFucyBub3QgcHJlc2VudCAgKi8KLQlpbnQgZHVhbF9yYW5rOwogfTsKIAogLyogZHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTg0OSwxMSArODQ5LDkgQEAKIAlpbnQgbjsKIAogCS8qIFRoZXJlIGlzIG9uZSBNVFIgZm9yIGVhY2ggc2xvdCBwYWlyIG9mIEZCLURJTU1zLAotCSAgIEVhY2ggc2xvdCBtYXkgaGF2ZSBvbmUgb3IgdHdvIHJhbmtzICgyIGNzcm93cyksCiAJICAgRWFjaCBzbG90IHBhaXIgbWF5IGJlIGF0IGJyYW5jaCAwIG9yIGJyYW5jaCAxLgotCSAgIFNvLCBjc3JvdyBzaG91bGQgYmUgZGl2aWRlZCBieSBlaWdodAogCSAqLwotCW4gPSBjc3JvdyA+PiAzOworCW4gPSBjc3JvdzsKIAogCWlmIChuID49IE5VTV9NVFJTX1BFUl9CUkFOQ0gpIHsKIAkJZGVidWdmMCgiRVJST1I6IHRyeWluZyB0byBhY2Nlc3MgYW4gaW52YWxpZCBjc3JvdzogJWRcbiIsCkBAIC05MDUsMjUgKzkwMywyMiBAQAogCQlhbWJfcHJlc2VudF9yZWcgPSBkZXRlcm1pbmVfYW1iX3ByZXNlbnRfcmVnKHB2dCwgY2hhbm5lbCk7CiAKIAkJLyogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgRElNTSBwcmVzZW50IGluIHRoaXMgRElNTSBzbG90ICovCi0JCWlmIChhbWJfcHJlc2VudF9yZWcgJiAoMSA8PCAoY3Nyb3cgPj4gMSkpKSB7Ci0JCQlkaW5mby0+ZHVhbF9yYW5rID0gTVRSX0RJTU1fUkFOSyhtdHIpOworCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgY3Nyb3cpKSB7CisJCQkvKiBTdGFydCB3aXRoIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgYSBCYW5rCisJCQkgKiBvbiB0aGUgRFJBTSAqLworCQkJYWRkckJpdHMgPSBNVFJfRFJBTV9CQU5LU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIEFkZCB0aGVudW1iZXIgb2YgUk9XIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBDT0xVTU4gYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fQ09MU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIFJBTksgYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUkFOSyhtdHIpOwogCi0JCQlpZiAoISgoZGluZm8tPmR1YWxfcmFuayA9PSAwKSAmJgotCQkJCSgoY3Nyb3cgJiAweDEpID09IDB4MSkpKSB7Ci0JCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuawotCQkJCSAqIG9uIHRoZSBEUkFNICovCi0JCQkJYWRkckJpdHMgPSBNVFJfRFJBTV9CQU5LU19BRERSX0JJVFMobXRyKTsKLQkJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCi0JCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUk9XU19BRERSX0JJVFMobXRyKTsKLQkJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBDT0xVTU4gYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQlhZGRyQml0cyArPSA2OwkvKiBhZGQgNjQgYml0cyBwZXIgRElNTSAqLworCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLworCQkJYWRkckJpdHMgLT0gMzsJLyogOCBiaXRzIHBlciBieXRlcyAqLwogCi0JCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KLQkJCQlhZGRyQml0cyAtPSAyMDsJLyogZGl2aWRlIGJ5IDJeXjIwICovCi0JCQkJYWRkckJpdHMgLT0gMzsJLyogOCBiaXRzIHBlciBieXRlcyAqLwotCi0JCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7Ci0JCQl9CisJCQlkaW5mby0+bWVnYWJ5dGVzID0gMSA8PCBhZGRyQml0czsKIAkJfQogCX0KIH0KQEAgLTk1MSwxMiArOTQ2LDEyIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBTY2FuIGFsbCB0aGUgYWN0dWFsIENTUk9XUyAod2hpY2ggaXMgIyBvZiBESU1NUyAqIDIpCisJLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MKIAkgKiBhbmQgY2FsY3VsYXRlIHRoZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBESU1NCiAJICogU3RhcnQgd2l0aCB0aGUgaGlnaGVzdCBjc3JvdyBmaXJzdCwgdG8gZGlzcGxheSBpdCBmaXJzdAogCSAqIGFuZCB3b3JrIHRvd2FyZCB0aGUgMHRoIGNzcm93CiAJICovCi0JbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoICogMjsKKwltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2g7CiAJZm9yIChjc3JvdyA9IG1heF9jc3Jvd3MgLSAxOyBjc3JvdyA+PSAwOyBjc3Jvdy0tKSB7CiAKIAkJLyogb24gYW4gb2RkIGNzcm93LCBmaXJzdCBvdXRwdXQgYSAnYm91bmRhcnknIG1hcmtlciwKQEAgLTEwNjQsNyArMTA1OSw3IEBACiAKIAkvKiBHZXQgdGhlIHNldCBvZiBNVFJbMC0zXSByZWdzIGJ5IGVhY2ggYnJhbmNoICovCiAJZm9yIChzbG90X3JvdyA9IDA7IHNsb3Rfcm93IDwgTlVNX01UUlNfUEVSX0JSQU5DSDsgc2xvdF9yb3crKykgewotCQlpbnQgd2hlcmUgPSBNVFIwICsgKHNsb3Rfcm93ICogc2l6ZW9mKHUzMikpOworCQlpbnQgd2hlcmUgPSBNVFIwICsgKHNsb3Rfcm93ICogc2l6ZW9mKHUxNikpOwogCiAJCS8qIEJyYW5jaCAwIHNldCBvZiBNVFIgcmVnaXN0ZXJzICovCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHB2dC0+YnJhbmNoXzAsIHdoZXJlLApAQCAtMTE0Niw3ICsxMTQxLDcgQEAKIAlwdnQgPSBtY2ktPnB2dF9pbmZvOwogCiAJY2hhbm5lbF9jb3VudCA9IHB2dC0+bWF4Y2g7Ci0JbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoICogMjsKKwltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2g7CiAKIAllbXB0eSA9IDE7CQkvKiBBc3N1bWUgTk8gbWVtb3J5ICovCiAKQEAgLTEyMTUsMjggKzEyMTAsNiBAQAogfQogCiAvKgotICogaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHBkZXYsICZudW1fY3Nyb3dzLCAmbnVtX2NoYW5uZWxzKQotICoKLSAqCWFzayB0aGUgZGV2aWNlIGhvdyBtYW55IGNoYW5uZWxzIGFyZSBwcmVzZW50IGFuZCBob3cgbWFueSBDU1JPV1MKLSAqCSBhcyB3ZWxsCi0gKi8KLXN0YXRpYyB2b2lkIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJaW50ICpudW1fZGltbXNfcGVyX2NoYW5uZWwsCi0JCQkJCWludCAqbnVtX2NoYW5uZWxzKQotewotCXU4IHZhbHVlOwotCi0JLyogTmVlZCB0byByZXRyaWV2ZSBqdXN0IGhvdyBtYW55IGNoYW5uZWxzIGFuZCBkaW1tcyBwZXIgY2hhbm5lbCBhcmUKLQkgKiBzdXBwb3J0ZWQgb24gdGhpcyBtZW1vcnkgY29udHJvbGxlcgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1BWERJTU1QRVJDSCwgJnZhbHVlKTsKLQkqbnVtX2RpbW1zX3Blcl9jaGFubmVsID0gKGludCl2YWx1ZSAqIDI7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhDSCwgJnZhbHVlKTsKLQkqbnVtX2NoYW5uZWxzID0gKGludCl2YWx1ZTsKLX0KLQotLyoKICAqCWk1NDAwX3Byb2JlMQlQcm9iZSBmb3IgT05FIGluc3RhbmNlIG9mIGRldmljZSB0byBzZWUgaWYgaXQgaXMKICAqCQkJcHJlc2VudC4KICAqCXJldHVybjoKQEAgLTEyNjMsMjIgKzEyMzYsMTYgQEAKIAlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogQXNrIHRoZSBkZXZpY2VzIGZvciB0aGUgbnVtYmVyIG9mIENTUk9XUyBhbmQgQ0hBTk5FTFMgc28KLQkgKiB0aGF0IHdlIGNhbiBjYWxjdWxhdGUgdGhlIG1lbW9yeSByZXNvdXJjZXMsIGV0YwotCSAqCi0JICogVGhlIENoaXBzZXQgd2lsbCByZXBvcnQgd2hhdCBpdCBjYW4gaGFuZGxlIHdoaWNoIHdpbGwgYmUgZ3JlYXRlcgotCSAqIG9yIGVxdWFsIHRvIHdoYXQgdGhlIG1vdGhlcmJvYXJkIG1hbnVmYWN0dXJlciB3aWxsIGltcGxlbWVudC4KLQkgKgotCSAqIEFzIHdlIGRvbid0IGhhdmUgYSBtb3RoZXJib2FyZCBpZGVudGlmaWNhdGlvbiByb3V0aW5lIHRvIGRldGVybWluZQorCS8qIEFzIHdlIGRvbid0IGhhdmUgYSBtb3RoZXJib2FyZCBpZGVudGlmaWNhdGlvbiByb3V0aW5lIHRvIGRldGVybWluZQogCSAqIGFjdHVhbCBudW1iZXIgb2Ygc2xvdHMvZGltbXMgcGVyIGNoYW5uZWwsIHdlIHRodXMgdXRpbGl6ZSB0aGUKIAkgKiByZXNvdXJjZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGNoaXBzZXQuIFRodXMsIHdlIG1pZ2h0IGhhdmUKIAkgKiBoYXZlIG1vcmUgRElNTXMgcGVyIGNoYW5uZWwgdGhhbiBhY3R1YWxseSBvbiB0aGUgbW9ibywgYnV0IHRoaXMKIAkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CiAJICogc29tZSBmYW5jeSBtb2JvIGRldGVybWluYXRpb24uCiAJICovCi0JaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHBkZXYsICZudW1fZGltbXNfcGVyX2NoYW5uZWwsCi0JCQkJCSZudW1fY2hhbm5lbHMpOwotCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWwgKiAyOworCW51bV9kaW1tc19wZXJfY2hhbm5lbCA9IE1BWF9ESU1NU19QRVJfQ0hBTk5FTDsKKwludW1fY2hhbm5lbHMgPSBNQVhfQ0hBTk5FTFM7CisJbnVtX2Nzcm93cyA9IG51bV9kaW1tc19wZXJfY2hhbm5lbDsKIAogCWRlYnVnZjAoIk1DOiAlcygpOiBOdW1iZXIgb2YgLSBDaGFubmVscz0gJWQgIERJTU1TPSAlZCAgQ1NST1dTPSAlZFxuIiwKIAkJX19mdW5jX18sIG51bV9jaGFubmVscywgbnVtX2RpbW1zX3Blcl9jaGFubmVsLCBudW1fY3Nyb3dzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwppbmRleCAxNTdmNjUwLi5jZjI3NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAibXBjODV4eF9lZGFjLmgiCiAKIHN0YXRpYyBpbnQgZWRhY19kZXZfaWR4OworI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgZWRhY19wY2lfaWR4OworI2VuZGlmCiBzdGF0aWMgaW50IGVkYWNfbWNfaWR4OwogCiBzdGF0aWMgdTMyIG9yaWdfZGRyX2Vycl9kaXNhYmxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKaW5kZXggY2VkMTg2ZC4uNTA4OTMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA1MGYwMTc2Li45OGRiYmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTg4LDE0ICsxODgsNyBAQAogLyogSW1wb3NzaWJsZSBsb2dpbl9pZCwgdG8gZGV0ZWN0IGxvZ291dCBhdHRlbXB0IGJlZm9yZSBzdWNjZXNzZnVsIGxvZ2luICovCiAjZGVmaW5lIElOVkFMSURfTE9HSU5fSUQgMHgxMDAwMAogCi0vKgotICogUGVyIHNlY3Rpb24gNy40Ljggb2YgdGhlIFNCUC0yIHNwZWMsIGEgbWd0X09SQl90aW1lb3V0IHZhbHVlIGNhbiBiZQotICogcHJvdmlkZWQgaW4gdGhlIGNvbmZpZyByb20uIE1vc3QgZGV2aWNlcyBkbyBwcm92aWRlIGEgdmFsdWUsIHdoaWNoCi0gKiB3ZSdsbCB1c2UgZm9yIGxvZ2luIG1hbmFnZW1lbnQgb3JicywgYnV0IHdpdGggc29tZSBzYW5lIGxpbWl0cy4KLSAqLwotI2RlZmluZSBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVAk1MDAwVQkvKiBUaW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNCUDJfTUFYX0xPR0lOX09SQl9USU1FT1VUCTQwMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCS8qIFRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJCS8qIFRpbWVvdXQgaW4gbXMgKi8KICNkZWZpbmUgU0JQMl9PUkJfTlVMTAkJCTB4ODAwMDAwMDAKICNkZWZpbmUgU0JQMl9SRVRSWV9MSU1JVAkJMHhmCQkvKiAxNSByZXRyaWVzICovCiAjZGVmaW5lIFNCUDJfQ1lDTEVfTElNSVQJCSgweGM4IDw8IDEyKQkvKiAyMDAgMTI1dXMgY3ljbGVzICovCkBAIC0xMDM0LDcgKzEwMjcsNiBAQAogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJaW50IGtleSwgdmFsdWU7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAKIAlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcmVjdG9yeSk7CiAJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgewpAQCAtMTA1OSwxNyArMTA1MSw3IEBACiAKIAkJY2FzZSBTQlAyX0NTUl9VTklUX0NIQVJBQ1RFUklTVElDUzoKIAkJCS8qIHRoZSB0aW1lb3V0IHZhbHVlIGlzIHN0b3JlZCBpbiA1MDBtcyB1bml0cyAqLwotCQkJdGltZW91dCA9ICgodW5zaWduZWQgaW50KSB2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7Ci0JCQl0aW1lb3V0ID0gbWF4KHRpbWVvdXQsIFNCUDJfTUlOX0xPR0lOX09SQl9USU1FT1VUKTsKLQkJCXRndC0+bWd0X29yYl90aW1lb3V0ID0KLQkJCQkgIG1pbih0aW1lb3V0LCBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVCk7Ci0KLQkJCWlmICh0aW1lb3V0ID4gdGd0LT5tZ3Rfb3JiX3RpbWVvdXQpCi0JCQkJZndfbm90aWZ5KCIlczogY29uZmlnIHJvbSBjb250YWlucyAlZHMgIgotCQkJCQkgICJtYW5hZ2VtZW50IE9SQiB0aW1lb3V0LCBsaW1pdGluZyAiCi0JCQkJCSAgInRvICVkc1xuIiwgdGd0LT5idXNfaWQsCi0JCQkJCSAgdGltZW91dCAvIDEwMDAsCi0JCQkJCSAgdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgLyAxMDAwKTsKKwkJCXRndC0+bWd0X29yYl90aW1lb3V0ID0gKHZhbHVlID4+IDggJiAweGZmKSAqIDUwMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0JQMl9DU1JfTE9HSUNBTF9VTklUX05VTUJFUjoKQEAgLTEwODcsNiArMTA2OSwyMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUGVyIHNlY3Rpb24gNy40Ljggb2YgdGhlIFNCUC0yIHNwZWMsIGEgbWd0X09SQl90aW1lb3V0IHZhbHVlIGNhbiBiZQorICogcHJvdmlkZWQgaW4gdGhlIGNvbmZpZyByb20uIE1vc3QgZGV2aWNlcyBkbyBwcm92aWRlIGEgdmFsdWUsIHdoaWNoCisgKiB3ZSdsbCB1c2UgZm9yIGxvZ2luIG1hbmFnZW1lbnQgb3JicywgYnV0IHdpdGggc29tZSBzYW5lIGxpbWl0cy4KKyAqLworc3RhdGljIHZvaWQgc2JwMl9jbGFtcF9tYW5hZ2VtZW50X29yYl90aW1lb3V0KHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gdGd0LT5tZ3Rfb3JiX3RpbWVvdXQ7CisKKwlpZiAodGltZW91dCA+IDQwMDAwKQorCQlmd19ub3RpZnkoIiVzOiAlZHMgbWd0X09SQl90aW1lb3V0IGxpbWl0ZWQgdG8gNDBzXG4iLAorCQkJICB0Z3QtPmJ1c19pZCwgdGltZW91dCAvIDEwMDApOworCisJdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgPSBjbGFtcF92YWwodGltZW91dCwgNTAwMCwgNDAwMDApOworfQorCiBzdGF0aWMgdm9pZCBzYnAyX2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IHNicDJfdGFyZ2V0ICp0Z3QsIHUzMiBtb2RlbCwKIAkJCQkgIHUzMiBmaXJtd2FyZV9yZXZpc2lvbikKIHsKQEAgLTExNzEsNiArMTE2OSw3IEBACiAJCQkgICAgICAgJmZpcm13YXJlX3JldmlzaW9uKSA8IDApCiAJCWdvdG8gZmFpbF90Z3RfcHV0OwogCisJc2JwMl9jbGFtcF9tYW5hZ2VtZW50X29yYl90aW1lb3V0KHRndCk7CiAJc2JwMl9pbml0X3dvcmthcm91bmRzKHRndCwgbW9kZWwsIGZpcm13YXJlX3JldmlzaW9uKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IDQyMGE5NmUuLjA1MWQxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC05MzksNyArOTM5LDcgQEAKIAogCWlmIChpYmZ0X2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaUJGVCBkZXRlY3RlZCBhdCAweCVsbHguXG4iLAotCQkgICAgICAgKHU2NCl2aXJ0X3RvX3BoeXMoKHZvaWQgKilpYmZ0X2FkZHIpKTsKKwkJICAgICAgICh1NjQpaXNhX3ZpcnRfdG9fYnVzKGliZnRfYWRkcikpOwogCiAJCXJjID0gaWJmdF9jaGVja19kZXZpY2UoKTsKIAkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKaW5kZXggZDUzZmJiZi4uZGZiMTVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCkBAIC02NSwxMCArNjUsMTAgQEAKIAkJICogc28gc2tpcCB0aGF0IGFyZWEgKi8KIAkJaWYgKHBvcyA9PSBWR0FfTUVNKQogCQkJcG9zICs9IFZHQV9TSVpFOwotCQl2aXJ0ID0gcGh5c190b192aXJ0KHBvcyk7CisJCXZpcnQgPSBpc2FfYnVzX3RvX3ZpcnQocG9zKTsKIAkJaWYgKG1lbWNtcCh2aXJ0LCBJQkZUX1NJR04sIElCRlRfU0lHTl9MRU4pID09IDApIHsKIAkJCXVuc2lnbmVkIGxvbmcgKmFkZHIgPQotCQkJICAgICh1bnNpZ25lZCBsb25nICopcGh5c190b192aXJ0KHBvcyArIDQpOworCQkJICAgICh1bnNpZ25lZCBsb25nICopaXNhX2J1c190b192aXJ0KHBvcyArIDQpOwogCQkJbGVuID0gKmFkZHI7CiAJCQkvKiBpZiB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSBleHRlbmRzIHBhc3QgMU0sCiAJCQkgKiB0aGUgdGFibGUgY2Fubm90IGJlIHZhbGlkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggYmIxMWE0Mi4uNTBkZTBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC02NjEsNyArNjYxLDcgQEAKIAogCQlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBkZXNjLT5jaGlwLT5kZXYsIE1LREVWKDAsIDApLAogCQkJCWRlc2MsIGlvbmFtZSA/IGlvbmFtZSA6ICJncGlvJWQiLCBncGlvKTsKLQkJaWYgKGRldikgeworCQlpZiAoIUlTX0VSUihkZXYpKSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJCQkmZ3Bpb19hdHRyX2dyb3VwKTsKQEAgLTY3OSw3ICs2NzksNyBAQAogCQkJaWYgKHN0YXR1cyAhPSAwKQogCQkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCX0gZWxzZQotCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCXN0YXR1cyA9IFBUUl9FUlIoZGV2KTsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJc2V0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKTsKIAl9CkBAIC04MDAsMTEgKzgwMCwxMSBAQAogCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOwogCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGNoaXAtPmRldiwgTUtERVYoMCwgMCksIGNoaXAsCiAJCQkJImdwaW9jaGlwJWQiLCBjaGlwLT5iYXNlKTsKLQlpZiAoZGV2KSB7CisJaWYgKCFJU19FUlIoZGV2KSkgewogCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKIAkJCQkmZ3Bpb2NoaXBfYXR0cl9ncm91cCk7CiAJfSBlbHNlCi0JCXN0YXR1cyA9IC1FTk9ERVY7CisJCXN0YXR1cyA9IFBUUl9FUlIoZGV2KTsKIAljaGlwLT5leHBvcnRlZCA9IChzdGF0dXMgPT0gMCk7CiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIApAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZ3Bpb2xpYl9zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb2xpYl9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb2xpYl9vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IGdwaW9saWJfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwppbmRleCBhZmFkMTQ3Li40OTM4NGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCkBAIC00NjAsNyArNDYwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBncGlvX3R3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisvKiBDYW5ub3QgdXNlIF9fZGV2ZXhpdCBhcyBncGlvX3R3bDQwMzBfcHJvYmUoKSBjYWxscyB1cyAqLworc3RhdGljIGludCBncGlvX3R3bDQwMzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBzdGF0dXM7CkBAIC00OTMsNyArNDk0LDcgQEAKIAkuZHJpdmVyLm5hbWUJPSAidHdsNDAzMF9ncGlvIiwKIAkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLnByb2JlCQk9IGdwaW9fdHdsNDAzMF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdwaW9fdHdsNDAzMF9yZW1vdmUpLAorCS5yZW1vdmUJCT0gZ3Bpb190d2w0MDMwX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdwaW9fdHdsNDAzMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IGJhNzI4YWQuLjVjYWUwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC00ODIsNiArNDgyLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+dXNlcl9tb2RlcywgaGVhZCkKIAkJZHJtX21vZGVfcmVtb3ZlKGNvbm5lY3RvciwgbW9kZSk7CiAKKwlrZnJlZShjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlKTsKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJmNvbm5lY3Rvci0+YmFzZSk7CiAJbGlzdF9kZWwoJmNvbm5lY3Rvci0+aGVhZCk7CkBAIC0xNTU1LDggKzE1NTYsNiBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgcmV0ID0gMDsKIAotCURSTV9ERUJVR19LTVMoIlxuIik7Ci0KIAlpZiAoIXJlcS0+ZmxhZ3MpIHsKIAkJRFJNX0VSUk9SKCJubyBvcGVyYXRpb24gc2V0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggZmU4Njk3NC4uYmJmZDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm1fY3J0Yy5oIgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKIAogc3RhdGljIHZvaWQgZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgIGludCBmbGFncykKQEAgLTkwLDcgKzkxLDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKQogCQltb2RlLT5zdGF0dXMgPSBNT0RFX1VOVkVSSUZJRUQ7CiAKLQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOworCWlmIChjb25uZWN0b3ItPmZvcmNlKSB7CisJCWlmIChjb25uZWN0b3ItPmZvcmNlID09IERSTV9GT1JDRV9PTikKKwkJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCWVsc2UKKwkJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCWlmIChjb25uZWN0b3ItPmZ1bmNzLT5mb3JjZSkKKwkJCWNvbm5lY3Rvci0+ZnVuY3MtPmZvcmNlKGNvbm5lY3Rvcik7CisJfSBlbHNlCisJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yLT5mdW5jcy0+ZGV0ZWN0KGNvbm5lY3Rvcik7CiAKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpIHsKIAkJRFJNX0RFQlVHX0tNUygiJXMgaXMgZGlzY29ubmVjdGVkXG4iLApAQCAtMjY3LDYgKzI3Niw2NiBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgYm9vbCBkcm1faGFzX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCWlmICghZmJfaGVscF9jb25uKQorCQlyZXR1cm4gZmFsc2U7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJcmV0dXJuIGNtZGxpbmVfbW9kZS0+c3BlY2lmaWVkOworfQorCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9waWNrX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwX2Nvbm4gPSBjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKKworCWlmICghZmJfaGVscF9jb25uKQorCQlyZXR1cm4gbW9kZTsKKworCWNtZGxpbmVfbW9kZSA9ICZmYl9oZWxwX2Nvbm4tPmNtZGxpbmVfbW9kZTsKKwlpZiAoY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPT0gZmFsc2UpCisJCXJldHVybiBtb2RlOworCisJLyogYXR0ZW1wdCB0byBmaW5kIGEgbWF0Y2hpbmcgbW9kZSBpbiB0aGUgbGlzdCBvZiBtb2RlcworCSAqICB3ZSBoYXZlIGdvdHRlbiBzbyBmYXIsIGlmIG5vdCBhZGQgYSBDVlQgbW9kZSB0aGF0IGNvbmZvcm1zCisJICovCisJaWYgKGNtZGxpbmVfbW9kZS0+cmIgfHwgY21kbGluZV9tb2RlLT5tYXJnaW5zKQorCQlnb3RvIGNyZWF0ZV9tb2RlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCQkvKiBjaGVjayB3aWR0aC9oZWlnaHQgKi8KKwkJaWYgKG1vZGUtPmhkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eHJlcyB8fAorCQkgICAgbW9kZS0+dmRpc3BsYXkgIT0gY21kbGluZV9tb2RlLT55cmVzKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+cmVmcmVzaF9zcGVjaWZpZWQpIHsKKwkJCWlmIChtb2RlLT52cmVmcmVzaCAhPSBjbWRsaW5lX21vZGUtPnJlZnJlc2gpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY21kbGluZV9tb2RlLT5pbnRlcmxhY2UpIHsKKwkJCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiBtb2RlOworCX0KKworY3JlYXRlX21vZGU6CisJbW9kZSA9IGRybV9jdnRfbW9kZShjb25uZWN0b3ItPmRldiwgY21kbGluZV9tb2RlLT54cmVzLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+eXJlcywKKwkJCSAgICBjbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkID8gY21kbGluZV9tb2RlLT5yZWZyZXNoIDogNjAsCisJCQkgICAgY21kbGluZV9tb2RlLT5yYiwgY21kbGluZV9tb2RlLT5pbnRlcmxhY2UsCisJCQkgICAgY21kbGluZV9tb2RlLT5tYXJnaW5zKTsKKwlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisJbGlzdF9hZGQoJm1vZGUtPmhlYWQsICZjb25uZWN0b3ItPm1vZGVzKTsKKwlyZXR1cm4gbW9kZTsKK30KKwogc3RhdGljIGJvb2wgZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgc3RyaWN0KQogewogCWJvb2wgZW5hYmxlOwpAQCAtMzE3LDEwICszODYsMTYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAotCQkJICBjb25uZWN0b3ItPmJhc2UuaWQpOworCQlEUk1fREVCVUdfS01TKCJsb29raW5nIGZvciBjbWRsaW5lIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAorCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsKIAotCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJLyogZ290IGZvciBjb21tYW5kIGxpbmUgbW9kZSBmaXJzdCAqLworCQltb2Rlc1tpXSA9IGRybV9waWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOworCQlpZiAoIW1vZGVzW2ldKSB7CisJCQlEUk1fREVCVUdfS01TKCJsb29raW5nIGZvciBwcmVmZXJyZWQgbW9kZSBvbiBjb25uZWN0b3IgJWRcbiIsCisJCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJCW1vZGVzW2ldID0gZHJtX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOworCQl9CiAJCS8qIE5vIHByZWZlcnJlZCBtb2RlcywgcGljayBvbmUgb2ZmIHRoZSBsaXN0ICovCiAJCWlmICghbW9kZXNbaV0gJiYgIWxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9kZXMpKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGVzW2ldLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKQEAgLTM2OSw2ICs0NDQsOCBAQAogCW15X3Njb3JlID0gMTsKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCiAJCW15X3Njb3JlKys7CisJaWYgKGRybV9oYXNfY21kbGluZV9tb2RlKGNvbm5lY3RvcikpCisJCW15X3Njb3JlKys7CiAJaWYgKGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KSkKIAkJbXlfc2NvcmUrKzsKIApAQCAtOTQzLDYgKzEwMjAsOCBAQAogewogCWludCBjb3VudCA9IDA7CiAKKwlkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShkZXYpOworCiAJY291bnQgPSBkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhkZXYsCiAJCQkJCQkgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCiAJCQkJCQkgZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKQEAgLTk1MCw3ICsxMDI5LDcgQEAKIAkvKgogCSAqIHdlIHNob3VsZG4ndCBlbmQgdXAgd2l0aCBubyBtb2RlcyBoZXJlLgogCSAqLwotCVdBUk4oIWNvdW50LCAiQ29ubmVjdGVkIGNvbm5lY3RvciB3aXRoIDAgbW9kZXNcbiIpOworCVdBUk4oIWNvdW50LCAiTm8gY29ubmVjdG9ycyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0aCBtb2Rlc1xuIik7CiAKIAlkcm1fc2V0dXBfY3J0Y3MoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCA5MGQ3NmJhLi5jZWE2NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMTA5LDcgKzEwOSw5IEBACiAKIAogLyogVmFsaWQgRURJRCBoZWFkZXIgaGFzIHRoZXNlIGJ5dGVzICovCi1zdGF0aWMgdTggZWRpZF9oZWFkZXJbXSA9IHsgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCB9Oworc3RhdGljIGNvbnN0IHU4IGVkaWRfaGVhZGVyW10gPSB7CisJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorfTsKIAogLyoqCiAgKiBlZGlkX2lzX3ZhbGlkIC0gc2FuaXR5IGNoZWNrIEVESUQgZGF0YQpAQCAtNTAwLDYgKzUwMiwxOSBAQAogCX0KIAlyZXR1cm4gbW9kZTsKIH0KKworLyoKKyAqIDAgaXMgcmVzZXJ2ZWQuICBUaGUgc3BlYyBzYXlzIDB4MDEgZmlsbCBmb3IgdW51c2VkIHRpbWluZ3MuICBTb21lIG9sZAorICogbW9uaXRvcnMgZmlsbCB3aXRoIGFzY2lpIHNwYWNlICgweDIwKSBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50CitiYWRfc3RkX3RpbWluZyh1OCBhLCB1OCBiKQoreworCXJldHVybiAoYSA9PSAweDAwICYmIGIgPT0gMHgwMCkgfHwKKwkgICAgICAgKGEgPT0gMHgwMSAmJiBiID09IDB4MDEpIHx8CisJICAgICAgIChhID09IDB4MjAgJiYgYiA9PSAweDIwKTsKK30KKwogLyoqCiAgKiBkcm1fbW9kZV9zdGQgLSBjb252ZXJ0IHN0YW5kYXJkIG1vZGUgaW5mbyAod2lkdGgsIGhlaWdodCwgcmVmcmVzaCkgaW50byBtb2RlCiAgKiBAdDogc3RhbmRhcmQgdGltaW5nIHBhcmFtcwpAQCAtNTEzLDYgKzUyOCw3IEBACiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZV9zdGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3Qgc3RkX3RpbWluZyAqdCwKKwkJCQkgICAgICBpbnQgcmV2aXNpb24sCiAJCQkJICAgICAgaW50IHRpbWluZ19sZXZlbCkKIHsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKQEAgLTUyMywxNCArNTM5LDIwIEBACiAJdW5zaWduZWQgdmZyZXEgPSAodC0+dmZyZXFfYXNwZWN0ICYgRURJRF9USU1JTkdfVkZSRVFfTUFTSykKIAkJPj4gRURJRF9USU1JTkdfVkZSRVFfU0hJRlQ7CiAKKwlpZiAoYmFkX3N0ZF90aW1pbmcodC0+aHNpemUsIHQtPnZmcmVxX2FzcGVjdCkpCisJCXJldHVybiBOVUxMOworCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBFRElEIHNwZWMsIHRoZSBoZGlzcGxheSA9IGhzaXplICogOCArIDI0OCAqLwogCWhzaXplID0gdC0+aHNpemUgKiA4ICsgMjQ4OwogCS8qIHZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwICovCiAJdnJlZnJlc2hfcmF0ZSA9IHZmcmVxICsgNjA7CiAJLyogdGhlIHZkaXNwbGF5IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGFzcGVjdCByYXRpbyAqLwotCWlmIChhc3BlY3RfcmF0aW8gPT0gMCkKLQkJdnNpemUgPSAoaHNpemUgKiAxMCkgLyAxNjsKLQllbHNlIGlmIChhc3BlY3RfcmF0aW8gPT0gMSkKKwlpZiAoYXNwZWN0X3JhdGlvID09IDApIHsKKwkJaWYgKHJldmlzaW9uIDwgMykKKwkJCXZzaXplID0gaHNpemU7CisJCWVsc2UKKwkJCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7CisJfSBlbHNlIGlmIChhc3BlY3RfcmF0aW8gPT0gMSkKIAkJdnNpemUgPSAoaHNpemUgKiAzKSAvIDQ7CiAJZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDIpCiAJCXZzaXplID0gKGhzaXplICogNCkgLyA1OwpAQCAtNTM4LDcgKzU2MCw4IEBACiAJCXZzaXplID0gKGhzaXplICogOSkgLyAxNjsKIAkvKiBIRFRWIGhhY2sgKi8KIAlpZiAoaHNpemUgPT0gMTM2MCAmJiB2c2l6ZSA9PSA3NjUgJiYgdnJlZnJlc2hfcmF0ZSA9PSA2MCkgewotCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCwKKwkJCQkgICAgZmFsc2UpOwogCQltb2RlLT5oZGlzcGxheSA9IDEzNjY7CiAJCW1vZGUtPnZzeW5jX3N0YXJ0ID0gbW9kZS0+dnN5bmNfc3RhcnQgLSAxOwogCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19lbmQgLSAxOwpAQCAtNTU3LDcgKzU4MCw4IEBACiAJCW1vZGUgPSBkcm1fZ3RmX21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOwogCQlicmVhazsKIAljYXNlIExFVkVMX0NWVDoKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCisJCQkJICAgIGZhbHNlKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBtb2RlOwpAQCAtNjAyLDYgKzYyNiwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBpdCBpcyBpbmNvcnJlY3QgaWYgaHN5bmMvdnN5bmMgd2lkdGggaXMgemVybyAqLworCWlmICghaHN5bmNfcHVsc2Vfd2lkdGggfHwgIXZzeW5jX3B1bHNlX3dpZHRoKSB7CisJCURSTV9ERUJVR19LTVMoIkluY29ycmVjdCBEZXRhaWxlZCB0aW1pbmcuICIKKwkJCQkiV3JvbmcgSHN5bmMvVnN5bmMgcHVsc2Ugd2lkdGhcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOwogCWlmICghbW9kZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC02MjMsNiArNjUzLDE1IEBACiAJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyB2c3luY19wdWxzZV93aWR0aDsKIAltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArIHZibGFuazsKIAorCS8qIHBlcmZvcm0gdGhlIGJhc2ljIGNoZWNrIGZvciB0aGUgZGV0YWlsZWQgdGltaW5nICovCisJaWYgKG1vZGUtPmhzeW5jX2VuZCA+IG1vZGUtPmh0b3RhbCB8fAorCQltb2RlLT52c3luY19lbmQgPiBtb2RlLT52dG90YWwpIHsKKwkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgZGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIlN5bmMgaXMgYmV5b25kIHRoZSBibGFuay5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCWlmIChwdC0+bWlzYyAmIERSTV9FRElEX1BUX0lOVEVSTEFDRUQpCkBAIC03NzksNyArODE4LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXSwKLQkJCQkJdGltaW5nX2xldmVsKTsKKwkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sIHRpbWluZ19sZXZlbCk7CiAJCWlmIChuZXdtb2RlKSB7CiAJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQltb2RlcysrOwpAQCAtODI5LDEzICs4NjgsMTMgQEAKIAkJCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9DUERBVEE6CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVESURfREVUQUlMX1NURF9NT0RFUzoKLQkJCQkvKiBGaXZlIG1vZGVzIHBlciBkZXRhaWxlZCBzZWN0aW9uICovCi0JCQkJZm9yIChqID0gMDsgaiA8IDU7IGkrKykgeworCQkJCWZvciAoaiA9IDA7IGogPCA2OyBpKyspIHsKIAkJCQkJc3RydWN0IHN0ZF90aW1pbmcgKnN0ZDsKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CiAKIAkJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKIAkJCQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsIHN0ZCwKKwkJCQkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sCiAJCQkJCQkJICAgICAgIHRpbWluZ19sZXZlbCk7CiAJCQkJCWlmIChuZXdtb2RlKSB7CiAJCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CkBAIC05NjQsNyArMTAwMyw5IEBACiAJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CiAKIAkJCQlzdGQgPSAmZGF0YS0+ZGF0YS50aW1pbmdzW2pdOwotCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsIHRpbWluZ19sZXZlbCk7CisJCQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsIHN0ZCwKKwkJCQkJCSAgICAgICBlZGlkLT5yZXZpc2lvbiwKKwkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCWlmIChuZXdtb2RlKSB7CiAJCQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKIAkJCQkJbW9kZXMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDJjNDY3MTMuLmRjOGUzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtNDAsNiArNDAsMTk5IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoa2VybmVsX2ZiX2hlbHBlcl9saXN0KTsKIAoraW50IGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcik7CisKK3N0YXRpYyBpbnQgbXlfYXRvaShjb25zdCBjaGFyICpuYW1lKQoreworCWludCB2YWwgPSAwOworCisJZm9yICg7OyBuYW1lKyspIHsKKwkJc3dpdGNoICgqbmFtZSkgeworCQljYXNlICcwJyAuLi4gJzknOgorCQkJdmFsID0gMTAqdmFsKygqbmFtZS0nMCcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdmFsOworCQl9CisJfQorfQorCisvKioKKyAqIGRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZSAtIHBhcnNlIGNvbW1hbmQgbGluZSBmb3IgY29ubmVjdG9yCisgKiBAY29ubmVjdG9yIC0gY29ubmVjdG9yIHRvIHBhcnNlIGxpbmUgZm9yCisgKiBAbW9kZV9vcHRpb24gLSBwZXIgY29ubmVjdG9yIG1vZGUgb3B0aW9uCisgKgorICogVGhpcyBwYXJzZXMgdGhlIGNvbm5lY3RvciBzcGVjaWZpYyB0aGVuIGdlbmVyaWMgY29tbWFuZCBsaW5lcyBmb3IKKyAqIG1vZGVzIGFuZCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY29ubmVjdG9yLgorICoKKyAqIFRoaXMgdXNlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBmYiBtb2RlZGIuYywgZXhjZXB0IGZvciBleHRyYQorICoJPHhyZXM+eDx5cmVzPltNXVtSXVstPGJwcD5dW0A8cmVmcmVzaD5dW2ldW21dW2VEZF0KKyAqCisgKiBlbmFibGUvZW5hYmxlIERpZ2l0YWwvZGlzYWJsZSBiaXQgYXQgdGhlIGVuZAorICovCitzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rvcl9wYXJzZV9jb21tYW5kX2xpbmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJCSAgICAgICBjb25zdCBjaGFyICptb2RlX29wdGlvbikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBuYW1lbGVuOworCWludCByZXNfc3BlY2lmaWVkID0gMCwgYnBwX3NwZWNpZmllZCA9IDAsIHJlZnJlc2hfc3BlY2lmaWVkID0gMDsKKwl1bnNpZ25lZCBpbnQgeHJlcyA9IDAsIHlyZXMgPSAwLCBicHAgPSAzMiwgcmVmcmVzaCA9IDA7CisJaW50IHlyZXNfc3BlY2lmaWVkID0gMCwgY3Z0ID0gMCwgcmIgPSAwLCBpbnRlcmxhY2UgPSAwLCBtYXJnaW5zID0gMDsKKwlpbnQgaTsKKwllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2UgPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQ7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwX2Nvbm4gPSBjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOworCisJaWYgKCFmYl9oZWxwX2Nvbm4pCisJCXJldHVybiBmYWxzZTsKKworCWNtZGxpbmVfbW9kZSA9ICZmYl9oZWxwX2Nvbm4tPmNtZGxpbmVfbW9kZTsKKwlpZiAoIW1vZGVfb3B0aW9uKQorCQltb2RlX29wdGlvbiA9IGZiX21vZGVfb3B0aW9uOworCisJaWYgKCFtb2RlX29wdGlvbikgeworCQljbWRsaW5lX21vZGUtPnNwZWNpZmllZCA9IGZhbHNlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbmFtZSA9IG1vZGVfb3B0aW9uOworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJZm9yIChpID0gbmFtZWxlbi0xOyBpID49IDA7IGktLSkgeworCQlzd2l0Y2ggKG5hbWVbaV0pIHsKKwkJY2FzZSAnQCc6CisJCQluYW1lbGVuID0gaTsKKwkJCWlmICghcmVmcmVzaF9zcGVjaWZpZWQgJiYgIWJwcF9zcGVjaWZpZWQgJiYKKwkJCSAgICAheXJlc19zcGVjaWZpZWQpIHsKKwkJCQlyZWZyZXNoID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQlyZWZyZXNoX3NwZWNpZmllZCA9IDE7CisJCQkJaWYgKGN2dCB8fCByYikKKwkJCQkJY3Z0ID0gMDsKKwkJCX0gZWxzZQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCW5hbWVsZW4gPSBpOworCQkJaWYgKCFicHBfc3BlY2lmaWVkICYmICF5cmVzX3NwZWNpZmllZCkgeworCQkJCWJwcCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJYnBwX3NwZWNpZmllZCA9IDE7CisJCQkJaWYgKGN2dCB8fCByYikKKwkJCQkJY3Z0ID0gMDsKKwkJCX0gZWxzZQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCWlmICgheXJlc19zcGVjaWZpZWQpIHsKKwkJCQl5cmVzID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQl5cmVzX3NwZWNpZmllZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCWNhc2UgJzAnIC4uLiAnOSc6CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKQorCQkJCWN2dCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnUic6CisJCQlpZiAoIWN2dCkKKwkJCQlyYiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoIWN2dCkKKwkJCQltYXJnaW5zID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlmICghY3Z0KQorCQkJCWludGVybGFjZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgfHwKKwkJCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIpKQorCQkJCWZvcmNlID0gRFJNX0ZPUkNFX09OOworCQkJZWxzZQorCQkJCWZvcmNlID0gRFJNX0ZPUkNFX09OX0RJR0lUQUw7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlmb3JjZSA9IERSTV9GT1JDRV9PRkY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAoaSA8IDAgJiYgeXJlc19zcGVjaWZpZWQpIHsKKwkJeHJlcyA9IG15X2F0b2kobmFtZSk7CisJCXJlc19zcGVjaWZpZWQgPSAxOworCX0KK2RvbmU6CisKKwlEUk1fREVCVUdfS01TKCJjbWRsaW5lIG1vZGUgZm9yIGNvbm5lY3RvciAlcyAlZHglZEAlZEh6JXMlcyVzXG4iLAorCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksIHhyZXMsIHlyZXMsCisJCShyZWZyZXNoKSA/IHJlZnJlc2ggOiA2MCwgKHJiKSA/ICIgcmVkdWNlZCBibGFua2luZyIgOgorCQkiIiwgKG1hcmdpbnMpID8gIiB3aXRoIG1hcmdpbnMiIDogIiIsIChpbnRlcmxhY2UpID8KKwkJIiBpbnRlcmxhY2VkIiA6ICIiKTsKKworCWlmIChmb3JjZSkgeworCQljb25zdCBjaGFyICpzOworCQlzd2l0Y2ggKGZvcmNlKSB7CisJCWNhc2UgRFJNX0ZPUkNFX09GRjogcyA9ICJPRkYiOyBicmVhazsKKwkJY2FzZSBEUk1fRk9SQ0VfT05fRElHSVRBTDogcyA9ICJPTiAtIGRpZyI7IGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIERSTV9GT1JDRV9PTjogcyA9ICJPTiI7IGJyZWFrOworCQl9CisKKwkJRFJNX0lORk8oImZvcmNpbmcgJXMgY29ubmVjdG9yICVzXG4iLAorCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSwgcyk7CisJCWNvbm5lY3Rvci0+Zm9yY2UgPSBmb3JjZTsKKwl9CisKKwlpZiAocmVzX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPnNwZWNpZmllZCA9IHRydWU7CisJCWNtZGxpbmVfbW9kZS0+eHJlcyA9IHhyZXM7CisJCWNtZGxpbmVfbW9kZS0+eXJlcyA9IHlyZXM7CisJfQorCisJaWYgKHJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCWNtZGxpbmVfbW9kZS0+cmVmcmVzaF9zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPnJlZnJlc2ggPSByZWZyZXNoOworCX0KKworCWlmIChicHBfc3BlY2lmaWVkKSB7CisJCWNtZGxpbmVfbW9kZS0+YnBwX3NwZWNpZmllZCA9IHRydWU7CisJCWNtZGxpbmVfbW9kZS0+YnBwID0gYnBwOworCX0KKwljbWRsaW5lX21vZGUtPnJiID0gcmIgPyB0cnVlIDogZmFsc2U7CisJY21kbGluZV9tb2RlLT5jdnQgPSBjdnQgID8gdHJ1ZSA6IGZhbHNlOworCWNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlID0gaW50ZXJsYWNlID8gdHJ1ZSA6IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJY2hhciAqb3B0aW9uID0gTlVMTDsKKworCQkvKiBkbyBzb21ldGhpbmcgb24gcmV0dXJuIC0gdHVybiBvZmYgY29ubmVjdG9yIG1heWJlICovCisJCWlmIChmYl9nZXRfb3B0aW9ucyhkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksICZvcHRpb24pKQorCQkJY29udGludWU7CisKKwkJZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lKGNvbm5lY3Rvciwgb3B0aW9uKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGJvb2wgZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSh2b2lkKQogewogCWludCBpID0gMDsKQEAgLTg3LDYgKzI4MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVzdG9yZSk7CiAKKyNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKIAlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKQEAgLTEwMyw2ICsyOTcsNyBAQAogCS5oZWxwX21zZyA9ICJmb3JjZS1mYihWKSIsCiAJLmFjdGlvbl9tc2cgPSAiUmVzdG9yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIiwKIH07CisjZW5kaWYKIAogc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9vbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTI1OSw2ICs0NTQsMTA5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KTsKIAorc3RhdGljIGludCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCisJCSAgICAgdTE2IGJsdWUsIHUxNiByZWdubywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CisJaW50IHBpbmRleDsKKworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKwkJdTMyICpwYWxldHRlOworCQl1MzIgdmFsdWU7CisJCS8qIHBsYWNlIGNvbG9yIGluIHBzdWVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFsZXR0ZSA9ICh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwkJcmVkID4+PSAoMTYgLSBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJdmFsdWUgPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJcGFsZXR0ZVtyZWdub10gPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGluZGV4ID0gcmVnbm87CisKKwlpZiAoZmItPmJpdHNfcGVyX3BpeGVsID09IDE2KSB7CisJCXBpbmRleCA9IHJlZ25vIDw8IDM7CisKKwkJaWYgKGZiLT5kZXB0aCA9PSAxNiAmJiByZWdubyA+IDYzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChmYi0+ZGVwdGggPT0gMTUgJiYgcmVnbm8gPiAzMSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChmYi0+ZGVwdGggPT0gMTYpIHsKKwkJCXUxNiByLCBnLCBiOworCQkJaW50IGk7CisJCQlpZiAocmVnbm8gPCAzMikgeworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByZWQsCisJCQkJCQlncmVlbiwgYmx1ZSwgcGluZGV4ICsgaSk7CisJCQl9CisKKwkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX2dldChjcnRjLCAmciwKKwkJCQkJCSAgICAmZywgJmIsCisJCQkJCQkgICAgcGluZGV4ID4+IDEpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByLAorCQkJCQkJCSAgICBncmVlbiwgYiwKKwkJCQkJCQkgICAgKHBpbmRleCA+PiAxKSArIGkpOworCQl9CisJfQorCisJaWYgKGZiLT5kZXB0aCAhPSAxNikKKwkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXUxNiAqcmVkLCAqZ3JlZW4sICpibHVlLCAqdHJhbnNwOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgaSwgcmMgPSAwOworCWludCBzdGFydDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IGZiX2hlbHBlci0+Y3J0Y19jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCXJlZCA9IGNtYXAtPnJlZDsKKwkJZ3JlZW4gPSBjbWFwLT5ncmVlbjsKKwkJYmx1ZSA9IGNtYXAtPmJsdWU7CisJCXRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKKwkJc3RhcnQgPSBjbWFwLT5zdGFydDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsKKwkJCXUxNiBocmVkLCBoZ3JlZW4sIGhibHVlLCBodHJhbnNwID0gMHhmZmZmOworCisJCQlocmVkID0gKnJlZCsrOworCQkJaGdyZWVuID0gKmdyZWVuKys7CisJCQloYmx1ZSA9ICpibHVlKys7CisKKwkJCWlmICh0cmFuc3ApCisJCQkJaHRyYW5zcCA9ICp0cmFuc3ArKzsKKworCQkJcmMgPSBzZXRjb2xyZWcoY3J0YywgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgc3RhcnQrKywgaW5mbyk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQl9CisJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfc2V0Y21hcCk7CisKIGludCBkcm1fZmJfaGVscGVyX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKIAkJCSAgICB1bnNpZ25lZCByZWQsCiAJCQkgICAgdW5zaWduZWQgZ3JlZW4sCkBAIC0yNzAsMTAgKzU2OCwxMyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IGk7CisJaW50IHJldDsKKworCWlmIChyZWdubyA+IDI1NSkKKwkJcmV0dXJuIDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7Ci0KKwkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwogCQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKIAkJCWlmIChjcnRjLT5iYXNlLmlkID09IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQpCiAJCQkJYnJlYWs7CkBAIC0yODEsMzUgKzU4MiwxMSBAQAogCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAocmVnbm8gPiAyNTUpCi0JCQlyZXR1cm4gMTsKKwkJcmV0ID0gc2V0Y29scmVnKGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vLCBpbmZvKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLQkJaWYgKGZiLT5kZXB0aCA9PSA4KSB7Ci0JCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAocmVnbm8gPCAxNikgewotCQkJc3dpdGNoIChmYi0+ZGVwdGgpIHsKLQkJCWNhc2UgMTU6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmODAwKSA+PiAxKSB8Ci0JCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8Ci0JCQkJCSgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxNjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKHJlZCAmIDB4ZjgwMCkgfAotCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAotCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI0OgotCQkJY2FzZSAzMjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0KLQkJCQkJKCgocmVkID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKLQkJCQkJKCgoZ3JlZW4gPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkJCSgoKGJsdWUgPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQzMCw3ICs3MDcsNyBAQAogCiAJCWlmIChjcnRjLT5mYiA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5mYikgewogCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm8tPm1vZGVfc2V0KTsKKwkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKCZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldCk7CiAJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpAQCAtNDc5LDExICs3NTYsMTQgQEAKIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSk7CiAKIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgaW50IHByZWZlcnJlZF9icHAsCiAJCQkJICBpbnQgKCpmYl9jcmVhdGUpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCQkgICB1aW50MzJfdCBmYl93aWR0aCwKIAkJCQkJCSAgIHVpbnQzMl90IGZiX2hlaWdodCwKIAkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfZGVwdGgsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2JwcCwKIAkJCQkJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKipmYl9wdHIpKQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKQEAgLTQ5Nyw4ICs3NzcsNDggQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKIAlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOworCXVpbnQzMl90IHN1cmZhY2VfZGVwdGggPSAyNCwgc3VyZmFjZV9icHAgPSAzMjsKIAorCS8qIGlmIGRyaXZlciBwaWNrcyA4IG9yIDE2IGJ5IGRlZmF1bHQgdXNlIHRoYXQKKwkgICBmb3IgYm90aCBkZXB0aC9icHAgKi8KKwlpZiAocHJlZmVycmVkX2JwcCAhPSBzdXJmYWNlX2JwcCkgeworCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSBwcmVmZXJyZWRfYnBwOworCX0KIAkvKiBmaXJzdCB1cCBnZXQgYSBjb3VudCBvZiBjcnRjcyBub3cgaW4gdXNlIGFuZCBuZXcgbWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwX2Nvbm4gPSBjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlOworCisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOworCisJCWlmICghZmJfaGVscF9jb25uKQorCQkJY29udGludWU7CisJCQorCQljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+YnBwX3NwZWNpZmllZCkgeworCQkJc3dpdGNoIChjbWRsaW5lX21vZGUtPmJwcCkgeworCQkJY2FzZSA4OgorCQkJCXN1cmZhY2VfZGVwdGggPSBzdXJmYWNlX2JwcCA9IDg7CisJCQkJYnJlYWs7CisJCQljYXNlIDE1OgorCQkJCXN1cmZhY2VfZGVwdGggPSAxNTsKKwkJCQlzdXJmYWNlX2JwcCA9IDE2OworCQkJCWJyZWFrOworCQkJY2FzZSAxNjoKKwkJCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjQ6CisJCQkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gMjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIDMyOgorCQkJCXN1cmZhY2VfZGVwdGggPSAyNDsKKwkJCQlzdXJmYWNlX2JwcCA9IDMyOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkgewogCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZSkgewpAQCAtNTI3LDcgKzg0Nyw4IEBACiAJLyogZG8gd2UgaGF2ZSBhbiBmYiBhbHJlYWR5PyAqLwogCWlmIChsaXN0X2VtcHR5KCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0KSkgewogCQlyZXQgPSAoKmZiX2NyZWF0ZSkoZGV2LCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBzdXJmYWNlX3dpZHRoLAotCQkJCSAgIHN1cmZhY2VfaGVpZ2h0LCAmZmIpOworCQkJCSAgIHN1cmZhY2VfaGVpZ2h0LCBzdXJmYWNlX2RlcHRoLCBzdXJmYWNlX2JwcCwKKwkJCQkgICAmZmIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCW5ld19mYiA9IDE7CkBAIC02MTgsMTAgKzkzOSwxMiBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZyZWUpOwogCi12b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoKQordm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCwKKwkJCSAgICB1aW50MzJfdCBkZXB0aCkKIHsKIAlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgudmlzdWFsID0gZGVwdGggPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6CisJCUZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKIAlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwogCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKaW5kZXggNDk0MDRjZS4uNTFmNjc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwpAQCAtODgsNyArODgsNyBAQAogI2RlZmluZSBIVl9GQUNUT1IJCQkxMDAwCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBoZGlzcGxheSwKIAkJCQkgICAgICBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKLQkJCQkgICAgICBib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCkKKwkJCQkgICAgICBib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCwgYm9vbCBtYXJnaW5zKQogewogCS8qIDEpIHRvcC9ib3R0b20gbWFyZ2luIHNpemUgKCUgb2YgaGVpZ2h0KSAtIGRlZmF1bHQ6IDEuOCwgKi8KICNkZWZpbmUJQ1ZUX01BUkdJTl9QRVJDRU5UQUdFCQkxOApAQCAtMTAxLDcgKzEwMSw2IEBACiAJLyogUGl4ZWwgQ2xvY2sgc3RlcCAoa0h6KSAqLwogI2RlZmluZSBDVlRfQ0xPQ0tfU1RFUAkJCTI1MAogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKLQlib29sIG1hcmdpbnMgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdmZpZWxkcmF0ZSwgaHBlcmlvZDsKIAlpbnQgaGRpc3BsYXlfcm5kLCBobWFyZ2luLCB2ZGlzcGxheV9ybmQsIHZtYXJnaW4sIHZzeW5jOwogCWludCBpbnRlcmxhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKaW5kZXggN2UxZmJlNS4uNGFjOTAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwpAQCAtMzY5LDI4ICszNjksMjggQEAKIH0KIAogLyoqIEFHUCB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX2ZhdWx0LAogCS5vcGVuID0gZHJtX3ZtX29wZW4sCiAJLmNsb3NlID0gZHJtX3ZtX2Nsb3NlLAogfTsKIAogLyoqIFNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9zaG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2htX29wcyA9IHsKIAkuZmF1bHQgPSBkcm1fdm1fc2htX2ZhdWx0LAogCS5vcGVuID0gZHJtX3ZtX29wZW4sCiAJLmNsb3NlID0gZHJtX3ZtX3NobV9jbG9zZSwKIH07CiAKIC8qKiBETUEgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fZG1hX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX2RtYV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX2RtYV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTY2F0dGVyLWdhdGhlciB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9zZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9zZ19vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX3NnX2ZhdWx0LAogCS5vcGVuID0gZHJtX3ZtX29wZW4sCiAJLmNsb3NlID0gZHJtX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggNDVkNTA3ZS4uZTViMTM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMjI3LDggKzEyMjcsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIFRyeSB0byBzZXQgdXAgRkJDIHdpdGggYSByZWFzb25hYmxlIGNvbXByZXNzZWQgYnVmZmVyIHNpemUgKi8KLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0dNNDUoZGV2KSkgJiYKLQkgICAgaTkxNV9wb3dlcnNhdmUpIHsKKwlpZiAoSTkxNV9IQVNfRkJDKGRldikgJiYgaTkxNV9wb3dlcnNhdmUpIHsKIAkJaW50IGNmYl9zaXplOwogCiAJCS8qIFRyeSB0byBnZXQgYW4gOE0gYnVmZmVyLi4uICovCkBAIC0xNDY4LDYgKzE0NjcsNyBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5lcnJvcl9sb2NrKTsKIAlkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPSAwOworCWRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8gPSAwOwogCiAJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgSTkxNV9OVU1fUElQRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGI5MzgxNGMuLjdmNDM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtODksNyArODksOCBAQAogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMTsKKwkvKiBNb2Rlc2V0IG9uIHJlc3VtZSwgbm90IGxpZCBldmVudHMgKi8KKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQsNyArMTI1LDcgQEAKIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwogCX0KIAotCWRldl9wcml2LT5zdXNwZW5kZWQgPSAwOworCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYjI0YjJkMS4uNTcyMDRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yMDIsNiArMjAyLDcgQEAKIAlzcGlubG9ja190IHVzZXJfaXJxX2xvY2s7CiAJLyoqIFJlZmNvdW50IGZvciBpOTE1X3VzZXJfaXJxX2dldCgpIHZlcnN1cyBpOTE1X3VzZXJfaXJxX3B1dCgpLiAqLwogCWludCB1c2VyX2lycV9yZWZjb3VudDsKKwl1MzIgdHJhY2VfaXJxX3NlcW5vOwogCS8qKiBDYWNoZWQgdmFsdWUgb2YgSU1SIHRvIGF2b2lkIHJlYWRzIGluIHVwZGF0aW5nIHRoZSBiaXRmaWVsZCAqLwogCXUzMiBpcnFfbWFza19yZWc7CiAJdTMyIHBpcGVzdGF0WzJdOwpAQCAtMjczLDcgKzI3NCw3IEBACiAJc3RydWN0IGRybV9pOTE1X2Rpc3BsYXlfZnVuY3MgZGlzcGxheTsKIAogCS8qIFJlZ2lzdGVyIHN0YXRlICovCi0JYm9vbCBzdXNwZW5kZWQ7CisJYm9vbCBtb2Rlc2V0X29uX2xpZDsKIAl1OCBzYXZlTEJCOwogCXUzMiBzYXZlRFNQQUNOVFI7CiAJdTMyIHNhdmVEU1BCQ05UUjsKQEAgLTI5NSw2ICsyOTYsMTIgQEAKIAl1MzIgc2F2ZVZCTEFOS19BOwogCXUzMiBzYXZlVlNZTkNfQTsKIAl1MzIgc2F2ZUJDTFJQQVRfQTsKKwl1MzIgc2F2ZVRSQU5TX0hUT1RBTF9BOworCXUzMiBzYXZlVFJBTlNfSEJMQU5LX0E7CisJdTMyIHNhdmVUUkFOU19IU1lOQ19BOworCXUzMiBzYXZlVFJBTlNfVlRPVEFMX0E7CisJdTMyIHNhdmVUUkFOU19WQkxBTktfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZTWU5DX0E7CiAJdTMyIHNhdmVQSVBFQVNUQVQ7CiAJdTMyIHNhdmVEU1BBU1RSSURFOwogCXUzMiBzYXZlRFNQQVNJWkU7CkBAIC0zMDMsOCArMzEwLDExIEBACiAJdTMyIHNhdmVEU1BBU1VSRjsKIAl1MzIgc2F2ZURTUEFUSUxFT0ZGOwogCXUzMiBzYXZlUEZJVF9QR01fUkFUSU9TOworCXUzMiBzYXZlQkxDX0hJU1RfQ1RMOwogCXUzMiBzYXZlQkxDX1BXTV9DVEw7CiAJdTMyIHNhdmVCTENfUFdNX0NUTDI7CisJdTMyIHNhdmVCTENfQ1BVX1BXTV9DVEw7CisJdTMyIHNhdmVCTENfQ1BVX1BXTV9DVEwyOwogCXUzMiBzYXZlRlBCMDsKIAl1MzIgc2F2ZUZQQjE7CiAJdTMyIHNhdmVEUExMX0I7CkBAIC0zMTYsNiArMzI2LDEyIEBACiAJdTMyIHNhdmVWQkxBTktfQjsKIAl1MzIgc2F2ZVZTWU5DX0I7CiAJdTMyIHNhdmVCQ0xSUEFUX0I7CisJdTMyIHNhdmVUUkFOU19IVE9UQUxfQjsKKwl1MzIgc2F2ZVRSQU5TX0hCTEFOS19COworCXUzMiBzYXZlVFJBTlNfSFNZTkNfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZUT1RBTF9COworCXUzMiBzYXZlVFJBTlNfVkJMQU5LX0I7CisJdTMyIHNhdmVUUkFOU19WU1lOQ19COwogCXUzMiBzYXZlUElQRUJTVEFUOwogCXUzMiBzYXZlRFNQQlNUUklERTsKIAl1MzIgc2F2ZURTUEJTSVpFOwpAQCAtMzQxLDYgKzM1Nyw3IEBACiAJdTMyIHNhdmVQRklUX0NPTlRST0w7CiAJdTMyIHNhdmVfcGFsZXR0ZV9hWzI1Nl07CiAJdTMyIHNhdmVfcGFsZXR0ZV9iWzI1Nl07CisJdTMyIHNhdmVEUEZDX0NCX0JBU0U7CiAJdTMyIHNhdmVGQkNfQ0ZCX0JBU0U7CiAJdTMyIHNhdmVGQkNfTExfQkFTRTsKIAl1MzIgc2F2ZUZCQ19DT05UUk9MOwpAQCAtMzQ4LDYgKzM2NSwxMiBAQAogCXUzMiBzYXZlSUVSOwogCXUzMiBzYXZlSUlSOwogCXUzMiBzYXZlSU1SOworCXUzMiBzYXZlREVJRVI7CisJdTMyIHNhdmVERUlNUjsKKwl1MzIgc2F2ZUdUSUVSOworCXUzMiBzYXZlR1RJTVI7CisJdTMyIHNhdmVGRElfUlhBX0lNUjsKKwl1MzIgc2F2ZUZESV9SWEJfSU1SOwogCXUzMiBzYXZlQ0FDSEVfTU9ERV8wOwogCXUzMiBzYXZlRF9TVEFURTsKIAl1MzIgc2F2ZURTUENMS19HQVRFX0Q7CkBAIC0zODEsNiArNDA0LDE2IEBACiAJdTMyIHNhdmVQSVBFQl9EUF9MSU5LX007CiAJdTMyIHNhdmVQSVBFQV9EUF9MSU5LX047CiAJdTMyIHNhdmVQSVBFQl9EUF9MSU5LX047CisJdTMyIHNhdmVGRElfUlhBX0NUTDsKKwl1MzIgc2F2ZUZESV9UWEFfQ1RMOworCXUzMiBzYXZlRkRJX1JYQl9DVEw7CisJdTMyIHNhdmVGRElfVFhCX0NUTDsKKwl1MzIgc2F2ZVBGQV9DVExfMTsKKwl1MzIgc2F2ZVBGQl9DVExfMTsKKwl1MzIgc2F2ZVBGQV9XSU5fU1o7CisJdTMyIHNhdmVQRkJfV0lOX1NaOworCXUzMiBzYXZlUEZBX1dJTl9QT1M7CisJdTMyIHNhdmVQRkJfV0lOX1BPUzsKIAogCXN0cnVjdCB7CiAJCXN0cnVjdCBkcm1fbW0gZ3R0X3NwYWNlOwpAQCAtNDkxLDYgKzUyNCw4IEBACiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2Jqc1tJOTE1X01BWF9QSFlTX09CSkVDVF07CiAJfSBtbTsKIAlzdHJ1Y3Qgc2R2b19kZXZpY2VfbWFwcGluZyBzZHZvX21hcHBpbmdzWzJdOworCS8qIGluZGljYXRlIHdoZXRoZXIgdGhlIExWRFNfQk9SREVSIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdCAqLworCXVuc2lnbmVkIGludCBsdmRzX2JvcmRlcl9iaXRzOwogCiAJLyogUmVjbG9ja2luZyBzdXBwb3J0ICovCiAJYm9vbCByZW5kZXJfcmVjbG9ja19hdmFpbDsKQEAgLTY2NSw2ICs3MDAsNyBAQAogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogdm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV90cmFjZV9pcnFfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubyk7CiB2b2lkIGk5MTVfdXNlcl9pcnFfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9lbmFibGVfaW50ZXJydXB0IChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtOTc5LDcgKzEwMTUsMTAgQEAKIAogI2RlZmluZSBIQVNfRldfQkxDKGRldikgKElTX0k5WFgoZGV2KSB8fCBJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQogI2RlZmluZSBIQVNfUElQRV9DWFNSKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lHRE5HKGRldikpCi0jZGVmaW5lIEk5MTVfSEFTX0ZCQyhkZXYpIChJU19NT0JJTEUoZGV2KSAmJiAoSVNfSTlYWChkZXYpIHx8IElTX0k5NjVHKGRldikpKQorI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgXAorCQkJICAgKElTX0k5WFgoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmIFwKKwkJCSAgICFJU19JR0QoZGV2KSAmJiBcCisJCQkgICAhSVNfSUdETkcoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNDA3MjdkNC4uYWJmYzI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xNzcwLDcgKzE3NzAsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IHNlcW5vOwogCi0JaWYgKCFkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpCisJaWYgKCFkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgfHwgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpCiAJCXJldHVybjsKIAogCXNlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CkBAIC0xNzk0LDYgKzE3OTQsMTIgQEAKIAkJfSBlbHNlCiAJCQlicmVhazsKIAl9CisKKwlpZiAodW5saWtlbHkgKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8gJiYKKwkJICAgICAgaTkxNV9zZXFub19wYXNzZWQoZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubywgc2Vxbm8pKSkgeworCQlpOTE1X3VzZXJfaXJxX3B1dChkZXYpOworCQlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKKwl9CiB9CiAKIHZvaWQKQEAgLTMzNTIsNyArMzM1OCw3IEBACiAJZXhlY19zdGFydCA9ICh1aW50MzJfdCkgZXhlY19vZmZzZXQgKyBleGVjLT5iYXRjaF9zdGFydF9vZmZzZXQ7CiAJZXhlY19sZW4gPSAodWludDMyX3QpIGV4ZWMtPmJhdGNoX2xlbjsKIAotCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0KGRldiwgZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vKTsKKwl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChkZXYsIGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyArIDEpOwogCiAJY291bnQgPSBuYm94ID8gbmJveCA6IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDRkZmVlYzcuLmMzY2VmZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtNzI1LDYgKzcyNSwxNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CiB9CiAKK3ZvaWQgaTkxNV90cmFjZV9pcnFfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8gPT0gMCkKKwkJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKKworCWRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8gPSBzZXFubzsKK30KKwogc3RhdGljIGludCBpOTE1X3dhaXRfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgaXJxX25yKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAwNDY2ZGRiLi4xNjg3ZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTk2OCw2ICs5NjgsOCBAQAogI2RlZmluZSAgIExWRFNfUE9SVF9FTgkJCSgxIDw8IDMxKQogLyogU2VsZWN0cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCiAjZGVmaW5lICAgTFZEU19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyogRW5hYmxlIGJvcmRlciBmb3IgdW5zY2FsZWQgKG9yIGFzcGVjdC1zY2FsZWQpIGRpc3BsYXkgKi8KKyNkZWZpbmUgICBMVkRTX0JPUkRFUl9FTkFCTEUJCSgxIDw8IDE1KQogLyoKICAqIEVuYWJsZXMgdGhlIEEwLUEyIGRhdGEgcGFpcnMgYW5kIENMS0EsIGNvbnRhaW5pbmcgMTggYml0cyBvZiBjb2xvciBkYXRhIHBlcgogICogcGl4ZWwuCkBAIC0xMDc4LDYgKzEwODAsOCBAQAogI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX1NISUZUCQkoMCkKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQogCisjZGVmaW5lIEJMQ19ISVNUX0NUTAkJMHg2MTI2MAorCiAvKiBUViBwb3J0IGNvbnRyb2wgKi8KICNkZWZpbmUgVFZfQ1RMCQkJMHg2ODAwMAogLyoqIEVuYWJsZXMgdGhlIFRWIGVuY29kZXIgKi8KQEAgLTE3ODAsNiArMTc4NCwxMSBAQAogI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikgLyogOTY1IG9yIGxhdGVyICovCiAjZGVmaW5lICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MSkKICNkZWZpbmUgICBQSVBFX09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisjZGVmaW5lICAgUElQRV9CUENfTUFTSyAJCQkoNyA8PCA1KSAvKiBJcm9ubGFrZSAqLworI2RlZmluZSAgIFBJUEVfOEJQQwkJCQkoMCA8PCA1KQorI2RlZmluZSAgIFBJUEVfMTBCUEMJCQkJKDEgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzZCUEMJCQkJKDIgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEyQlBDCQkJCSgzIDw8IDUpCiAKICNkZWZpbmUgRFNQQVJCCQkJMHg3MDAzMAogI2RlZmluZSAgIERTUEFSQl9DU1RBUlRfTUFTSwkoMHg3ZiA8PCA3KQpAQCAtMTc5MCwxNyArMTc5OSwyOSBAQAogI2RlZmluZSAgIERTUEFSQl9BRU5EX1NISUZUCTAKIAogI2RlZmluZSBEU1BGVzEJCQkweDcwMDM0CisjZGVmaW5lICAgRFNQRldfU1JfU0hJRlQJMjMKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JCX1NISUZUCTE2CisjZGVmaW5lICAgRFNQRldfUExBTkVCX1NISUZUCTgKICNkZWZpbmUgRFNQRlcyCQkJMHg3MDAzOAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfTUFTSwkweDAwMDAzZjAwCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQV9TSElGVAkxNgogI2RlZmluZSBEU1BGVzMJCQkweDcwMDNjCisjZGVmaW5lICAgRFNQRldfSFBMTF9TUl9FTgkoMTw8MzEpCisjZGVmaW5lICAgRFNQRldfQ1VSU09SX1NSX1NISUZUCTI0CiAjZGVmaW5lICAgSUdEX1NFTEZfUkVGUkVTSF9FTgkoMTw8MzApCiAKIC8qIEZJRk8gd2F0ZXJtYXJrIHNpemVzIGV0YyAqLworI2RlZmluZSBHNFhfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTkxNV9GSUZPX0xJTkVfU0laRQk2NAogI2RlZmluZSBJODMwX0ZJRk9fTElORV9TSVpFCTMyCisKKyNkZWZpbmUgRzRYX0ZJRk9fU0laRQkJMTI3CiAjZGVmaW5lIEk5NDVfRklGT19TSVpFCQkxMjcgLyogOTQ1ICYgOTY1ICovCiAjZGVmaW5lIEk5MTVfRklGT19TSVpFCQk5NQogI2RlZmluZSBJODU1R01fRklGT19TSVpFCTEyNyAvKiBJbiBjYWNoZWxpbmVzICovCiAjZGVmaW5lIEk4MzBfRklGT19TSVpFCQk5NQorCisjZGVmaW5lIEc0WF9NQVhfV00JCTB4M2YKICNkZWZpbmUgSTkxNV9NQVhfV00JCTB4M2YKIAogI2RlZmluZSBJR0RfRElTUExBWV9GSUZPCTUxMiAvKiBpbiA2NGJ5dGUgdW5pdCAqLwpAQCAtMjAzMCw2ICsyMDUxLDExIEBACiAjZGVmaW5lIFBGQV9DVExfMSAgICAgICAgICAgICAgIDB4NjgwODAKICNkZWZpbmUgUEZCX0NUTF8xICAgICAgICAgICAgICAgMHg2ODg4MAogI2RlZmluZSAgUEZfRU5BQkxFICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lICBQRl9GSUxURVJfTUFTSwkJKDM8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX1BST0dSQU1NRUQJKDA8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX01FRF8zeDMJKDE8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfRU5IQU5DRQkoMjw8MjMpCisjZGVmaW5lICBQRl9GSUxURVJfRURHRV9TT0ZURU4JKDM8PDIzKQogI2RlZmluZSBQRkFfV0lOX1NaCQkweDY4MDc0CiAjZGVmaW5lIFBGQl9XSU5fU1oJCTB4Njg4NzQKICNkZWZpbmUgUEZBX1dJTl9QT1MJCTB4NjgwNzAKQEAgLTIxNDksMTEgKzIxNzUsMTEgQEAKICNkZWZpbmUgIERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSwkJKDM8PDEzKQogI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX0RJU0FCTEUgICAgICAgICAgICAgICAgKDA8PDExKQogI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX0VOQUJMRSAgICAgICAgICAgICAgICAgKDI8PDExKQotI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMjw8MTEpCisjZGVmaW5lICBEUkVGX1NTQ19TT1VSQ0VfTUFTSwkJCSgzPDwxMSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICgwPDw5KQogI2RlZmluZSAgRFJFRl9OT05TUFJFQURfQ0s1MDVfRU5BQkxFCQkoMTw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICgyPDw5KQotI2RlZmluZSAgRFJFRl9OT05TUFJFQURfU09VUkNFX01BU0sJCSgyPDw5KQorI2RlZmluZSAgRFJFRl9OT05TUFJFQURfU09VUkNFX01BU0sJCSgzPDw5KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgKDA8PDcpCiAjZGVmaW5lICBEUkVGX1NVUEVSU1BSRUFEX1NPVVJDRV9FTkFCTEUgICAgICAgICAoMjw8NykKICNkZWZpbmUgIERSRUZfU1NDNF9ET1dOU1BSRUFEICAgICAgICAgICAgICAgICAgICgwPDw2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwppbmRleCBiZDZkOGQ5Li45OTJkNTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpAQCAtMzIsMTEgKzMyLDE1IEBACiBzdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMglkcGxsX3JlZzsKIAotCWlmIChwaXBlID09IFBJUEVfQSkKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9BKSAmIERQTExfVkNPX0VOQUJMRSk7Ci0JZWxzZQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0IpICYgRFBMTF9WQ09fRU5BQkxFKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBQQ0hfRFBMTF9BOiBQQ0hfRFBMTF9COworCX0gZWxzZSB7CisJCWRwbGxfcmVnID0gKHBpcGUgPT0gUElQRV9BKSA/IERQTExfQTogRFBMTF9COworCX0KKworCXJldHVybiAoSTkxNV9SRUFEKGRwbGxfcmVnKSAmIERQTExfVkNPX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5MTVfc2F2ZV9wYWxldHRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlKQpAQCAtNDksNiArNTMsOSBAQAogCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKIAkJcmV0dXJuOwogCisJaWYgKElTX0lHRE5HKGRldikpCisJCXJlZyA9IChwaXBlID09IFBJUEVfQSkgPyBMR0NfUEFMRVRURV9BIDogTEdDX1BBTEVUVEVfQjsKKwogCWlmIChwaXBlID09IFBJUEVfQSkKIAkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2E7CiAJZWxzZQpAQCAtNjgsNiArNzUsOSBAQAogCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKIAkJcmV0dXJuOwogCisJaWYgKElTX0lHRE5HKGRldikpCisJCXJlZyA9IChwaXBlID09IFBJUEVfQSkgPyBMR0NfUEFMRVRURV9BIDogTEdDX1BBTEVUVEVfQjsKKwogCWlmIChwaXBlID09IFBJUEVfQSkKIAkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2E7CiAJZWxzZQpAQCAtMjMyLDEwICsyNDIsMTYgQEAKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKIAlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKFBDSF9GUEEwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKFBDSF9GUEExKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0EgPSBJOTE1X1JFQUQoUENIX0RQTExfQSk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOworCQlkZXZfcHJpdi0+c2F2ZUZQQTEgPSBJOTE1X1JFQUQoRlBBMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7CisJfQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOwogCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOwogCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOwpAQCAtMjQzLDcgKzI1OSwyNCBAQAogCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOwogCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOwogCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRkRJX1RYQV9DVEwgPSBJOTE1X1JFQUQoRkRJX1RYQV9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfQ1RMID0gSTkxNV9SRUFEKEZESV9SWEFfQ1RMKTsKKworCQlkZXZfcHJpdi0+c2F2ZVBGQV9DVExfMSA9IEk5MTVfUkVBRChQRkFfQ1RMXzEpOworCQlkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fU1ogPSBJOTE1X1JFQUQoUEZBX1dJTl9TWik7CisJCWRldl9wcml2LT5zYXZlUEZBX1dJTl9QT1MgPSBJOTE1X1JFQUQoUEZBX1dJTl9QT1MpOworCisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0EgPSBJOTE1X1JFQUQoVFJBTlNfSFRPVEFMX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19BID0gSTkxNV9SRUFEKFRSQU5TX0hCTEFOS19BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19BID0gSTkxNV9SRUFEKFRSQU5TX0hTWU5DX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9BID0gSTkxNV9SRUFEKFRSQU5TX1ZUT1RBTF9BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQSA9IEk5MTVfUkVBRChUUkFOU19WQkxBTktfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQSA9IEk5MTVfUkVBRChUUkFOU19WU1lOQ19BKTsKKwl9CiAKIAlkZXZfcHJpdi0+c2F2ZURTUEFDTlRSID0gSTkxNV9SRUFEKERTUEFDTlRSKTsKIAlkZXZfcHJpdi0+c2F2ZURTUEFTVFJJREUgPSBJOTE1X1JFQUQoRFNQQVNUUklERSk7CkBAIC0yNjAsMTAgKzI5MywxNiBAQAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORiA9IEk5MTVfUkVBRChQSVBFQkNPTkYpOwogCWRldl9wcml2LT5zYXZlUElQRUJTUkMgPSBJOTE1X1JFQUQoUElQRUJTUkMpOwotCWRldl9wcml2LT5zYXZlRlBCMCA9IEk5MTVfUkVBRChGUEIwKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7Ci0JZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoUENIX0ZQQjApOworCQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoUENIX0ZQQjEpOworCQlkZXZfcHJpdi0+c2F2ZURQTExfQiA9IEk5MTVfUkVBRChQQ0hfRFBMTF9CKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7CisJCWRldl9wcml2LT5zYXZlRlBCMSA9IEk5MTVfUkVBRChGUEIxKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKKwl9CisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCWRldl9wcml2LT5zYXZlRFBMTF9CX01EID0gSTkxNV9SRUFEKERQTExfQl9NRCk7CiAJZGV2X3ByaXYtPnNhdmVIVE9UQUxfQiA9IEk5MTVfUkVBRChIVE9UQUxfQik7CiAJZGV2X3ByaXYtPnNhdmVIQkxBTktfQiA9IEk5MTVfUkVBRChIQkxBTktfQik7CkBAIC0yNzEsNyArMzEwLDI0IEBACiAJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQiA9IEk5MTVfUkVBRChWVE9UQUxfQik7CiAJZGV2X3ByaXYtPnNhdmVWQkxBTktfQiA9IEk5MTVfUkVBRChWQkxBTktfQik7CiAJZGV2X3ByaXYtPnNhdmVWU1lOQ19CID0gSTkxNV9SRUFEKFZTWU5DX0IpOwotCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQiA9IEk5MTVfUkVBRChCQ0xSUEFUX0IpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGRElfVFhCX0NUTCA9IEk5MTVfUkVBRChGRElfVFhCX0NUTCk7CisJCWRldl9wcml2LT5zYXZlRkRJX1JYQl9DVEwgPSBJOTE1X1JFQUQoRkRJX1JYQl9DVEwpOworCisJCWRldl9wcml2LT5zYXZlUEZCX0NUTF8xID0gSTkxNV9SRUFEKFBGQl9DVExfMSk7CisJCWRldl9wcml2LT5zYXZlUEZCX1dJTl9TWiA9IEk5MTVfUkVBRChQRkJfV0lOX1NaKTsKKwkJZGV2X3ByaXYtPnNhdmVQRkJfV0lOX1BPUyA9IEk5MTVfUkVBRChQRkJfV0lOX1BPUyk7CisKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQiA9IEk5MTVfUkVBRChUUkFOU19IVE9UQUxfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0IgPSBJOTE1X1JFQUQoVFJBTlNfSEJMQU5LX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hTWU5DX0IgPSBJOTE1X1JFQUQoVFJBTlNfSFNZTkNfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0IgPSBJOTE1X1JFQUQoVFJBTlNfVlRPVEFMX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19CID0gSTkxNV9SRUFEKFRSQU5TX1ZCTEFOS19CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WU1lOQ19CID0gSTkxNV9SRUFEKFRSQU5TX1ZTWU5DX0IpOworCX0KIAogCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBJOTE1X1JFQUQoRFNQQkNOVFIpOwogCWRldl9wcml2LT5zYXZlRFNQQlNUUklERSA9IEk5MTVfUkVBRChEU1BCU1RSSURFKTsKQEAgLTI5MCwyMyArMzQ2LDQxIEBACiBzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfbW9kZXNldF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBkcGxsX2FfcmVnLCBmcGEwX3JlZywgZnBhMV9yZWc7CisJaW50IGRwbGxfYl9yZWcsIGZwYjBfcmVnLCBmcGIxX3JlZzsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlyZXR1cm47CiAKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkcGxsX2FfcmVnID0gUENIX0RQTExfQTsKKwkJZHBsbF9iX3JlZyA9IFBDSF9EUExMX0I7CisJCWZwYTBfcmVnID0gUENIX0ZQQTA7CisJCWZwYjBfcmVnID0gUENIX0ZQQjA7CisJCWZwYTFfcmVnID0gUENIX0ZQQTE7CisJCWZwYjFfcmVnID0gUENIX0ZQQjE7CisJfSBlbHNlIHsKKwkJZHBsbF9hX3JlZyA9IERQTExfQTsKKwkJZHBsbF9iX3JlZyA9IERQTExfQjsKKwkJZnBhMF9yZWcgPSBGUEEwOworCQlmcGIwX3JlZyA9IEZQQjA7CisJCWZwYTFfcmVnID0gRlBBMTsKKwkJZnBiMV9yZWcgPSBGUEIxOworCX0KKwogCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KIAkvKiBQcmltZSB0aGUgY2xvY2sgKi8KIAlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKKwkJSTkxNV9XUklURShkcGxsX2FfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCiAJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJRFJNX1VERUxBWSgxNTApOwogCX0KLQlJOTE1X1dSSVRFKEZQQTAsIGRldl9wcml2LT5zYXZlRlBBMCk7Ci0JSTkxNV9XUklURShGUEExLCBkZXZfcHJpdi0+c2F2ZUZQQTEpOworCUk5MTVfV1JJVEUoZnBhMF9yZWcsIGRldl9wcml2LT5zYXZlRlBBMCk7CisJSTkxNV9XUklURShmcGExX3JlZywgZGV2X3ByaXYtPnNhdmVGUEExKTsKIAkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQSwgZGV2X3ByaXYtPnNhdmVEUExMX0EpOworCUk5MTVfV1JJVEUoZHBsbF9hX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0EpOwogCURSTV9VREVMQVkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShEUExMX0FfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9BX01EKTsKIAlEUk1fVURFTEFZKDE1MCk7CiAKQEAgLTMxNyw3ICszOTEsMjQgQEAKIAlJOTE1X1dSSVRFKFZUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BKTsKIAlJOTE1X1dSSVRFKFZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19BKTsKIAlJOTE1X1dSSVRFKFZTWU5DX0EsIGRldl9wcml2LT5zYXZlVlNZTkNfQSk7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0EsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9BKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKEZESV9SWEFfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEFfQ1RMKTsKKwkJSTkxNV9XUklURShGRElfVFhBX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfVFhBX0NUTCk7CisKKwkJSTkxNV9XUklURShQRkFfQ1RMXzEsIGRldl9wcml2LT5zYXZlUEZBX0NUTF8xKTsKKwkJSTkxNV9XUklURShQRkFfV0lOX1NaLCBkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fU1opOworCQlJOTE1X1dSSVRFKFBGQV9XSU5fUE9TLCBkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fUE9TKTsKKworCQlJOTE1X1dSSVRFKFRSQU5TX0hUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9BKTsKKwkJSTkxNV9XUklURShUUkFOU19IQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfSFNZTkNfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19BKTsKKwkJSTkxNV9XUklURShUUkFOU19WVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZTWU5DX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQSk7CisJfQogCiAJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCiAJSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7CkBAIC0zMzksMTQgKzQzMCwxNCBAQAogCiAJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLwogCWlmIChkZXZfcHJpdi0+c2F2ZURQTExfQiAmIERQTExfVkNPX0VOQUJMRSkgewotCQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IgJgorCQlJOTE1X1dSSVRFKGRwbGxfYl9yZWcsIGRldl9wcml2LT5zYXZlRFBMTF9CICYKIAkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOwogCQlEUk1fVURFTEFZKDE1MCk7CiAJfQotCUk5MTVfV1JJVEUoRlBCMCwgZGV2X3ByaXYtPnNhdmVGUEIwKTsKLQlJOTE1X1dSSVRFKEZQQjEsIGRldl9wcml2LT5zYXZlRlBCMSk7CisJSTkxNV9XUklURShmcGIwX3JlZywgZGV2X3ByaXYtPnNhdmVGUEIwKTsKKwlJOTE1X1dSSVRFKGZwYjFfcmVnLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOwogCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQik7CisJSTkxNV9XUklURShkcGxsX2JfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQik7CiAJRFJNX1VERUxBWSgxNTApOwogCWlmIChJU19JOTY1RyhkZXYpKQogCQlJOTE1X1dSSVRFKERQTExfQl9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQpOwpAQCAtMzU5LDcgKzQ1MCwyNCBAQAogCUk5MTVfV1JJVEUoVlRPVEFMX0IsIGRldl9wcml2LT5zYXZlVlRPVEFMX0IpOwogCUk5MTVfV1JJVEUoVkJMQU5LX0IsIGRldl9wcml2LT5zYXZlVkJMQU5LX0IpOwogCUk5MTVfV1JJVEUoVlNZTkNfQiwgZGV2X3ByaXYtPnNhdmVWU1lOQ19CKTsKLQlJOTE1X1dSSVRFKEJDTFJQQVRfQiwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0IpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoRkRJX1JYQl9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1JYQl9DVEwpOworCQlJOTE1X1dSSVRFKEZESV9UWEJfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9UWEJfQ1RMKTsKKworCQlJOTE1X1dSSVRFKFBGQl9DVExfMSwgZGV2X3ByaXYtPnNhdmVQRkJfQ1RMXzEpOworCQlJOTE1X1dSSVRFKFBGQl9XSU5fU1osIGRldl9wcml2LT5zYXZlUEZCX1dJTl9TWik7CisJCUk5MTVfV1JJVEUoUEZCX1dJTl9QT1MsIGRldl9wcml2LT5zYXZlUEZCX1dJTl9QT1MpOworCisJCUk5MTVfV1JJVEUoVFJBTlNfSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19CKTsKKwkJSTkxNV9XUklURShUUkFOU19IU1lOQ19CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hTWU5DX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9CKTsKKwkJSTkxNV9XUklURShUUkFOU19WQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfVlNZTkNfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WU1lOQ19CKTsKKwl9CiAKIAkvKiBSZXN0b3JlIHBsYW5lIGluZm8gKi8KIAlJOTE1X1dSSVRFKERTUEJTSVpFLCBkZXZfcHJpdi0+c2F2ZURTUEJTSVpFKTsKQEAgLTQwNCwyMSArNTEyLDQzIEBACiAJCWRldl9wcml2LT5zYXZlQ1VSU0laRSA9IEk5MTVfUkVBRChDVVJTSVpFKTsKIAogCS8qIENSVCBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoUENIX0FEUEEpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKKwl9CiAKIAkvKiBMVkRTIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MID0gSTkxNV9SRUFEKFBQX0NPTlRST0wpOwotCWRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TID0gSTkxNV9SRUFEKFBGSVRfUEdNX1JBVElPUyk7Ci0JZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMMik7Ci0JaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCi0JCWRldl9wcml2LT5zYXZlTFZEUyA9IEk5MTVfUkVBRChMVkRTKTsKLQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQQ0hfUFBfQ09OVFJPTCk7CisJCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9QQ0hfQ1RMMSk7CisJCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDIpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NQVV9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DUFVfQ1RMMik7CisJCWRldl9wcml2LT5zYXZlTFZEUyA9IEk5MTVfUkVBRChQQ0hfTFZEUyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MID0gSTkxNV9SRUFEKFBQX0NPTlRST0wpOworCQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfSElTVF9DVEwgPSBJOTE1X1JFQUQoQkxDX0hJU1RfQ1RMKTsKKwkJaWYgKElTX0k5NjVHKGRldikpCisJCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOworCQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJCWRldl9wcml2LT5zYXZlTFZEUyA9IEk5MTVfUkVBRChMVkRTKTsKKwl9CisKKwlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCA9IEk5MTVfUkVBRChQRklUX0NPTlRST0wpOwotCWRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTID0gSTkxNV9SRUFEKFBQX09OX0RFTEFZUyk7Ci0JZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTID0gSTkxNV9SRUFEKFBQX09GRl9ERUxBWVMpOwotCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTID0gSTkxNV9SRUFEKFBDSF9QUF9PTl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUENIX1BQX09GRl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUENIX1BQX0RJVklTT1IpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTID0gSTkxNV9SRUFEKFBQX09OX0RFTEFZUyk7CisJCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBQX0RJVklTT1IpOworCX0KIAogCS8qIERpc3BsYXkgUG9ydCBzdGF0ZSAqLwogCWlmIChTVVBQT1JUU19JTlRFR1JBVEVEX0RQKGRldikpIHsKQEAgLTQzNywxNiArNTY3LDIzIEBACiAJLyogRklYTUU6IHNhdmUgVFYgJiBTRFZPIHN0YXRlICovCiAKIAkvKiBGQkMgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOwotCWRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0xMX0JBU0UpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MMik7Ci0JZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisJaWYgKElTX0dNNDUoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSA9IEk5MTVfUkVBRChEUEZDX0NCX0JBU0UpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFID0gSTkxNV9SRUFEKEZCQ19DRkJfQkFTRSk7CisJCWRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0xMX0JBU0UpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKKwl9CiAKIAkvKiBWR0Egc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZVZHQTAgPSBJOTE1X1JFQUQoVkdBMCk7CiAJZGV2X3ByaXYtPnNhdmVWR0ExID0gSTkxNV9SRUFEKFZHQTEpOwogCWRldl9wcml2LT5zYXZlVkdBX1BEID0gSTkxNV9SRUFEKFZHQV9QRCk7Ci0JZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCA9IEk5MTVfUkVBRChWR0FDTlRSTCk7CisJaWYgKElTX0lHRE5HKGRldikpCisJCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoQ1BVX1ZHQUNOVFJMKTsKKwllbHNlCisJCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOwogCiAJaTkxNV9zYXZlX3ZnYShkZXYpOwogfQpAQCAtNDg1LDIyICs2MjIsNDEgQEAKIAkJSTkxNV9XUklURShDVVJTSVpFLCBkZXZfcHJpdi0+c2F2ZUNVUlNJWkUpOwogCiAJLyogQ1JUIHN0YXRlICovCi0JSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOworCWlmIChJU19JR0RORyhkZXYpKQorCQlJOTE1X1dSSVRFKFBDSF9BRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOworCWVsc2UKKwkJSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOwogCiAJLyogTFZEUyBzdGF0ZSAqLwotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShQQ0hfTFZEUywgZGV2X3ByaXYtPnNhdmVMVkRTKTsKKwl9IGVsc2UgaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCiAJCUk5MTVfV1JJVEUoTFZEUywgZGV2X3ByaXYtPnNhdmVMVkRTKTsKLQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKQorCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKIAotCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7Ci0JSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7Ci0JSTkxNV9XUklURShQUF9PTl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTKTsKLQlJOTE1X1dSSVRFKFBQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7Ci0JSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOwotCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKEJMQ19QV01fUENIX0NUTDEsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCQlJOTE1X1dSSVRFKEJMQ19QV01fUENIX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NQVV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX0NQVV9QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NQVV9DVEwyLCBkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTDIpOworCQlJOTE1X1dSSVRFKFBDSF9QUF9PTl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKwl9IGVsc2UgeworCQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOworCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfSElTVF9DVEwsIGRldl9wcml2LT5zYXZlQkxDX0hJU1RfQ1RMKTsKKwkJSTkxNV9XUklURShQUF9PTl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTKTsKKwkJSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOworCQlJOTE1X1dSSVRFKFBQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKwl9CiAKIAkvKiBEaXNwbGF5IFBvcnQgc3RhdGUgKi8KIAlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CkBAIC01MTEsMTMgKzY2NywyMiBAQAogCS8qIEZJWE1FOiByZXN0b3JlIFRWICYgU0RWTyBzdGF0ZSAqLwogCiAJLyogRkJDIGluZm8gKi8KLQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOwotCUk5MTVfV1JJVEUoRkJDX0xMX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wyLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMik7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisJaWYgKElTX0dNNDUoZGV2KSkgeworCQlnNHhfZGlzYWJsZV9mYmMoZGV2KTsKKwkJSTkxNV9XUklURShEUEZDX0NCX0JBU0UsIGRldl9wcml2LT5zYXZlRFBGQ19DQl9CQVNFKTsKKwl9IGVsc2UgeworCQlpOHh4X2Rpc2FibGVfZmJjKGRldik7CisJCUk5MTVfV1JJVEUoRkJDX0NGQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSk7CisJCUk5MTVfV1JJVEUoRkJDX0xMX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UpOworCQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOworCQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MKTsKKwl9CiAKIAkvKiBWR0Egc3RhdGUgKi8KLQlJOTE1X1dSSVRFKFZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShDUFVfVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOworCWVsc2UKKwkJSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CiAJSTkxNV9XUklURShWR0EwLCBkZXZfcHJpdi0+c2F2ZVZHQTApOwogCUk5MTVfV1JJVEUoVkdBMSwgZGV2X3ByaXYtPnNhdmVWR0ExKTsKIAlJOTE1X1dSSVRFKFZHQV9QRCwgZGV2X3ByaXYtPnNhdmVWR0FfUEQpOwpAQCAtNTQzLDggKzcwOCwxNyBAQAogCWk5MTVfc2F2ZV9kaXNwbGF5KGRldik7CiAKIAkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUlFUiA9IEk5MTVfUkVBRChJRVIpOwotCWRldl9wcml2LT5zYXZlSU1SID0gSTkxNV9SRUFEKElNUik7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVERUlFUiA9IEk5MTVfUkVBRChERUlFUik7CisJCWRldl9wcml2LT5zYXZlREVJTVIgPSBJOTE1X1JFQUQoREVJTVIpOworCQlkZXZfcHJpdi0+c2F2ZUdUSUVSID0gSTkxNV9SRUFEKEdUSUVSKTsKKwkJZGV2X3ByaXYtPnNhdmVHVElNUiA9IEk5MTVfUkVBRChHVElNUik7CisJCWRldl9wcml2LT5zYXZlRkRJX1JYQV9JTVIgPSBJOTE1X1JFQUQoRkRJX1JYQV9JTVIpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfSU1SID0gSTkxNV9SRUFEKEZESV9SWEJfSU1SKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUlFUiA9IEk5MTVfUkVBRChJRVIpOworCQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCX0KIAogCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwogCWRldl9wcml2LT5zYXZlRF9TVEFURSA9IEk5MTVfUkVBRChEX1NUQVRFKTsKQEAgLTYwOSw4ICs3ODMsMTcgQEAKIAlpOTE1X3Jlc3RvcmVfZGlzcGxheShkZXYpOwogCiAJLyogSW50ZXJydXB0IHN0YXRlICovCi0JSTkxNV9XUklURSAoSUVSLCBkZXZfcHJpdi0+c2F2ZUlFUik7Ci0JSTkxNV9XUklURSAoSU1SLCAgZGV2X3ByaXYtPnNhdmVJTVIpOworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoREVJRVIsIGRldl9wcml2LT5zYXZlREVJRVIpOworCQlJOTE1X1dSSVRFKERFSU1SLCBkZXZfcHJpdi0+c2F2ZURFSU1SKTsKKwkJSTkxNV9XUklURShHVElFUiwgZGV2X3ByaXYtPnNhdmVHVElFUik7CisJCUk5MTVfV1JJVEUoR1RJTVIsIGRldl9wcml2LT5zYXZlR1RJTVIpOworCQlJOTE1X1dSSVRFKEZESV9SWEFfSU1SLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SKTsKKwkJSTkxNV9XUklURShGRElfUlhCX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUik7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURSAoSUVSLCBkZXZfcHJpdi0+c2F2ZUlFUik7CisJCUk5MTVfV1JJVEUgKElNUiwgIGRldl9wcml2LT5zYXZlSU1SKTsKKwl9CiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlJOTE1X1dSSVRFIChEX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZURfU1RBVEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCmluZGV4IDU1NjdhNDAuLjAxODQwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKQEAgLTE1OCwxNiArMTU4LDE3IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOworCQkJICAgaTkxNV90cmFjZV9pcnFfZ2V0KGRldiwgc2Vxbm8pOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF9mbHVzaCwKQEAgLTE3OCwyMCArMTc5LDIwIEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubywgZmx1c2hfZG9tYWlucywgaW52YWxpZGF0ZV9kb21haW5zKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICBfX2ZpZWxkKHUzMiwgZmx1c2hfZG9tYWlucykKIAkJCSAgICAgX19maWVsZCh1MzIsIGludmFsaWRhdGVfZG9tYWlucykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgX19lbnRyeS0+Zmx1c2hfZG9tYWlucyA9IGZsdXNoX2RvbWFpbnM7CiAJCQkgICBfX2VudHJ5LT5pbnZhbGlkYXRlX2RvbWFpbnMgPSBpbnZhbGlkYXRlX2RvbWFpbnM7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSwgZmx1c2g9JTA0eCwgaW52YWxpZGF0ZT0lMDR4IiwKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1LCBmbHVzaD0lMDR4LCBpbnZhbGlkYXRlPSUwNHgiLAogCQkgICAgICBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vLAogCQkgICAgICBfX2VudHJ5LT5mbHVzaF9kb21haW5zLCBfX2VudHJ5LT5pbnZhbGlkYXRlX2RvbWFpbnMpCiApOwpAQCAtMjA0LDE2ICsyMDUsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZSwKQEAgLTIyMywxNiArMjI0LDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luLApAQCAtMjQyLDE2ICsyNDMsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kLApAQCAtMjYxLDE2ICsyNjIsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X3Jpbmdfd2FpdF9iZWdpbiwKQEAgLTI4MCwxNCArMjgxLDE0IEBACiAJICAgIFRQX0FSR1MoZGV2KSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwIiwgX19lbnRyeS0+ZGV2KQorCSAgICBUUF9wcmludGsoImRldj0ldSIsIF9fZW50cnktPmRldikKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfcmluZ193YWl0X2VuZCwKQEAgLTI5NywxNCArMjk4LDE0IEBACiAJICAgIFRQX0FSR1MoZGV2KSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwIiwgX19lbnRyeS0+ZGV2KQorCSAgICBUUF9wcmludGsoImRldj0ldSIsIF9fZW50cnktPmRldikKICk7CiAKICNlbmRpZiAvKiBfSTkxNV9UUkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCmluZGV4IDQzMzc0MTQuLjk2Y2QyNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKQEAgLTM1MSwyMCArMzUxLDE4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAJc3RydWN0IGJkYl9kcml2ZXJfZmVhdHVyZXMgKmRyaXZlcjsKIAotCS8qIHNldCBkZWZhdWx0IGZvciBjaGlwcyB3aXRob3V0IGVEUCAqLwotCWlmICghU1VQUE9SVFNfRURQKGRldikpIHsKLQkJZGV2X3ByaXYtPmVkcF9zdXBwb3J0ID0gMDsKLQkJcmV0dXJuOwotCX0KLQogCWRyaXZlciA9IGZpbmRfc2VjdGlvbihiZGIsIEJEQl9EUklWRVJfRkVBVFVSRVMpOwogCWlmICghZHJpdmVyKQogCQlyZXR1cm47CiAKLQlpZiAoZHJpdmVyLT5sdmRzX2NvbmZpZyA9PSBCREJfRFJJVkVSX0ZFQVRVUkVfRURQKQorCWlmIChkcml2ZXIgJiYgU1VQUE9SVFNfRURQKGRldikgJiYKKwkgICAgZHJpdmVyLT5sdmRzX2NvbmZpZyA9PSBCREJfRFJJVkVSX0ZFQVRVUkVfRURQKSB7CiAJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDE7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPmVkcF9zdXBwb3J0ID0gMDsKKwl9CiAKLQlpZiAoZHJpdmVyLT5kdWFsX2ZyZXF1ZW5jeSkKKwlpZiAoZHJpdmVyICYmIGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCiAJCWRldl9wcml2LT5yZW5kZXJfcmVjbG9ja19hdmFpbCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5M2ZmNmMwLi4zYmE2NTQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTQzLDYgKzk0Myw3IEBACiAgICAgY2xvY2subSA9IDUgKiAoY2xvY2subTEgKyAyKSArIChjbG9jay5tMiArIDIpOwogICAgIGNsb2NrLnAgPSAoY2xvY2sucDEgKiBjbG9jay5wMik7CiAgICAgY2xvY2suZG90ID0gOTYwMDAgKiBjbG9jay5tIC8gKGNsb2NrLm4gKyAyKSAvIGNsb2NrLnA7CisgICAgY2xvY2sudmNvID0gMDsKICAgICBtZW1jcHkoYmVzdF9jbG9jaywgJmNsb2NrLCBzaXplb2YoaW50ZWxfY2xvY2tfdCkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTI2MCw5ICsxMjYxLDExIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogUHJlLWk5NjUgbmVlZHMgdG8gaW5zdGFsbCBhIGZlbmNlIGZvciB0aWxlZCBzY2FuLW91dCAqLwotCWlmICghSVNfSTk2NUcoZGV2KSAmJgotCSAgICBvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKKwkvKiBJbnN0YWxsIGEgZmVuY2UgZm9yIHRpbGVkIHNjYW4tb3V0LiBQcmUtaTk2NSBhbHdheXMgbmVlZHMgYSBmZW5jZSwKKwkgKiB3aGVyZWFzIDk2NSsgb25seSByZXF1aXJlcyBhIGZlbmNlIGlmIHVzaW5nIGZyYW1lYnVmZmVyIGNvbXByZXNzaW9uLgorCSAqIEZvciBzaW1wbGljaXR5LCB3ZSBhbHdheXMgaW5zdGFsbCBhIGZlbmNlIGFzIHRoZSBjb3N0IGlzIG5vdCB0aGF0IG9uZXJvdXMuCisJICovCisJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSAmJgogCSAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkgewogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyhvYmopOwogCQlpZiAocmV0ICE9IDApIHsKQEAgLTE1MTMsNyArMTUxNiw3IEBACiAJCS8qIEVuYWJsZSBwYW5lbCBmaXR0aW5nIGZvciBMVkRTICovCiAJCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgewogCQkJdGVtcCA9IEk5MTVfUkVBRChwZl9jdGxfcmVnKTsKLQkJCUk5MTVfV1JJVEUocGZfY3RsX3JlZywgdGVtcCB8IFBGX0VOQUJMRSk7CisJCQlJOTE1X1dSSVRFKHBmX2N0bF9yZWcsIHRlbXAgfCBQRl9FTkFCTEUgfCBQRl9GSUxURVJfTUVEXzN4Myk7CiAKIAkJCS8qIGN1cnJlbnRseSBmdWxsIGFzcGVjdCAqLwogCQkJSTkxNV9XUklURShwZl93aW5fcG9zLCAwKTsKQEAgLTE4MDEsNiArMTgwNCw4IEBACiAJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgogCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgogCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOworCiAJCS8qIEVuYWJsZSB0aGUgRFBMTCAqLwogCQl0ZW1wID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKIAkJaWYgKCh0ZW1wICYgRFBMTF9WQ09fRU5BQkxFKSA9PSAwKSB7CkBAIC0xODM4LDcgKzE4NDMsNiBAQAogCiAJCS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGVuYWJsZSBpZiBpdCdzIG9uIHRoaXMgcGlwZSAqLwogCQkvL2ludGVsX2NydGNfZHBtc192aWRlbyhjcnRjLCB0cnVlKTsgVE9ETwotCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOwogCWJyZWFrOwogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CiAJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGRldik7CkBAIC0yMDgyLDcgKzIwODYsNyBAQAogI2RlZmluZSBMSU5LX04gMHg4MDAwMAogCiBzdGF0aWMgdm9pZAotaWdkbmdfY29tcHV0ZV9tX24oaW50IGJ5dGVzX3Blcl9waXhlbCwgaW50IG5sYW5lcywKK2lnZG5nX2NvbXB1dGVfbV9uKGludCBiaXRzX3Blcl9waXhlbCwgaW50IG5sYW5lcywKIAkJaW50IHBpeGVsX2Nsb2NrLCBpbnQgbGlua19jbG9jaywKIAkJc3RydWN0IGZkaV9tX24gKm1fbikKIHsKQEAgLTIwOTIsNyArMjA5Niw4IEBACiAKIAl0ZW1wID0gKHU2NCkgREFUQV9OICogcGl4ZWxfY2xvY2s7CiAJdGVtcCA9IGRpdl91NjQodGVtcCwgbGlua19jbG9jayk7Ci0JbV9uLT5nbWNoX20gPSBkaXZfdTY0KHRlbXAgKiBieXRlc19wZXJfcGl4ZWwsIG5sYW5lcyk7CisJbV9uLT5nbWNoX20gPSBkaXZfdTY0KHRlbXAgKiBiaXRzX3Blcl9waXhlbCwgbmxhbmVzKTsKKwltX24tPmdtY2hfbSA+Pj0gMzsgLyogY29udmVydCB0byBieXRlc19wZXJfcGl4ZWwgKi8KIAltX24tPmdtY2hfbiA9IERBVEFfTjsKIAlmZGlfcmVkdWNlX3JhdGlvKCZtX24tPmdtY2hfbSwgJm1fbi0+Z21jaF9uKTsKIApAQCAtMjE0MCw2ICsyMTQ1LDEzIEBACiAJSUdEX0NVUlNPUl9HVUFSRF9XTSwKIAlJR0RfRklGT19MSU5FX1NJWkUKIH07CitzdGF0aWMgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgZzR4X3dtX2luZm8gPSB7CisJRzRYX0ZJRk9fU0laRSwKKwlHNFhfTUFYX1dNLAorCUc0WF9NQVhfV00sCisJMiwKKwlHNFhfRklGT19MSU5FX1NJWkUsCit9Owogc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGk5NDVfd21faW5mbyA9IHsKIAlJOTQ1X0ZJRk9fU0laRSwKIAlJOTE1X01BWF9XTSwKQEAgLTI0MzAsMTcgKzI0NDIsNzQgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgZzR4X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdW51c2VkLCBpbnQgdW51c2VkMiwKLQkJCSAgaW50IHVudXNlZDMsIGludCB1bnVzZWQ0KQorc3RhdGljIHZvaWQgZzR4X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCAgaW50IHBsYW5lYV9jbG9jaywKKwkJCSAgaW50IHBsYW5lYl9jbG9jaywgaW50IHNyX2hkaXNwbGF5LCBpbnQgcGl4ZWxfc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBmd19ibGNfc2VsZiA9IEk5MTVfUkVBRChGV19CTENfU0VMRik7CisJaW50IHRvdGFsX3NpemUsIGNhY2hlbGluZV9zaXplOworCWludCBwbGFuZWFfd20sIHBsYW5lYl93bSwgY3Vyc29yYV93bSwgY3Vyc29yYl93bSwgY3Vyc29yX3NyOworCXN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIHBsYW5lYV9wYXJhbXMsIHBsYW5lYl9wYXJhbXM7CisJdW5zaWduZWQgbG9uZyBsaW5lX3RpbWVfdXM7CisJaW50IHNyX2Nsb2NrLCBzcl9lbnRyaWVzID0gMCwgZW50cmllc19yZXF1aXJlZDsKIAotCWlmIChpOTE1X3Bvd2Vyc2F2ZSkKLQkJZndfYmxjX3NlbGYgfD0gRldfQkxDX1NFTEZfRU47Ci0JZWxzZQotCQlmd19ibGNfc2VsZiAmPSB+RldfQkxDX1NFTEZfRU47Ci0JSTkxNV9XUklURShGV19CTENfU0VMRiwgZndfYmxjX3NlbGYpOworCS8qIENyZWF0ZSBjb3BpZXMgb2YgdGhlIGJhc2Ugc2V0dGluZ3MgZm9yIGVhY2ggcGlwZSAqLworCXBsYW5lYV9wYXJhbXMgPSBwbGFuZWJfcGFyYW1zID0gZzR4X3dtX2luZm87CisKKwkvKiBHcmFiIGEgY291cGxlIG9mIGdsb2JhbCB2YWx1ZXMgYmVmb3JlIHdlIG92ZXJ3cml0ZSB0aGVtICovCisJdG90YWxfc2l6ZSA9IHBsYW5lYV9wYXJhbXMuZmlmb19zaXplOworCWNhY2hlbGluZV9zaXplID0gcGxhbmVhX3BhcmFtcy5jYWNoZWxpbmVfc2l6ZTsKKworCS8qCisJICogTm90ZTogd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgZm9yIHZhcmlvdXMgY2xvY2sgJgorCSAqIGxhdGVuY3kgdmFsdWVzLgorCSAqIGNsb2NrcyBnbyBmcm9tIGEgZmV3IHRob3VzYW5kIHRvIHNldmVyYWwgaHVuZHJlZCB0aG91c2FuZC4KKwkgKiBsYXRlbmN5IGlzIHVzdWFsbHkgYSBmZXcgdGhvdXNhbmQKKwkgKi8KKwllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWFfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKiBsYXRlbmN5X25zKSAvCisJCTEwMDA7CisJZW50cmllc19yZXF1aXJlZCAvPSBHNFhfRklGT19MSU5FX1NJWkU7CisJcGxhbmVhX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYV9wYXJhbXMuZ3VhcmRfc2l6ZTsKKworCWVudHJpZXNfcmVxdWlyZWQgPSAoKHBsYW5lYl9jbG9jayAvIDEwMDApICogcGl4ZWxfc2l6ZSAqIGxhdGVuY3lfbnMpIC8KKwkJMTAwMDsKKwllbnRyaWVzX3JlcXVpcmVkIC89IEc0WF9GSUZPX0xJTkVfU0laRTsKKwlwbGFuZWJfd20gPSBlbnRyaWVzX3JlcXVpcmVkICsgcGxhbmViX3BhcmFtcy5ndWFyZF9zaXplOworCisJY3Vyc29yYV93bSA9IGN1cnNvcmJfd20gPSAxNjsKKwljdXJzb3Jfc3IgPSAzMjsKKworCURSTV9ERUJVRygiRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkXG4iLCBwbGFuZWFfd20sIHBsYW5lYl93bSk7CisKKwkvKiBDYWxjIHNyIGVudHJpZXMgZm9yIG9uZSBwbGFuZSBjb25maWdzICovCisJaWYgKHNyX2hkaXNwbGF5ICYmICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spKSB7CisJCS8qIHNlbGYtcmVmcmVzaCBoYXMgbXVjaCBoaWdoZXIgbGF0ZW5jeSAqLworCQljb25zdCBzdGF0aWMgaW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKKworCQlzcl9jbG9jayA9IHBsYW5lYV9jbG9jayA/IHBsYW5lYV9jbG9jayA6IHBsYW5lYl9jbG9jazsKKwkJbGluZV90aW1lX3VzID0gKChzcl9oZGlzcGxheSAqIDEwMDApIC8gc3JfY2xvY2spOworCisJCS8qIFVzZSBucy91cyB0aGVuIGRpdmlkZSB0byBwcmVzZXJ2ZSBwcmVjaXNpb24gKi8KKwkJc3JfZW50cmllcyA9ICgoKHNyX2xhdGVuY3lfbnMgLyBsaW5lX3RpbWVfdXMpICsgMSkgKgorCQkJICAgICAgcGl4ZWxfc2l6ZSAqIHNyX2hkaXNwbGF5KSAvIDEwMDA7CisJCXNyX2VudHJpZXMgPSByb3VuZHVwKHNyX2VudHJpZXMgLyBjYWNoZWxpbmVfc2l6ZSwgMSk7CisJCURSTV9ERUJVRygic2VsZi1yZWZyZXNoIGVudHJpZXM6ICVkXG4iLCBzcl9lbnRyaWVzKTsKKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU4pOworCX0KKworCURSTV9ERUJVRygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSBBOiAlZCwgQjogJWQsIFNSICVkXG4iLAorCQkgIHBsYW5lYV93bSwgcGxhbmViX3dtLCBzcl9lbnRyaWVzKTsKKworCXBsYW5lYV93bSAmPSAweDNmOworCXBsYW5lYl93bSAmPSAweDNmOworCisJSTkxNV9XUklURShEU1BGVzEsIChzcl9lbnRyaWVzIDw8IERTUEZXX1NSX1NISUZUKSB8CisJCSAgIChjdXJzb3JiX3dtIDw8IERTUEZXX0NVUlNPUkJfU0hJRlQpIHwKKwkJICAgKHBsYW5lYl93bSA8PCBEU1BGV19QTEFORUJfU0hJRlQpIHwgcGxhbmVhX3dtKTsKKwlJOTE1X1dSSVRFKERTUEZXMiwgKEk5MTVfUkVBRChEU1BGVzIpICYgRFNQRldfQ1VSU09SQV9NQVNLKSB8CisJCSAgIChjdXJzb3JhX3dtIDw8IERTUEZXX0NVUlNPUkFfU0hJRlQpKTsKKwkvKiBIUExMIG9mZiBpbiBTUiBoYXMgc29tZSBpc3N1ZXMgb24gRzR4Li4uIGRpc2FibGUgaXQgKi8KKwlJOTE1X1dSSVRFKERTUEZXMywgKEk5MTVfUkVBRChEU1BGVzMpICYgfkRTUEZXX0hQTExfU1JfRU4pIHwKKwkJICAgKGN1cnNvcl9zciA8PCBEU1BGV19DVVJTT1JfU1JfU0hJRlQpKTsKIH0KIAogc3RhdGljIHZvaWQgaTk2NV91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVudXNlZCwgaW50IHVudXNlZDIsCkBAIC0yNTg2LDYgKzI2NTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgcGxhbmVhX2Nsb2NrID0gMCwgcGxhbmViX2Nsb2NrID0gMCwgc3JfY2xvY2sgPSAwOwogCWludCBlbmFibGVkID0gMCwgcGl4ZWxfc2l6ZSA9IDA7CiAKKwlpZiAoIWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSkKKwkJcmV0dXJuOworCiAJLyogR2V0IHRoZSBjbG9jayBjb25maWcgZnJvbSBib3RoIHBsYW5lcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwpAQCAtMjc2Myw3ICsyODM1LDcgQEAKIAogCS8qIEZESSBsaW5rICovCiAJaWYgKElTX0lHRE5HKGRldikpIHsKLQkJaW50IGxhbmUsIGxpbmtfYnc7CisJCWludCBsYW5lLCBsaW5rX2J3LCBicHA7CiAJCS8qIGVEUCBkb2Vzbid0IHJlcXVpcmUgRkRJIGxpbmssIHNvIGp1c3Qgc2V0IERQIE0vTgogCQkgICBhY2NvcmRpbmcgdG8gY3VycmVudCBsaW5rIGNvbmZpZyAqLwogCQlpZiAoaXNfZWRwKSB7CkBAIC0yNzgyLDEwICsyODU0LDcyIEBACiAJCQlsYW5lID0gNDsKIAkJCWxpbmtfYncgPSAyNzAwMDA7CiAJCX0KLQkJaWdkbmdfY29tcHV0ZV9tX24oMywgbGFuZSwgdGFyZ2V0X2Nsb2NrLAorCisJCS8qIGRldGVybWluZSBwYW5lbCBjb2xvciBkZXB0aCAqLworCQl0ZW1wID0gSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CisKKwkJc3dpdGNoICh0ZW1wICYgUElQRV9CUENfTUFTSykgeworCQljYXNlIFBJUEVfOEJQQzoKKwkJCWJwcCA9IDI0OworCQkJYnJlYWs7CisJCWNhc2UgUElQRV8xMEJQQzoKKwkJCWJwcCA9IDMwOworCQkJYnJlYWs7CisJCWNhc2UgUElQRV82QlBDOgorCQkJYnBwID0gMTg7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFXzEyQlBDOgorCQkJYnBwID0gMzY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigidW5rbm93biBwaXBlIGJwYyB2YWx1ZVxuIik7CisJCQlicHAgPSAyNDsKKwkJfQorCisJCWlnZG5nX2NvbXB1dGVfbV9uKGJwcCwgbGFuZSwgdGFyZ2V0X2Nsb2NrLAogCQkJCSAgbGlua19idywgJm1fbik7CiAJfQogCisJLyogSXJvbmxha2U6IHRyeSB0byBzZXR1cCBkaXNwbGF5IHJlZiBjbG9jayBiZWZvcmUgRFBMTAorCSAqIGVuYWJsaW5nLiBUaGlzIGlzIG9ubHkgdW5kZXIgZHJpdmVyJ3MgY29udHJvbCBhZnRlcgorCSAqIFBDSCBCIHN0ZXBwaW5nLCBwcmV2aW91cyBjaGlwc2V0IHN0ZXBwaW5nIHNob3VsZCBiZQorCSAqIGlnbm9yaW5nIHRoaXMgc2V0dGluZy4KKwkgKi8KKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQl0ZW1wID0gSTkxNV9SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCQkvKiBBbHdheXMgZW5hYmxlIG5vbnNwcmVhZCBzb3VyY2UgKi8KKwkJdGVtcCAmPSB+RFJFRl9OT05TUFJFQURfU09VUkNFX01BU0s7CisJCXRlbXAgfD0gRFJFRl9OT05TUFJFQURfU09VUkNFX0VOQUJMRTsKKwkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCisJCXRlbXAgJj0gfkRSRUZfU1NDX1NPVVJDRV9NQVNLOworCQl0ZW1wIHw9IERSRUZfU1NDX1NPVVJDRV9FTkFCTEU7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQl1ZGVsYXkoMjAwKTsKKworCQlpZiAoaXNfZWRwKSB7CisJCQlpZiAoZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYykgeworCQkJCXRlbXAgfD0gRFJFRl9TU0MxX0VOQUJMRTsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQkJCXVkZWxheSgyMDApOworCisJCQkJdGVtcCAmPSB+RFJFRl9DUFVfU09VUkNFX09VVFBVVF9NQVNLOworCQkJCXRlbXAgfD0gRFJFRl9DUFVfU09VUkNFX09VVFBVVF9ET1dOU1BSRUFEOworCQkJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCQkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCQkJfSBlbHNlIHsKKwkJCQl0ZW1wIHw9IERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTk9OU1BSRUFEOworCQkJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCQkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCQkJfQorCQl9CisJfQorCiAJaWYgKElTX0lHRChkZXYpKSB7CiAJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAJCWlmIChoYXNfcmVkdWNlZF9jbG9jaykKQEAgLTI5MzYsNiArMzA3MCw4IEBACiAKIAkJbHZkcyA9IEk5MTVfUkVBRChsdmRzX3JlZyk7CiAJCWx2ZHMgfD0gTFZEU19QT1JUX0VOIHwgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAgfCBMVkRTX1BJUEVCX1NFTEVDVDsKKwkJLyogc2V0IHRoZSBjb3JyZXNwb25zZGluZyBMVkRTX0JPUkRFUiBiaXQgKi8KKwkJbHZkcyB8PSBkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0czsKIAkJLyogU2V0IHRoZSBCMC1CMyBkYXRhIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gd2hldGhlciB3ZSdyZSBnb2luZyB0bwogCQkgKiBzZXQgdGhlIERQTExzIGZvciBkdWFsLWNoYW5uZWwgbW9kZSBvciBub3QuCiAJCSAqLwpAQCAtMzA5NSw3ICszMjMxLDYgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKIAlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7CiAJdWludDMyX3QgY29udHJvbCA9IChwaXBlID09IDApID8gQ1VSQUNOVFIgOiBDVVJCQ05UUjsKIAl1aW50MzJfdCBiYXNlID0gKHBpcGUgPT0gMCkgPyBDVVJBQkFTRSA6IENVUkJCQVNFOwogCXVpbnQzMl90IHRlbXAgPSBJOTE1X1JFQUQoY29udHJvbCk7CkBAIC0zMTgyLDkgKzMzMTcsNiBAQAogCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShpbnRlbF9jcnRjLT5jdXJzb3JfYm8pOwogCX0KIAotCWlmICgoSVNfSTk2NUcoZGV2KSB8fCBwbGFuZSA9PSAwKSkKLQkJaW50ZWxfdXBkYXRlX2ZiYyhjcnRjLCAmY3J0Yy0+bW9kZSk7Ci0KIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gYWRkcjsKQEAgLTMyNDQsNiArMzM3NiwxNiBAQAogCWludGVsX2NydGMtPmx1dF9iW3JlZ25vXSA9IGJsdWUgPj4gODsKIH0KIAordm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJICAgICB1MTYgKmJsdWUsIGludCByZWdubykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkqcmVkID0gaW50ZWxfY3J0Yy0+bHV0X3JbcmVnbm9dIDw8IDg7CisJKmdyZWVuID0gaW50ZWxfY3J0Yy0+bHV0X2dbcmVnbm9dIDw8IDg7CisJKmJsdWUgPSBpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPDwgODsKK30KKwogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKIAkJCQkgdTE2ICpibHVlLCB1aW50MzJfdCBzaXplKQogewpAQCAtMzgzNSw2ICszOTc3LDcgQEAKIAkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCiAJLnByZXBhcmUgPSBpbnRlbF9jcnRjX3ByZXBhcmUsCiAJLmNvbW1pdCA9IGludGVsX2NydGNfY29tbWl0LAorCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7CkBAIC00MTE3LDcgKzQyNjAsOSBAQAogCSAqIERpc2FibGUgY2xvY2sgZ2F0aW5nIHJlcG9ydGVkIHRvIHdvcmsgaW5jb3JyZWN0bHkgYWNjb3JkaW5nIHRvIHRoZQogCSAqIHNwZWNzLCBidXQgZW5hYmxlIGFzIG11Y2ggZWxzZSBhcyB3ZSBjYW4uCiAJICovCi0JaWYgKElTX0c0WChkZXYpKSB7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJdWludDMyX3QgZHNwY2xrX2dhdGU7CiAJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDEsIDApOwogCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QyLCBWRl9VTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CkBAIC00MjA1LDcgKzQzNTAsOSBAQAogCQkJaTgzMF9nZXRfZGlzcGxheV9jbG9ja19zcGVlZDsKIAogCS8qIEZvciBGSUZPIHdhdGVybWFyayB1cGRhdGVzICovCi0JaWYgKElTX0c0WChkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBOVUxMOworCWVsc2UgaWYgKElTX0c0WChkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBnNHhfdXBkYXRlX3dtOwogCWVsc2UgaWYgKElTX0k5NjVHKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGk5NjVfdXBkYXRlX3dtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggZjQ4NTZhNS4uZDgzNDQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC00MDAsNyArNDAwLDcgQEAKIHsKIAlzdHJ1Y3QgaW50ZWxfZHBfcHJpdiAgICpkcF9wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKIAotCURSTV9FUlJPUigiaTJjX2luaXQgJXNcbiIsIG5hbWUpOworCURSTV9ERUJVR19LTVMoImkyY19pbml0ICVzXG4iLCBuYW1lKTsKIAlkcF9wcml2LT5hbGdvLnJ1bm5pbmcgPSBmYWxzZTsKIAlkcF9wcml2LT5hbGdvLmFkZHJlc3MgPSAwOwogCWRwX3ByaXYtPmFsZ28uYXV4X2NoID0gaW50ZWxfZHBfaTJjX2F1eF9jaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggOGFhNGI3Zi4uZWY2MWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE3NSw2ICsxNzUsOCBAQAogZXh0ZXJuIHZvaWQgaW50ZWxmYl9yZXN0b3JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pOworZXh0ZXJuIHZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCQkgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOwogCiBleHRlcm4gaW50IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IDdiYTRhMjMyLi4yYjBmZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTYwLDEwICs2MCwxMiBAQAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZmJfZ2FtbWFfc2V0LAorCS5nYW1tYV9nZXQgPSBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIApAQCAtMTEwLDYgKzExMiw3IEBACiBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLCB1aW50MzJfdCBzdXJmYWNlX2JwcCwKIAkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0xMjIsMTIgKzEyNSwxNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKIAlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCisJLyogd2UgZG9uJ3QgZG8gcGFja2VkIDI0YnBwICovCisJaWYgKHN1cmZhY2VfYnBwID09IDI0KQorCQlzdXJmYWNlX2JwcCA9IDMyOworCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwogCi0JbW9kZV9jbWQuYnBwID0gMzI7CisJbW9kZV9jbWQuYnBwID0gc3VyZmFjZV9icHA7CiAJbW9kZV9jbWQucGl0Y2ggPSBBTElHTihtb2RlX2NtZC53aWR0aCAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KSwgNjQpOwotCW1vZGVfY21kLmRlcHRoID0gMjQ7CisJbW9kZV9jbWQuZGVwdGggPSBzdXJmYWNlX2RlcHRoOwogCiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjA1LDcgKzIxMiw3IEBACiAKIC8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKLQlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7CiAJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZG4ndCBleHBvc2UgbW1pbyBzcGFjZSBhdCBhbGwgKi8KQEAgLTI0Myw3ICsyNTAsNyBAQAogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoIlxuIik7Ci0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCBpbnRlbGZiX2NyZWF0ZSk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCAzMiwgaW50ZWxmYl9jcmVhdGUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGludGVsZmJfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGZhMzA0ZTEuLjY2M2FiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKTsKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKIAlpbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfSERNSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCA5OGFlM2Q3Li4wNTU5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArIHZzeW5jX3BvczsKIAkJLyoga2VlcCB0aGUgdnN5bmMgd2lkdGggY29uc3RhbnQgKi8KIAkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPQotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfd2lkdGg7CisJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIHZzeW5jX3dpZHRoOwogCQlib3JkZXIgPSAxOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX1NDQUxFX0FTUEVDVDoKQEAgLTUyNiw2ICs1MjYsMTQgQEAKIAlsdmRzX3ByaXYtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKIAlsdmRzX3ByaXYtPnBmaXRfcGdtX3JhdGlvcyA9IHBmaXRfcGdtX3JhdGlvczsKIAkvKgorCSAqIFdoZW4gdGhlcmUgZXhpc3RzIHRoZSBib3JkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIExWRFNfQk9SRFIKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoYm9yZGVyKQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyB8PSBMVkRTX0JPUkRFUl9FTkFCTEU7CisJZWxzZQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyAmPSB+KExWRFNfQk9SREVSX0VOQUJMRSk7CisJLyoKIAkgKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQogCSAqIHBhbmVscyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQogCSAqIHVzZXIncyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgpAQCAtNjU2LDYgKzY2NCwxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CisgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgorICogIC0gd2UgdXNlIGl0IGFzIGEgIm9ubHkgb25jZSIgYml0IChpZSB3ZSBpZ25vcmUKKyAqICAgIGR1cGxpY2F0ZSBldmVudHMgd2hlcmUgaXQgd2FzIGFscmVhZHkgcHJvcGVybHkKKyAqICAgIHNldC9yZXNldCkKKyAqICAtIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRocyB3aWxsIGFsc28gc2V0IGl0IHRvCisgKiAgICB6ZXJvLCBzaW5jZSB0aGV5IHJlc3RvcmUgdGhlIG1vZGUgKCJsaWQgb3BlbiIpLgorICovCiBzdGF0aWMgaW50IGludGVsX2xpZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgdm9pZCAqdW51c2VkKQogewpAQCAtNjYzLDEzICs2ODAsMTkgQEAKIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAotCWlmIChhY3BpX2xpZF9vcGVuKCkgJiYgIWRldl9wcml2LT5zdXNwZW5kZWQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlpZiAoIWFjcGlfbGlkX29wZW4oKSkgeworCQlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAxOworCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAotCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldl9wcml2LT5kZXYpOworCWlmICghZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IGM2NGVhYjQuLjljYTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTA4Miw3ICsxMDgyLDggQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpICogMTAwMCkKKwkJCQk8IDEwMDApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitta3JlZ3RhYmxlCisqX3JlZ19zYWZlLmgKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDlhMjg5MjMuLmI1NzEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDZhMDE1OTIuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1NpemUpOwotCWNvbnZfcGFyYW0udXNWX0JsYW5raW5nX1RpbWUgPQotCSAgICBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfQmxhbmtpbmdfVGltZSk7Ci0JY29udl9wYXJhbS51c0hfU3luY09mZnNldCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9TeW5jT2Zmc2V0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9TeW5jT2Zmc2V0ID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1N5bmNPZmZzZXQpOwotCWNvbnZfcGFyYW0udXNWX1N5bmNXaWR0aCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9TeW5jV2lkdGgpOwotCWNvbnZfcGFyYW0uc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0KLQkgICAgY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKLQljb252X3BhcmFtLnVjQ1JUQyA9IGNydGNfcGFyYW0tPnVjQ1JUQzsKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy51c0hfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaGRpc3BsYXkpOworCWFyZ3MudXNIX0JsYW5raW5nX1RpbWUgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KTsKKwlhcmdzLnVzVl9TaXplID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfQmxhbmtpbmdfVGltZSA9CisJICAgIGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNIX1N5bmNPZmZzZXQgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9TeW5jT2Zmc2V0ID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNWX1N5bmNXaWR0aCA9CisJCWNwdV90b19sZTE2KG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJLyphcmdzLnVjSF9Cb3JkZXIgPSBtb2RlLT5oYm9yZGVyOyovCisJLyphcmdzLnVjVl9Cb3JkZXIgPSBtb2RlLT52Ym9yZGVyOyovCisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJbWlzYyB8PSBBVE9NX1ZTWU5DX1BPTEFSSVRZOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQltaXNjIHw9IEFUT01fSFNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19DU1lOQykKKwkJbWlzYyB8PSBBVE9NX0NPTVBPU0lURVNZTkM7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCW1pc2MgfD0gQVRPTV9JTlRFUkxBQ0U7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQltaXNjIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisKKwlhcmdzLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGNwdV90b19sZTE2KG1pc2MpOworCWFyZ3MudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKIAlwcmludGsoImV4ZWN1dGluZyBzZXQgY3J0YyBkdGQgdGltaW5nXG4iKTsKLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZjb252X3BhcmFtKTsKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAotdm9pZCBhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqCi0JCQkgICAgICBjcnRjX3BhcmFtKQorc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNvbnZfcGFyYW07CisJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVGltaW5nKTsKKwl1MTYgbWlzYyA9IDA7CiAKLQljb252X3BhcmFtLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c0hfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9EaXNwKTsKLQljb252X3BhcmFtLnVzSF9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c1ZfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9EaXNwKTsKLQljb252X3BhcmFtLnVzVl9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzVl9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JY29udl9wYXJhbS51Y0NSVEMgPSBjcnRjX3BhcmFtLT51Y0NSVEM7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuUmlnaHQgPSBjcnRjX3BhcmFtLT51Y092ZXJzY2FuUmlnaHQ7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuTGVmdCA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5MZWZ0OwotCWNvbnZfcGFyYW0udWNPdmVyc2NhbkJvdHRvbSA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5Cb3R0b207Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuVG9wID0gY3J0Y19wYXJhbS0+dWNPdmVyc2NhblRvcDsKLQljb252X3BhcmFtLnVjUmVzZXJ2ZWQgPSBjcnRjX3BhcmFtLT51Y1Jlc2VydmVkOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaHRvdGFsKTsKKwlhcmdzLnVzSF9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19zdGFydCk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfdnRvdGFsKTsKKwlhcmdzLnVzVl9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJYXJncy51c1ZfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQorCQltaXNjIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCW1pc2MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQorCQltaXNjIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJbWlzYyB8PSBBVE9NX0lOVEVSTEFDRTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCW1pc2MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKKworCWFyZ3Muc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gY3B1X3RvX2xlMTYobWlzYyk7CisJYXJncy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAogCXByaW50aygiZXhlY3V0aW5nIHNldCBjcnRjIHRpbWluZ1xuIik7Ci0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmY29udl9wYXJhbSk7CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21iaW9zX3NldF9zcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBOVUxMOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMKTsKKwlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiBhcmdzOworCUVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgbGVnYWN5X2FyZ3M7CisJdWludDE2X3QgcGVyY2VudGFnZSA9IDA7CisJdWludDhfdCB0eXBlID0gMCwgc3RlcCA9IDAsIGRlbGF5ID0gMCwgcmFuZ2UgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCS8qIG9ubHkgZW5hYmxlIHNwcmVhZCBzcGVjdHJ1bSBvbiBMVkRTICovCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWcgJiYgZGlnLT5zcykgeworCQkJCQlwZXJjZW50YWdlID0gZGlnLT5zcy0+cGVyY2VudGFnZTsKKwkJCQkJdHlwZSA9IGRpZy0+c3MtPnR5cGU7CisJCQkJCXN0ZXAgPSBkaWctPnNzLT5zdGVwOworCQkJCQlkZWxheSA9IGRpZy0+c3MtPmRlbGF5OworCQkJCQlyYW5nZSA9IGRpZy0+c3MtPnJhbmdlOworCQkJCX0gZWxzZSBpZiAoZW5hYmxlKQorCQkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGVuYWJsZSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmFkZW9uX2VuY29kZXIpCisJCXJldHVybjsKKworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwkJYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOworCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcCA9IHN0ZXA7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bURlbGF5ID0gZGVsYXk7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVJhbmdlID0gcmFuZ2U7CisJCWFyZ3MudWNQcGxsID0gcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJYXJncy51Y0VuYWJsZSA9IGVuYWJsZTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZsZWdhY3lfYXJncywgMCwgc2l6ZW9mKGxlZ2FjeV9hcmdzKSk7CisJCWxlZ2FjeV9hcmdzLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOworCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKKwkJbGVnYWN5X2FyZ3MudWNFbmFibGUgPSBlbmFibGU7CisJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmxlZ2FjeV9hcmdzKTsKKwl9CiB9CiAKIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCkBAIC0zMzMsMTIgKzQxNywxMyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOworCWludCBpbmRleDsKIAlTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKnNwYzFfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgKnNwYzJfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgKnNwYzNfcHRyOwotCXVpbnQzMl90IHNjbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IHBsbF9jbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IGFkanVzdGVkX2Nsb2NrOwogCXVpbnQzMl90IHJlZl9kaXYgPSAwLCBmYl9kaXYgPSAwLCBmcmFjX2ZiX2RpdiA9IDAsIHBvc3RfZGl2ID0gMDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsOwogCWludCBwbGxfZmxhZ3MgPSAwOwpAQCAtMzQ2LDggKzQzMSw2IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJdWludDMyX3Qgc3NfY250bDsKLQogCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKQEAgLTM1OCwxNSArNDQxLDYgQEAKIAkJCXBsbF9mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9ISUdIX0ZCX0RJVjsKIAkJZWxzZQogCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCi0JCS8qIGRpc2FibGUgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGZvciBub3cgLS0gdGhhbmtzIEhlZHkgTGFtYXJyICovCi0JCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCQlzc19jbnRsID0gUlJFRzMyKEFWSVZPX1AxUExMX0lOVF9TU19DTlRMKTsKLQkJCVdSRUczMihBVklWT19QMVBMTF9JTlRfU1NfQ05UTCwgc3NfY250bCAmIH4xKTsKLQkJfSBlbHNlIHsKLQkJCXNzX2NudGwgPSBSUkVHMzIoQVZJVk9fUDJQTExfSU5UX1NTX0NOVEwpOwotCQkJV1JFRzMyKEFWSVZPX1AyUExMX0lOVF9TU19DTlRMLCBzc19jbnRsICYgfjEpOwotCQl9CiAJfSBlbHNlIHsKIAkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC0zOTMsMTQgKzQ2Nyw0MyBAQAogCQl9CiAJfQogCisJLyogRENFMysgaGFzIGFuIEFkanVzdERpc3BsYXlQbGwgdGhhdCB3aWxsIGFkanVzdCB0aGUgcGl4ZWwgY2xvY2sKKwkgKiBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgZW5jb2Rlci90cmFuc21pdHRlciB0byB3b3JrIGFyb3VuZAorCSAqIHNwZWNpYWwgaHcgcmVxdWlyZW1lbnRzLgorCSAqLworCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKKwkJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04gYWRqdXN0X3BsbF9hcmdzOworCisJCWlmICghZW5jb2RlcikKKwkJCXJldHVybjsKKworCQltZW1zZXQoJmFkanVzdF9wbGxfYXJncywgMCwgc2l6ZW9mKGFkanVzdF9wbGxfYXJncykpOworCQlhZGp1c3RfcGxsX2FyZ3MudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CisJCWFkanVzdF9wbGxfYXJncy51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJYWRqdXN0X3BsbF9hcmdzLnVjRW5jb2RlTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisKKwkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBBZGp1c3REaXNwbGF5UGxsKTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCisJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhZGp1c3RfcGxsX2FyZ3MpOworCQlhZGp1c3RlZF9jbG9jayA9IGxlMTZfdG9fY3B1KGFkanVzdF9wbGxfYXJncy51c1BpeGVsQ2xvY2spICogMTA7CisJfSBlbHNlIHsKKwkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJgorCQkgICAgKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkID09IEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xKSkKKwkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOworCQllbHNlCisJCQlhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrOworCX0KKwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CiAJZWxzZQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywgJnNjbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCiAJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2LCBwbGxfZmxhZ3MpOwogCisJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LAogCQkJICAgICAgJmNyZXYpOwogCkBAIC00MDksNyArNTEyLDcgQEAKIAkJc3dpdGNoIChjcmV2KSB7CiAJCWNhc2UgMToKIAkJCXNwYzFfcHRyID0gKFBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKikgJiBhcmdzLnNQQ0xLSW5wdXQ7Ci0JCQlzcGMxX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoc2Nsb2NrKTsKKwkJCXNwYzFfcHRyLT51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCXNwYzFfcHRyLT51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOwogCQkJc3BjMV9wdHItPnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwogCQkJc3BjMV9wdHItPnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CkBAIC00MjIsNyArNTI1LDcgQEAKIAkJY2FzZSAyOgogCQkJc3BjMl9wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjMl9wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMyX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMyX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzJfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzJfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNDM3LDcgKzU0MCw3IEBACiAJCQkJcmV0dXJuOwogCQkJc3BjM19wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjM19wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMzX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMzX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzNfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzNfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNTI3LDYgKzYzMCwxNiBAQAogCQlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgMCk7CiAJZWxzZQogCQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgMCk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKSB7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJfSBlbHNlIHsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CisJfQogCVdSRUczMihBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uKTsKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKwpAQCAtNTYzLDYgKzY3NiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc0LDEzNCArNjkxLDI0IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNydGNfdGltaW5nOwotCWludCBuZWVkX3R2X3RpbWluZ3MgPSAwOwotCWJvb2wgcmV0OwogCiAJLyogVE9ETyBjb2xvciB0aWxpbmcgKi8KLQltZW1zZXQoJmNydGNfdGltaW5nLCAwLCBzaXplb2YoY3J0Y190aW1pbmcpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCS8qIGZpbmQgdHYgc3RkICovCi0JCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKLQotCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgewotCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJCWlmICh0dl9kYWMpIHsKLQkJCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAxOwotCQkJCQllbHNlCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljcnRjX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQlpZiAobmVlZF90dl90aW1pbmdzKSB7Ci0JCXJldCA9IHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHJkZXYsIG5lZWRfdHZfdGltaW5ncyAtIDEsCi0JCQkJCQkgJmNydGNfdGltaW5nLCAmYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOwotCQlpZiAocmV0ID09IGZhbHNlKQotCQkJbmVlZF90dl90aW1pbmdzID0gMDsKLQl9Ci0KLQlpZiAoIW5lZWRfdHZfdGltaW5ncykgewotCQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKLQkJY3J0Y190aW1pbmcudXNIX0Rpc3AgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OwotCQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0KLQkJY3J0Y190aW1pbmcudXNWX1RvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWw7Ci0JCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JCWNydGNfdGltaW5nLnVzVl9TeW5jV2lkdGggPQotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OwotCi0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7Ci0KLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0lOVEVSTEFDRTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKLQl9Ci0KKwlhdG9tYmlvc19zZXRfc3MoY3J0YywgMCk7CiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCAmY3J0Y190aW1pbmcpOworCWF0b21iaW9zX3NldF9zcyhjcnRjLCAxKTsKKwlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWVsc2UgewotCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQkJU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIGNydGNfZHRkX3RpbWluZzsKLQkJCW1lbXNldCgmY3J0Y19kdGRfdGltaW5nLCAwLCBzaXplb2YoY3J0Y19kdGRfdGltaW5nKSk7Ci0KLQkJCS8qIHNldHVwIEZQIHNoYWRvdyByZWdzIG9uIFI0eHggKi8KLQkJCWNydGNfZHRkX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU2l6ZSA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX1NpemUgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCQkJY3J0Y19kdGRfdGltaW5nLnVzSF9CbGFua2luZ19UaW1lID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX0JsYW5raW5nX1RpbWUgPQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQkJCS8qIGNydGNfZHRkX3RpbWluZy51Y0hfQm9yZGVyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYm9yZGVyOyAqLwotCQkJLyogY3J0Y19kdGRfdGltaW5nLnVjVl9Cb3JkZXIgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3Zib3JkZXI7ICovCi0KLQkJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9WU1lOQ19QT0xBUklUWTsKLQotCQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0hTWU5DX1BPTEFSSVRZOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9DT01QT1NJVEVTWU5DOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCQljcnRjX2R0ZF90aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9Ci0JCQkJICAgIEFUT01fSU5URVJMQUNFOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0RPVUJMRV9DTE9DS19NT0RFOwotCi0JCQlhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKGNydGMsICZjcnRjX2R0ZF90aW1pbmcpOwotCQl9CisJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMyw2ICs3NDAsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gYXRvbWJpb3NfY3J0Y19zZXRfYmFzZSwKIAkucHJlcGFyZSA9IGF0b21iaW9zX2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gYXRvbWJpb3NfY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiB2b2lkIHJhZGVvbl9hdG9tYmlvc19pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCmluZGV4IGUyYjkyYzQuLmQ0ZTZlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaApAQCAtNTcsMTMgKzU3LDQgQEAKICNkZWZpbmUJVkdBX1JFTkRFUl9DT05UUk9MCQkJCTB4MDMwMAogI2RlZmluZQkJVkdBX1ZTVEFUVVNfQ05UTF9NQVNLCQkJCTB4MDAwMzAwMDAKIAotLyogQVZJVk8gZGlzYWJsZSBWR0EgcmVuZGVyaW5nICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1MzIgdmdhX3JlbmRlcjsKLQl2Z2FfcmVuZGVyID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7Ci0JdmdhX3JlbmRlciAmPSB+VkdBX1ZTVEFUVVNfQ05UTF9NQVNLOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXIpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggZmIyMTFlNS4uMGQ3OTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWNoYXIgKmdwdV9wcmVmaXg7CiB9OwogCi1zdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXRfbmV3KHVuc2lnbmVkIG8pCitzdGF0aWMgc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIApAQCAtNTczLDEyICs1NzMsMTIgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCitzdGF0aWMgdm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQogewogCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOwogfQogCi12b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOwogCXQtPm9mZnNldF9tYXggPSAwOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJdC0+dGFibGUgPSBOVUxMOwogfQogCi12b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyB2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOwogCkBAIC02MTEsNyArNjExLDcgQEAKIAlwcmludGYoIn07XG4iKTsKIH0KIAotaW50IHRhYmxlX2J1aWxkKHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyBpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIAl1bnNpZ25lZCBpLCBtOwpAQCAtNjMxLDcgKzYzMSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKLWludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU7CiAJcmVnZXhfdCBtYXNrX3JleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggYmU1MWM1Zi4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicjEwMGQuaCIKKyNpbmNsdWRlICJyczEwMGQuaCIKKyNpbmNsdWRlICJydjIwMGQuaCIKKyNpbmNsdWRlICJydjI1MGQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC02MCwxOCArNjMsNyBAQAogCiAvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KICAqLwotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV93YWl0X2Zvcl92c3luYzIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBQQ0kgR0FSVApAQCAtMTUyLDEzNiArMTQ0LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0KLS8qCi0gKiBNQwotICovCi12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IG92MF9zY2FsZV9jbnRsLCBjcnRjX2V4dF9jbnRsLCBjcnRjX2dlbl9jbnRsLCBjcnRjMl9nZW5fY250bDsKLQotCS8qIEZJWE1FOiBpcyB0aGlzIGZ1bmN0aW9uIGNvcnJlY3QgZm9yIHJzMTAwLHJzMjAwLHJzMzAwID8gKi8KLQlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCi0JLyogc3RvcCBkaXNwbGF5IGFuZCBtZW1vcnkgYWNjZXNzICovCi0Jb3YwX3NjYWxlX2NudGwgPSBSUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMLCBvdjBfc2NhbGVfY250bCAmIH5SQURFT05fU0NBTEVSX0VOQUJMRSk7Ci0JY3J0Y19leHRfY250bCA9IFJSRUczMihSQURFT05fQ1JUQ19FWFRfQ05UTCk7Ci0JV1JFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMLCBjcnRjX2V4dF9jbnRsIHwgUkFERU9OX0NSVENfRElTUExBWV9ESVMpOwotCWNydGNfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwpOwotCi0JcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMocmRldik7Ci0KLQlXUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwsCi0JICAgICAgIChjcnRjX2dlbl9jbnRsICYgfihSQURFT05fQ1JUQ19DVVJfRU4gfCBSQURFT05fQ1JUQ19JQ09OX0VOKSkgfAotCSAgICAgICBSQURFT05fQ1JUQ19ESVNQX1JFUV9FTl9CIHwgUkFERU9OX0NSVENfRVhUX0RJU1BfRU4pOwotCi0JaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7Ci0JCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7Ci0KLQkJcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMyKHJkZXYpOwotCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLAotCQkgICAgICAgKGNydGMyX2dlbl9jbnRsICYKLQkJICAgICAgICB+KFJBREVPTl9DUlRDMl9DVVJfRU4gfCBSQURFT05fQ1JUQzJfSUNPTl9FTikpIHwKLQkJICAgICAgIFJBREVPTl9DUlRDMl9ESVNQX1JFUV9FTl9CKTsKLQl9Ci0KLQl1ZGVsYXkoNTAwKTsKLX0KLQotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCXIgPSByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUjEwMCBNQyAhXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCS8qIE5vdmVsbCBidWcgMjA0ODgyIGZvciBSTjUwL002L003IHdpdGggOC8xNi8zMk1CIFZSQU0sCi0JICogaWYgdGhlIGFwZXJ0dXJlIGlzIDY0TUIgYnV0IHdlIGhhdmUgMzJNQiBWUkFNCi0JICogd2UgcmVwb3J0IG9ubHkgMzJNQiBWUkFNIGJ1dCB3ZSBoYXZlIHRvIHNldCBNQ19GQl9MT0NBVElPTgotCSAqIHRvIDY0TUIsIG90aGVyd2lzZSB0aGUgZ3B1IGFjY2lkZW50aWFsbHkgZGllcyAqLwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0KLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKLQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMihSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCAwKTsKLQl9Ci0KLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKSAmIFJBREVPTl9IRFBfQVBFUl9DTlRMOwotCXRtcCB8PSAoNyA8PCAyOCk7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wIHwgUkFERU9OX0hEUF9TT0ZUX1JFU0VUIHwgUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXApOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotfQotCi1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXIxMDBfZ3B1X2luaXQocmRldik7Ci0JLyogRGlzYWJsZSBnYXJ0IHdoaWNoIGFsc28gZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIxMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogSW50ZXJydXB0cwotICovCiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CkBAIC0zMjQsNyArMTg2LDcgQEAKIAogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCiAJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCWlmICghc3RhdHVzKSB7CkBAIC0zNDcsNiArMjA5LDIxIEBACiAJCX0KIAkJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCX0KKwlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1JTNDAwOgorCQljYXNlIENISVBfUlM0ODA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSAmIH5SUzQwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9BSUNfQ05UTCwgbXNpX3JlYXJtIHwgUlM0MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1OCwxMCArMjM1LDYgQEAKIAkJcmV0dXJuIFJSRUczMihSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CiB9CiAKLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMzc3LDE2ICsyNTAsMTIgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fU1dfSU5UX0ZJUkUpOwogfQogCi0KLS8qCi0gKiBXcml0ZWJhY2sKLSAqLwogaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLAogCQkJCQkgdHJ1ZSwKIAkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKIAkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKQEAgLTUwNCwxMCArMzczLDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotCi0vKgotICogQ1AKLSAqLwogc3RhdGljIGludCByMTAwX2NwX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTYxMiw2ICs0NzcsNyBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgdm9pZCByMTAwX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKQEAgLTcxMiwxOSArNTc4LDE5IEBACiAJaW5kaXJlY3QxX3N0YXJ0ID0gMTY7CiAJLyogY3Agc2V0dXAgKi8KIAlXUkVHMzIoMHg3MTgsIHByZV93cml0ZV90aW1lciB8IChwcmVfd3JpdGVfbGltaXQgPDwgMjgpKTsKLQlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JICAgICAgIFJBREVPTl9CVUZfU1dBUF8zMkJJVCB8Ci0jZW5kaWYKLQkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQlVGU1osIHJiX2J1ZnN6KSB8CisJdG1wID0gKFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9SQl9CTEtTWiwgcmJfYmxrc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fTUFYX0ZFVENILCBtYXhfZmV0Y2gpIHwKIAkgICAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdG1wIHw9IFJBREVPTl9CVUZfU1dBUF8zMkJJVDsKKyNlbmRpZgorCVdSRUczMihSQURFT05fQ1BfUkJfQ05UTCwgdG1wKTsKKwogCS8qIFNldCByaW5nIGFkZHJlc3MgKi8KIAlEUk1fSU5GTygicmFkZW9uOiByaW5nIGF0IDB4JTAxNmxYXG4iLCAodW5zaWduZWQgbG9uZylyZGV2LT5jcC5ncHVfYWRkcik7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9CQVNFLCByZGV2LT5jcC5ncHVfYWRkcik7CiAJLyogRm9yY2UgcmVhZCAmIHdyaXRlIHB0ciB0byAwICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9DUF9SQl9DTlRMKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCB8IFJBREVPTl9SQl9SUFRSX1dSX0VOQSk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9SUFRSX1dSLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIsIDApOwpAQCAtODYzLDEzICs3MjksMTEgQEAKIHZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGlkeDsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeDsKIAlmb3IgKGkgPSAwOyBpIDw9IChwa3QtPmNvdW50ICsgMSk7IGkrKywgaWR4KyspIHsKIAkJRFJNX0lORk8oImliWyVkXT0weCUwOFhcbiIsIGlkeCwgaWJbaWR4XSk7CkBAIC04OTYsNyArNzYwLDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTM5LDcgKzgwMyw2IEBACiAgKi8KIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CkBAIC05NDcsOCArODEwLDkgQEAKIAlpbnQgY3J0Y19pZDsKIAlpbnQgcjsKIAl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWc7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWIgPSBwLT5pYi0+cHRyOwogCiAJLyogcGFyc2UgdGhlIHdhaXQgdW50aWwgKi8KIAlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRyZWxvYywgcC0+aWR4KTsKQEAgLTk2MywyNCArODI3LDI0IEBACiAJCXJldHVybiByOwogCX0KIAotCWlmIChpYl9jaHVuay0+a2RhdGFbd2FpdHJlbG9jLmlkeCArIDFdICE9IFJBREVPTl9XQUlUX0NSVENfVkxJTkUpIHsKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0cmVsb2MuaWR4ICsgMSkgIT0gUkFERU9OX1dBSVRfQ1JUQ19WTElORSkgewogCQlEUk1fRVJST1IoInZsaW5lIHdhaXQgaGFkIGlsbGVnYWwgd2FpdCB1bnRpbFxuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLwotCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCArIHdhaXRyZWxvYy5jb3VudCArIDIpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWhfaWR4ID0gcC0+aWR4IC0gMjsKLQlwLT5pZHggKz0gd2FpdHJlbG9jLmNvdW50OwotCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50OworCXAtPmlkeCArPSB3YWl0cmVsb2MuY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKIAotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF07Ci0JY3J0Y19pZCA9IGliX2NodW5rLT5rZGF0YVtoX2lkeCArIDVdOwotCXJlZyA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF0gPj4gMjsKKwloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKKwljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwogCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKQEAgLTk5NCwxNiArODU4LDE2IEBACiAKIAlpZiAoIWNydGMtPmVuYWJsZWQpIHsKIAkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgd2FpdCB1bnRpbCAqLwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7Ci0JCWliX2NodW5rLT5rZGF0YVtoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOwogCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EID4+IDI7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBSQURFT05fQ1JUQzJfR1VJX1RSSUdfVkxJTkUgPj4gMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMSw4ICs4NzUsOCBAQAogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHhdID0gaGVhZGVyOwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAzXSB8PSBSQURFT05fRU5HX0RJU1BMQVlfU0VMRUNUX0NSVEMxOworCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CkBAIC0xMDMzLDcgKzg5Nyw2IEBACiBpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDQ0LDcgKzkwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMDU3LDcgKzkxOSw3IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgJnAzcmVsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTEyNiw3ICs5ODgsNiBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTM0LDExICs5OTUsMTMgQEAKIAlpbnQgcjsKIAlpbnQgaSwgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMTY2LDggKzEwMjksOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3OCw4ICsxMDQxLDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgpAQCAtMTE5Miw3ICsxMDU1LDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgpAQCAtMTIwOCw4ICsxMDcxLDggQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CkBAIC0xMjI1LDggKzEwODgsOCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKQEAgLTEyNDIsMTIgKzExMDUsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTI2MywxNyArMTEyNiwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTEyOTEsMTMgKzExNTQsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMTMyMSw0NCArMTE4NCw0NCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZUWF9GTVQ6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfU0laRV8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0xMzY2LDE2ICsxMjI5LDE2IEBACiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9DVUJJQ19NQVBfRU5BQkxFKQorCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKQEAgLTE0MDIsMTMgKzEyNjUsMTMgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtMTQyNywxNSArMTI5MCwxNCBAQAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXVuc2lnbmVkIGlkeDsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JaWYgKChpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgMSkgPiByYWRlb25fb2JqZWN0X3NpemUocm9iaikpIHsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMik7CisJaWYgKCh2YWx1ZSArIDEpID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CiAJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgUEFDS0VUMyBJTkRYX0JVRkZFUiAiCiAJCQkgICIobmVlZCAldSBoYXZlICVsdSkgIVxuIiwKLQkJCSAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArIDEsCisJCQkgIHZhbHVlICsgMSwKIAkJCSAgcmFkZW9uX29iamVjdF9zaXplKHJvYmopKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ0NSw1OSArMTMwNywyMCBAQAogc3RhdGljIGludCByMTAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJaW50IHI7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107Ci0JCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKLQkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MDYsNyArMTMyOSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTE1MjAsMjcgKzEzNDMsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT5udW1fYXJyYXlzID0gMTsKLQkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeCsyXSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikpOwogCiAJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOwogCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5tYXhfaW5keCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpOwogCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzMpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EOgotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQpAQCAtMTU0OCwxMSArMTM3MSwxMSBAQAogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EXzI6Ci0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKQEAgLTE1NjAsMjggKzEzODMsMjggQEAKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIG9mIHZlcnRleCBidWZmZXJzIHNldHVwIGVsc2V3aGVyZSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CkBAIC0yMDMzLDcgKzE4NTYsNyBAQAogCXIxMDBfcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJkZXYpOwogfQogCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAoQVNJQ19JU19STjUwKHJkZXYpKSB7CiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcm41MF9yZWdfc2FmZV9ibTsKQEAgLTIwNDIsOSArMTg2NSw4IEBACiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKIAkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwkJcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM0Miw5ICsyMTY0LDExIEBACiAJCW1vZGUxID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5tb2RlOwogCQlwaXhlbF9ieXRlczEgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAl9Ci0JaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7Ci0JCW1vZGUyID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5tb2RlOwotCQlwaXhlbF9ieXRlczIgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7CisJCQltb2RlMiA9ICZyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UubW9kZTsKKwkJCXBpeGVsX2J5dGVzMiA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OworCQl9CiAJfQogCiAJbWluX21lbV9lZmYuZnVsbCA9IHJmaXhlZF9jb25zdF84KDApOwpAQCAtMjU1NSw3ICsyMzc5LDcgQEAKIAkvKgogCSAgRmluZCB0aGUgdG90YWwgbGF0ZW5jeSBmb3IgdGhlIGRpc3BsYXkgZGF0YS4KIAkqLwotCWRpc3BfbGF0ZW5jeV9vdmVyaGVhZC5mdWxsID0gcmZpeGVkX2NvbnN0KDgwKTsKKwlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4KTsKIAlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9kaXYoZGlzcF9sYXRlbmN5X292ZXJoZWFkLCBzY2xrX2ZmKTsKIAltY19sYXRlbmN5X21jbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X21jbGsuZnVsbDsKIAltY19sYXRlbmN5X3NjbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X3NjbGsuZnVsbDsKQEAgLTI3NTMsOCArMjU3NywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9wcmludChzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlICp0KQogewogCURSTV9FUlJPUigicGl0Y2ggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnBpdGNoKTsKKwlEUk1fRVJST1IoInVzZV9waXRjaCAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT51c2VfcGl0Y2gpOwogCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKKwlEUk1fRVJST1IoIndpZHRoXzExICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aF8xMSk7CiAJRFJNX0VSUk9SKCJoZWlnaHQgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0KTsKKwlEUk1fRVJST1IoImhlaWdodF8xMSAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHRfMTEpOwogCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOwogCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOwogCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7CkBAIC0yODE0LDE1ICsyNjQxLDE3IEBACiAJCQkJZWxzZQogCQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7CiAJCQl9IGVsc2UgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKKwkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoOwogCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7CisJCQkJdyA9IHcgLyAoMSA8PCBpKTsKIAkJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfdykKIAkJCQkJdyA9IHJvdW5kdXBfcG93X29mX3R3byh3KTsKIAkJCX0KLQkJCWggPSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0IC8gKDEgPDwgaSk7CisJCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodDsKIAkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7CisJCQloID0gaCAvICgxIDw8IGkpOwogCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX2gpCiAJCQkJaCA9IHJvdW5kdXBfcG93X29mX3R3byhoKTsKIAkJCXNpemUgKz0gdyAqIGg7CkBAIC0zMTU3LDcgKzI5ODYsNyBAQAogCVdSRUczMihSXzAwMDc0MF9DUF9DU1FfQ05UTCwgMCk7CiAKIAkvKiBTYXZlIGZldyBDUlRDIHJlZ2lzdGVycyAqLwotCXNhdmUtPkdFTk1PX1dUID0gUlJFRzMyKFJfMDAwM0MwX0dFTk1PX1dUKTsKKwlzYXZlLT5HRU5NT19XVCA9IFJSRUc4KFJfMDAwM0MyX0dFTk1PX1dUKTsKIAlzYXZlLT5DUlRDX0VYVF9DTlRMID0gUlJFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwpOwogCXNhdmUtPkNSVENfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCk7CiAJc2F2ZS0+Q1VSX09GRlNFVCA9IFJSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VUKTsKQEAgLTMxNjcsNyArMjk5Niw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBWR0EgYXBlcnR1cmUgYWNjZXNzICovCi0JV1JFRzMyKFJfMDAwM0MwX0dFTk1PX1dULCBDXzAwMDNDMF9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBDXzAwMDNDMl9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOwogCS8qIERpc2FibGUgY3Vyc29yLCBvdmVybGF5LCBjcnRjICovCiAJV1JFRzMyKFJfMDAwMjYwX0NVUl9PRkZTRVQsIHNhdmUtPkNVUl9PRkZTRVQgfCBTXzAwMDI2MF9DVVJfTE9DSygxKSk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwgfApAQCAtMzE5OSwxMCArMzAyOCwyNjQgQEAKIAkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKIAl9CiAJLyogUmVzdG9yZSBDUlRDIHJlZ2lzdGVycyAqLwotCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBzYXZlLT5HRU5NT19XVCk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwpOwogCVdSRUczMihSXzAwMDA1MF9DUlRDX0dFTl9DTlRMLCBzYXZlLT5DUlRDX0dFTl9DTlRMKTsKIAlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKIAkJV1JFRzMyKFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMLCBzYXZlLT5DUlRDMl9HRU5fQ05UTCk7CiAJfQogfQorCit2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHOChSXzAwMDNDMl9HRU5NT19XVCk7CisJV1JFRzgoUl8wMDAzQzJfR0VOTU9fV1QsIENfMDAwM0MyX1ZHQV9SQU1fRU4gJiB0bXApOworfQorCitzdGF0aWMgdm9pZCByMTAwX2RlYnVnZnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyID0gcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSByMTAwX21jIGRlYnVnZnMgZmlsZS5cbiIpOworfQorCitzdGF0aWMgdm9pZCByMTAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMTRDX01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMTRDX01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYyMDApCisJCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwKKwkJCQl1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIDApOworCQlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SVjIwMCkKKwkJCVdSRUczMihSXzAwMDE1Q19BR1BfQkFTRV8yLCAwKTsKKwl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMTAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZW91dC5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHIxMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX0RJU1AxKDEpIHwgU18wMDAwMERfRk9SQ0VfRElTUDIoMSk7CisJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgcjEwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjEwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjEwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMTAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMTAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMTAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByMTAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQl0bXAgPSBHXzAwMDE1Q19NQ19GQl9TVEFSVChSUkVHMzIoUl8wMDAxNUNfTkJfVE9NKSk7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSB0bXAgPDwgMTY7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIHsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOworCQl9CisJfQorCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCitpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogUmVnaXN0ZXIgZGVidWdmcyBmaWxlIHNwZWNpZmljIHRvIHRoaXMgZ3JvdXAgb2YgYXNpY3MgKi8KKwlyMTAwX2RlYnVnZnMocmRldik7CisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIxMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIxMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjEwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXIxMDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzBhODJlZC4uMGRhZjBkNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaApAQCAtODQsNiArODQsOCBAQAogCQkgICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJICAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKTsKIAorCisKIHN0YXRpYyBpbmxpbmUgaW50IHIxMDBfcmVsb2NfcGl0Y2hfb2Zmc2V0KHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQkgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCQkJCSAgdW5zaWduZWQgaWR4LApAQCAtOTMsOSArOTUsNyBAQAogCXUzMiB0aWxlX2ZsYWdzID0gMDsKIAl1MzIgdG1wOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwotCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJdTMyIHZhbHVlOwogCiAJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAlpZiAocikgewpAQCAtMTA0LDcgKzEwNCw4IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJcmV0dXJuIHI7CiAJfQotCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMDNmZmZmZjsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwl0bXAgPSB2YWx1ZSAmIDB4MDAzZmZmZmY7CiAJdG1wICs9ICgoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSA+PiAxMCk7CiAKIAlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKQEAgLTExOSw2ICsxMjAsNjQgQEAKIAl9CiAKIAl0bXAgfD0gdGlsZV9mbGFnczsKLQlwLT5pYi0+cHRyW2lkeF0gPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNmYzAwMDAwKSB8IHRtcDsKKwlwLT5pYi0+cHRyW2lkeF0gPSAodmFsdWUgJiAweDNmYzAwMDAwKSB8IHRtcDsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgcjEwMF9wYWNrZXQzX2xvYWRfdmJwbnRyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQkgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJCQkgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGMsIGk7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOworCWludCByID0gMDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisJdTMyIGlkeF92YWx1ZTsKKworCWliID0gcC0+aWItPnB0cjsKKwl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOworCWMgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCsrKSAmIDB4MUY7CisJdHJhY2stPm51bV9hcnJheXMgPSBjOworCWZvciAoaSA9IDA7IGkgPCAoYyAtIDEpOyBpKz0yLCBpZHgrPTMpIHsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCisJCQkJICBwa3QtPm9wY29kZSk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpZHhfdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGlkeF92YWx1ZSA+PiA4OworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCSAgcGt0LT5vcGNvZGUpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWJbaWR4KzJdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAyKSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplID0gaWR4X3ZhbHVlID4+IDI0OworCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSAmPSAweDdGOworCX0KKwlpZiAoYyAmIDEpIHsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCisJCQkJCSAgcGt0LT5vcGNvZGUpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgPSBpZHhfdmFsdWUgPj4gODsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgJj0gMHg3RjsKKwl9CisJcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKaW5kZXggYzRiMjU3ZS4uZGYyOWE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaApAQCAtMzgxLDYgKzM4MSwyNCBAQAogI2RlZmluZSAgIFNfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMjQpCiAjZGVmaW5lICAgR18wMDAwNTRfVkNSVENfSURYX01BU1RFUih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHg3RikKICNkZWZpbmUgICBDXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSICAgICAgICAgICAgICAgICAgICAweDgwRkZGRkZGCisjZGVmaW5lIFJfMDAwMTQ4X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ4CisjZGVmaW5lICAgU18wMDAxNDhfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNDhfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNDhfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDE0QworI2RlZmluZSAgIFNfMDAwMTRDX01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTRDX01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTRDX01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0Q19NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNENfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTRDX01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNzBfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNzAKKyNkZWZpbmUgICBTXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMTcwX0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgUl8wMDAyM0NfRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgMHgwMDAyM0MKICNkZWZpbmUgICBTXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCiAjZGVmaW5lICAgR18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQpAQCAtNDAzLDI1ICs0MjEsMjUgQEAKICNkZWZpbmUgICBTXzAwMDM2MF9DVVIyX0xPQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCiAjZGVmaW5lICAgR18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQogI2RlZmluZSAgIENfMDAwMzYwX0NVUjJfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKLSNkZWZpbmUgUl8wMDAzQzBfR0VOTU9fV1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzQzAKLSNkZWZpbmUgICBTXzAwMDNDMF9HRU5NT19NT05PX0FERFJFU1NfQih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKLSNkZWZpbmUgICBHXzAwMDNDMF9HRU5NT19NT05PX0FERFJFU1NfQih4KSAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9HRU5NT19NT05PX0FERFJFU1NfQiAgICAgICAgICAgICAgICAweEZGRkZGRkZFCi0jZGVmaW5lICAgU18wMDAzQzBfVkdBX1JBTV9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCi0jZGVmaW5lICAgR18wMDAzQzBfVkdBX1JBTV9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfVkdBX1JBTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9DS1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyKQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9DS1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgzKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9DS1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjMKLSNkZWZpbmUgICBTXzAwMDNDMF9PRERfRVZFTl9NRF9QR1NFTCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKLSNkZWZpbmUgICBHXzAwMDNDMF9PRERfRVZFTl9NRF9QR1NFTCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9PRERfRVZFTl9NRF9QR1NFTCAgICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCi0jZGVmaW5lICAgU18wMDAzQzBfVkdBX0hTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCi0jZGVmaW5lICAgR18wMDAzQzBfVkdBX0hTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfVkdBX0hTWU5DX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9WU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9WU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9WU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgUl8wMDAzQzJfR0VOTU9fV1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzQzAKKyNkZWZpbmUgICBTXzAwMDNDMl9HRU5NT19NT05PX0FERFJFU1NfQih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDNDMl9HRU5NT19NT05PX0FERFJFU1NfQih4KSAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9HRU5NT19NT05PX0FERFJFU1NfQiAgICAgICAgICAgICAgICAweEZFCisjZGVmaW5lICAgU18wMDAzQzJfVkdBX1JBTV9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAzQzJfVkdBX1JBTV9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfVkdBX1JBTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRAorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9DS1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9DS1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgzKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9DS1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjMKKyNkZWZpbmUgICBTXzAwMDNDMl9PRERfRVZFTl9NRF9QR1NFTCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDNDMl9PRERfRVZFTl9NRF9QR1NFTCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9PRERfRVZFTl9NRF9QR1NFTCAgICAgICAgICAgICAgICAgICAweERGCisjZGVmaW5lICAgU18wMDAzQzJfVkdBX0hTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAzQzJfVkdBX0hTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfVkdBX0hTWU5DX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHhCRgorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9WU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9WU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9WU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4N0YKICNkZWZpbmUgUl8wMDAzRjhfQ1JUQzJfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzRjgKICNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9EQkxfU0NBTl9FTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKICNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9EQkxfU0NBTl9FTih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKQEAgLTU0NSw2ICs1NjMsNDYgQEAKICNkZWZpbmUgICBTXzAwMDc3NF9TQ1JBVENIX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRkZGRikgPDwgNSkKICNkZWZpbmUgICBHXzAwMDc3NF9TQ1JBVENIX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4N0ZGRkZGRikKICNkZWZpbmUgICBDXzAwMDc3NF9TQ1JBVENIX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKICNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKICNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCiAjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQpAQCAtNjA0LDQgKzY2Miw1MyBAQAogI2RlZmluZSAgIEdfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMEU0MF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAKKworI2RlZmluZSBSXzAwMDAwRF9TQ0xLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRAorI2RlZmluZSAgIFNfMDAwMDBEX1NDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDBEX1NDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3KQorI2RlZmluZSAgIENfMDAwMDBEX1NDTEtfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjgKKyNkZWZpbmUgICBTXzAwMDAwRF9UQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9UQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9UQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGOEZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9IRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRElTUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0RJU1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9ESVNQICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9URE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCmluZGV4IDU2OGM3NGIuLmViNzQwZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC05Niw3ICs5Niw2IEBACiAJCSAgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkgICAgICAgdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKQEAgLTEwNSwxMSArMTA0LDExIEBACiAJaW50IGk7CiAJaW50IGZhY2U7CiAJdTMyIHRpbGVfZmxhZ3MgPSAwOworCXUzMiBpZHhfdmFsdWU7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKLQorCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgUkFERU9OX0NSVENfR1VJX1RSSUdfVkxJTkU6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShwKTsKQEAgLTEzNyw4ICsxMzYsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTQ5LDggKzE0OCw4IEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQl0cmFjay0+Y2JbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF8wOgogCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF8xOgpAQCAtMTY2LDcgKzE2NSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzA6CkBAIC0yMDgsMTIgKzIwNywxMiBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SRV9XSURUSF9IRUlHSFQ6Ci0JCXRyYWNrLT5tYXh5ID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDdGRik7CisJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMHg3RkYpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0yMjksMTcgKzIyOCwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTI1NywxOCArMjU2LDE4IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiSW52YWxpZCBjb2xvciBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKLQkJCQkgICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKKwkJCQkgICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fREVQVEhYWV9PRkZTRVRfRU5BQkxFKSB7CisJCWlmIChpZHhfdmFsdWUgJiBSQURFT05fREVQVEhYWV9PRkZTRVRfRU5BQkxFKSB7CiAJCQlEUk1fRVJST1IoIk5vIHN1cHBvcnQgZm9yIGRlcHRoIHh5IG9mZnNldCBpbiBrbXNcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQl0cmFjay0+el9lbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fWl9FTkFCTEUpOworCQl0cmFjay0+el9lbmFibGVkID0gISEoaWR4X3ZhbHVlICYgUkFERU9OX1pfRU5BQkxFKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aU1RFTkNJTENOVEw6Ci0JCXN3aXRjaCAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweGYpIHsKKwkJc3dpdGNoIChpZHhfdmFsdWUgJiAweGYpIHsKIAkJY2FzZSAwOgogCQkJdHJhY2stPnpiLmNwcCA9IDI7CiAJCQlicmVhazsKQEAgLTI5MiwyNyArMjkxLDI3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DTlRMOgogCQl7Ci0JCQl1aW50MzJfdCB0ZW1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gNDsKKwkJCXVpbnQzMl90IHRlbXAgPSBpZHhfdmFsdWUgPj4gNDsKIAkJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX3RleHR1cmU7IGkrKykKIAkJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9ICEhKHRlbXAgJiAoMSA8PCBpKSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fU0VfVkZfQ05UTDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGlkeF92YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDIxMGM6CiAJCS8qIFZBUF9WRl9NQVhfVlRYX0lORFggKi8KLQkJdHJhY2stPm1heF9pbmR4ID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDAwRkZGRkZGVUw7CisJCXRyYWNrLT5tYXhfaW5keCA9IGlkeF92YWx1ZSAmIDB4MDBGRkZGRkZVTDsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1NFX1ZUWF9GTVRfMDoKLQkJdHJhY2stPnZ0eF9zaXplID0gcjIwMF9nZXRfdnR4X3NpemVfMChpYl9jaHVuay0+a2RhdGFbaWR4XSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIyMDBfZ2V0X3Z0eF9zaXplXzAoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1NFX1ZUWF9GTVRfMToKLQkJdHJhY2stPnZ0eF9zaXplICs9IHIyMDBfZ2V0X3Z0eF9zaXplXzEoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQl0cmFjay0+dnR4X3NpemUgKz0gcjIwMF9nZXRfdnR4X3NpemVfMShpZHhfdmFsdWUpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzA6CiAJY2FzZSBSMjAwX1BQX1RYU0laRV8xOgpAQCAtMzIxLDggKzMyMCw4IEBACiAJY2FzZSBSMjAwX1BQX1RYU0laRV80OgogCWNhc2UgUjIwMF9QUF9UWFNJWkVfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYU0laRV8wKSAvIDMyOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOworCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMDoKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF8xOgpAQCAtMzMxLDcgKzMzMCw3IEBACiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNDoKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhQSVRDSF8wKSAvIDMyOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzA6CiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzE6CkBAIC0zNDAsMTIgKzMzOSwxMiBAQAogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl80OgogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhGSUxURVJfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLm51bV9sZXZlbHMgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUjIwMF9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSMjAwX01BWF9NSVBfTEVWRUxfTUFTSykKIAkJCQkJCSA+PiBSMjAwX01BWF9NSVBfTEVWRUxfU0hJRlQpOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjMpICYgMHg3OworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDIzKSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjcpICYgMHg3OworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI3KSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQlicmVhazsKQEAgLTM2NCw4ICszNjMsOCBAQAogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzQ6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRk9STUFUX1hfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4NzsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4MzsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSBpZHhfdmFsdWUgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMTYpICYgMHgzOwogCQkvKiAyRCwgM0QsIENVQkUgKi8KIAkJc3dpdGNoICh0bXApIHsKIAkJY2FzZSAwOgpAQCAtMzg5LDE0ICszODgsMTQgQEAKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfNDoKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRk9STUFUXzApIC8gMzI7Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFIyMDBfVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUjIwMF9UWEZPUk1BVF9OT05fUE9XRVIyKSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMTsKIAkJfSBlbHNlIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAwOwotCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX0hFSUdIVF9NQVNLKTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWR4X3ZhbHVlID4+IFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX0hFSUdIVF9NQVNLKTsKIAkJfQotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFIyMDBfVFhGT1JNQVRfSTg6CiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9SR0IzMzI6CiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9ZODoKQEAgLTQyNCw4ICs0MjMsOCBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDQ7CiAJCQlicmVhazsKIAkJfQotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4Zik7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0uaGVpZ2h0ID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIwKSAmIDB4Zik7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4Zik7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAyMCkgJiAweGYpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMToKQEAgLTQzMyw3ICs0MzIsNyBAQAogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18zOgogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU180OgogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU181OgotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdG1wID0gaWR4X3ZhbHVlOwogCQlpID0gKHJlZyAtIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMCkgLyAzMjsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtNDQ4LDkgKzQ0Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByMjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHIyMDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjIwMF9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyMjAwX3JlZ19zYWZlX2JtKTsKLQlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggYmIxNTFlYy4uMmY0M2VlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTMzLDQzICszMywxNiBAQAogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyMTAwX3RyYWNrLmgiCiAjaW5jbHVkZSAicjMwMGQuaCIKLQorI2luY2x1ZGUgInJ2MzUwZC5oIgogI2luY2x1ZGUgInIzMDBfcmVnX3NhZmUuaCIKIAotLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9yYjJkX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7Ci1pbnQgcjEwMF9wY2lfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAotCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCi0JCQkgdW5zaWduZWQgaWR4KTsKLWludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcjEwMF9jc19wYXJzZV9wYWNrZXQwKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAotCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAotCQkJICBjb25zdCB1bnNpZ25lZCAqYXV0aCwgdW5zaWduZWQgbiwKLQkJCSAgcmFkZW9uX3BhY2tldDBfY2hlY2tfdCBjaGVjayk7Ci1pbnQgcjEwMF9jc190cmFja19jaGVja19wa3QzX2luZHhfYnVmZmVyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAotCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKLQkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKTsKLQotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzoKLSAqIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcjMwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCisvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAgKi8KIAogLyoKICAqIHJ2MzcwLHJ2MzgwIFBDSUUgR0FSVAogICovCitzdGF0aWMgaW50IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0xNDAsNyArMTEzLDcgQEAKIAl0bXAgPSBSQURFT05fUENJRV9UWF9HQVJUX1VOTUFQUEVEX0FDQ0VTU19ESVNDQVJEOwogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCwgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0xPLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gNDA5NjsKKwl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRU5EX0xPLCB0bXApOwogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfU1RBUlRfSEksIDApOwogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRU5EX0hJLCAwKTsKQEAgLTE4Miw1OSArMTU1LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0vKgotICogTUMKLSAqLwotaW50IHIzMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyMzAwX2dwdV9pbml0KHJkZXYpOwotCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQl9Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIzMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogRmVuY2UgZW1pc3Npb24KLSAqLwogdm9pZCByMzAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0yNjAsMTAgKzE4MCw2IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkFERU9OX1NXX0lOVF9GSVJFKTsKIH0KIAotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwogaW50IHIzMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCSAgdWludDY0X3Qgc3JjX29mZnNldCwKIAkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LApAQCAtNTgyLDExICs0OTgsNiBAQAogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogfQogCi0KLS8qCi0gKiBQQ0lFIExhbmVzCi0gKi8KLQogdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKQogewogCXVpbnQzMl90IGxpbmtfd2lkdGhfY250bCwgbWFzazsKQEAgLTY0NiwxMCArNTU3LDYgQEAKIAogfQogCi0KLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTY4MCw3ICs1ODcsNyBAQAogfTsKICNlbmRpZgogCi1pbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCBydjM3MF9wY2llX2dhcnRfaW5mb19saXN0LCAxKTsKQEAgLTY4OSwyNSArNTk2LDIyIEBACiAjZW5kaWYKIH0KIAotCi0vKgotICogQ1MgZnVuY3Rpb25zCi0gKi8KIHN0YXRpYyBpbnQgcjMwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQl1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVpbnQzMl90IHRtcCwgdGlsZV9mbGFncyA9IDA7CiAJdW5zaWduZWQgaTsKIAlpbnQgcjsKKwl1MzIgaWR4X3ZhbHVlOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoKHJlZykgewogCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgpAQCAtNzM4LDggKzY0Miw4IEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQl0cmFjay0+Y2JbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9ERVBUSE9GRlNFVDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTc1MCw4ICs2NTQsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfVFhfT0ZGU0VUXzA6CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzQ6CkBAIC03NzcsMzIgKzY4MSwzMiBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJLyogVHJhY2tlZCByZWdpc3RlcnMgKi8KIAljYXNlIDB4MjA4NDoKIAkJLyogVkFQX1ZGX0NOVEwgKi8KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGlkeF92YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDIwQjQ6CiAJCS8qIFZBUF9WVFhfU0laRSAqLwotCQl0cmFjay0+dnR4X3NpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4N0Y7CisJCXRyYWNrLT52dHhfc2l6ZSA9IGlkeF92YWx1ZSAmIDB4N0Y7CiAJCWJyZWFrOwogCWNhc2UgMHgyMTM0OgogCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQl0cmFjay0+bWF4X2luZHggPSBpZHhfdmFsdWUgJiAweDAwRkZGRkZGVUw7CiAJCWJyZWFrOwogCWNhc2UgMHg0M0U0OgogCQkvKiBTQ19TQ0lTU09SMSAqLwotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTMpICYgMHgxRkZGKSArIDE7CisJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTMpICYgMHgxRkZGKSArIDE7CiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1JWNTE1KSB7CiAJCQl0cmFjay0+bWF4eSAtPSAxNDQwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0RTAwOgogCQkvKiBSQjNEX0NDVEwgKi8KLQkJdHJhY2stPm51bV9jYiA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gNSkgJiAweDMpICsgMTsKKwkJdHJhY2stPm51bV9jYiA9ICgoaWR4X3ZhbHVlID4+IDUpICYgMHgzKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgMHg0RTM4OgogCWNhc2UgMHg0RTNDOgpAQCAtODI1LDEzICs3MjksMTMgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKIAotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIH4oMHg3IDw8IDE2KTsKKwkJdG1wID0gaWR4X3ZhbHVlICYgfigweDcgPDwgMTYpOwogCQl0bXAgfD0gdGlsZV9mbGFnczsKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQlpID0gKHJlZyAtIDB4NEUzOCkgPj4gMjsKLQkJdHJhY2stPmNiW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkU7Ci0JCXN3aXRjaCAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMSkgJiAweEYpKSB7CisJCXRyYWNrLT5jYltpXS5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGRTsKKwkJc3dpdGNoICgoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKSB7CiAJCWNhc2UgOToKIAkJY2FzZSAxMToKIAkJY2FzZSAxMjoKQEAgLTg1NCwxMyArNzU4LDEzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiSW52YWxpZCBjb2xvciBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKLQkJCQkgICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjEpICYgMHhGKSk7CisJCQkJICAoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0RjAwOgogCQkvKiBaQl9DTlRMICovCi0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDIpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDIpIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnpfZW5hYmxlZCA9IGZhbHNlOwpAQCAtODY4LDcgKzc3Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHg0RjEwOgogCQkvKiBaQl9GT1JNQVQgKi8KLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweEYpKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIDB4RikpIHsKIAkJY2FzZSAwOgogCQljYXNlIDE6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKQEAgLTg3OCw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgeiBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKLQkJCQkgIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4RikpOworCQkJCSAgKGlkeF92YWx1ZSAmIDB4RikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC04OTcsMTcgKzgwMSwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1JQ1JPVElMRV9USUxFRDs7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPnpiLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkM7CisJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGQzsKIAkJYnJlYWs7CiAJY2FzZSAweDQxMDQ6CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlib29sIGVuYWJsZWQ7CiAKLQkJCWVuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmICgxIDw8IGkpKTsKKwkJCWVuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCBpKSk7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9IGVuYWJsZWQ7CiAJCX0KIAkJYnJlYWs7CkBAIC05MjksOSArODMzLDkgQEAKIAljYXNlIDB4NDRGQzoKIAkJLyogVFhfRk9STUFUMV9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ0QzApID4+IDI7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNSkgJiAweDM7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjUpICYgMHgzOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSB0bXA7Ci0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgMHgxRikpIHsKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9YODoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZNFg0OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1ozWTNYMjoKQEAgLTk3MSw3ICs4NzUsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCi0JCQkJICAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDFGKSk7CisJCQkJICAoaWR4X3ZhbHVlICYgMHgxRikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtOTk0LDExICs4OTgsMTEgQEAKIAljYXNlIDB4NDQzQzoKIAkJLyogVFhfRklMVEVSMF9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ0MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHg3OworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOwogCQl9Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAzKSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA0IHx8IHRtcCA9PSA2KSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CiAJCX0KQEAgLTEwMjEsMTIgKzkyNSwxMiBAQAogCWNhc2UgMHg0NTNDOgogCQkvKiBUWF9GT1JNQVQyX1swLTE1XSAqLwogCQlpID0gKHJlZyAtIDB4NDUwMCkgPj4gMjsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkY7CisJCXRtcCA9IGlkeF92YWx1ZSAmIDB4M0ZGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gdG1wICsgMTsKIAkJaWYgKHAtPnJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1KSB7Ci0JCQl0bXAgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE1KSAmIDEpIDw8IDExOworCQkJdG1wID0gKChpZHhfdmFsdWUgPj4gMTUpICYgMSkgPDwgMTE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSB0bXA7Ci0JCQl0bXAgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDEpIDw8IDExOworCQkJdG1wID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMSkgPDwgMTE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0XzExID0gdG1wOwogCQl9CiAJCWJyZWFrOwpAQCAtMTA0OCwxNSArOTUyLDE1IEBACiAJY2FzZSAweDQ0QkM6CiAJCS8qIFRYX0ZPUk1BVDBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDgwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4N0ZGOworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDdGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gdG1wICsgMTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDExKSAmIDB4N0ZGOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDExKSAmIDB4N0ZGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gdG1wICsgMTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI2KSAmIDB4RjsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNikgJiAweEY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gdG1wOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmICgxIDw8IDMxKTsKKwkJdG1wID0gaWR4X3ZhbHVlICYgKDEgPDwgMzEpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gISF0bXA7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMikgJiAweEY7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjIpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IHRtcDsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1pCX1pQQVNTX0FERFI6CkBAIC0xMDY3LDcgKzk3MSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIDB4NGJlODoKIAkJLyogdmFsaWQgcmVnaXN0ZXIgb25seSBvbiBSVjUzMCAqLwpAQCAtMTA4NSw2MCArOTg5LDIwIEBACiBzdGF0aWMgaW50IHIzMDBfcGFja2V0M19jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7Ci0KIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVuc2lnbmVkIGlkeDsKLQl1bnNpZ25lZCBpLCBjOwogCWludCByOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCWlkeCA9IHBrdC0+aWR4ICsgMTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCXN3aXRjaChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK10gJiAweDFGOwotCQl0cmFjay0+bnVtX2FycmF5cyA9IGM7Ci0JCWZvciAoaSA9IDA7IGkgPCAoYyAtIDEpOyBpKz0yLCBpZHgrPTMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTExNDcsNyArMTAxMSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihwLCBwa3QsIHJlbG9jLT5yb2JqKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwpAQCAtMTE1OCwxMSArMTAyMiwxMSBAQAogCQkvKiBOdW1iZXIgb2YgZHdvcmRzIGlzIHZ0eF9zaXplICogKG51bV92ZXJ0aWNlcyAtIDEpCiAJCSAqIFBSSU1fV0FMSyBtdXN0IGJlIGVxdWFsIHRvIDMgdmVydGV4IGRhdGEgaW4gZW1iZWRkZWQKIAkJICogaW4gY21kIHN0cmVhbSAqLwotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CkBAIC0xMTczLDExICsxMDM3LDExIEBACiAJCS8qIE51bWJlciBvZiBkd29yZHMgaXMgdnR4X3NpemUgKiAobnVtX3ZlcnRpY2VzIC0gMSkKIAkJICogUFJJTV9XQUxLIG11c3QgYmUgZXF1YWwgdG8gMyB2ZXJ0ZXggZGF0YSBpbiBlbWJlZGRlZAogCQkgKiBpbiBjbWQgc3RyZWFtICovCi0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewpAQCAtMTE4NSwyOCArMTA0OSwyOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUY6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHggKyAxXTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CkBAIC0xMjY1LDEyICsxMTI5LDYgQEAKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyMzAwX3JlZ19zYWZlX2JtKTsKIH0KIAotaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyMzAwX3NldF9yZWdfc2FmZShyZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOwpAQCAtMTMwNCwzICsxMTYyLDE5OCBAQAogCQlTXzAwMDE0OF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKIAlyMTAwX21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiB9CisKK3ZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlpZiAocmFkZW9uX2R5bmNsa3MgIT0gLTEgJiYgcmFkZW9uX2R5bmNsa3MpCisJCXJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKKwkvKiBXZSBuZWVkIHRvIGZvcmNlIG9uIHNvbWUgb2YgdGhlIGJsb2NrICovCisJdG1wID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOworCXRtcCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKKwlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzUwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlYzODApKQorCQl0bXAgfD0gU18wMDAwMERfRk9SQ0VfVkFQKDEpOworCVdSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMLCB0bXApOworfQorCitzdGF0aWMgaW50IHIzMDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIzMDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLworCXIzMDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyMTAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHIzMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMzAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMzAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIzMDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKKwlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJa2ZyZWUocmRldi0+Ymlvcyk7CisJcmRldi0+YmlvcyA9IE5VTEw7Cit9CisKK2ludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogU2V0IGFzaWMgZXJyYXRhICovCisJcjMwMF9lcnJhdGEocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcjMwMF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJcjMwMF9zZXRfcmVnX3NhZmUocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHIzMDBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyMzAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKaW5kZXggZDRmYTNlYi4uNGM3MzExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaApAQCAtOTYsNiArOTYsMjExIEBACiAjZGVmaW5lICAgU18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKICNkZWZpbmUgICBDXzAwMDE3MF9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCiAKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCisjZGVmaW5lICAgU18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgorI2RlZmluZSAgIFNfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgICBTXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AxKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDEgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggNDlhMmZkYy4uMWNlZmRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTE1NSw2ICsxNTUsOSBAQAogc3RhdGljIHZvaWQgcjQyMF9jbG9ja19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHNjbGtfY250bDsKKworCWlmIChyYWRlb25fZHluY2xrcyAhPSAtMSAmJiByYWRlb25fZHluY2xrcykKKwkJcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKIAlzY2xrX2NudGwgPSBSUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCk7CiAJc2Nsa19jbnRsIHw9IFNfMDAwMDBEX0ZPUkNFX0NQKDEpIHwgU18wMDAwMERfRk9SQ0VfVklQKDEpOwogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIwKQpAQCAtMTY3LDYgKzE3MCw4IEBACiAJaW50IHI7CiAKIAlyMzAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjQyMF9jbG9ja19yZXN1bWUocmRldik7CiAJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKIAkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewpAQCAtMjY3LDcgKzI3Miw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCiAJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCkBAIC0zMDcsNiArMzExLDggQEAKIAl9CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCiAJcjMwMF92cmFtX2luZm8ocmRldik7CiAJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaAppbmRleCBhNDhhN2RiLi5mYzc4ZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCkBAIC0yMTIsOSArMjEyLDkgQEAKICNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCiAjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQogI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKLSNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCi0jZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQotI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKICNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCiAjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQogI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKQEAgLTIyNCwyNCArMjI0LDI0IEBACiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9QWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UVl9TQ0xLICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TVUJQSUMgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU1UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9PVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKaW5kZXggZTFkNWUwMy4uN2JhYTczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaApAQCAtMzg0LDkgKzM4NCwxNiBAQAogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFHUlBIX1RJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFHUlBIX01BQ1JPX0FERFJFU1NfTU9ERSAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQogCisvKiBUaGUgUjd4eCAqX0hJR0ggc3VyZmFjZSByZWdzIGFyZSBiYWNrd2FyZHM7IHRoZSBEMSByZWdzIGFyZSBpbiB0aGUgRDIKKyAqIGJsb2NrIGFuZCB2aWNlIHZlcnNhLiAgVGhpcyBhcHBsaWVzIHRvIEdSUEgsIENVUiwgZXRjLgorICovCiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9MVVRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTA4CiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHg2MTEwCisjZGVmaW5lIFI3MDBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgICAgMHg2OTE0CisjZGVmaW5lIFI3MDBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgICAgMHg2MTE0CiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHg2MTE4CisjZGVmaW5lIFI3MDBfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgMHg2OTFjCisjZGVmaW5lIFI3MDBfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgMHg2MTFjCiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9QSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTIwCiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9YICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTI0CiAjZGVmaW5lIEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MTI4CkBAIC00MDQsNiArNDExLDggQEAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxQ1VSU09SX01PREVfTUFTSyAgICAgICAgICgzIDw8IDgpCiAjICAgICAgIGRlZmluZSBBVklWT19EMUNVUlNPUl9NT0RFXzI0QlBQICAgICAgICAyCiAjZGVmaW5lIEFWSVZPX0QxQ1VSX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAweDY0MDgKKyNkZWZpbmUgUjcwMF9EMUNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgIDB4NmMwYworI2RlZmluZSBSNzAwX0QyQ1VSX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgMHg2NDBjCiAjZGVmaW5lIEFWSVZPX0QxQ1VSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAweDY0MTAKICNkZWZpbmUgQVZJVk9fRDFDVVJfUE9TSVRJT04gICAgICAgICAgICAgICAgICAgIDB4NjQxNAogI2RlZmluZSBBVklWT19EMUNVUl9IT1RfU1BPVCAgICAgICAgICAgICAgICAgICAgMHg2NDE4CkBAIC00NDUsNiArNDU0LDggQEAKICNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgIDB4NjUzNAogIyAgICAgICBkZWZpbmUgQVZJVk9fVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORCAgICAgICAgICAgIDB4NjUzOAorI2RlZmluZSBBVklWT19EMU1PREVfVkxJTkVfU1RBVFVTICAgICAgICAgICAgICAgMHg2NTNjCisjICAgICAgIGRlZmluZSBBVklWT19EMU1PREVfVkxJTkVfU1RBVCAgICAgICAgICAoMSA8PCAxMikKICNkZWZpbmUgQVZJVk9fRHhNT0RFX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4NjU0MAogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFNT0RFX0lOVF9NQVNLICAgICAgICAgICAgKDEgPDwgMCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QyTU9ERV9JTlRfTUFTSyAgICAgICAgICAgICgxIDw8IDgpCkBAIC01MDIsNiArNTEzLDcgQEAKIAogI2RlZmluZSBBVklWT19EMk1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgMHg2ZDM0CiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQgICAgICAgICAgICAweDZkMzgKKyNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZMSU5FX1NUQVRVUyAgICAgICAgICAgICAgIDB4NmQzYwogI2RlZmluZSBBVklWT19EMk1PREVfVklFV1BPUlRfU1RBUlQgICAgICAgICAgICAgMHg2ZDgwCiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9WSUVXUE9SVF9TSVpFICAgICAgICAgICAgICAweDZkODQKICNkZWZpbmUgQVZJVk9fRDJNT0RFX0VYVF9PVkVSU0NBTl9MRUZUX1JJR0hUICAgIDB4NmQ4OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwppbmRleCBkNGIwYjlkLi5mNzQzNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwpAQCAtMjYsMTA4ICsyNiwxMyBAQAogICogICAgICAgICAgSmVyb21lIEdsaXNzZQogICovCiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicjUyMGQuaCIKIAotLyogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwICovCiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi12b2lkIHI1MjBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHI1MjBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIE1DCi0gKi8KLWludCByNTIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQlpZiAocnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKLQl9Ci0JaWYgKHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7Ci0JfQotCi0JcjUyMF9ncHVfaW5pdChyZGV2KTsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjUyMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KLQlXUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSNTIwX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSNTIwX01DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzJfTUMoUjUyMF9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzIoMHgzMTAsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwotCQl0bXAgPSBSRUdfU0VUKFI1MjBfTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoUjUyMF9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9MT0NBVElPTiwgdG1wKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0UsIDApOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfQkFTRV8yLCAwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcjUyMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHI1MjBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCi1pbnQgcjUyMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCByNTIwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKIAl1aW50MzJfdCB0bXA7CkBAIC0xNDMsMTIgKzQ4LDEyIEBACiAJcmV0dXJuIC0xOwogfQogCi12b2lkIHI1MjBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIHBpcGVfc2VsZWN0X2N1cnJlbnQsIGdiX3BpcGVfc2VsZWN0LCB0bXA7CiAKIAlyMTAwX2hkcF9yZXNldChyZGV2KTsKLQlyczYwMF9kaXNhYmxlX3ZnYShyZGV2KTsKKwlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiAJLyoKIAkgKiBEU1RfUElQRV9DT05GSUcJCTB4MTcwQwogCSAqIEdCX1RJTEVfQ09ORklHCQkweDQwMTgKQEAgLTE4NiwxMCArOTEsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvCi0gKi8KIHN0YXRpYyB2b2lkIHI1MjBfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0yMzMsNyArMTM0LDE2OSBAQAogCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9kaXYocmRldi0+cG0uc2NsaywgYSk7CiB9CiAKLXZvaWQgcjUyMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByNTIwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnY1MTVfYmFuZHdpZHRoX2F2aXZvX3VwZGF0ZShyZGV2KTsKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjUyMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDRfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDRfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwNV9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwNV9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDA2X0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwN19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDA1X01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwN19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCitzdGF0aWMgaW50IHI1MjBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXI1MjBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyNTIwX2dwdV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByNTIwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcjUyMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjUyMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KKwkvKiBCSU9TKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUlY1MTUgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcjUyMF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9kZWJ1Z2ZzKHJkZXYpOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSBydjM3MF9wY2llX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnY1MTVfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByNTIwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnY1MTVfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFmNjFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwZC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1I1MjBEX0hfXworI2RlZmluZSBfX1I1MjBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgKKyNkZWZpbmUgICBTXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkJCTV9ISUJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0tJRF9DRkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX1ZGX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisKKyNkZWZpbmUgUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQKKyNkZWZpbmUgICBTXzAwMDAwNF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNF9NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNF9NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDA1X01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1CisjZGVmaW5lICAgU18wMDAwMDVfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDVfTUNfQUdQX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDVfTUNfQUdQX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNl9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNgorI2RlZmluZSAgIFNfMDAwMDA2X0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDZfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDAwN19BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNworI2RlZmluZSAgIFNfMDAwMDA3X0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA3X0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDA3X0FHUF9CQVNFX0FERFJfMiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGVhYjMxYzEuLjI3OGY2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicmFkZW9uX21vZGUuaCIKICNpbmNsdWRlICJyNjAwZC5oIgotI2luY2x1ZGUgImF2aXZvZC5oIgogI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKIAogI2RlZmluZSBQRlBfVUNPREVfU0laRSA1NzYKICNkZWZpbmUgUE00X1VDT0RFX1NJWkUgMTc5MgpAQCAtNjUsMTYgKzY1LDExIEBACiAKIGludCByNjAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzoKLSAqIHI2MDAscnY2MTAscnY2MzAscnY2MjAscnY2MzUscnY2NzAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCisvKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwICovCiBpbnQgcjYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLQogLyoKICAqIFI2MDAgUENJRSBHQVJUCiAgKi8KQEAgLTE2OCw3ICsxNjMsNyBAQAogCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOwogCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCByZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIHJkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05URVhUIHwgUEFHRV9UQUJMRV9ERVBUSCgwKSB8CiAJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCk7CkBAIC0yMjUsNiArMjIwLDQwIEBACiAJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAordm9pZCByNjAwX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCS8qIFNldHVwIEwyIGNhY2hlICovCisJV1JFRzMyKFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9DQUNIRSB8IEVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQlFTkFCTEVfTDJfUFRFX0NBQ0hFX0xSVV9VUERBVEVfQllfV1JJVEUgfAorCQkJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDcpKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDIsIDApOworCVdSRUczMihWTV9MMl9DTlRMMywgQkFOS19TRUxFQ1RfMCgwKSB8IEJBTktfU0VMRUNUXzEoMSkpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KSB8CisJCUVOQUJMRV9XQUlUX0wyX1FVRVJZOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NZU19DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NZU19DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0hEUF9DTlRMLCB0bXAgfCBFTkFCTEVfTDFfU1RSSUNUX09SREVSSU5HKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9IRFBfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1JEX0JfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9XUl9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfR0ZYX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfR0ZYX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfUERNQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworfQorCiBpbnQgcjYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7CkBAIC0yNDAsMTQgKzI2OSw5IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCByNjAwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHI2MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgZDF2Z2FfY29udHJvbCwgZDJ2Z2FfY29udHJvbDsKLQl1MzIgdmdhX3JlbmRlcl9jb250cm9sLCB2Z2FfaGRwX2NvbnRyb2w7Ci0JdTMyIGQxY3J0Y19jb250cm9sLCBkMmNydGNfY29udHJvbDsKLQl1MzIgbmV3X2QxZ3JwaF9wcmltYXJ5LCBuZXdfZDFncnBoX3NlY29uZGFyeTsKLQl1MzIgbmV3X2QyZ3JwaF9wcmltYXJ5LCBuZXdfZDJncnBoX3NlY29uZGFyeTsKLQl1NjQgb2xkX3ZyYW1fc3RhcnQ7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKIAl1MzIgdG1wOwogCWludCBpLCBqOwogCkBAIC0yNjEsOTkgKzI4NSw2NCBAQAogCX0KIAlXUkVHMzIoSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTCwgMCk7CiAKLQlkMXZnYV9jb250cm9sID0gUlJFRzMyKEQxVkdBX0NPTlRST0wpOwotCWQydmdhX2NvbnRyb2wgPSBSUkVHMzIoRDJWR0FfQ09OVFJPTCk7Ci0JdmdhX3JlbmRlcl9jb250cm9sID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7Ci0JdmdhX2hkcF9jb250cm9sID0gUlJFRzMyKFZHQV9IRFBfQ09OVFJPTCk7Ci0JZDFjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDFDUlRDX0NPTlRST0wpOwotCWQyY3J0Y19jb250cm9sID0gUlJFRzMyKEQyQ1JUQ19DT05UUk9MKTsKLQlvbGRfdnJhbV9zdGFydCA9ICh1NjQpKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJiAweEZGRkYpIDw8IDI0OwotCW5ld19kMWdycGhfcHJpbWFyeSA9IFJSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDFncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMWdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQluZXdfZDJncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QyZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQluZXdfZDJncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0KLQkvKiBTdG9wIGFsbCB2aWRlbyAqLwotCVdSRUczMihEMVZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMSk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMSk7Ci0JV1JFRzMyKEQxQ1JUQ19DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOwotCi0JbWRlbGF5KDEpOworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOwogCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CiAJfQotCi0JLyogTG9ja291dCBhY2Nlc3MgdGhyb3VnaCBWR0EgYXBlcnR1cmUqLworCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlIChkb2Vzbid0IGV4aXN0IGJlZm9yZSBSNjAwKSAqLwogCVdSRUczMihWR0FfSERQX0NPTlRST0wsIFZHQV9NRU1PUllfRElTQUJMRSk7Ci0KIAkvKiBVcGRhdGUgY29uZmlndXJhdGlvbiAqLwotCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOwotCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAxMik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlpZiAocmRldi0+bWMudnJhbV9zdGFydCA8IHJkZXYtPm1jLmd0dF9zdGFydCkgeworCQkJLyogVlJBTSBiZWZvcmUgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsCisJCQkJcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CisJCX0gZWxzZSB7CisJCQkvKiBWUkFNIGFmdGVyIEFHUCAqLworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCQl9CisJfSBlbHNlIHsKKwkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCByZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJfQogCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSLCAwKTsKLQl0bXAgPSAoKChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDI0KSAmIDB4RkZGRikgPDwgMTY7CisJdG1wID0gKChyZGV2LT5tYy52cmFtX2VuZCA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OwogCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMjQpICYgMHhGRkZGKTsKIAlXUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04sIHRtcCk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0JBU0UsIChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDgpKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfSU5GTywgKDIgPDwgNykpOwotCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCAocmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkgfCAweDNGRik7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX1NJWkUsIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSB8IDB4M0ZGKTsKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCVdSRUczMihNQ19WTV9BR1BfVE9QLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDE2KTsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfVE9QLCByZGV2LT5tYy5ndHRfZW5kID4+IDIyKTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAyMik7CiAJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgcmRldi0+bWMuYWdwX2Jhc2UgPj4gMjIpOwogCX0gZWxzZSB7CiAJCVdSRUczMihNQ19WTV9BR1BfQkFTRSwgMCk7CiAJCVdSRUczMihNQ19WTV9BR1BfVE9QLCAweDBGRkZGRkZGKTsKIAkJV1JFRzMyKE1DX1ZNX0FHUF9CT1QsIDB4MEZGRkZGRkYpOwogCX0KLQlXUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3ByaW1hcnkpOwotCVdSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9zZWNvbmRhcnkpOwotCVdSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKFZHQV9NRU1PUllfQkFTRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKLQotCS8qIFVubG9jayBob3N0IGFjY2VzcyAqLwotCVdSRUczMihWR0FfSERQX0NPTlRST0wsIHZnYV9oZHBfY29udHJvbCk7Ci0KLQltZGVsYXkoMSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KLQkvKiBSZXN0b3JlIHZpZGVvIHN0YXRlICovCi0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMSk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMSk7Ci0JV1JFRzMyKEQxQ1JUQ19DT05UUk9MLCBkMWNydGNfY29udHJvbCk7Ci0JV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCBkMmNydGNfY29udHJvbCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIGQxdmdhX2NvbnRyb2wpOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCBkMnZnYV9jb250cm9sKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCB2Z2FfcmVuZGVyX2NvbnRyb2wpOwotCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKIAkvKiB3ZSBuZWVkIHRvIG93biBWUkFNLCBzbyB0dXJuIG9mZiB0aGUgVkdBIHJlbmRlcmVyIGhlcmUKIAkgKiB0byBzdG9wIGl0IG92ZXJ3cml0aW5nIG91ciBvYmplY3RzICovCi0JcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiB9CiAKIGludCByNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJZml4ZWQyMF8xMiBhOwogCXUzMiB0bXA7Ci0JaW50IGNoYW5zaXplOworCWludCBjaGFuc2l6ZSwgbnVtY2hhbjsKIAlpbnQgcjsKIAogCS8qIEdldCBWUkFNIGluZm9ybWF0aW9ucyAqLwotCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAxMjg7CiAJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwogCXRtcCA9IFJSRUczMihSQU1DRkcpOwogCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgewpAQCAtMzYzLDIzICszNTIsMzYgQEAKIAl9IGVsc2UgewogCQljaGFuc2l6ZSA9IDMyOwogCX0KLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjYwMCkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gOCAqIGNoYW5zaXplOwotCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2NzApIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDQgKiBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKLQkJCShyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYyMCkpIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IGNoYW5zaXplOwotCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjMwKSB8fAotCQkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjM1KSkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMiAqIGNoYW5zaXplOworCXRtcCA9IFJSRUczMihDSE1BUCk7CisJc3dpdGNoICgodG1wICYgTk9PRkNIQU5fTUFTSykgPj4gTk9PRkNIQU5fU0hJRlQpIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJbnVtY2hhbiA9IDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbnVtY2hhbiA9IDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbnVtY2hhbiA9IDQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbnVtY2hhbiA9IDg7CisJCWJyZWFrOwogCX0KKwlyZGV2LT5tYy52cmFtX3dpZHRoID0gbnVtY2hhbiAqIGNoYW5zaXplOwogCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCiAJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKIAkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCiAJcmRldi0+bWMubWNfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKIAlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisKKwlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisKKwlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwogCQlpZiAocikKQEAgLTQwNyw0MCArNDA5LDM0IEBACiAJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODAgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM4ODApIHsKLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmCi0JCQkJCQkJCTB4RkZGRikgPDwgMjQ7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCQlpZiAoKDB4RkZGRkZGRkZVTCAtIHRtcCkgPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKLQkJCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgdnJhbSAqLwotCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJCX0gZWxzZSBpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgewotCQkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgdnJhbSAqLwotCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCS8qIE5vdCBlbm91Z2ggcGxhY2UgYWZ0ZXIgb3IgYmVmb3JlIHNocmluawotCQkJCSAqIGdhcnQgc2l6ZQotCQkJCSAqLwotCQkJCWlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID4gKDB4RkZGRkZGRkZVTCAtIHRtcCkpIHsKLQkJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKLQkJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSAweEZGRkZGRkZGVUwgLSB0bXA7Ci0JCQkJfQotCQkJfQotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOworCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IChSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYKKwkJCQkJCQkweEZGRkYpIDw8IDI0OworCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOworCQlpZiAoKDB4RkZGRkZGRkZVTCAtIHRtcCkgPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCS8qIEVub3VnaCBwbGFjZSBhZnRlciB2cmFtICovCisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7CisJCX0gZWxzZSBpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgeworCQkJLyogRW5vdWdoIHBsYWNlIGJlZm9yZSB2cmFtICovCisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwogCQl9IGVsc2UgewotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQkJLyogTm90IGVub3VnaCBwbGFjZSBhZnRlciBvciBiZWZvcmUgc2hyaW5rCisJCQkgKiBnYXJ0IHNpemUKKwkJCSAqLworCQkJaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPiAoMHhGRkZGRkZGRlVMIC0gdG1wKSkgeworCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7CisJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCQkJfSBlbHNlIHsKKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7CisJCQkJcmRldi0+bWMuZ3R0X3NpemUgPSAweEZGRkZGRkZGVUwgLSB0bXA7CisJCQl9CiAJCX0KKwkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwogCX0KIAlyZGV2LT5tYy52cmFtX3N0YXJ0ID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKLQlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKIAlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247Ci0JcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplOworCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7CiAJLyogRklYTUU6IHdlIHNob3VsZCBlbmZvcmNlIGRlZmF1bHQgY2xvY2sgaW4gY2FzZSBHUFUgaXMgbm90IGluCiAJICogZGVmYXVsdCBzZXR1cAogCSAqLwpAQCAtNDU2LDYgKzQ1Miw3IEBACiAgKi8KIGludCByNjAwX2dwdV9zb2Z0X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CiAJdTMyIGdyYm1fYnVzeV9tYXNrID0gU18wMDgwMTBfVkNfQlVTWSgxKSB8IFNfMDA4MDEwX1ZHVF9CVVNZX05PX0RNQSgxKSB8CiAJCQkJU18wMDgwMTBfVkdUX0JVU1koMSkgfCBTXzAwODAxMF9UQTAzX0JVU1koMSkgfAogCQkJCVNfMDA4MDEwX1RDX0JVU1koMSkgfCBTXzAwODAxMF9TWF9CVVNZKDEpIHwKQEAgLTQ3MywxMyArNDcwLDI1IEBACiAJCQlTXzAwODAxNF9DQjBfQlVTWSgxKSB8IFNfMDA4MDE0X0NCMV9CVVNZKDEpIHwKIAkJCVNfMDA4MDE0X0NCMl9CVVNZKDEpIHwgU18wMDgwMTRfQ0IzX0JVU1koMSk7CiAJdTMyIHNyYm1fcmVzZXQgPSAwOworCXUzMiB0bXA7CiAKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxMF9HUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTRfR1JCTV9TVEFUVVMyPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDE0X0dSQk1fU1RBVFVTMikpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDBFNTBfU1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKTsKKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKKwlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CisJfQogCS8qIERpc2FibGUgQ1AgcGFyc2luZy9wcmVmZXRjaGluZyAqLwogCVdSRUczMihSXzAwODZEOF9DUF9NRV9DTlRMLCBTXzAwODZEOF9DUF9NRV9IQUxUKDB4ZmYpKTsKIAkvKiBDaGVjayBpZiBhbnkgb2YgdGhlIHJlbmRlcmluZyBibG9jayBpcyBidXN5IGFuZCByZXNldCBpdCAqLwogCWlmICgoUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSAmIGdyYm1fYnVzeV9tYXNrKSB8fAogCSAgICAoUlJFRzMyKFJfMDA4MDE0X0dSQk1fU1RBVFVTMikgJiBncmJtMl9idXN5X21hc2spKSB7Ci0JCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1IoMSkgfAorCQl0bXAgPSBTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfREIoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9DQigxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1BBKDEpIHwKQEAgLTQ5MSwxNCArNTAwLDE4IEBACiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RDKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVEEoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WQygxKSB8Ci0JCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1ZHVCgxKSk7CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1ZHVCgxKTsKKwkJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQ9MHglMDhYXG4iLCB0bXApOworCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCB0bXApOwogCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAkJdWRlbGF5KDUwKTsKIAkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgMCk7CiAJCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOwogCX0KIAkvKiBSZXNldCBDUCAod2UgYWx3YXlzIHJlc2V0IENQKSAqLwotCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1AoMSkpOworCXRtcCA9IFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1AoMSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgdG1wKTsKKwlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCB0bXApOwogCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOwogCXVkZWxheSg1MCk7CiAJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgMCk7CkBAIC01MjYsNiArNTM5LDE0IEBACiAJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9STEMoMSk7CiAJaWYgKEdfMDAwRTUwX1NFTV9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQogCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfU0VNKDEpOworCWlmIChHXzAwMEU1MF9CSUZfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX0JJRigxKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVD0weCUwOFhcbiIsIHNyYm1fcmVzZXQpOworCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIHNyYm1fcmVzZXQpOworCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOworCXVkZWxheSg1MCk7CisJV1JFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCwgMCk7CisJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CiAJV1JFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCwgc3JibV9yZXNldCk7CiAJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CiAJdWRlbGF5KDUwKTsKQEAgLTUzMyw2ICs1NTQsMTcgQEAKIAkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKIAkvKiBXYWl0IGEgbGl0dGxlIGZvciB0aGluZ3MgdG8gc2V0dGxlIGRvd24gKi8KIAl1ZGVsYXkoNTApOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDE0X0dSQk1fU1RBVFVTMj0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDAwRTUwX1NSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSk7CisJLyogQWZ0ZXIgcmVzZXQgd2UgbmVlZCB0byByZWluaXQgdGhlIGFzaWMgYXMgR1BVIG9mdGVuIGVuZHVwIGluIGFuCisJICogaW5jb2hlcmVudCBzdGF0ZS4KKwkgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCXJldHVybiAwOwogfQogCkBAIC04MjYsNyArODU4LDggQEAKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKERCX0RFQlVHLCBQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKERCX0RFQlVHLCAwKTsKQEAgLTg0Myw3ICs4NzYsOCBAQAogCXRtcCA9IFJSRUczMihTUV9NU19GSUZPX1NJWkVTKTsKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQl0bXAgPSAoQ0FDSEVfRklGT19TSVpFKDB4YSkgfAogCQkgICAgICAgRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAogCQkgICAgICAgRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfApAQCAtODg2LDcgKzkyMCw4IEBACiAJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CiAJfSBlbHNlIGlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCS8qIG5vIHZlcnRleCBjYWNoZSAqLwogCQlzcV9jb25maWcgJj0gflZDX0VOQUJMRTsKIApAQCAtOTQzLDcgKzk3OCw4IEBACiAKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQykpOwpAQCAtOTY5LDggKzEwMDUsOSBAQAogCXRtcCA9IHJkZXYtPmNvbmZpZy5yNjAwLm1heF9waXBlcyAqIDE2OwogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wICs9IDMyOwogCQlicmVhazsKIAljYXNlIENISVBfUlY2NzA6CkBAIC0xMDExLDggKzEwNDgsOSBAQAogCiAJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAljYXNlIENISVBfUlY2MTA6Ci0JY2FzZSBDSElQX1JTNzgwOgogCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgogCQl0bXAgPSBUQ19MMl9TSVpFKDgpOwogCQlicmVhazsKIAljYXNlIENISVBfUlY2MzA6CkBAIC0xMjM0LDE5ICsxMjcyLDE3IEBACiAKIAkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLwogCXJiX2J1ZnN6ID0gZHJtX29yZGVyKHJkZXYtPmNwLnJpbmdfc2l6ZSAvIDgpOworCXRtcCA9IFJCX05PX1VQREFURSB8IChkcm1fb3JkZXIoUkFERU9OX0dQVV9QQUdFX1NJWkUvOCkgPDwgOCkgfCByYl9idWZzejsKICNpZmRlZiBfX0JJR19FTkRJQU4KLQlXUkVHMzIoQ1BfUkJfQ05UTCwgQlVGX1NXQVBfMzJCSVQgfCBSQl9OT19VUERBVEUgfAotCQkoZHJtX29yZGVyKDQwOTYvOCkgPDwgOCkgfCByYl9idWZzeik7Ci0jZWxzZQotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKDQwOTYvOCkgPDwgOCkgfCByYl9idWZzeik7CisJdG1wIHw9IEJVRl9TV0FQXzMyQklUOwogI2VuZGlmCisJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCk7CiAJV1JFRzMyKENQX1NFTV9XQUlUX1RJTUVSLCAweDQpOwogCiAJLyogU2V0IHRoZSB3cml0ZSBwb2ludGVyIGRlbGF5ICovCiAJV1JFRzMyKENQX1JCX1dQVFJfREVMQVksIDApOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcmluZyBidWZmZXIncyByZWFkIGFuZCB3cml0ZSBwb2ludGVycyAqLwotCXRtcCA9IFJSRUczMihDUF9SQl9DTlRMKTsKIAlXUkVHMzIoQ1BfUkJfQ05UTCwgdG1wIHwgUkJfUlBUUl9XUl9FTkEpOwogCVdSRUczMihDUF9SQl9SUFRSX1dSLCAwKTsKIAlXUkVHMzIoQ1BfUkJfV1BUUiwgMCk7CkBAIC0xMzQzLDMyICsxMzc5LDQ3IEBACiAJcmV0dXJuIHI7CiB9CiAKLS8qCi0gKiBXcml0ZWJhY2sKLSAqLwotaW50IHI2MDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjYwMF93Yl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihTQ1JBVENIX1VNU0ssIDApOworCWlmIChyZGV2LT53Yi53Yl9vYmopIHsKKwkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+d2Iud2Jfb2JqKTsKKwkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT53Yi53Yl9vYmopOworCX0KK30KKwordm9pZCByNjAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT53Yi53Yl9vYmopIHsKKwkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKKwkJcmRldi0+d2Iud2IgPSBOVUxMOworCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOworCX0KK30KKworaW50IHI2MDBfd2JfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByOwogCiAJaWYgKHJkZXYtPndiLndiX29iaiA9PSBOVUxMKSB7Ci0JCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCA0MDk2LAotCQkJCQkgdHJ1ZSwKLQkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKLQkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLCB0cnVlLAorCQkJCVJBREVPTl9HRU1fRE9NQUlOX0dUVCwgZmFsc2UsICZyZGV2LT53Yi53Yl9vYmopOwogCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBjcmVhdGUgV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgV0IgYnVmZmVyICglZCkuXG4iLCByKTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT53Yi53Yl9vYmosCi0JCQkJICAgICAgUkFERU9OX0dFTV9ET01BSU5fR1RULAotCQkJCSAgICAgICZyZGV2LT53Yi5ncHVfYWRkcik7CisJCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT53Yi53Yl9vYmosIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKKwkJCQkmcmRldi0+d2IuZ3B1X2FkZHIpOwogCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBwaW4gV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCB0byBwaW4gV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCXI2MDBfd2JfZmluaShyZGV2KTsKIAkJCXJldHVybiByOwogCQl9CiAJCXIgPSByYWRlb25fb2JqZWN0X2ttYXAocmRldi0+d2Iud2Jfb2JqLCAodm9pZCAqKikmcmRldi0+d2Iud2IpOwogCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCB0byBtYXAgV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgV0IgYnVmZmVyICglZCkuXG4iLCByKTsKKwkJCXI2MDBfd2JfZmluaShyZGV2KTsKIAkJCXJldHVybiByOwogCQl9CiAJfQpAQCAtMTM3OSwyMSArMTQzMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWlmIChyZGV2LT53Yi53Yl9vYmopIHsKLQkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+d2Iud2Jfb2JqKTsKLQkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT53Yi53Yl9vYmopOwotCQlyYWRlb25fb2JqZWN0X3VucmVmKCZyZGV2LT53Yi53Yl9vYmopOwotCQlyZGV2LT53Yi53YiA9IE5VTEw7Ci0JCXJkZXYtPndiLndiX29iaiA9IE5VTEw7Ci0JfQotfQotCi0KLS8qCi0gKiBDUwotICovCiB2b2lkIHI2MDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKIHsKQEAgLTE0MTcsOCArMTQ1Myw4IEBACiAJCSAgIHVpbnQ2NF90IHNyY19vZmZzZXQsIHVpbnQ2NF90IGRzdF9vZmZzZXQsCiAJCSAgIHVuc2lnbmVkIG51bV9wYWdlcywgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7Ci0JcjYwMF9ibGl0X3ByZXBhcmVfY29weShyZGV2LCBudW1fcGFnZXMgKiA0MDk2KTsKLQlyNjAwX2ttc19ibGl0X2NvcHkocmRldiwgc3JjX29mZnNldCwgZHN0X29mZnNldCwgbnVtX3BhZ2VzICogNDA5Nik7CisJcjYwMF9ibGl0X3ByZXBhcmVfY29weShyZGV2LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CisJcjYwMF9rbXNfYmxpdF9jb3B5KHJkZXYsIHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIG51bV9wYWdlcyAqIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAlyNjAwX2JsaXRfZG9uZV9jb3B5KHJkZXYsIGZlbmNlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NzAsMTEgKzE1MDYsMTQgQEAKIHsKIAlpbnQgcjsKIAotCXI2MDBfZ3B1X3Jlc2V0KHJkZXYpOwotCXI2MDBfbWNfcmVzdW1lKHJkZXYpOwotCXIgPSByNjAwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXI2MDBfbWNfcHJvZ3JhbShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXI2MDBfYWdwX2VuYWJsZShyZGV2KTsKKwl9IGVsc2UgeworCQlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlyNjAwX2dwdV9pbml0KHJkZXYpOwogCiAJciA9IHJhZGVvbl9vYmplY3RfcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLApAQCAtMTQ5Myw5ICsxNTMyLDggQEAKIAlyID0gcjYwMF9jcF9yZXN1bWUocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwotCXIgPSByNjAwX3diX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCS8qIHdyaXRlIGJhY2sgYnVmZmVyIGFyZSBub3Qgdml0YWwgc28gZG9uJ3Qgd29ycnkgYWJvdXQgZmFpbHVyZSAqLworCXI2MDBfd2JfZW5hYmxlKHJkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTE3LDE1ICsxNTU1LDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiByNjAwIGh3IHVubGlrZSBvbiByNTAwIGh3LAorCSAqIHBvc3Rpbmcgd2lsbCBwZXJmb3JtIG5lY2Vzc2FyeSB0YXNrIHRvIGJyaW5nIGJhY2sgR1BVIGludG8gZ29vZAorCSAqIHNoYXBlLgorCSAqLwogCS8qIHBvc3QgY2FyZCAqLwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOwotCX0KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CiAJaWYgKHIpIHsKQEAgLTE1MzgsNyArMTU3Myw3IEBACiAJCXJldHVybiByOwogCX0KIAotCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwlyID0gcjYwMF9pYl90ZXN0KHJkZXYpOwogCWlmIChyKSB7CiAJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKQEAgLTE1NDYsMTMgKzE1ODEsMTIgQEAKIAlyZXR1cm4gcjsKIH0KIAotCiBpbnQgcjYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLwogCXI2MDBfY3Bfc3RvcChyZGV2KTsKIAlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOwotCisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwpAQCAtMTU2OSw3ICsxNjAzLDYgQEAKIHsKIAlpbnQgcjsKIAotCXJkZXYtPm5ld19pbml0X3BhdGggPSB0cnVlOwogCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTE1ODYsOCArMTYxOSwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTE2MDAsMjQgKzE2MzUsMjAgQEAKIAlyNjAwX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCiAJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAlyID0gcjYwMF9tY19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJCS8qIFJldHJ5IHdpdGggZGlzYWJsaW5nIEFHUCAqLwotCQkJcjYwMF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcjYwMF9pbml0KHJkZXYpOwotCQl9CisJaWYgKHIpCiAJCXJldHVybiByOwotCX0KIAkvKiBNZW1vcnkgbWFuYWdlciAqLwogCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CiAJaWYgKHIpCkBAIC0xNjQ2LDEyICsxNjc3LDEwIEBACiAKIAlyID0gcjYwMF9zdGFydHVwKHJkZXYpOwogCWlmIChyKSB7Ci0JCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJCS8qIFJldHJ5IHdpdGggZGlzYWJsaW5nIEFHUCAqLwotCQkJcjYwMF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcjYwMF9pbml0KHJkZXYpOwotCQl9CisJCXI2MDBfc3VzcGVuZChyZGV2KTsKKwkJcjYwMF93Yl9maW5pKHJkZXYpOworCQlyYWRlb25fcmluZ19maW5pKHJkZXYpOworCQlyNjAwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xNjYwLDcgKzE2ODksNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTY3NiwxOSArMTcwNSwxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAlyYWRlb25fZ2VtX2ZpbmkocmRldik7CiAJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOwogCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKLSNpZiBfX09TX0hBU19BR1AKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKQogCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0jZW5kaWYKIAlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7Ci0JaWYgKHJkZXYtPmlzX2F0b21fYmlvcykKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JZWxzZQotCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwogCWtmcmVlKHJkZXYtPmJpb3MpOwogCXJkZXYtPmJpb3MgPSBOVUxMOwogCXJhZGVvbl9kdW1teV9wYWdlX2ZpbmkocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwppbmRleCBkOTg4ZWVjLi41ZWE0MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKQEAgLTc3NCwxMSArNzc0LDEwIEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY2JfZm9ybWF0LCB0ZXhfZm9ybWF0OworCWludCBzeDIsIHN5MiwgZHgyLCBkeTI7CiAJdTY0IHZiX2FkZHI7CiAJdTMyICp2YjsKIAotCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKLQogCWlmICgoZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKyA0OCkgPiBkZXZfcHJpdi0+YmxpdF92Yi0+dG90YWwpIHsKIAogCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CkBAIC03ODcsMTkgKzc4NiwxMyBAQAogCQkJcmV0dXJuOwogCiAJCXNldF9zaGFkZXJzKGRldik7Ci0JCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAl9CisJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCi0JaWYgKGNwcCA9PSA0KSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKLQl9IGVsc2UgaWYgKGNwcCA9PSAyKSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzVfNl81OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzVfNl81OwotCX0gZWxzZSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfODsKLQl9CisJc3gyID0gc3ggKyB3OworCXN5MiA9IHN5ICsgaDsKKwlkeDIgPSBkeCArIHc7CisJZHkyID0gZHkgKyBoOwogCiAJdmJbMF0gPSBpMmYoZHgpOwogCXZiWzFdID0gaTJmKGR5KTsKQEAgLTgwNywzMSArODAwLDQ2IEBACiAJdmJbM10gPSBpMmYoc3kpOwogCiAJdmJbNF0gPSBpMmYoZHgpOwotCXZiWzVdID0gaTJmKGR5ICsgaCk7CisJdmJbNV0gPSBpMmYoZHkyKTsKIAl2Yls2XSA9IGkyZihzeCk7Ci0JdmJbN10gPSBpMmYoc3kgKyBoKTsKKwl2Yls3XSA9IGkyZihzeTIpOwogCi0JdmJbOF0gPSBpMmYoZHggKyB3KTsKLQl2Yls5XSA9IGkyZihkeSArIGgpOwotCXZiWzEwXSA9IGkyZihzeCArIHcpOwotCXZiWzExXSA9IGkyZihzeSArIGgpOworCXZiWzhdID0gaTJmKGR4Mik7CisJdmJbOV0gPSBpMmYoZHkyKTsKKwl2YlsxMF0gPSBpMmYoc3gyKTsKKwl2YlsxMV0gPSBpMmYoc3kyKTsKKworCXN3aXRjaChjcHApIHsKKwljYXNlIDQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7CisJCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKKwkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfODsKKwkJdGV4X2Zvcm1hdCA9IEZNVF84OworCQlicmVhazsKKwl9CiAKIAkvKiBzcmMgKi8KIAlzZXRfdGV4X3Jlc291cmNlKGRldl9wcml2LCB0ZXhfZm9ybWF0LAogCQkJIHNyY19waXRjaCAvIGNwcCwKLQkJCSBzeSArIGgsIHNyY19waXRjaCAvIGNwcCwKKwkJCSBzeTIsIHNyY19waXRjaCAvIGNwcCwKIAkJCSBzcmNfZ3B1X2FkZHIpOwogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKLQkJCSAgICBSNjAwX1RDX0FDVElPTl9FTkEsIChzcmNfcGl0Y2ggKiAoc3kgKyBoKSksIHNyY19ncHVfYWRkcik7CisJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCBzcmNfcGl0Y2ggKiBzeTIsIHNyY19ncHVfYWRkcik7CiAKIAkvKiBkc3QgKi8KIAlzZXRfcmVuZGVyX3RhcmdldChkZXZfcHJpdiwgY2JfZm9ybWF0LAotCQkJICBkc3RfcGl0Y2ggLyBjcHAsIGR5ICsgaCwKKwkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeTIsCiAJCQkgIGRzdF9ncHVfYWRkcik7CiAKIAkvKiBzY2lzc29ycyAqLwotCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeCArIHcsIGR5ICsgaCk7CisJc2V0X3NjaXNzb3JzKGRldl9wcml2LCBkeCwgZHksIGR4MiwgZHkyKTsKIAogCS8qIFZlcnRleCBidWZmZXIgc2V0dXAgKi8KIAl2Yl9hZGRyID0gZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKwpAQCAtODQ0LDcgKzg1Miw3IEBACiAKIAljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAogCQkJICAgIFI2MDBfQ0JfQUNUSU9OX0VOQSB8IFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEsCi0JCQkgICAgZHN0X3BpdGNoICogKGR5ICsgaCksIGRzdF9ncHVfYWRkcik7CisJCQkgICAgZHN0X3BpdGNoICogZHkyLCBkc3RfZ3B1X2FkZHIpOwogCiAJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKz0gMTIgKiA0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCBhY2FlMzNlLi5kYmY3MTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3MTApKQogCQlzcV9jb25maWcgPSAwOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggMzNiODljZC4uMGQ4MjA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicjYwMGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKIAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwpAQCAtNTcsNyArNTYsNyBAQAogCQkJICBpZHgsIGliX2NodW5rLT5sZW5ndGhfZHcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaGVhZGVyID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJaGVhZGVyID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCXBrdC0+aWR4ID0gaWR4OwogCXBrdC0+dHlwZSA9IENQX1BBQ0tFVF9HRVRfVFlQRShoZWFkZXIpOwogCXBrdC0+Y291bnQgPSBDUF9QQUNLRVRfR0VUX0NPVU5UKGhlYWRlcik7CkBAIC05OCw3ICs5Nyw2IEBACiBzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2NfbW0oc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDksNyArMTA3LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCSpjc19yZWxvYyA9IE5VTEw7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJcmVsb2NzX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19yZWxvY3NfaWR4XTsKIAlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCk7CiAJaWYgKHIpIHsKQEAgLTEyMSw3ICsxMTgsNyBAQAogCQkJICBwM3JlbG9jLmlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZHggPSBpYl9jaHVuay0+a2RhdGFbcDNyZWxvYy5pZHggKyAxXTsKKwlpZHggPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHAzcmVsb2MuaWR4ICsgMSk7CiAJaWYgKGlkeCA+PSByZWxvY3NfY2h1bmstPmxlbmd0aF9kdykgewogCQlEUk1fRVJST1IoIlJlbG9jcyBhdCAlZCBhZnRlciByZWxvY2F0aW9ucyBjaHVuayBlbmQgJWQgIVxuIiwKIAkJCSAgaWR4LCByZWxvY3NfY2h1bmstPmxlbmd0aF9kdyk7CkBAIC0xNDYsNyArMTQzLDYgQEAKIHN0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19ub21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CiAJdW5zaWduZWQgaWR4OwpAQCAtMTU3LDcgKzE1Myw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xNjksNyArMTY0LDcgQEAKIAkJCSAgcDNyZWxvYy5pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTgxLDEzICsxNzYsMTM2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogcjYwMF9jc19wYWNrZXRfbmV4dF92bGluZSgpIC0gcGFyc2UgdXNlcnNwYWNlIFZMSU5FIHBhY2tldAorICogQHBhcnNlcjoJCXBhcnNlciBzdHJ1Y3R1cmUgaG9sZGluZyBwYXJzaW5nIGNvbnRleHQuCisgKgorICogVXNlcnNwYWNlIHNlbmRzIGEgc3BlY2lhbCBzZXF1ZW5jZSBmb3IgVkxJTkUgd2FpdHMuCisgKiBQQUNLRVQwIC0gVkxJTkVfU1RBUlRfRU5EICsgdmFsdWUKKyAqIFBBQ0tFVDMgLSBXQUlUX1JFR19NRU0gcG9sbCB2bGluZSBzdGF0dXMgcmVnCisgKiBSRUxPQyAoUDMpIC0gY3J0Y19pZCBpbiByZWxvYy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGlzIGFuZCByZWxvY2F0ZXMgdGhlIFZMSU5FIFNUQVJUIEVORAorICogYW5kIFdBSVRfUkVHX01FTSBwYWNrZXRzIHRvIHRoZSBjb3JyZWN0IGNydGMuCisgKiBJdCBhbHNvIGRldGVjdHMgYSBzd2l0Y2hlZCBvZmYgY3J0YyBhbmQgbnVsbHMgb3V0IHRoZQorICogd2FpdCBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjOworCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2MsIHdhaXRfcmVnX21lbTsKKwlpbnQgY3J0Y19pZDsKKwlpbnQgcjsKKwl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWcsIHdhaXRfcmVnX21lbV9pbmZvOworCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKKworCWliID0gcC0+aWItPnB0cjsKKworCS8qIHBhcnNlIHRoZSBXQUlUX1JFR19NRU0gKi8KKwlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRfcmVnX21lbSwgcC0+aWR4KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBjaGVjayBpdHMgYSBXQUlUX1JFR19NRU0gKi8KKwlpZiAod2FpdF9yZWdfbWVtLnR5cGUgIT0gUEFDS0VUX1RZUEUzIHx8CisJICAgIHdhaXRfcmVnX21lbS5vcGNvZGUgIT0gUEFDS0VUM19XQUlUX1JFR19NRU0pIHsKKwkJRFJNX0VSUk9SKCJ2bGluZSB3YWl0IG1pc3NpbmcgV0FJVF9SRUdfTUVNIHNlZ21lbnRcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCisJd2FpdF9yZWdfbWVtX2luZm8gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHdhaXRfcmVnX21lbS5pZHggKyAxKTsKKwkvKiBiaXQgNCBpcyByZWcgKDApIG9yIG1lbSAoMSkgKi8KKwlpZiAod2FpdF9yZWdfbWVtX2luZm8gJiAweDEwKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIHdhaXRpbmcgb24gTUVNIHJhdGhlciB0aGFuIFJFR1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisJLyogd2FpdGluZyBmb3IgdmFsdWUgdG8gYmUgZXF1YWwgKi8KKwlpZiAoKHdhaXRfcmVnX21lbV9pbmZvICYgMHg3KSAhPSAweDMpIHsKKwkJRFJNX0VSUk9SKCJ2bGluZSBXQUlUX1JFR19NRU0gZnVuY3Rpb24gbm90IGVxdWFsXG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKwlpZiAoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgd2FpdF9yZWdfbWVtLmlkeCArIDIpIDw8IDIpICE9IEFWSVZPX0QxTU9ERV9WTElORV9TVEFUVVMpIHsKKwkJRFJNX0VSUk9SKCJ2bGluZSBXQUlUX1JFR19NRU0gYmFkIHJlZ1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0X3JlZ19tZW0uaWR4ICsgNSkgIT0gQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVQpIHsKKwkJRFJNX0VSUk9SKCJ2bGluZSBXQUlUX1JFR19NRU0gYmFkIGJpdCBtYXNrXG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKworCS8qIGp1bXAgb3ZlciB0aGUgTk9QICovCisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHggKyB3YWl0X3JlZ19tZW0uY291bnQgKyAyKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwloX2lkeCA9IHAtPmlkeCAtIDI7CisJcC0+aWR4ICs9IHdhaXRfcmVnX21lbS5jb3VudCArIDI7CisJcC0+aWR4ICs9IHAzcmVsb2MuY291bnQgKyAyOworCisJaGVhZGVyID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCk7CisJY3J0Y19pZCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHggKyAyICsgNyArIDEpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOworCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJjYW5ub3QgZmluZCBjcnRjICVkXG4iLCBjcnRjX2lkKTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwljcnRjID0gb2JqX3RvX2NydGMob2JqKTsKKwlyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCWNydGNfaWQgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKKworCWlmICghY3J0Yy0+ZW5hYmxlZCkgeworCQkvKiBpZiB0aGUgQ1JUQyBpc24ndCBlbmFibGVkIC0gd2UgbmVlZCB0byBub3Agb3V0IHRoZSBXQUlUX1JFR19NRU0gKi8KKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDRdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA1XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgNl0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDddID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA4XSA9IFBBQ0tFVDIoMCk7CisJfSBlbHNlIGlmIChjcnRjX2lkID09IDEpIHsKKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBBVklWT19EMU1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQkJaGVhZGVyICY9IH5SNjAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgfD0gQVZJVk9fRDJNT0RFX1ZMSU5FX1NUQVJUX0VORCA+PiAyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVua25vd24gY3J0YyByZWxvY1xuIik7CisJCQlyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWliW2hfaWR4XSA9IGhlYWRlcjsKKwkJaWJbaF9pZHggKyA0XSA9IEFWSVZPX0QyTU9ERV9WTElORV9TVEFUVVMgPj4gMjsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgcjYwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCQkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7CisJaW50IHI7CisKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQljYXNlIEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQ6CisJCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZV92bGluZShwKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJCWlkeCwgcmVnKTsKKwkJCXJldHVybiByOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKQEAgLTIxOCwxNyArMzM2LDE4IEBACiBzdGF0aWMgaW50IHI2MDBfcGFja2V0M19jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXZvbGF0aWxlIHUzMiAqaWI7CiAJdW5zaWduZWQgaWR4OwogCXVuc2lnbmVkIGk7CiAJdW5zaWduZWQgc3RhcnRfcmVnLCBlbmRfcmVnLCByZWc7CiAJaW50IHI7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7CisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM19TVEFSVF8zRF9DTURCVUY6CiAJCWlmIChwLT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCB8fCBwa3QtPmNvdW50KSB7CkBAIC0yNTksOCArMzc4LDggQEAKIAkJCURSTV9FUlJPUigiYmFkIERSQVdfSU5ERVhcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWJbaWR4KzBdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJaWJbaWR4KzFdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCWliW2lkeCswXSA9IGlkeF92YWx1ZSArICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKKwkJaWJbaWR4KzFdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9BVVRPOgogCQlpZiAocGt0LT5jb3VudCAhPSAxKSB7CkBAIC0yODEsMTQgKzQwMCwxNCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCi0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4KzBdICYgMHgxMCkgeworCQlpZiAoaWR4X3ZhbHVlICYgMHgxMCkgewogCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CiAJCQkJRFJNX0VSUk9SKCJiYWQgV0FJVF9SRUdfTUVNXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCQlpYltpZHgrMl0gPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCWliW2lkeCsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU1VSRkFDRV9TWU5DOgpAQCAtMjk3LDggKzQxNiw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiAweGZmZmZmZmZmLzB4MCBpcyBmbHVzaCBhbGwgY2FjaGUgZmxhZyAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSAhPSAweGZmZmZmZmZmIHx8Ci0JCSAgICBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICE9IDApIHsKKwkJaWYgKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgIT0gMHhmZmZmZmZmZiB8fAorCQkgICAgcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAyKSAhPSAwKSB7CiAJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwogCQkJaWYgKHIpIHsKIAkJCQlEUk1fRVJST1IoImJhZCBTVVJGQUNFX1NZTkNcbiIpOwpAQCAtMzE5LDcgKzQzOCw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOwotCQkJaWJbaWR4KzJdIHw9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQkJaWJbaWR4KzJdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19FVkVOVF9XUklURV9FT1A6CkBAIC0zMzMsMTAgKzQ1MiwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJaWJbaWR4KzJdIHw9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlpYltpZHgrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ09ORklHX1JFRzoKLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfRU5EKSB8fApAQCAtMzQ3LDYgKzQ2NiwyMyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcGt0LT5jb3VudDsgaSsrKSB7CiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKKwkJCWNhc2UgU1FfRVNHU19SSU5HX0JBU0U6CisJCQljYXNlIFNRX0dTVlNfUklOR19CQVNFOgorCQkJY2FzZSBTUV9FU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX0dTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfVlNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9QU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX0ZCVUZfUklOR19CQVNFOgorCQkJY2FzZSBTUV9SRURVQ19SSU5HX0JBU0U6CisJCQljYXNlIFNYX01FTU9SWV9FWFBPUlRfQkFTRToKKwkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQkJCWlmIChyKSB7CisJCQkJCURSTV9FUlJPUigiYmFkIFNFVF9DT05GSUdfUkVHICIKKwkJCQkJCQkiMHglMDRYXG4iLCByZWcpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJaWJbaWR4KzEraV0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ1BfQ09IRVJfQkFTRToKIAkJCQkvKiB1c2UgUEFDS0VUM19TVVJGQUNFX1NZTkMgKi8KIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1Niw3ICs0OTIsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19FTkQpIHx8CkBAIC0zNjgsNiArNTA0LDcgQEAKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7CiAJCQlzd2l0Y2ggKHJlZykgewogCQkJY2FzZSBEQl9ERVBUSF9CQVNFOgorCQkJY2FzZSBEQl9IVElMRV9EQVRBX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMF9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjFfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IyX0JBU0U6CkBAIC00MjEsNyArNTU4LDcgQEAKIAkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfUkVTT1VSQ0VfRU5EKSB8fApAQCAtNDMwLDcgKzU2Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgKHBrdC0+Y291bnQgLyA3KTsgaSsrKSB7Ci0JCQlzd2l0Y2ggKEdfX1NRX1ZUWF9DT05TVEFOVF9UWVBFKGliW2lkeCsoaSo3KSs2KzFdKSkgeworCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCsoaSo3KSs2KzEpKSkgewogCQkJY2FzZSBTUV9URVhfVlRYX1ZBTElEX1RFWFRVUkU6CiAJCQkJLyogdGV4IGJhc2UgKi8KIAkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtNDU1LDcgKzU5Miw3IEBACiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCQlpYltpZHgrMSsoaSo3KSswXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmZmZmZmZmKTsKLQkJCQlpYltpZHgrMSsoaSo3KSsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCQlpYltpZHgrMSsoaSo3KSsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJCQlicmVhazsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9JTlZBTElEX1RFWFRVUkU6CiAJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9CVUZGRVI6CkBAIC00NjYsNyArNjAzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0FMVV9DT05TVDoKLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9FTkQpIHx8CkBAIC00NzYsNyArNjEzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX0VORCkgfHwKQEAgLTQ4Niw3ICs2MjMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfTE9PUF9DT05TVDoKLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfRU5EKSB8fApAQCAtNDk2LDcgKzYzMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9DVExfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DVExfQ09OU1RfRU5EKSB8fApAQCAtNTEwLDcgKzY0Nyw3IEBACiAJCQlEUk1fRVJST1IoImJhZCBTRVRfU0FNUExFUlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9TQU1QTEVSX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9TQU1QTEVSX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfU0FNUExFUl9FTkQpIHx8CkBAIC02MDIsNiArNzM5LDggQEAKIAlrZnJlZShwYXJzZXItPnJlbG9jcyk7CiAJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bmNodW5rczsgaSsrKSB7CiAJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtkYXRhKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMF0pOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVsxXSk7CiAJfQogCWtmcmVlKHBhcnNlci0+Y2h1bmtzKTsKIAlrZnJlZShwYXJzZXItPmNodW5rc19hcnJheSk7CkBAIC02MzksNyArNzc4LDYgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAkqbCA9IHBhcnNlci5pYi0+bGVuZ3RoX2R3OwogCXIgPSByNjAwX2NzX3BhcnNlKCZwYXJzZXIpOwogCWlmIChyKSB7CkBAIC02NDcsNiArNzg1LDEyIEBACiAJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CiAJCXJldHVybiByOwogCX0KKwlyID0gcmFkZW9uX2NzX2ZpbmlzaF9wYWdlcygmcGFyc2VyKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBzdHJlYW0gIVxuIik7CisJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCXJldHVybiByOworCX0KIAlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IDRhOTAyOGEuLjI3YWI0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTExOSw2ICsxMTksNyBAQAogI2RlZmluZQlEQl9ERUJVRwkJCQkJMHg5ODMwCiAjZGVmaW5lCQlQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORQkJCSgxIDw8IDMxKQogI2RlZmluZQlEQl9ERVBUSF9CQVNFCQkJCQkweDI4MDBDCisjZGVmaW5lCURCX0hUSUxFX0RBVEFfQkFTRQkJCQkweDI4MDE0CiAjZGVmaW5lCURCX1dBVEVSTUFSS1MJCQkJCTB4OTgzOAogI2RlZmluZQkJREVQVEhfRlJFRSh4KQkJCQkJKCh4KSA8PCAwKQogI2RlZmluZQkJREVQVEhfRkxVU0goeCkJCQkJCSgoeCkgPDwgNSkKQEAgLTE3MSw2ICsxNzIsMTQgQEAKICNkZWZpbmUgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKICMgICAgICAgZGVmaW5lIE5VTV9HU19TVEFDS19FTlRSSUVTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCiAjICAgICAgIGRlZmluZSBOVU1fRVNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgU1FfRVNHU19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzQwCisjZGVmaW5lIFNRX0dTVlNfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0OAorI2RlZmluZSBTUV9FU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNTAKKyNkZWZpbmUgU1FfR1NUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzU4CisjZGVmaW5lIFNRX1ZTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM2MAorI2RlZmluZSBTUV9QU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjgKKyNkZWZpbmUgU1FfRkJVRl9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzcwCisjZGVmaW5lIFNRX1JFRFVDX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3OAogCiAjZGVmaW5lIEdSQk1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAogIyAgICAgICBkZWZpbmUgR1JCTV9SRUFEX1RJTUVPVVQoeCkgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCkBAIC0yNzEsNiArMjgwLDEwIEBACiAjZGVmaW5lCVBDSUVfUE9SVF9JTkRFWAkJCQkJMHgwMDM4CiAjZGVmaW5lCVBDSUVfUE9SVF9EQVRBCQkJCQkweDAwM0MKIAorI2RlZmluZSBDSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUgUkFNQ0ZHCQkJCQkJMHgyNDA4CiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMQpAQCAtMzUyLDYgKzM2NSw3IEBACiAKIAogI2RlZmluZQlTWF9NSVNDCQkJCQkJMHgyODM1MAorI2RlZmluZQlTWF9NRU1PUllfRVhQT1JUX0JBU0UJCQkJMHg5MDEwCiAjZGVmaW5lCVNYX0RFQlVHXzEJCQkJCTB4OTA1NAogI2RlZmluZQkJU01YX0VWRU5UX1JFTEVBU0UJCQkJKDEgPDwgMCkKICNkZWZpbmUJCUVOQUJMRV9ORVdfU01YX0FERFJFU1MJCQkJKDEgPDwgMTYpCkBAIC02NDMsNiArNjU3LDcgQEAKICNkZWZpbmUJCUdfMDAwRTUwX01DRFdfQlVTWSh4KQkJCSgoKHgpID4+IDEzKSAmIDEpCiAjZGVmaW5lCQlHXzAwMEU1MF9TRU1fQlVTWSh4KQkJCSgoKHgpID4+IDE0KSAmIDEpCiAjZGVmaW5lCQlHXzAwMEU1MF9STENfQlVTWSh4KQkJCSgoKHgpID4+IDE1KSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9CSUZfQlVTWSh4KQkJCSgoKHgpID4+IDI5KSAmIDEpCiAjZGVmaW5lCVJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVAkJCTB4MEU2MAogI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9CSUYoeCkJCSgoKHgpICYgMSkgPDwgMSkKICNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQ0coeCkJCSgoKHgpICYgMSkgPDwgMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IDYzMTFiMTMuLjc1N2Y1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtNDQsNiArNDQsMjQgQEAKICAqCS0gVEVTVElORywgVEVTVElORywgVEVTVElORwogICovCiAKKy8qIEluaXRpYWxpemF0aW9uIHBhdGg6CisgKiAgV2UgZXhwZWN0IHRoYXQgYWNjZWxlcmF0aW9uIGluaXRpYWxpemF0aW9uIG1pZ2h0IGZhaWwgZm9yIHZhcmlvdXMKKyAqICByZWFzb25zIGV2ZW4gdGhvdWdodCB3ZSB3b3JrIGhhcmQgdG8gbWFrZSBpdCB3b3JrcyBvbiBtb3N0CisgKiAgY29uZmlndXJhdGlvbnMuIEluIG9yZGVyIHRvIHN0aWxsIGhhdmUgYSB3b3JraW5nIHVzZXJzcGFjZSBpbiBzdWNoCisgKiAgc2l0dWF0aW9uIHRoZSBpbml0IHBhdGggbXVzdCBzdWNjZWVkIHVwIHRvIHRoZSBtZW1vcnkgY29udHJvbGxlcgorICogIGluaXRpYWxpemF0aW9uIHBvaW50LiBGYWlsdXJlIGJlZm9yZSB0aGlzIHBvaW50IGFyZSBjb25zaWRlcmVkIGFzCisgKiAgZmF0YWwgZXJyb3IuIEhlcmUgaXMgdGhlIGluaXQgY2FsbGNoYWluIDoKKyAqICAgICAgcmFkZW9uX2RldmljZV9pbml0ICBwZXJmb3JtIGNvbW1vbiBzdHJ1Y3R1cmUsIG11dGV4IGluaXRpYWxpemF0aW9uCisgKiAgICAgIGFzaWNfaW5pdCAgICAgICAgICAgc2V0dXAgdGhlIEdQVSBtZW1vcnkgbGF5b3V0IGFuZCBwZXJmb3JtIGFsbAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSB0aW1lIGluaXRpYWxpemF0aW9uIChmYWlsdXJlIGluIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcmUgY29uc2lkZXJlZCBmYXRhbCkKKyAqICAgICAgYXNpY19zdGFydHVwICAgICAgICBzZXR1cCB0aGUgR1BVIGFjY2VsZXJhdGlvbiwgaW4gb3JkZXIgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3cgZ3VpZGVsaW5lIHRoZSBmaXJzdCB0aGluZyB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2hvdWxkIGRvIGlzIHNldHRpbmcgdGhlIEdQVQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBjb250cm9sbGVyIChvbmx5IE1DIHNldHVwIGZhaWx1cmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29uc2lkZXJlZCBhcyBmYXRhbCkKKyAqLworCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0xMjEsNiArMTM5LDEwIEBACiAJdWludDMyX3QgZGVmYXVsdF9zY2xrOwogfTsKIAorLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQKKyAqLworaW50IHJhZGVvbl9wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIEZlbmNlcy4KQEAgLTI1OCw2ICsyODAsOCBAQAogCXN0cnVjdCByYWRlb25fZ2FydF90YWJsZV92cmFtCXZyYW07CiB9OwogCisjZGVmaW5lIFJBREVPTl9HUFVfUEFHRV9TSVpFIDQwOTYKKwogc3RydWN0IHJhZGVvbl9nYXJ0IHsKIAlkbWFfYWRkcl90CQkJdGFibGVfYWRkcjsKIAl1bnNpZ25lZAkJCW51bV9ncHVfcGFnZXM7CkBAIC0zNDIsNyArMzY2LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlpZHg7CiAJdWludDY0X3QJCWdwdV9hZGRyOwogCXN0cnVjdCByYWRlb25fZmVuY2UJKmZlbmNlOwotCXZvbGF0aWxlIHVpbnQzMl90CSpwdHI7CisJdWludDMyX3QJKnB0cjsKIAl1aW50MzJfdAkJbGVuZ3RoX2R3OwogfTsKIApAQCAtNDE1LDcgKzQzOSwxMiBAQAogc3RydWN0IHJhZGVvbl9jc19jaHVuayB7CiAJdWludDMyX3QJCWNodW5rX2lkOwogCXVpbnQzMl90CQlsZW5ndGhfZHc7CisJaW50IGtwYWdlX2lkeFsyXTsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICAqa3BhZ2VbMl07CiAJdWludDMyX3QJCSprZGF0YTsKKwl2b2lkIF9fdXNlciAqdXNlcl9wdHI7CisJaW50IGxhc3RfY29waWVkX3BhZ2U7CisJaW50IGxhc3RfcGFnZV9pbmRleDsKIH07CiAKIHN0cnVjdCByYWRlb25fY3NfcGFyc2VyIHsKQEAgLTQzOCw4ICs0NjcsMzggQEAKIAlzdHJ1Y3QgcmFkZW9uX2liCSppYjsKIAl2b2lkCQkJKnRyYWNrOwogCXVuc2lnbmVkCQlmYW1pbHk7CisJaW50IHBhcnNlcl9lcnJvcjsKIH07CiAKK2V4dGVybiBpbnQgcmFkZW9uX2NzX3VwZGF0ZV9wYWdlcyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgaW50IHBnX2lkeCk7CitleHRlcm4gaW50IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOworCisKK3N0YXRpYyBpbmxpbmUgdTMyIHJhZGVvbl9nZXRfaWJfdmFsdWUoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBpZHgpCit7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJjID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiBwZ19pZHgsIHBnX29mZnNldDsKKwl1MzIgaWR4X3ZhbHVlID0gMDsKKwlpbnQgbmV3X3BhZ2U7CisKKwlwZ19pZHggPSAoaWR4ICogNCkgLyBQQUdFX1NJWkU7CisJcGdfb2Zmc2V0ID0gKGlkeCAqIDQpICUgUEFHRV9TSVpFOworCisJaWYgKGliYy0+a3BhZ2VfaWR4WzBdID09IHBnX2lkeCkKKwkJcmV0dXJuIGliYy0+a3BhZ2VbMF1bcGdfb2Zmc2V0LzRdOworCWlmIChpYmMtPmtwYWdlX2lkeFsxXSA9PSBwZ19pZHgpCisJCXJldHVybiBpYmMtPmtwYWdlWzFdW3BnX29mZnNldC80XTsKKworCW5ld19wYWdlID0gcmFkZW9uX2NzX3VwZGF0ZV9wYWdlcyhwLCBwZ19pZHgpOworCWlmIChuZXdfcGFnZSA8IDApIHsKKwkJcC0+cGFyc2VyX2Vycm9yID0gbmV3X3BhZ2U7CisJCXJldHVybiAwOworCX0KKworCWlkeF92YWx1ZSA9IGliYy0+a3BhZ2VbbmV3X3BhZ2VdW3BnX29mZnNldC80XTsKKwlyZXR1cm4gaWR4X3ZhbHVlOworfQorCiBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCB7CiAJdW5zaWduZWQJaWR4OwogCXVuc2lnbmVkCXR5cGU7CkBAIC01MzcsMTggKzU5Niw4IEBACiAJdm9pZCAoKmZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKmVycmF0YSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCp2cmFtX2luZm8pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqdmdhX3NldF9zdGF0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpOwogCWludCAoKmdwdV9yZXNldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCWludCAoKm1jX2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqbWNfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCWludCAoKndiX2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqd2JfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCWludCAoKmdhcnRfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCpnYXJ0X2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCpnYXJ0X2VuYWJsZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCpnYXJ0X2Rpc2FibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqZ2FydF90bGJfZmx1c2gpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCpnYXJ0X3NldF9wYWdlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwogCWludCAoKmNwX2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwpAQCAtNTU4LDcgKzYwNyw2IEBACiAJdm9pZCAoKnJpbmdfc3RhcnQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCpyaW5nX3Rlc3QpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqcmluZ19pYl9leGVjdXRlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotCWludCAoKmliX3Rlc3QpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCppcnFfc2V0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqaXJxX3Byb2Nlc3MpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl1MzIgKCpnZXRfdmJsYW5rX2NvdW50ZXIpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CkBAIC01NzksNyArNjI3LDkgQEAKIAkJICAgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCiAJCSAgICB1bnNpZ25lZCBudW1fcGFnZXMsCiAJCSAgICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CisJdWludDMyX3QgKCpnZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnNldF9lbmdpbmVfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBlbmdfY2xvY2spOworCXVpbnQzMl90ICgqZ2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpzZXRfbWVtb3J5X2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgbWVtX2Nsb2NrKTsKIAl2b2lkICgqc2V0X3BjaWVfbGFuZXMpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOwogCXZvaWQgKCpzZXRfY2xvY2tfZ2F0aW5nKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CkBAIC03MzYsMTIgKzc4NiwxMiBAQAogCWJvb2wJCQkJc2h1dGRvd247CiAJYm9vbAkJCQlzdXNwZW5kOwogCWJvb2wJCQkJbmVlZF9kbWEzMjsKLQlib29sCQkJCW5ld19pbml0X3BhdGg7CiAJYm9vbAkJCQlhY2NlbF93b3JraW5nOwogCXN0cnVjdCByYWRlb25fc3VyZmFjZV9yZWcgc3VyZmFjZV9yZWdzW1JBREVPTl9HRU1fTUFYX1NVUkZBQ0VTXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1lX2Z3OwkvKiBhbGwgZmFtaWx5IE1FIGZpcm13YXJlICovCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpwZnBfZnc7CS8qIHI2LzcwMCBQRlAgZmlybXdhcmUgKi8KIAlzdHJ1Y3QgcjYwMF9ibGl0IHI2MDBfYmxpdDsKKwlpbnQgbXNpX2VuYWJsZWQ7IC8qIG1zaSBlbmFibGVkICovCiB9OwogCiBpbnQgcmFkZW9uX2RldmljZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtODk2LDI4ICs5NDYsMTQgQEAKICNkZWZpbmUgcmFkZW9uX3Jlc3VtZShyZGV2KSAocmRldiktPmFzaWMtPnJlc3VtZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9zdXNwZW5kKHJkZXYpIChyZGV2KS0+YXNpYy0+c3VzcGVuZCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jc19wYXJzZShwKSByZGV2LT5hc2ljLT5jc19wYXJzZSgocCkpCi0jZGVmaW5lIHJhZGVvbl9lcnJhdGEocmRldikgKHJkZXYpLT5hc2ljLT5lcnJhdGEoKHJkZXYpKQotI2RlZmluZSByYWRlb25fdnJhbV9pbmZvKHJkZXYpIChyZGV2KS0+YXNpYy0+dnJhbV9pbmZvKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpIChyZGV2KS0+YXNpYy0+dmdhX3NldF9zdGF0ZSgocmRldiksIChzdGF0ZSkpCiAjZGVmaW5lIHJhZGVvbl9ncHVfcmVzZXQocmRldikgKHJkZXYpLT5hc2ljLT5ncHVfcmVzZXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fbWNfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPm1jX2luaXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fbWNfZmluaShyZGV2KSAocmRldiktPmFzaWMtPm1jX2ZpbmkoKHJkZXYpKQotI2RlZmluZSByYWRlb25fd2JfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPndiX2luaXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fd2JfZmluaShyZGV2KSAocmRldiktPmFzaWMtPndiX2ZpbmkoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ3B1X2dhcnRfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfaW5pdCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9ncHVfZ2FydF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9lbmFibGUoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9kaXNhYmxlKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfdGxiX2ZsdXNoKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF90bGJfZmx1c2goKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCBpLCBwKSAocmRldiktPmFzaWMtPmdhcnRfc2V0X3BhZ2UoKHJkZXYpLCAoaSksIChwKSkKLSNkZWZpbmUgcmFkZW9uX2NwX2luaXQocmRldixyc2l6ZSkgKHJkZXYpLT5hc2ljLT5jcF9pbml0KChyZGV2KSwgKHJzaXplKSkKLSNkZWZpbmUgcmFkZW9uX2NwX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5jcF9maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2NwX2Rpc2FibGUocmRldikgKHJkZXYpLT5hc2ljLT5jcF9kaXNhYmxlKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2NwX2NvbW1pdChyZGV2KSAocmRldiktPmFzaWMtPmNwX2NvbW1pdCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9yaW5nX3N0YXJ0KHJkZXYpIChyZGV2KS0+YXNpYy0+cmluZ19zdGFydCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9yaW5nX3Rlc3QocmRldikgKHJkZXYpLT5hc2ljLT5yaW5nX3Rlc3QoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ19pYl9leGVjdXRlKHJkZXYsIGliKSAocmRldiktPmFzaWMtPnJpbmdfaWJfZXhlY3V0ZSgocmRldiksIChpYikpCi0jZGVmaW5lIHJhZGVvbl9pYl90ZXN0KHJkZXYpIChyZGV2KS0+YXNpYy0+aWJfdGVzdCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9pcnFfc2V0KHJkZXYpIChyZGV2KS0+YXNpYy0+aXJxX3NldCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9pcnFfcHJvY2VzcyhyZGV2KSAocmRldiktPmFzaWMtPmlycV9wcm9jZXNzKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dldF92YmxhbmtfY291bnRlcihyZGV2LCBjcnRjKSAocmRldiktPmFzaWMtPmdldF92YmxhbmtfY291bnRlcigocmRldiksIChjcnRjKSkKQEAgLTkyNSw3ICs5NjEsOSBAQAogI2RlZmluZSByYWRlb25fY29weV9ibGl0KHJkZXYsIHMsIGQsIG5wLCBmKSAocmRldiktPmFzaWMtPmNvcHlfYmxpdCgocmRldiksIChzKSwgKGQpLCAobnApLCAoZikpCiAjZGVmaW5lIHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2RtYSgocmRldiksIChzKSwgKGQpLCAobnApLCAoZikpCiAjZGVmaW5lIHJhZGVvbl9jb3B5KHJkZXYsIHMsIGQsIG5wLCBmKSAocmRldiktPmFzaWMtPmNvcHkoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQorI2RlZmluZSByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9lbmdpbmVfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCisjZGVmaW5lIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jaygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9zZXRfbWVtb3J5X2Nsb2NrKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2VuZ2luZV9jbG9jaygocmRldiksIChlKSkKICNkZWZpbmUgcmFkZW9uX3NldF9wY2llX2xhbmVzKHJkZXYsIGwpIChyZGV2KS0+YXNpYy0+c2V0X3BjaWVfbGFuZXMoKHJkZXYpLCAobCkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2Nsb2NrX2dhdGluZygocmRldiksIChlKSkKQEAgLTk0Myw2ICs5ODEsOCBAQAogZXh0ZXJuIHZvaWQgcmFkZW9uX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByYWRlb25fc3VyZmFjZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2NzX3BhcnNlcl9pbml0KHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CitleHRlcm4gdm9pZCByYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAogLyogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwICovCiBzdHJ1Y3QgcjEwMF9tY19zYXZlIHsKQEAgLTk3NCwyMyArMTAxNCw3MSBAQAogZXh0ZXJuIHZvaWQgcjEwMF93Yl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF92Z2FfcmVuZGVyX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJCQkJc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmopOworZXh0ZXJuIGludCByMTAwX2NzX3BhcnNlX3BhY2tldDAoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQljb25zdCB1bnNpZ25lZCAqYXV0aCwgdW5zaWduZWQgbiwKKwkJCQlyYWRlb25fcGFja2V0MF9jaGVja190IGNoZWNrKTsKK2V4dGVybiBpbnQgcjEwMF9jc19wYWNrZXRfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQl1bnNpZ25lZCBpZHgpOworCisvKiBydjIwMCxydjI1MCxydjI4MCAqLworZXh0ZXJuIHZvaWQgcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAgKi8KIGV4dGVybiB2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiByNDIwLHI0MjMscnY0MTAgKi8KK2V4dGVybiBpbnQgcjQyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB1MzIgcjQyMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnKTsKIGV4dGVybiB2b2lkIHI0MjBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZywgdTMyIHYpOwogZXh0ZXJuIGludCByNDIwX2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHJ2NTE1ICovCitzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSB7CisJdTMyIGQxdmdhX2NvbnRyb2w7CisJdTMyIGQydmdhX2NvbnRyb2w7CisJdTMyIHZnYV9yZW5kZXJfY29udHJvbDsKKwl1MzIgdmdhX2hkcF9jb250cm9sOworCXUzMiBkMWNydGNfY29udHJvbDsKKwl1MzIgZDJjcnRjX2NvbnRyb2w7Cit9OwogZXh0ZXJuIHZvaWQgcnY1MTVfYmFuZHdpZHRoX2F2aXZvX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKK2V4dGVybiB2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpOworZXh0ZXJuIHZvaWQgcnY1MTVfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKKy8qIHJzNDAwICovCitleHRlcm4gaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2dhcnRfYWRqdXN0X3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM0MDBfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKKy8qIHJzNjAwICovCitleHRlcm4gdm9pZCByczYwMF9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcnM2OTAsIHJzNzQwICovCiBleHRlcm4gdm9pZCByczY5MF9saW5lX2J1ZmZlcl9hZGp1c3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC0xMDA5LDggKzEwOTcsOSBAQAogZXh0ZXJuIHZvaWQgcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjYwMF9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIGludCByNjAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF93Yl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF93Yl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfc2NyYXRjaF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjYwMF9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9ibGl0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDg5NjhmNzguLmMxOGZiZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTMxLDM4ICszMSwzMCBAQAogLyoKICAqIGNvbW1vbiBmdW5jdGlvbnMKICAqLwordWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBlbmdfY2xvY2spOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBtZW1fY2xvY2spOwogdm9pZCByYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAogLyoKICAqIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MAogICovCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcjEwMF9tbV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByMTAwX21tX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7Ci12b2lkIHIxMDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3ZnYV9zZXRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpOwogaW50IHIxMDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdTMyIHIxMDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7Ci1pbnQgcjEwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX3BjaV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX3BjaV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9wY2lfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfcGNpX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKLWludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7Ci12b2lkIHIxMDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfY3BfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfY3BfY29tbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtODMsMzMgKzc1LDIxIEBACiBpbnQgcjEwMF9jbGVhcl9zdXJmYWNlX3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZyk7CiB2b2lkIHIxMDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7Ci1pbnQgcjEwMF9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjEwMF9hc2ljID0gewogCS5pbml0ID0gJnIxMDBfaW5pdCwKLQkuZXJyYXRhID0gJnIxMDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjEwMF92cmFtX2luZm8sCisJLmZpbmkgPSAmcjEwMF9maW5pLAorCS5zdXNwZW5kID0gJnIxMDBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnIxMDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIxMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnIxMDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyMTAwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnIxMDBfcGNpX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcjEwMF9wY2lfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMTAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyMTAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnIxMDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyMTAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTExOCw3ICs5OCw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSBOVUxMLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTEzMSw1NSArMTEzLDM4IEBACiAvKgogICogcjMwMCxyMzUwLHJ2MzUwLHJ2MzgwCiAgKi8KLWludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCi0JCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKLWludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKLWludCBydjM3MF9wY2llX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKLXVpbnQzMl90IHJ2MzcwX3BjaWVfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKLXZvaWQgcnYzNzBfcGNpZV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwotdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKLWludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCi0JCSAgdWludDY0X3QgZHN0X29mZnNldCwKLQkJICB1bnNpZ25lZCBudW1fcGFnZXMsCi0JCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwotCitleHRlcm4gaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIzMDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CitleHRlcm4gaW50IHIzMDBfY3NfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOworZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOworZXh0ZXJuIHVpbnQzMl90IHJ2MzcwX3BjaWVfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKK2V4dGVybiB2b2lkIHJ2MzcwX3NldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOworZXh0ZXJuIGludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJdWludDY0X3Qgc3JjX29mZnNldCwKKwkJCXVpbnQ2NF90IGRzdF9vZmZzZXQsCisJCQl1bnNpZ25lZCBudW1fcGFnZXMsCisJCQlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIzMDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyMzAwX2luaXQsCi0JLmVycmF0YSA9ICZyMzAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnIzMDBfdnJhbV9pbmZvLAorCS5maW5pID0gJnIzMDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyMzAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyMzAwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyMzAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjMwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xODgsNyArMTUzLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjA5LDI2ICsxNzYsMTQgQEAKIAkuZmluaSA9ICZyNDIwX2ZpbmksCiAJLnN1c3BlbmQgPSAmcjQyMF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcjQyMF9yZXN1bWUsCi0JLmVycmF0YSA9IE5VTEwsCi0JLnZyYW1faW5mbyA9IE5VTEwsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSBOVUxMLAotCS5tY19maW5pID0gTlVMTCwKLQkud2JfaW5pdCA9IE5VTEwsCi0JLndiX2ZpbmkgPSBOVUxMLAotCS5nYXJ0X2VuYWJsZSA9IE5VTEwsCi0JLmdhcnRfZGlzYWJsZSA9IE5VTEwsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gTlVMTCwKLQkuY3BfZmluaSA9IE5VTEwsCi0JLmNwX2Rpc2FibGUgPSBOVUxMLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9IE5VTEwsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0yMzcsNyArMTkyLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0yNTAsNDIgKzIwNywyNyBAQAogLyoKICAqIHJzNDAwLHJzNDgwCiAgKi8KLXZvaWQgcnM0MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNDAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM0MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNDAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczQwMF9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM0MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM0MDBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnM0MDBfYXNpYyA9IHsKLQkuaW5pdCA9ICZyMzAwX2luaXQsCi0JLmVycmF0YSA9ICZyczQwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyczQwMF92cmFtX2luZm8sCisJLmluaXQgPSAmcnM0MDBfaW5pdCwKKwkuZmluaSA9ICZyczQwMF9maW5pLAorCS5zdXNwZW5kID0gJnJzNDAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyczQwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnM0MDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyczQwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyczQwMF9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyczQwMF9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJzNDAwX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnM0MDBfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyczQwMF9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczQwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0yOTQsNyArMjM2LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTMwNywxOCArMjUxLDEzIEBACiAvKgogICogcnM2MDAuCiAgKi8KLWludCByczYwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNjAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKLWludCByczYwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM2MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIHVpbnQzMl90IHJzNjAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CkBAIC0zMjYsMjggKzI2NSwxNyBAQAogdm9pZCByczYwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnM2MDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyczYwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM2MDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM2MDBfdnJhbV9pbmZvLAorCS5maW5pID0gJnJzNjAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnM2MDBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJzNjAwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyczYwMF9tY19pbml0LAotCS5tY19maW5pID0gJnJzNjAwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJzNjAwX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJzNjAwX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcnM2MDBfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyczYwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNjAwX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTM1Niw3ICsyODQsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC0zNjcsMzcgKzI5NywyNiBAQAogLyoKICAqIHJzNjkwLHJzNzQwCiAgKi8KLXZvaWQgcnM2OTBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2OTBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2OTBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnM2OTBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJzNjkwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnM2OTBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCByczY5MF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByczY5MF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogdm9pZCByczY5MF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnM2OTBfYXNpYyA9IHsKLQkuaW5pdCA9ICZyczYwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM2OTBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM2OTBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnJzNjkwX2luaXQsCisJLmZpbmkgPSAmcnM2OTBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczY5MF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM2OTBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNjkwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM2OTBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDA2LDcgKzMyNSw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMzAwX2NvcHlfZG1hLAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtNDIwLDQxICszNDEsMjkgQEAKICAqIHJ2NTE1CiAgKi8KIGludCBydjUxNV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnY1MTVfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnY1MTVfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnY1MTVfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjUxNV9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnY1MTVfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCBydjUxNV9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCBydjUxNV9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogdm9pZCBydjUxNV9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHVpbnQzMl90IHJ2NTE1X3BjaWVfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnY1MTVfcGNpZV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogdm9pZCBydjUxNV9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjUxNV9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJ2NTE1X3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjUxNV9hc2ljID0gewogCS5pbml0ID0gJnJ2NTE1X2luaXQsCi0JLmVycmF0YSA9ICZydjUxNV9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZydjUxNV92cmFtX2luZm8sCisJLmZpbmkgPSAmcnY1MTVfZmluaSwKKwkuc3VzcGVuZCA9ICZydjUxNV9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnY1MTVfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZydjUxNV9tY19pbml0LAotCS5tY19maW5pID0gJnJ2NTE1X21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZydjUxNV9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC00NjMsNyArMzcyLDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCkBAIC00NzYsMzUgKzM4NywyMSBAQAogLyoKICAqIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MAogICovCi12b2lkIHI1MjBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjUyMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHI1MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjUyMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNTIwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHI1MjBfYXNpYyA9IHsKLQkuaW5pdCA9ICZydjUxNV9pbml0LAotCS5lcnJhdGEgPSAmcjUyMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyNTIwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyNTIwX2luaXQsCisJLmZpbmkgPSAmcnY1MTVfZmluaSwKKwkuc3VzcGVuZCA9ICZydjUxNV9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjUyMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcnY1MTVfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnI1MjBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyNTIwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZydjUxNV9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC01MTMsMTMgKzQxMCwxNSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjEwMF9jbGVhcl9zdXJmYWNlX3JlZywKLQkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKIH07CiAKIC8qCkBAIC01NTIsMzcgKzQ1MSwyMyBAQAogCQkJIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgb2JqX3NpemUpOwogaW50IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwogdm9pZCByNjAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNjAwX2FzaWMgPSB7Ci0JLmVycmF0YSA9IE5VTEwsCiAJLmluaXQgPSAmcjYwMF9pbml0LAogCS5maW5pID0gJnI2MDBfZmluaSwKIAkuc3VzcGVuZCA9ICZyNjAwX3N1c3BlbmQsCiAJLnJlc3VtZSA9ICZyNjAwX3Jlc3VtZSwKIAkuY3BfY29tbWl0ID0gJnI2MDBfY3BfY29tbWl0LAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnI2MDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnI2MDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKLQkucmluZ19zdGFydCA9IE5VTEwsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKQEAgLTU5MCwxMyArNDc1LDE1IEBACiAJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAvKgpAQCAtNjA5LDMwICs0OTYsMTcgQEAKIGludCBydjc3MF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJ2NzcwX2FzaWMgPSB7Ci0JLmVycmF0YSA9IE5VTEwsCiAJLmluaXQgPSAmcnY3NzBfaW5pdCwKIAkuZmluaSA9ICZydjc3MF9maW5pLAogCS5zdXNwZW5kID0gJnJ2NzcwX3N1c3BlbmQsCiAJLnJlc3VtZSA9ICZydjc3MF9yZXN1bWUsCiAJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKLQkudnJhbV9pbmZvID0gTlVMTCwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NzcwX2dwdV9yZXNldCwKIAkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCi0JLm1jX2luaXQgPSBOVUxMLAotCS5tY19maW5pID0gTlVMTCwKLQkud2JfaW5pdCA9ICZyNjAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjYwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9IE5VTEwsCi0JLmdhcnRfZGlzYWJsZSA9IE5VTEwsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gTlVMTCwKLQkuY3BfZmluaSA9IE5VTEwsCi0JLmNwX2Rpc2FibGUgPSBOVUxMLAotCS5yaW5nX3N0YXJ0ID0gTlVMTCwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjYwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnI2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjYwMF9pcnFfcHJvY2VzcywKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnI2MDBfZmVuY2VfcmluZ19lbWl0LApAQCAtNjQwLDEzICs1MTQsMTUgQEAKIAkuY29weV9ibGl0ID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weSA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKLQkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggNzQzNzQyMS4uMmVkODhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC00Niw3ICs0Niw4IEBACiAJCQkgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgIGludCBjb25uZWN0b3JfdHlwZSwKIAkJCSAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKLQkJCSAgYm9vbCBsaW5rYiwgdWludDMyX3QgaWdwX2xhbmVfaW5mbyk7CisJCQkgIGJvb2wgbGlua2IsIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCiAvKiBmcm9tIHJhZGVvbl9sZWdhY3lfZW5jb2Rlci5jICovCiBleHRlcm4gdm9pZApAQCAtMTkzLDYgKzE5NCwyMyBAQAogCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydAogfTsKIAorY29uc3QgdWludDE2X3Qgc3VwcG9ydGVkX2RldmljZXNfY29ubmVjdG9yX29iamVjdF9pZF9jb252ZXJ0W10gPSB7CisJQ09OTkVDVE9SX09CSkVDVF9JRF9OT05FLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JLCAvKiBub3QgYWxsIGJvYXJkcyBzdXBwb3J0IERMICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QsIC8qIG5vdCBhbGwgYm9hcmRzIHN1cHBvcnQgREwgKi8KKwlDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSwgLyogdGVjaG5pY2FsbHkgRFZJLUEgKi8KKwlDT05ORUNUT1JfT0JKRUNUX0lEX0NPTVBPU0lURSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTywKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMsCisJQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEXzlQSU5fRElOLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9CLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPCit9OworCiBjb25zdCBpbnQgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0W10gPSB7CiAJRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24sCiAJRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCkBAIC0yMjksNyArMjQ3LDcgQEAKIAlBVE9NX09CSkVDVF9IRUFERVIgKm9ial9oZWFkZXI7CiAJaW50IGksIGosIHBhdGhfc2l6ZSwgZGV2aWNlX3N1cHBvcnQ7CiAJaW50IGNvbm5lY3Rvcl90eXBlOwotCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQ7CisJdWludDE2X3QgaWdwX2xhbmVfaW5mbywgY29ubl9pZCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAlib29sIGxpbmtiOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgZGRjX2J1czsKIApAQCAtMjcyLDE1ICsyOTAsMTMgQEAKIAkJCSAgICAobGUxNl90b19jcHUocGF0aC0+dXNDb25uT2JqZWN0SWQpICYKIAkJCSAgICAgT0JKRUNUX1RZUEVfTUFTSykgPj4gT0JKRUNUX1RZUEVfU0hJRlQ7CiAKLQkJCWlmICgobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkgICAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKQotCQkJICAgIHx8IChsZTE2X3RvX2NwdShwYXRoLT51c0RldmljZVRhZykgPT0KLQkJCQlBVE9NX0RFVklDRV9UVjJfU1VQUE9SVCkKLQkJCSAgICB8fCAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCQkvKiBUT0RPIENWIHN1cHBvcnQgKi8KKwkJCWlmIChsZTE2X3RvX2NwdShwYXRoLT51c0RldmljZVRhZykgPT0KKwkJCQlBVE9NX0RFVklDRV9DVl9TVVBQT1JUKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSAmJgorCQkJLyogSUdQIGNoaXBzICovCisJCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgJiYKIAkJCSAgICAoY29uX29ial9pZCA9PQogCQkJICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1BDSUVfQ09OTkVDVE9SKSkgewogCQkJCXVpbnQxNl90IGlncF9vZmZzZXQgPSAwOwpAQCAtMzE0LDYgKzMzMCw3IEBACiAJCQkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJCQkgICAgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkgICAgW2N0XTsKKwkJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjdDsKIAkJCQkJCWlncF9sYW5lX2luZm8gPQogCQkJCQkJICAgIHNsb3RfY29uZmlnICYgMHhmZmZmOwogCQkJCQl9IGVsc2UKQEAgLTMyNCw2ICszNDEsNyBAQAogCQkJCWlncF9sYW5lX2luZm8gPSAwOwogCQkJCWNvbm5lY3Rvcl90eXBlID0KIAkJCQkgICAgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0W2Nvbl9vYmpfaWRdOworCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25fb2JqX2lkOwogCQkJfQogCiAJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCkBAIC00MjgsNyArNDQ2LDggQEAKIAkJCQkJCSAgbGUxNl90b19jcHUocGF0aC0+CiAJCQkJCQkJICAgICAgdXNEZXZpY2VUYWcpLAogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwgJmRkY19idXMsCi0JCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvKTsKKwkJCQkJCSAgbGlua2IsIGlncF9sYW5lX2luZm8sCisJCQkJCQkgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCiAJCX0KIAl9CkBAIC00MzgsNiArNDU3LDQ1IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIGludCBjb25uZWN0b3JfdHlwZSwKKwkJCQkJCSB1aW50MTZfdCBkZXZpY2VzKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJcmV0dXJuIHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydAorCQkJW2Nvbm5lY3Rvcl90eXBlXTsKKwl9IGVsc2UgaWYgKCgoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQpKSAmJgorCQkgICAoZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkpICB7CisJCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCQlzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHggPSBtb2RlX2luZm8tPmF0b21fY29udGV4dDsKKwkJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgWFRNRFNfSW5mbyk7CisJCXVpbnQxNl90IHNpemUsIGRhdGFfb2Zmc2V0OworCQl1aW50OF90IGZyZXYsIGNyZXY7CisJCUFUT01fWFRNRFNfSU5GTyAqeHRtZHM7CisKKwkJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihjdHgsIGluZGV4LCAmc2l6ZSwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCQl4dG1kcyA9IChBVE9NX1hUTURTX0lORk8gKikoY3R4LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCisJCWlmICh4dG1kcy0+dWNTdXBwb3J0ZWRMaW5rICYgQVRPTV9YVE1EU19TVVBQT1JURURfRFVBTExJTkspIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0k7CisJCQllbHNlCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQl9IGVsc2UgeworCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydAorCQkJW2Nvbm5lY3Rvcl90eXBlXTsKKwl9Cit9CisKIHN0cnVjdCBiaW9zX2Nvbm5lY3RvciB7CiAJYm9vbCB2YWxpZDsKIAl1aW50MTZfdCBsaW5lX211eDsKQEAgLTU5NiwxNCArNjU0LDIwIEBACiAKIAkvKiBhZGQgdGhlIGNvbm5lY3RvcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRTsgaSsrKSB7Ci0JCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0udmFsaWQpCisJCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0udmFsaWQpIHsKKwkJCXVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQgPQorCQkJCWF0b21iaW9zX2dldF9jb25uZWN0b3Jfb2JqZWN0X2lkKGRldiwKKwkJCQkJCSAgICAgIGJpb3NfY29ubmVjdG9yc1tpXS5jb25uZWN0b3JfdHlwZSwKKwkJCQkJCSAgICAgIGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzKTsKIAkJCXJhZGVvbl9hZGRfYXRvbV9jb25uZWN0b3IoZGV2LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0ubGluZV9tdXgsCiAJCQkJCQkgIGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzLAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uCiAJCQkJCQkgIGNvbm5lY3Rvcl90eXBlLAogCQkJCQkJICAmYmlvc19jb25uZWN0b3JzW2ldLmRkY19idXMsCi0JCQkJCQkgIGZhbHNlLCAwKTsKKwkJCQkJCSAgZmFsc2UsIDAsCisJCQkJCQkgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOworCQl9CiAJfQogCiAJcmFkZW9uX2xpbmtfZW5jb2Rlcl9jb25uZWN0b3IoZGV2KTsKQEAgLTY0NCw4ICs3MDgsMTIgQEAKIAkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNSZWZlcmVuY2VDbG9jayk7CiAJCXAxcGxsLT5yZWZlcmVuY2VfZGl2ID0gMDsKIAotCQlwMXBsbC0+cGxsX291dF9taW4gPQotCQkgICAgbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJaWYgKGNyZXYgPCAyKQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOworCQllbHNlCisJCQlwMXBsbC0+cGxsX291dF9taW4gPQorCQkJCWxlMzJfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm9fMTIudWxNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CiAJCXAxcGxsLT5wbGxfb3V0X21heCA9CiAJCSAgICBsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCkBAIC02NTQsNiArNzIyLDE2IEBACiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCQllbHNlCiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gMjAwMDA7CisJCX0gZWxzZSBpZiAocDFwbGwtPnBsbF9vdXRfbWluID4gNjQ4MDApIHsKKwkJCS8qIExpbWl0aW5nIHRoZSBwbGwgb3V0cHV0IHJhbmdlIGlzIGEgZ29vZCB0aGluZyBnZW5lcmFsbHkgYXMKKwkJCSAqIGl0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHBsbCBjb21iaW5hdGlvbnMgZm9yIGEgZ2l2ZW4KKwkJCSAqIGZyZXF1ZW5jeSBwcmVzdW1hYmx5IHRvIHRoZSBvbmVzIHRoYXQgd29yayBiZXN0IG9uIGVhY2ggY2FyZC4KKwkJCSAqIEhvd2V2ZXIsIGNlcnRhaW4gZHVhbGxpbmsgRFZJIG1vbml0b3JzIHNlZW0gdG8gbGlrZQorCQkJICogcGxsIGNvbWJpbmF0aW9ucyB0aGF0IHdvdWxkIGJlIGxpbWl0ZWQgYnkgdGhpcyBhdCBsZWFzdCBvbgorCQkJICogcHJlLURDRSAzLjAgcjZ4eCBoYXJkd2FyZS4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBwZXIKKwkJCSAqIGZhbWlseS4KKwkJCSAqLworCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCX0KIAogCQlwMXBsbC0+cGxsX2luX21pbiA9CkBAIC03NzAsNiArODQ4LDQ2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hdG9tX3NzICpyYWRlb25fYXRvbWJpb3NfZ2V0X3NzX2luZm8oc3RydWN0CisJCQkJCQkJICByYWRlb25fZW5jb2RlcgorCQkJCQkJCSAgKmVuY29kZXIsCisJCQkJCQkJICBpbnQgaWQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQUExMX1NTX0luZm8pOworCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXN0cnVjdCBfQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTyAqc3NfaW5mbzsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJc3RydWN0IHJhZGVvbl9hdG9tX3NzICpzcyA9IE5VTEw7CisKKwlpZiAoaWQgPiBBVE9NX01BWF9TU19FTlRSWSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwgJmZyZXYsCisJCQkgICAgICAgJmNyZXYsICZkYXRhX29mZnNldCk7CisKKwlzc19pbmZvID0KKwkgICAgKHN0cnVjdCBfQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCWlmIChzc19pbmZvKSB7CisJCXNzID0KKwkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fYXRvbV9zcyksIEdGUF9LRVJORUwpOworCisJCWlmICghc3MpCisJCQlyZXR1cm4gTlVMTDsKKworCQlzcy0+cGVyY2VudGFnZSA9IGxlMTZfdG9fY3B1KHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOworCQlzcy0+dHlwZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTcHJlYWRTcGVjdHJ1bVR5cGU7CisJCXNzLT5zdGVwID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1NTX1N0ZXA7CisJCXNzLT5kZWxheSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19EZWxheTsKKwkJc3MtPnJhbmdlID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1NTX1JhbmdlOworCQlzcy0+cmVmZGl2ID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1JlY29tbWVuZGVkUmVmX0RpdjsKKwl9CisJcmV0dXJuIHNzOworfQorCiB1bmlvbiBsdmRzX2luZm8gewogCXN0cnVjdCBfQVRPTV9MVkRTX0lORk8gaW5mbzsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPX1YxMiBpbmZvXzEyOwpAQCAtODAxLDI3ICs5MTksMzEgQEAKIAkJaWYgKCFsdmRzKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5jbG9jayA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1BpeENsaykgKiAxMDsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEFjdGl2ZSk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5oYmxhbmsgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIQmxhbmtpbmdfVGltZSk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhvdmVycGx1cyA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfd2lkdGggPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudmJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVkJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52b3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNXaWR0aCk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ICsKKwkJCWxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ICsKKwkJCWxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNPZmZzZXQpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS52dG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY19lbmQgPSBsdmRzLT5uYXRpdmVfbW9kZS52c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOwogCQlsdmRzLT5wYW5lbF9wd3JfZGVsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzT2ZmRGVsYXlJbk1zKTsKIAkJbHZkcy0+bHZkc19taXNjID0gbHZkc19pbmZvLT5pbmZvLnVjTFZEU19NaXNjOworCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZsdmRzLT5uYXRpdmVfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisKKwkJbHZkcy0+c3MgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3NzX2luZm8oZW5jb2RlciwgbHZkc19pbmZvLT5pbmZvLnVjU1NfSWQpOwogCiAJCWVuY29kZXItPm5hdGl2ZV9tb2RlID0gbHZkcy0+bmF0aXZlX21vZGU7CiAJfQpAQCAtODYwLDggKzk4Miw3IEBACiB9CiAKIGJvb2wgcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpbmRleCwKLQkJCQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OICpjcnRjX3RpbWluZywKLQkJCQlpbnQzMl90ICpwaXhlbF9jbG9jaykKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKIAlBVE9NX0FOQUxPR19UVl9JTkZPICp0dl9pbmZvOwpAQCAtODY5LDcgKzk5MCw3IEBACiAJQVRPTV9EVERfRk9STUFUICpkdGRfdGltaW5nczsKIAlpbnQgZGF0YV9pbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEFuYWxvZ1RWX0luZm8pOwogCXU4IGZyZXYsIGNyZXY7Ci0JdWludDE2X3QgZGF0YV9vZmZzZXQ7CisJdTE2IGRhdGFfb2Zmc2V0LCBtaXNjOwogCiAJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgZGF0YV9pbmRleCwgTlVMTCwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOwogCkBAIC04NzksMjggKzEwMDAsMzcgQEAKIAkJaWYgKGluZGV4ID4gTUFYX1NVUFBPUlRFRF9UVl9USU1JTkcpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOwotCQljcnRjX3RpbWluZy0+dXNIX0Rpc3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX0Rpc3ApOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfaHRvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9Ub3RhbCk7CisJCW1vZGUtPmNydGNfaGRpc3BsYXkgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX0Rpc3ApOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jU3RhcnQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KSArCisJCQlsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOwotCQljcnRjX3RpbWluZy0+dXNWX0Rpc3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX0Rpc3ApOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9Ub3RhbCk7CisJCW1vZGUtPmNydGNfdmRpc3BsYXkgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX0Rpc3ApOworCQltb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jU3RhcnQpOworCQltb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KSArCisJCQlsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mbyA9IHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0uc3VzTW9kZU1pc2NJbmZvOworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7CisJCWlmIChtaXNjICYgQVRPTV9WU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOworCQlpZiAobWlzYyAmIEFUT01fSFNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0NPTVBPU0lURVNZTkMpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0NTWU5DOworCQlpZiAobWlzYyAmIEFUT01fSU5URVJMQUNFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19JTlRFUkxBQ0U7CisJCWlmIChtaXNjICYgQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfREJMU0NBTjsKIAotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblJpZ2h0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5SaWdodCk7Ci0JCWNydGNfdGltaW5nLT51Y092ZXJzY2FuTGVmdCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuTGVmdCk7Ci0JCWNydGNfdGltaW5nLT51Y092ZXJzY2FuQm90dG9tID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5Cb3R0b20pOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblRvcCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuVG9wKTsKLQkJKnBpeGVsX2Nsb2NrID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c1BpeGVsQ2xvY2spICogMTA7CisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c1BpeGVsQ2xvY2spICogMTA7CiAKIAkJaWYgKGluZGV4ID09IDEpIHsKIAkJCS8qIFBBTCB0aW1pbmdzIGFwcGVhciB0byBoYXZlIHdyb25nIHZhbHVlcyBmb3IgdG90YWxzICovCi0JCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsIC09IDE7Ci0JCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsIC09IDE7CisJCQltb2RlLT5jcnRjX2h0b3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y192dG90YWwgLT0gMTsKIAkJfQogCQlicmVhazsKIAljYXNlIDI6CkBAIC05MDksMTcgKzEwMzksMzYgQEAKIAkJCXJldHVybiBmYWxzZTsKIAogCQlkdGRfdGltaW5ncyA9ICZ0dl9pbmZvX3YxXzItPmFNb2RlVGltaW5nc1tpbmRleF07Ci0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY09mZnNldCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZCbGFua2luZ19UaW1lKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfaHRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSk7CisJCW1vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfaHN5bmNfZW5kID0gbW9kZS0+Y3J0Y19oc3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY1dpZHRoKTsKIAotCQljcnRjX3RpbWluZy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1BpeENsaykgKiAxMDsKKwkJbW9kZS0+Y3J0Y192dG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7CisJCW1vZGUtPmNydGNfdmRpc3BsYXkgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jT2Zmc2V0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCisJCW1vZGUtPmZsYWdzID0gMDsKKwkJbWlzYyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CisKKwkJbW9kZS0+Y2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gdHJ1ZTsKQEAgLTk4NCw2ICsxMTMzLDI0IEBACiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CiAKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0RW5naW5lQ2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5FbmdpbmVDbG9jazsKK30KKwordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlHRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04gYXJnczsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRNZW1vcnlDbG9jayk7CisKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKKwlyZXR1cm4gYXJncy51bFJldHVybk1lbW9yeUNsb2NrOworfQorCiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkJICB1aW50MzJfdCBlbmdfY2xvY2spCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCmluZGV4IDJlOTM4ZjcuLjEwYmQ1MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9Ci0JCXIgPSByYWRlb25fY29weV9kbWEocmRldiwgc2FkZHIsIGRhZGRyLCBzaXplIC8gNDA5NiwgZmVuY2UpOworCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CkBAIC04OCw3ICs4OCw3IEBACiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9Ci0JCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2JsaXQocmRldiwgc2FkZHIsIGRhZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwppbmRleCA5NmUzN2E2Li45MDY5MjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCkBAIC0zMywxMiArMzMsNDcgQEAKIC8qCiAgKiBCSU9TLgogICovCisKKy8qIElmIHlvdSBib290IGFuIElHUCBib2FyZCB3aXRoIGEgZGlzY3JldGUgY2FyZCBhcyB0aGUgcHJpbWFyeSwKKyAqIHRoZSBJR1Agcm9tIGlzIG5vdCBhY2Nlc3NpYmxlIHZpYSB0aGUgcm9tIGJhciBhcyB0aGUgSUdQIHJvbSBpcworICogcGFydCBvZiB0aGUgc3lzdGVtIGJpb3MuICBPbiBib290LCB0aGUgc3lzdGVtIGJpb3MgcHV0cyBhCisgKiBjb3B5IG9mIHRoZSBpZ3Agcm9tIGF0IHRoZSBzdGFydCBvZiB2cmFtIGlmIGEgZGlzY3JldGUgY2FyZCBpcworICogcHJlc2VudC4KKyAqLworc3RhdGljIGJvb2wgaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDhfdCBfX2lvbWVtICpiaW9zOworCXJlc291cmNlX3NpemVfdCB2cmFtX2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemUgPSAyNTYgKiAxMDI0OyAvKiA/Pz8gKi8KKworCXJkZXYtPmJpb3MgPSBOVUxMOworCXZyYW1fYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CisJYmlvcyA9IGlvcmVtYXAodnJhbV9iYXNlLCBzaXplKTsKKwlpZiAoIWJpb3MpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaXplID09IDAgfHwgYmlvc1swXSAhPSAweDU1IHx8IGJpb3NbMV0gIT0gMHhhYSkgeworCQlpb3VubWFwKGJpb3MpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJkZXYtPmJpb3MgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChyZGV2LT5iaW9zID09IE5VTEwpIHsKKwkJaW91bm1hcChiaW9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwltZW1jcHkocmRldi0+YmlvcywgYmlvcywgc2l6ZSk7CisJaW91bm1hcChiaW9zKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgcmFkZW9uX3JlYWRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50OF90IF9faW9tZW0gKmJpb3M7CiAJc2l6ZV90IHNpemU7CiAKIAlyZGV2LT5iaW9zID0gTlVMTDsKKwkvKiBYWFg6IHNvbWUgY2FyZHMgbWF5IHJldHVybiAwIGZvciByb20gc2l6ZT8gZGR4IGhhcyBhIHdvcmthcm91bmQgKi8KIAliaW9zID0gcGNpX21hcF9yb20ocmRldi0+cGRldiwgJnNpemUpOwogCWlmICghYmlvcykgewogCQlyZXR1cm4gZmFsc2U7CkBAIC0zNDEsNyArMzc2LDkgQEAKIAogc3RhdGljIGJvb2wgcmFkZW9uX3JlYWRfZGlzYWJsZWRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJcmV0dXJuIGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHJkZXYpOworCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQogCQlyZXR1cm4gcjcwMF9yZWFkX2Rpc2FibGVkX2Jpb3MocmRldik7CiAJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKIAkJcmV0dXJuIHI2MDBfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwpAQCAtMzU2LDcgKzM5MywxMiBAQAogCWJvb2wgcjsKIAl1aW50MTZfdCB0bXA7CiAKLQlyID0gcmFkZW9uX3JlYWRfYmlvcyhyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXIgPSBpZ3BfcmVhZF9iaW9zX2Zyb21fdnJhbShyZGV2KTsKKwkJaWYgKHIgPT0gZmFsc2UpCisJCQlyID0gcmFkZW9uX3JlYWRfYmlvcyhyZGV2KTsKKwl9IGVsc2UKKwkJciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CiAJaWYgKHIgPT0gZmFsc2UpIHsKIAkJciA9IHJhZGVvbl9yZWFkX2Rpc2FibGVkX2Jpb3MocmRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwppbmRleCAxNTJlZWYxLi5hODEzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImF0b20uaCIKIAogLyogMTAga2h6ICovCi1zdGF0aWMgdWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByYWRlb25fcGxsICpzcGxsID0gJnJkZXYtPmNsb2NrLnNwbGw7CiAJdWludDMyX3QgZmJfZGl2LCByZWZfZGl2LCBwb3N0X2Rpdiwgc2NsazsKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJCQlSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iKTsKKwkJCQkJUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iKTsKIAkJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWMzUwKSB7CiAJCQkJdG1wID0gUlJFRzMyX1BMTChSMzAwX1NDTEtfQ05UTDIpOwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCQkJCVIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkJUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIpOworCQkJCQlSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIpOwogCQkJCVdSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCwgdG1wKTsKIAogCQkJCXRtcCA9IFJSRUczMl9QTEwoUkFERU9OX01DTEtfTUlTQyk7CkBAIC02NTQsNyArNjU0LDcgQEAKIAkJCQkgUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAotCQkJCSBSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8CisJCQkJIFIzMDBfUDJHMkNMS19EQUNfQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfRElTUF9EQUNfUElYQ0xLX0RBQzJfQkxBTktfT0ZGKTsKIAkJCVdSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCwgdG1wKTsKIAkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM1MCkgewpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCQkJIFIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAorCQkJCSBSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX0RJU1BfREFDX1BJWENMS19EQUMyX0JMQU5LX09GRik7CiAJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggNzQ4MjY1YS4uNTI1M2NiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtNDksNyArNDksOCBAQAogCQkJICAgIHVpbnQzMl90IGNvbm5lY3Rvcl9pZCwKIAkJCSAgICB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlLAogCQkJICAgIGludCBjb25uZWN0b3JfdHlwZSwKLQkJCSAgICBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICppMmNfYnVzKTsKKwkJCSAgICBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICppMmNfYnVzLAorCQkJICAgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCiAvKiBmcm9tIHJhZGVvbl9sZWdhY3lfZW5jb2Rlci5jICovCiBleHRlcm4gdm9pZApAQCAtODA4LDI1ICs4MDksMjUgQEAKIAlsdmRzLT5wYW5lbF9ibG9uX2RlbGF5ID0gKGx2ZHNfc3NfZ2VuX2NudGwgPj4gUkFERU9OX0xWRFNfUFdSU0VRX0RFTEFZMl9TSElGVCkgJiAweGY7CiAKIAlpZiAoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfU1RSRVRDSF9FTkFCTEUpCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9CiAJCSAgICAoKGZwX3ZlcnRfc3RyZXRjaCAmIFJBREVPTl9WRVJUX1BBTkVMX1NJWkUpID4+CiAJCSAgICAgUkFERU9OX1ZFUlRfUEFORUxfU0hJRlQpICsgMTsKIAllbHNlCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9CiAJCSAgICAoUlJFRzMyKFJBREVPTl9DUlRDX1ZfVE9UQUxfRElTUCkgPj4gMTYpICsgMTsKIAogCWlmIChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9TVFJFVENIX0VOQUJMRSkKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0KIAkJICAgICgoKGZwX2hvcnpfc3RyZXRjaCAmIFJBREVPTl9IT1JaX1BBTkVMX1NJWkUpID4+CiAJCSAgICAgIFJBREVPTl9IT1JaX1BBTkVMX1NISUZUKSArIDEpICogODsKIAllbHNlCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICAoKFJSRUczMihSQURFT05fQ1JUQ19IX1RPVEFMX0RJU1ApID4+IDE2KSArIDEpICogODsKIAotCWlmICgobHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA8IDY0MCkgfHwKLQkgICAgKGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPCA0ODApKSB7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPSA2NDA7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPSA0ODA7CisJaWYgKChsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA8IDY0MCkgfHwKKwkgICAgKGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5IDwgNDgwKSkgeworCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9IDY0MDsKKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPSA0ODA7CiAJfQogCiAJcHBsbF9kaXZfc2VsID0gUlJFRzgoUkFERU9OX0NMT0NLX0NOVExfSU5ERVggKyAxKSAmIDB4MzsKQEAgLTg0Niw4ICs4NDcsOCBAQAogCWx2ZHMtPnBhbmVsX3ZjY19kZWxheSA9IDIwMDsKIAogCURSTV9JTkZPKCJQYW5lbCBpbmZvIGRlcml2ZWQgZnJvbSByZWdpc3RlcnNcbiIpOwotCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzLAotCQkgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJRFJNX0lORk8oIlBhbmVsIFNpemUgJWR4JWRcbiIsIGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5LAorCQkgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCiAJcmV0dXJuIGx2ZHM7CiB9CkBAIC04ODIsMTEgKzg4MywxMSBAQAogCiAJCURSTV9JTkZPKCJQYW5lbCBJRCBTdHJpbmc6ICVzXG4iLCBzdG1wKTsKIAotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MTkpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MWIpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDE5KTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxYik7CiAKLQkJRFJNX0lORk8oIlBhbmVsIFNpemUgJWR4JWRcbiIsIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMsCi0JCQkgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSwKKwkJCSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSk7CiAKIAkJbHZkcy0+cGFuZWxfdmNjX2RlbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MmMpOwogCQlpZiAobHZkcy0+cGFuZWxfdmNjX2RlbGF5ID4gMjAwMCB8fCBsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPCAwKQpAQCAtOTQ0LDI3ICs5NDUsMjUgQEAKIAkJCWlmICh0bXAgPT0gMCkKIAkJCQlicmVhazsKIAotCQkJaWYgKChSQklPUzE2KHRtcCkgPT0gbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcykgJiYKKwkJCWlmICgoUkJJT1MxNih0bXApID09IGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5KSAmJgogCQkJICAgIChSQklPUzE2KHRtcCArIDIpID09Ci0JCQkgICAgIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpKSB7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaGJsYW5rID0KLQkJCQkgICAgKFJCSU9TMTYodG1wICsgMTcpIC0gUkJJT1MxNih0bXAgKyAxOSkpICogODsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS5ob3ZlcnBsdXMgPQotCQkJCSAgICAoUkJJT1MxNih0bXAgKyAyMSkgLSBSQklPUzE2KHRtcCArIDE5KSAtCi0JCQkJICAgICAxKSAqIDg7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfd2lkdGggPQotCQkJCSAgICBSQklPUzgodG1wICsgMjMpICogODsKKwkJCSAgICAgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpKSB7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUuaHRvdGFsID0gUkJJT1MxNih0bXAgKyAxNykgKiA4OworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3N0YXJ0ID0gUkJJT1MxNih0bXAgKyAyMSkgKiA4OworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX2VuZCA9IChSQklPUzgodG1wICsgMjMpICsKKwkJCQkJCQkgICAgICAgUkJJT1MxNih0bXAgKyAyMSkpICogODsKIAotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZibGFuayA9IChSQklPUzE2KHRtcCArIDI0KSAtCi0JCQkJCQkJICAgIFJCSU9TMTYodG1wICsgMjYpKTsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52b3ZlcnBsdXMgPQotCQkJCSAgICAoKFJCSU9TMTYodG1wICsgMjgpICYgMHg3ZmYpIC0KLQkJCQkgICAgIFJCSU9TMTYodG1wICsgMjYpKTsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY193aWR0aCA9Ci0JCQkJICAgICgoUkJJT1MxNih0bXAgKyAyOCkgJiAweGY4MDApID4+IDExKTsKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS5kb3RjbG9jayA9Ci0JCQkJICAgIFJCSU9TMTYodG1wICsgOSkgKiAxMDsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS52dG90YWwgPSBSQklPUzE2KHRtcCArIDI0KTsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY19zdGFydCA9IFJCSU9TMTYodG1wICsgMjgpICYgMHg3ZmY7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfZW5kID0KKwkJCQkJKChSQklPUzE2KHRtcCArIDI4KSAmIDB4ZjgwMCkgPj4gMTEpICsKKwkJCQkJKFJCSU9TMTYodG1wICsgMjgpICYgMHg3ZmYpOworCisJCQkJbHZkcy0+bmF0aXZlX21vZGUuY2xvY2sgPSBSQklPUzE2KHRtcCArIDkpICogMTA7CiAJCQkJbHZkcy0+bmF0aXZlX21vZGUuZmxhZ3MgPSAwOworCQkJCS8qIHNldCBjcnRjIHZhbHVlcyAqLworCQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCiAJCQl9CiAJCX0KIAl9IGVsc2UgewpAQCAtMTE3OCw3ICsxMTc3LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJfSBlbHNlIGlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgewogCQkJLyogTFZEUyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fTENEX0dQSU9fTUFTSyk7CkBAIC0xMTkwLDcgKzExOTAsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAKIAkJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOwpAQCAtMTIwMiw3ICsxMjAzLDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJfSBlbHNlIHsKIAkJCS8qIERWSS1JIC0gdHYgZGFjLCBpbnQgdG1kcyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19EVklfRERDKTsKQEAgLTEyMjAsNyArMTIyMiw4IEBACiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCiAJCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKQEAgLTEyMzIsNyArMTIzNSw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0KIAogCQlpZiAocmRldi0+ZmFtaWx5ICE9IENISVBfUjEwMCAmJiByZGV2LT5mYW1pbHkgIT0gQ0hJUF9SMjAwKSB7CkBAIC0xMjQ1LDcgKzEyNDksOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDVF9JQk9PSzoKQEAgLTEyNTksNyArMTI2NCw4IEBACiAJCQkJCQkJCTApLAogCQkJCQkgIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQkvKiBWR0EgLSBUViBEQUMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xMjY4LDcgKzEyNzQsOCBAQAogCQkJCQkJCQkyKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTEyNzcsNyArMTI4NCw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9QT1dFUkJPT0tfRVhURVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChwb3dlcmJvb2sgZXh0ZXJuYWwgdG1kcylcbiIsCkBAIC0xMjkwLDcgKzEyOTgsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogRFZJLUkgLSBwcmltYXJ5IGRhYywgZXh0IHRtZHMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xMzAzLDEwICsxMzEyLDEyIEBACiAJCQkJCQkJCUFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJLyogWFhYIHNvbWUgYXJlIFNMICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTEzMTUsNyArMTMyNiw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9QT1dFUkJPT0tfSU5URVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChwb3dlcmJvb2sgaW50ZXJuYWwgdG1kcylcbiIsCkBAIC0xMzI4LDcgKzEzNDAsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogRFZJLUkgLSBwcmltYXJ5IGRhYywgaW50IHRtZHMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xMzQ0LDcgKzEzNTcsOCBAQAogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTEzNTMsNyArMTM2Nyw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9QT1dFUkJPT0tfVkdBOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIHZnYSlcbiIsCkBAIC0xMzY2LDcgKzEzODEsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xMzc1LDcgKzEzOTEsOCBAQAogCQkJCQkJCQkxKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTEzODQsNyArMTQwMSw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9NSU5JX0VYVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAobWluaSBleHRlcm5hbCB0bWRzKVxuIiwKQEAgLTE0MDEsMTAgKzE0MTksMTIgQEAKIAkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAogCQkJCQkJCQkyKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOworCQkvKiBYWFggYXJlIGFueSBETD8gKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDEzLDcgKzE0MzMsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfTUlOSV9JTlRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1pbmkgaW50ZXJuYWwgdG1kcylcbiIsCkBAIC0xNDMzLDcgKzE0NTQsOCBAQAogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTE0NDIsNyArMTQ2NCw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJY2FzZSBDVF9JTUFDX0c1X0lTSUdIVDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKGltYWMgZzUgaXNpZ2h0KVxuIiwKQEAgLTE0NTUsNyArMTQ3OCw4IEBACiAJCQkJCQkJCTApLAogCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklELCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EKTsKIAkJLyogVkdBIC0gdHYgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fRFZJX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTQ2NCw3ICsxNDg4LDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDczLDcgKzE0OTgsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfRU1BQzoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKGVtYWMpXG4iLApAQCAtMTQ4Niw3ICsxNTEyLDggQEAKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFZHQSAtIHR2IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0NSVDJfRERDKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xNDk1LDcgKzE1MjIsOCBAQAogCQkJCQkJCQkyKSwKIAkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLCBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJLyogVFYgLSBUViBEQUMgKi8KIAkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKQEAgLTE1MDQsNyArMTUzMiw4IEBACiAJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAyLCBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciB0YWJsZTogJWQgKGludmFsaWQpXG4iLApAQCAtMTU4MSwxMSArMTYxMCw2MyBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCByYWRlb25fYXBwbHlfbGVnYWN5X3R2X3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCS8qIEFjZXIgNTEwMiBoYXMgbm9uLWV4aXN0ZW50IFRWIHBvcnQgKi8KKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg1OTc1ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjUgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDA5ZikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSFAgZGM1NzUwIGhhcyBub24tZXhpc3RlbnQgVFYgcG9ydCAqLworCWlmIChkZXYtPnBkZXYtPmRldmljZSA9PSAweDU5NzQgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTAzYyAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgyODBhKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHVpbnQxNl90IGNvbWJpb3NfY2hlY2tfZGxfZHZpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpc19kdmlfZCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgZXh0X3RtZHNfaW5mbzsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJaWYgKGlzX2R2aV9kKQorCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0Q7CisJCWVsc2UKKwkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOworCX0KKwlleHRfdG1kc19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19FWFRfVE1EU19JTkZPX1RBQkxFKTsKKwlpZiAoZXh0X3RtZHNfaW5mbykgeworCQl1aW50OF90IHJldiA9IFJCSU9TOChleHRfdG1kc19pbmZvKTsKKwkJdWludDhfdCBmbGFncyA9IFJCSU9TOChleHRfdG1kc19pbmZvICsgNCArIDUpOworCQlpZiAocmV2ID49IDMpIHsKKwkJCWlmIChpc19kdmlfZCkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0Q7CisJCQllbHNlCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQl9IGVsc2UgeworCQkJaWYgKGZsYWdzICYgMSkgeworCQkJCWlmIChpc19kdmlfZCkKKwkJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQkJfQorCQl9CisJfQorCWlmIChpc19kdmlfZCkKKwkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0Q7CisJZWxzZQorCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKK30KKwogYm9vbCByYWRlb25fZ2V0X2xlZ2FjeV9jb25uZWN0b3JfaW5mb19mcm9tX2Jpb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgY29ubl9pbmZvLCBlbnRyeSwgZGV2aWNlczsKLQl1aW50MTZfdCB0bXA7CisJdWludDE2X3QgdG1wLCBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCWVudW0gcmFkZW9uX2NvbWJpb3NfZGRjIGRkY190eXBlOwogCWVudW0gcmFkZW9uX2NvbWJpb3NfY29ubmVjdG9yIGNvbm5lY3RvcjsKIAlpbnQgaSA9IDA7CkBAIC0xNjI4LDggKzE3MDksOSBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlyYWRlb25fYXBwbHlfbGVnYWN5X3F1aXJrcyhkZXYsIGksICZjb25uZWN0b3IsCi0JCQkJCQkgICAmZGRjX2kyYyk7CisJCQlpZiAoIXJhZGVvbl9hcHBseV9sZWdhY3lfcXVpcmtzKGRldiwgaSwgJmNvbm5lY3RvciwKKwkJCQkJCSAgICAgICAmZGRjX2kyYykpCisJCQkJY29udGludWU7CiAKIAkJCXN3aXRjaCAoY29ubmVjdG9yKSB7CiAJCQljYXNlIENPTk5FQ1RPUl9QUk9QUklFVEFSWV9MRUdBQ1k6CkBAIC0xNjQ0LDcgKzE3MjYsOCBAQAogCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIGksIGRldmljZXMsCiAJCQkJCQkJICAgIGxlZ2FjeV9jb25uZWN0b3JfY29udmVydAogCQkJCQkJCSAgICBbY29ubmVjdG9yXSwKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPTk5FQ1RPUl9DUlRfTEVHQUNZOgogCQkJCWlmICh0bXAgJiAweDEpIHsKQEAgLTE2NjksNyArMTc1Miw4IEBACiAJCQkJCQkJICAgIGRldmljZXMsCiAJCQkJCQkJICAgIGxlZ2FjeV9jb25uZWN0b3JfY29udmVydAogCQkJCQkJCSAgICBbY29ubmVjdG9yXSwKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfRFZJX0lfTEVHQUNZOgogCQkJCWRldmljZXMgPSAwOwpAQCAtMTY5OCw2ICsxNzgyLDcgQEAKIAkJCQkJCQkJICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JULAogCQkJCQkJCQkgICAwKSwKIAkJCQkJCQkJICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29tYmlvc19jaGVja19kbF9kdmkoZGV2LCAwKTsKIAkJCQl9IGVsc2UgewogCQkJCQlkZXZpY2VzIHw9IEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVDsKIAkJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCkBAIC0xNzA2LDE5ICsxNzkxLDI0IEBACiAJCQkJCQkJCSAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCwKIAkJCQkJCQkJICAgMCksCiAJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUKTsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7CiAJCQkJfQogCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsCiAJCQkJCQkJICAgIGksCiAJCQkJCQkJICAgIGRldmljZXMsCiAJCQkJCQkJICAgIGxlZ2FjeV9jb25uZWN0b3JfY29udmVydAogCQkJCQkJCSAgICBbY29ubmVjdG9yXSwKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgY29ubmVjdG9yX29iamVjdF9pZCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPTk5FQ1RPUl9EVklfRF9MRUdBQ1k6Ci0JCQkJaWYgKCh0bXAgPj4gNCkgJiAweDEpCisJCQkJaWYgKCh0bXAgPj4gNCkgJiAweDEpIHsKIAkJCQkJZGV2aWNlcyA9IEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVDsKLQkJCQllbHNlCisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb21iaW9zX2NoZWNrX2RsX2R2aShkZXYsIDEpOworCQkJCX0gZWxzZSB7CiAJCQkJCWRldmljZXMgPSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQ7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOworCQkJCX0KIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZAogCQkJCQkJCSAgKGRldiwgZGV2aWNlcywgMCksCkBAIC0xNzI2LDcgKzE4MTYsOCBAQAogCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIGksIGRldmljZXMsCiAJCQkJCQkJICAgIGxlZ2FjeV9jb25uZWN0b3JfY29udmVydAogCQkJCQkJCSAgICBbY29ubmVjdG9yXSwKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgY29ubmVjdG9yX29iamVjdF9pZCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPTk5FQ1RPUl9DVFZfTEVHQUNZOgogCQkJY2FzZSBDT05ORUNUT1JfU1RWX0xFR0FDWToKQEAgLTE3NDAsNyArMTgzMSw4IEBACiAJCQkJCQkJICAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJRFJNX0VSUk9SKCJVbmtub3duIGNvbm5lY3RvciB0eXBlOiAlZFxuIiwKQEAgLTE3NzIsMTAgKzE4NjQsMjkgQEAKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgfAogCQkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCX0gZWxzZSB7Ci0JCQlEUk1fREVCVUcoIk5vIGNvbm5lY3RvciBpbmZvIGZvdW5kXG4iKTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXVpbnQxNl90IGNydF9pbmZvID0KKwkJCQljb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0NSVF9JTkZPX1RBQkxFKTsKKwkJCURSTV9ERUJVRygiRm91bmQgQ1JUIHRhYmxlLCBhc3N1bWluZyBWR0EgY29ubmVjdG9yXG4iKTsKKwkJCWlmIChjcnRfaW5mbykgeworCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKKwkJCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCQkJCQkJMSksCisJCQkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpOworCQkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CisJCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAorCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOworCQkJfSBlbHNlIHsKKwkJCQlEUk1fREVCVUcoIk5vIGNvbm5lY3RvciBpbmZvIGZvdW5kXG4iKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTE4NzAsNyArMTk4MSw4IEBACiAJCQkJCQkgICAgNSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCX0KIAl9CiAKQEAgLTE4ODAsMTYgKzE5OTIsMTkgQEAKIAkJICAgIGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfVFZfSU5GT19UQUJMRSk7CiAJCWlmICh0dl9pbmZvKSB7CiAJCQlpZiAoUkJJT1M4KHR2X2luZm8gKyA2KSA9PSAnVCcpIHsKLQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKLQkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZAotCQkJCQkJCSAgKGRldiwKLQkJCQkJCQkgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKLQkJCQkJCQkgICAyKSwKLQkJCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKLQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCA2LAotCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKLQkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJCQkgICAgJmRkY19pMmMpOworCQkJCWlmIChyYWRlb25fYXBwbHlfbGVnYWN5X3R2X3F1aXJrcyhkZXYpKSB7CisJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZAorCQkJCQkJCQkgIChkZXYsCisJCQkJCQkJCSAgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAorCQkJCQkJCQkgICAyKSwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CisJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDYsCisJCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKKwkJCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCisJCQkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggYWYxZDU1MS4uZmNlNGM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm1fZWRpZC5oIgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgpAQCAtMTc3LDI1ICsxNzgsMTIgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKLQlpZiAobmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgIT0gMCAmJgotCSAgICBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyAhPSAwICYmCi0JICAgIG5hdGl2ZV9tb2RlLT5kb3RjbG9jayAhPSAwKSB7Ci0JCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKLQotCQltb2RlLT5oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQltb2RlLT52ZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOwotCi0JCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJbW9kZS0+aHN5bmNfc3RhcnQgPSBtb2RlLT5oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCW1vZGUtPmhzeW5jX2VuZCA9IG1vZGUtPmhzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoOwotCQltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCW1vZGUtPnZzeW5jX3N0YXJ0ID0gbW9kZS0+dmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT52c3luY193aWR0aDsKLQkJbW9kZS0+Y2xvY2sgPSBuYXRpdmVfbW9kZS0+ZG90Y2xvY2s7Ci0JCW1vZGUtPmZsYWdzID0gMDsKLQorCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgIT0gMCAmJgorCSAgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgIT0gMCAmJgorCSAgICBuYXRpdmVfbW9kZS0+Y2xvY2sgIT0gMCkgeworCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbmF0aXZlX21vZGUpOwogCQltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQgfCBEUk1fTU9ERV9UWVBFX0RSSVZFUjsKIAkJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKQEAgLTIwOSw3ICsxOTcsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKIAlpbnQgaTsKIAlzdHJ1Y3QgbW9kZV9zaXplIHsKIAkJaW50IHc7CkBAIC0yMzUsMTcgKzIyMywyMiBAQAogCX07CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTc7IGkrKykgeworCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IDEwMjQgfHwKKwkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IDc2OCkKKwkJCQljb250aW51ZTsKKwkJfQogCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7Ci0JCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyB8fAotCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgfHwKLQkJCSAgICAoY29tbW9uX21vZGVzW2ldLncgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKLQkJCSAgICAgY29tbW9uX21vZGVzW2ldLmggPT0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMpKQorCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPmhkaXNwbGF5IHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgfHwKKwkJCSAgICAoY29tbW9uX21vZGVzW2ldLncgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICYmCisJCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkpCiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53IDwgMzIwIHx8IGNvbW1vbl9tb2Rlc1tpXS5oIDwgMjAwKQogCQkJY29udGludWU7CiAKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGNvbW1vbl9tb2Rlc1tpXS53LCBjb21tb25fbW9kZXNbaV0uaCwgNjAsIGZhbHNlLCBmYWxzZSk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBjb21tb25fbW9kZXNbaV0udywgY29tbW9uX21vZGVzW2ldLmgsIDYwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwogCX0KIH0KQEAgLTM0MywyOCArMzM2LDIzIEBACiAJCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0JdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKIAkvKiBUcnkgdG8gZ2V0IG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEIGlmIG5lY2Vzc2FyeSAqLwotCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnQsICptb2RlOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKLQkJCWlmIChtb2RlLT5oZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyAmJgotCQkJICAgIG1vZGUtPnZkaXNwbGF5ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCQkJbmF0aXZlX21vZGUtPmhibGFuayA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhkaXNwbGF5OwotCQkJCW5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXMgPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5OwotCQkJCW5hdGl2ZV9tb2RlLT5oc3luY193aWR0aCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OwotCQkJCW5hdGl2ZV9tb2RlLT52YmxhbmsgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52ZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+dm92ZXJwbHVzID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGggPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+ZG90Y2xvY2sgPSBtb2RlLT5jbG9jazsKKwkJCWlmIChtb2RlLT5oZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgJiYKKwkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpIHsKKwkJCQkqbmF0aXZlX21vZGUgPSAqbW9kZTsKKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCQkJCURSTV9JTkZPKCJEZXRlcm1pbmVkIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscyBmcm9tIEVESURcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQotCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKIAkJRFJNX0lORk8oIk5vIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscywgZGlzYWJsaW5nIFJNWFxuIik7CiAJCXJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9IFJNWF9PRkY7CiAJfQpAQCAtNDA5LDEzICszOTcsNjQgQEAKIHN0YXRpYyBpbnQgcmFkZW9uX2x2ZHNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKworCWlmICgobW9kZS0+aGRpc3BsYXkgPCAzMjApIHx8IChtb2RlLT52ZGlzcGxheSA8IDI0MCkpCisJCXJldHVybiBNT0RFX1BBTkVMOworCisJaWYgKGVuY29kZXIpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCisJCS8qIEFWSVZPIGhhcmR3YXJlIHN1cHBvcnRzIGRvd25zY2FsaW5nIG1vZGVzIGxhcmdlciB0aGFuIHRoZSBwYW5lbAorCQkgKiB0byB0aGUgcGFuZWwgc2l6ZSwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIGlzIGRlc2lyYWJsZS4KKwkJICovCisJCWlmICgobW9kZS0+aGRpc3BsYXkgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpIHx8CisJCSAgICAobW9kZS0+dmRpc3BsYXkgPiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQorCQkJcmV0dXJuIE1PREVfUEFORUw7CisKKwkJLyogaWYgc2NhbGluZyBpcyBkaXNhYmxlZCwgYmxvY2sgbm9uLW5hdGl2ZSBtb2RlcyAqLworCQlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlID09IFJNWF9PRkYpIHsKKwkJCWlmICgobW9kZS0+aGRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkJICAgIChtb2RlLT52ZGlzcGxheSAhPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQorCQkJCXJldHVybiBNT0RFX1BBTkVMOworCQl9CisJfQorCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJhZGVvbl9sdmRzX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJaWYgKGVuY29kZXIpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCisJCS8qIGNoZWNrIGlmIHBhbmVsIGlzIHZhbGlkICovCisJCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPj0gMzIwICYmIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSA+PSAyNDApCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKworCX0KKworCS8qIGNoZWNrIGZvciBlZGlkIGFzIHdlbGwgKi8KKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJCSAgICAgICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQl9CisJfQogCS8qIGNoZWNrIGFjcGkgbGlkIHN0YXR1cyA/Pz8gKi8KKwogCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQyNiw2ICs0NjUsOCBAQAogCiAJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJhZGVvbl9pMmNfZGVzdHJveShyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CkBAIC00OTUsNiArNTM2LDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3ZnYV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KKwkvKiBYWFggdmVyaWZ5IGFnYWluc3QgbWF4IERBQyBvdXRwdXQgZnJlcXVlbmN5ICovCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTUxMyw5ICs1NTYsMzIgQEAKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CiAJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwotCWlmIChkcmV0KQotCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQllbHNlIHsKKwlpZiAoZHJldCkgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJfQorCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CisJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOworCisJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkJRFJNX0VSUk9SKCJEREMgcmVzcG9uZGVkIGJ1dCBub3QgRURJRCBmb3VuZCBmb3IgJXNcbiIsCisJCQkJICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQl9IGVsc2UgeworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAhIShyYWRlb25fY29ubmVjdG9yLT5lZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpOworCisJCQkvKiBzb21lIG9lbXMgaGF2ZSBib2FyZHMgd2l0aCBzZXBhcmF0ZSBkaWdpdGFsIGFuZCBhbmFsb2cgY29ubmVjdG9ycworCQkJICogd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAob2Z0ZW4gdmdhICsgaGRtaSkKKwkJCSAqLworCQkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsICYmIHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMpIHsKKwkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCX0gZWxzZQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQl9CisJfSBlbHNlIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCkgewogCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOwogCQkJcmV0ID0gZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7CkBAIC01NTksNyArNjI1LDcgQEAKIAkJcmFkZW9uX2FkZF9jb21tb25fbW9kZXMoZW5jb2RlciwgY29ubmVjdG9yKTsKIAllbHNlIHsKIAkJLyogb25seSA4MDB4NjAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgb24gcHJlLWF2aXZvIGNoaXBzICovCi0JCXR2X21vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCA4MDAsIDYwMCwgNjAsIGZhbHNlLCBmYWxzZSk7CisJCXR2X21vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCA4MDAsIDYwMCwgNjAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCQl0dl9tb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKIAkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIHR2X21vZGUpOwogCX0KQEAgLTU2OSw2ICs2MzUsOCBAQAogc3RhdGljIGludCByYWRlb25fdHZfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCWlmICgobW9kZS0+aGRpc3BsYXkgPiAxMDI0KSB8fCAobW9kZS0+dmRpc3BsYXkgPiA3NjgpKQorCQlyZXR1cm4gTU9ERV9DTE9DS19SQU5HRTsKIAlyZXR1cm4gTU9ERV9PSzsKIH0KIApAQCAtNjQzLDYgKzcxMSwxMCBAQAogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKIAlpZiAoZHJldCkgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJfQogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CiAJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwpAQCAtNjUzLDEwICs3MjUsMTUgQEAKIAkJfSBlbHNlIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKIAotCQkJLyogaWYgdGhpcyBpc24ndCBhIGRpZ2l0YWwgbW9uaXRvcgotCQkJICAgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGFueQotCQkJICAgVFYgY29uZmxpY3RzICovCi0JCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJCS8qIHNvbWUgb2VtcyBoYXZlIGJvYXJkcyB3aXRoIHNlcGFyYXRlIGRpZ2l0YWwgYW5kIGFuYWxvZyBjb25uZWN0b3JzCisJCQkgKiB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lIChvZnRlbiB2Z2EgKyBoZG1pKQorCQkJICovCisJCQlpZiAoKCFyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkgJiYgcmFkZW9uX2Nvbm5lY3Rvci0+c2hhcmVkX2RkYykgeworCQkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOworCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJfSBlbHNlCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KIAl9CiAKQEAgLTc0Myw5ICs4MjAsMzYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX2R2aV9mb3JjZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCWlmIChjb25uZWN0b3ItPmZvcmNlID09IERSTV9GT1JDRV9PTikKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSBmYWxzZTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT05fRElHSVRBTCkKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSB0cnVlOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9kdmlfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KKworCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApKSB7CisJCWlmICgocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSkgfHwKKwkJICAgIChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EKSB8fAorCQkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQikpCisJCQlyZXR1cm4gTU9ERV9PSzsKKwkJZWxzZQorCQkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwl9CisJcmV0dXJuIE1PREVfT0s7Cit9CisKIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyByYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdldF9tb2RlcyA9IHJhZGVvbl9kdmlfZ2V0X21vZGVzLAotCS5tb2RlX3ZhbGlkID0gcmFkZW9uX3ZnYV9tb2RlX3ZhbGlkLAorCS5tb2RlX3ZhbGlkID0gcmFkZW9uX2R2aV9tb2RlX3ZhbGlkLAogCS5iZXN0X2VuY29kZXIgPSByYWRlb25fZHZpX2VuY29kZXIsCiB9OwogCkBAIC03NTUsNiArODU5LDcgQEAKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKIAkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCiAJLmRlc3Ryb3kgPSByYWRlb25fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmZvcmNlID0gcmFkZW9uX2R2aV9mb3JjZSwKIH07CiAKIHZvaWQKQEAgLTc2NCwxMyArODY5LDE2IEBACiAJCQkgIGludCBjb25uZWN0b3JfdHlwZSwKIAkJCSAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKIAkJCSAgYm9vbCBsaW5rYiwKLQkJCSAgdWludDMyX3QgaWdwX2xhbmVfaW5mbykKKwkJCSAgdWludDMyX3QgaWdwX2xhbmVfaW5mbywKKwkJCSAgdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJdWludDMyX3Qgc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbE5vbmU7CisJYm9vbCBzaGFyZWRfZGRjID0gZmFsc2U7CisJaW50IHJldDsKIAogCS8qIGZpeG1lIC0gdHYvY3YvZGluICovCiAJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtNzgzLDYgKzg5MSwxMyBAQAogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyB8PSBzdXBwb3J0ZWRfZGV2aWNlOwogCQkJcmV0dXJuOwogCQl9CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzICYmIGkyY19idXMtPnZhbGlkKSB7CisJCQlpZiAobWVtY21wKCZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMsIGkyY19idXMsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjKSkgPT0gMCkgeworCQkJCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSB0cnVlOworCQkJCXNoYXJlZF9kZGMgPSB0cnVlOworCQkJfQorCQl9CiAJfQogCiAJcmFkZW9uX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CkBAIC03OTMsMjcgKzkwOCwzNSBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSBzaGFyZWRfZGRjOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtODI3LDcgKzk1MCw5IEBACiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5pZ3BfbGFuZV9pbmZvID0gaWdwX2xhbmVfaW5mbzsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYgPSByYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtODM3LDYgKzk2Miw3IEBACiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8uY29oZXJlbnRfbW9kZV9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtODUwLDcgKzk3Niw5IEBACiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5pZ3BfbGFuZV9pbmZvID0gaWdwX2xhbmVfaW5mbzsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYgPSByYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkhETUkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTg2OSw3ICs5OTcsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEUCIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtODgyLDExICsxMDEyLDE0IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJaWYgKHJhZGVvbl90diA9PSAxKSB7CiAJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOworCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCisJCQkJCQkgICAgICAxKTsKIAkJfQotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKLQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAotCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyksIEdGUF9LRVJORUwpOwpAQCAtODk2LDcgKzEwMjksOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJMVkRTIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCkBAIC05MjYsMTIgKzEwNjEsMTQgQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cykKKwkJCSAgICBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICppMmNfYnVzLAorCQkJICAgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJdWludDMyX3Qgc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbE5vbmU7CisJaW50IHJldDsKIAogCS8qIGZpeG1lIC0gdHYvY3YvZGluICovCiAJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtOTU0LDI3ICsxMDkxLDM0IEBACiAKIAlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3JfaWQgPSBjb25uZWN0b3JfaWQ7CiAJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyA9IHN1cHBvcnRlZF9kZXZpY2U7CisJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIlZHQSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CkBAIC05ODIsMTEgKzExMjYsMTQgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJCSAgICAgIDEpOwpAQCAtOTk4LDcgKzExNDUsMTAgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOgogCQlpZiAocmFkZW9uX3R2ID09IDEpIHsKIAkJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJCSAgICAgIDEpOwpAQCAtMTAwNiw3ICsxMTU2LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkxWRFMiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IDEyZjU5OTAuLjVhYjJjZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtMTQyLDE1ICsxNDIsMzEgQEAKIAkJfQogCiAJCXAtPmNodW5rc1tpXS5sZW5ndGhfZHcgPSB1c2VyX2NodW5rLmxlbmd0aF9kdzsKLQkJY2RhdGEgPSAodWludDMyX3QgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CisJCXAtPmNodW5rc1tpXS51c2VyX3B0ciA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXVzZXJfY2h1bmsuY2h1bmtfZGF0YTsKIAotCQlzaXplID0gcC0+Y2h1bmtzW2ldLmxlbmd0aF9kdyAqIHNpemVvZih1aW50MzJfdCk7Ci0JCXAtPmNodW5rc1tpXS5rZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChwLT5jaHVua3NbaV0ua2RhdGEgPT0gTlVMTCkgewotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihwLT5jaHVua3NbaV0ua2RhdGEsIGNkYXRhLCBzaXplKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOworCQlpZiAocC0+Y2h1bmtzW2ldLmNodW5rX2lkICE9IFJBREVPTl9DSFVOS19JRF9JQikgeworCQkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOworCQkJcC0+Y2h1bmtzW2ldLmtkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChwLT5jaHVua3NbaV0ua2RhdGEgPT0gTlVMTCkgeworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihwLT5jaHVua3NbaV0ua2RhdGEsCisJCQkJCSAgICAgICBwLT5jaHVua3NbaV0udXNlcl9wdHIsIHNpemUpKSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwLT5jaHVua3NbaV0ua3BhZ2VbMF0gPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlwLT5jaHVua3NbaV0ua3BhZ2VbMV0gPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocC0+Y2h1bmtzW2ldLmtwYWdlWzBdID09IE5VTEwgfHwgcC0+Y2h1bmtzW2ldLmtwYWdlWzFdID09IE5VTEwpIHsKKwkJCQlrZnJlZShwLT5jaHVua3NbaV0ua3BhZ2VbMF0pOworCQkJCWtmcmVlKHAtPmNodW5rc1tpXS5rcGFnZVsxXSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlwLT5jaHVua3NbaV0ua3BhZ2VfaWR4WzBdID0gLTE7CisJCQlwLT5jaHVua3NbaV0ua3BhZ2VfaWR4WzFdID0gLTE7CisJCQlwLT5jaHVua3NbaV0ubGFzdF9jb3BpZWRfcGFnZSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmxhc3RfcGFnZV9pbmRleCA9ICgocC0+Y2h1bmtzW2ldLmxlbmd0aF9kdyAqIDQpIC0gMSkgLyBQQUdFX1NJWkU7CiAJCX0KIAl9CiAJaWYgKHAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdLmxlbmd0aF9kdyA+ICgxNiAqIDEwMjQpKSB7CkBAIC0xOTAsNiArMjA2LDggQEAKIAlrZnJlZShwYXJzZXItPnJlbG9jc19wdHIpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgewogCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMV0pOwogCX0KIAlrZnJlZShwYXJzZXItPmNodW5rcyk7CiAJa2ZyZWUocGFyc2VyLT5jaHVua3NfYXJyYXkpOwpAQCAtMjM4LDggKzI1NiwxNCBAQAogCSAqIHVuY2FjaGVkKS4gKi8KIAlpYl9jaHVuayA9ICZwYXJzZXIuY2h1bmtzW3BhcnNlci5jaHVua19pYl9pZHhdOwogCXBhcnNlci5pYi0+bGVuZ3RoX2R3ID0gaWJfY2h1bmstPmxlbmd0aF9kdzsKLQltZW1jcHkoKHZvaWQgKilwYXJzZXIuaWItPnB0ciwgaWJfY2h1bmstPmtkYXRhLCBpYl9jaHVuay0+bGVuZ3RoX2R3KjQpOwogCXIgPSByYWRlb25fY3NfcGFyc2UoJnBhcnNlcik7CisJaWYgKHIgfHwgcGFyc2VyLnBhcnNlcl9lcnJvcikgeworCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBzdHJlYW0gIVxuIik7CisJCXJhZGVvbl9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jc19tdXRleCk7CisJCXJldHVybiByOworCX0KKwlyID0gcmFkZW9uX2NzX2ZpbmlzaF9wYWdlcygmcGFyc2VyKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBzdHJlYW0gIVxuIik7CiAJCXJhZGVvbl9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKQEAgLTI1NCwzICsyNzgsNjQgQEAKIAltdXRleF91bmxvY2soJnJkZXYtPmNzX211dGV4KTsKIAlyZXR1cm4gcjsKIH0KKworaW50IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApCit7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJjID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCWludCBpOworCWludCBzaXplID0gUEFHRV9TSVpFOworCisJZm9yIChpID0gaWJjLT5sYXN0X2NvcGllZF9wYWdlICsgMTsgaSA8PSBpYmMtPmxhc3RfcGFnZV9pbmRleDsgaSsrKSB7CisJCWlmIChpID09IGliYy0+bGFzdF9wYWdlX2luZGV4KSB7CisJCQlzaXplID0gKGliYy0+bGVuZ3RoX2R3ICogNCkgJSBQQUdFX1NJWkU7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCXNpemUgPSBQQUdFX1NJWkU7CisJCX0KKwkJCisJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+aWItPnB0ciArIChpICogKFBBR0VfU0laRS80KSksCisJCQkJICAgICAgIGliYy0+dXNlcl9wdHIgKyAoaSAqIFBBR0VfU0laRSksCisJCQkJICAgICAgIHNpemUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmFkZW9uX2NzX3VwZGF0ZV9wYWdlcyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgaW50IHBnX2lkeCkKK3sKKwlpbnQgbmV3X3BhZ2U7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJjID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCWludCBpOworCWludCBzaXplID0gUEFHRV9TSVpFOworCisJZm9yIChpID0gaWJjLT5sYXN0X2NvcGllZF9wYWdlICsgMTsgaSA8IHBnX2lkeDsgaSsrKSB7CisJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+aWItPnB0ciArIChpICogKFBBR0VfU0laRS80KSksCisJCQkJICAgICAgIGliYy0+dXNlcl9wdHIgKyAoaSAqIFBBR0VfU0laRSksCisJCQkJICAgICAgIFBBR0VfU0laRSkpIHsKKwkJCXAtPnBhcnNlcl9lcnJvciA9IC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCW5ld19wYWdlID0gaWJjLT5rcGFnZV9pZHhbMF0gPCBpYmMtPmtwYWdlX2lkeFsxXSA/IDAgOiAxOworCisJaWYgKHBnX2lkeCA9PSBpYmMtPmxhc3RfcGFnZV9pbmRleCkgeworCQlzaXplID0gKGliYy0+bGVuZ3RoX2R3ICogNCkgJSBQQUdFX1NJWkU7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCXNpemUgPSBQQUdFX1NJWkU7CisJfQorCisJaWYgKERSTV9DT1BZX0ZST01fVVNFUihpYmMtPmtwYWdlW25ld19wYWdlXSwKKwkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKHBnX2lkeCAqIFBBR0VfU0laRSksCisJCQkgICAgICAgc2l6ZSkpIHsKKwkJcC0+cGFyc2VyX2Vycm9yID0gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY29weSB0byBJQiBoZXJlICovCisJbWVtY3B5KCh2b2lkICopKHAtPmliLT5wdHIrKHBnX2lkeCooUEFHRV9TSVpFLzQpKSksIGliYy0+a3BhZ2VbbmV3X3BhZ2VdLCBzaXplKTsKKworCWliYy0+bGFzdF9jb3BpZWRfcGFnZSA9IHBnX2lkeDsKKwlpYmMtPmtwYWdlX2lkeFtuZXdfcGFnZV0gPSBwZ19pZHg7CisKKwlyZXR1cm4gbmV3X3BhZ2U7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCmluZGV4IGIxM2M3OWUuLjI4NzcyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCkBAIC0xMDksOSArMTA5LDE1IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkgeworCQkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKQorCQkJCVdSRUczMihSNzAwX0QyQ1VSX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCWVsc2UKKwkJCQlXUkVHMzIoUjcwMF9EMUNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCX0KIAkJV1JFRzMyKEFWSVZPX0QxQ1VSX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZ3B1X2FkZHIpOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT5sZWdhY3lfY3Vyc29yX29mZnNldCA9IGdwdV9hZGRyIC0gcmFkZW9uX2NydGMtPmxlZ2FjeV9kaXNwbGF5X2Jhc2VfYWRkcjsKIAkJLyogb2Zmc2V0IGlzIGZyb20gRElTUCgyKV9CQVNFX0FERFJFU1MgKi8KIAkJV1JFRzMyKFJBREVPTl9DVVJfT0ZGU0VUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCByYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCBkYWY1ZGI3Li5lM2Y5ZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMzIyLDEwICszMjIsNiBAQAogCWNhc2UgQ0hJUF9SVjM4MDoKIAkJcmRldi0+YXNpYyA9ICZyMzAwX2FzaWM7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2luaXQgPSAmcnYzNzBfcGNpZV9nYXJ0X2luaXQ7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF9kaXNhYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlOwogCQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKIAkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwogCQl9CkBAIC00NDgsMjAgKzQ0NCwyNCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IGNhcmRfaW5mbyBhdG9tX2NhcmRfaW5mbyA9IHsKLQkuZGV2ID0gTlVMTCwKLQkucmVnX3JlYWQgPSBjYWlsX3JlZ19yZWFkLAotCS5yZWdfd3JpdGUgPSBjYWlsX3JlZ193cml0ZSwKLQkubWNfcmVhZCA9IGNhaWxfbWNfcmVhZCwKLQkubWNfd3JpdGUgPSBjYWlsX21jX3dyaXRlLAotCS5wbGxfcmVhZCA9IGNhaWxfcGxsX3JlYWQsCi0JLnBsbF93cml0ZSA9IGNhaWxfcGxsX3dyaXRlLAotfTsKLQogaW50IHJhZGVvbl9hdG9tYmlvc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWF0b21fY2FyZF9pbmZvLmRldiA9IHJkZXYtPmRkZXY7Ci0JcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCA9IGF0b21fcGFyc2UoJmF0b21fY2FyZF9pbmZvLCByZGV2LT5iaW9zKTsKKwlzdHJ1Y3QgY2FyZF9pbmZvICphdG9tX2NhcmRfaW5mbyA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXJkX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghYXRvbV9jYXJkX2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcmRldi0+bW9kZV9pbmZvLmF0b21fY2FyZF9pbmZvID0gYXRvbV9jYXJkX2luZm87CisJYXRvbV9jYXJkX2luZm8tPmRldiA9IHJkZXYtPmRkZXY7CisJYXRvbV9jYXJkX2luZm8tPnJlZ19yZWFkID0gY2FpbF9yZWdfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+cmVnX3dyaXRlID0gY2FpbF9yZWdfd3JpdGU7CisJYXRvbV9jYXJkX2luZm8tPm1jX3JlYWQgPSBjYWlsX21jX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPm1jX3dyaXRlID0gY2FpbF9tY193cml0ZTsKKwlhdG9tX2NhcmRfaW5mby0+cGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkOworCWF0b21fY2FyZF9pbmZvLT5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZTsKKworCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKGF0b21fY2FyZF9pbmZvLCByZGV2LT5iaW9zKTsKIAlyYWRlb25fYXRvbV9pbml0aWFsaXplX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYtPmRkZXYpOwogCXJldHVybiAwOwogfQpAQCAtNDY5LDYgKzQ2OSw3IEBACiB2b2lkIHJhZGVvbl9hdG9tYmlvc19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWtmcmVlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCWtmcmVlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NhcmRfaW5mbyk7CiB9CiAKIGludCByYWRlb25fY29tYmlvc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtNDg1LDcgKzQ4Niw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHJhZGVvbl92Z2Ffc2V0X2RlY29kZSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBjb29raWU7Ci0KIAlyYWRlb25fdmdhX3NldF9zdGF0ZShyZGV2LCBzdGF0ZSk7CiAJaWYgKHN0YXRlKQogCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8CkBAIC00OTMsNiArNDkzLDI5IEBACiAJZWxzZQogCQlyZXR1cm4gVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKIH0KKwordm9pZCByYWRlb25fYWdwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKKwkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7CisJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOworCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUgfHwKKwkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwIHx8CisJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCB8fAorCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMykgeworCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKKwkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSUU7CisJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOworCX0gZWxzZSB7CisJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7CisJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0k7CisJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoOworCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7CisJfQorfQorCiAvKgogICogUmFkZW9uIGRldmljZS4KICAqLwpAQCAtNTMxLDI5ICs1NTQsNyBAQAogCX0KIAogCWlmIChyYWRlb25fYWdwbW9kZSA9PSAtMSkgewotCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1IHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM4MCB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTAgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMpIHsKLQkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOwotCQkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSUU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2luaXQgPSAmcnYzNzBfcGNpZV9nYXJ0X2luaXQ7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF9kaXNhYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwotCQl9IGVsc2UgewotCQkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0k7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnIxMDBfcGNpX2dhcnRfZmluaTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoOwotCQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOwotCQl9CisJCXJhZGVvbl9hZ3BfZGlzYWJsZShyZGV2KTsKIAl9CiAKIAkvKiBzZXQgRE1BIG1hc2sgKyBuZWVkX2RtYTMyIGZsYWdzLgpAQCAtNTg1LDExMSArNTg2LDI2IEBACiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gYmFzZTogMHglMDhYXG4iLCAodWludDMyX3QpcmRldi0+cm1taW9fYmFzZSk7CiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gc2l6ZTogJXVcbiIsICh1bnNpZ25lZClyZGV2LT5ybW1pb19zaXplKTsKIAotCXJkZXYtPm5ld19pbml0X3BhdGggPSBmYWxzZTsKLQlyID0gcmFkZW9uX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCiAJLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCi0JciA9IHZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKLQlpZiAocikgewotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiB0aGlzIHdpbGwgZmFpbCBmb3IgY2FyZHMgdGhhdCBhcmVuJ3QgVkdBIGNsYXNzIGRldmljZXMsIGp1c3QKKwkgKiBpZ25vcmUgaXQgKi8KKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7CisKKwlyID0gcmFkZW9uX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCAmJiAhcmRldi0+YWNjZWxfd29ya2luZykgeworCQkvKiBBY2NlbGVyYXRpb24gbm90IHdvcmtpbmcgb24gQUdQIGNhcmQgdHJ5IGFnYWluCisJCSAqIHdpdGggZmFsbGJhY2sgdG8gUENJIG9yIFBDSUUgR0FSVAorCQkgKi8KKwkJcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKKwkJcmFkZW9uX2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZGlzYWJsZShyZGV2KTsKKwkJciA9IHJhZGVvbl9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOwogCX0KLQotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQkvKiBTZXR1cCBlcnJhdGEgZmxhZ3MgKi8KLQkJcmFkZW9uX2VycmF0YShyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOwotCQkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCi0JCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7Ci0KLQkJLyogQklPUyovCi0JCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7Ci0JCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7Ci0JCQlpZiAocikgewotCQkJCXJldHVybiByOwotCQkJfQotCQl9IGVsc2UgewotCQkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7Ci0JCQlpZiAocikgewotCQkJCXJldHVybiByOwotCQkJfQotCQl9Ci0JCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KLQkJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCi0JCX0KLQkJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KLQkJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgewotCQkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7Ci0JCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Ci0JCQl9IGVsc2UgewotCQkJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQkJCX0KLQkJfQotCQkvKiBHZXQgY2xvY2sgJiB2cmFtIGluZm9ybWF0aW9uICovCi0JCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKLQkJcmFkZW9uX3ZyYW1faW5mbyhyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KLQkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0KLQkJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KLQkJciA9IHJhZGVvbl9tY19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJLyogRmVuY2UgZHJpdmVyICovCi0JCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIE1lbW9yeSBtYW5hZ2VyICovCi0JCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyID0gcmFkZW9uX2dwdV9nYXJ0X2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCi0JCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLwotCQlyID0gcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQkJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiAxTSByaW5nIGJ1ZmZlciAqLwotCQlyID0gcmFkZW9uX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQlyID0gcmFkZW9uX3diX2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKLQkJciA9IHJhZGVvbl9pYl9wb29sX2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7Ci0JfQotCURSTV9JTkZPKCJyYWRlb246IGtlcm5lbCBtb2Rlc2V0dGluZyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAlpZiAocmFkZW9uX3Rlc3RpbmcpIHsKIAkJcmFkZW9uX3Rlc3RfbW92ZXMocmRldik7CiAJfQpAQCAtNzAzLDMyICs2MTksOCBAQAogewogCURSTV9JTkZPKCJyYWRlb246IGZpbmlzaGluZyBkZXZpY2UuXG4iKTsKIAlyZGV2LT5zaHV0ZG93biA9IHRydWU7Ci0JLyogT3JkZXIgbWF0dGVyIHNvIGJlY2FyZWZ1bGwgaWYgeW91IHJlYXJyYW5nZSBhbnl0aGluZ3MgKi8KLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJcmFkZW9uX2liX3Bvb2xfZmluaShyZGV2KTsKLQkJcmFkZW9uX2NwX2ZpbmkocmRldik7Ci0JCXJhZGVvbl93Yl9maW5pKHJkZXYpOwotCQlyYWRlb25fZ3B1X2dhcnRfZmluaShyZGV2KTsKLQkJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwotCQlyYWRlb25fbWNfZmluaShyZGV2KTsKLSNpZiBfX09TX0hBU19BR1AKLQkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCi0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7Ci0JCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKLQkJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOwotCQlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7Ci0JCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwotCQl9IGVsc2UgewotCQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQkJfQotCQlrZnJlZShyZGV2LT5iaW9zKTsKLQkJcmRldi0+YmlvcyA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2ZpbmkocmRldik7Ci0JfQorCXJhZGVvbl9maW5pKHJkZXYpOworCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJaW91bm1hcChyZGV2LT5ybW1pbyk7CiAJcmRldi0+cm1taW8gPSBOVUxMOwogfQpAQCAtNzY4LDE0ICs2NjAsNyBAQAogCiAJcmFkZW9uX3NhdmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAKLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJcmFkZW9uX2NwX2Rpc2FibGUocmRldik7Ci0JCXJhZGVvbl9nYXJ0X2Rpc2FibGUocmRldik7Ci0JCXJkZXYtPmlycS5zd19pbnQgPSBmYWxzZTsKLQkJcmFkZW9uX2lycV9zZXQocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX3N1c3BlbmQocmRldik7Ci0JfQorCXJhZGVvbl9zdXNwZW5kKHJkZXYpOwogCS8qIGV2aWN0IHJlbWFpbmluZyB2cmFtIG1lbW9yeSAqLwogCXJhZGVvbl9vYmplY3RfZXZpY3RfdnJhbShyZGV2KTsKIApAQCAtNzk0LDcgKzY3OSw2IEBACiBpbnQgcmFkZW9uX3Jlc3VtZV9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IHI7CiAKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CkBAIC04MDQsNDMgKzY4OCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKLQkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7Ci0JCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCQl9Ci0JCS8qIHBvc3QgY2FyZCAqLwotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKLQkJfSBlbHNlIHsKLQkJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQkJfQotCQkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwotCQlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJLyogRW5hYmxlIElSUSAqLwotCQlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKLQkJcmFkZW9uX2lycV9zZXQocmRldik7Ci0JCS8qIEluaXRpYWxpemUgR1BVIE1lbW9yeSBDb250cm9sbGVyICovCi0JCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXIgPSByYWRlb25fZ2FydF9lbmFibGUocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyID0gcmFkZW9uX2NwX2luaXQocmRldiwgcmRldi0+Y3AucmluZ19zaXplKTsKLQkJaWYgKHIpIHsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX3Jlc3VtZShyZGV2KTsKLQl9Ci1vdXQ6CisJcmFkZW9uX3Jlc3VtZShyZGV2KTsKIAlyYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAlmYl9zZXRfc3VzcGVuZChyZGV2LT5mYmRldl9pbmZvLCAwKTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggNWQ4MTQxYi4uYzg1ZGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtMTA2LDUxICsxMDYsNDQgQEAKIAkJbGVnYWN5X2NydGNfbG9hZF9sdXQoY3J0Yyk7CiB9CiAKLS8qKiBTZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgUmFuZFIgKi8KKy8qKiBTZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgZmJjb24gKi8KIHZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAogCQkJICAgICAgdTE2IGJsdWUsIGludCByZWdubykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAKLQlpZiAocmVnbm8gPT0gMCkKLQkJRFJNX0RFQlVHKCJnYW1tYSBzZXQgJWRcbiIsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAlyYWRlb25fY3J0Yy0+bHV0X3JbcmVnbm9dID0gcmVkID4+IDY7CiAJcmFkZW9uX2NydGMtPmx1dF9nW3JlZ25vXSA9IGdyZWVuID4+IDY7CiAJcmFkZW9uX2NydGMtPmx1dF9iW3JlZ25vXSA9IGJsdWUgPj4gNjsKIH0KIAorLyoqIEdldHMgdGhlIGNvbG9yIHJhbXBzIG9uIGJlaGFsZiBvZiBmYmNvbiAqLwordm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKQoreworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKworCSpyZWQgPSByYWRlb25fY3J0Yy0+bHV0X3JbcmVnbm9dIDw8IDY7CisJKmdyZWVuID0gcmFkZW9uX2NydGMtPmx1dF9nW3JlZ25vXSA8PCA2OworCSpibHVlID0gcmFkZW9uX2NydGMtPmx1dF9iW3JlZ25vXSA8PCA2OworfQorCiBzdGF0aWMgdm9pZCByYWRlb25fY3J0Y19nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKIAkJCQkgIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKIAlpZiAoc2l6ZSAhPSAyNTYpIHsKIAkJcmV0dXJuOwogCX0KLQlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQogCi0JaWYgKGNydGMtPmZiLT5kZXB0aCA9PSAxNikgewotCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQkJaWYgKGkgPD0gMzEpIHsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXJhZGVvbl9jcnRjLT5sdXRfcltpICogOCArIGpdID0gcmVkW2ldID4+IDY7Ci0JCQkJCXJhZGVvbl9jcnRjLT5sdXRfYltpICogOCArIGpdID0gYmx1ZVtpXSA+PiA2OwotCQkJCX0KLQkJCX0KLQkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJcmFkZW9uX2NydGMtPmx1dF9nW2kgKiA0ICsgal0gPSBncmVlbltpXSA+PiA2OwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKLQkJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpXSA9IGdyZWVuW2ldID4+IDY7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7Ci0JCX0KKwkvKiB1c2Vyc3BhY2UgcGFsZXR0ZXMgYXJlIGFsd2F5cyBjb3JyZWN0IGFzIGlzICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXJhZGVvbl9jcnRjLT5sdXRfcltpXSA9IHJlZFtpXSA+PiA2OworCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OworCQlyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7CiAJfQotCiAJcmFkZW9uX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiB9CiAKQEAgLTM0MSwyNyArMzM0LDE5IEBACiAKIGludCByYWRlb25fZGRjX2dldF9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7Ci0JCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7Ci0JfSBlbHNlCi0JCWVkaWQgPSByYWRlb25fY29ubmVjdG9yLT5lZGlkOworCX0KIAotCWlmIChlZGlkKSB7Ci0JCS8qIHVwZGF0ZSBkaWdpdGFsIGJpdHMgaGVyZSAqLwotCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQotCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAxOwotCQllbHNlCi0JCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9IDA7Ci0JCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgZWRpZCk7Ci0JCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgZWRpZCk7Ci0JCWtmcmVlKGVkaWQpOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJCXJldHVybiByZXQ7CiAJfQogCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgTlVMTCk7CkBAIC03MjQsNyArNzA5LDExIEBACiAJaWYgKHJldCkgewogCQlyZXR1cm4gcmV0OwogCX0KLQkvKiBhbGxvY2F0ZSBjcnRjcyAtIFRPRE8gc2luZ2xlIGNydGMgKi8KKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwkJbnVtX2NydGMgPSAxOworCisJLyogYWxsb2NhdGUgY3J0Y3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NydGM7IGkrKykgewogCQlyYWRlb25fY3J0Y19pbml0KHJkZXYtPmRkZXYsIGkpOwogCX0KQEAgLTc2NCw3ICs3NTMsNyBAQAogCQkJcmFkZW9uX2NydGMtPnJteF90eXBlID0gcmFkZW9uX2VuY29kZXItPnJteF90eXBlOwogCQkJbWVtY3B5KCZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUsCiAJCQkJJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZSwKLQkJCQlzaXplb2Yoc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSkpOworCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOwogCQkJZmlyc3QgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gcmFkZW9uX2VuY29kZXItPnJteF90eXBlKSB7CkBAIC03ODIsMTAgKzc3MSwxMCBAQAogCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gUk1YX09GRikgewogCQlmaXhlZDIwXzEyIGEsIGI7CiAJCWEuZnVsbCA9IHJmaXhlZF9jb25zdChjcnRjLT5tb2RlLnZkaXNwbGF5KTsKLQkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzKTsKKwkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5oZGlzcGxheSk7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9kaXYoYSwgYik7CiAJCWEuZnVsbCA9IHJmaXhlZF9jb25zdChjcnRjLT5tb2RlLmhkaXNwbGF5KTsKLQkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKTsKKwkJYi5mdWxsID0gcmZpeGVkX2NvbnN0KHJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZS52ZGlzcGxheSk7CiAJCXJhZGVvbl9jcnRjLT5oc2MuZnVsbCA9IHJmaXhlZF9kaXYoYSwgYik7CiAJfSBlbHNlIHsKIAkJcmFkZW9uX2NydGMtPnZzYy5mdWxsID0gcmZpeGVkX2NvbnN0KDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCA1MGZjZTQ5Li43ZjUwZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNjIsOSArNjIsNiBAQAogaW50IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXJfa21zKERSTV9JUlFfQVJHUyk7Ci1pbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwotdm9pZCByYWRlb25fbWFzdGVyX2Rlc3Ryb3lfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlcik7CiBpbnQgcmFkZW9uX2RtYV9pb2N0bF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBpbnQgcmFkZW9uX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CkBAIC0yNjAsOCArMjU3LDYgQEAKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gcmFkZW9uX2dldF92YmxhbmtfY291bnRlcl9rbXMsCiAJLmVuYWJsZV92YmxhbmsgPSByYWRlb25fZW5hYmxlX3ZibGFua19rbXMsCiAJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rX2ttcywKLQkubWFzdGVyX2NyZWF0ZSA9IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcywKLQkubWFzdGVyX2Rlc3Ryb3kgPSByYWRlb25fbWFzdGVyX2Rlc3Ryb3lfa21zLAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCS5kZWJ1Z2ZzX2luaXQgPSByYWRlb25fZGVidWdmc19pbml0LAogCS5kZWJ1Z2ZzX2NsZWFudXAgPSByYWRlb25fZGVidWdmc19jbGVhbnVwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggNjIxNjQ2Ny4uZDQyYmM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC0zMSw2ICszMSwxMCBAQAogCiBleHRlcm4gaW50IGF0b21fZGVidWc7CiAKKy8qIGV2aWwgYnV0IGluY2x1ZGluZyBhdG9tYmlvcy5oIGlzIG11Y2ggd29yc2UgKi8KK2Jvb2wgcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpbmRleCwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisKIHVpbnQzMl90CiByYWRlb25fZ2V0X2VuY29kZXJfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwgdWludDhfdCBkYWMpCiB7CkBAIC0xNjcsNDkgKzE3MSwxNyBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKIAotCWlmIChtb2RlLT5oZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIHx8Ci0JICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMpIHsKLQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCX0gZWxzZSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5odG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT52c3luY193aWR0aDsKLQkJCS8qIHVwZGF0ZSBjcnRjIHZhbHVlcyAqLwotCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwotCQkJLyogYWRqdXN0IGNydGMgdmFsdWVzICovCi0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT52c3luY193aWR0aDsKKwlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgbW9kZS0+dmRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpIHsKKwkJaW50IG1vZGVfaWQgPSBhZGp1c3RlZF9tb2RlLT5iYXNlLmlkOworCQkqYWRqdXN0ZWRfbW9kZSA9ICpuYXRpdmVfbW9kZTsKKwkJaWYgKCFBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OworCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKIAkJfQotCQlhZGp1c3RlZF9tb2RlLT5mbGFncyA9IG5hdGl2ZV9tb2RlLT5mbGFnczsKLQkJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPSBuYXRpdmVfbW9kZS0+ZG90Y2xvY2s7CisJCWFkanVzdGVkX21vZGUtPmJhc2UuaWQgPSBtb2RlX2lkOwogCX0KIH0KIApAQCAtMjE5LDcgKzE5MSwxMSBAQAogCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlICE9IFJNWF9PRkYpCkBAIC0yMzAsNiArMjA2LDE4IEBACiAJICAgICYmIChtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IDwgKG1vZGUtPmNydGNfdmRpc3BsYXkgKyAyKSkpCiAJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMjsKIAorCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJaWYgKHR2X2RhYykgeworCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJCQkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkKKwkJCQlyYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhyZGV2LCAwLCBhZGp1c3RlZF9tb2RlKTsKKwkJCWVsc2UKKwkJCQlyYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhyZGV2LCAxLCBhZGp1c3RlZF9tb2RlKTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCkBAIC00NjEsNyArNDQ5LDcgQEAKIAkJY2FzZSAxOgogCQkJYXJncy52MS51Y01pc2MgPSAwOwogCQkJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJCWFyZ3MudjEudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19IRE1JX1RZUEU7CiAJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKQEAgLTQ4Niw3ICs0NzQsNyBAQAogCQkJCWlmIChkaWctPmNvaGVyZW50X21vZGUpCiAJCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19DT0hFUkVOVDsKIAkJCX0KLQkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19IRE1JX1RZUEU7CiAJCQlhcmdzLnYyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWFyZ3MudjIudWNUcnVuY2F0ZSA9IDA7CkBAIC01NDQsNyArNTMyLDcgQEAKIAlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOiAvKiBIRE1JLUIgaXMgYmFzaWNhbGx5IERMLURWSTsgYW5hbG9nIHdvcmtzIGZpbmUgKi8KLQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKChzdHJ1Y3QgZWRpZCAqKWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikpCisJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlIGlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NTQsNyArNTQyLDcgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWRlZmF1bHQ6Ci0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTU2Niw3ICs1NTQsNyBAQAogCQkvKmlmIChyYWRlb25fb3V0cHV0LT5Nb25UeXBlID09IE1UX0RQKQogCQkgIHJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EUDsKIAkJICBlbHNlKi8KLQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKChzdHJ1Y3QgZWRpZCAqKWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikpCisJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNzM0LDE0ICs3MjIsMTcgQEAKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3Jldik7CiAKIAlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOwotCisJaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKSB7CisJCWFyZ3MudjEudXNJbml0SW5mbyA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQ7CisJfSBlbHNlIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOworCQllbHNlCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKKwl9CiAJaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiAyKSAvIDEwMCk7Ci0JCQlhcmdzLnYyLmFjQ29uZmlnLmZEdWFsTGlua0Nvbm5lY3RvciA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlhcmdzLnYyLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgKiAxMCAqIDQpIC8gMTAwKTsKLQkJfQorCQlpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQorCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMikgLyAxMCk7CiAJCWlmIChkaWctPmRpZ19ibG9jaykKIAkJCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gMTsKIApAQCAtNzY2LDcgKzc1Nyw2IEBACiAJCX0KIAl9IGVsc2UgewogCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX1BQTEw7Ci0JCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jaykgLyAxMCk7CiAKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKQEAgLTg3NCwxNiArODY0LDkgQEAKIAlESVNQTEFZX0RFVklDRV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIGFyZ3M7CiAJaW50IGluZGV4ID0gMDsKIAlib29sIGlzX2RpZyA9IGZhbHNlOwotCWludCBkZXZpY2VzOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JLyogb24gRFBNUyBvZmYgd2UgaGF2ZSBubyBpZGVhIGlmIGFjdGl2ZSBkZXZpY2UgaXMgbWVhbmluZ2Z1bCAqLwotCWlmIChtb2RlICE9IERSTV9NT0RFX0RQTVNfT04gJiYgIXJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlKQotCQlkZXZpY2VzID0gcmFkZW9uX2VuY29kZXItPmRldmljZXM7Ci0JZWxzZQotCQlkZXZpY2VzID0gcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2U7Ci0KIAlEUk1fREVCVUcoImVuY29kZXIgZHBtcyAlZCB0byBtb2RlICVkLCBkZXZpY2VzICUwOHgsIGFjdGl2ZV9kZXZpY2VzICUwOHhcbiIsCiAJCSAgcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQsIG1vZGUsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlKTsKQEAgLTkxNCwxOCArODk3LDE4IEBACiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMToKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzFPdXRwdXRDb250cm9sKTsKIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMyOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6Ci0JCWlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFRWMU91dHB1dENvbnRyb2wpOwotCQllbHNlIGlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgQ1YxT3V0cHV0Q29udHJvbCk7CiAJCWVsc2UKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgREFDMk91dHB1dENvbnRyb2wpOwpAQCAtMTEwNCw4ICsxMDg3LDExIEBACiAJfQogCiAJLyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikgJiYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBBVklWT19EMU1PREVfSU5URVJMRUFWRV9FTik7CisJaWYgKCEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCVdSRUczMihBVklWT19EMU1PREVfREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNTMsNiArMTEzOSw3IEBACiAKIAkJLyogc2V0dXAgYW5kIGVuYWJsZSB0aGUgZW5jb2RlciBhbmQgdHJhbnNtaXR0ZXIgKi8KIAkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkFCTEUpOworCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCk7CiAJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9TRVRVUCk7CiAJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUpOwogCQlicmVhazsKQEAgLTEyNjgsOCArMTI1NSw2IEBACiB7CiAJcmFkZW9uX2F0b21fb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2F0b21fZW5jb2Rlcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fYXRvbV9lbmNvZGVyX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xMzQ1LDYgKzEzMzAsNyBAQAogdm9pZAogcmFkZW9uX2FkZF9hdG9tX2VuY29kZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgZW5jb2Rlcl9pZCwgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSkKIHsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXI7CiAKQEAgLTEzNjQsNyArMTM1MCwxMCBAQAogCQlyZXR1cm47CiAKIAllbmNvZGVyID0gJnJhZGVvbl9lbmNvZGVyLT5iYXNlOwotCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgzOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDE7CisJZWxzZQorCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKIAllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOwogCiAJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDk0NGU0ZmEuLmIzOGM0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtNTUsNiArNTUsNyBAQAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKIC8qKgpAQCAtMTIzLDExICsxMjQsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHJhZGVvbl9mYl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IHJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldCwKKwkuZ2FtbWFfZ2V0ID0gcmFkZW9uX2NydGNfZmJfZ2FtbWFfZ2V0LAogfTsKIAogaW50IHJhZGVvbmZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCwKIAkJICAgIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkgICAgdWludDMyX3Qgc3VyZmFjZV9kZXB0aCwgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xNDUsMTMgKzE0OCwxOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWJvb2wgZmJfdGlsZWQgPSBmYWxzZTsgLyogdXNlZnVsIGZvciB0ZXN0aW5nICovCiAJdTMyIHRpbGluZ19mbGFncyA9IDA7CisJaW50IGNydGNfY291bnQ7CiAKIAltb2RlX2NtZC53aWR0aCA9IHN1cmZhY2Vfd2lkdGg7CiAJbW9kZV9jbWQuaGVpZ2h0ID0gc3VyZmFjZV9oZWlnaHQ7Ci0JbW9kZV9jbWQuYnBwID0gMzI7CisKKwkvKiBhdml2byBjYW4ndCBzY2Fub3V0IHJlYWwgMjRicHAgKi8KKwlpZiAoKHN1cmZhY2VfYnBwID09IDI0KSAmJiBBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQlzdXJmYWNlX2JwcCA9IDMyOworCisJbW9kZV9jbWQuYnBwID0gc3VyZmFjZV9icHA7CiAJLyogbmVlZCB0byBhbGlnbiBwaXRjaCB3aXRoIGNydGMgbGltaXRzICovCiAJbW9kZV9jbWQucGl0Y2ggPSByYWRlb25fYWxpZ25fcGl0Y2gocmRldiwgbW9kZV9jbWQud2lkdGgsIG1vZGVfY21kLmJwcCwgZmJfdGlsZWQpICogKChtb2RlX2NtZC5icHAgKyAxKSAvIDgpOwotCW1vZGVfY21kLmRlcHRoID0gMjQ7CisJbW9kZV9jbWQuZGVwdGggPSBzdXJmYWNlX2RlcHRoOwogCiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCWFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIFBBR0VfU0laRSk7CkBAIC0yMTYsNyArMjI1LDExIEBACiAJcmZiZGV2ID0gaW5mby0+cGFyOwogCXJmYmRldi0+aGVscGVyLmZ1bmNzID0gJnJhZGVvbl9mYl9oZWxwZXJfZnVuY3M7CiAJcmZiZGV2LT5oZWxwZXIuZGV2ID0gZGV2OwotCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgMiwKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWNydGNfY291bnQgPSAxOworCWVsc2UKKwkJY3J0Y19jb3VudCA9IDI7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoJnJmYmRldi0+aGVscGVyLCBjcnRjX2NvdW50LAogCQkJCQkgICAgUkFERU9ORkJfQ09OTl9MSU1JVCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWY7CkBAIC0yMzMsNyArMjQ2LDcgQEAKIAogCXN0cmNweShpbmZvLT5maXguaWQsICJyYWRlb25kcm1mYiIpOwogCi0JZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gpOworCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAlpbmZvLT5mYm9wcyA9ICZyYWRlb25mYl9vcHM7CkBAIC0yOTAsMTMgKzMwMywyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbjsKK2ludCByYWRlb25fcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zKQoreworCWNoYXIgKnRoaXNfb3B0OworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRoaXNfb3B0KQorCQkJY29udGludWU7CisJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQ7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgcmFkZW9uZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0OwotCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgJnJhZGVvbmZiX2NyZWF0ZSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCAzMiwgJnJhZGVvbmZiX2NyZWF0ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHJhZGVvbmZiX3Byb2JlKTsKIAogaW50IHJhZGVvbmZiX3JlbW92ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCBhOTMxYWYwLi5hNjhkNzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0xNDAsMTUgKzE0MCwxNSBAQAogCQlXQVJOKDEsICJ0cnlpbmcgdG8gdW5iaW5kIG1lbW9yeSB0byB1bml0aWFsaXplZCBHQVJUICFcbiIpOwogCQlyZXR1cm47CiAJfQotCXQgPSBvZmZzZXQgLyA0MDk2OwotCXAgPSB0IC8gKFBBR0VfU0laRSAvIDQwOTYpOworCXQgPSBvZmZzZXQgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKKwlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewogCQlpZiAocmRldi0+Z2FydC5wYWdlc1twXSkgewogCQkJcGNpX3VubWFwX3BhZ2UocmRldi0+cGRldiwgcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdLAogCQkJCSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzW3BdID0gTlVMTDsKIAkJCXJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSA9IDA7Ci0JCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIDQwOTYpOyBqKyssIHQrKykgeworCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7IGorKywgdCsrKSB7CiAJCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgMCk7CiAJCQl9CiAJCX0KQEAgLTE2OSw4ICsxNjksOCBAQAogCQlEUk1fRVJST1IoInRyeWluZyB0byBiaW5kIG1lbW9yeSB0byB1bml0aWFsaXplZCBHQVJUICFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdCA9IG9mZnNldCAvIDQwOTY7Ci0JcCA9IHQgLyAoUEFHRV9TSVpFIC8gNDA5Nik7CisJdCA9IG9mZnNldCAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOworCXAgPSB0IC8gKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwpAQCAtMTg1LDkgKzE4NSw5IEBACiAJCX0KIAkJcmRldi0+Z2FydC5wYWdlc1twXSA9IHBhZ2VsaXN0W2ldOwogCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF07Ci0JCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gNDA5Nik7IGorKywgdCsrKSB7CisJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewogCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9iYXNlKTsKLQkJCXBhZ2VfYmFzZSArPSA0MDk2OworCQkJcGFnZV9iYXNlICs9IFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCQl9CiAJfQogCW1iKCk7CkBAIC0yMDAsMTQgKzIwMCwxNCBAQAogCWlmIChyZGV2LT5nYXJ0LnBhZ2VzKSB7CiAJCXJldHVybiAwOwogCX0KLQkvKiBXZSBuZWVkIFBBR0VfU0laRSA+PSA0MDk2ICovCi0JaWYgKFBBR0VfU0laRSA8IDQwOTYpIHsKKwkvKiBXZSBuZWVkIFBBR0VfU0laRSA+PSBSQURFT05fR1BVX1BBR0VfU0laRSAqLworCWlmIChQQUdFX1NJWkUgPCBSQURFT05fR1BVX1BBR0VfU0laRSkgewogCQlEUk1fRVJST1IoIlBhZ2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4gR1BVIHBhZ2Ugc2l6ZSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogQ29tcHV0ZSB0YWJsZSBzaXplICovCiAJcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzID0gcmRldi0+bWMuZ3R0X3NpemUgLyBQQUdFX1NJWkU7Ci0JcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzID0gcmRldi0+bWMuZ3R0X3NpemUgLyA0MDk2OworCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CiAJRFJNX0lORk8oIkdBUlQ6IG51bSBjcHUgcGFnZXMgJXUsIG51bSBncHUgcGFnZXMgJXVcbiIsCiAJCSByZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXMsIHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyk7CiAJLyogQWxsb2NhdGUgcGFnZXMgdGFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwppbmRleCAxODQxMTQ1Li5hMGZlNjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCkBAIC04MywxMSArODMsMjIgQEAKIGludCByYWRlb25faXJxX2ttc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByID0gMDsKKwlpbnQgbnVtX2NydGMgPSAyOwogCi0JciA9IGRybV92YmxhbmtfaW5pdChyZGV2LT5kZGV2LCAyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCW51bV9jcnRjID0gMTsKKworCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgbnVtX2NydGMpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KKwkvKiBlbmFibGUgbXNpICovCisJcmRldi0+bXNpX2VuYWJsZWQgPSAwOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM4MCkgeworCQlpbnQgcmV0ID0gcGNpX2VuYWJsZV9tc2kocmRldi0+cGRldik7CisJCWlmICghcmV0KQorCQkJcmRldi0+bXNpX2VuYWJsZWQgPSAxOworCX0KIAlkcm1faXJxX2luc3RhbGwocmRldi0+ZGRldik7CiAJcmRldi0+aXJxLmluc3RhbGxlZCA9IHRydWU7CiAJRFJNX0lORk8oInJhZGVvbjogaXJxIGluaXRpYWxpemVkLlxuIik7CkBAIC05OSw1ICsxMTAsNyBAQAogCWlmIChyZGV2LT5pcnEuaW5zdGFsbGVkKSB7CiAJCXJkZXYtPmlycS5pbnN0YWxsZWQgPSBmYWxzZTsKIAkJZHJtX2lycV91bmluc3RhbGwocmRldi0+ZGRldik7CisJCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkKKwkJCXBjaV9kaXNhYmxlX21zaShyZGV2LT5wZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCmluZGV4IDcwOWJkODkuLmJhMTI4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC0yMDEsNTUgKzIwMSw2IEBACiAKIAogLyoKLSAqIEZvciBtdWx0aXBsZSBtYXN0ZXIgKGxpa2UgbXVsdGlwbGUgWCkuCi0gKi8KLXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlIHsKLQlkcm1fbG9jYWxfbWFwX3QgKnNhcmVhOwotCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdjsKLX07Ci0KLWludCByYWRlb25fbWFzdGVyX2NyZWF0ZV9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKLXsKLQlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7Ci0JdW5zaWduZWQgbG9uZyBzYXJlYXBhZ2U7Ci0JaW50IHJldDsKLQotCW1hc3Rlcl9wcml2ID0ga3phbGxvYyhzaXplb2YoKm1hc3Rlcl9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1hc3Rlcl9wcml2ID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCS8qIHByZWJ1aWxkIHRoZSBTQVJFQSAqLwotCXNhcmVhcGFnZSA9IG1heF90KHVuc2lnbmVkIGxvbmcsIFNBUkVBX01BWCwgUEFHRV9TSVpFKTsKLQlyZXQgPSBkcm1fYWRkbWFwKGRldiwgMCwgc2FyZWFwYWdlLCBfRFJNX1NITSwKLQkJCSBfRFJNX0NPTlRBSU5TX0xPQ0ssCi0JCQkgJm1hc3Rlcl9wcml2LT5zYXJlYSk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIlNBUkVBIHNldHVwIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhLT5oYW5kbGUgKyBzaXplb2Yoc3RydWN0IGRybV9zYXJlYSk7Ci0JbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPSAwOwotCW1hc3Rlci0+ZHJpdmVyX3ByaXYgPSBtYXN0ZXJfcHJpdjsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByYWRlb25fbWFzdGVyX2Rlc3Ryb3lfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKLXsKLQlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OwotCi0JaWYgKG1hc3Rlcl9wcml2ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAobWFzdGVyX3ByaXYtPnNhcmVhKSB7Ci0JCWRybV9ybW1hcF9sb2NrZWQoZGV2LCBtYXN0ZXJfcHJpdi0+c2FyZWEpOwotCX0KLQlrZnJlZShtYXN0ZXJfcHJpdik7Ci0JbWFzdGVyLT5kcml2ZXJfcHJpdiA9IE5VTEw7Ci19Ci0KLQotLyoKICAqIElPQ1RMLgogICovCiBpbnQgcmFkZW9uX2RtYV9pb2N0bF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IDJiOTk3YTEuLjhkMGI3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNDgsNyArNDgsNyBAQAogCXUzMiBmcF9ob3J6X3N0cmV0Y2gsIGZwX3ZlcnRfc3RyZXRjaCwgZnBfaG9yel92ZXJ0X2FjdGl2ZTsKIAl1MzIgZnBfaF9zeW5jX3N0cnRfd2lkLCBmcF9jcnRjX2hfdG90YWxfZGlzcDsKIAl1MzIgZnBfdl9zeW5jX3N0cnRfd2lkLCBmcF9jcnRjX3ZfdG90YWxfZGlzcDsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZTsKIAogCWZwX3ZlcnRfc3RyZXRjaCA9IFJSRUczMihSQURFT05fRlBfVkVSVF9TVFJFVENIKSAmCiAJCShSQURFT05fVkVSVF9TVFJFVENIX1JFU0VSVkVEIHwKQEAgLTk1LDE5ICs5NSwxOSBAQAogCiAJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9IDA7CiAKLQlpZiAobmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgPT0gMCB8fAotCSAgICBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyA9PSAwKSB7CisJaWYgKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSA9PSAwIHx8CisJICAgIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSA9PSAwKSB7CiAJCWhzY2FsZSA9IGZhbHNlOwogCQl2c2NhbGUgPSBmYWxzZTsKIAl9IGVsc2UgewotCQlpZiAoeHJlcyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzKQotCQkJeHJlcyA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKQotCQkJeXJlcyA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzOworCQlpZiAoeHJlcyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKKwkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+aGRpc3BsYXk7CisJCWlmICh5cmVzID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQorCQkJeXJlcyA9IG5hdGl2ZV9tb2RlLT52ZGlzcGxheTsKIAotCQlpZiAoeHJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKKwkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5KQogCQkJaHNjYWxlID0gZmFsc2U7Ci0JCWlmICh5cmVzID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKQorCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpCiAJCQl2c2NhbGUgPSBmYWxzZTsKIAl9CiAKQEAgLTExOSwxMSArMTE5LDExIEBACiAJCWVsc2UgewogCQkJaW5jID0gKGZwX2hvcnpfc3RyZXRjaCAmIFJBREVPTl9IT1JaX0FVVE9fUkFUSU9fSU5DKSA/IDEgOiAwOwogCQkJc2NhbGUgPSAoKHhyZXMgKyBpbmMpICogUkFERU9OX0hPUlpfU1RSRVRDSF9SQVRJT19NQVgpCi0JCQkJLyBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIDE7CisJCQkJLyBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgKyAxOwogCQkJZnBfaG9yel9zdHJldGNoIHw9ICgoKHNjYWxlKSAmIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFTSykgfAogCQkJCQlSQURFT05fSE9SWl9TVFJFVENIX0JMRU5EIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUgfAotCQkJCQkoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzLzgtMSkgPDwgMTYpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+aGRpc3BsYXkvOC0xKSA8PCAxNikpOwogCQl9CiAKIAkJaWYgKCF2c2NhbGUpCkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh5cmVzICsgaW5jKSAqIFJBREVPTl9WRVJUX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPnZkaXNwbGF5ICsgMTsKIAkJCWZwX3ZlcnRfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9FTkFCTEUgfAogCQkJCQlSQURFT05fVkVSVF9TVFJFVENIX0JMRU5EIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcy0xKSA8PCAxMikpOworCQkJCQkoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheS0xKSA8PCAxMikpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0NFTlRFUjoKQEAgLTE3NSw4ICsxNzUsOCBAQAogCQkJCQkJPyBSQURFT05fQ1JUQ19WX1NZTkNfUE9MCiAJCQkJCQk6IDApKSk7CiAKLQkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSAmIDB4ZmZmKSB8Ci0JCQkJKCgobmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgLyA4KSAmIDB4MWZmKSA8PCAxNikpOworCQlmcF9ob3J6X3ZlcnRfYWN0aXZlID0gKCgobmF0aXZlX21vZGUtPnZkaXNwbGF5KSAmIDB4ZmZmKSB8CisJCQkJKCgobmF0aXZlX21vZGUtPmhkaXNwbGF5IC8gOCkgJiAweDFmZikgPDwgMTYpKTsKIAkJYnJlYWs7CiAJY2FzZSBSTVhfT0ZGOgogCWRlZmF1bHQ6CkBAIC01MzIsNiArNTMyLDEwIEBACiAJCXJhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihvbGRfZmIpOwogCQlyYWRlb25fZ2VtX29iamVjdF91bnBpbihyYWRlb25fZmItPm9iaik7CiAJfQorCisJLyogQnl0ZXMgcGVyIHBpeGVsIG1heSBoYXZlIGNoYW5nZWQgKi8KKwlyYWRlb25fYmFuZHdpZHRoX3VwZGF0ZShyZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC02NjQsNiArNjY4LDkgQEAKIAogCQlXUkVHMzIoUkFERU9OX0RJU1AyX01FUkdFX0NOVEwsIGRpc3AyX21lcmdlX2NudGwpOwogCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLCBjcnRjMl9nZW5fY250bCk7CisKKwkJV1JFRzMyKFJBREVPTl9GUF9IMl9TWU5DX1NUUlRfV0lELCBjcnRjX2hfc3luY19zdHJ0X3dpZCk7CisJCVdSRUczMihSQURFT05fRlBfVjJfU1lOQ19TVFJUX1dJRCwgY3J0Y192X3N5bmNfc3RydF93aWQpOwogCX0gZWxzZSB7CiAJCXVpbnQzMl90IGNydGNfZ2VuX2NudGw7CiAJCXVpbnQzMl90IGNydGNfZXh0X2NudGw7CkBAIC0xMDE1LDE0ICsxMDIyLDExIEBACiAJCQkJIGludCB4LCBpbnQgeSwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCS8qIFRPRE8gVFYgKi8KIAlyYWRlb25fY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCXJhZGVvbl9zZXRfY3J0Y190aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJcmFkZW9uX3NldF9wbGwoY3J0YywgYWRqdXN0ZWRfbW9kZSk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKIAkJcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoY3J0YywgbW9kZSwgYWRqdXN0ZWRfbW9kZSk7CiAJfSBlbHNlIHsKQEAgLTEwNTMsNiArMTA1Nyw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSByYWRlb25fY3J0Y19zZXRfYmFzZSwKIAkucHJlcGFyZSA9IHJhZGVvbl9jcnRjX3ByZXBhcmUsCiAJLmNvbW1pdCA9IHJhZGVvbl9jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSByYWRlb25fY3J0Y19sb2FkX2x1dCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCBiMTU0N2Y3Li4wMDM4MjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtMTA3LDggKzEwNyw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X2x2ZHNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0KLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xOTIsNiArMTkwLDggQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAKKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKQpAQCAtMjE4LDcgKzIxOCw4IEBACiAJCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC0yNzIsNyArMjczLDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTQ2OCw3ICs0NjgsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV90bWRzX2ludF9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV90bWRzX2ludF9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNTQzLDYgKzU0MiwxNCBAQAogCiAgICAgZnBfZ2VuX2NudGwgJj0gfihSQURFT05fRlBfRlBPTiB8IFJBREVPTl9GUF9UTURTX0VOKTsKIAorICAgIGZwX2dlbl9jbnRsICY9IH4oUkFERU9OX0ZQX1JNWF9IVlNZTkNfQ09OVFJPTF9FTiB8CisJCSAgICAgUkFERU9OX0ZQX0RGUF9TWU5DX1NFTCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVF9TWU5DX1NFTCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVENfTE9DS184RE9UIHwKKwkJICAgICBSQURFT05fRlBfVVNFX1NIQURPV19FTiB8CisJCSAgICAgUkFERU9OX0ZQX0NSVENfVVNFX1NIQURPV19WRU5EIHwKKwkJICAgICBSQURFT05fRlBfQ1JUX1NZTkNfQUxUKTsKKwogICAgIGlmICgxKSAvKiAgRklYTUUgcmdiQml0cyA9PSA4ICovCiAJICAgIGZwX2dlbl9jbnRsIHw9IFJBREVPTl9GUF9QQU5FTF9GT1JNQVQ7ICAvKiAyNCBiaXQgZm9ybWF0ICovCiAgICAgZWxzZQpAQCAtNTU2LDcgKzU2Myw3IEBACiAJCSAgICBlbHNlCiAJCQkgICAgZnBfZ2VuX2NudGwgfD0gUjIwMF9GUF9TT1VSQ0VfU0VMX0NSVEMxOwogCSAgICB9IGVsc2UKLQkJICAgIGZwX2dlbl9jbnRsIHw9IFJBREVPTl9GUF9TRUxfQ1JUQzE7CisJCSAgICBmcF9nZW5fY250bCAmPSB+UkFERU9OX0ZQX1NFTF9DUlRDMjsKICAgICB9IGVsc2UgewogCSAgICBpZiAoQVNJQ19JU19SMzAwKHJkZXYpIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApIHsKIAkJICAgIGZwX2dlbl9jbnRsICY9IH5SMjAwX0ZQX1NPVVJDRV9TRUxfTUFTSzsKQEAgLTU5Myw3ICs2MDAsOCBAQAogCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC02MzYsNyArNjQ0LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19leHRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19leHRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTczNSw3ICs3NDIsOCBAQAogCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKLQorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTgzOSw3ICs4NDcsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV90dl9kYWNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdHZfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC04ODEsNyArODg4LDcgQEAKIAkJCQkJUjQyMF9UVl9EQUNfREFDQURKX01BU0sgfAogCQkJCQlSNDIwX1RWX0RBQ19SREFDUEQgfAogCQkJCQlSNDIwX1RWX0RBQ19HREFDUEQgfAotCQkJCQlSNDIwX1RWX0RBQ19HREFDUEQgfAorCQkJCQlSNDIwX1RWX0RBQ19CREFDUEQgfAogCQkJCQlSNDIwX1RWX0RBQ19UVkVOQUJMRSk7CiAJCX0gZWxzZSB7CiAJCQl0dl9kYWNfY250bCAmPSB+KFJBREVPTl9UVl9EQUNfU1REX01BU0sgfApAQCAtODg5LDcgKzg5Niw3IEBACiAJCQkJCVJBREVPTl9UVl9EQUNfREFDQURKX01BU0sgfAogCQkJCQlSQURFT05fVFZfREFDX1JEQUNQRCB8CiAJCQkJCVJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKLQkJCQkJUkFERU9OX1RWX0RBQ19HREFDUEQpOworCQkJCQlSQURFT05fVFZfREFDX0JEQUNQRCk7CiAJCX0KIAogCQkvKiAgRklYTUUgVFYgKi8KQEAgLTEzMTgsNyArMTMyNSwxMCBAQAogCQlyZXR1cm47CiAKIAllbmNvZGVyID0gJnJhZGVvbl9lbmNvZGVyLT5iYXNlOwotCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgzOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDE7CisJZWxzZQorCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKIAllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOwogCiAJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCA1NzBhNTg3Li5hY2U3MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0xNzIsNiArMTcyLDcgQEAKIAogc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gewogCXN0cnVjdCBhdG9tX2NvbnRleHQgKmF0b21fY29udGV4dDsKKwlzdHJ1Y3QgY2FyZF9pbmZvICphdG9tX2NhcmRfaW5mbzsKIAllbnVtIHJhZGVvbl9jb25uZWN0b3JfdGFibGUgY29ubmVjdG9yX3RhYmxlOwogCWJvb2wgbW9kZV9jb25maWdfaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpjcnRjc1syXTsKQEAgLTE4NiwxNyArMTg3LDYgQEAKIAogfTsKIAotc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSB7Ci0JLyogcHJlZmVycmVkIG1vZGUgKi8KLQl1aW50MzJfdCBwYW5lbF94cmVzLCBwYW5lbF95cmVzOwotCXVpbnQzMl90IGhvdmVycGx1cywgaHN5bmNfd2lkdGg7Ci0JdWludDMyX3QgaGJsYW5rOwotCXVpbnQzMl90IHZvdmVycGx1cywgdnN5bmNfd2lkdGg7Ci0JdWludDMyX3QgdmJsYW5rOwotCXVpbnQzMl90IGRvdGNsb2NrOwotCXVpbnQzMl90IGZsYWdzOwotfTsKLQogI2RlZmluZSBNQVhfSF9DT0RFX1RJTUlOR19MRU4gMzIKICNkZWZpbmUgTUFYX1ZfQ09ERV9USU1JTkdfTEVOIDMyCiAKQEAgLTIyOCw3ICsyMTgsNyBAQAogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwogCWZpeGVkMjBfMTIgdnNjOwogCWZpeGVkMjBfMTIgaHNjOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgewpAQCAtMjQ4LDcgKzIzOCw3IEBACiAJYm9vbCAgICAgdXNlX2Jpb3NfZGl2aWRlcnM7CiAJdWludDMyX3QgbHZkc19nZW5fY250bDsKIAkvKiBwYW5lbCBtb2RlICovCi0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgewpAQCAtMjcxLDYgKzI2MSwxNiBAQAogCXN0cnVjdCByYWRlb25fdG1kc19wbGwgdG1kc19wbGxbNF07CiB9OwogCisvKiBzcHJlYWQgc3BlY3RydW0gKi8KK3N0cnVjdCByYWRlb25fYXRvbV9zcyB7CisJdWludDE2X3QgcGVyY2VudGFnZTsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCBzdGVwOworCXVpbnQ4X3QgZGVsYXk7CisJdWludDhfdCByYW5nZTsKKwl1aW50OF90IHJlZmRpdjsKK307CisKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyB7CiAJLyogYXRvbSBkaWcgKi8KIAlib29sIGNvaGVyZW50X21vZGU7CkBAIC0yNzgsOCArMjc4LDkgQEAKIAkvKiBhdG9tIGx2ZHMgKi8KIAl1aW50MzJfdCBsdmRzX21pc2M7CiAJdWludDE2X3QgcGFuZWxfcHdyX2RlbGF5OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3M7CiAJLyogcGFuZWwgbW9kZSAqLwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgewpAQCAtMjk0LDcgKzI5NSw3IEBACiAJdWludDMyX3QgZmxhZ3M7CiAJdWludDMyX3QgcGl4ZWxfY2xvY2s7CiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIAl2b2lkICplbmNfcHJpdjsKIH07CiAKQEAgLTMwOCwxMiArMzA5LDE1IEBACiAJdWludDMyX3QgY29ubmVjdG9yX2lkOwogCXVpbnQzMl90IGRldmljZXM7CiAJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqZGRjX2J1czsKKwkvKiBzb21lIHN5c3RlbXMgaGF2ZSBhIGFuIGhkbWkgYW5kIHZnYSBwb3J0IHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKi8KKwlib29sIHNoYXJlZF9kZGM7CiAJYm9vbCB1c2VfZGlnaXRhbDsKIAkvKiB3ZSBuZWVkIHRvIG1pbmQgdGhlIEVESUQgYmV0d2VlbiBkZXRlY3QKIAkgICBhbmQgZ2V0IG1vZGVzIGR1ZSB0byBhbmFsb2cvZGlnaXRhbC90dmVuY29kZXIgKi8KIAlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAl2b2lkICpjb25fcHJpdjsKIAlib29sIGRhY19sb2FkX2RldGVjdDsKKwl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkOwogfTsKIAogc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciB7CkBAIC00MDcsNiArNDExLDggQEAKIHJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3Moc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIG9uKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCQkgICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pOworZXh0ZXJuIHZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkJICAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpyYWRlb25fZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCQkgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKm1vZGVfY21kLAogCQkJCQkJICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IDczYWY0NjMuLjFmMDU2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC00MDAsMTEgKzQwMCw5IEBACiBpbnQgcmFkZW9uX29iamVjdF9saXN0X3Jlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAJaW50IHI7CiAKLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KXsKIAkJaWYgKCFsb2JqLT5yb2JqLT5waW5fY291bnQpIHsKIAkJCXIgPSByYWRlb25fb2JqZWN0X3Jlc2VydmUobG9iai0+cm9iaiwgdHJ1ZSk7CiAJCQlpZiAodW5saWtlbHkociAhPSAwKSkgewpAQCAtNDIwLDEzICs0MTgsMTAgQEAKIHZvaWQgcmFkZW9uX29iamVjdF9saXN0X3VucmVzZXJ2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKIAkJaWYgKCFsb2JqLT5yb2JqLT5waW5fY291bnQpIHsKIAkJCXJhZGVvbl9vYmplY3RfdW5yZXNlcnZlKGxvYmotPnJvYmopOwotCQl9IGVsc2UgewogCQl9CiAJfQogfQpAQCAtNDM2LDcgKzQzMSw2IEBACiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iajsKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpvbGRfZmVuY2UgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAJaW50IHI7CiAKIAlyID0gcmFkZW9uX29iamVjdF9saXN0X3Jlc2VydmUoaGVhZCk7CkBAIC00NDQsOCArNDM4LDcgQEAKIAkJcmFkZW9uX29iamVjdF9saXN0X3VucmVzZXJ2ZShoZWFkKTsKIAkJcmV0dXJuIHI7CiAJfQotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKIAkJcm9iaiA9IGxvYmotPnJvYmo7CiAJCWlmICghcm9iai0+cGluX2NvdW50KSB7CiAJCQlpZiAobG9iai0+d2RvbWFpbikgewpAQCAtNDgyLDEwICs0NzUsOCBAQAogewogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCi0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCkgewogCQlvbGRfZmVuY2UgPSAoc3RydWN0IHJhZGVvbl9mZW5jZSAqKWxvYmotPnJvYmotPnRvYmouc3luY19vYmo7CiAJCWxvYmotPnJvYmotPnRvYmouc3luY19vYmogPSBOVUxMOwogCQlpZiAob2xkX2ZlbmNlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjE0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICovCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCitpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKK2ludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocmFkZW9uX2RlYnVnZnNfcG1faW5pdChyZGV2KSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIENQICFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRGVidWdmcyBpbmZvCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworc3RhdGljIGludCByYWRlb25fZGVidWdmc19wbV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNlcV9wcmludGYobSwgImVuZ2luZSBjbG9jazogJXUwIEh6XG4iLCByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KSk7CisJc2VxX3ByaW50ZihtLCAibWVtb3J5IGNsb2NrOiAldTAgSHpcbiIsIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX3BtX2luZm9fbGlzdFtdID0geworCXsicmFkZW9uX3BtX2luZm8iLCByYWRlb25fZGVidWdmc19wbV9pbmZvLCAwLCBOVUxMfSwKK307CisjZW5kaWYKKworaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCByYWRlb25fcG1faW5mb19saXN0LCBBUlJBWV9TSVpFKHJhZGVvbl9wbV9pbmZvX2xpc3QpKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggMjFkYTg3MS4uMjlhYjc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTI5MCw2ICsyOTAsOCBAQAogI2RlZmluZSBSQURFT05fQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDAwMzAKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfTUFTVEVSX0RJUyAgICAgICAgICgxIDw8IDYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX0JJT1NfRElTX1JPTSAgICAgICAoMSA8PCAxMikKKyMJZGVmaW5lIFJTNjAwX0JVU19NQVNURVJfRElTCSAgICAgKDEgPDwgMTQpCisjCWRlZmluZSBSUzYwMF9NU0lfUkVBUk0JCSAgICAgKDEgPDwgMjApIC8qIHJzNjAwL3JzNjkwL3JzNzQwICovCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JEX0RJU0NBUkRfRU4gICAgICAoMSA8PCAyNCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfUkRfQUJPUlRfRU4gICAgICAgICgxIDw8IDI1KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19NU1RSX0RJU0NPTk5FQ1RfRU4gKDEgPDwgMjgpCkBAIC0yOTcsNiArMjk5LDkgQEAKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfUkVBRF9CVVJTVCAgICAgICAgICgxIDw8IDMwKQogI2RlZmluZSBSQURFT05fQlVTX0NOVEwxICAgICAgICAgICAgICAgICAgICAweDAwMzQKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfV0FJVF9PTl9MT0NLX0VOICAgICgxIDw8IDQpCisvKiBydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4ICovCisjZGVmaW5lIFJBREVPTl9NU0lfUkVBUk1fRU4JCSAgICAweDAxNjAKKyMJZGVmaW5lIFJWMzcwX01TSV9SRUFSTV9FTgkgICAgICgxIDw8IDApCiAKIC8qICNkZWZpbmUgUkFERU9OX1BDSUVfSU5ERVggICAgICAgICAgICAgICAgICAgMHgwMDMwICovCiAvKiAjZGVmaW5lIFJBREVPTl9QQ0lFX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDAzNCAqLwpAQCAtMzMxMSw2ICszMzE2LDcgQEAKICNkZWZpbmUgUkFERU9OX0FJQ19DTlRMICAgICAgICAgICAgICAgICAgICAgMHgwMWQwCiAjICAgICAgIGRlZmluZSBSQURFT05fUENJR0FSVF9UUkFOU0xBVEVfRU4gICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBSQURFT05fRElTX09VVF9PRl9QQ0lfR0FSVF9BQ0NFU1MgICAgICgxIDw8IDEpCisjCWRlZmluZSBSUzQwMF9NU0lfUkVBUk0JICAgICAgICAgICAgICAgICgxIDw8IDMpIC8qIHJzNDAwL3JzNDgwICovCiAjZGVmaW5lIFJBREVPTl9BSUNfTE9fQUREUiAgICAgICAgICAgICAgICAgIDB4MDFkYwogI2RlZmluZSBSQURFT05fQUlDX1BUX0JBU0UJCTB4MDFkOAogI2RlZmluZSBSQURFT05fQUlDX0hJX0FERFIJCTB4MDFlMApAQCAtMzMzMyw2ICszMzM5LDcgQEAKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUF9QQUNLRVRfTUFYX0RXT1JEUyAgICAgICAgICAoMSA8PCAxMikKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAweDAwMDAwN2ZmCiAjICAgICAgIGRlZmluZSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0sgICAgICAgICAgICAgMHgwMDAwMWZmZgorIyAgICAgICBkZWZpbmUgUjYwMF9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAgIDB4MDAwMGZmZmYKICMgICAgICAgZGVmaW5lIFJBREVPTl9DUF9QQUNLRVQxX1JFRzBfTUFTSyAgICAgICAgICAweDAwMDAwN2ZmCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMV9SRUcxX01BU0sgICAgICAgICAgMHgwMDNmZjgwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggMDNjMzNjZi4uZjhhNDY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtNDIsNyArNDIsNyBAQAogCS8qIE51bWJlciBvZiB0ZXN0cyA9CiAJICogKFRvdGFsIEdUVCAtIElCIHBvb2wgLSB3cml0ZWJhY2sgcGFnZSAtIHJpbmcgYnVmZmVyKSAvIHRlc3Qgc2l6ZQogCSAqLwotCW4gPSAocmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQgLSA0MDk2IC0KKwluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQogCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSAvIHNpemU7CiAKIAlndHRfb2JqID0ga3phbGxvYyhuICogc2l6ZW9mKCpndHRfb2JqKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgZ3R0X2FkZHIsIHZyYW1fYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgR1RULT5WUkFNIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQogCi0JCXIgPSByYWRlb25fY29weShyZGV2LCB2cmFtX2FkZHIsIGd0dF9hZGRyLCBzaXplIC8gNDA5NiwgZmVuY2UpOworCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoIkZhaWxlZCBWUkFNLT5HVFQgY29weSAlZFxuIiwgaSk7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCBhY2Q4ODljLi4xMzgxZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtMjk1LDYgKzI5NSwxMiBAQAogCWlmICh1bmxpa2VseShyKSkgewogCQlyZXR1cm4gcjsKIAl9CisKKwlyID0gdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyhiby0+dHRtLCB0bXBfbWVtLnBsYWNlbWVudCk7CisJaWYgKHVubGlrZWx5KHIpKSB7CisJCWdvdG8gb3V0X2NsZWFudXA7CisJfQorCiAJciA9IHR0bV90dF9iaW5kKGJvLT50dG0sICZ0bXBfbWVtKTsKIAlpZiAodW5saWtlbHkocikpIHsKIAkJZ290byBvdXRfY2xlYW51cDsKQEAgLTUzMCw3ICs1MzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJhZGVvbl90dG1fdm1fb3BzOwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wcyA9IE5VTEw7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp0dG1fdm1fb3BzID0gTlVMTDsKIAogc3RhdGljIGludCByYWRlb25fdHRtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKQEAgLTY4OSw5ICs2OTUsNiBAQAogCiAjZGVmaW5lIFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUyAyCiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fbWVtX3R5cGVzX2xpc3RbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXTsKLXN0YXRpYyBjaGFyIHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXVszMl07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcmFkZW9uX21tX2R1bXBfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNzExLDkgKzcxNCwxMSBAQAogCiBzdGF0aWMgaW50IHJhZGVvbl90dG1fZGVidWdmc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXN0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fbWVtX3R5cGVzX2xpc3RbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXTsKKwlzdGF0aWMgY2hhciByYWRlb25fbWVtX3R5cGVzX25hbWVzW1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU11bMzJdOwogCXVuc2lnbmVkIGk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKIAkJCXNwcmludGYocmFkZW9uX21lbV90eXBlc19uYW1lc1tpXSwgInJhZGVvbl92cmFtX21tIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzMTAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczEwMGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGE5MTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczEwMGQuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTMTAwRF9IX18KKyNkZWZpbmUgX19SUzEwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDE1Q19OQl9UT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTVDX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTVDX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggYTNmYmRhZC4uY2EwMzcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMjcsMjcgKzI3LDEyIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgInJzNDAwZC5oIgogCi0vKiByczQwMCxyczQ4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOiByczQwMCxyczQ4MCAqLworc3RhdGljIGludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDoKLSAqIHJzNDAwLHJzNDgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotCi0vKgotICogR0FSVCBmdW5jdGlvbnMuCi0gKi8KIHZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBDaGVjayBnYXJ0IHNpemUgKi8KQEAgLTIzOCw2MSArMjIzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogTUMgZnVuY3Rpb25zLgotICovCi1pbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCi0JcnM0MDBfZ3B1X2luaXQocmRldik7Ci0JcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gKz0gKHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICY9IH4ocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCXIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChyMzAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCi0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSQURFT05fTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKFJBREVPTl9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKSB8IFJBREVPTl9IUF9MSU5fUkRfQ0FDSEVfRElTOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCB8IFJBREVPTl9IRFBfU09GVF9SRVNFVCB8IFJBREVPTl9IRFBfUkVBRF9CVUZGRVJfSU5WQUxJREFURSk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KLXZvaWQgcnM0MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCiB2b2lkIHJzNDAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiBIRFAgc2FtZSBwbGFjZSBvbiByczQwMCA/ICovCkBAIC0zMDUsMTAgKzIzNSw2IEBACiAJfQogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8uCi0gKi8KIHZvaWQgcnM0MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXJzNDAwX2dhcnRfYWRqdXN0X3NpemUocmRldik7CkBAIC0zMTksMTAgKzI0NSw2IEBACiAJcjEwMF92cmFtX2luaXRfc2l6ZXMocmRldik7CiB9CiAKLQotLyoKLSAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgotICovCiB1aW50MzJfdCByczQwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCiB7CiAJdWludDMyX3QgcjsKQEAgLTM0MCwxMCArMjYyLDYgQEAKIAlXUkVHMzIoUlM0ODBfTkJfTUNfSU5ERVgsIDB4ZmYpOwogfQogCi0KLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCByczQwMF9kZWJ1Z2ZzX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC00MTksNyArMzM3LDcgQEAKIH07CiAjZW5kaWYKIAotaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcnM0MDBfZ2FydF9pbmZvX2xpc3QsIDEpOwpAQCAtNDI3LDMgKzM0NSwxOTAgQEAKIAlyZXR1cm4gMDsKICNlbmRpZgogfQorCitzdGF0aWMgaW50IHJzNDAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisJdTMyIHRtcDsKKworCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KKwl0bXAgPSBHXzAwMDE1Q19NQ19GQl9TVEFSVChSUkVHMzIoUl8wMDAxNUNfTkJfVE9NKSk7CisJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IEdfMDAwMTVDX01DX0ZCX1NUQVJUKHRtcCkgPDwgMTY7CisJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOworCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCit2b2lkIHJzNDAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMzAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOworCVdSRUczMihSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiwKKwkJU18wMDAxNDhfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQlTXzAwMDE0OF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKworCXIxMDBfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByczQwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnM0MDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLworCXJzNDAwX2dwdV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJciA9IHJzNDAwX2dhcnRfZW5hYmxlKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczQwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBzZXR1cCBNQyBiZWZvcmUgY2FsbGluZyBwb3N0IHRhYmxlcyAqLworCXJzNDAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNDAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM0MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyczQwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnM0MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIERpc2FibGUgVkdBICovCisJcjEwMF92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KKwkvKiBCSU9TKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGNvbWJpb3MgZm9yIFJTNDAwL1JTNDgwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyczQwMF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcnM0MDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNDAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcjMwMF9zZXRfcmVnX3NhZmUocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJzNDAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnM0MDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4YmFjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDBkLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlM0MDBEX0hfXworI2RlZmluZSBfX1JTNDAwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMTQ4X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ4CisjZGVmaW5lICAgU18wMDAxNDhfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNDhfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNDhfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDE1Q19OQl9UT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTVDX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTVDX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDA3QzBfQ1BfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAKKyNkZWZpbmUgICBTXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NUlVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVdVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JTSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SQ0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NJX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfR1VJRE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfVklERE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1BfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMEU0MF9SQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEU0MAorI2RlZmluZSAgIFNfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDBFNDBfQ01ERklGT19BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY4MAorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRl9QSVBFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FTkdfRVZfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FMl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjNEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9WQVBfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9UQU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9URE1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9QQl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9USU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DQkEyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDBlNzkxZTI2Li41ZjExN2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC0yNSwyOCArMjUsMjUgQEAKICAqICAgICAgICAgIEFsZXggRGV1Y2hlcgogICogICAgICAgICAgSmVyb21lIEdsaXNzZQogICovCisvKiBSUzYwMCAvIFJhZGVvbiBYMTI1MC9YMTI3MCBpbnRlZ3JhdGVkIEdQVQorICoKKyAqIFRoaXMgZmlsZSBnYXRoZXIgZnVuY3Rpb24gc3BlY2lmaWMgdG8gUlM2MDAgd2hpY2ggaXMgdGhlIElHUCBvZgorICogdGhlIFgxMjUwL1gxMjcwIGZhbWlseSBzdXBwb3J0aW5nIGludGVsIENQVSAod2hpbGUgUlM2OTAvUlM3NDAKKyAqIGlzIHRoZSBYMTI1MC9YMTI3MCBzdXBwb3J0aW5nIEFNRCBDUFUpLiBUaGUgZGlzcGxheSBlbmdpbmUgYXJlCisgKiB0aGUgYXZpdm8gb25lLCBiaW9zIGlzIGFuIGF0b21iaW9zLCAzRCBibG9jayBhcmUgdGhlIG9uZSBvZiB0aGUKKyAqIFI0WFggZmFtaWx5LiBUaGUgR0FSVCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgUlM0MDAgb25lIGFuZCBpcyB2ZXJ5CisgKiBjbG9zZSB0byB0aGUgb25lIG9mIHRoZSBSNjAwIGZhbWlseSAoUjYwMCBsaWtlbHkgYmVpbmcgYW4gZXZvbHV0aW9uCisgKiBvZiB0aGUgUlM2MDAgR0FSVCBibG9jaykuCisgKi8KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgImF2aXZvZC5oIgorI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJyczYwMGQuaCIKIAogI2luY2x1ZGUgInJzNjAwX3JlZ19zYWZlLmgiCiAKLS8qIHJzNjAwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczYwMAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KIHZvaWQgcnM2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KIAogLyoKICAqIEdBUlQuCkBAIC01NSwxOCArNTIsMTggQEAKIHsKIAl1aW50MzJfdCB0bXA7CiAKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCXRtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIHRtcCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKKwl0bXAgJj0gQ18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyAmIENfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEU7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCB0bXApOwogCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQl0bXAgfD0gUlM2MDBfSU5WQUxJREFURV9BTExfTDFfVExCUyB8IFJTNjAwX0lOVkFMSURBVEVfTDJfQ0FDSEU7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMLCB0bXApOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wIHw9IFNfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMoMSkgJiBTXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKDEpOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKIAotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCk7Ci0JdG1wICY9IH4oUlM2MDBfSU5WQUxJREFURV9BTExfTDFfVExCUyB8IFJTNjAwX0lOVkFMSURBVEVfTDJfQ0FDSEUpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgdG1wKTsKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wICY9IENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgJiBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOwogfQogCiBpbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtODgsNyArODUsNyBAQAogCiBpbnQgcnM2MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3QgdG1wOworCXUzMiB0bXA7CiAJaW50IHIsIGk7CiAKIAlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgewpAQCAtOTgsNDYgKzk1LDUwIEBACiAJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwkvKiBFbmFibGUgYnVzIG1hc3RlciAqLworCXRtcCA9IFJSRUczMihSXzAwMDA0Q19CVVNfQ05UTCkgJiBDXzAwMDA0Q19CVVNfTUFTVEVSX0RJUzsKKwlXUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwsIHRtcCk7CiAJLyogRklYTUU6IHNldHVwIGRlZmF1bHQgcGFnZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwKLQkJIChSUzYwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSg2KSB8Ci0JCSAgUlM2MDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNikpKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsCisJCSAoU18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfAorCQkgIFNfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDYpKSk7CiAJZm9yIChpID0gMDsgaSA8IDE5OyBpKyspIHsKLQkJV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAotCQkJIChSUzYwMF9FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSB8Ci0JCQkgIFJTNjAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgfAotCQkJICBSUzYwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX0RFRkFVTFRfUEFHRSB8Ci0JCQkgIFJTNjAwX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKDMpIHwKLQkJCSAgUlM2MDBfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAotCQkJICBSUzYwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSgzKSkpOworCQlXUkVHMzJfTUMoUl8wMDAxNkNfTUNfUFQwX0NMSUVOVDBfQ05UTCArIGksCisJCQlTXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSgxKSB8CisJCQlTXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSygKKwkJCQlWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTKSB8CisJCQlTXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTKAorCQkJCVZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9ERUZBVUxUX1BBR0UpIHwKKwkJCVNfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKDEpIHwKKwkJCVNfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKDEpIHwKKwkJCVNfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDEpKTsKIAl9CiAKIAkvKiBTeXN0ZW0gY29udGV4dCBtYXAgdG8gR0FSVCBzcGFjZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIHRtcCk7CisJV1JFRzMyX01DKFJfMDAwMTEyX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCk7CisJV1JFRzMyX01DKFJfMDAwMTE0X01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCByZGV2LT5tYy5ndHRfZW5kKTsKIAogCS8qIGVuYWJsZSBmaXJzdCBjb250ZXh0ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbik7Ci0JdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9FTkRfQUREUiwgdG1wKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0NOVEwsCi0JCSAoUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgfCBSUzYwMF9QQUdFX1RBQkxFX1RZUEVfRkxBVCkpOworCVdSRUczMl9NQyhSXzAwMDEzQ19NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQpOworCVdSRUczMl9NQyhSXzAwMDE0Q19NQ19QVDBfQ09OVEVYVDBfRkxBVF9FTkRfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CisJV1JFRzMyX01DKFJfMDAwMTAyX01DX1BUMF9DT05URVhUMF9DTlRMLAorCQkJU18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoMSkgfAorCQkJU18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSChWXzAwMDEwMl9QQUdFX1RBQkxFX0ZMQVQpKTsKIAkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLwogCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsKLQkJV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICsgaSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDEwMl9NQ19QVDBfQ09OVEVYVDBfQ05UTCArIGksIDApOwogCX0KIAogCS8qIHNldHVwIHRoZSBwYWdlIHRhYmxlICovCi0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiwKLQkJIHJkZXYtPmdhcnQudGFibGVfYWRkcik7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiwgMCk7CisJV1JFRzMyX01DKFJfMDAwMTJDX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiwKKwkJCXJkZXYtPmdhcnQudGFibGVfYWRkcik7CisJV1JFRzMyX01DKFJfMDAwMTFDX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiwgMCk7CiAKIAkvKiBlbmFibGUgcGFnZSB0YWJsZXMgKi8KLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgKHRtcCB8IFJTNjAwX0VOQUJMRV9QVCkpOwotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCAodG1wIHwgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTKSk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsICh0bXAgfCBTXzAwMDEwMF9FTkFCTEVfUFQoMSkpKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEpOworCVdSRUczMl9NQyhSXzAwMDAwOV9NQ19DTlRMMSwgKHRtcCB8IFNfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUygxKSkpOwogCXJzNjAwX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOwogCXJkZXYtPmdhcnQucmVhZHkgPSB0cnVlOwogCXJldHVybiAwOwpAQCAtMTQ4LDEwICsxNDksOSBAQAogCXVpbnQzMl90IHRtcDsKIAogCS8qIEZJWE1FOiBkaXNhYmxlIG91dCBvZiBnYXJ0IGFjY2VzcyAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgMCk7Ci0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX0NOVEwxKTsKLQl0bXAgJj0gflJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUzsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEsIHRtcCk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCAwKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEpOworCVdSRUczMl9NQyhSXzAwMDAwOV9NQ19DTlRMMSwgdG1wICYgQ18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTKTsKIAlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKIAkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOwogCQlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKQEAgLTE4NSwxMzIgKzE4NSw2NCBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBNQy4KLSAqLwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdW5zaWduZWQgdG1wOwotCi0JaWYgKHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgR1VJIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7Ci0KLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwotCXRtcCA9IFJSRUczMihBVklWT19EMlZHQV9DT05UUk9MKTsKLQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0RWR0FfQ09OVFJPTF9NT0RFX0VOQUJMRSk7Ci0KLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDFDUlRDX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMUNSVENfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0NSVENfRU4pOwotCXRtcCA9IFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QyQ1JUQ19DT05UUk9MLCB0bXAgJiB+QVZJVk9fQ1JUQ19FTik7Ci0KLQkvKiBtYWtlIHN1cmUgYWxsIHByZXZpb3VzIHdyaXRlIGdvdCB0aHJvdWdoICovCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QyQ1JUQ19DT05UUk9MKTsKLQotCW1kZWxheSgxKTsKLX0KLQotaW50IHJzNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNjAwX2dwdV9pbml0KHJkZXYpOwotCXJzNjAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCS8qIEVuYWJsZSBidXMgbWFzdGVyICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfQlVTX01BU1RFUl9ESVM7Ci0JV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKLQkvKiBGSVhNRTogV2hhdCBkb2VzIEFHUCBtZWFucyBmb3Igc3VjaCBjaGlwc2V0ID8gKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKLQkvKiBGSVhNRTogYXJlIHRoaXMgQUdQIHJlZyBpbiBpbmRpcmVjdCBNQyByYW5nZSA/ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9CQVNFLCAwKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfQUdQX0JBU0VfMiwgMCk7Ci0JcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFJTNjAwX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSUzYwMF9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihSUzY5MF9IRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHJzNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEludGVycnVwdHMKLSAqLwogaW50IHJzNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wID0gMDsKIAl1aW50MzJfdCBtb2RlX2ludCA9IDA7CiAKIAlpZiAocmRldi0+aXJxLnN3X2ludCkgewotCQl0bXAgfD0gUkFERU9OX1NXX0lOVF9FTkFCTEU7CisJCXRtcCB8PSBTXzAwMDA0MF9TV19JTlRfRU4oMSk7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdKSB7Ci0JCW1vZGVfaW50IHw9IEFWSVZPX0QxTU9ERV9JTlRfTUFTSzsKKwkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9CiAJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMV0pIHsKLQkJbW9kZV9pbnQgfD0gQVZJVk9fRDJNT0RFX0lOVF9NQVNLOworCQltb2RlX2ludCB8PSBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKDEpOwogCX0KLQlXUkVHMzIoUkFERU9OX0dFTl9JTlRfQ05UTCwgdG1wKTsKLQlXUkVHMzIoQVZJVk9fRHhNT0RFX0lOVF9NQVNLLCBtb2RlX2ludCk7CisJV1JFRzMyKFJfMDAwMDQwX0dFTl9JTlRfQ05UTCwgdG1wKTsKKwlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCBtb2RlX2ludCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgcnM2MDBfaXJxX2FjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyICpyNTAwX2Rpc3BfaW50KQogewotCXVpbnQzMl90IGlycXMgPSBSUkVHMzIoUkFERU9OX0dFTl9JTlRfU1RBVFVTKTsKLQl1aW50MzJfdCBpcnFfbWFzayA9IFJBREVPTl9TV19JTlRfVEVTVDsKKwl1aW50MzJfdCBpcnFzID0gUlJFRzMyKFJfMDAwMDQ0X0dFTl9JTlRfU1RBVFVTKTsKKwl1aW50MzJfdCBpcnFfbWFzayA9IH5DXzAwMDA0NF9TV19JTlQ7CiAKLQlpZiAoaXJxcyAmIEFWSVZPX0RJU1BMQVlfSU5UX1NUQVRVUykgewotCQkqcjUwMF9kaXNwX2ludCA9IFJSRUczMihBVklWT19ESVNQX0lOVEVSUlVQVF9TVEFUVVMpOwotCQlpZiAoKnI1MDBfZGlzcF9pbnQgJiBBVklWT19EMV9WQkxBTktfSU5URVJSVVBUKSB7Ci0JCQlXUkVHMzIoQVZJVk9fRDFNT0RFX1ZCTEFOS19TVEFUVVMsIEFWSVZPX1ZCTEFOS19BQ0spOworCWlmIChHXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKGlycXMpKSB7CisJCSpyNTAwX2Rpc3BfaW50ID0gUlJFRzMyKFJfMDA3RURDX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisJCWlmIChHXzAwN0VEQ19MQl9EMV9WQkxBTktfSU5URVJSVVBUKCpyNTAwX2Rpc3BfaW50KSkgeworCQkJV1JFRzMyKFJfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVFVTLAorCQkJCVNfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKDEpKTsKIAkJfQotCQlpZiAoKnI1MDBfZGlzcF9pbnQgJiBBVklWT19EMl9WQkxBTktfSU5URVJSVVBUKSB7Ci0JCQlXUkVHMzIoQVZJVk9fRDJNT0RFX1ZCTEFOS19TVEFUVVMsIEFWSVZPX1ZCTEFOS19BQ0spOworCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJCVdSRUczMihSXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVRVUywKKwkJCQlTXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSygxKSk7CiAJCX0KIAl9IGVsc2UgewogCQkqcjUwMF9kaXNwX2ludCA9IDA7CiAJfQogCiAJaWYgKGlycXMpIHsKLQkJV1JFRzMyKFJBREVPTl9HRU5fSU5UX1NUQVRVUywgaXJxcyk7CisJCVdSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUywgaXJxcyk7CiAJfQogCXJldHVybiBpcnFzICYgaXJxX21hc2s7CiB9CiAKK3ZvaWQgcnM2MDBfaXJxX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIDApOworCVdSRUczMihSXzAwNjU0MF9EeE1PREVfSU5UX01BU0ssIDApOworCS8qIFdhaXQgYW5kIGFja25vd2xlZGdlIGlycSAqLworCW1kZWxheSgxKTsKKwlyczYwMF9pcnFfYWNrKHJkZXYsICZ0bXApOworfQorCiBpbnQgcnM2MDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCXVpbnQzMl90IHI1MDBfZGlzcF9pbnQ7CiAKIAlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKQEAgLTMxOSw4NSArMjUxLDY1IEBACiAJfQogCXdoaWxlIChzdGF0dXMgfHwgcjUwMF9kaXNwX2ludCkgewogCQkvKiBTVyBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1cyAmIFJBREVPTl9TV19JTlRfVEVTVCkgeworCQlpZiAoR18wMDAwNDBfU1dfSU5UX0VOKHN0YXR1cykpCiAJCQlyYWRlb25fZmVuY2VfcHJvY2VzcyhyZGV2KTsKLQkJfQogCQkvKiBWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHRzICovCi0JCWlmIChyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgeworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDApOwotCQl9Ci0JCWlmIChyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgeworCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwotCQl9CiAJCXN0YXR1cyA9IHJzNjAwX2lycV9hY2socmRldiwgJnI1MDBfZGlzcF9pbnQpOwogCX0KKwlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1JTNjAwOgorCQljYXNlIENISVBfUlM2OTA6CisJCWNhc2UgQ0hJUF9SUzc0MDoKKwkJCW1zaV9yZWFybSA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX01TSV9SRUFSTTsKKwkJCVdSRUczMihSQURFT05fQlVTX0NOVEwsIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCBtc2lfcmVhcm0gfCBSUzYwMF9NU0lfUkVBUk0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTikgJiB+UlYzNzBfTVNJX1JFQVJNX0VOOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTiwgbXNpX3JlYXJtIHwgUlYzNzBfTVNJX1JFQVJNX0VOKTsKKwkJCWJyZWFrOworCQl9CisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogdTMyIHJzNjAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCiB7CiAJaWYgKGNydGMgPT0gMCkKLQkJcmV0dXJuIFJSRUczMihBVklWT19EMUNSVENfRlJBTUVfQ09VTlQpOworCQlyZXR1cm4gUlJFRzMyKFJfMDA2MEE0X0QxQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQpOwogCWVsc2UKLQkJcmV0dXJuIFJSRUczMihBVklWT19EMkNSVENfRlJBTUVfQ09VTlQpOwotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCVdSRUczMigweDMzMCwgMCk7Ci0JV1JFRzMyKDB4MzM4LCAwKTsKLQl0bXAgPSBSUkVHMzIoMHgzMDApOwotCXRtcCAmPSB+KDMgPDwgMTYpOwotCVdSRUczMigweDMwMCwgdG1wKTsKLQlXUkVHMzIoMHgzMDgsICgxIDw8IDgpKTsKLQlXUkVHMzIoMHgzMTAsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOwotCVdSRUczMigweDU5NCwgMCk7CisJCXJldHVybiBSUkVHMzIoUl8wMDY4QTRfRDJDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCk7CiB9CiAKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7Ci0JdWludDMyX3QgdG1wOwogCiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCS8qIHJlYWQgTUNfU1RBVFVTICovCi0JCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19TVEFUVVMpOwotCQlpZiAodG1wICYgUlM2MDBfTUNfU1RBVFVTX0lETEUpIHsKKwkJaWYgKEdfMDAwMDAwX01DX0lETEUoUlJFRzMyX01DKFJfMDAwMDAwX01DX1NUQVRVUykpKQogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcnM2MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiBIRFAgc2FtZSBwbGFjZSBvbiByczYwMCA/ICovCiAJcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcnM2MDBfZGlzYWJsZV92Z2EocmRldik7CiAJLyogRklYTUU6IGlzIHRoaXMgY29ycmVjdCA/ICovCiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHJzNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8uCi0gKi8KIHZvaWQgcnM2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiB0byBkbyBvciBpcyB0aGVzZSB2YWx1ZXMgc2FuZSA/ICovCkBAIC00MTAsMzEgKzMyMiwyMDggQEAKIAkvKiBGSVhNRTogaW1wbGVtZW50LCBzaG91bGQgdGhpcyBiZSBsaWtlIHJzNjkwID8gKi8KIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNjAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKLQl1aW50MzJfdCByOwotCi0JV1JFRzMyKFJTNjAwX01DX0lOREVYLAotCSAgICAgICAoKHJlZyAmIFJTNjAwX01DX0FERFJfTUFTSykgfCBSUzYwMF9NQ19JTkRfQ0lURl9BUkIwKSk7Ci0JciA9IFJSRUczMihSUzYwMF9NQ19EQVRBKTsKLQlyZXR1cm4gcjsKKwlXUkVHMzIoUl8wMDAwNzBfTUNfSU5EX0lOREVYLCBTXzAwMDA3MF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCgxKSk7CisJcmV0dXJuIFJSRUczMihSXzAwMDA3NF9NQ19JTkRfREFUQSk7CiB9CiAKIHZvaWQgcnM2MDBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KQogewotCVdSRUczMihSUzYwMF9NQ19JTkRFWCwKLQkJUlM2MDBfTUNfSU5EX1dSX0VOIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCB8Ci0JCSgocmVnKSAmIFJTNjAwX01DX0FERFJfTUFTSykpOwotCVdSRUczMihSUzYwMF9NQ19EQVRBLCB2KTsKKwlXUkVHMzIoUl8wMDAwNzBfTUNfSU5EX0lOREVYLCBTXzAwMDA3MF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCgxKSB8IFNfMDAwMDcwX01DX0lORF9XUl9FTigxKSk7CisJV1JFRzMyKFJfMDAwMDc0X01DX0lORF9EQVRBLCB2KTsKK30KKwordm9pZCByczYwMF9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKQorCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Cit9CisKK3ZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtID0gcnM2MDBfcmVnX3NhZmVfYm07CisJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocnM2MDBfcmVnX3NhZmVfYm0pOworfQorCitzdGF0aWMgdm9pZCByczYwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKworCS8qIEZJWE1FOiBXaGF0IGRvZXMgQUdQIG1lYW5zIGZvciBzdWNoIGNoaXBzZXQgPyAqLworCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgMCk7CisJV1JFRzMyX01DKFJfMDAwMDA3X0FHUF9CQVNFXzIsIDApOworCS8qIFByb2dyYW0gTUMgKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04sCisJCQlTXzAwMDAwNF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwNF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKwlXUkVHMzIoUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDEzNF9IRFBfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikpOworCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByczYwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnM2MDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczYwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczYwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXJzNjAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJzNjAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCXJzNjAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcnM2MDBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHJzNjAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyczYwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyczYwMF9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOwogfQogCiBpbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOwotCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJzNjAwX3JlZ19zYWZlX2JtKTsKKwlpbnQgcjsKKworCS8qIERpc2FibGUgVkdBICovCisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIEJJT1MgKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUlM2MDAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcnM2MDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnM2MDBfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyczYwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJzNjAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnM2MDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnM2MDBfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzMDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmgKQEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlM2MDBEX0hfXworI2RlZmluZSBfX1JTNjAwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDQwX0dFTl9JTlRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwCisjZGVmaW5lICAgU18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZTWU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9TTkFQU0hPVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQzJfVkJMQU5LICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDQwX0ZQMl9ERVRFQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRlAyX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0kyQ19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSTJDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJUEhfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklQSF9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1NXX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU1dfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dFWVNFUlZJTExFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR0VZU0VSVklMTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RWSV9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRFZJX0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSURNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJRERNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklERE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0NAorI2RlZmluZSAgIFNfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0NF9WR0FfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9WR0FfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WR0FfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgwX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMV9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgxX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMl9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgyX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIM19JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgzX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X01DX1BST0JFX0ZBVUxUX1NUQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDA0NF9NQ19QUk9CRV9GQVVMVF9TVEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfTUNfUFJPQkVfRkFVTFRfU1RBVCAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfSTJDX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NDUkFUQ0hfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDA0NF9TQ1JBVENIX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU0NSQVRDSF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0dVSV9JRExFX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfR1VJX0lETEVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0FUSV9PVkVSRFJJVkVfSU5UX1NUQVQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9BVElfT1ZFUkRSSVZFX0lOVF9TVEFUKHgpICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQVRJX09WRVJEUklWRV9JTlRfU1RBVCAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X01DX1BST1RFQ1RJT05fRkFVTFRfU1RBVCh4KSAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9NQ19QUk9URUNUSU9OX0ZBVUxUX1NUQVQoeCkgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfTUNfUFJPVEVDVElPTl9GQVVMVF9TVEFUICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1JCQk1fUkVBRF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDA0NF9SQkJNX1JFQURfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfUkJCTV9SRUFEX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0NCX0NPTlRFWFRfU1dJVENIX1NUQVQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDA0NF9DQl9DT05URVhUX1NXSVRDSF9TVEFUKHgpICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ0JfQ09OVEVYVF9TV0lUQ0hfU1RBVCAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1ZJUEhfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVklQSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NXX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NXX0lOVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU1dfSU5UX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0lEQ1RfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDA0NF9JRENUX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfSURDVF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0dVSURNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfR1VJRE1BX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1ZJRERNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVklERE1BX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDA0Q19CVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0QworI2RlZmluZSAgIFNfMDAwMDRDX0JVU19NQVNURVJfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0Q19CVVNfTUFTVEVSX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNENfQlVTX01BU1RFUl9ESVMgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDRDX0JVU19NU0lfUkVBUk0oeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA0Q19CVVNfTVNJX1JFQVJNKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNENfQlVTX01TSV9SRUFSTSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSBSXzAwMDA3MF9NQ19JTkRfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MAorI2RlZmluZSAgIFNfMDAwMDcwX01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18wKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18xKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzEgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18yKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzIgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18zKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzMgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQUlDX1JCUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0FJQ19SQlMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9BSUNfUkJTICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIwKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIxKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9DSVRGX0FSQjEgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfV1JfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfUkRfSU5WKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1JEX0lOVih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9SRF9JTlYgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNzRfTUNfSU5EX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzQKKyNkZWZpbmUgICBTXzAwMDA3NF9NQ19JTkRfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNzRfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDc0X01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjBBNF9EMUNSVENfU1RBVFVTX0ZSQU1FX0NPVU5UICAgICAgICAgICAweDAwNjBBNAorI2RlZmluZSAgIFNfMDA2MEE0X0QxQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYwQTRfRDFDUlRDX0ZSQU1FX0NPVU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjBBNF9EMUNSVENfRlJBTUVfQ09VTlQgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIFJfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDA2NTM0CisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVCAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDY1NDAKKyNkZWZpbmUgICBTXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0soeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0soeCkgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0sgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkxJTkVfSU5UX01BU0soeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDY1NDBfRDJNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WTElORV9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMU1PREVfVkJMQU5LX0NQX1NFTCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QxTU9ERV9WQkxBTktfQ1BfU0VMICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0NQX1NFTCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDY1NDBfRDJNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WQkxBTktfQ1BfU0VMICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDY4QTRfRDJDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCAgICAgICAgICAgMHgwMDY4QTQKKyNkZWZpbmUgICBTXzAwNjhBNF9EMkNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OEE0X0QyQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkYpCisjZGVmaW5lICAgQ18wMDY4QTRfRDJDUlRDX0ZSQU1FX0NPVU5UICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBSXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgICAweDAwNkQzNAorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lIFJfMDA3RURDX0RJU1BfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDA3RURDCisjZGVmaW5lICAgU18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgIDB4RkZGRkZGREYKKworCisvKiBNQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwMDBfTUNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMF9NQ19JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMF9NQ19JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwMF9NQ19JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNQorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDZfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYKKyNkZWZpbmUgICBTXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDA2X0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwMDdfQUdQX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcKKyNkZWZpbmUgICBTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDAwN19BR1BfQkFTRV9BRERSXzIgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lIFJfMDAwMDA5X01DX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5CisjZGVmaW5lICAgU18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisvKiBGSVhNRSBkb24ndCBrbm93IHRoZSB2YXJpb3VzIGZpZWxkIHNpemUgbmVlZCBmZWVkYmFjayBmcm9tIEFNRCAqLworI2RlZmluZSBSXzAwMDEwMF9NQ19QVDBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMAorI2RlZmluZSAgIFNfMDAwMTAwX0VOQUJMRV9QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTAwX0VOQUJMRV9QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0VOQUJMRV9QVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSh4KSAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTUpCisjZGVmaW5lICAgR18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHg3KQorI2RlZmluZSAgIENfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFICAgICAgICAgICAgIDB4RkZGQzdGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSh4KSAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjEpCisjZGVmaW5lICAgR18wMDAxMDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHg3KQorI2RlZmluZSAgIENfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFICAgICAgICAgICAgIDB4RkYxRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyh4KSAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEUgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgICAgICAgICAgICAgICAgMHgwMDAxMDIKKyNkZWZpbmUgICBTXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lICAgR18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDMpCisjZGVmaW5lICAgQ18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOQorI2RlZmluZSAgIFZfMDAwMTAyX1BBR0VfVEFCTEVfRkxBVCAgICAgICAgICAgICAgICAgICAgIDAKKy8qIFI2MDAgZG9jdW1lbnRhdGlvbiBzdWdnZXN0IHRoYXQgdGhpcyBzaG91bGQgYmUgYSBudW1iZXIgb2YgcGFnZXMgKi8KKyNkZWZpbmUgUl8wMDAxMTJfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiAgICAgMHgwMDAxMTIKKyNkZWZpbmUgUl8wMDAxMTRfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIgICAgMHgwMDAxMTQKKyNkZWZpbmUgUl8wMDAxMUNfTUNfUFQwX0NPTlRFWFQwX0RFRkFVTFRfUkVBRF9BRERSICAgMHgwMDAxMUMKKyNkZWZpbmUgUl8wMDAxMkNfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfQkFTRV9BRERSICAgICAgMHgwMDAxMkMKKyNkZWZpbmUgUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiAgICAgMHgwMDAxM0MKKyNkZWZpbmUgUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgUl8wMDAxNkNfTUNfUFQwX0NMSUVOVDBfQ05UTCAgICAgICAgICAgICAgICAgMHgwMDAxNkMKKyNkZWZpbmUgICBTXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLKHgpICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLKHgpICAgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLICAgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfUEFfT05MWSAgICAgICAgICAwCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX1VTRV9TWVNfTUFQICAgICAgMQorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgICAgICAgICAgIDIKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyAgICAgICAzCisjZGVmaW5lICAgU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUyh4KSAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1MoeCkgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX1BBU1NUSFJPVUdIICAwCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0RFRkFVTFRfUEFHRSAxCisjZGVmaW5lICAgU18wMDAxNkNfRUZGRUNUSVZFX0wxX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSAgICAgICAgICAgICAweEZGRkZDN0ZGCisjZGVmaW5lICAgU18wMDAxNkNfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKHgpICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORyAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDAxNkNfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSAgICAgICAgICAgICAweEZGRkM3RkZGCisjZGVmaW5lICAgU18wMDAxNkNfSU5WQUxJREFURV9MMV9UTEIoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMTZDX0lOVkFMSURBVEVfTDFfVExCKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19JTlZBTElEQVRFX0wxX1RMQiAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCmluZGV4IDBmNTg1Y2EuLjI3NTQ3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKQEAgLTI2LDEwNiArMjYsMjkgQEAKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCi0jaW5jbHVkZSAicnM2OTByLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgotI2luY2x1ZGUgImF0b20tYml0cy5oIgorI2luY2x1ZGUgInJzNjkwZC5oIgogCi0vKiByczY5MCxyczc0MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDoKLSAqIHJzNjkwLHJzNzQwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByczY5MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIE1DIGZ1bmN0aW9ucy4KLSAqLwotaW50IHJzNjkwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNjkwX2dwdV9pbml0KHJkZXYpOwotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICs9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiAmPSB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2OTBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzY5MF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2OTBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTiwgdG1wKTsKLQkvKiBGSVhNRTogRG9lcyB0aGlzIHJlZyBleGlzdCBvbiBSUzQ4MCxSUzc0MCA/ICovCi0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczY5MF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi1pbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwogCXVpbnQzMl90IHRtcDsKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfTUNfU1RBVFVTKTsKLQkJaWYgKHRtcCAmIFJTNjkwX01DX1NUQVRVU19JRExFKSB7CisJCXRtcCA9IFJSRUczMl9NQyhSXzAwMDA5MF9NQ19TWVNURU1fU1RBVFVTKTsKKwkJaWYgKEdfMDAwMDkwX01DX1NZU1RFTV9JRExFKHRtcCkpCiAJCQlyZXR1cm4gMDsKLQkJfQotCQlEUk1fVURFTEFZKDEpOworCQl1ZGVsYXkoMSk7CiAJfQogCXJldHVybiAtMTsKIH0KIAotdm9pZCByczY5MF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7Ci19Ci0KLXZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByczY5MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM2OTAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlpZiAocnM2OTBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewpAQCAtMTM0LDEwICs1Nyw2IEBACiAJfQogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8uCi0gKi8KIHZvaWQgcnM2OTBfcG1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBJbnRlZ3JhdGVkU3lzdGVtSW5mbyk7CkBAIC0yNTEsMzkgKzE3MCwzOSBAQAogCS8qCiAJICogTGluZSBCdWZmZXIgU2V0dXAKIAkgKiBUaGVyZSBpcyBhIHNpbmdsZSBsaW5lIGJ1ZmZlciBzaGFyZWQgYnkgYm90aCBkaXNwbGF5IGNvbnRyb2xsZXJzLgotCSAqIERDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBob3cgdGhhdCBsaW5lIGJ1ZmZlciBpcyBzaGFyZWQgYmV0d2VlbgorCSAqIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBob3cgdGhhdCBsaW5lIGJ1ZmZlciBpcyBzaGFyZWQgYmV0d2VlbgogCSAqIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXJzLiAgVGhlIHBhcml0aW9uaW5nIGNhbiBlaXRoZXIgYmUgZG9uZQogCSAqIG1hbnVhbGx5IG9yIHZpYSBvbmUgb2YgZm91ciBwcmVzZXQgYWxsb2NhdGlvbnMgc3BlY2lmaWVkIGluIGJpdHMgMTowOgogCSAqICAwIC0gbGluZSBidWZmZXIgaXMgZGl2aWRlZCBpbiBoYWxmIGFuZCBzaGFyZWQgYmV0d2VlbiBjcnRjCiAJICogIDEgLSBEMSBnZXRzIDMvNCBvZiB0aGUgbGluZSBidWZmZXIsIEQyIGdldHMgMS80CiAJICogIDIgLSBEMSBnZXRzIHRoZSB3aG9sZSBidWZmZXIKIAkgKiAgMyAtIEQxIGdldHMgMS80IG9mIHRoZSBsaW5lIGJ1ZmZlciwgRDIgZ2V0cyAzLzQKLQkgKiBTZXR0aW5nIGJpdCAyIG9mIERDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBzd2l0Y2hlcyB0byBtYW51YWwKKwkgKiBTZXR0aW5nIGJpdCAyIG9mIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBzd2l0Y2hlcyB0byBtYW51YWwKIAkgKiBhbGxvY2F0aW9uIG1vZGUuIEluIG1hbnVhbCBhbGxvY2F0aW9uIG1vZGUsIEQxIGFsd2F5cyBzdGFydHMgYXQgMCwKIAkgKiBEMSBlbmQvMiBpcyBzcGVjaWZpZWQgaW4gYml0cyAxNDo0OyBEMiBhbGxvY2F0aW9uIGZvbGxvd3MgRDEuCiAJICovCi0JdG1wID0gUlJFRzMyKERDX0xCX01FTU9SWV9TUExJVCkgJiB+RENfTEJfTUVNT1JZX1NQTElUX01BU0s7Ci0JdG1wICY9IH5EQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERTsKKwl0bXAgPSBSUkVHMzIoUl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKSAmIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVDsKKwl0bXAgJj0gfkNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFOwogCS8qIGF1dG8gKi8KIAlpZiAobW9kZTEgJiYgbW9kZTIpIHsKIAkJaWYgKG1vZGUxLT5oZGlzcGxheSA+IG1vZGUyLT5oZGlzcGxheSkgewogCQkJaWYgKG1vZGUxLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUTsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFROwogCQkJZWxzZQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJCX0gZWxzZSBpZiAobW9kZTItPmhkaXNwbGF5ID4gbW9kZTEtPmhkaXNwbGF5KSB7CiAJCQlpZiAobW9kZTItPmhkaXNwbGF5ID4gMjU2MCkKLQkJCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROworCQkJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CiAJCQllbHNlCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOworCQkJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKIAkJfSBlbHNlCi0JCQl0bXAgfD0gQVZJVk9fRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CisJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJfSBlbHNlIGlmIChtb2RlMSkgewotCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxX09OTFk7CisJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWTsKIAl9IGVsc2UgaWYgKG1vZGUyKSB7Ci0JCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CisJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CiAJfQotCVdSRUczMihEQ19MQl9NRU1PUllfU1BMSVQsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCwgdG1wKTsKIH0KIAogc3RydWN0IHJzNjkwX3dhdGVybWFyayB7CkBAIC00ODgsMjggKzQwNywyOCBAQAogCSAqIG9wdGlvbi4KIAkgKi8KIAlpZiAocmRldi0+ZGlzcF9wcmlvcml0eSA9PSAyKSB7Ci0JCXRtcCA9IFJSRUczMl9NQyhNQ19JTklUX01JU0NfTEFUX1RJTUVSKTsKLQkJdG1wICY9IH5NQ19ESVNQMVJfSU5JVF9MQVRfTUFTSzsKLQkJdG1wICY9IH5NQ19ESVNQMFJfSU5JVF9MQVRfTUFTSzsKLQkJaWYgKG1vZGUxKQotCQkJdG1wIHw9ICgxIDw8IE1DX0RJU1AxUl9JTklUX0xBVF9TSElGVCk7CisJCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSKTsKKwkJdG1wICY9IENfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVDsKKwkJdG1wICY9IENfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVDsKIAkJaWYgKG1vZGUwKQotCQkJdG1wIHw9ICgxIDw8IE1DX0RJU1AwUl9JTklUX0xBVF9TSElGVCk7Ci0JCVdSRUczMl9NQyhNQ19JTklUX01JU0NfTEFUX1RJTUVSLCB0bXApOworCQkJdG1wIHw9IFNfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCgxKTsKKwkJaWYgKG1vZGUxKQorCQkJdG1wIHw9IFNfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCgxKTsKKwkJV1JFRzMyX01DKFJfMDAwMTA0X01DX0lOSVRfTUlTQ19MQVRfVElNRVIsIHRtcCk7CiAJfQogCXJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChyZGV2LCBtb2RlMCwgbW9kZTEpOwogCiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKLQkJV1JFRzMyKERDUF9DT05UUk9MLCAwKTsKKwkJV1JFRzMyKFJfMDA2QzlDX0RDUF9DT05UUk9MLCAwKTsKIAlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlM4ODApKQotCQlXUkVHMzIoRENQX0NPTlRST0wsIDIpOworCQlXUkVHMzIoUl8wMDZDOUNfRENQX0NPTlRST0wsIDIpOwogCiAJcnM2OTBfY3J0Y19iYW5kd2lkdGhfY29tcHV0ZShyZGV2LCByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0sICZ3bTApOwogCXJzNjkwX2NydGNfYmFuZHdpZHRoX2NvbXB1dGUocmRldiwgcmRldi0+bW9kZV9pbmZvLmNydGNzWzFdLCAmd20xKTsKIAogCXRtcCA9ICh3bTAubGJfcmVxdWVzdF9maWZvX2RlcHRoIC0gMSk7CiAJdG1wIHw9ICh3bTEubGJfcmVxdWVzdF9maWZvX2RlcHRoIC0gMSkgPDwgMTY7Ci0JV1JFRzMyKExCX01BWF9SRVFfT1VUU1RBTkRJTkcsIHRtcCk7CisJV1JFRzMyKFJfMDA2RDU4X0xCX01BWF9SRVFfT1VUU1RBTkRJTkcsIHRtcCk7CiAKIAlpZiAobW9kZTAgJiYgbW9kZTEpIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKQEAgLTU2MiwxMCArNDgxLDEwIEBACiAJCQlwcmlvcml0eV9tYXJrMTIuZnVsbCA9IDA7CiAJCWlmICh3bTEucHJpb3JpdHlfbWFya19tYXguZnVsbCA+IHByaW9yaXR5X21hcmsxMi5mdWxsKQogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSB3bTEucHJpb3JpdHlfbWFya19tYXguZnVsbDsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CiAJfSBlbHNlIGlmIChtb2RlMCkgewogCQlpZiAocmZpeGVkX3RydW5jKHdtMC5kYnBwKSA+IDY0KQogCQkJYS5mdWxsID0gcmZpeGVkX211bCh3bTAuZGJwcCwgd20wLm51bV9saW5lX3BhaXIpOwpAQCAtNTkyLDEwICs1MTEsMTIgQEAKIAkJCXByaW9yaXR5X21hcmswMi5mdWxsID0gMDsKIAkJaWYgKHdtMC5wcmlvcml0eV9tYXJrX21heC5mdWxsID4gcHJpb3JpdHlfbWFyazAyLmZ1bGwpCiAJCQlwcmlvcml0eV9tYXJrMDIuZnVsbCA9IHdtMC5wcmlvcml0eV9tYXJrX21heC5mdWxsOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7CisJCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOworCQlXUkVHMzIoUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05ULAorCQkJU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKDEpKTsKKwkJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwKKwkJCVNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRigxKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTEuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IHJmaXhlZF9tdWwod20xLmRicHAsIHdtMS5udW1fbGluZV9wYWlyKTsKQEAgLTYyMiwzMCArNTQzLDIwNSBAQAogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSAwOwogCQlpZiAod20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGwgPiBwcmlvcml0eV9tYXJrMTIuZnVsbCkKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gd20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGw7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwKKwkJCVNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRigxKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsCisJCQlTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoMSkpOworCQlXUkVHMzIoUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CisJCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKIAl9CiB9CiAKLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKLSAqLwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQogewogCXVpbnQzMl90IHI7CiAKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIChyZWcgJiBSUzY5MF9NQ19JTkRFWF9NQVNLKSk7Ci0JciA9IFJSRUczMihSUzY5MF9NQ19EQVRBKTsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX01BU0spOworCVdSRUczMihSXzAwMDA3OF9NQ19JTkRFWCwgU18wMDAwNzhfTUNfSU5EX0FERFIocmVnKSk7CisJciA9IFJSRUczMihSXzAwMDA3Q19NQ19EQVRBKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIH5DXzAwMDA3OF9NQ19JTkRfQUREUik7CiAJcmV0dXJuIHI7CiB9CiAKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KQogewotCVdSRUczMihSUzY5MF9NQ19JTkRFWCwKLQkgICAgICAgUlM2OTBfTUNfSU5ERVhfV1JfRU4gfCAoKHJlZykgJiBSUzY5MF9NQ19JTkRFWF9NQVNLKSk7Ci0JV1JFRzMyKFJTNjkwX01DX0RBVEEsIHYpOwotCVdSRUczMihSUzY5MF9NQ19JTkRFWCwgUlM2OTBfTUNfSU5ERVhfV1JfQUNLKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIFNfMDAwMDc4X01DX0lORF9BRERSKHJlZykgfAorCQlTXzAwMDA3OF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDA3Q19NQ19EQVRBLCB2KTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIDB4N0YpOworfQorCit2b2lkIHJzNjkwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNDRkdfRkJfTE9DQVRJT04sCisJCQlTXzAwMDEwMF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDEwMF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKwlXUkVHMzIoUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDEzNF9IRFBfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikpOworCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByczY5MF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnM2OTBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczY5MF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczQwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXJzNjAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJzNjkwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcnM2OTBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM2OTBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyczY5MF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnM2OTBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIERpc2FibGUgVkdBICovCisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJzNjkwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNDAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczY5MF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNjkwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNDAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNjkwRF9IX18KKyNkZWZpbmUgX19SUzY5MERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA3OF9NQ19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3OAorI2RlZmluZSAgIFNfMDAwMDc4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNzhfTUNfSU5EX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDFGRikKKyNkZWZpbmUgICBDXzAwMDA3OF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRTAwCisjZGVmaW5lICAgU18wMDAwNzhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNzhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNzhfTUNfSU5EX1dSX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSBSXzAwMDA3Q19NQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3QworI2RlZmluZSAgIFNfMDAwMDdDX01DX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA3Q19NQ19EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwN0NfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGOAorI2RlZmluZSAgIFNfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDEzNAorI2RlZmluZSAgIFNfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTM0X0hEUF9GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgUl8wMDA3QzBfQ1BfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAKKyNkZWZpbmUgICBTXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NUlVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVdVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JTSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SQ0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NJX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfR1VJRE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfVklERE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1BfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMEU0MF9SQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEU0MAorI2RlZmluZSAgIFNfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDBFNDBfQ01ERklGT19BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY4MAorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRl9QSVBFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FTkdfRVZfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FMl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjNEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9WQVBfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9UQU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9URE1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9QQl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9USU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DQkEyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCAgICAgICAgICAgICAgICAgIDB4MDA2NTIwCisjZGVmaW5lICAgU18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lICAgR18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQworI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFKHgpICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRiAgICAwCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRICAgICAgMQorI2RlZmluZSAgIFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZICAgICAgICAgIDIKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1EgICAgICAzCisjZGVmaW5lICAgU18wMDY1MjBfRENfTEJfRElTUDFfRU5EX0FEUih4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjUyMF9EQ19MQl9ESVNQMV9FTkRfQURSKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX0RJU1AxX0VORF9BRFIgICAgICAgICAgICAgICAgIDB4RkZGRjgwMEYKKyNkZWZpbmUgUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05UICAgICAgICAgICAgICAgMHgwMDY1NDgKKyNkZWZpbmUgICBTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0NOVCAgICAgICAgICAgICAgIDB4MDA2NTRDCisjZGVmaW5lICAgU18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQiAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNkM5Q19EQ1BfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNkM5QworI2RlZmluZSBSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQgICAgICAgICAgICAgICAweDAwNkQ0OAorI2RlZmluZSAgIFNfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EoeCkgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRiAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04oeCkgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0FMV0FZU19PTiAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0sgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05UICAgICAgICAgICAgICAgMHgwMDZENEMKKyNkZWZpbmUgICBTXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04gICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2RDU4X0xCX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgICAgIDB4MDA2RDU4CisjZGVmaW5lICAgU18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSAgIFNfMDA2RDU4X0xCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQ1OF9MQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HKHgpICAgICAgICAoKCh4KSA+PiAxNikgJiAweEYpCisjZGVmaW5lICAgQ18wMDZENThfTEJfRDJfTUFYX1JFUV9PVVRTVEFORElORyAgICAgICAgICAgMHhGRkYwRkZGRgorCisKKyNkZWZpbmUgUl8wMDAwOTBfTUNfU1lTVEVNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTAKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19TWVNURU1fSURMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19TWVNURU1fSURMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19TWVNURU1fSURMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDkwX01DX0FSQklURVJfSURMRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDkwX01DX0FSQklURVJfSURMRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DX0FSQklURVJfSURMRSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19TRUxFQ1RfUE0oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19TRUxFQ1RfUE0oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19TRUxFQ1RfUE0gICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQ0KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQ0KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwOTBfUkVTRVJWRUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDAwMDkwX1JFU0VSVkVEOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVEOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVEOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDEyKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVEMTIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfSU5JVF9FWEVDVVRFRCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0lOSVRfRVhFQ1VURUQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9JTklUX0VYRUNVVEVEICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfU0VRX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX1NFUV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9TRVFfSURMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfQVJCX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0FSQl9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9BUkJfSURMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDIwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA5MF9SRVNFUlZFRDIwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweEZGRikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEZGRkZGCisjZGVmaW5lIFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwCisjZGVmaW5lICAgU18wMDAxMDBfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMDBfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMDBfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTAwX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDEwMF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMDBfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSICAgICAgICAgICAgICAweDAwMDEwNAorI2RlZmluZSAgIFNfMDAwMTA0X01DX0NQUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTA0X01DX0NQUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0NQUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19WRl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19WRl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDEwNF9NQ19WRl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjBGCisjZGVmaW5lICAgU18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDgpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgMHhGRkZGRjBGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRElTUDFSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgMHhGRkZGMEZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0ZJWEVEX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19GSVhFRF9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRklYRURfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgMHhGRkYwRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0UyUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19FMlJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRTJSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgICAgMHhGRjBGRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X1NBTUVfUEFHRV9QUklPKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDEwNF9TQU1FX1BBR0VfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfU0FNRV9QQUdFX1BSSU8gICAgICAgICAgICAgICAgICAgICAgMHhGMEZGRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0dMT0JXX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19HTE9CV19JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfR0xPQldfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTByLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGQ5ZmFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTByLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IERhdmUgQWlybGllCi0gKiAgICAgICAgICBBbGV4IERldWNoZXIKLSAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKLSAqLwotI2lmbmRlZiBSUzY5MFJfSAotI2RlZmluZSBSUzY5MFJfSAotCi0vKiBSUzY5MC9SUzc0MCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTUNfSU5ERVgJCQkweDAwNzgKLSMJZGVmaW5lIE1DX0lOREVYX01BU0sJCQkweDFGRgotIwlkZWZpbmUgTUNfSU5ERVhfV1JfRU4JCQkoMSA8PCA5KQotIwlkZWZpbmUgTUNfSU5ERVhfV1JfQUNLCQkJMHg3RgotI2RlZmluZSBNQ19EQVRBCQkJCTB4MDA3QwotI2RlZmluZSBIRFBfRkJfTE9DQVRJT04JCQkweDAxMzQKLSNkZWZpbmUgRENfTEJfTUVNT1JZX1NQTElUCQkweDY1MjAKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9NQVNLCQkJMHgwMDAwMDAwMwotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX1NISUZUCQkwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRgkwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVEJCTEKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZCQkyCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1EJCTMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVF9NT0RFCQkoMSA8PCAyKQotI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9TSElGVAkJNAotI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9NQVNLCQkweDAwMDA3RkYwCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2NTQ4Ci0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX01BUktfTUFTSwkJCTB4MDAwMDdGRkYKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfT0ZGCQkJKDEgPDwgMTYpCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX0FMV0FZU19PTgkJCSgxIDw8IDIwKQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9GT1JDRV9NQVNLCQkoMSA8PCAyNCkKLSNkZWZpbmUgRDFNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDY1NEMKLSNkZWZpbmUgTEJfTUFYX1JFUV9PVVRTVEFORElORwkJMHg2RDU4Ci0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwMDAwMEYKLSNkZWZpbmUJCUxCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfTUFTSwkJMHgwMDBGMDAwMAotI2RlZmluZQkJTEJfRDJfTUFYX1JFUV9PVVRTVEFORElOR19TSElGVAkJMTYKLSNkZWZpbmUgRENQX0NPTlRST0wJCQkweDZDOUMKLSNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0FfQ05UCQkweDZENDgKLSNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDZENEMKLQotLyogTUMgaW5kaXJlY3QgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1DX1NUQVRVU19JRExFCQkJCSgxIDw8IDApCi0jZGVmaW5lIE1DX01JU0NfQ05UTAkJCTB4MTgKLSNkZWZpbmUJCURJU0FCTEVfR1RXCQkJKDEgPDwgMSkKLSNkZWZpbmUJCUdBUlRfSU5ERVhfUkVHX0VOCQkoMSA8PCAxMikKLSNkZWZpbmUJCUJMT0NLX0dGWF9EM19FTgkJCSgxIDw8IDE0KQotI2RlZmluZSBHQVJUX0ZFQVRVUkVfSUQJCQkweDJCCi0jZGVmaW5lCQlIQU5HX0VOCQkJCSgxIDw8IDExKQotI2RlZmluZQkJVExCX0VOQUJMRQkJCSgxIDw8IDE4KQotI2RlZmluZQkJUDJQX0VOQUJMRQkJCSgxIDw8IDE5KQotI2RlZmluZQkJR1RXX0xBQ19FTgkJCSgxIDw8IDI1KQotI2RlZmluZQkJTEVWRUwyX0dBUlQJCQkoMCA8PCAzMCkKLSNkZWZpbmUJCUxFVkVMMV9HQVJUCQkJKDEgPDwgMzApCi0jZGVmaW5lCQlQRENfRU4JCQkJKDEgPDwgMzEpCi0jZGVmaW5lIEdBUlRfQkFTRQkJCTB4MkMKLSNkZWZpbmUgR0FSVF9DQUNIRV9DTlRSTAkJMHgyRQotIwlkZWZpbmUgR0FSVF9DQUNIRV9JTlZBTElEQVRFCQkoMSA8PCAwKQotI2RlZmluZSBNQ19TVEFUVVMJCQkweDkwCi0jZGVmaW5lIE1DQ0ZHX0ZCX0xPQ0FUSU9OCQkweDEwMAotI2RlZmluZQkJTUNfRkJfU1RBUlRfTUFTSwkJMHgwMDAwRkZGRgotI2RlZmluZQkJTUNfRkJfU1RBUlRfU0hJRlQJCTAKLSNkZWZpbmUJCU1DX0ZCX1RPUF9NQVNLCQkJMHhGRkZGMDAwMAotI2RlZmluZQkJTUNfRkJfVE9QX1NISUZUCQkJMTYKLSNkZWZpbmUgTUNDRkdfQUdQX0xPQ0FUSU9OCQkweDEwMQotI2RlZmluZQkJTUNfQUdQX1NUQVJUX01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUJCU1DX0FHUF9TVEFSVF9TSElGVAkJMAotI2RlZmluZQkJTUNfQUdQX1RPUF9NQVNLCQkJMHhGRkZGMDAwMAotI2RlZmluZQkJTUNfQUdQX1RPUF9TSElGVAkJMTYKLSNkZWZpbmUgTUNDRkdfQUdQX0JBU0UJCQkweDEwMgotI2RlZmluZSBNQ0NGR19BR1BfQkFTRV8yCQkweDEwMwotI2RlZmluZSBNQ19JTklUX01JU0NfTEFUX1RJTUVSCQkweDEwNAotI2RlZmluZQkJTUNfRElTUDBSX0lOSVRfTEFUX1NISUZUCTgKLSNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9NQVNLCQkweDAwMDAwRjAwCi0jZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQJMTIKLSNkZWZpbmUJCU1DX0RJU1AxUl9JTklUX0xBVF9NQVNLCQkweDAwMDBGMDAwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjIwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMzk4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjIwMERfSF9fCisjZGVmaW5lIF9fUlYyMDBEX0hfXworCisjZGVmaW5lIFJfMDAwMTVDX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTVDCisjZGVmaW5lICAgU18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxNUNfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyNTBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTcwYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjI1MERfSF9fCisjZGVmaW5lIF9fUlYyNTBEX0hfXworCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTF9NNiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzVjNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JWMzUwRF9IX18KKyNkZWZpbmUgX19SVjM1MERfSF9fCisKKy8qIFJWMzUwLCBSVjM4MCByZWdpc3RlcnMgKi8KKy8qICNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQgKi8KKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggZmQ3OTk3NC4uNzkzNWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMjksMzcgKzI5LDE3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJ2NTE1ZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotCisjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgInJ2NTE1X3JlZ19zYWZlLmgiCi0vKiBydjUxNSBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiBydjUxNQotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHJ2NTE1ICovCiBpbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY1MTVfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KIAlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7CiAJfQpAQCAtNjksNjcgKzQ5LDggQEAKIAlpZiAocnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQocmRldikpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKIAl9Ci0KLQlydjUxNV9ncHVfaW5pdChyZGV2KTsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnY1MTVfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IFJFR19TRVQoTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDEzNCwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKE1DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChNQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKE1DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihIRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQkJV1JFRzMyX01DKE1DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhNQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIDApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwogfQogCi12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTE5OCwxMSArMTE5LDYgQEAKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogfQogCi12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTIxOSw2ICsxMzUsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKKwkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKK30KKwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwpAQCAtMjMxLDcgKzE1NSw3IEBACiAJCSAgICAgICAicmVzZXRpbmcgR1BVLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwpAQCAtMzM1LDEwICsyNTksNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcnY1MTVfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0zNzQsMTAgKzI5NCw2IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJ2NTE1X21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzk1LDkgKzMxMSw2IEBACiAJV1JFRzMyKE1DX0lORF9JTkRFWCwgMCk7CiB9CiAKLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDU5LDEzICszNzIsMjU5IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIEFzaWMgaW5pdGlhbGl6YXRpb24KLSAqLwotaW50IHJ2NTE1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPmQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCk7CisJc2F2ZS0+ZDJ2Z2FfY29udHJvbCA9IFJSRUczMihSXzAwMDMzOF9EMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMDBfVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMjhfVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5kMWNydGNfY29udHJvbCA9IFJSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCk7CisJc2F2ZS0+ZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wpOworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2MDgwX0QxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworfQorCit2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKFJfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKFJfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwMzI4X1ZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKwordm9pZCBydjUxNV9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDAxX01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDFfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDFfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwMl9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwMl9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwMl9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDAzX01DX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDAyX01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwM19NQ19BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwlXUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMKSB8IFNfMDAwMDBGX0NQX0ZPUkNFT04oMSkpOworCVdSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwsCisJCVJSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwpIHwgU18wMDAwMTFfRTJfRk9SQ0VPTigxKSk7CisJV1JFRzMyX1BMTChSXzAwMDAxM19JRENUX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwpIHwgU18wMDAwMTNfSURDVF9GT1JDRU9OKDEpKTsKK30KKworc3RhdGljIGludCBydjUxNV9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnY1MTVfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlydjUxNV9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiBydjUxNV9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7Cit9CisKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjUxNV9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKyAgICBydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJ2NTE1X3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnY1MTVfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKaW5kZXggYTY1ZTE3ZS4uZmMyMTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ZC5oCkBAIC0yMTYsNSArMjE2LDM4OCBAQAogI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCiAjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCiAKLSNlbmRpZgorLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDMwMF9WR0FfUkVOREVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDMwMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUYpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0JMSU5LX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMzAwX1ZHQV9CTElOS19NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGOUYKKyNkZWZpbmUgICBTXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9WU1RBVFVTX0NOVEwoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX1ZTVEFUVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9MT0NLXzhET1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfTE9DS184RE9UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0xPQ0tfOERPVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQVJFR19MSU5FQ01QX0NPTVBBVElCSUxJVFlfU0VMKHgpICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FSRUdfTElORUNNUF9DT01QQVRJQklMSVRZX1NFTCh4KSAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBUkVHX0xJTkVDTVBfQ09NUEFUSUJJTElUWV9TRUwgICAgMHhGREZGRkZGRgorI2RlZmluZSBSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAweDAwMDMxMAorI2RlZmluZSAgIFNfMDAwMzEwX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTKHgpICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyh4KSAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAzMTBfVkdBX01FTU9SWV9CQVNFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDMyOF9WR0FfSERQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDAwMDMyOAorI2RlZmluZSAgIFNfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4gICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1NPRlRfUkVTRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1RFU1RfUkVTRVRfQ09OVFJPTCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9URVNUX1JFU0VUX0NPTlRST0woeCkgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfVEVTVF9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMzMwX0QxVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzMwCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwMzM4X0QyVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzM4CisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkJCTV9ISUJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0tJRF9DRkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX1ZGX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDAwNjA4MAorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSh4KSAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFKHgpICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweDAwNjBFOAorI2RlZmluZSAgIFNfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgUl8wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgMHgwMDYxMTAKKyNkZWZpbmUgICBTXzAwNjExMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MoeCkgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgMHgwMDYxMTgKKyNkZWZpbmUgICBTXzAwNjExOF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4ODAKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFKHgpICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUoeCkgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDY4RThfRDJDUlRDX1VQREFURV9MT0NLICAgICAgICAgICAgICAgICAgMHgwMDY4RTgKKyNkZWZpbmUgICBTXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDA2OTEwCisjZGVmaW5lICAgU18wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDA2OTE4CisjZGVmaW5lICAgU18wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKHgpICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxOF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAweDAwMDAwMDAwCiAKKworI2RlZmluZSBSXzAwMDAwMV9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMQorI2RlZmluZSAgIFNfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMV9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDFfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDJfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIKKyNkZWZpbmUgICBTXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDJfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDAyX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDAzX01DX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzCisjZGVmaW5lICAgU18wMDAwMDNfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAzX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwM19BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA0X01DX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDRfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisKKyNkZWZpbmUgUl8wMDAwMEZfQ1BfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwMEZfQ1BfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgICAweEZGRkZGMDBGCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAgIDB4RkZGMDBGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMEZfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMDBGX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYzRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBSXzAwMDAxMV9FMl9EWU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMQorI2RlZmluZSAgIFNfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX0ZPUkNFT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfU0hVVE9GRiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9QUk9HX0RFTEFZX1ZBTFVFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfREVMQVlfVkFMVUUgICAgICAgICAgICAgICAgIDB4RkZGRkYwMEYKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lETEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSURMRSAgICAgICAgICAgICAgICAgMHhGRkYwMEZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSUdOT1JFICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAxMV9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAwMTFfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjNGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0JVU1koeCkgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfQlVTWSAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgMHhGRkZGRjAwRgorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAweEZGRjAwRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDEzX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDAxM19TUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGM0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggYjU3NGM3My4uYjBlZmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJydjc3MGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKICNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCkBAIC03NSw3ICs3NSw3IEBACiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCByZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIHJkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05URVhUIHwgUEFHRV9UQUJMRV9ERVBUSCgwKSB8CiAJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCk7CkBAIC0xMjYsMTcgKzEyNiwzNiBAQAogfQogCiAKLS8qCi0gKiBNQwotICovCi1zdGF0aWMgdm9pZCBydjc3MF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NzcwX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKworc3RhdGljIHZvaWQgcnY3NzBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiB0bXA7CiAJaW50IGksIGo7CiAKQEAgLTE1MCw1MyArMTY5LDQyIEBACiAJfQogCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7Ci0JZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKLQlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7Ci0JZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOwotCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQotCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0KLQltZGVsYXkoMSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KIAkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCiAJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKLQogCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCi0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewpAQCAtMjA0LDM0ICsyMTIsMTMgQEAKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogCkBAIC01NDIsMTEgKzUyOSwxMSBAQAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCi0JCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19TSElGVCkgPj4gTk9PRkJBTktfTUFTSyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CiAKLQlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgJiBOT09GUk9XU19TSElGVCkgPiAzKSB7CisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwogCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKIAl9IGVsc2UgewpAQCAtNTkyLDE0ICs1NzksMTQgQEAKIAogCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCiAJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKLQkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwkJCQkgICAgIFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkJCVNZTkNfR1JBRElFTlQgfAotCQkJCQlTWU5DX1dBTEtFUiB8Ci0JCQkJCVNZTkNfQUxJR05FUikpOworCQkJICAgICBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfAorCQkJICAgICBTWU5DX0FMSUdORVIpKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNjExLDkgKzU5OCw5IEBACiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKIAlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCQkJICBTWU5DX0ZMVVNIX0NUTCkpOworCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CkBAIC02MjQsMTIgKzYxMSwxMiBAQAogCX0KIAogCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKIAlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CiAKIAlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKIApAQCAtNzg3LDIwICs3NzQsNDkgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKLQkgKiB2cmFtX3dpZHRoIHVzYWdlCi0JICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC04MzMsOSArODQ5LDkgQEAKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC04NTQsMTEgKzg3MCwxNCBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKLQlydjc3MF9tY19yZXN1bWUocmRldik7Ci0JciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXJ2NzcwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlydjc3MF9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlydjc3MF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTg3Nyw5ICs4OTYsOCBAQAogCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHI2MDBfd2JfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NywxNSArOTA1LDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC05MDgsNyArOTIzLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtOTIyLDggKzkzNyw4IEBACiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwogCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyZXR1cm4gMDsKQEAgLTkzOSw3ICs5NTQsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtOTUzLDggKzk2NywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTk2NywyNCArOTgzLDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHJ2NzcwX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTAxMywxMiArMTAyNSwxMCBAQAogCiAJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CiAJaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCQlydjc3MF9zdXNwZW5kKHJkZXYpOworCQlyNjAwX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xMDI3LDcgKzEwMzcsNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTA0MiwyMCArMTA1MiwxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7CiAJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDRiOWMzZDYuLmExMzY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTI5LDYgKzEyOSwxMCBAQAogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQwogCisjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMwpAQCAtMTQyLDYgKzE0Niw3IEBACiAjZGVmaW5lCQlDSEFOU0laRV9NQVNLCQkJCQkweDAwMDAwMTAwCiAjZGVmaW5lCQlCVVJTVExFTkdUSF9TSElGVAkJCQk5CiAjZGVmaW5lCQlCVVJTVExFTkdUSF9NQVNLCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJCUNIQU5TSVpFX09WRVJSSURFCQkJCSgxIDw8IDExKQogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCmluZGV4IDMzZGU3NjMuLjFjMDQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CiAJLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAogCS5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCiAJLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDU0MTc0NGQuLmIxNzAwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJKytpdGVtLT5yZWZjb3VudDsKIAl9CisJKytpdGVtLT5yZWZjb3VudDsKIAlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKIAlvYmplY3QgPSBpdGVtLT5vYmplY3Q7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBhNTVlZTFhLi43YmNiODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTI3OSw2ICsyNzksNyBAQAogCiAJcmV0dXJuIHR0bV90dF9zZXRfY2FjaGluZyh0dG0sIHN0YXRlKTsKIH0KK0VYUE9SVF9TWU1CT0wodHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyk7CiAKIHN0YXRpYyB2b2lkIHR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggYmUzNGQzMi4uN2QwNWM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICogQHR5cGU6IEhJRCByZXBvcnQgdHlwZSAoSElEXypfUkVQT1JUKQogICogQGRhdGE6IHJlcG9ydCBjb250ZW50cwogICogQHNpemU6IHNpemUgb2YgZGF0YSBwYXJhbWV0ZXIKLSAqIEBpbnRlcnJ1cHQ6IGNhbGxlZCBmcm9tIGF0b21pYz8KKyAqIEBpbnRlcnJ1cHQ6IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHRyYW5zZmVycwogICoKICAqIFRoaXMgaXMgZGF0YSBlbnRyeSBmb3IgbG93ZXIgbGF5ZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwppbmRleCBiMDVmNjAyLi5jNDBhZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSB0d2luaGFuX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHR3aW5oYW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdHdpbmhhbl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHdpbmhhbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdpbmhhbl9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0d2luaGFuX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDBjNjYzOWUuLmNkZDEzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgpAQCAtNDcsMTAgKzQ4LDkgQEAKIAljaGFyICpyZXBvcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKKwltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwogCXdoaWxlIChyZXQgPT0gMCkgewotCi0JCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwotCiAJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKIAkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRyYXctPndhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjg1NzU2MC4uNzAwZTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNjc1LDcgKzY3NSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1MzQwogCXRyaXN0YXRlICJTM0MyNFhYL1MzQzY0WFggSW5idWlsdCBBREMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIG9uLWJvYXJkIEFEQ3Mgb2YKIAkgIHRoZSBTYW1zdW5nIFMzQzI0WFggb3IgUzNDNjRYWCBzZXJpZXMgb2YgU29DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCmluZGV4IGQzOTg3N2EuLmI1YTk1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCkBAIC0zNTAsOCArMzUwLDcgQEAKIAogCWNhc2UgRkFVTFQ6CiAJCS8qIE5vdGUgLSBvbmx5IGZvciByZW1vdGUxIGFuZCByZW1vdGUyICovCi0JCW91dCA9IGRhdGEtPmFsYXJtcyAmIChzYXR0ci0+aW5kZXggPyAweDgwMDAgOiAweDQwMDApOwotCQlvdXQgPSBvdXQgPyAwIDogMTsKKwkJb3V0ID0gISEoZGF0YS0+YWxhcm1zICYgKHNhdHRyLT5pbmRleCA/IDB4ODAwMCA6IDB4NDAwMCkpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04NjMsNyArODYyLDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMCk7CkBAIC04NzUsNyArODc0LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMSk7CkBAIC04ODcsNyArODg2LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMik7CkBAIC05NDcsMTkgKzk0NiwxOSBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCkBAIC0xMTUyLDcgKzExNTEsNyBAQAogCX0KIAogCS8qIExpbWl0cyBhbmQgc2V0dGluZ3MsIHNob3VsZCBuZXZlciBjaGFuZ2UgdXBkYXRlIGV2ZXJ5IDYwIHNlY29uZHMgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogMikgfHwKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogNjApIHx8CiAJICAgICFkYXRhLT52YWxpZCkgewogCQlkYXRhLT5jb25maWc1ID0gYWR0NzQ3NV9yZWFkKFJFR19DT05GSUc1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggZmU0ZmEyOS4uNWEzZWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0zNSwxOCArMzUsMjIgQEAKICNkZWZpbmUgTUVUSE9EX09MRF9FTlVNX0ZBTgkiRlNJRiIKIAogI2RlZmluZSBBVEtfTVVYX0hXTU9OCQkweDAwMDAwMDA2VUxMCisjZGVmaW5lIEFUS19NVVhfTUdNVAkJMHgwMDAwMDAxMVVMTAogCiAjZGVmaW5lIEFUS19DTEFTU19NQVNLCQkweGZmMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GUkVRX0NUTAkweDAzMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GQU5fQ1RMCTB4MDQwMDAwMDBVTEwKICNkZWZpbmUgQVRLX0NMQVNTX0hXTU9OCQkweDA2MDAwMDAwVUxMCisjZGVmaW5lIEFUS19DTEFTU19NR01UCQkweDExMDAwMDAwVUxMCiAKICNkZWZpbmUgQVRLX1RZUEVfTUFTSwkJMHgwMGZmMDAwMFVMTAogI2RlZmluZSBIV01PTl9UWVBFX1ZPTFQJCTB4MDAwMjAwMDBVTEwKICNkZWZpbmUgSFdNT05fVFlQRV9URU1QCQkweDAwMDMwMDAwVUxMCiAjZGVmaW5lIEhXTU9OX1RZUEVfRkFOCQkweDAwMDQwMDAwVUxMCiAKLSNkZWZpbmUgSFdNT05fU0VOU09SX0lEX01BU0sJMHgwMDAwZmZmZlVMTAorI2RlZmluZSBBVEtfRUxFTUVOVF9JRF9NQVNLCTB4MDAwMGZmZmZVTEwKKworI2RlZmluZSBBVEtfRUNfSUQJCTB4MTEwNjAwMDRVTEwKIAogZW51bSBhdGtfcGFja19tZW1iZXIgewogCUhXTU9OX1BBQ0tfRkxBR1MsCkBAIC04OSw2ICs5Myw5IEBACiAJLyogbmV3IGludGVmYWNlICovCiAJYWNwaV9oYW5kbGUgZW51bWVyYXRlX2hhbmRsZTsKIAlhY3BpX2hhbmRsZSByZWFkX2hhbmRsZTsKKwlhY3BpX2hhbmRsZSB3cml0ZV9oYW5kbGU7CisKKwlib29sIGRpc2FibGVfZWM7CiAKIAlpbnQgdm9sdGFnZV9jb3VudDsKIAlpbnQgdGVtcGVyYXR1cmVfY291bnQ7CkBAIC0xMjksOSArMTM2LDIyIEBACiAJY2hhciBjb25zdCAqYWNwaV9uYW1lOwogfTsKIAotc3RydWN0IGF0a19hY3BpX2J1ZmZlcl91NjQgewotCXVuaW9uIGFjcGlfb2JqZWN0IGJ1ZjsKLQl1NjQgdmFsdWU7CisvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKKyAqIFswLTNdICJ2YWx1ZSIgaXMgdmFsaWQgZmxhZworICogWzQtN10gdmFsdWUKKyAqIFs4LSBdIHVua25vd24gc3R1ZmYgb24gbmV3ZXIgbW9ib3MKKyAqLworc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgeworCXUzMiBmbGFnczsKKwl1MzIgdmFsdWU7CisJdTggZGF0YVtdOworfTsKKworLyogSW5wdXQgYnVmZmVyIHVzZWQgZm9yIEdJVE0gYW5kIFNJVE0gbWV0aG9kcyAqLworc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiB7CisJdTMyIGlkOworCXUzMiBwYXJhbTE7CisJdTMyIHBhcmFtMjsKIH07CiAKIHN0YXRpYyBpbnQgYXRrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CkBAIC00MzksNTIgKzQ1OSwxNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfZ2dycChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsIHUxNiBtdXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKKwlhY3BpX3N0YXR1cyByZXQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGlkOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOworCisJaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlkLmludGVnZXIudmFsdWUgPSBtdXg7CisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpZDsKKworCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLCAmYnVmKTsKKwlpZiAocmV0ICE9IEFFX09LKSB7CisJCWRldl9lcnIoZGV2LCAiR0dSUFslI3hdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgbXV4LAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihyZXQpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXBhY2sgPSBidWYucG9pbnRlcjsKKwlpZiAocGFjay0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQkvKiBFeGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGJ1dCB0aGUgaWQgd2FzIG5vdCBmb3VuZCAqLworCQlBQ1BJX0ZSRUUocGFjayk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCWlmIChwYWNrLT5wYWNrYWdlLmNvdW50IDwgMSkgeworCQlkZXZfZXJyKGRldiwgIkdHUlBbJSN4XSBwYWNrYWdlIGlzIHRvbyBzbWFsbFxuIiwgbXV4KTsKKwkJQUNQSV9GUkVFKHBhY2spOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIHBhY2s7Cit9CisKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX2dpdG0oc3RydWN0IGF0a19kYXRhICpkYXRhLCB1NjQgaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiBidWY7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJYnVmLmlkID0gaWQ7CisJYnVmLnBhcmFtMSA9IDA7CisJYnVmLnBhcmFtMiA9IDA7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopJmJ1ZjsKKwl0bXAuYnVmZmVyLmxlbmd0aCA9IHNpemVvZihidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICh2b2lkICopJnRtcDsKKworCXJldC5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKKwkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJZGV2X3dhcm4oZGV2LCAiR0lUTVslI2xseF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBpZCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlvYmogPSByZXQucG9pbnRlcjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChvYmotPmJ1ZmZlci5sZW5ndGggPCA4KSB7CisJCWRldl93YXJuKGRldiwgIlVuZXhwZWN0ZWQgQVNCRiBsZW5ndGg6ICV1XG4iLAorCQkJCW9iai0+YnVmZmVyLmxlbmd0aCk7CisJCUFDUElfRlJFRShvYmopOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfc2l0bShzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsCisJCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXQ7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopYnVmOworCXRtcC5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKCpidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZ0bXA7CisKKwlyZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+d3JpdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLAorCQkJJnJldCwgQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlkZXZfd2FybihkZXYsICJTSVRNWyUjeF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBidWYtPmlkLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCW9iaiA9IHJldC5wb2ludGVyOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCA8IDgpIHsKKwkJZGV2X3dhcm4oZGV2LCAiVW5leHBlY3RlZCBBU0JGIGxlbmd0aDogJXVcbiIsCisJCQkJb2JqLT5idWZmZXIubGVuZ3RoKTsKKwkJQUNQSV9GUkVFKG9iaik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlyZXR1cm4gb2JqOworfQorCiBzdGF0aWMgaW50IGF0a19yZWFkX3ZhbHVlX25ldyhzdHJ1Y3QgYXRrX3NlbnNvcl9kYXRhICpzZW5zb3IsIHU2NCAqdmFsdWUpCiB7CiAJc3RydWN0IGF0a19kYXRhICpkYXRhID0gc2Vuc29yLT5kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwotCXN0cnVjdCBhdGtfYWNwaV9idWZmZXJfdTY0IHRtcDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqYnVmOworCWludCBlcnIgPSAwOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBzZW5zb3ItPmlkOworCW9iaiA9IGF0a19naXRtKGRhdGEsIHNlbnNvci0+aWQpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQl0bXAuYnVmLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCXRtcC5idWYuYnVmZmVyLnBvaW50ZXIgPSAodTggKikmdG1wLnZhbHVlOwotCXRtcC5idWYuYnVmZmVyLmxlbmd0aCA9IHNpemVvZih1NjQpOwotCXJldC5sZW5ndGggPSBzaXplb2YodG1wKTsKLQlyZXQucG9pbnRlciA9ICZ0bXA7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOwotCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKLQkJZGV2X3dhcm4oZGV2LCAiJXM6IEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgX19mdW5jX18sCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKLQkgKiBbMC0zXSAidmFsdWUiIGlzIHZhbGlkIGZsYWcKLQkgKiBbNC03XSB2YWx1ZQotCSAqLwotCWlmICghKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYpKSB7CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoYnVmLT5mbGFncyA9PSAwKSB7CiAJCS8qIFRoZSByZWFkaW5nIGlzIG5vdCB2YWxpZCwgcG9zc2libGUgY2F1c2VzOgogCQkgKiAtIHNlbnNvciBmYWlsdXJlCiAJCSAqIC0gZW51bWVyYXRpb24gd2FzIEZVQkFSIChhbmQgd2UgZGlkbid0IG5vdGljZSkKIAkJICovCi0JCWRldl9pbmZvKGRldiwgIkZhaWx1cmU6ICUjbGx4XG4iLCB0bXAudmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKKwkJZGV2X3dhcm4oZGV2LCAiUmVhZCBmYWlsZWQsIHNlbnNvciA9ICUjbGx4XG4iLCBzZW5zb3ItPmlkKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JKnZhbHVlID0gKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0KLQlyZXR1cm4gMDsKKwkqdmFsdWUgPSBidWYtPnZhbHVlOworb3V0OgorCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgYXRrX3JlYWRfdmFsdWUoc3RydWN0IGF0a19zZW5zb3JfZGF0YSAqc2Vuc29yLCB1NjQgKnZhbHVlKQpAQCAtNzEzLDQyICs4MjgsMTQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdGtfZWNfcHJlc2VudChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKnBhY2s7CisJdW5pb24gYWNwaV9vYmplY3QgKmVjOworCWludCByZXQ7CisJaW50IGk7CisKKwlwYWNrID0gYXRrX2dncnAoZGF0YSwgQVRLX01VWF9NR01UKTsKKwlpZiAoSVNfRVJSKHBhY2spKSB7CisJCWlmIChQVFJfRVJSKHBhY2spID09IC1FTk9FTlQpIHsKKwkJCS8qIFRoZSBNR01UIGNsYXNzIGRvZXMgbm90IGV4aXN0cyAtIHRoYXQncyBvayAqLworCQkJZGV2X2RiZyhkZXYsICJDbGFzcyAlI2xseCBub3QgZm91bmRcbiIsIEFUS19NVVhfTUdNVCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKKwl9CisKKwkvKiBTZWFyY2ggdGhlIEVDICovCisJZWMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCQl1bmlvbiBhY3BpX29iamVjdCAqaWQ7CisKKwkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gJm9iai0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJaWYgKGlkLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkLT5pbnRlZ2VyLnZhbHVlID09IEFUS19FQ19JRCkgeworCQkJZWMgPSBvYmo7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldCA9IChlYyAhPSBOVUxMKTsKKwlpZiAoIXJldCkKKwkJLyogVGhlIHN5c3RlbSBoYXMgbm8gRUMgKi8KKwkJZGV2X2RiZyhkZXYsICJFQyBub3QgZm91bmRcbiIpOworCisJQUNQSV9GUkVFKHBhY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXRrX2VjX2VuYWJsZWQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyOworCisJb2JqID0gYXRrX2dpdG0oZGF0YSwgQVRLX0VDX0lEKTsKKwlpZiAoSVNfRVJSKG9iaikpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKworCWlmIChidWYtPmZsYWdzID09IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQllcnIgPSAoYnVmLT52YWx1ZSAhPSAwKTsKKwkJZGV2X2RiZyhkZXYsICJFQyBpcyAlc2FibGVkXG4iLAorCQkJCWVyciA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdGtfZWNfY3RsKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgc2l0bTsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqZWNfcmV0OworCWludCBlcnIgPSAwOworCisJc2l0bS5pZCA9IEFUS19FQ19JRDsKKwlzaXRtLnBhcmFtMSA9IGVuYWJsZTsKKwlzaXRtLnBhcmFtMiA9IDA7CisKKwlvYmogPSBhdGtfc2l0bShkYXRhLCAmc2l0bSk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJZWNfcmV0ID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoZWNfcmV0LT5mbGFncyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJFQyAlc2FibGVkXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhdGtfZW51bWVyYXRlX25ld19od21vbihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKLQlhY3BpX3N0YXR1cyByZXQ7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOwogCWludCBlcnI7CiAJaW50IGk7CiAKKwllcnIgPSBhdGtfZWNfcHJlc2VudChkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKSB7CisJCWVyciA9IGF0a19lY19lbmFibGVkKGRhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCS8qIElmIHRoZSBFQyB3YXMgZGlzYWJsZWQgd2Ugd2lsbCBkaXNhYmxlIGl0IGFnYWluIG9uIHVubG9hZCAqLworCQlkYXRhLT5kaXNhYmxlX2VjID0gZXJyOworCisJCWVyciA9IGF0a19lY19jdGwoZGF0YSwgMSk7CisJCWlmIChlcnIpIHsKKwkJCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlkZXZfZGJnKGRldiwgIkVudW1lcmF0aW5nIGh3bW9uIHNlbnNvcnNcbiIpOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBBVEtfTVVYX0hXTU9OOwotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7Ci0JcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZidWYsIEFDUElfVFlQRV9QQUNLQUdFKTsKLQlpZiAocmV0ICE9IEFFX09LKSB7Ci0JCWRldl93YXJuKGRldiwgTUVUSE9EX0VOVU1FUkFURSAiOiBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHJldCkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZXN1bHQgbXVzdCBiZSBhIHBhY2thZ2UgKi8KLQlwYWNrID0gYnVmLnBvaW50ZXI7Ci0KLQlpZiAocGFjay0+cGFja2FnZS5jb3VudCA8IDEpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogaHdtb24gcGFja2FnZSBpcyB0b28gc21hbGw6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCQlwYWNrLT5wYWNrYWdlLmNvdW50KTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCXBhY2sgPSBhdGtfZ2dycChkYXRhLCBBVEtfTVVYX0hXTU9OKTsKKwlpZiAoSVNfRVJSKHBhY2spKQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKIAkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNzU4LDggKzk3MSw3IEBACiAKIAllcnIgPSBkYXRhLT52b2x0YWdlX2NvdW50ICsgZGF0YS0+dGVtcGVyYXR1cmVfY291bnQgKyBkYXRhLT5mYW5fY291bnQ7CiAKLW91dDoKLQlBQ1BJX0ZSRUUoYnVmLnBvaW50ZXIpOworCUFDUElfRlJFRShwYWNrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04OTUsNiArMTEwNywxNSBAQAogCX0KIAlkYXRhLT5yZWFkX2hhbmRsZSA9IHJldDsKIAorCS8qIERlLW11bHRpcGxleGVyICh3cml0ZSkgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX1dSSVRFLCAmcmV0KTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX1JFQUQgIiBub3QgZm91bmQ6ICVzXG4iLAorCQkJCSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYXRhLT53cml0ZV9oYW5kbGUgPSByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDYgKzExMzYsNyBAQAogCWRhdGEtPmFjcGlfZGV2ID0gZGV2aWNlOwogCWRhdGEtPmF0a19oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlJTklUX0xJU1RfSEVBRCgmZGF0YS0+c2Vuc29yX2xpc3QpOworCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKIAogCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKIAlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5hdGtfaGFuZGxlLCBCT0FSRF9JRCwgTlVMTCwKQEAgLTk3Myw2ICsxMTk1LDggQEAKIGNsZWFudXA6CiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIG91dDoKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykKKwkJYXRrX2VjX2N0bChkYXRhLCAwKTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTg4LDYgKzEyMTIsMTEgQEAKIAlhdGtfZnJlZV9zZW5zb3JzKGRhdGEpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykgeworCQlpZiAoYXRrX2VjX2N0bChkYXRhLCAwKSkKKwkJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRUNcbiIpOworCX0KKwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IDJjMmNiMWVjLi4yN2Q2MjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtNTcyLDcgKzU3Miw3IEBACiAKIAkvKiBTYW1wbGUgcmVnaXN0ZXIgY29udGVudHMgZXZlcnkgMSBzZWMgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZSArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgeworCQlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCQlkYXRhLT52aWQgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfVklEKSAmCiAJCQkJMHgzZjsKIAkJfQpAQCAtMTYyMSw5ICsxNjIxLDYgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUxX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTJfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lM19hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkvKiBNaXNjICovCi0JJmRldl9hdHRyX3ZybS5hdHRyLAotCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTE2MzEsNiArMTYyOCwxOCBAQAogCS5hdHRycyA9IGRtZTE3MzdfbWlzY19hdHRyLAogfTsKIAorLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3QgaG9sZHMgVklELXJlbGF0ZWQgYXR0cmlidXRlcy4gVGhlaXIgY3JlYXRpb24KKyAgIGRlcGVuZHMgb24gdGhlIGNoaXAgdHlwZSB3aGljaCBpcyBkZXRlcm1pbmVkIGR1cmluZyBtb2R1bGUgbG9hZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkbWUxNzM3X3ZpZF9hdHRyW10gPSB7CisJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRtZTE3MzdfdmlkX2dyb3VwID0geworCS5hdHRycyA9IGRtZTE3MzdfdmlkX2F0dHIsCit9OworCiAvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHMgaG9sZCB0aGUgUFdNIGF0dHJpYnV0ZXMsIHNvbWUgb2Ygd2hpY2ggYXJlIG9wdGlvbmFsLgogICogVGhlaXIgY3JlYXRpb24gZGVwZW5kcyBvbiB0aGUgY2hpcCBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nCiAgKiBtb2R1bGUgbG9hZC4gKi8KQEAgLTE5MDIsNiArMTkxMSw5IEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfbWlzY19ncm91cCk7CiAJfQorCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X3ZpZF9ncm91cCk7CisJfQogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X2dyb3VwKTsKIApAQCAtMTkzMyw2ICsxOTQ1LDEzIEBACiAJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCisJLyogQ3JlYXRlIFZJRC1yZWxhdGVkIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KKwlpZiAoKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgJiYKKwkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICZkbWUxNzM3X3ZpZF9ncm91cCkpKSB7CisJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCiAJLyogQ3JlYXRlIGZhbiBzeXNmcyBhdHRyaWJ1dGVzICovCiAJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkbWUxNzM3X2Zhbl9ncm91cCk7IGl4KyspIHsKIAkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpeCkpIHsKQEAgLTIxMjcsNyArMjE0Niw3IEBACiAJZGF0YS0+cHdtX2FjelsyXSA9IDQ7CS8qIHB3bTMgLT4gem9uZTMgKi8KIAogCS8qIFNldCBWUk0gKi8KLQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgewogCQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBlYTk1NWVkLi5kYTFiMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogc3RhdGljIHNzaXplX3Qgd2F0Y2hkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzaXplX3QgcmV0OworCWludCByZXQ7CiAJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGNvdW50KSB7CkBAIC05MTUsNyArOTE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2F0Y2hkb2dfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS5vcGVuID0gd2F0Y2hkb2dfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwppbmRleCA2Njc5ODU0Li5iZTQ3NWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKKysrIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCkBAIC0xOTcsMTEgKzE5NywxMyBAQAogCUFYSVNfRE1JX01BVENIKCJIUDIxMzMiLCAiSFAgMjEzMyIsIHh5X3JvdGF0ZWRfbGVmdCksCiAJQVhJU19ETUlfTUFUQ0goIkhQMjE0MCIsICJIUCAyMTQwIiwgeHlfc3dhcF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUzeCIsICJIUCBDb21wYXEgNjUzIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCi0JQVhJU19ETUlfTUFUQ0goIk5DNjczeCIsICJIUCBDb21wYXEgNjczIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMGIiLCAiSFAgQ29tcGFxIDY3MzBiIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMHMiLCAiSFAgQ29tcGFxIDY3MzBzIiwgeHlfc3dhcCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUxeHgiLCAiSFAgQ29tcGFxIDY1MSIsIHh5X3JvdGF0ZWRfcmlnaHQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY3MTB4IiwgIkhQIENvbXBhcSA2NzEwIiwgeHlfc3dhcF95el9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxNXgiLCAiSFAgQ29tcGFxIDY3MTUiLCB5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgNjkzIiwgeHlfcm90YXRlZF9yaWdodCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjkzeHgiLCAiSFAgRWxpdGVCb29rIDg1MyIsIHh5X3N3YXApLAogCS8qIEludGVsLWJhc2VkIEhQIFBhdmlsaW9uIGR2NSAqLwogCUFYSVNfRE1JX01BVENIMigiSFBEVjVfSSIsCiAJCQlQUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjUiLApAQCAtMjE0LDYgKzIxNiw3IEBACiAJCQl5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiRFY3IiwgIkhQIFBhdmlsaW9uIGR2NyIsIHhfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJIUDg3MTAiLCAiSFAgQ29tcGFxIDg3MTAiLCB5X2ludmVydGVkKSwKKwlBWElTX0RNSV9NQVRDSCgiSERYMTgiLCAiSFAgSERYIDE4IiwgeF9pbnZlcnRlZCksCiAJeyBOVUxMLCB9CiAvKiBMYXB0b3AgbW9kZWxzIHdpdGhvdXQgYXhpcyBpbmZvICh5ZXQpOgogICogIk5DNjkxMCIgIkhQIENvbXBhcSA2OTEwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBmZmViMmExLi5hMzc0OWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtMTAyOCwxMiArMTAyOCwxMSBAQAogCQljaGlwX3R5cGUsICphZGRyZXNzLCBzaW9fZGF0YS0+cmV2aXNpb24pOwogCiAJLyogUmVhZCBHUElPIGNvbmZpZyBhbmQgVklEIHZhbHVlIGZyb20gTEROIDcgKEdQSU8pICovCi0JaWYgKGNoaXBfdHlwZSAhPSBJVDg3MDVGX0RFVklEKSB7CisJaWYgKHNpb19kYXRhLT50eXBlICE9IGl0ODcpIHsKIAkJaW50IHJlZzsKIAogCQlzdXBlcmlvX3NlbGVjdChHUElPKTsKLQkJaWYgKChjaGlwX3R5cGUgPT0gaXQ4NzE4KSB8fAotCQkgICAgKGNoaXBfdHlwZSA9PSBpdDg3MjApKQorCQlpZiAoc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzE4IHx8IHNpb19kYXRhLT50eXBlID09IGl0ODcyMCkKIAkJCXNpb19kYXRhLT52aWRfdmFsdWUgPSBzdXBlcmlvX2luYihJVDg3X1NJT19WSURfUkVHKTsKIAogCQlyZWcgPSBzdXBlcmlvX2luYihJVDg3X1NJT19QSU5YMl9SRUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYwppbmRleCBlY2Q3Mzk1Li44MmIxNjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYwpAQCAtODMsNyArODMsOCBAQAogCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAlsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSgpOwogCWxpczNsdjAyZF9wb3dlcm9mZihsaXMzKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBsaXMzbHYwMmRfcmVtb3ZlX2ZzKCZsaXMzX2Rldik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKaW5kZXggNmM5YTA0MS4uMDBkOTc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKQEAgLTIwLDExICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShsdGM0MjE1KTsKLQogLyogSGVyZSBhcmUgbmFtZXMgb2YgdGhlIGNoaXAncyByZWdpc3RlcnMgKGEuay5hLiBjb21tYW5kcykgKi8KIGVudW0gbHRjNDIxNV9jbWQgewogCUxUQzQyMTVfQ09OVFJPTAkJCT0gMHgwMCwgLyogcncgKi8KQEAgLTI0Niw5ICsyNDEsMTMgQEAKIHN0YXRpYyBpbnQgbHRjNDIxNV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjk0LDU2ICsyOTMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsdGM0MjE1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoa2luZCA8IDApIHsJCS8qIHByb2JlZCBkZXRlY3Rpb24gLSBjaGVjayB0aGUgY2hpcCB0eXBlICovCi0JCXMzMiB2OwkJLyogOCBiaXRzIGZyb20gdGhlIGNoaXAsIG9yIC1FUlJOTyAqLwotCi0JCS8qCi0JCSAqIFJlZ2lzdGVyIDB4MDEgYml0IGI3IGlzIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKiBSZWdpc3RlciAweDAzIGJpdCBiNiBhbmQgYjcgYXJlIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfQUxFUlQpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAoMSA8PCA3KSkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjE1X0ZBVUxUKTsKLQkJaWYgKHYgPCAwIHx8ICh2ICYgKCgxIDw8IDYpIHwgKDEgPDwgNykpKSAhPSAwKQotCQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImx0YzQyMTUiLCBJMkNfTkFNRV9TSVpFKTsKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibHRjNDIxNSAlcyBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJCWtpbmQgPCAwID8gInByb2JlZCIgOiAiZm9yY2VkIiwKLQkJCWNsaWVudC0+YWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzQyMTVfaWRbXSA9IHsKLQl7ICJsdGM0MjE1IiwgbHRjNDIxNSB9LAorCXsgImx0YzQyMTUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyMTVfaWQpOwogCiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDIxNV9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsdGM0MjE1IiwKIAl9LAogCS5wcm9iZQkJPSBsdGM0MjE1X3Byb2JlLAogCS5yZW1vdmUJCT0gbHRjNDIxNV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbHRjNDIxNV9pZCwKLQkuZGV0ZWN0CQk9IGx0YzQyMTVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbHRjNDIxNV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2x0YzQyNDUuYyBiL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCmluZGV4IGUzODk2NDMuLjY1YzIzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCkBAIC0yMiwxNSArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KIAotLyogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDIwIC0gMHgzZgotICoKLSAqIEZvciBub3csIHdlIGRvIG5vdCBwcm9iZSwgc2luY2Ugc29tZSBvZiB0aGVzZSBhZGRyZXNzZXMKLSAqIGFyZSBrbm93biB0byBiZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGx0YzQyNDUpOwotCiAvKiBIZXJlIGFyZSBuYW1lcyBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAoYS5rLmEuIGNvbW1hbmRzKSAqLwogZW51bSBsdGM0MjQ1X2NtZCB7CiAJTFRDNDI0NV9TVEFUVVMJCQk9IDB4MDAsIC8qIHJlYWRvbmx5ICovCkBAIC0zNjksOSArMzYwLDEzIEBACiBzdGF0aWMgaW50IGx0YzQyNDVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCXN0cnVjdCBsdGM0MjQ1X2RhdGEgKmRhdGE7CiAJaW50IHJldDsKIAorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQxOCwxMzYgKzQxMywyMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDaGVjayB0aGF0IHNvbWUgYml0cyBpbiBhIGNvbnRyb2wgcmVnaXN0ZXIgYXBwZWFyIGF0IGFsbCBwb3NzaWJsZQotICogbG9jYXRpb25zIHdpdGhvdXQgY2hhbmdpbmcgdmFsdWUKLSAqCi0gKiBAY2xpZW50OiB0aGUgaTJjIGNsaWVudCB0byB1c2UKLSAqIEByZWc6IHRoZSByZWdpc3RlciB0byByZWFkCi0gKiBAYml0czogdGhlIGJpdHMgdG8gY2hlY2sgKDB4ZmYgY2hlY2tzIGFsbCBiaXRzLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIGNoZWNrcyBvbmx5IHRoZSBsYXN0IHR3byBiaXRzKQotICoKLSAqIHJldHVybiAtRVJSTk8gaWYgdGhlIHJlZ2lzdGVyIHJlYWQgZmFpbGVkCi0gKiByZXR1cm4gLUVOT0RFViBpZiB0aGUgcmVnaXN0ZXIgdmFsdWUgZG9lc24ndCBzdGF5IGNvbnN0YW50IGF0IGFsbAotICogcG9zc2libGUgYWRkcmVzc2VzCi0gKgotICogcmV0dXJuIDAgZm9yIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0cykKLXsKLQlpbnQgaTsKLQlzMzIgdiwgdm9mZjEsIHZvZmYyOwotCi0JLyogUmVhZCByZWdpc3RlciBhbmQgY2hlY2sgZm9yIGVycm9yICovCi0JdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci0JaWYgKHYgPCAwKQotCQlyZXR1cm4gdjsKLQotCXYgJj0gYml0czsKLQotCWZvciAoaSA9IDB4MDA7IGkgPCAweGZmOyBpICs9IDB4MjApIHsKLQotCQl2b2ZmMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIGkpOwotCQlpZiAodm9mZjEgPCAwKQotCQkJcmV0dXJuIHZvZmYxOwotCi0JCXZvZmYyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgaSArIDB4MDgpOwotCQlpZiAodm9mZjIgPCAwKQotCQkJcmV0dXJuIHZvZmYyOwotCi0JCXZvZmYxICY9IGJpdHM7Ci0JCXZvZmYyICY9IGJpdHM7Ci0KLQkJaWYgKHYgIT0gdm9mZjEgfHwgdiAhPSB2b2ZmMikKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGx0YzQyNDVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KLQkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCi0KLQkJLyogQ2hpcCByZWdpc3RlcnMgMHgwMC0weDA3IGFyZSBjb250cm9sIHJlZ2lzdGVycwotCQkgKiBDaGlwIHJlZ2lzdGVycyAweDEwLTB4MWYgYXJlIGRhdGEgcmVnaXN0ZXJzCi0JCSAqCi0JCSAqIEFkZHJlc3MgYml0cyBiNy1iNSBhcmUgaWdub3JlZC4gVGhpcyBtYWtlcyB0aGUgY2hpcCAicmVwZWF0IgotCQkgKiBpbiBzdGVwcyBvZiAweDIwLiBBbnkgY29udHJvbCByZWdpc3RlcnMgc2hvdWxkIGFwcGVhciB3aXRoCi0JCSAqIHRoZSBzYW1lIHZhbHVlcyBhY3Jvc3MgYWxsIGR1cGxpY2F0ZWQgYWRkcmVzc2VzLgotCQkgKgotCQkgKiBSZWdpc3RlciAweDAyIGJpdCBiMiBpcyByZXNlcnZlZCwgZXhwZWN0IDAKLQkJICogUmVnaXN0ZXIgMHgwNyBiaXRzIGI3IHRvIGI0IGFyZSByZXNlcnZlZCwgZXhwZWN0IDAKLQkJICoKLQkJICogUmVnaXN0ZXJzIDB4MDEsIDB4MDIgYXJlIGNvbnRyb2wgcmVnaXN0ZXJzIGFuZCBzaG91bGQgbm90Ci0JCSAqIGNoYW5nZSBvbiB0aGVpciBvd24uCi0JCSAqCi0JCSAqIFJlZ2lzdGVyIDB4MDYgYml0cyBiNiBhbmQgYjcgYXJlIGNvbnRyb2wgYml0cywgYW5kIHNob3VsZAotCQkgKiBub3QgY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICoKLQkJICogUmVnaXN0ZXIgMHgwNyBiaXRzIGIzIHRvIGIwIGFyZSBjb250cm9sIGJpdHMsIGFuZCBzaG91bGQKLQkJICogbm90IGNoYW5nZSBvbiB0aGVpciBvd24uCi0JCSAqLwotCi0JCS8qIHJlYWQgcmVnaXN0ZXIgMHgwMiByZXNlcnZlZCBiaXQsIGV4cGVjdCAwICovCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjQ1X0NPTlRST0wpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAweDA0KSAhPSAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogcmVhZCByZWdpc3RlciAweDA3IHJlc2VydmVkIGJpdHMsIGV4cGVjdCAwICovCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjQ1X0FEQ0FEUik7Ci0JCWlmICh2IDwgMCB8fCAodiAmIDB4ZjApICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkvKiBjaGVjayB0aGF0IHRoZSBhbGVydCByZWdpc3RlciBhcHBlYXJzIGF0IGFsbCBsb2NhdGlvbnMgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0FMRVJULCAweGZmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYXBwZWFycyBhdCBhbGwgbG9jYXRpb25zICovCi0JCWlmIChsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKGNsaWVudCwgTFRDNDI0NV9DT05UUk9MLCAweGZmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgcmVnaXN0ZXIgMHgwNiBiaXRzIGI2IGFuZCBiNyBzdGF5IGNvbnN0YW50ICovCi0JCWlmIChsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKGNsaWVudCwgTFRDNDI0NV9HUElPLCAweGMwKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgcmVnaXN0ZXIgMHgwNyBiaXRzIGIzLWIwIHN0YXkgY29uc3RhbnQgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0FEQ0FEUiwgMHgwZikpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJsdGM0MjQ1IiwgSTJDX05BTUVfU0laRSk7Ci0JZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgImx0YzQyNDUgJXMgYXQgYWRkcmVzcyAweCUwMnhcbiIsCi0JCQlraW5kIDwgMCA/ICJwcm9iZWQiIDogImZvcmNlZCIsCi0JCQljbGllbnQtPmFkZHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsdGM0MjQ1X2lkW10gPSB7Ci0JeyAibHRjNDI0NSIsIGx0YzQyNDUgfSwKKwl7ICJsdGM0MjQ1IiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsdGM0MjQ1X2lkKTsKIAogLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLwogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0YzQyNDVfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAibHRjNDI0NSIsCiAJfSwKIAkucHJvYmUJCT0gbHRjNDI0NV9wcm9iZSwKIAkucmVtb3ZlCQk9IGx0YzQyNDVfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGx0YzQyNDVfaWQsCi0JLmRldGVjdAkJPSBsdGM0MjQ1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGx0YzQyNDVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKaW5kZXggM2E1MjRmMi4uNzE4MzU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCkBAIC0zMjMsMTQgKzMyMywyMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYXRhLT5pbik7IGkrKykgewotCQlpZiAoIXBkYXRhLT5pbltpXSkKKwkJc3RydWN0IHMzYzI0eHhfYWRjX2h3bW9uX2luY2ZnICpjZmcgPSBwZGF0YS0+aW5baV07CisKKwkJaWYgKCFjZmcpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGRhdGEtPmluW2ldLT5tdWx0ID49IDB4MTAwMDApCisJCWlmIChjZmctPm11bHQgPj0gMHgxMDAwMCkKIAkJCWRldl93YXJuKCZkZXYtPmRldiwKIAkJCQkgImNoYW5uZWwgJWQgbXVsdGlwbGllciB0b28gbGFyZ2VcbiIsCiAJCQkJIGkpOwogCisJCWlmIChjZmctPmRpdmlkZXIgPT0gMCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJjaGFubmVsICVkIGRpdmlkZXIgemVyb1xuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXJldCA9IHMzY19od21vbl9jcmVhdGVfYXR0cigmZGV2LT5kZXYsIHBkYXRhLT5pbltpXSwKIAkJCQkJICAgICZod21vbi0+YXR0cnNbaV0sIGkpOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKaW5kZXggMzAzYzAyNi4uZWJlMzhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaHQxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNjIyLDcgKzYyMywxMiBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNodF9kcml2ZXJzW10gPSB7CisvKgorICogc2h0X2RyaXZlcnMgc2ltdWx0YW5lb3VzbHkgcmVmZXJzIHRvIF9fZGV2aW5pdCBhbmQgX19kZXZleGl0IGZ1bmN0aW9uCisgKiB3aGljaCBjYXVzZXMgc3B1cmlvdXMgc2VjdGlvbiBtaXNtYXRjaCB3YXJuaW5nLiBTbyB1c2UgX19yZWZkYXRhIHRvCisgKiBnZXQgcmlkIGZyb20gdGhpcy4KKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgX19yZWZkYXRhIHNodF9kcml2ZXJzW10gPSB7CiAJewogCQkuZHJpdmVyID0gewogCQkJLm5hbWUgPSAic2h0MTAiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCA2YmVkZDJmLi5lOGZlN2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJICAgIEFUSSBTQjYwMAogCSAgICBBVEkgU0I3MDAKIAkgICAgQVRJIFNCODAwCi0JICAgIEFNRCBTQjkwMAorCSAgICBBTUQgSHVkc29uLTIKIAkgICAgU2VydmVyd29ya3MgT1NCNAogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I1CiAJICAgIFNlcnZlcndvcmtzIENTQjYKQEAgLTQ3Nyw4ICs0NzcsOCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXBueC4KIAogY29uZmlnIEkyQ19QWEEKLQl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEFSQ0hfUFhBCisJdHJpc3RhdGUgIkludGVsIFBYQTJYWCBJMkMgYWRhcHRlciIKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgSWYgeW91IGhhdmUgZGV2aWNlcyBpbiB0aGUgUFhBIEkyQyBidXMsIHNheSB5ZXMgdG8gdGhpcyBvcHRpb24uCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCBmN2Q2ZmU5Li44ZjBiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCWVycm9yID0gYWNwaV9jaGVja19yZWdpb24oYW1kNzU2X2lvcG9ydCwgU01CX0lPU0laRSwKIAkJCQkgIGFtZDc1Nl9kcml2ZXIubmFtZSk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhbWQ3NTZfaW9wb3J0LCBTTUJfSU9TSVpFLCBhbWQ3NTZfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNNQiByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCmluZGV4IGE3YzU5OTAuLjViNGFkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCkBAIC0zNzYsOCArMzc2LDEwIEBACiAJc21idXMtPnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCk7CiAKIAllcnJvciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJmRldi0+cmVzb3VyY2VbMF0pOwotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKKwkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIG91dF9rZnJlZTsKKwl9CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHNtYnVzLT5iYXNlLCBzbWJ1cy0+c2l6ZSwgYW1kODExMV9kcml2ZXIubmFtZSkpIHsKIAkJZXJyb3IgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDlkMmM1YWQuLjU1ZWRjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC03MzIsOCArNzMyLDEwIEBACiAJfQogCiAJZXJyID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVtTTUJCQVJdKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBleGl0OworCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihkZXYsIFNNQkJBUiwgaTgwMV9kcml2ZXIubmFtZSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKaW5kZXggNGFmYmEzZS4uZTM2NTRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCkBAIC0xMjAsMTkgKzEyMCwyNiBAQAogCXdhaXRfcXVldWVfaGVhZF90CXF1ZXVlOwogCXVuc2lnbmVkIGxvbmcJCWkyY3NyOwogCXVuc2lnbmVkIGludCAJCWRpc2FibGVfZGVsYXk7CisJaW50CQkJc3RvcHBlZDsKKwl1bnNpZ25lZCBpbnQJCWlmZHI7IC8qIElNWF9JMkNfSUZEUiAqLwogfTsKIAogLyoqIEZ1bmN0aW9ucyBmb3IgSU1YIEkyQyBhZGFwdGVyIGRyaXZlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCitzdGF0aWMgaW50IGkyY19pbXhfYnVzX2J1c3koc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCBpbnQgZm9yX2J1c3kpCiB7CiAJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOworCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiB3YWl0IGZvciBidXMgbm90IGJ1c3kgKi8KLQl3aGlsZSAocmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUikgJiBJMlNSX0lCQikgeworCXdoaWxlICgxKSB7CisJCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKKwkJaWYgKGZvcl9idXN5ICYmICh0ZW1wICYgSTJTUl9JQkIpKQorCQkJYnJlYWs7CisJCWlmICghZm9yX2J1c3kgJiYgISh0ZW1wICYgSTJTUl9JQkIpKQorCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCiAJCQkJIjwlcz4gSTJDIEludGVycnVwdGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0xNzksNDEgKzE4Niw2MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9zdGFydChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCiB7CiAJdW5zaWduZWQgaW50IHRlbXAgPSAwOworCWludCByZXN1bHQ7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAorCWNsa19lbmFibGUoaTJjX2lteC0+Y2xrKTsKKwl3cml0ZWIoaTJjX2lteC0+aWZkciwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSUZEUik7CiAJLyogRW5hYmxlIEkyQyBjb250cm9sbGVyICovCisJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOwogCXdyaXRlYihJMkNSX0lFTiwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisKKwkvKiBXYWl0IGNvbnRyb2xsZXIgdG8gYmUgc3RhYmxlICovCisJdWRlbGF5KDUwKTsKKwogCS8qIFN0YXJ0IEkyQyB0cmFuc2FjdGlvbiAqLwogCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKIAl0ZW1wIHw9IEkyQ1JfTVNUQTsKIAl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJcmVzdWx0ID0gaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAxKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCWkyY19pbXgtPnN0b3BwZWQgPSAwOworCiAJdGVtcCB8PSBJMkNSX0lJRU4gfCBJMkNSX01UWCB8IEkyQ1JfVFhBSzsKIAl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQgaTJjX2lteF9zdG9wKHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CiAKLQkvKiBTdG9wIEkyQyB0cmFuc2FjdGlvbiAqLwotCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwotCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKLQl0ZW1wICY9IH5JMkNSX01TVEE7Ci0Jd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCS8qIHNldHVwIGNoaXAgcmVnaXN0ZXJzIHRvIGRlZmF1bHRzICovCi0Jd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKLQl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7Ci0JLyoKLQkgKiBUaGlzIGRlbGF5IGNhdXNlZCBieSBhbiBpLk1YTCBoYXJkd2FyZSBidWcuCi0JICogSWYgbm8gKG9yIHRvbyBzaG9ydCkgZGVsYXksIG5vICJTVE9QIiBiaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCi0JICovCi0JdWRlbGF5KGkyY19pbXgtPmRpc2FibGVfZGVsYXkpOworCWlmICghaTJjX2lteC0+c3RvcHBlZCkgeworCQkvKiBTdG9wIEkyQyB0cmFuc2FjdGlvbiAqLworCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOworCQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCWkyY19pbXgtPnN0b3BwZWQgPSAxOworCX0KKwlpZiAoY3B1X2lzX214MSgpKSB7CisJCS8qCisJCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KKwkJICogSWYgbm8gKG9yIHRvbyBzaG9ydCkgZGVsYXksIG5vICJTVE9QIiBiaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCisJCSAqLworCQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJfQorCisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKQorCQlpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDApOworCiAJLyogRGlzYWJsZSBJMkMgY29udHJvbGxlciAqLwogCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaTJjX2lteF9zZXRfY2xrKHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCwKQEAgLTIzMyw4ICsyNjEsOCBAQAogCWVsc2UKIAkJZm9yIChpID0gMDsgaTJjX2Nsa19kaXZbaV1bMF0gPCBkaXY7IGkrKyk7CiAKLQkvKiBXcml0ZSBkaXZpZGVyIHZhbHVlIHRvIHJlZ2lzdGVyICovCi0Jd3JpdGViKGkyY19jbGtfZGl2W2ldWzFdLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKKwkvKiBTdG9yZSBkaXZpZGVyIHZhbHVlICovCisJaTJjX2lteC0+aWZkciA9IGkyY19jbGtfZGl2W2ldWzFdOwogCiAJLyoKIAkgKiBUaGVyZSBkdW1teSBkZWxheSBpcyBjYWxjdWxhdGVkLgpAQCAtMzQxLDExICszNjksMTUgQEAKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAJCWlmIChpID09IChtc2dzLT5sZW4gLSAxKSkgeworCQkJLyogSXQgbXVzdCBnZW5lcmF0ZSBTVE9QIGJlZm9yZSByZWFkIEkyRFIgdG8gcHJldmVudAorCQkJICAgY29udHJvbGxlciBmcm9tIGdlbmVyYXRpbmcgYW5vdGhlciBjbG9jayBjeWNsZSAqLwogCQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCiAJCQkJIjwlcz4gY2xlYXIgTVNUQVxuIiwgX19mdW5jX18pOwogCQkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCQkJdGVtcCAmPSB+STJDUl9NU1RBOworCQkJdGVtcCAmPSB+KEkyQ1JfTVNUQSB8IEkyQ1JfTVRYKTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisJCQlpMmNfaW14LT5zdG9wcGVkID0gMTsKIAkJfSBlbHNlIGlmIChpID09IChtc2dzLT5sZW4gLSAyKSkgewogCQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCiAJCQkJIjwlcz4gc2V0IFRYQUtcbiIsIF9fZnVuY19fKTsKQEAgLTM3MCwxNCArNDAyLDExIEBACiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIENoZWNrIGlmIGkyYyBidXMgaXMgbm90IGJ1c3kgKi8KLQlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgpOworCS8qIFN0YXJ0IEkyQyB0cmFuc2ZlciAqLworCXJlc3VsdCA9IGkyY19pbXhfc3RhcnQoaTJjX2lteCk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsMDsKIAotCS8qIFN0YXJ0IEkyQyB0cmFuc2ZlciAqLwotCWkyY19pbXhfc3RhcnQoaTJjX2lteCk7Ci0KIAkvKiByZWFkL3dyaXRlIGRhdGEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJaWYgKGkpIHsKQEAgLTM4Niw2ICs0MTUsOSBAQAogCQkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCQkJdGVtcCB8PSBJMkNSX1JTVEE7CiAJCQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCQlyZXN1bHQgPSAgaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAxKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZ290byBmYWlsMDsKIAkJfQogCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCSI8JXM+IHRyYW5zZmVyIG1lc3NhZ2U6ICVkXG4iLCBfX2Z1bmNfXywgaSk7CkBAIC01MDAsNyArNTMyLDYgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IEkyQyBjbG9ja1xuIik7CiAJCWdvdG8gZmFpbDM7CiAJfQotCWNsa19lbmFibGUoaTJjX2lteC0+Y2xrKTsKIAogCS8qIFJlcXVlc3QgSVJRICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14X2lzciwgMCwgcGRldi0+bmFtZSwgaTJjX2lteCk7CkBAIC01NDksNyArNTgwLDYgQEAKIGZhaWw1OgogCWZyZWVfaXJxKGkyY19pbXgtPmlycSwgaTJjX2lteCk7CiBmYWlsNDoKLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIGZhaWwzOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwpAQCAtNTg2LDggKzYxNiw2IEBACiAJaWYgKHBkYXRhICYmIHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdCgmcGRldi0+ZGV2KTsKIAotCS8qIERpc2FibGUgSTJDIGNsb2NrICovCi0JY2xrX2Rpc2FibGUoaTJjX2lteC0+Y2xrKTsKIAljbGtfcHV0KGkyY19pbXgtPmNsayk7CiAKIAlyZWxlYXNlX21lbV9yZWdpb24oaTJjX2lteC0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpMmNfaW14LT5yZXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNjaC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKaW5kZXggOWY2YjhlMC4uZGJhNmViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHNjaF9zbWJhLCBTTUJJT1NJWkUsIHNjaF9kcml2ZXIubmFtZSkpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiAtRU5PREVWOwogCWlmICghcmVxdWVzdF9yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKIAkJCXNjaF9zbWJhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IGQzMjVlODYuLmY2MjcwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtMzY1LDkgKzM2NSw2IEBACiAJdW5zaWduZWQgdGltZW91dCA9IGkyYy0+YWRhcC50aW1lb3V0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTdGFydCBhcyBtYXN0ZXIgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYnl0ZSAqLwpAQCAtMzk2LDkgKzM5Myw2IEBACiAJaW50IGksIHJlc3VsdDsKIAl1MzIgZmxhZ3MgPSByZXN0YXJ0ID8gQ0NSX1JTVEEgOiAwOwogCi0JLyogU3RhcnQgd2l0aCBNRU4gKi8KLQlpZiAoIXJlc3RhcnQpCi0JCXdyaXRlY2NyKGkyYywgQ0NSX01FTik7CiAJLyogU3dpdGNoIHRvIHJlYWQgLSByZXN0YXJ0ICovCiAJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9NVFggfCBmbGFncyk7CiAJLyogV3JpdGUgdGFyZ2V0IGFkZHJlc3MgYnl0ZSAtIHRoaXMgdGltZSB3aXRoIHRoZSByZWFkIGZsYWcgc2V0ICovCkBAIC00MjUsOSArNDE5LDkgQEAKIAkJLyogR2VuZXJhdGUgdHhhY2sgb24gbmV4dCB0byBsYXN0IGJ5dGUgKi8KIAkJaWYgKGkgPT0gbGVuZ3RoIC0gMikKIAkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfVFhBSyk7Ci0JCS8qIEdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCisJCS8qIERvIG5vdCBnZW5lcmF0ZSBzdG9wIG9uIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAxKQotCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfVFhBSyk7CisJCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCk7CiAJCWRhdGFbaV0gPSByZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX0RSKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCBhNzgyYzdhLi4xZTI0NWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC0yMiw3ICsyMiw3IEBACiAJSW50ZWwgUElJWDQsIDQ0ME1YCiAJU2VydmVyd29ya3MgT1NCNCwgQ1NCNSwgQ1NCNiwgSFQtMTAwMCwgSFQtMTEwMAogCUFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAsIFNCODAwCi0JQU1EIFNCOTAwCisJQU1EIEh1ZHNvbi0yCiAJU01TQyBWaWN0b3J5NjYKIAogICAgTm90ZTogd2UgYXNzdW1lIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBkZXZpY2UsIHdpdGggb25lIFNNQnVzIGludGVyZmFjZS4KQEAgLTE2OSw3ICsxNjksNyBAQAogCX0KIAogCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLApAQCAtMjMzLDkgKzIzMyw5IEBACiAJdW5zaWduZWQgc2hvcnQgc21iYV9pZHggPSAweGNkNjsKIAl1OCBzbWJhX2VuX2xvLCBzbWJhX2VuX2hpLCBpMmNjZmcsIGkyY2NmZ19vZmZzZXQgPSAweDEwLCBzbWJfZW4gPSAweDJjOwogCi0JLyogU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KKwkvKiBTQjgwMCBhbmQgbGF0ZXIgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KIAlpZiAoZm9yY2UgfHwgZm9yY2VfYWRkcikgewotCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNCODAwIFNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgorCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgogCQkJImZvcmNpbmcgYWRkcmVzcyFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNjAsNyArMjYwLDcgQEAKIAogCXBpaXg0X3NtYmEgPSAoKHNtYmFfZW5faGkgPDwgOCkgfCBzbWJhX2VuX2xvKSAmIDB4ZmZlMDsKIAlpZiAoYWNwaV9jaGVja19yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkgewogCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMpIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TTUJVUykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCiAJCSAgICAgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zY21pLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYwppbmRleCAyNzZhMDQ2Li5iNGE1NWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYwpAQCAtMzY5LDkgKzM2OSw4IEBACiAJCWdvdG8gZXJyOwogCiAJc25wcmludGYoc21idXNfY21pLT5hZGFwdGVyLm5hbWUsIHNpemVvZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSksCi0JCSJTTUJ1cyBDTUkgYWRhcHRlciAlcyAoJXMpIiwKLQkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLAotCQlhY3BpX2RldmljZV91aWQoZGV2aWNlKSk7CisJCSJTTUJ1cyBDTUkgYWRhcHRlciAlcyIsCisJCWFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSk7CiAJc21idXNfY21pLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJc21idXNfY21pLT5hZGFwdGVyLmFsZ28gPSAmYWNwaV9zbWJ1c19jbWlfYWxnb3JpdGhtOwogCXNtYnVzX2NtaS0+YWRhcHRlci5hbGdvX2RhdGEgPSBzbWJ1c19jbWk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwppbmRleCA4Mjk1ODg1Li4xNjQ5OTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJcmV0dmFsID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVtTSVM5NnhfQkFSXSk7CiAJaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBFdmVyeXRoaW5nIGlzIGhhcHB5LCBsZXQncyBncmFiIHRoZSBtZW1vcnkgYW5kIHNldCB0aGluZ3MgdXAuICovCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzaXM5Nnhfc21idXNfYmFzZSwgU01CX0lPU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IDU0ZDgxMGEuLmU0YjE1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtMzY1LDcgKzM2NSw3IEBACiBmb3VuZDoKIAllcnJvciA9IGFjcGlfY2hlY2tfcmVnaW9uKHZ0NTk2X3NtYmEsIDgsIHZ0NTk2X2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHZ0NTk2X3NtYmEsIDgsIHZ0NTk2X2RyaXZlci5uYW1lKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IDYzOTZjM2EuLjgzNzMyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIDAgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIDEgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIDAgfSwKLQl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgMCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERSksIDAgfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aWl4cF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKaW5kZXggNjgwZTU5Ny4uY2EwYzQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKQEAgLTM3OSw3ICszNzksOCBAQAogCQkuZW5hYmxlYml0cwk9IHt7MHgwMCwweDAwLDB4MDB9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0eF9wb3J0X29wcywKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQ0xFQVJfU0lNUExFWCB8Ci0JCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0ggfAorCQkJCSAgSURFX0hGTEFHX1NFUklBTElaRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIG5vIHVkbWEgKi8KQEAgLTM4OSw3ICszOTAsOCBAQAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2NtZDY0eCwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NTEsMHgwNCwweDA0fSwgezB4NTEsMHgwOCwweDA4fX0sCiAJCS5wb3J0X29wcwk9ICZjbWQ2NDhfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENILAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCA2M2M1M2Q2Li40ZDc2YmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTA0NiwxNSArMTA0Niw2IEBACiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+aW5pdF9kZXYpCiAJCQlwb3J0X29wcy0+aW5pdF9kZXYoZHJpdmUpOwogCX0KLQotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQkvKgotCQkgKiBkZWZhdWx0IHRvIFBJTyBNb2RlIDAgYmVmb3JlIHdlIGZpZ3VyZSBvdXQKLQkJICogdGhlIG1vc3Qgc3VpdGVkIG1vZGUgZm9yIHRoZSBhdHRhY2hlZCBkZXZpY2UKLQkJICovCi0JCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+c2V0X3Bpb19tb2RlKQotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgMCk7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBpZGVfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGludCBwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggMjhkMDlhNS4uMDE3YzA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0yNzMsMTQgKzI3Myw4IEBACiAKIHN0YXRpYyB2b2lkIHByb2NfaWRlX3NldHRpbmdzX3dhcm4odm9pZCkKIHsKLQlzdGF0aWMgaW50IHdhcm5lZDsKLQotCWlmICh3YXJuZWQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IC9wcm9jL2lkZS9oZD8vc2V0dGluZ3MgaW50ZXJmYWNlIGlzICIKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIldhcm5pbmc6IC9wcm9jL2lkZS9oZD8vc2V0dGluZ3MgaW50ZXJmYWNlIGlzICIKIAkJCSAgICAib2Jzb2xldGUsIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbiFcbiIpOwotCXdhcm5lZCA9IDE7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX3NldHRpbmdzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggYWZjYTIyYi4uM2I4OGViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIJCUxpb25lbCBCb3V0b24gPExpb25lbC5Cb3V0b25AaW5ldDYuZnI+LCBNYWludGFpbmVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMJCVZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5CUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCkBAIC0yODEsMTEgKzI4MSwxMyBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDRiLCAmcmVnNGJoKTsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJ3X3ByZWZldGNoID0gMHgxMSA8PCBkcml2ZS0+ZG47CisJcndfcHJlZmV0Y2ggPSByZWc0YmggJiB+KDB4MTEgPDwgZHJpdmUtPmRuKTsKIAotCWlmICgocmVnNGJoICYgKDB4MTEgPDwgZHJpdmUtPmRuKSkgIT0gcndfcHJlZmV0Y2gpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJlZzRiaHxyd19wcmVmZXRjaCk7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJcndfcHJlZmV0Y2ggfD0gMHgxMSA8PCBkcml2ZS0+ZG47CisKKwlpZiAocmVnNGJoICE9IHJ3X3ByZWZldGNoKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDRiLCByd19wcmVmZXRjaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5jIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwppbmRleCAxYWJhOGMxLi44ZTdlMzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9yZWdpb25fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkbWFfcmVnaW9uX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBkbWFfcmVnaW9uX3BhZ2VmYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggMGJjM2Q3OC4uOGFhNTZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKaW5kZXggZDI4N2JhNy4uOTQ5MDY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwppbmRleCA5NmEyOTU5Li43YzU0NGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYworKysgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwpAQCAtMjYwLDE1ICsyNjAsMTIgQEAKIHN0YXRpYyBuZXRkZXZfdHhfdCBpZWVlODAyMTU0X2Zha2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNrYi0+aWlmID0gZGV2LT5pZmluZGV4OwotCXNrYi0+ZGV2ID0gZGV2OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQogCS8qIEZJWE1FOiBkbyBoYXJkd2FyZSB3b3JrIGhlcmUgLi4uICovCiAKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCmluZGV4IDViZTFiZDQuLmJkMDc4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCiAJCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikKIAkJCWlmIChpcHY2X2Noa19hZGRyKCZpbml0X25ldCwKLQkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHIpLT5zaW42X2FkZHIsCisJCQkJCSAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3RfaW4pLT5zaW42X2FkZHIsCiAJCQkJCSAgZGV2LCAxKSkKIAkJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCmluZGV4IDU1ZDA5M2EuLjBmODk5MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpAQCAtMzYyLDcgKzM2Myw5IEBACiAJCSAqIEluIGVpdGhlciBjYXNlLCBtdXN0IHRlbGwgdGhlIHByb3ZpZGVyIHRvIHJlamVjdC4KIAkJICovCiAJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfREVTVFJPWUlORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQljbV9pZC0+ZGV2aWNlLT5pd2NtLT5yZWplY3QoY21faWQsIE5VTEwsIDApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElXX0NNX1NUQVRFX0NPTk5fU0VOVDoKIAljYXNlIElXX0NNX1NUQVRFX0RFU1RST1lJTkc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwppbmRleCA1N2EzYzZmLi40ZTBmMjgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC0zNyw3ICszNyw4IEBACiBlbnVtIHJtcHBfc3RhdGUgewogCVJNUFBfU1RBVEVfQUNUSVZFLAogCVJNUFBfU1RBVEVfVElNRU9VVCwKLQlSTVBQX1NUQVRFX0NPTVBMRVRFCisJUk1QUF9TVEFURV9DT01QTEVURSwKKwlSTVBQX1NUQVRFX0NBTkNFTElORwogfTsKIAogc3RydWN0IG1hZF9ybXBwX3JlY3YgewpAQCAtODcsMTggKzg4LDIyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtcHBfcmVjdiwgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJtcHBfcmVjdi0+c3RhdGUgIT0gUk1QUF9TVEFURV9DT01QTEVURSkKKwkJCWliX2ZyZWVfcmVjdl9tYWQocm1wcF9yZWN2LT5ybXBwX3djKTsKKwkJcm1wcF9yZWN2LT5zdGF0ZSA9IFJNUFBfU1RBVEVfQ0FOQ0VMSU5HOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShybXBwX3JlY3YsICZhZ2VudC0+cm1wcF9saXN0LCBsaXN0KSB7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJtcHBfcmVjdi0+dGltZW91dF93b3JrKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcm1wcF9yZWN2LT5jbGVhbnVwX3dvcmspOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOwogCiAJZmx1c2hfd29ya3F1ZXVlKGFnZW50LT5xcF9pbmZvLT5wb3J0X3ByaXYtPndxKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybXBwX3JlY3YsIHRlbXBfcm1wcF9yZWN2LAogCQkJCSAmYWdlbnQtPnJtcHBfbGlzdCwgbGlzdCkgewogCQlsaXN0X2RlbCgmcm1wcF9yZWN2LT5saXN0KTsKLQkJaWYgKHJtcHBfcmVjdi0+c3RhdGUgIT0gUk1QUF9TVEFURV9DT01QTEVURSkKLQkJCWliX2ZyZWVfcmVjdl9tYWQocm1wcF9yZWN2LT5ybXBwX3djKTsKIAkJZGVzdHJveV9ybXBwX3JlY3Yocm1wcF9yZWN2KTsKIAl9CiB9CkBAIC0yNjAsNiArMjY1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZybXBwX3JlY3YtPmFnZW50LT5sb2NrLCBmbGFncyk7CisJaWYgKHJtcHBfcmVjdi0+c3RhdGUgPT0gUk1QUF9TVEFURV9DQU5DRUxJTkcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm1wcF9yZWN2LT5hZ2VudC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQogCWxpc3RfZGVsKCZybXBwX3JlY3YtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJtcHBfcmVjdi0+YWdlbnQtPmxvY2ssIGZsYWdzKTsKIAlkZXN0cm95X3JtcHBfcmVjdihybXBwX3JlY3YpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwppbmRleCA1MWJkOTY2Li5mNTA0YzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCA0MzQ2YTI0NS4uYmI5NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCA4YzQ2ZjIyLi43ZGUwMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGQzZmZmOWUuLmFlYzBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggNjg5NTUyMy4uZWQ3MTc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpAQCAtMTE5OSwxMSArMTIwMCwxNCBAQAogCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0RPV047CiAJZWxzZSB7CiAJCWluZXRkZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7Ci0JCWlmIChpbmV0ZGV2LT5pZmFfbGlzdCkKLQkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfQUNUSVZFOwotCQllbHNlCisJCWlmIChpbmV0ZGV2KSB7CisJCQlpZiAoaW5ldGRldi0+aWZhX2xpc3QpCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJCQllbHNlCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9JTklUOworCQkJaW5fZGV2X3B1dChpbmV0ZGV2KTsKKwkJfSBlbHNlCiAJCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0lOSVQ7Ci0JCWluX2Rldl9wdXQoaW5ldGRldik7CiAJfQogCiAJcHJvcHMtPnBvcnRfY2FwX2ZsYWdzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IDZlODY1MzQuLjFjZWNmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtMjksNiArMjksNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIml3Y2hfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJpd2NoLmgiCiAjaW5jbHVkZSAiaXdjaF9jbS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKaW5kZXggM2NiNjg4ZC4uZjE1NjVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCkBAIC05NSw3ICs5NSw3IEBACiAJCSAgICAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICpjb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bV9vcHMgPSB7CiAJLm9wZW4gPQllaGNhX21tX29wZW4sCiAJLmNsb3NlID0gZWhjYV9tbV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggMDRlODhiNi4uMDEzZDEzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDM4YTI4NzAuLjQwZGJlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpcGF0aF9maWxlX3ZtYV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCmluZGV4IGIyYTlkNGMuLmE4MDU0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNmMyMWI0Yi4uYzBhMDNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMKaW5kZXggZmE4MzBlMi4uYjI4ODY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCkBAIC03NCw3ICs3NCw3IEBACiAJa3JlZl9wdXQoJmlwLT5yZWYsIGlwYXRoX3JlbGVhc2VfbW1hcF9pbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX3ZtX29wcyA9IHsKIAkub3BlbiA9ICAgICBpcGF0aF92bWFfb3BlbiwKIAkuY2xvc2UgPSAgICBpcGF0aF92bWFfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwppbmRleCAzYTVhODliLi5jYjJkM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMzIsNiArMzIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKaW5kZXggMjI5NjgzMi4uMWY5NWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMzEsNiArMzEsNyBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCmluZGV4IDYwNzZjYjYuLjc0MjA3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCmluZGV4IDg1NTkxMWUuLjgyODc4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwppbmRleCA3YmZmNGI5Li5iZTc4ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKaW5kZXggZDczZTMyMi4uNjkyM2UxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IDA1NmIyYTQuLjBhYTAxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCkBAIC02OCwxMSArNjgsMTYgQEAKIAlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wZGV2LCAmdGxpc3QsIGNhdGFzX2Vyci5saXN0KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OwogCQlyZXQgPSBfX210aGNhX3Jlc3RhcnRfb25lKGRldi0+cGRldik7CisJCS8qICdkZXYnIG5vdyBpcyBub3QgdmFsaWQgKi8KIAkJaWYgKHJldCkKLQkJCW10aGNhX2VycihkZXYsICJSZXNldCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKLQkJZWxzZQotCQkJbXRoY2FfZGJnKGRldiwgIlJlc2V0IHN1Y2NlZWRlZFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIm10aGNhICVzOiBSZXNldCBmYWlsZWQgKCVkKVxuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmV0KTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgbXRoY2FfZGV2ICpkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCQkJbXRoY2FfZGJnKGQsICJSZXNldCBzdWNjZWVkZWRcbiIpOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZtdGhjYV9kZXZpY2VfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCA1MzhlNDA5Li5lNTkzYWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMTU2Niw3ICsxNTY2LDYgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG5lc19uZXRkZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG5lc19uZXRkZXZfY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyIAk9IG5lc19uZXRkZXZfdmxhbl9yeF9yZWdpc3RlciwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAyNTg3NGZjLi44NzYzYzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTM2MiwxMiArMzYyLDE5IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwKIAkJCQkJCSAgIGNhcnJpZXJfb25fdGFzayk7CisJc3RydWN0IGliX3BvcnRfYXR0ciBhdHRyOwogCiAJLyoKIAkgKiBUYWtlIHJ0bmxfbG9jayB0byBhdm9pZCByYWNpbmcgd2l0aCBpcG9pYl9zdG9wKCkgYW5kCiAJICogdHVybmluZyB0aGUgY2FycmllciBiYWNrIG9uIHdoaWxlIGEgZGV2aWNlIGlzIGJlaW5nCiAJICogcmVtb3ZlZC4KIAkgKi8KKwlpZiAoaWJfcXVlcnlfcG9ydChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJmF0dHIpIHx8CisJICAgIGF0dHIuc3RhdGUgIT0gSUJfUE9SVF9BQ1RJVkUpIHsKKwkJaXBvaWJfZGJnKHByaXYsICJLZWVwaW5nIGNhcnJpZXIgb2ZmIHVudGlsIElCIHBvcnQgaXMgYWN0aXZlXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCXJ0bmxfbG9jaygpOwogCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggMGJhNmVjOC4uYWRkOTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAkgKiBiZWNhdXNlIHdlIHByZWFsbG9jYXRlIHNvIG1hbnkgcmVzb3VyY2VzCiAJICovCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9pc2VyX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsCisJCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2spLAogCQkJCQkgIGluaXRpYWxfY21kc24sIDApOwogCWlmICghY2xzX3Nlc3Npb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMTE0ODE0MC4uZGVlNjcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBFVkRFVl9CVUZGRVJfU0laRQk2NAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKaW5kZXggNzJjNjNlNS4uMzhkZjgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKQEAgLTMzNywxNiArMzM3LDE2IEBACiAJZGV2LT5mZiA9IGZmOwogCWRldi0+Zmx1c2ggPSBmbHVzaF9lZmZlY3RzOwogCWRldi0+ZXZlbnQgPSBpbnB1dF9mZl9ldmVudDsKLQlzZXRfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOwogCiAJLyogQ29weSAidHJ1ZSIgYml0cyBpbnRvIGZmIGRldmljZSBiaXRtYXAgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IEZGX01BWDsgaSsrKQogCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5mZmJpdCkpCi0JCQlzZXRfYml0KGksIGZmLT5mZmJpdCk7CisJCQlfX3NldF9iaXQoaSwgZmYtPmZmYml0KTsKIAogCS8qIHdlIGNhbiBlbXVsYXRlIFJVTUJMRSB3aXRoIHBlcmlvZGljIGVmZmVjdHMgKi8KIAlpZiAodGVzdF9iaXQoRkZfUEVSSU9ESUMsIGZmLT5mZmJpdCkpCi0JCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKwkJX19zZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2MiwxMiArMzYyLDE0IEBACiAgKi8KIHZvaWQgaW5wdXRfZmZfZGVzdHJveShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0JY2xlYXJfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKLQlpZiAoZGV2LT5mZikgewotCQlpZiAoZGV2LT5mZi0+ZGVzdHJveSkKLQkJCWRldi0+ZmYtPmRlc3Ryb3koZGV2LT5mZik7Ci0JCWtmcmVlKGRldi0+ZmYtPnByaXZhdGUpOwotCQlrZnJlZShkZXYtPmZmKTsKKwlzdHJ1Y3QgZmZfZGV2aWNlICpmZiA9IGRldi0+ZmY7CisKKwlfX2NsZWFyX2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7CisJaWYgKGZmKSB7CisJCWlmIChmZi0+ZGVzdHJveSkKKwkJCWZmLT5kZXN0cm95KGZmKTsKKwkJa2ZyZWUoZmYtPnByaXZhdGUpOworCQlrZnJlZShmZik7CiAJCWRldi0+ZmYgPSBOVUxMOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKaW5kZXggMmQxNDE1ZS4uYjQ4M2IyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKQEAgLTYxLDcgKzYxLDYgQEAKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlIHN0YXRlc1tGRl9NRU1MRVNTX0VGRkVDVFNdOwogCWludCBnYWluOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAKIAlpbnQgKCpwbGF5X2VmZmVjdCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzY4LDM4ICszNjcsMzggQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAoc3RydWN0IGlucHV0X2RldiAqKXRpbWVyX2RhdGE7CiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZWJ1ZygidGltZXI6IHVwZGF0aW5nIGVmZmVjdHMiKTsKIAotCXNwaW5fbG9jaygmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAltbF9wbGF5X2VmZmVjdHMobWwpOwotCXNwaW5fdW5sb2NrKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBTZXRzIHJlcXVlc3RlZCBnYWluIGZvciBGRiBlZmZlY3RzLiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIHZvaWQgbWxfZmZfc2V0X2dhaW4oc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgZ2FpbikKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKLQogCW1sLT5nYWluID0gZ2FpbjsKIAogCWZvciAoaSA9IDA7IGkgPCBGRl9NRU1MRVNTX0VGRkVDVFM7IGkrKykKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZtbC0+c3RhdGVzW2ldLmZsYWdzKTsKIAogCW1sX3BsYXlfZWZmZWN0cyhtbCk7Ci0KLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOwogfQogCisvKgorICogU3RhcnQvc3RvcCBzcGVjaWZpZWQgRkYgZWZmZWN0LiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIGludCBtbF9mZl9wbGF5YmFjayhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBlZmZlY3RfaWQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJc3RydWN0IG1sX2VmZmVjdF9zdGF0ZSAqc3RhdGUgPSAmbWwtPnN0YXRlc1tlZmZlY3RfaWRdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWwtPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAogCWlmICh2YWx1ZSA+IDApIHsKIAkJZGVidWcoImluaXRpYXRlZCBwbGF5Iik7CkBAIC00MjUsOCArNDI0LDYgQEAKIAkJbWxfcGxheV9lZmZlY3RzKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbC0+dGltZXJfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNiw3ICs0MzMsNyBAQAogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlICpzdGF0ZSA9ICZtbC0+c3RhdGVzW2VmZmVjdC0+aWRdOwogCi0Jc3Bpbl9sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChGRl9FRkZFQ1RfU1RBUlRFRCwgJnN0YXRlLT5mbGFncykpIHsKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZzdGF0ZS0+ZmxhZ3MpOwpAQCAtNDQ4LDcgKzQ0NSw3IEBACiAJCW1sX3NjaGVkdWxlX3RpbWVyKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDgyLDcgKzQ3OSw2IEBACiAJbWwtPnByaXZhdGUgPSBkYXRhOwogCW1sLT5wbGF5X2VmZmVjdCA9IHBsYXlfZWZmZWN0OwogCW1sLT5nYWluID0gMHhmZmZmOwotCXNwaW5fbG9ja19pbml0KCZtbC0+dGltZXJfbG9jayk7CiAJc2V0dXBfdGltZXIoJm1sLT50aW1lciwgbWxfZWZmZWN0X3RpbWVyLCAodW5zaWduZWQgbG9uZylkZXYpOwogCiAJc2V0X2JpdChGRl9HQUlOLCBkZXYtPmZmYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBlODI4YWFiLi4yMjY2ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTc4MSwxMCArNzgyLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3VuaW9uIGlucHV0X3NlcV9zdGF0ZSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgcG9zOworCQlib29sIG11dGV4X2FjcXVpcmVkOworCX07CisJdm9pZCAqcDsKK307CisKIHN0YXRpYyB2b2lkICppbnB1dF9kZXZpY2VzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOworCisJLyogV2UgbmVlZCB0byBmaXQgaW50byBzZXEtPnByaXZhdGUgcG9pbnRlciAqLworCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaW5wdXRfc2VxX3N0YXRlKSAhPSBzaXplb2Yoc2VxLT5wcml2YXRlKSk7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpOworCWlmIChlcnJvcikgeworCQlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSBmYWxzZTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IHRydWU7CiAKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmlucHV0X2Rldl9saXN0LCAqcG9zKTsKIH0KQEAgLTc5NCw5ICs4MTQsMTIgQEAKIAlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfZGV2X2xpc3QsIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlucHV0X2RldmljZXNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCitzdGF0aWMgdm9pZCBpbnB1dF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisKKwlpZiAoc3RhdGUtPm11dGV4X2FjcXVpcmVkKQorCQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTg2MCw3ICs4ODMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9kZXZpY2VzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0gaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9kZXZpY2VzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfZGV2aWNlc19zZXFfc3RvcCwKKwkuc3RvcAk9IGlucHV0X3NlcV9zdG9wLAogCS5zaG93CT0gaW5wdXRfZGV2aWNlc19zZXFfc2hvdywKIH07CiAKQEAgLTg4MCw0MCArOTAzLDQ5IEBACiAKIHN0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KSkKLQkJcmV0dXJuIE5VTEw7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCWludCBlcnJvcjsKIAotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKnBvczsKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKKwlzdGF0ZS0+cG9zID0gKnBvczsKKwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfaGFuZGxlcl9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgqcG9zICsgMSk7Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2hhbmRsZXJfbGlzdCwgcG9zKTsKLX0KKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLXN0YXRpYyB2b2lkIGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXN0YXRlLT5wb3MgPSAqcG9zICsgMTsKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgaW50IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyID0gY29udGFpbmVyX29mKHYsIHN0cnVjdCBpbnB1dF9oYW5kbGVyLCBub2RlKTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0lbGQgTmFtZT0lcyIsCi0JCSAgICh1bnNpZ25lZCBsb25nKXNlcS0+cHJpdmF0ZSwgaGFuZGxlci0+bmFtZSk7CisJc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JXUgTmFtZT0lcyIsIHN0YXRlLT5wb3MsIGhhbmRsZXItPm5hbWUpOwogCWlmIChoYW5kbGVyLT5mb3BzKQogCQlzZXFfcHJpbnRmKHNlcSwgIiBNaW5vcj0lZCIsIGhhbmRsZXItPm1pbm9yKTsKIAlzZXFfcHV0YyhzZXEsICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfaGFuZGxlcnNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9oYW5kbGVyc19zZXFfbmV4dCwKLQkuc3RvcAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdywKIH07CiAKQEAgLTEyNjAsMTkgKzEyOTIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJTlBVVF9ET19UT0dHTEUoZGV2LCB0eXBlLCBiaXRzLCBvbikJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOwkJCQkJCVwKLQkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCB0eXBlIyNfTUFYOyBpKyspIHsJCVwKLQkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpIHx8CVwKLQkJCSAgICAhdGVzdF9iaXQoaSwgZGV2LT5iaXRzKSkJCVwKLQkJCQljb250aW51ZTsJCQlcCi0JCQlkZXYtPmV2ZW50KGRldiwgRVZfIyN0eXBlLCBpLCBvbik7CVwKLQkJfQkJCQkJCVwKKyNkZWZpbmUgSU5QVVRfRE9fVE9HR0xFKGRldiwgdHlwZSwgYml0cywgb24pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBpOwkJCQkJCQlcCisJCWJvb2wgYWN0aXZlOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IHR5cGUjI19NQVg7IGkrKykgewkJCVwKKwkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpKQkJXAorCQkJCWNvbnRpbnVlOwkJCQlcCisJCQkJCQkJCQlcCisJCQlhY3RpdmUgPSB0ZXN0X2JpdChpLCBkZXYtPmJpdHMpOwkJXAorCQkJaWYgKCFhY3RpdmUgJiYgIW9uKQkJCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWRldi0+ZXZlbnQoZGV2LCBFVl8jI3R5cGUsIGksIG9uID8gYWN0aXZlIDogMCk7CVwKKwkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgaW5wdXRfZGV2X3Jlc2V0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgYm9vbCBhY3RpdmF0ZSkKIHsKIAlpZiAoIWRldi0+ZXZlbnQpCkBAIC0xMjg3LDcgKzEzMjcsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpbnB1dF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA5MDFiMjUyLi5iMWJkNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IDIzODhjZjUuLjc5ZTNlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIAl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCiAJeyAweDE0MzAsIDB4NDc0OCwgIlJlZE9jdGFuZSBHdWl0YXIgSGVybyBYLXBsb3JlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5jZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24pIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAorCXsgMHgxNDZiLCAweDA2MDEsICJCaWdCZW4gSW50ZXJhY3RpdmUgWEJPWCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDFiYWQsIDB4MDAwMywgIkhhcm1vbml4IFJvY2sgQmFuZCBEcnVta2l0IiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LApAQCAtMjA5LDYgKzIxMCw3IEBACiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgtQm94IDM2MCBjb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8qIFJlZE9jdGFuZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQ2YiksCQkvKiBCaWdCZW4gSW50ZXJhY3RpdmUgQ29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MWJhZCksCQkvKiBSb2NrIEJhbmQgRHJ1bXMgKi8KIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDcwOWUxNS4uMjhlNjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMjMzLDYgKzIzMyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICgqYXRrYmRfcGxhdGZvcm1fZml4dXApKHN0cnVjdCBhdGtiZCAqLCBjb25zdCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkICphdGtiZF9wbGF0Zm9ybV9maXh1cF9kYXRhOworc3RhdGljIHVuc2lnbmVkIGludCAoKmF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgdW5zaWduZWQgaW50KTsKIAogc3RhdGljIHNzaXplX3QgYXRrYmRfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwKIAkJCQlzc2l6ZV90ICgqaGFuZGxlcikoc3RydWN0IGF0a2JkICosIGNoYXIgKikpOwpAQCAtMzkzLDYgKzM5NCw5IEBACiAKIAlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1JBVywgY29kZSk7CiAKKwlpZiAoYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXApCisJCWNvZGUgPSBhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cChhdGtiZCwgY29kZSk7CisKIAlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQpIHsKIAogCQlpZiAoYXRrYmQtPmVtdWwgfHwgYXRrYmRfbmVlZF94bGF0ZShhdGtiZC0+eGxfYml0LCBjb2RlKSkgewpAQCAtNTc0LDExICs1NzgsMjIgQEAKIAogCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwlpZiAoIWF0a2JkLT5lbmFibGVkKSB7CisJCS8qCisJCSAqIFNlcmlvIHBvcnRzIGFyZSByZXN1bWVkIGFzeW5jaHJvbm91c2x5IHNvIHdoaWxlIGRyaXZlciBjb3JlCisJCSAqIHRoaW5rcyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGZ1bGx5IG9wZXJhdGlvbmFsIGluIHJlYWxpdHkKKwkJICogaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtlZXAKKwkJICogcmVzY2hlZHVsaW5nIHRpbGwgcmVjb25uZWN0IGNvbXBsZXRlcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXRrYmQtPmV2ZW50X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfSBlbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCX0KIAogCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KQEAgLTc3MCw2ICs3ODUsMzAgQEAKIAlyZXR1cm4gMzsKIH0KIAorc3RhdGljIGludCBhdGtiZF9yZXNldF9zdGF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworICAgICAgICBzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzFdOworCisvKgorICogU2V0IHRoZSBMRURzIHRvIGEgcHJlZGVmaW5lZCBzdGF0ZSAoYWxsIG9mZikuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBTZXQgYXV0b3JlcGVhdCB0byBmYXN0ZXN0IHBvc3NpYmxlLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGtiZF9hY3RpdmF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OwpAQCAtODUyLDI5ICs4OTEsNiBAQAogfTsKIAogLyoKLSAqIEludmVudGVjIHN5c3RlbSB3aXRoIGJyb2tlbiBrZXkgcmVsZWFzZSBvbiB2b2x1bWUga2V5cwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBQYXZpbGlvbiBaVjYxMDAgbGFwdG9wIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSByZWxlYXNlCi0gKiBmb3IgaXRzIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfenY2MTAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCAoQ29tcGFxKSBQcmVzYXJpbyBSNDAwMCBSNDEwMCBSNDIwMCB0aGF0IGRvbid0IGdlbmVyYXRlCi0gKiByZWxlYXNlIGZvciB0aGVpciB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3I0MDAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCiAgKiBTYW1zdW5nIE5DMTAsTkMyMCB3aXRoIEZuK0Y/IGtleSByZWxlYXNlIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfc2Ftc3VuZ19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC04ODIsMTQgKzg5OCw2IEBACiB9OwogCiAvKgotICogVGhlIHZvbHVtZSB1cCBhbmQgdm9sdW1lIGRvd24gc3BlY2lhbCBrZXlzIG9uIGEgRnVqaXRzdSBBbWlsbyBQQSAxNTEwIGxhcHRvcAotICogZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UgZXZlbnRzIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhiMCwgMHhhZSwgLTFVCi19OwotCi0vKgogICogQW1pbG8gUGkgMzUyNSBrZXkgcmVsZWFzZSBmb3IgRm4rVm9sdW1lIGtleXMgbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19waTM1MjVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtOTExLDYgKzkxOSwzMCBAQAogfTsKIAogLyoKKyAqIE1hbnkgbm90ZWJvb2tzIGRvbid0IHNlbmQga2V5IHJlbGVhc2UgZXZlbnQgZm9yIHZvbHVtZSB1cC9kb3duCisgKiBrZXlzLCB3aXRoIGtleSBsaXN0IGJlbG93IGNvbW1vbiBhbW9uZyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwkweGFlLCAweGIwLCAtMVUKK307CisKKy8qCisgKiBPUU8gMDErIG11bHRpbWVkaWEga2V5cyAoNjQtLTY2KSBnZW5lcmF0ZSBlMCA2eCB1cG9uIHJlbGVhc2Ugd2hlcmVhcworICogdGhleSBzaG91bGQgYmUgZ2VuZXJhdGluZyBlNC1lNiAoMHg4MCB8IGNvZGUpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX29xb18wMXBsdXNfc2NhbmNvZGVfZml4dXAoc3RydWN0IGF0a2JkICphdGtiZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQgJiYgYXRrYmQtPmVtdWwgPT0gMSAmJgorCSAgICAoY29kZSA9PSAweDY0IHx8IGNvZGUgPT0gMHg2NSB8fCBjb2RlID09IDB4NjYpKSB7CisJCWF0a2JkLT5lbXVsID0gMDsKKwkJY29kZSB8PSAweDgwOworCX0KKworCXJldHVybiBjb2RlOworfQorCisvKgogICogYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoKSBpbml0aWFsaXplcyBrZXlib2FyZCdzIGtleWNvZGUgdGFibGUKICAqIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgc2NhbmNvZGUgc2V0CiAgKi8KQEAgLTEwODcsNiArMTExOSw3IEBACiAJCX0KIAogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmRfc2V0LCBhdGtiZF9leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCiAJfSBlbHNlIHsKQEAgLTExNDEsNiArMTE3NCwxOCBAQAogCQkJcmV0dXJuIC0xOwogCiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKKworCQkvKgorCQkgKiBSZXN0b3JlIExFRCBzdGF0ZSBhbmQgcmVwZWF0IHJhdGUuIFdoaWxlIGlucHV0IGNvcmUKKwkJICogd2lsbCBkbyB0aGlzIGZvciB1cyBhdCByZXN1bWUgdGltZSByZWNvbm5lY3QgbWF5IGhhcHBlbgorCQkgKiBiZWNhdXNlIHVzZXIgcmVxdWVzdGVkIGl0IHZpYSBzeXNmcyBvciBzaW1wbHkgYmVjYXVzZQorCQkgKiBrZXlib2FyZCB3YXMgdW5wbHVnZ2VkIGFuZCBwbHVnZ2VkIGluIGFnYWluIHNvIHdlIG5lZWQKKwkJICogdG8gZG8gaXQgb3Vyc2VsdmVzIGhlcmUuCisJCSAqLworCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJCWlmICghYXRrYmQtPnNvZnRyZXBlYXQpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCiAJfQogCiAJYXRrYmRfZW5hYmxlKGF0a2JkKTsKQEAgLTEyNjcsNiArMTMxMiw3IEBACiAKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZC0+c2V0LCB2YWx1ZSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTM4OCw2ICsxNDM0LDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIHZhbHVlLCBhdGtiZC0+ZXh0cmEpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKQEAgLTE1MTMsNiArMTU2MCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLApAQCAtMTU0OCw3ICsxNjAyLDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE2MTEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE2MjAsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE2MjksNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE2MzgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2NzQsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApAQCAtMTY0OSw2ICsxNzAzLDE1IEBACiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAogCQkuZHJpdmVyX2RhdGEgPSBhdGtkYl9zb2x0ZWNoX3RhMTJfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAorCXsKKwkJLmlkZW50ID0gIk9RTyBNb2RlbCAwMSsiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk9RTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBUTyIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cCwKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cCwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTg4YWZmMy4uNzdkMTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAorCQkJCSAgICBJUlFGX1NIQVJFRCB8CiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyIsCiAJCQkJICAgIGJkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCmluZGV4IGU5ZDYzOWUuLjVmNzI0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpZmRlZiBDT05GSUdfSFAzMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCmluZGV4IDQ3MmI1NjYuLmE5OWEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYwpAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAwMmY0ZjhmLi5hOWJiMjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMjI3LDYgKzIyNyw3IEBACiAJZGVwZW5kcyBvbiBYODYgJiYgUE5QCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKKwlzZWxlY3QgTEVEU19UUklHR0VSUwogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIElSIHJlbW90ZSBmdW5jdGlvbmFsaXR5IGZvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCAyMTZhNTU5Li5lYTgyMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAvKiBSZWFkIHRoZSBpODA0MiBmYXN0IGhhbmRzaGFrZSB0aW1lciAqLwogc3RhdGljIGlubGluZSBpbnQgaHBfc2RjX3J0Y19yZWFkX2ZocyhzdHJ1Y3QgdGltZXZhbCAqcmVzKSB7Ci0JdWludDY0X3QgcmF3OworCWludDY0X3QgcmF3OwogCXVuc2lnbmVkIGludCB0ZW5tczsKIAogCXJhdyA9IGhwX3NkY19ydGNfcmVhZF9pODA0MnRpbWVyKEhQX1NEQ19DTURfTE9BRF9GSFMsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCBjODA2ZmJmLi4zYjlmNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTA2LDggKzEwNiw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJaW50IGVycjsKIAotCWlmICghcGRhdGEgfHwgIXBkYXRhLT5zdGVwcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHBsYXRmb3JtIGRhdGFcbiIpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggYzRmNDIzMS4uYjA2NDQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBiYmNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgYmJjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdHJ1Y3Qgc3BhcmNzcGtyX3N0YXRlICpzdGF0ZSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gc3RhdGUtPmlucHV0X2RldjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ3JvdmVyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdyb3Zlcl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHNwYXJjc3Brcl9zdGF0ZSAqc3RhdGUgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCXN0cnVjdCBncm92ZXJfYmVlcF9pbmZvICppbmZvID0gJnN0YXRlLT51Lmdyb3ZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBjNWE0OWFiLi5kM2Y1NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgogICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMWZkMDM4Li5hOTMyMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC05MzYsNiArOTM2LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDQyMjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNZWRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiV0lNIDIwMzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MjAwMAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NjUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OUEMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1ZTYzMDg2Li44MjgxMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTcyIiksCiAJCX0sCi0JCS5jYWxsYmFjayA9IGxpZmVib29rX3NldF9zZXJpb19waHlzLAotCQkuZHJpdmVyX2RhdGEgPSAiaXNhMDA2MC9zZXJpbzMiLAorCQkuY2FsbGJhY2sgPSBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8sCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA2OTBhZWQ5Li4wN2M1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKKwlib29sIHN5bmFwdGljc19oYXJkd2FyZSA9IGZhbHNlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTE2NzMsNyArMTY3Myw3IEBACiB7CiAJaW50IHR5cGUgPSAqKCh1bnNpZ25lZCBpbnQgKilrcC0+YXJnKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwc21vdXNlX3Byb3RvY29sX2J5X3R5cGUodHlwZSktPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzIiwgcHNtb3VzZV9wcm90b2NvbF9ieV90eXBlKHR5cGUpLT5uYW1lKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcHNtb3VzZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5NjZiODg2Li5hMTNkODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggYzRiM2ZiZC4uYWE1MzNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIGNvbmZpZyBTRVJJTwogCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KIAkgIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c3RlbS4gVGhpcyBpbmNsdWRlcyB0aGUKIAkgIAkJKiBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSAqCkBAIC0yMiw3ICsyMiw3IEBACiAJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uICFQQVJJU0MgJiYgKCFBUk0gfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QpICYmICFNNjhLICYmICFCTEFDS0ZJTgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBpODA0MiBpcyB0aGUgY2hpcCBvdmVyIHdoaWNoIHRoZSBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMgogCSAgbW91c2UgYXJlIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIElmIHlvdSB1c2UgdGhlc2UgZGV2aWNlcywKIAkgIHlvdSdsbCBuZWVkIHRvIHNheSBZIGhlcmUuCkBAIC0zNSw3ICszNSw3IEBACiBjb25maWcgU0VSSU9fU0VSUE9SVAogCXRyaXN0YXRlICJTZXJpYWwgcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQorCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIGFuIGlucHV0IGRldmljZSAobW91c2UsIGpveXN0aWNrLAogCSAgdGFibGV0LCA2ZG9mKSB0aGF0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBSUzIzMiBzZXJpYWwgKENPTSkgcG9ydC4KIApAQCAtNDksNyArNDksNyBAQAogY29uZmlnIFNFUklPX0NUODJDNzEwCiAJdHJpc3RhdGUgImN0ODJjNzEwIEF1eCBwb3J0IGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBYODYKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRleGFzIEluc3RydW1lbnRzIFRyYXZlbE1hdGUgbm90ZWJvb2sKIAkgIGVxdWlwcGVkIHdpdGggdGhlIGN0ODJjNzEwIGNoaXAgYW5kIHdhbnQgdG8gdXNlIGEgbW91c2UgY29ubmVjdGVkCiAJICB0byB0aGUgIlF1aWNrUG9ydCIuCkBAIC02Niw3ICs2Niw3IEBACiBjb25maWcgU0VSSU9fUEFSS0JECiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYnVpbHQgYSBzaW1wbGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIHRvIGF0dGFjaAogCSAgYW4gYWRkaXRpb25hbCBBVCBrZXlib2FyZCwgWFQga2V5Ym9hcmQgb3IgUFMvMiBtb3VzZS4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdHJpc3RhdGUgIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgIlN5c3RlbSBEZXZpY2UKIAkgIENvbnRyb2xsZXIiLCBhbiBpODA0MiBjYXJyeWluZyBtaWNyb2NvZGUgdG8gbWFuYWdlIGEKIAkgIGZldyBtaXNjZWxsYW5lb3VzIGRldmljZXMgb24gc29tZSBIZXdsZXR0IFBhY2thcmQgc3lzdGVtcy4KQEAgLTE2OCw2ICsxNjgsNyBAQAogCiBjb25maWcgU0VSSU9fTElCUFMyCiAJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgZHJpdmVyIGZvciBkZXZpY2UgY29ubmVjdGVkCiAJICB0byBhIFBTLzIgcG9ydCwgc3VjaCBhcyBQUy8yIG1vdXNlIG9yIHN0YW5kYXJkIEFUIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYmM1NmU1Mi4uMWRmMDJkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTYwOSw2ICs2MDksOCBAQAogCXN0ciA9IGk4MDQyX3JlYWRfc3RhdHVzKCk7CiAJaWYgKHN0ciAmIEk4MDQyX1NUUl9PQkYpIHsKIAkJZGF0YSA9IGk4MDQyX3JlYWRfZGF0YSgpOworCQlkYmcoIiUwMnggPC0gaTgwNDIgKGF1eF90ZXN0X2lycSwgJXMpIiwKKwkJCWRhdGEsIHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBID8gImF1eCIgOiAia2JkIik7CiAJCWlmIChpODA0Ml9pcnFfYmVpbmdfdGVzdGVkICYmCiAJCSAgICBkYXRhID09IDB4YTUgJiYgKHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBKSkKIAkJCWNvbXBsZXRlKCZpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCk7CkBAIC03NTAsNiArNzUyLDcgQEAKICAqIEFVWCBJUlEgd2FzIG5ldmVyIGRlbGl2ZXJlZCBzbyB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyIHRvCiAgKiBnZXQgcmlkIG9mIHRoZSBieXRlIHdlIHB1dCB0aGVyZTsgb3RoZXJ3aXNlIGtleWJvYXJkIG1heSBub3Qgd29yay4KICAqLworCQlkYmcoIiAgICAgLS0gaTgwNDIgKGF1eCBpcnEgdGVzdCB0aW1lb3V0KSIpOwogCQlpODA0Ml9mbHVzaCgpOwogCQlyZXR2YWwgPSAtMTsKIAl9CkBAIC04MzMsMTcgKzgzNiwzMiBAQAogc3RhdGljIGludCBpODA0Ml9jb250cm9sbGVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGN0clsyXTsKIAogLyoKLSAqIFNhdmUgdGhlIENUUiBmb3IgcmVzdG9yYWwgb24gdW5sb2FkIC8gcmVib290LgorICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JlIG9uIHVubG9hZCAvIHJlYm9vdC4KICAqLwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgewotCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJZG8geworCQlpZiAobiA+PSAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IFVuYWJsZSB0byBnZXQgc3RhYmxlIENUUiByZWFkLlxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCi0JaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHI7CisJCWlmIChuICE9IDApCisJCQl1ZGVsYXkoNTApOworCisJCWlmIChpODA0Ml9jb21tYW5kKCZjdHJbbisrICUgMl0sIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBpbml0aWFsaXppbmcgaTgwNDIuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwl9IHdoaWxlIChuIDwgMiB8fCBjdHJbMF0gIT0gY3RyWzFdKTsKKworCWk4MDQyX2luaXRpYWxfY3RyID0gaTgwNDJfY3RyID0gY3RyWzBdOwogCiAvKgogICogRGlzYWJsZSB0aGUga2V5Ym9hcmQgaW50ZXJmYWNlIGFuZCBpbnRlcnJ1cHQuCkBAIC04OTIsNiArOTEwLDEyIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorLyoKKyAqIEZsdXNoIHdoYXRldmVyIGFjY3VtdWxhdGVkIHdoaWxlIHdlIHdlcmUgZGlzYWJsaW5nIGtleWJvYXJkIHBvcnQuCisgKi8KKworCWk4MDQyX2ZsdXNoKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTExLDcgKzkzNSw3IEBACiAJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9LQkRESVMgfCBJODA0Ml9DVFJfQVVYRElTOwogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9LQkRJTlQgfCBJODA0Ml9DVFJfQVVYSU5UKTsKIAotCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9pbml0aWFsX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgcmVzZXR0aW5nLlxuIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwppbmRleCA3NjliYTY1Li5mMzg3NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IGIwMzAwOWIuLjI3ZmRhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwppbmRleCBiOTY5NGI2Li42ZDM0NTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKaW5kZXggZjA2MzMyYy4uYzIxZTZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCkBAIC02NDUsNyArNjQ1LDcgQEAKIAkJa2ZyZWUodHMpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgYWQ3ODc5X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtNzMyLDcgKzczMiw3IEBACiAJCWtmcmVlKHRzKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCmluZGV4IDU3ZDI2MzYuLmRjNTA2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IDhiMjU2YTYuLjM2OTdjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjZWxzZQogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSAiaXNkbl9kaXZlcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYwppbmRleCBkMzBjZTViLi44NWE4ZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKgogICovCiAgCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogI2luY2x1ZGUgImlzYWMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYwppbmRleCA1YzQ2YTcxLi44ZDIyZjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaGZjXzJiZHMwLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCBkMTEwYTc3Li4xMDkxNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJoZmNfcGNpLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogc3RhdGljIGNvbnN0IGNoYXIgKmhmY3BjaV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuNDguMi40ICQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA4ZjlmNDkxLi45MGIzNWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMTEsNiArMTEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCA4OTkxZDJjLi44YmNhZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwppbmRleCA4YzY2YmNiLi4xMjNjMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggZTA3NWU4ZC4uMzBmMGY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwppbmRleCBkZDBhY2QwLi41YTA3NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpbmNsdWRlcy5oIgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAjaW5jbHVkZSAiY2FyZC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA3YzhlNzEyMmEuLmU0ZjU5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNTAsOSArMTUwLDkgQEAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIE4uUy4gTFAzOTQ0IChGdW4gTGlnaHQpIEkyQyBjaGlwIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMKIAloZWxwCi0gICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKLSAgICBTZW1pY29uZHVjdG9yIExQMzk0NCBMaWdodGluZyBNYW5hZ2VtZW50IFVuaXQgKExNVSkgYWxzbyBrbm93biBhcwotICAgIEZ1biBMaWdodCBDaGlwLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKKwkgIFNlbWljb25kdWN0b3IgTFAzOTQ0IExpZ2h0aW5nIE1hbmFnZW1lbnQgVW5pdCAoTE1VKSBhbHNvIGtub3duIGFzCisJICBGdW4gTGlnaHQgQ2hpcC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGVkcy1scDM5NDQuCkBAIC0xOTUsNiArMTk1LDEzIEBACiAJICBMRUQgZHJpdmVyIGNoaXBzIGFjY2Vzc2VkIHZpYSB0aGUgSTJDIGJ1cy4gIFN1cHBvcnRlZAogCSAgZGV2aWNlcyBpbmNsdWRlIFBDQTk1NTAsIFBDQTk1NTEsIFBDQTk1NTIsIGFuZCBQQ0E5NTUzLgogCitjb25maWcgTEVEU19XTTgzMVhfU1RBVFVTCisJdHJpc3RhdGUgIkxFRCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEcyBvbiBXTTgzMXggUE1JQ3MiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBzdGF0dXMgTEVEcyBvZiB0aGUgV004MzF4CisgICAgICAgICAgc2VyaWVzIG9mIFBNSUNzLgorCiBjb25maWcgTEVEU19XTTgzNTAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIFdNODM1MCBBdWRpb1BsdXMgUE1JQyIKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX1dNODM1MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCmluZGV4IGU4Y2RjZjcuLjQ2ZDcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIG9iai0kKENPTkZJR19MRURTX0ZTRykJCQkrPSBsZWRzLWZzZy5vCiBvYmotJChDT05GSUdfTEVEU19QQ0E5NTVYKQkJKz0gbGVkcy1wY2E5NTV4Lm8KIG9iai0kKENPTkZJR19MRURTX0RBOTAzWCkJCSs9IGxlZHMtZGE5MDN4Lm8KK29iai0kKENPTkZJR19MRURTX1dNODMxWF9TVEFUVVMpCSs9IGxlZHMtd204MzF4LXN0YXR1cy5vCiBvYmotJChDT05GSUdfTEVEU19XTTgzNTApCQkrPSBsZWRzLXdtODM1MC5vCiBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKaW5kZXggZjIyNDJkYi4uYTQ5ODEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJLmZsYWdzCQkJPSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgY2xldm9fbWFpbF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNsZXZvX21haWxfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY2xldm9fbWFpbF9sZWQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKaW5kZXggMDU5YWEyOS4uODgxNjgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCkBAIC0yOCw3ICsyOCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHF1YmVfZnJvbnRfbGVkID0gewotCS5uYW1lCQkJPSAicXViZS1mcm9udCIsCisJLm5hbWUJCQk9ICJxdWJlOjpmcm9udCIsCiAJLmJyaWdodG5lc3MJCT0gTEVEX0ZVTEwsCiAJLmJyaWdodG5lc3Nfc2V0CQk9IHF1YmVfZnJvbnRfbGVkX3NldCwKIAkuZGVmYXVsdF90cmlnZ2VyCT0gImlkZS1kaXNrIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYwppbmRleCA1ZjFjZTgxLi5kZWZjMjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCkBAIC00OSw3ICs0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHJhcV93ZWJfbGVkID0gewotCS5uYW1lCQk9ICJyYXEtd2ViIiwKKwkubmFtZQkJPSAicmFxOjp3ZWIiLAogCS5icmlnaHRuZXNzX3NldAk9IHJhcV93ZWJfbGVkX3NldCwKIH07CiAKQEAgLTcwLDcgKzcwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcmFxX3Bvd2VyX29mZl9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJyYXEtcG93ZXItb2ZmIiwKKwkubmFtZQkJCT0gInJhcTo6cG93ZXItb2ZmIiwKIAkuYnJpZ2h0bmVzc19zZXQJCT0gcmFxX3Bvd2VyX29mZl9sZWRfc2V0LAogCS5kZWZhdWx0X3RyaWdnZXIJPSAicG93ZXItb2ZmIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKaW5kZXggNmIwNjYzOGUuLmU1MjI1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKQEAgLTc4LDkgKzc4LDExIEBACiB7CiAJaW50IHJldCwgc3RhdGU7CiAKKwlsZWRfZGF0LT5ncGlvID0gLTE7CisKIAkvKiBza2lwIGxlZHMgdGhhdCBhcmVuJ3QgYXZhaWxhYmxlICovCiAJaWYgKCFncGlvX2lzX3ZhbGlkKHRlbXBsYXRlLT5ncGlvKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyB1bmF2aWxhYmxlIExFRCBncGlvICVkICglcylcbiIsIAorCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyB1bmF2YWlsYWJsZSBMRUQgZ3BpbyAlZCAoJXMpXG4iLAogCQkJCXRlbXBsYXRlLT5ncGlvLCB0ZW1wbGF0ZS0+bmFtZSk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwppbmRleCBkYmE4OTIxLi5hZGM1NjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCkBAIC0xOSw5ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy1wY2E5NTMyLmg+CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IC8qMHg2MCwqLyBJMkNfQ0xJRU5UX0VORH07Ci1JMkNfQ0xJRU5UX0lOU01PRF8xKHBjYTk1MzIpOwotCiAjZGVmaW5lIFBDQTk1MzJfUkVHX1BTQyhpKSAoMHgyKyhpKSoyKQogI2RlZmluZSBQQ0E5NTMyX1JFR19QV00oaSkgKDB4MysoaSkqMikKICNkZWZpbmUgUENBOTUzMl9SRUdfTFMwICAweDYKQEAgLTM0LDcgKzMxLDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBwY2E5NTMyX2xlZCBsZWRzWzE2XTsKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAqaWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXU4IHB3bVsyXTsKIAl1OCBwc2NbMl07CkBAIC01Myw5ICs1MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwY2E5NTMyX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSAgID0gInBjYTk1MzIiLAorCQkubmFtZSA9ICJwY2E5NTMyIiwKIAl9LAotCS5wcm9iZSAgPSBwY2E5NTMyX3Byb2JlLAorCS5wcm9iZSA9IHBjYTk1MzJfcHJvYmUsCiAJLnJlbW92ZSA9IHBjYTk1MzJfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHBjYTk1MzJfaWQsCiB9OwpAQCAtMTQ5LDcgKzE0Niw3IEBACiAKIAlpZiAoKmRlbGF5X29uID09IDAgJiYgKmRlbGF5X29mZiA9PSAwKSB7CiAJLyogbGVkIHN1YnN5c3RlbSBhc2sgdXMgZm9yIGEgYmxpbmsgcmF0ZSAqLwotCQkqZGVsYXlfb24gID0gMTAwMDsKKwkJKmRlbGF5X29uID0gMTAwMDsKIAkJKmRlbGF5X29mZiA9IDEwMDA7CiAJfQogCWlmICgqZGVsYXlfb24gIT0gKmRlbGF5X29mZiB8fCAqZGVsYXlfb24gPiAxNjkwIHx8ICpkZWxheV9vbiA8IDYpCkBAIC0yMjcsNyArMjI0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFBDQTk1MzJfVFlQRV9MRUQ6CiAJCQlsZWQtPnN0YXRlID0gcGxlZC0+c3RhdGU7Ci0JCQlsZWQtPm5hbWUgPSAgcGxlZC0+bmFtZTsKKwkJCWxlZC0+bmFtZSA9IHBsZWQtPm5hbWU7CiAJCQlsZWQtPmxkZXYubmFtZSA9IGxlZC0+bmFtZTsKIAkJCWxlZC0+bGRldi5icmlnaHRuZXNzID0gTEVEX09GRjsKIAkJCWxlZC0+bGRldi5icmlnaHRuZXNzX3NldCA9IHBjYTk1MzJfc2V0X2JyaWdodG5lc3M7CkBAIC0yNTQsNyArMjUxLDcgQEAKIAkJCWRhdGEtPmlkZXYtPm5hbWUgPSBwbGVkLT5uYW1lOwogCQkJZGF0YS0+aWRldi0+cGh5cyA9ICJpMmMvcGNhOTUzMiI7CiAJCQlkYXRhLT5pZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JCQlkYXRhLT5pZGV2LT5pZC52ZW5kb3IgID0gMHgwMDFmOworCQkJZGF0YS0+aWRldi0+aWQudmVuZG9yID0gMHgwMDFmOwogCQkJZGF0YS0+aWRldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAkJCWRhdGEtPmlkZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJCQlkYXRhLT5pZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1NORCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy13bTgzMXgtc3RhdHVzLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzMXgtc3RhdHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4NmQwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIExFRCBkcml2ZXIgZm9yIFdNODMxeCBzdGF0dXMgTEVEcworICoKKyAqIENvcHlyaWdodChDKSAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvc3RhdHVzLmg+CisKKworc3RydWN0IHdtODMxeF9zdGF0dXMgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJc3BpbmxvY2tfdCB2YWx1ZV9sb2NrOworCWludCByZWc7ICAgICAvKiBDb250cm9sIHJlZ2lzdGVyICovCisJaW50IHJlZ192YWw7IC8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgKi8KKworCWludCBibGluazsKKwlpbnQgYmxpbmtfdGltZTsKKwlpbnQgYmxpbmtfY3ljOworCWludCBzcmM7CisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOworfTsKKworI2RlZmluZSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KSBcCisJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3Qgd204MzF4X3N0YXR1cywgY2RldikKKworc3RhdGljIHZvaWQgd204MzF4X3N0YXR1c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTgzMXhfc3RhdHVzLAorCQkJCQkJIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCWxlZC0+cmVnX3ZhbCAmPSB+KFdNODMxWF9MRURfU1JDX01BU0sgfCBXTTgzMVhfTEVEX01PREVfTUFTSyB8CisJCQkgIFdNODMxWF9MRURfRFVUWV9DWUNfTUFTSyB8IFdNODMxWF9MRURfRFVSX01BU0spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJbGVkLT5yZWdfdmFsIHw9IGxlZC0+c3JjIDw8IFdNODMxWF9MRURfU1JDX1NISUZUOworCWlmIChsZWQtPmJsaW5rKSB7CisJCWxlZC0+cmVnX3ZhbCB8PSAyIDw8IFdNODMxWF9MRURfTU9ERV9TSElGVDsKKwkJbGVkLT5yZWdfdmFsIHw9IGxlZC0+YmxpbmtfdGltZSA8PCBXTTgzMVhfTEVEX0RVUl9TSElGVDsKKwkJbGVkLT5yZWdfdmFsIHw9IGxlZC0+YmxpbmtfY3ljOworCX0gZWxzZSB7CisJCWlmIChsZWQtPmJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJCWxlZC0+cmVnX3ZhbCB8PSAxIDw8IFdNODMxWF9MRURfTU9ERV9TSElGVDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCXdtODMxeF9yZWdfd3JpdGUobGVkLT53bTgzMXgsIGxlZC0+cmVnLCBsZWQtPnJlZ192YWwpOworCisJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd204MzF4X3N0YXR1c19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCWxlZC0+YnJpZ2h0bmVzcyA9IHZhbHVlOworCWlmICh2YWx1ZSA9PSBMRURfT0ZGKQorCQlsZWQtPmJsaW5rID0gMDsKKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFBpY2sgc29tZSBkZWZhdWx0cyBpZiB3ZSd2ZSBub3QgYmVlbiBnaXZlbiB0aW1lcyAqLworCWlmICgqZGVsYXlfb24gPT0gMCAmJiAqZGVsYXlfb2ZmID09IDApIHsKKwkJKmRlbGF5X29uID0gMjUwOworCQkqZGVsYXlfb2ZmID0gMjUwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCS8qIFdlIG9ubHkgaGF2ZSBhIGxpbWl0ZWQgc2VsZWN0aW9uIG9mIHNldHRpbmdzLCBzZWUgaWYgd2UgY2FuCisJICogc3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSBiZWluZyBnaXZlbiAqLworCXN3aXRjaCAoKmRlbGF5X29uKSB7CisJY2FzZSAxMDAwOgorCQlsZWQtPmJsaW5rX3RpbWUgPSAwOworCQlicmVhazsKKwljYXNlIDI1MDoKKwkJbGVkLT5ibGlua190aW1lID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMjU6CisJCWxlZC0+YmxpbmtfdGltZSA9IDI7CisJCWJyZWFrOworCWNhc2UgNjI6CisJY2FzZSA2MzoKKwkJLyogQWN0dWFsbHkgNjIuNW1zICovCisJCWxlZC0+YmxpbmtfdGltZSA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgPT0gMCkgeworCQlzd2l0Y2ggKCpkZWxheV9vZmYgLyAqZGVsYXlfb24pIHsKKwkJY2FzZSAxOgorCQkJbGVkLT5ibGlua19jeWMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWxlZC0+YmxpbmtfY3ljID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJbGVkLT5ibGlua19jeWMgPSAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0ID09IDApCisJCWxlZC0+YmxpbmsgPSAxOworCWVsc2UKKwkJbGVkLT5ibGluayA9IDA7CisKKwkvKiBBbHdheXMgdXBkYXRlOyBpZiB3ZSBmYWlsIHR1cm4gb2ZmIGJsaW5raW5nIHNpbmNlIHdlIGV4cGVjdAorCSAqIGEgc29mdHdhcmUgZmFsbGJhY2suICovCisJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxlZF9zcmNfdGV4dHNbXSA9IHsKKwkib3RwIiwKKwkicG93ZXIiLAorCSJjaGFyZ2VyIiwKKwkic29mdCIsCit9OworCitzdGF0aWMgc3NpemVfdCB3bTgzMXhfc3RhdHVzX3NyY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCWludCBpOworCXNzaXplX3QgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmxlZC0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkX3NyY190ZXh0cyk7IGkrKykKKwkJaWYgKGkgPT0gbGVkLT5zcmMpCisJCQlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICJbJXNdICIsIGxlZF9zcmNfdGV4dHNbaV0pOworCQllbHNlCisJCQlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICIlcyAiLCBsZWRfc3JjX3RleHRzW2ldKTsKKworCW11dGV4X3VubG9jaygmbGVkLT5tdXRleCk7CisKKwlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgd204MzF4X3N0YXR1c19zcmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwljaGFyIG5hbWVbMjBdOworCWludCBpOworCXNpemVfdCBsZW47CisKKwluYW1lW3NpemVvZihuYW1lKSAtIDFdID0gJ1wwJzsKKwlzdHJuY3B5KG5hbWUsIGJ1Ziwgc2l6ZW9mKG5hbWUpIC0gMSk7CisJbGVuID0gc3RybGVuKG5hbWUpOworCisJaWYgKGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICdcbicpCisJCW5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkX3NyY190ZXh0cyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCBsZWRfc3JjX3RleHRzW2ldKSkgeworCQkJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwkJCWxlZC0+c3JjID0gaTsKKwkJCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7CisKKwkJCW11dGV4X3VubG9jaygmbGVkLT5tdXRleCk7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNyYywgMDY0NCwgd204MzF4X3N0YXR1c19zcmNfc2hvdywgd204MzF4X3N0YXR1c19zcmNfc3RvcmUpOworCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqY2hpcF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1c19wZGF0YSBwZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqZHJ2ZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaWQgPSBwZGV2LT5pZCAlIEFSUkFZX1NJWkUoY2hpcF9wZGF0YS0+c3RhdHVzKTsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJL08gcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODMxeF9zdGF0dXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBkcnZkYXRhKTsKKworCWRydmRhdGEtPndtODMxeCA9IHdtODMxeDsKKwlkcnZkYXRhLT5yZWcgPSByZXMtPnN0YXJ0OworCisJaWYgKHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQorCQljaGlwX3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJZWxzZQorCQljaGlwX3BkYXRhID0gTlVMTDsKKworCW1lbXNldCgmcGRhdGEsIDAsIHNpemVvZihwZGF0YSkpOworCWlmIChjaGlwX3BkYXRhICYmIGNoaXBfcGRhdGEtPnN0YXR1c1tpZF0pCisJCW1lbWNweSgmcGRhdGEsIGNoaXBfcGRhdGEtPnN0YXR1c1tpZF0sIHNpemVvZihwZGF0YSkpOworCWVsc2UKKwkJcGRhdGEubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOworCisJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+bXV0ZXgpOworCUlOSVRfV09SSygmZHJ2ZGF0YS0+d29yaywgd204MzF4X3N0YXR1c193b3JrKTsKKwlzcGluX2xvY2tfaW5pdCgmZHJ2ZGF0YS0+dmFsdWVfbG9jayk7CisKKwkvKiBXZSBjYWNoZSB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlciBhbmQgcmVhZCBzdGFydHVwIHZhbHVlcworCSAqIGZyb20gaXQuICovCisJZHJ2ZGF0YS0+cmVnX3ZhbCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIGRydmRhdGEtPnJlZyk7CisKKwlpZiAoZHJ2ZGF0YS0+cmVnX3ZhbCAmIFdNODMxWF9MRURfTU9ERV9NQVNLKQorCQlkcnZkYXRhLT5icmlnaHRuZXNzID0gTEVEX0ZVTEw7CisJZWxzZQorCQlkcnZkYXRhLT5icmlnaHRuZXNzID0gTEVEX09GRjsKKworCS8qIFNldCBhIGRlZmF1bHQgc291cmNlIGlmIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSBsZWF2ZSB0aGUKKwkgKiBjdXJyZW50IGhhcmR3YXJlIHNldHRpbmcuCisJICovCisJaWYgKHBkYXRhLmRlZmF1bHRfc3JjID09IFdNODMxWF9TVEFUVVNfUFJFU0VSVkUpIHsKKwkJZHJ2ZGF0YS0+c3JjID0gZHJ2ZGF0YS0+cmVnX3ZhbDsKKwkJZHJ2ZGF0YS0+c3JjICY9IFdNODMxWF9MRURfU1JDX01BU0s7CisJCWRydmRhdGEtPnNyYyA+Pj0gV004MzFYX0xFRF9TUkNfU0hJRlQ7CisJfSBlbHNlIHsKKwkJZHJ2ZGF0YS0+c3JjID0gcGRhdGEuZGVmYXVsdF9zcmMgLSAxOworCX0KKworCWRydmRhdGEtPmNkZXYubmFtZSA9IHBkYXRhLm5hbWU7CisJZHJ2ZGF0YS0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBwZGF0YS5kZWZhdWx0X3RyaWdnZXI7CisJZHJ2ZGF0YS0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IHdtODMxeF9zdGF0dXNfc2V0OworCWRydmRhdGEtPmNkZXYuYmxpbmtfc2V0ID0gd204MzF4X3N0YXR1c19ibGlua19zZXQ7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod204MzF4LT5kZXYsICZkcnZkYXRhLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbGVkOworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkcnZkYXRhLT5jZGV2LmRldiwgJmRldl9hdHRyX3NyYyk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiTm8gc291cmNlIGNvbnRyb2wgZm9yIExFRDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2xlZDoKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZHJ2ZGF0YS0+Y2Rldik7CisJa2ZyZWUoZHJ2ZGF0YSk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTgzMXhfc3RhdHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpkcnZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZHJ2ZGF0YS0+Y2Rldi5kZXYsICZkZXZfYXR0cl9zcmMpOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkcnZkYXRhLT5jZGV2KTsKKwlrZnJlZShkcnZkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzMXhfc3RhdHVzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ3bTgzMXgtc3RhdHVzIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gd204MzF4X3N0YXR1c19wcm9iZSwKKwkucmVtb3ZlID0gd204MzF4X3N0YXR1c19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTgzMXhfc3RhdHVzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfc3RhdHVzX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfc3RhdHVzX2luaXQpOworCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzF4X3N0YXR1c19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X3N0YXR1c19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldNODMxeCBzdGF0dXMgTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtc3RhdHVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKaW5kZXggMWJjNWRiNC4uZjU5MTMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYwpAQCAtNDQsMjIgKzQ0LDIyIEBACiAJCQlzdHJ1Y3QgZ3Bpb190cmlnX2RhdGEsIHdvcmspOwogCWludCB0bXA7CiAKLSAgICAgICBpZiAoIWdwaW9fZGF0YS0+Z3BpbykKLQkgICAgICAgcmV0dXJuOworCWlmICghZ3Bpb19kYXRhLT5ncGlvKQorCQlyZXR1cm47CiAKLSAgICAgICB0bXAgPSBncGlvX2dldF92YWx1ZShncGlvX2RhdGEtPmdwaW8pOwotICAgICAgIGlmIChncGlvX2RhdGEtPmludmVydGVkKQotCSAgICAgICB0bXAgPSAhdG1wOworCXRtcCA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW9fZGF0YS0+Z3Bpbyk7CisJaWYgKGdwaW9fZGF0YS0+aW52ZXJ0ZWQpCisJCXRtcCA9ICF0bXA7CiAKLSAgICAgICBpZiAodG1wKSB7Ci0gICAgICAgICAgICAgICBpZiAoZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpCi0gICAgICAgICAgICAgICAgICAgICAgIGxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKTsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfRlVMTCk7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIGxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX09GRik7Ci0gICAgICAgfQorCWlmICh0bXApIHsKKwkJaWYgKGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKQorCQkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLAorCQkJCQkgICBncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcyk7CisJCWVsc2UKKwkJCWxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX0ZVTEwpOworCX0gZWxzZSB7CisJCWxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX09GRik7CisJfQogfQogCiBzdGF0aWMgc3NpemVfdCBncGlvX3RyaWdfYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCmluZGV4IDE4NjQ4MTguLmRhYWY4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImxnLmgiCiAKIC8qIEFsbG93IEd1ZXN0cyB0byB1c2UgYSBub24tMTI4IChpZS4gbm9uLUxpbnV4KSBzeXNjYWxsIHRyYXAuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwppbmRleCBiNGQzZjdjLi5iZDE2MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogICogdXNlczogcmVhZGluZyBhbmQgd3JpdGluZyBhIGNoYXJhY3RlciBkZXZpY2UgY2FsbGVkIC9kZXYvbGd1ZXN0LiAgQWxsIHRoZQogICogd29yayBoYXBwZW5zIGluIHRoZSByZWFkKCksIHdyaXRlKCkgYW5kIGNsb3NlKCkgcm91dGluZXM6CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxndWVzdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGd1ZXN0X2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0gY2xvc2UsCiAJLndyaXRlCSA9IHdyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IGZkZTM3N2MuLjU1NmYwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGhlcm1vc3RhdF9kcml2ZXI7CisKIHN0YXRpYyBpbnQKIGF0dGFjaF90aGVybW9zdGF0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTE0OCw3ICsxNTAsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmdGhlcm1vc3RhdF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCBhMDI4NTk4Li5lYTMyYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0yODYsNiArMjg2LDggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRoZXJtX3BtNzJfZHJpdmVyOworCiAvKgogICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaTJjX2NsaWVudCBzdHJ1Y3R1cmUgYW5kCiAgKiBhdHRhY2ggaXQgdG8gb25lIG9mIHUzIGFkYXB0ZXJzCkBAIC0zMTgsNyArMzIwLDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsdC0+ZGV0ZWN0ZWQsICZjbHQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2x0LT5kZXRlY3RlZCwgJnRoZXJtX3BtNzJfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCmluZGV4IDU1YWQ5NTYuLmQyNDI5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwpAQCAtNzIsNyArNzIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBwbXVfbGVkID0gewotCS5uYW1lID0gInBtdS1mcm9udC1sZWQiLAorCS5uYW1lID0gInBtdS1sZWQ6OmZyb250IiwKICNpZmRlZiBDT05GSUdfQURCX1BNVV9MRURfSURFCiAJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBiNDBmYjliLi42ZjMwOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00MDUsNyArNDA1LDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgbWFwIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgMCwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CisJLyogV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQKKwkgKiBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIgc3VzcGVuZCwgd2UgY29udHJvbCBvdXIgb3duIGRpc2FibGluZworCSAqIGZvciB0aGF0IG9uZQorCSAqLworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDE5LDcgKzQyMyw3IEBACiAJCQlncGlvX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGdwaW9fbm9kZSwgMCk7CiAKIAkJaWYgKGdwaW9faXJxICE9IE5PX0lSUSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIDAsCisJCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgSVJRRl9USU1FUiwKIAkJCQkJIkdQSU8xIEFEQiIsICh2b2lkICopMCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJwbXU6IGNhbid0IGdldCBpcnEgJWQiCiAJCQkJICAgICAgICIgKEdQSU8xKVxuIiwgZ3Bpb19pcnEpOwpAQCAtOTI1LDggKzkyOSw3IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiAvKiBTZW5kIGFuIEFEQiBjb21tYW5kICovCi1zdGF0aWMgaW50Ci1wbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKK3N0YXRpYyBpbnQgcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTAwNSwxNiArMTAwOCwxMSBAQAogfQogCiAvKiBFbmFibGUvZGlzYWJsZSBhdXRvcG9sbGluZyAqLwotc3RhdGljIGludAotcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3N0YXRpYyBpbnQgX19wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAKLQlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZGV2cykgewotCQlhZGJfZGV2X21hcCA9IGRldnM7CiAJCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIFBNVV9BREJfQ01ELCAwLCAweDg2LAogCQkJICAgIGFkYl9kZXZfbWFwID4+IDgsIGFkYl9kZXZfbWFwKTsKIAkJcG11X2FkYl9mbGFncyA9IDI7CkBAIC0xMDI3LDkgKzEwMjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQoreworCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWFkYl9kZXZfbWFwID0gZGV2czsKKwlyZXR1cm4gX19wbXVfYWRiX2F1dG9wb2xsKGRldnMpOworfQorCiAvKiBSZXNldCB0aGUgQURCIGJ1cyAqLwotc3RhdGljIGludAotcG11X2FkYl9yZXNldF9idXModm9pZCkKK3N0YXRpYyBpbnQgcG11X2FkYl9yZXNldF9idXModm9pZCkKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCWludCBzYXZlX2F1dG9wb2xsID0gYWRiX2Rldl9tYXA7CkBAIC0xMDM4LDEzICsxMDQ0LDEzIEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiBhbnlvbmUgZ290IGEgYmV0dGVyIGlkZWE/PyAqLwotCXBtdV9hZGJfYXV0b3BvbGwoMCk7CisJX19wbXVfYWRiX2F1dG9wb2xsKDApOwogCi0JcmVxLm5ieXRlcyA9IDU7CisJcmVxLm5ieXRlcyA9IDQ7CiAJcmVxLmRvbmUgPSBOVUxMOwogCXJlcS5kYXRhWzBdID0gUE1VX0FEQl9DTUQ7Ci0JcmVxLmRhdGFbMV0gPSAwOwotCXJlcS5kYXRhWzJdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzFdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzJdID0gMDsKIAlyZXEuZGF0YVszXSA9IDA7CiAJcmVxLmRhdGFbNF0gPSAwOwogCXJlcS5yZXBseV9sZW4gPSAwOwpAQCAtMTA1Niw3ICsxMDYyLDcgQEAKIAlwbXVfd2FpdF9jb21wbGV0ZSgmcmVxKTsKIAogCWlmIChzYXZlX2F1dG9wb2xsICE9IDApCi0JCXBtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CisJCV9fcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggNTI5ODg2Yy4uZWQ2NDI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0xMTUsNiArMTE1LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3Zl9sbTc1X2RyaXZlcjsKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp3Zl9sbTc1X2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSAgICAgdTggYWRkciwgaW50IGRzMTc3NSwKIAkJCQkJICAgICBjb25zdCBjaGFyICpsb2MpCkBAIC0xNTcsNyArMTU5LDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJndmX2xtNzVfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbGllbnQ7CiAgZmFpbDoKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCmluZGV4IGUyYTU1ZWMuLmE2N2IzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwpAQCAtODgsNiArODgsOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX21heDY2OTBfZHJpdmVyOworCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKndmX21heDY2OTBfY3JlYXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgIHU4IGFkZHIsIGNvbnN0IGNoYXIgKmxvYykKIHsKQEAgLTExOSw3ICsxMjEsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2ZfbWF4NjY5MF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIGNsaWVudDsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKaW5kZXggNWRhNzI5ZS4uZTIwMzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwpAQCAtMTk0LDYgKzE5NCw4IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX3NhdF9kcml2ZXI7CisKIHN0YXRpYyB2b2lkIHdmX3NhdF9jcmVhdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKQEAgLTIyMiw3ICsyMjQsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2Zfc2F0X2RyaXZlci5jbGllbnRzKTsKIH0KIAogc3RhdGljIGludCB3Zl9zYXRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDFkYzQxODUuLmUzNTVlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNyBAQAogb2JqLSQoQ09ORklHX0RNX1pFUk8pCQkrPSBkbS16ZXJvLm8KIAogcXVpZXRfY21kX3Vucm9sbCA9IFVOUk9MTCAgJEAKLSAgICAgIGNtZF91bnJvbGwgPSAkKFBFUkwpICQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5wbCAkKFVOUk9MTCkgXAorICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCiAgICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKIAogaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKQEAgLTU5LDU2ICs1OSw1NiBAQAogCiB0YXJnZXRzICs9IHJhaWQ2aW50MS5jCiAkKG9iaikvcmFpZDZpbnQxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDIuYwogJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ0LmMKICQob2JqKS9yYWlkNmludDQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50OC5jCiAkKG9iaikvcmFpZDZpbnQ4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDE2LmMKICQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKLSQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDMyLmMKICQob2JqKS9yYWlkNmludDMyLmM6ICBVTlJPTEwgOj0gMzIKLSQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzEubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzEuYwogJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzIubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzIuYwogJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYwogJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzgubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzguYwogJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogcXVpZXRfY21kX21rdGFibGUgPSBUQUJMRSAgICRACmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA2OTg2YjAwLi42MGUyYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTE2MjQsMTAgKzE2MjQsMTEgQEAKIAliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwotCQlkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCAwLCBMTE9OR19NQVgsCi0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTsKKwkJLyogQXMgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZmlsZSB3aWxsIHVzZSBibWFwLAorCQkgKiBhbmQgYnlwYXNzIHRoZSBwYWdlIGNhY2hlLCB3ZSBtdXN0IHN5bmMgdGhlIGZpbGUKKwkJICogZmlyc3QuCisJCSAqLworCQl2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwogCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA1NTZhY2ZmLi43ZGJlNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKQEAgLTEzOCwxNiArMTM4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3Rlcik7CiAKLS8qCi0gKiBSb3VuZCBhIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCAnc2l6ZScgYm91bmRhcnkuICBzaXplIG11c3QKLSAqIGJlIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCi17Ci0Jc2l6ZS0tOwotCXJldHVybiAobiArIHNpemUpICYgfnNpemU7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkgIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLCBjaGFyICoqZXJyb3IpCiB7CkBAIC0xNTUsNyArMTQ1LDggQEAKIAljaGFyICp2YWx1ZTsKIAogCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7Ci0JaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnIHx8CisJICAgIGNodW5rX3NpemVfdWxvbmcgPiBVSU5UX01BWCkgewogCQkqZXJyb3IgPSAiSW52YWxpZCBjaHVuayBzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTY1LDQwICsxNTYsMzUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplX3Vsb25nID0gcm91bmRfdXAoY2h1bmtfc2l6ZV91bG9uZywgUEFHRV9TSVpFID4+IDkpOwotCi0JcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwgY2h1bmtfc2l6ZV91bG9uZywKKwlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLAorCQkJCQkJICh1bnNpZ25lZCkgY2h1bmtfc2l6ZV91bG9uZywKIAkJCQkJCSBlcnJvcik7CiB9CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKQogewogCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCi0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLwotCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CisJaWYgKGNodW5rX3NpemUgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjaHVua19zaXplX3Vsb25nID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKKwlpZiAoY2h1bmtfc2l6ZSA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIHRvbyBoaWdoIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOwotCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7Ci0Jc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsNyArMjM3LDcgQEAKIAogCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOwogCWlmIChyKQotCQlnb3RvIGJhZF9jb3c7CisJCWdvdG8gYmFkX2N0cjsKIAogCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaCBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKaW5kZXggODEyYzcxODcuLjhhMjIzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaApAQCAtMTAxLDkgKzEwMSw5IEBACiAJc3RydWN0IGRtX2RldiAqY293OwogCiAJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCi0JY2h1bmtfdCBjaHVua19zaXplOwotCWNodW5rX3QgY2h1bmtfbWFzazsKLQljaHVua190IGNodW5rX3NoaWZ0OworCXVuc2lnbmVkIGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfbWFzazsKKwl1bnNpZ25lZCBjaHVua19zaGlmdDsKIAogCXZvaWQgKmNvbnRleHQ7CiB9OwpAQCAtMTY5LDcgKzE2OSw3IEBACiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpOwogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZywKKwkJCQkgICAgICB1bnNpZ25lZCBjaHVua19zaXplLAogCQkJCSAgICAgIGNoYXIgKiplcnJvcik7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfY3JlYXRlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwppbmRleCA2NTJiZDMzLi43YWMyYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCX0KIAogCS8qIFRoZSBwdHIgdmFsdWUgaXMgc3VmZmljaWVudCBmb3IgbG9jYWwgdW5pcXVlIGlkICovCi0JbGMtPmx1aWQgPSAodWludDY0X3QpbGM7CisJbGMtPmx1aWQgPSAodW5zaWduZWQgbG9uZylsYzsKIAogCWxjLT50aSA9IHRpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwppbmRleCBkNWIyZTA4Ny4uMGM3NDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC0yODQsMTIgKzI4NCwxMyBAQAogewogCWludCByOwogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7Ci0JY2h1bmtfdCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX3NpemU7CiAJaW50IGNodW5rX3NpemVfc3VwcGxpZWQgPSAxOwogCWNoYXIgKmNodW5rX2VycjsKIAogCS8qCi0JICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCisJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgbG9naWNhbF9ibG9ja19zaXplLCBpZiBsYXJnZXIpCisJICogaWYgbm9uZSBzdXBwbGllZAogCSAqLwogCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CiAJCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKQEAgLTMzNCwxMCArMzM1LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY2h1bmtfc2l6ZV9zdXBwbGllZCkKLQkJRE1XQVJOKCJjaHVuayBzaXplICVsbHUgaW4gZGV2aWNlIG1ldGFkYXRhIG92ZXJyaWRlcyAiCi0JCSAgICAgICAidGFibGUgY2h1bmsgc2l6ZSBvZiAlbGx1LiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CisJCURNV0FSTigiY2h1bmsgc2l6ZSAldSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKKwkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICV1LiIsCisJCSAgICAgICBjaHVua19zaXplLCBwcy0+c3RvcmUtPmNodW5rX3NpemUpOwogCiAJLyogV2UgaGFkIGEgYm9ndXMgY2h1bmtfc2l6ZS4gRml4IHN0dWZmIHVwLiAqLwogCWZyZWVfYXJlYShwcyk7CkBAIC0zNDUsOCArMzQ1LDggQEAKIAlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHBzLT5zdG9yZSwgY2h1bmtfc2l6ZSwKIAkJCQkJICAgICAgJmNodW5rX2Vycik7CiAJaWYgKHIpIHsKLQkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICVsbHU6ICVzLiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwgY2h1bmtfZXJyKTsKKwkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICV1OiAlcy4iLAorCQkgICAgICBjaHVua19zaXplLCBjaHVua19lcnIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNTdmMWJmNy4uM2EzYmE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTI5Niw2ICsyOTYsNyBAQAogICovCiBzdGF0aWMgaW50IHJlZ2lzdGVyX3NuYXBzaG90KHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCkKIHsKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKmw7CiAJc3RydWN0IG9yaWdpbiAqbywgKm5ld19vOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzbmFwLT5vcmlnaW4tPmJkZXY7CiAKQEAgLTMxOSw3ICszMjAsMTEgQEAKIAkJX19pbnNlcnRfb3JpZ2luKG8pOwogCX0KIAotCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZvLT5zbmFwc2hvdHMpOworCS8qIFNvcnQgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIGNodW5rIHNpemUsIGxhcmdlc3QtZmlyc3Qgc21hbGxlc3QtbGFzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJm8tPnNuYXBzaG90cywgbGlzdCkKKwkJaWYgKGwtPnN0b3JlLT5jaHVua19zaXplIDwgc25hcC0+c3RvcmUtPmNodW5rX3NpemUpCisJCQlicmVhazsKKwlsaXN0X2FkZF90YWlsKCZzbmFwLT5saXN0LCAmbC0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX29yaWdpbnNfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC02NjgsNiArNjczLDExIEBACiAJYmlvX2xpc3RfaW5pdCgmcy0+cXVldWVkX2Jpb3MpOwogCUlOSVRfV09SSygmcy0+cXVldWVkX2Jpb3Nfd29yaywgZmx1c2hfcXVldWVkX2Jpb3MpOwogCisJaWYgKCFzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgeworCQl0aS0+ZXJyb3IgPSAiQ2h1bmsgc2l6ZSBub3Qgc2V0IjsKKwkJZ290byBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI7CisJfQorCiAJLyogQWRkIHNuYXBzaG90IHRvIHRoZSBsaXN0IG9mIHNuYXBzaG90cyBmb3IgdGhpcyBvcmlnaW4gKi8KIAkvKiBFeGNlcHRpb25zIGFyZW4ndCB0cmlnZ2VyZWQgdGlsbCBzbmFwc2hvdF9yZXN1bWUoKSBpcyBjYWxsZWQgKi8KIAlpZiAocmVnaXN0ZXJfc25hcHNob3QocykpIHsKQEAgLTk1MSw3ICs5NjEsNyBAQAogCiAJc3JjLmJkZXYgPSBiZGV2OwogCXNyYy5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm9sZF9jaHVuayk7Ci0Jc3JjLmNvdW50ID0gbWluKHMtPnN0b3JlLT5jaHVua19zaXplLCBkZXZfc2l6ZSAtIHNyYy5zZWN0b3IpOworCXNyYy5jb3VudCA9IG1pbigoc2VjdG9yX3Qpcy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CiAKIAlkZXN0LmJkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OwogCWRlc3Quc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5uZXdfY2h1bmspOwpAQCAtMTE0Miw2ICsxMTUyLDggQEAKIAl1bnNpZ25lZCBzeiA9IDA7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwID0gdGktPnByaXZhdGU7CiAKKwlkb3duX3dyaXRlKCZzbmFwLT5sb2NrKTsKKwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlpZiAoIXNuYXAtPnZhbGlkKQpAQCAtMTE3Myw2ICsxMTg1LDggQEAKIAkJYnJlYWs7CiAJfQogCisJdXBfd3JpdGUoJnNuYXAtPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODgsNyArMTQwMiw3IEBACiAJc3RydWN0IGRtX2RldiAqZGV2ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwogCXN0cnVjdCBvcmlnaW4gKm87Ci0JY2h1bmtfdCBjaHVua19zaXplID0gMDsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gMDsKIAogCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CiAJbyA9IF9fbG9va3VwX29yaWdpbihkZXYtPmJkZXYpOwpAQCAtMTQ2NSw3ICsxNDc5LDcgQEAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZzbmFwc2hvdF90YXJnZXQpOwogCWlmIChyKSB7CiAJCURNRVJSKCJzbmFwc2hvdCB0YXJnZXQgcmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7Ci0JCXJldHVybiByOworCQlnb3RvIGJhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ7CiAJfQogCiAJciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmb3JpZ2luX3RhcmdldCk7CkBAIC0xNTIyLDYgKzE1MzYsOSBAQAogCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKIGJhZDE6CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CisKK2JhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ6CisJZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQoKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDM3NmYxYWIuLjcyNGVmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlhdG9taWNfdCBpb19jb3VudDsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOworCXNwaW5sb2NrX3QgZW5kaW9fbG9jazsKIH07CiAKIC8qCkBAIC01NzgsOCArNTc5LDEyIEBACiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gaW8tPm1kOwogCiAJLyogUHVzaC1iYWNrIHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvcnMgKi8KLQlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCi0JCWlvLT5lcnJvciA9IGVycm9yOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJCWlmICghKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKKwkJCWlvLT5lcnJvciA9IGVycm9yOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpby0+ZW5kaW9fbG9jaywgZmxhZ3MpOworCX0KIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewpAQCAtMTIyNiw2ICsxMjMxLDcgQEAKIAlhdG9taWNfc2V0KCZjaS5pby0+aW9fY291bnQsIDEpOwogCWNpLmlvLT5iaW8gPSBiaW87CiAJY2kuaW8tPm1kID0gbWQ7CisJc3Bpbl9sb2NrX2luaXQoJmNpLmlvLT5lbmRpb19sb2NrKTsKIAljaS5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAljaS5zZWN0b3JfY291bnQgPSBiaW9fc2VjdG9ycyhiaW8pOwogCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkKQEAgLTE4MjIsNiArMTgyOCw3IEBACiBiYWRfYmRldjoKIAlkZXN0cm95X3dvcmtxdWV1ZShtZC0+d3EpOwogYmFkX3RocmVhZDoKKwlkZWxfZ2VuZGlzayhtZC0+ZGlzayk7CiAJcHV0X2Rpc2sobWQtPmRpc2spOwogYmFkX2Rpc2s6CiAJYmxrX2NsZWFudXBfcXVldWUobWQtPnF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAyNmJhNDJhLi5iMTgyZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC05NDQsNiArOTQ0LDE0IEBACiAJCQkgICAgZGVzYy0+cmFpZF9kaXNrIDwgbWRkZXYtPnJhaWRfZGlza3MgKi8pIHsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IGRlc2MtPnJhaWRfZGlzazsKKwkJfSBlbHNlIGlmIChkZXNjLT5zdGF0ZSAmICgxPDxNRF9ESVNLX0FDVElWRSkpIHsKKwkJCS8qIGFjdGl2ZSBidXQgbm90IGluIHN5bmMgaW1wbGllcyByZWNvdmVyeSB1cCB0bworCQkJICogcmVzaGFwZSBwb3NpdGlvbi4gIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGVyZQorCQkJICogdGhhdCBpcywgc28gc2V0IHRvIHplcm8gZm9yIG5vdyAqLworCQkJaWYgKG1kZGV2LT5taW5vcl92ZXJzaW9uID49IDkxKSB7CisJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKKwkJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkZXNjLT5yYWlkX2Rpc2s7CisJCQl9CiAJCX0KIAkJaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfV1JJVEVNT1NUTFkpKQogCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKQEAgLTEwMzIsOCArMTA0MCwxOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldjIsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCW1kcF9kaXNrX3QgKmQ7CiAJCWludCBkZXNjX25yOwotCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCi0JCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKKwkJaW50IGlzX2FjdGl2ZSA9IHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpOworCisJCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgIHNiLT5taW5vcl92ZXJzaW9uID49IDkxKQorCQkJLyogd2UgaGF2ZSBub3doZXJlIHRvIHN0b3JlIHRoZSByZWNvdmVyeV9vZmZzZXQsCisJCQkgKiBidXQgaWYgaXQgaXMgbm90IGJlbG93IHRoZSByZXNoYXBlX3Bvc2l0aW9uLAorCQkJICogd2UgY2FuIHBpZ2d5LWJhY2sgb24gdGhhdC4KKwkJCSAqLworCQkJaXNfYWN0aXZlID0gMTsKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPCAwIHx8CisJCSAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQorCQkJaXNfYWN0aXZlID0gMDsKKwkJaWYgKGlzX2FjdGl2ZSkKIAkJCWRlc2NfbnIgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCiAJCQlkZXNjX25yID0gbmV4dF9zcGFyZSsrOwpAQCAtMTA0MywxNiArMTA2MiwxNiBAQAogCQlkLT5udW1iZXIgPSByZGV2Mi0+ZGVzY19ucjsKIAkJZC0+bWFqb3IgPSBNQUpPUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKIAkJZC0+bWlub3IgPSBNSU5PUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKLQkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKQotCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCisJCWlmIChpc19hY3RpdmUpCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+ZGVzY19ucjsgLyogY29tcGF0aWJpbGl0eSAqLwogCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKIAkJCWQtPnN0YXRlID0gKDE8PE1EX0RJU0tfRkFVTFRZKTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncykpIHsKKwkJZWxzZSBpZiAoaXNfYWN0aXZlKSB7CiAJCQlkLT5zdGF0ZSA9ICgxPDxNRF9ESVNLX0FDVElWRSk7Ci0JCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19TWU5DKTsKKwkJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkKKwkJCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19TWU5DKTsKIAkJCWFjdGl2ZSsrOwogCQkJd29ya2luZysrOwogCQl9IGVsc2UgewpAQCAtMTM4Miw4ICsxNDAxLDYgQEAKIAogCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgogCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewotCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA+IHJkZXYtPnJlY292ZXJ5X29mZnNldCkKLQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CiAJCWlmIChyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPiAwKSB7CiAJCQlzYi0+ZmVhdHVyZV9tYXAgfD0KIAkJCQljcHVfdG9fbGUzMihNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCk7CkBAIC0xOTE3LDYgKzE5MzQsMTQgQEAKIAkgKi8KIAltZGtfcmRldl90ICpyZGV2OwogCisJLyogRmlyc3QgbWFrZSBzdXJlIGluZGl2aWR1YWwgcmVjb3Zlcnlfb2Zmc2V0cyBhcmUgY29ycmVjdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKKwkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCisJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgorCQkgICAgbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA+IHJkZXYtPnJlY292ZXJ5X29mZnNldCkKKwkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkOworCisJfQkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCWlmIChyZGV2LT5zYl9ldmVudHMgPT0gbWRkZXYtPmV2ZW50cyB8fAogCQkgICAgKG5vc3BhcmVzICYmCkBAIC0yNjMxLDcgKzI2NTYsNyBAQAogCQkJcmRldi0+ZGVzY19uciA9IGkrKzsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IHJkZXYtPmRlc2NfbnI7CiAJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IG1kZGV2LT5yYWlkX2Rpc2tzKSB7CisJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IChtZGRldi0+cmFpZF9kaXNrcyAtIG1pbigwLCBtZGRldi0+ZGVsdGFfZGlza3MpKSkgewogCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CiAJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQpAQCAtNjUwNCw4ICs2NTI5LDkgQEAKICBza2lwOgogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7CiAJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7Ci0JbWRkZXYtPnJlc3luY19taW4gPSAwOwotCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOworCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpCisJCS8qIFdlIGNvbXBsZXRlZCBzbyBtYXggc2V0dGluZyBjYW4gYmUgZm9yZ290dGVuLiAqLworCQltZGRldi0+cmVzeW5jX21heCA9IE1heFNlY3RvcjsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkMWI5YmQ1Li5hMDUzNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjFfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjFfYmlvKQorCWlmICghcjFfYmlvICYmIHBpLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhwaS0+bWRkZXYpOwogCiAJcmV0dXJuIHIxX2JpbzsKQEAgLTE2ODMsNiArMTY4Myw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0xOTc4LDEzICsxOTc5LDE0IEBACiAJY29uZi0+cG9vbGluZm8gPSBrbWFsbG9jKHNpemVvZigqY29uZi0+cG9vbGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnBvb2xpbmZvKQogCQlnb3RvIG91dF9ub19tZW07Ci0JY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gTlVMTDsKIAljb25mLT5wb29saW5mby0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShOUl9SQUlEMV9CSU9TLCByMWJpb19wb29sX2FsbG9jLAogCQkJCQkgIHIxYmlvX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJpb19wb29sKQogCQlnb3RvIG91dF9ub19tZW07CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDUxYzRjNWMuLmMyY2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJLyogYWxsb2NhdGUgYSByMTBiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMTBfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjEwX2JpbykKKwlpZiAoIXIxMF9iaW8gJiYgY29uZi0+bWRkZXYpCiAJCXVucGx1Z19zbGF2ZXMoY29uZi0+bWRkZXYpOwogCiAJcmV0dXJuIHIxMF9iaW87CkBAIC0xNjMyLDYgKzE2MzIsNyBAQAogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICh1bnBsdWcpCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOwpAQCAtMjA5NSw3ICsyMDk2LDYgQEAKIAlpZiAoIWNvbmYtPnRtcHBhZ2UpCiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAotCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPm5lYXJfY29waWVzID0gbmM7CiAJY29uZi0+ZmFyX2NvcGllcyA9IGZjOwpAQCAtMjEzMiw2ICsyMTMyLDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KIAorCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA5NDgyOTgwLi5kMjkyMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xNTYsMTMgKzE1NiwxNiBAQAogc3RhdGljIGludCByYWlkNl9pZHhfdG9fc2xvdChpbnQgaWR4LCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAogCQkJICAgICBpbnQgKmNvdW50LCBpbnQgc3luZHJvbWVfZGlza3MpCiB7Ci0JaW50IHNsb3Q7CisJaW50IHNsb3QgPSAqY291bnQ7CiAKKwlpZiAoc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiAJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOwotCXNsb3QgPSAoKmNvdW50KSsrOworCWlmICghc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJcmV0dXJuIHNsb3Q7CiB9CiAKQEAgLTcxNyw3ICs3MjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCXNyY3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJc3Jjc1tpXSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKQEAgLTcyNyw5ICs3MzAsOCBAQAogCQlzcmNzW3Nsb3RdID0gc2gtPmRldltpXS5wYWdlOwogCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKIAl9IHdoaWxlIChpICE9IGQwX2lkeCk7Ci0JQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtODE0LDcgKzgxNiw3IEBACiAJICogc2xvdCBudW1iZXIgY29udmVyc2lvbiBmb3IgJ2ZhaWxhJyBhbmQgJ2ZhaWxiJwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkaXNrcyA7IGkrKykKLQkJYmxvY2tzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCWJsb2Nrc1tpXSA9IE5VTEw7CiAJY291bnQgPSAwOwogCWkgPSBkMF9pZHg7CiAJZG8gewpAQCAtODI4LDcgKzgzMCw2IEBACiAJCQlmYWlsYiA9IHNsb3Q7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKQEAgLTg0NSw3ICs4NDYsNyBAQAogCQkJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIE5VTEwsCiAJCQkJCSAgb3BzX2NvbXBsZXRlX2NvbXB1dGUsIHNoLAogCQkJCQkgIHRvX2FkZHJfY29udihzaCwgcGVyY3B1KSk7Ci0JCQlyZXR1cm4gYXN5bmNfZ2VuX3N5bmRyb21lKGJsb2NrcywgMCwgY291bnQrMiwKKwkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBzeW5kcm9tZV9kaXNrcysyLAogCQkJCQkJICBTVFJJUEVfU0laRSwgJnN1Ym1pdCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcGFnZSAqZGVzdDsKQEAgLTExMzksNyArMTE0MCw3IEBACiAJCQkgICAmc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQsIHBlcmNwdS0+c3BhcmVfcGFnZSwgJnN1Ym1pdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQorc3RhdGljIHZvaWQgX19yYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKIHsKIAlpbnQgb3ZlcmxhcF9jbGVhciA9IDAsIGksIGRpc2tzID0gc2gtPmRpc2tzOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwpAQCAtMTIwNCwyMiArMTIwNSw1NSBAQAogCXB1dF9jcHUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngorc3RhdGljIHZvaWQgYXN5bmNfcnVuX29wcyh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQoreworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0ID0gc2gtPm9wcy5yZXF1ZXN0OworCisJY2xlYXJfYml0X3VubG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKTsKKwl3YWtlX3VwKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisKKwlfX3JhaWRfcnVuX29wcyhzaCwgb3BzX3JlcXVlc3QpOworCXJlbGVhc2Vfc3RyaXBlKHNoKTsKK30KKworc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCit7CisJLyogc2luY2UgaGFuZGxlX3N0cmlwZSBjYW4gYmUgY2FsbGVkIG91dHNpZGUgb2YgcmFpZDVkIGNvbnRleHQKKwkgKiB3ZSBuZWVkIHRvIGVuc3VyZSBzaC0+b3BzLnJlcXVlc3QgaXMgZGUtc3RhZ2VkIGJlZm9yZSBhbm90aGVyCisJICogcmVxdWVzdCBhcnJpdmVzCisJICovCisJd2FpdF9ldmVudChzaC0+b3BzLndhaXRfZm9yX29wcywKKwkJICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKSk7CisJc2gtPm9wcy5yZXF1ZXN0ID0gb3BzX3JlcXVlc3Q7CisKKwlhdG9taWNfaW5jKCZzaC0+Y291bnQpOworCWFzeW5jX3NjaGVkdWxlKGFzeW5jX3J1bl9vcHMsIHNoKTsKK30KKyNlbHNlCisjZGVmaW5lIHJhaWRfcnVuX29wcyBfX3JhaWRfcnVuX29wcworI2VuZGlmCisKIHN0YXRpYyBpbnQgZ3Jvd19vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOworCWludCBkaXNrcyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAlzaCA9IGttZW1fY2FjaGVfYWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaCkKIAkJcmV0dXJuIDA7Ci0JbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKKwltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGRpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKIAlzaC0+cmFpZF9jb25mID0gY29uZjsKIAlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOworCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisJI2VuZGlmCiAKLQlpZiAoZ3Jvd19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKSkgewotCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7CisJaWYgKGdyb3dfYnVmZmVycyhzaCwgZGlza3MpKSB7CisJCXNocmlua19idWZmZXJzKHNoLCBkaXNrcyk7CiAJCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CiAJCXJldHVybiAwOwogCX0KLQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCiAJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKIAlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC0xMjMxLDcgKzEyNjUsNyBAQAogc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKLQlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCiAJCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CkBAIC0xMzI5LDYgKzEzNjMsOSBAQAogCiAJCW5zaC0+cmFpZF9jb25mID0gY29uZjsKIAkJc3Bpbl9sb2NrX2luaXQoJm5zaC0+bG9jayk7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkJI2VuZGlmCiAKIAkJbGlzdF9hZGQoJm5zaC0+bHJ1LCAmbmV3c3RyaXBlcyk7CiAJfQpAQCAtMTg5OSwxMCArMTkzNiwxNSBAQAogCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFOgorCQkJLyogTGlrZSBsZWZ0X3N5bW1ldHJpYywgYnV0IFAgaXMgYmVmb3JlIFEgKi8KIAkJCWlmIChzaC0+cGRfaWR4ID09IDApCiAJCQkJaS0tOwkvKiBQIEQgRCBEIFEgKi8KLQkJCWVsc2UgaWYgKGkgPiBzaC0+cGRfaWR4KQotCQkJCWkgLT0gMjsgLyogRCBEIFEgUCBEICovCisJCQllbHNlIHsKKwkJCQkvKiBEIEQgUSBQIEQgKi8KKwkJCQlpZiAoaSA8IHNoLT5wZF9pZHgpCisJCQkJCWkgKz0gcmFpZF9kaXNrczsKKwkJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKQEAgLTI4OTYsNyArMjkzOCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzLCBpOwpAQCAtMzE2NywxMSArMzIwOSw5IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwpAQCAtMzQ1NSwxNyArMzQ5NSwxNCBAQAogCW9wc19ydW5faW8oc2gsICZzKTsKIAogCXJldHVybl9pbyhyZXR1cm5fYmkpOwotCi0JcmV0dXJuIGJsb2NrZWRfcmRldiA9PSBOVUxMOwogfQogCi0vKiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmlwZSB3YXMgaGFuZGxlZCAqLwotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChzaC0+cmFpZF9jb25mLT5sZXZlbCA9PSA2KQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTYoc2gpOworCQloYW5kbGVfc3RyaXBlNihzaCk7CiAJZWxzZQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTUoc2gpOworCQloYW5kbGVfc3RyaXBlNShzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQocmFpZDVfY29uZl90ICpjb25mKQpAQCAtMzUwMyw5ICszNTQwLDEwIEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGk7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXZzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKIAkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CkBAIC00MDExLDYgKzQwNDksOCBAQAogCQkJc2VjdG9yX25yID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJc2VjdG9yX2RpdihzZWN0b3JfbnIsIG5ld19kYXRhX2Rpc2tzKTsKIAkJaWYgKHNlY3Rvcl9ucikgeworCQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IHNlY3Rvcl9ucjsKKwkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCQkJKnNraXBwZWQgPSAxOwogCQkJcmV0dXJuIHNlY3Rvcl9ucjsKIAkJfQpAQCAtNDI3Nyw5ICs0MzE3LDcgQEAKIAljbGVhcl9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIAotCS8qIHdhaXQgZm9yIGFueSBibG9ja2VkIGRldmljZSB0byBiZSBoYW5kbGVkICovCi0Jd2hpbGUgKHVubGlrZWx5KCFoYW5kbGVfc3RyaXBlKHNoKSkpCi0JCTsKKwloYW5kbGVfc3RyaXBlKHNoKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiAKIAlyZXR1cm4gU1RSSVBFX1NFQ1RPUlM7CkBAIC00MzQ5LDM3ICs0Mzg3LDYgQEAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KIAotI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngotc3RhdGljIHZvaWQgX19wcm9jZXNzX3N0cmlwZSh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQotewotCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKLQotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3NjaGVkdWxlX2RvbWFpbihfX3Byb2Nlc3Nfc3RyaXBlLCBzaCwgZG9tYWluKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKGRvbWFpbik7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLQljb25kX3Jlc2NoZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotfQotI2VuZGlmCi0KIAogLyoKICAqIFRoaXMgaXMgb3VyIHJhaWQ1IGtlcm5lbCB0aHJlYWQuCkBAIC00MzkzLDcgKzQ0MDAsNiBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGhhbmRsZWQ7Ci0JTElTVF9IRUFEKHJhaWRfZG9tYWluKTsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKQEAgLTQ0MzAsNyArNDQzNiw5IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkKIAkJaGFuZGxlZCsrOwotCQlwcm9jZXNzX3N0cmlwZShzaCwgJnJhaWRfZG9tYWluKTsKKwkJaGFuZGxlX3N0cmlwZShzaCk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCX0KQEAgLTQ0MzgsNyArNDQ0Niw2IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAotCXN5bmNocm9uaXplX3N0cmlwZV9wcm9jZXNzaW5nKCZyYWlkX2RvbWFpbik7CiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKIAl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKIApAQCAtNDU1OCwxMyArNDU2NSw5IEBACiAKIAlpZiAoIXNlY3RvcnMpCiAJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7Ci0JaWYgKCFyYWlkX2Rpc2tzKSB7CisJaWYgKCFyYWlkX2Rpc2tzKQogCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLwotCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJZWxzZQotCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JfQorCQlyYWlkX2Rpc2tzID0gbWluKGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2VjdG9ycyAtIDEpOwogCXNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbWRkZXYtPm5ld19jaHVua19zZWN0b3JzIC0gMSk7CkBAIC00NjY1LDcgKzQ2NjgsNyBAQAogCQkJfQogCQkJcGVyX2NwdV9wdHIoY29uZi0+cGVyY3B1LCBjcHUpLT5zcGFyZV9wYWdlID0gc3BhcmVfcGFnZTsKIAkJfQotCQlzY3JpYmJsZSA9IGttYWxsb2Moc2NyaWJibGVfbGVuKGNvbmYtPnJhaWRfZGlza3MpLCBHRlBfS0VSTkVMKTsKKwkJc2NyaWJibGUgPSBrbWFsbG9jKGNvbmYtPnNjcmliYmxlX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2NyaWJibGUpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlicmVhazsKQEAgLTQ2ODYsNyArNDY4OSw3IEBACiBzdGF0aWMgcmFpZDVfY29uZl90ICpzZXR1cF9jb25mKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKLQlpbnQgcmFpZF9kaXNrLCBtZW1vcnk7CisJaW50IHJhaWRfZGlzaywgbWVtb3J5LCBtYXhfZGlza3M7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzdHJ1Y3QgZGlza19pbmZvICpkaXNrOwogCkBAIC00NzIyLDI4ICs0NzI1LDYgQEAKIAljb25mID0ga3phbGxvYyhzaXplb2YocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJZ290byBhYm9ydDsKLQotCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKLQljb25mLT5zY3JpYmJsZV9sZW4gPSBzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyk7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWVsc2UKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOwotCi0JY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmYtPmRpc2tzKQotCQlnb3RvIGFib3J0OwotCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKLQotCWlmICgoY29uZi0+c3RyaXBlX2hhc2h0YmwgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5sZXZlbCA9IG1kZGV2LT5uZXdfbGV2ZWw7Ci0JaWYgKHJhaWQ1X2FsbG9jX3BlcmNwdShjb25mKSAhPSAwKQotCQlnb3RvIGFib3J0OwotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwpAQCAtNDc1NywxMSArNDczOCwzMyBAQAogCWF0b21pY19zZXQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzLCAwKTsKIAljb25mLT5ieXBhc3NfdGhyZXNob2xkID0gQllQQVNTX1RIUkVTSE9MRDsKIAorCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJbWF4X2Rpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOworCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihtYXhfZGlza3MpOworCisJY29uZi0+ZGlza3MgPSBremFsbG9jKG1heF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY29uZi0+ZGlza3MpCisJCWdvdG8gYWJvcnQ7CisKKwljb25mLT5tZGRldiA9IG1kZGV2OworCisJaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKKwlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCisJCWdvdG8gYWJvcnQ7CisKIAlwcl9kZWJ1ZygicmFpZDU6IHJ1biglcykgY2FsbGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCXJhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzazsKLQkJaWYgKHJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzCisJCWlmIChyYWlkX2Rpc2sgPj0gbWF4X2Rpc2tzCiAJCSAgICB8fCByYWlkX2Rpc2sgPCAwKQogCQkJY29udGludWU7CiAJCWRpc2sgPSBjb25mLT5kaXNrcyArIHJhaWRfZGlzazsKQEAgLTQ3OTMsNyArNDc5Niw3IEBACiAJfQogCiAJbWVtb3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkgKwotCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKKwkJIG1heF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKIAlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYtPm1heF9ucl9zdHJpcGVzKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKQEAgLTQ4MjAsMTEgKzQ4MjMsNDAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKKworc3RhdGljIGludCBvbmx5X3Bhcml0eShpbnQgcmFpZF9kaXNrLCBpbnQgYWxnbywgaW50IHJhaWRfZGlza3MsIGludCBtYXhfZGVncmFkZWQpCit7CisJc3dpdGNoIChhbGdvKSB7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCWlmIChyYWlkX2Rpc2sgPCBtYXhfZGVncmFkZWQpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCWlmIChyYWlkX2Rpc2sgPj0gcmFpZF9kaXNrcyAtIG1heF9kZWdyYWRlZCkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMF82OgorCQlpZiAocmFpZF9kaXNrID09IDAgfHwgCisJCSAgICByYWlkX2Rpc2sgPT0gcmFpZF9kaXNrcyAtIDEpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgorCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDXzY6CisJCWlmIChyYWlkX2Rpc2sgPT0gcmFpZF9kaXNrcyAtIDEpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKIAlpbnQgd29ya2luZ19kaXNrcyA9IDAsIGNodW5rX3NpemU7CisJaW50IGRpcnR5X3Bhcml0eV9kaXNrcyA9IDA7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzZWN0b3JfdCByZXNoYXBlX29mZnNldCA9IDA7CiAKIAlpZiAobWRkZXYtPnJlY292ZXJ5X2NwICE9IE1heFNlY3RvcikKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJyYWlkNTogJXMgaXMgbm90IGNsZWFuIgpAQCAtNDg1OCw2ICs0ODkwLDcgQEAKIAkJCSAgICAgICAib24gYSBzdHJpcGUgYm91bmRhcnlcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJcmVzaGFwZV9vZmZzZXQgPSBoZXJlX25ldyAqIG1kZGV2LT5uZXdfY2h1bmtfc2VjdG9yczsKIAkJLyogaGVyZV9uZXcgaXMgdGhlIHN0cmlwZSB3ZSB3aWxsIHdyaXRlIHRvICovCiAJCWhlcmVfb2xkID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CiAJCXNlY3Rvcl9kaXYoaGVyZV9vbGQsIG1kZGV2LT5jaHVua19zZWN0b3JzICoKQEAgLTQ5MTMsMTIgKzQ5NDYsNTQgQEAKIAkvKgogCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBvciAyIGZvciBhIGRlZ3JhZGVkIGFycmF5LgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CisJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJd29ya2luZ19kaXNrcysrOworCQkvKiBUaGlzIGRpc2MgaXMgbm90IGZ1bGx5IGluLXN5bmMuICBIb3dldmVyIGlmIGl0CisJCSAqIGp1c3Qgc3RvcmVkIHBhcml0eSAoYmV5b25kIHRoZSByZWNvdmVyeV9vZmZzZXQpLAorCQkgKiB3aGVuIHdlIGRvbid0IG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IHRoZQorCQkgKiBhcnJheSBiZWluZyBkaXJ0eS4KKwkJICogV2hlbiByZXNoYXBlIGdvZXMgJ2JhY2t3YXJkcycsIHdlIG5ldmVyIGhhdmUKKwkJICogcGFydGlhbGx5IGNvbXBsZXRlZCBkZXZpY2VzLCBzbyB3ZSBvbmx5IG5lZWQKKwkJICogdG8gd29ycnkgYWJvdXQgcmVzaGFwZSBnb2luZyBmb3J3YXJkcy4KKwkJICovCisJCS8qIEhhY2sgYmVjYXVzZSB2MC45MSBkb2Vzbid0IHN0b3JlIHJlY292ZXJ5X29mZnNldCBwcm9wZXJseS4gKi8KKwkJaWYgKG1kZGV2LT5tYWpvcl92ZXJzaW9uID09IDAgJiYKKwkJICAgIG1kZGV2LT5taW5vcl92ZXJzaW9uID4gOTApCisJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSByZXNoYXBlX29mZnNldDsKKwkJCQorCQlwcmludGsoIiVkOiB3PSVkIHBhPSVkIHByPSVkIG09JWQgYT0lZCByPSVkIG9wMT0lZCBvcDI9JWRcbiIsCisJCSAgICAgICByZGV2LT5yYWlkX2Rpc2ssIHdvcmtpbmdfZGlza3MsIGNvbmYtPnByZXZfYWxnbywKKwkJICAgICAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsIGNvbmYtPm1heF9kZWdyYWRlZCwKKwkJICAgICAgIGNvbmYtPmFsZ29yaXRobSwgY29uZi0+cmFpZF9kaXNrcywgCisJCSAgICAgICBvbmx5X3Bhcml0eShyZGV2LT5yYWlkX2Rpc2ssCisJCQkJICAgY29uZi0+cHJldl9hbGdvLAorCQkJCSAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsCisJCQkJICAgY29uZi0+bWF4X2RlZ3JhZGVkKSwKKwkJICAgICAgIG9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgICBjb25mLT5hbGdvcml0aG0sCisJCQkJICAgY29uZi0+cmFpZF9kaXNrcywKKwkJCQkgICBjb25mLT5tYXhfZGVncmFkZWQpKTsKKwkJaWYgKHJkZXYtPnJlY292ZXJ5X29mZnNldCA8IHJlc2hhcGVfb2Zmc2V0KSB7CisJCQkvKiBXZSBuZWVkIHRvIGNoZWNrIG9sZCBhbmQgbmV3IGxheW91dCAqLworCQkJaWYgKCFvbmx5X3Bhcml0eShyZGV2LT5yYWlkX2Rpc2ssCisJCQkJCSBjb25mLT5hbGdvcml0aG0sCisJCQkJCSBjb25mLT5yYWlkX2Rpc2tzLAorCQkJCQkgY29uZi0+bWF4X2RlZ3JhZGVkKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIW9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgY29uZi0+cHJldl9hbGdvLAorCQkJCSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzLAorCQkJCSBjb25mLT5tYXhfZGVncmFkZWQpKQorCQkJY29udGludWU7CisJCWRpcnR5X3Bhcml0eV9kaXNrcysrOworCX0KIAotCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOworCW1kZGV2LT5kZWdyYWRlZCA9IChtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCSAgIC0gd29ya2luZ19kaXNrcyk7CiAKIAlpZiAobWRkZXYtPmRlZ3JhZGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IG5vdCBlbm91Z2ggb3BlcmF0aW9uYWwgZGV2aWNlcyBmb3IgJXMiCkBAIC00OTMxLDcgKzUwMDYsNyBAQAogCW1kZGV2LT5kZXZfc2VjdG9ycyAmPSB+KG1kZGV2LT5jaHVua19zZWN0b3JzIC0gMSk7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAotCWlmIChtZGRldi0+ZGVncmFkZWQgPiAwICYmCisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGRpcnR5X3Bhcml0eV9kaXNrcyAmJgogCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgIT0gTWF4U2VjdG9yKSB7CiAJCWlmIChtZGRldi0+b2tfc3RhcnRfZGVncmFkZWQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC01MzU3LDkgKzU0MzIsMTEgQEAKIAkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewogCQkJCWNoYXIgbm1bMjBdOwotCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQllbHNlCisJCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7CiAJCQkJYWRkZWRfZGV2aWNlcysrOwotCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7CiAJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCiAJCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDIzOTBlMGUuLmRkNzA4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTIxNCwxMiArMjE0LDIwIEBACiAJaW50CQkJZGlza3M7CQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KIAllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKIAllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKLQkvKiBzdHJpcGVfb3BlcmF0aW9ucworCS8qKgorCSAqIHN0cnVjdCBzdHJpcGVfb3BlcmF0aW9ucwogCSAqIEB0YXJnZXQgLSBTVFJJUEVfT1BfQ09NUFVURV9CTEsgdGFyZ2V0CisJICogQHRhcmdldDIgLSAybmQgY29tcHV0ZSB0YXJnZXQgaW4gdGhlIHJhaWQ2IGNhc2UKKwkgKiBAemVyb19zdW1fcmVzdWx0IC0gUCBhbmQgUSB2ZXJpZmljYXRpb24gZmxhZ3MKKwkgKiBAcmVxdWVzdCAtIGFzeW5jIHNlcnZpY2UgcmVxdWVzdCBmbGFncyBmb3IgcmFpZF9ydW5fb3BzCiAJICovCiAJc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zIHsKIAkJaW50IAkJICAgICB0YXJnZXQsIHRhcmdldDI7CiAJCWVudW0gc3VtX2NoZWNrX2ZsYWdzIHplcm9fc3VtX3Jlc3VsdDsKKwkJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCQl1bnNpZ25lZCBsb25nCSAgICAgcmVxdWVzdDsKKwkJd2FpdF9xdWV1ZV9oZWFkX3QgICAgd2FpdF9mb3Jfb3BzOworCQkjZW5kaWYKIAl9IG9wczsKIAlzdHJ1Y3QgcjVkZXYgewogCQlzdHJ1Y3QgYmlvCXJlcTsKQEAgLTI5NCw2ICszMDIsOCBAQAogI2RlZmluZQlTVFJJUEVfRlVMTF9XUklURQkxMyAvKiBhbGwgYmxvY2tzIGFyZSBzZXQgdG8gYmUgb3ZlcndyaXR0ZW4gKi8KICNkZWZpbmUJU1RSSVBFX0JJT0ZJTExfUlVOCTE0CiAjZGVmaW5lCVNUUklQRV9DT01QVVRFX1JVTgkxNQorI2RlZmluZQlTVFJJUEVfT1BTX1JFUV9QRU5ESU5HCTE2CisKIC8qCiAgKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncwogICovCkBAIC00NzgsNyArNDg4LDcgQEAKIHsKIAlyZXR1cm4gKGxheW91dCA+PSAwICYmIGxheW91dCA8PSA1KQogCQl8fAotCQkobGF5b3V0ID09IDggfHwgbGF5b3V0ID09IDEwKQorCQkobGF5b3V0ID49IDggJiYgbGF5b3V0IDw9IDEwKQogCQl8fAogCQkobGF5b3V0ID49IDE2ICYmIGxheW91dCA8PSAyMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCmluZGV4IDY5OWRmZWUuLjI2NTRkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogJCMtd2F5IHVucm9sbGVkIHBvcnRhYmxlIGludGVnZXIgbWF0aCBSQUlELTYgaW5zdHJ1Y3Rpb24gc2V0CiAgKgotICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCisgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwuYXdrCiAgKgogICogPGJlbmg+IGhwYTogaW4gcHJvY2VzcywKICAqIHlvdSBjYW4ganVzdCAic3RlYWwiIHRoZSB2ZWMgdW5pdCB3aXRoIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpIChidXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCmluZGV4IGY5YmY5Y2IuLmQxZTI3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICQjLXdheSB1bnJvbGxlZCBwb3J0YWJsZSBpbnRlZ2VyIG1hdGggUkFJRC02IGluc3RydWN0aW9uIHNldAogICoKLSAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAorICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLmF3awogICovCiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCmluZGV4IDU4ZmZkZjQuLjI4NzRjYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogT1BURkxBR1MgPSAtTzIJCQkjIEFkanVzdCBhcyBkZXNpcmVkCiBDRkxBR1MJID0gLUkuLiAtSSAuLi8uLi8uLi9pbmNsdWRlIC1nICQoT1BURkxBR1MpCiBMRAkgPSBsZAotUEVSTAkgPSBwZXJsCitBV0sJID0gYXdrCiBBUgkgPSBhcgogUkFOTElCCSA9IHJhbmxpYgogCkBAIC0zNSwzNSArMzUsMzUgQEAKIHJhaWQ2dGVzdDogdGVzdC5jIHJhaWQ2LmEKIAkkKENDKSAkKENGTEFHUykgLW8gcmFpZDZ0ZXN0ICReCiAKLXJhaWQ2YWx0aXZlYzEuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWMyLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzguYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDEuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50Mi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50NC5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQ0LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQ4LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmludC51YyA+ICRACityYWlkNmludDguYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDE2LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDE2IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQxNi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTE2IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDMyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDMyIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQzMi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTMyIDwgcmFpZDZpbnQudWMgPiAkQAogCiByYWlkNnRhYmxlcy5jOiBta3RhYmxlcwogCS4vbWt0YWJsZXMgPiByYWlkNnRhYmxlcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5hd2sgYi9kcml2ZXJzL21kL3Vucm9sbC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhYTAzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvdW5yb2xsLmF3awpAQCAtMCwwICsxLDIwIEBACisKKyMgVGhpcyBmaWx0ZXIgcmVxdWlyZXMgb25lIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgZm9ybSAtdk49bgorIyB3aGVyZSBuIG11c3QgYmUgYSBkZWNpbWFsIG51bWJlci4KKyMKKyMgUmVwZWF0IGVhY2ggaW5wdXQgbGluZSBjb250YWluaW5nICQkIG4gdGltZXMsIHJlcGxhY2luZyAkJCB3aXRoIDAuLi5uLTEuCisjIFJlcGxhY2UgZWFjaCAkIyB3aXRoIG4sIGFuZCBlYWNoICQqIHdpdGggYSBzaW5nbGUgJC4KKworQkVHSU4geworCW4gPSBOICsgMAorfQoreworCWlmICgvXCRcJC8pIHsgcmVwID0gbiB9IGVsc2UgeyByZXAgPSAxIH0KKwlmb3IgKGkgPSAwOyBpIDwgcmVwOyArK2kpIHsKKwkJdG1wID0gJDAKKwkJZ3N1YigvXCRcJC8sIGksIHRtcCkKKwkJZ3N1YigvXCRcIy8sIG4sIHRtcCkKKwkJZ3N1YigvXCRcKi8sICIkIiwgdG1wKQorCQlwcmludCB0bXAKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5wbCBiL2RyaXZlcnMvbWQvdW5yb2xsLnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWNjNzEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWQvdW5yb2xsLnBsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIFRha2UgYSBwaWVjZSBvZiBDIGNvZGUgYW5kIGZvciBlYWNoIGxpbmUgd2hpY2ggY29udGFpbnMgdGhlIHNlcXVlbmNlICQkCi0jIHJlcGVhdCBuIHRpbWVzIHdpdGggJCByZXBsYWNlZCBieSAwLi4ubi0xOyB0aGUgc2VxdWVuY2UgJCMgaXMgcmVwbGFjZWQKLSMgYnkgdGhlIHVucm9sbGluZyBmYWN0b3IsIGFuZCAkKiB3aXRoIGEgc2luZ2xlICQKLSMKLQotKCRuKSA9IEBBUkdWOwotJG4gKz0gMDsKLQotd2hpbGUgKCBkZWZpbmVkKCRsaW5lID0gPFNURElOPikgKSB7Ci0gICAgaWYgKCAkbGluZSA9fiAvXCRcJC8gKSB7Ci0JJHJlcCA9ICRuOwotICAgIH0gZWxzZSB7Ci0JJHJlcCA9IDE7Ci0gICAgfQotICAgIGZvciAoICRpID0gMCA7ICRpIDwgJHJlcCA7ICRpKysgKSB7Ci0JJHRtcCA9ICRsaW5lOwotCSR0bXAgPX4gcy9cJFwkLyRpL2c7Ci0JJHRtcCA9fiBzL1wkXCMvJG4vZzsKLQkkdG1wID1+IHMvXCRcKi9cJC9nOwotCXByaW50ICR0bXA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwppbmRleCA2NDU5NTExLi4zYTUwY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwpAQCAtNjE2LDEzICs2MTYsMTMgQEAKIAkJY2FzZSBSRjI6CiAJCQltYXBbaV0ucmZfYTEgPSAocHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl0gLQogCQkJCQlwcm9nX2NhbFtSRjFdICsgcHJvZ190YWJbUkYxXSkgLwotCQkJCSgocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDApOworCQkJCShzMzIpKChyZl9mcmVxW1JGMl0gLSByZl9mcmVxW1JGMV0pIC8gMTAwMCk7CiAJCQltYXBbaV0ucmYyICAgPSByZl9mcmVxW1JGMl0gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUkYzOgogCQkJbWFwW2ldLnJmX2EyID0gKHByb2dfY2FsW1JGM10gLSBwcm9nX3RhYltSRjNdIC0KIAkJCQkJcHJvZ19jYWxbUkYyXSArIHByb2dfdGFiW1JGMl0pIC8KLQkJCQkoKHJmX2ZyZXFbUkYzXSAtIHJmX2ZyZXFbUkYyXSkgLyAxMDAwKTsKKwkJCQkoczMyKSgocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDApOwogCQkJbWFwW2ldLnJmX2IyID0gcHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl07CiAJCQltYXBbaV0ucmYzICAgPSByZl9mcmVxW1JGM10gLyAxMDAwOwogCQkJYnJlYWs7CkBAIC0xMDAwLDEyICsxMDAwLDEyIEBACiAJc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXBfaXRlbSAqbWFwOwogCWNoYXIgKm1vZGU7CiAJaW50IHJldDsKLQl1MzIgZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogNjI1MDA7CisJdTMyIGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDEyNSAqCisJCSgocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pID8gMSA6IDEwMDApIC8gMjsKIAogCXByaXYtPm1vZGUgPSBUREExODI3MV9BTkFMT0c7CiAKIAlpZiAocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pIHsKLQkJZnJlcSA9IGZyZXEgLyAxMDAwOwogCQltYXAgPSAmc3RkX21hcC0+Zm1fcmFkaW87CiAJCW1vZGUgPSAiZm0iOwogCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAzNzUwZmY0Li5jMzc3OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMjAsNiArMjAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xMjAzLDcgKzEyMDQsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBkdmJfZHZyX3JlYWQsCiAJLndyaXRlID0gZHZiX2R2cl93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKaW5kZXggZWVmNmQzNi4uOTFjNTM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDhjOWFlMGEuLjAyNDFhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDk3NDRiMDYuLjBlNGI5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTc1LDcgKzc1LDcgQEAKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKKwlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCmluZGV4IDA3MzdjNjMuLjNkZjIwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW50IGkgPSAwOwogCXN0cnVjdCByZXFfdCByZXE7CiAJaW50IHJldCA9IDA7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZigmcmVxKSk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKIAogCWlmIChudW0gPiAyKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDBiMjgxMmEuLjZiZDg5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCQl7ICAgIkxlYWR0ZWsgV2luZmFzdCBEVFYgRG9uZ2xlIChTVEs3NzAwUCBiYXNlZCkiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzhdIH0sCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbOF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNF0gfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCQl7ICAgIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgRXhwcmVzcyIsCkBAIC0yMDY0LDcgKzIwNjQsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDEyLAorCQkubnVtX2RldmljZV9kZXNjcyA9IDExLAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQIHJlZmVyZW5jZSBkZXNpZ24iLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzE1XSwgTlVMTCB9LApAQCAtMjA5OCwxMSArMjA5OCw2IEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzBdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAotCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUy8gVDMiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMzXSwKLQkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzUyXSwgTlVMTCB9LAotCQkJCXsgTlVMTCB9LAotCQkJfSwKIAkJCXsgICAiRWxnYXRvIEV5ZVRWIERUVCIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDldLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCkBAIC0yMzQzLDggKzIzMzgsMTAgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCi0JCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTIChIRCkiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzYwXSB9LAorCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUyAoSEQpLyBUMyIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzNdLAorCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNTJdLAorCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNjBdLCBOVUxMfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCBkMWI2N2ZlLi40ODVkMDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTEwNTAsMjggKzEwNTAsMjggQEAKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9QTVQ7IC8qIGNhIHRhZyAqLwogCWMtPm9wZXJhbmRbNl0gPSAwOyAvKiBtb3JlL2xhc3QgKi8KLQkvKiBjLT5vcGVyYW5kWzddID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDE3OyAqLyAvKiBsZW5ndGggKi8KLQljLT5vcGVyYW5kWzhdID0gbGlzdF9tYW5hZ2VtZW50OwotCWMtPm9wZXJhbmRbOV0gPSAweDAxOyAvKiBwbXRfY21kPU9LX2Rlc2NyYW1ibGUgKi8KKwkvKiBVc2UgdGhyZWUgYnl0ZXMgZm9yIGxlbmd0aCBmaWVsZCBpbiBjYXNlIGxlbmd0aCA+IDEyNyAqLworCWMtPm9wZXJhbmRbMTBdID0gbGlzdF9tYW5hZ2VtZW50OworCWMtPm9wZXJhbmRbMTFdID0gMHgwMTsgLyogcG10X2NtZD1PS19kZXNjcmFtYmxlICovCiAKIAkvKiBUUyBwcm9ncmFtIG1hcCB0YWJsZSAqLwogCi0JYy0+b3BlcmFuZFsxMF0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCi0JYy0+b3BlcmFuZFsxMV0gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLwotCS8qIGMtPm9wZXJhbmRbMTJdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLwotCWMtPm9wZXJhbmRbMTNdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLwotCWMtPm9wZXJhbmRbMTRdID0gbXNnWzJdOwotCWMtPm9wZXJhbmRbMTVdID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCi0JYy0+b3BlcmFuZFsxNl0gPSAweDAwOyAvKiBTZWN0aW9uIG51bWJlcj0wICovCi0JYy0+b3BlcmFuZFsxN10gPSAweDAwOyAvKiBMYXN0IHNlY3Rpb24gbnVtYmVyPTAgKi8KLQljLT5vcGVyYW5kWzE4XSA9IDB4MWY7IC8qIFBDUl9QSUQ9MUZGRiAqLwotCWMtPm9wZXJhbmRbMTldID0gMHhmZjsKLQljLT5vcGVyYW5kWzIwXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoID4+IDgpOyAvKiBQcm9ncmFtIGluZm8gbGVuZ3RoICovCi0JYy0+b3BlcmFuZFsyMV0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmIDB4ZmYpOworCWMtPm9wZXJhbmRbMTJdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLworCWMtPm9wZXJhbmRbMTNdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KKwkvKiBjLT5vcGVyYW5kWzE0XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KKwljLT5vcGVyYW5kWzE1XSA9IG1zZ1sxXTsgLyogUHJvZ3JhbSBudW1iZXIgKi8KKwljLT5vcGVyYW5kWzE2XSA9IG1zZ1syXTsKKwljLT5vcGVyYW5kWzE3XSA9IDB4MDE7IC8qIFZlcnNpb24gbnVtYmVyPTAgKyBjdXJyZW50L25leHQ9MSAqLworCWMtPm9wZXJhbmRbMThdID0gMHgwMDsgLyogU2VjdGlvbiBudW1iZXI9MCAqLworCWMtPm9wZXJhbmRbMTldID0gMHgwMDsgLyogTGFzdCBzZWN0aW9uIG51bWJlcj0wICovCisJYy0+b3BlcmFuZFsyMF0gPSAweDFmOyAvKiBQQ1JfUElEPTFGRkYgKi8KKwljLT5vcGVyYW5kWzIxXSA9IDB4ZmY7CisJYy0+b3BlcmFuZFsyMl0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+PiA4KTsgLyogUHJvZ3JhbSBpbmZvIGxlbmd0aCAqLworCWMtPm9wZXJhbmRbMjNdID0gKHByb2dyYW1faW5mb19sZW5ndGggJiAweGZmKTsKIAogCS8qIENBIGRlc2NyaXB0b3JzIGF0IHByb2dyYW1tZSBsZXZlbCAqLwogCXJlYWRfcG9zID0gNjsKLQl3cml0ZV9wb3MgPSAyMjsKKwl3cml0ZV9wb3MgPSAyNDsKIAlpZiAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+IDApIHsKIAkJcG10X2NtZF9pZCA9IG1zZ1tyZWFkX3BvcysrXTsKIAkJaWYgKHBtdF9jbWRfaWQgIT0gMSAmJiBwbXRfY21kX2lkICE9IDQpCkBAIC0xMTEzLDggKzExMTMsMTAgQEAKIAljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwogCi0JYy0+b3BlcmFuZFs3XSA9IHdyaXRlX3BvcyAtIDg7Ci0JYy0+b3BlcmFuZFsxMl0gPSB3cml0ZV9wb3MgLSAxMzsKKwljLT5vcGVyYW5kWzddID0gMHg4MjsKKwljLT5vcGVyYW5kWzhdID0gKHdyaXRlX3BvcyAtIDEwKSA+PiA4OworCWMtPm9wZXJhbmRbOV0gPSAod3JpdGVfcG9zIC0gMTApICYgMHhmZjsKKwljLT5vcGVyYW5kWzE0XSA9IHdyaXRlX3BvcyAtIDE1OwogCiAJY3JjMzJfY3N1bSA9IGNyYzMyX2JlKDAsICZjLT5vcGVyYW5kWzEwXSwgYy0+b3BlcmFuZFsxMl0gLSAxKTsKIAljLT5vcGVyYW5kW3dyaXRlX3BvcyAtIDRdID0gKGNyYzMyX2NzdW0gPj4gMjQpICYgMHhmZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYwppbmRleCBlZWI4MGQwLi44NTNlMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlyZXR1cm4gUE9MTElOOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZHR2X2NhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZHR2X2NhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKIAkub3BlbgkJPSBkdmJfZ2VuZXJpY19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCmluZGV4IDdiYTQzNjMuLmU0OWNkYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKQEAgLTE0MSwxOCArMTQxLDEyIEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi0jZGVmaW5lIEFDQ0VQVEVEIDB4OQotCiBzdGF0aWMgaW50IGZkdHZfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGZlLT5zZWNfcHJpdjsKIAotCS8qIEZJWE1FOiBhdmNfdHVuZXJfZHNkIG5ldmVyIHJldHVybnMgQUNDRVBURUQuIENoZWNrIHN0YXR1cz8gKi8KLQlpZiAoYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpICE9IEFDQ0VQVEVEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlCi0JCXJldHVybiAwOyAvKiBub3Qgc3VyZSBvZiB0aGlzLi4uICovCisJcmV0dXJuIGF2Y190dW5lcl9kc2QoZmR0diwgcGFyYW1zKTsKIH0KIAogc3RhdGljIGludCBmZHR2X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDhhMmUxZTcuLmVlYzllNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNTEsNiArNTEsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZyk7CiBleHRlcm4gdTE2IGRpYjAwNzBfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOworZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpCiB7CkBAIC02Myw3ICs2NCwxMSBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9wZW4pCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7Cit9CiAjZW5kaWYKLWV4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggb3Blbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwppbmRleCA1NWVmNmVlYi4uMDc4MWY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMKQEAgLTEzNzUsNiArMTM3NSwxMSBAQAogCWlmIChkaWI3MDAwcF9pZGVudGlmeShzdCkgIT0gMCkKIAkJZ290byBlcnJvcjsKIAorCS8qIEZJWE1FOiBtYWtlIHN1cmUgdGhlIGRldi5wYXJlbnQgZmllbGQgaXMgaW5pdGlhbGl6ZWQsIG9yIGVsc2UKKwlyZXF1ZXN0X2Zpcm13YXJlKCkgd2lsbCBoaXQgYW4gT09QUyAodGhpcyBzaG91bGQgYmUgbW92ZWQgc29tZXdoZXJlCisJbW9yZSBjb21tb24pICovCisJc3QtPmkyY19tYXN0ZXIuZ2F0ZWRfdHVuZXJfaTJjX2FkYXAuZGV2LnBhcmVudCA9IGkyY19hZGFwLT5kZXYucGFyZW50OworCiAJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyLCBESUI3MDAwUCwgc3QtPmkyY19hZGFwLCBzdC0+aTJjX2FkZHIpOwogCiAJZGliNzAwMHBfZGVtb2RfcmVzZXQoc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCmluZGV4IDgxZTYyM2EuLjFmZDgzMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgImR2YmRldi5oIgogI2luY2x1ZGUgImR2Yl9kZW11eC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwppbmRleCBjYjhhMzU4Li44Zjg4YTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwpAQCAtNTI5LDYgKzUyOSwxMiBAQAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05JQ0UgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAzMDEpLAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1ZFTklDRSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YjkwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGI5MTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhjMDAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCA4YjE0NDAxLi40ODJkMGYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBWNEwyIEFQSSBkZWZzCQkqLwogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA5MzlkMWU1Li5hNjcyNDAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtMTI5OSw3ICsxMjk5LDcgQEAKIAogCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbbm9ybV07CiAKLQlpZiAoIW1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAorCWlmIChtZW1jbXAoJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uY3JvcGNhcCwgJnR2bm9ybS0+Y3JvcGNhcCwKIAkJICAgIHNpemVvZiAodHZub3JtLT5jcm9wY2FwKSkpIHsKIAkJYnR0dl9jcm9wX3Jlc2V0KCZidHYtPmNyb3BbMF0sIG5vcm0pOwogCQlidHYtPmNyb3BbMV0gPSBidHYtPmNyb3BbMF07IC8qIGN1cnJlbnQgPSBkZWZhdWx0ICovCkBAIC0zODAwLDExICszODAwLDM0IEBACiAJCWlmICghVjRMMl9GSUVMRF9IQVNfQk9USChpdGVtLT52Yi5maWVsZCkgJiYKIAkJICAgIChpdGVtLT52Yi5xdWV1ZS5uZXh0ICE9ICZidHYtPmNhcHR1cmUpKSB7CiAJCQlpdGVtID0gbGlzdF9lbnRyeShpdGVtLT52Yi5xdWV1ZS5uZXh0LCBzdHJ1Y3QgYnR0dl9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJCS8qIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gLSBPbmx5IGNoZWNrCisJCQkgKiBhbmQgc2V0IHVwIHRoZSBib3R0b20gZmllbGQgaW4gdGhlIGxvZ2ljCisJCQkgKiBiZWxvdy4gIERvbid0IGV2ZXIgZG8gdGhlIHRvcCBmaWVsZC4gIFRoaXMKKwkJCSAqIG9mIGNvdXJzZSBtZWFucyB0aGF0IGlmIHdlIHNldCB1cCB0aGUKKwkJCSAqIGJvdHRvbSBmaWVsZCBpbiB0aGUgYWJvdmUgY29kZSB0aGF0IHdlJ2xsCisJCQkgKiBhY3R1YWxseSBza2lwIGEgZmllbGQuICBCdXQgdGhhdCdzIE9LLgorCQkJICogSGF2aW5nIHByb2Nlc3NlZCBvbmx5IGEgc2luZ2xlIGJ1ZmZlciB0aGlzCisJCQkgKiB0aW1lLCB0aGVuIHRoZSBuZXh0IHRpbWUgYXJvdW5kIHRoZSBmaXJzdAorCQkJICogYXZhaWxhYmxlIGJ1ZmZlciBzaG91bGQgYmUgZm9yIGEgdG9wIGZpZWxkLgorCQkJICogVGhhdCB3aWxsIHRoZW4gY2F1c2UgdXMgaGVyZSB0byBzZXQgdXAgYQorCQkJICogdG9wIHRoZW4gYSBib3R0b20gZmllbGQgaW4gdGhlIG5vcm1hbCB3YXkuCisJCQkgKiBUaGUgYWx0ZXJuYXRpdmUgdG8gdGhpcyB1bmRlcnN0YW5kaW5nIGlzCisJCQkgKiB0aGF0IHdlIHNldCB1cCB0aGUgc2Vjb25kIGF2YWlsYWJsZSBidWZmZXIKKwkJCSAqIGFzIGEgdG9wIGZpZWxkLCBidXQgdGhhdCdzIG91dCBvZiBvcmRlcgorCQkJICogc2luY2UgdGhpcyBkcml2ZXIgYWx3YXlzIHByb2Nlc3NlcyB0aGUgdG9wCisJCQkgKiBmaWVsZCBmaXJzdCAtIHRoZSBlZmZlY3Qgd2lsbCBiZSB0aGUgdHdvCisJCQkgKiBidWZmZXJzIGJlaW5nIHJldHVybmVkIGluIHRoZSB3cm9uZyBvcmRlciwKKwkJCSAqIHdpdGggdGhlIHNlY29uZCBidWZmZXIgYWxzbyBiZWluZyBkZWxheWVkCisJCQkgKiBieSBvbmUgZmllbGQgdGltZSAob3dpbmcgdG8gdGhlIGZpZm8gbmF0dXJlCisJCQkgKiBvZiB2aWRlb2J1ZikuICBXb3JzZSBzdGlsbCwgd2UnbGwgYmUgc3R1Y2sKKwkJCSAqIGRvaW5nIGZpZWxkcyBvdXQgb2Ygb3JkZXIgbm93IGV2ZXJ5IHRpbWUKKwkJCSAqIHVudGlsIHNvbWV0aGluZyBlbHNlIGNhdXNlcyBhIGZpZWxkIHRvIGJlCisJCQkgKiBkcm9wcGVkLiAgQnkgZWZmZWN0aXZlbHkgZm9yY2luZyBhIGZpZWxkIHRvCisJCQkgKiBkcm9wIHRoaXMgd2F5IHRoZW4gd2UgYWx3YXlzIGdldCBiYWNrIGludG8KKwkJCSAqIHN5bmMgd2l0aGluIGEgc2luZ2xlIGZyYW1lIHRpbWUuICAoT3V0IG9mCisJCQkgKiBvcmRlciBmaWVsZHMgY2FuIHNjcmV3IHVwIGRlaW50ZXJsYWNpbmcKKwkJCSAqIGFsZ29yaXRobXMuKSAqLwogCQkJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGl0ZW0tPnZiLmZpZWxkKSkgewotCQkJCWlmIChOVUxMID09IHNldC0+dG9wICYmCi0JCQkJICAgIFY0TDJfRklFTERfVE9QID09IGl0ZW0tPnZiLmZpZWxkKSB7Ci0JCQkJCXNldC0+dG9wID0gaXRlbTsKLQkJCQl9CiAJCQkJaWYgKE5VTEwgPT0gc2V0LT5ib3R0b20gJiYKIAkJCQkgICAgVjRMMl9GSUVMRF9CT1RUT00gPT0gaXRlbS0+dmIuZmllbGQpIHsKIAkJCQkJc2V0LT5ib3R0b20gPSBpdGVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggNjU3YzQ4MS4uMTAyMzBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogCW11dGV4X3VubG9jaygmc2J1Zi0+Y2FtLT5zX211dGV4KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjYWZlX3Y0bF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNhZmVfdjRsX3ZtX29wcyA9IHsKIAkub3BlbiA9IGNhZmVfdjRsX3ZtX29wZW4sCiAJLmNsb3NlID0gY2FmZV92NGxfdm1fY2xvc2UKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IDQzYWIwYWRmLi4yMzc3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggN2JkOGE3MC4uYWM5NDdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTM4Myw2ICszODMsMTEgQEAKIAogc3RhdGljIGludCBzbmRfZW0yOHh4X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZGV2LT5hZGV2Lmh3cHRyX2RvbmVfY2FwdHVyZSA9IDA7CisJZGV2LT5hZGV2LmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwppbmRleCA3NDA5MmY0Li44ODk4N2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwpAQCAtMTQ5Niw3ICsxNDk2LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV0NjF4MjUxX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXQ2MXgyNTFfdm1fb3BzID0gewogCS5vcGVuID0gZXQ2MXgyNTFfdm1fb3BlbiwKIAkuY2xvc2UgPSBldDYxeDI1MV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggY2Y2NTQwZC4uMjNkM2ZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtOTksNyArOTksNyBAQAogCQlmcmFtZS0+djRsMl9idWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfTUFQUEVEOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdzcGNhX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3NwY2Ffdm1fb3BzID0gewogCS5vcGVuCQk9IGdzcGNhX3ZtX29wZW4sCiAJLmNsb3NlCQk9IGdzcGNhX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IDU5NDAwZTguLmEyN2FmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMzUsMTIgKzM1LDI1IEBACiAgICAgY29uc3QKIAlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzNWs0YWFfdmZsaXBfZG1pX3RhYmxlW10gPSB7CiAJeworCQkuaWRlbnQgPSAiQlJVTkVJTklUIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRVJTSU9OLCAiMDAwMzBEMDAwMDAwMDAwMSIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGEgMjUyOCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFhhIDI1MjgiKQogCQl9CiAJfSwgeworCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhpIDI1MjgiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYaSAyNTI4IikKKwkJfQorCX0sIHsKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTUwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKQEAgLTU3LDYgKzcwLDEzIEBACiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCisJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjEyLzAyLzIwMDgiKQorCQl9CisJfSwgeworCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKIAkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMjYvMjAwNyIpCiAJCX0KIAl9LCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggMTQwYzhmMy4uZjgzMjhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWRhdGFbM10gPSAweDJjOwkJCSAgIC8qIHJlZyAyLCBIIHNpemUvOCAqLwogCQlkYXRhWzRdID0gMHg0ODsJCQkgICAvKiByZWcgMywgViBzaXplLzQgKi8KIAkJZGF0YVs2XSA9IDB4MDY7CQkJICAgLyogcmVnIDUsIEggc3RhcnQgICovCi0JCWRhdGFbOF0gPSAweDA2ICsgc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCisJCWRhdGFbOF0gPSAweDA2IC0gc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCiAJCWJyZWFrOwogCX0KIAllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IDJmNmUxMzUuLmE1YzE5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTI5MTksNyArMjkxOSw3IEBACiAJLyogQSBmYWxzZSBwb3NpdGl2ZSBoZXJlIGlzIGxpa2VseSwgdW50aWwgT1ZUIGdpdmVzIG1lCiAJICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KIAlpZiAoKCEoZGF0YVswXSB8IGRhdGFbMV0gfCBkYXRhWzJdIHwgZGF0YVszXSB8IGRhdGFbNV0pKSAmJiBkYXRhWzZdKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CiAJCXNkLT5wYWNrZXRfbnIgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDY1NDg5ZDYuLmJmYWU2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMzk0LDcgKzM5NCw4IEBACiAJCQlQREVCVUcoRF9QQUNLLCAiRW5kIG9mIGZyYW1lIGRldGVjdGVkIik7CiAKIAkJCS8qIENvbXBsZXRlIHRoZSBsYXN0IGZyYW1lIChpZiBhbnkpICovCi0JCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLCBkYXRhLCAwKTsKIAogCQkJaWYgKGNodW5rX2xlbikKIAkJCQlQREVCVUcoRF9FUlIsICJDaHVuayBsZW5ndGggaXMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBkMDc2NWJlLi4wMWUxZWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMjgsNiArMjgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgpAQCAtMTU4OSw3ICsxNTkwLDcgQEAKIAltZXllLnZtYV91c2VfY291bnRbaWR4XS0tOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1leWVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtZXllX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBtZXllX3ZtX29wZW4sCiAJLmNsb3NlCQk9IG1leWVfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCA2OTUyZTk2Li41MWI2ODNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CkBAIC0xNDMyLDcgKzE0MzMsOSBAQAogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCiAJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IGNhbV9mbXQtPmZvdXJjYzsKLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmNhbV9mKTsKKwljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4LT5waXhlbGZvcm1hdDsKKwkqcGl4ID0gY2FtX2YuZm10LnBpeDsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggOWUzMjYyYy4uMmMwYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtNTk4LDExICs1OTgsNiBAQAogCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LAogCQkJIHN0cnVjdCBzMjI1NV9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkgewotCQkvKiBubyBvbmUgYWN0aXZlICovCi0JCXJjID0gLTE7Ci0JCWdvdG8gdW5sb2NrOwotCX0KIAlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKIAlkcHJpbnRrKDEwMCwgIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA3MTE0NWJmLi4wOTAxMzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTM0MjgsNiArMzQyOCw3IEBACiAJCS50dW5lcl9jb25maWcgICA9IDMsCiAJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS50c190eXBlCT0gU0FBNzEzNF9NUEVHX1RTX1NFUklBTCwKKwkJLnRzX2ZvcmNlX3ZhbCAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwODAwMTAwLCAvKiBHUElPIDIxIGlzIGFuIElOUFVUICovCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCAzZmE2NTIyLi4wMzQ4OGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTI2MiwxMSArMjYyLDEzIEBACiAJc3dpdGNoIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c190eXBlKSB7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfUEFSQUxMRUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfTVBFR19UU19TRVJJQUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweGQ4KTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAweGJjKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDZlZTNlOWIuLmY4Njk3ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzYwLDYgKzM2MCw3IEBACiAJZW51bSBzYWE3MTM0X21wZWdfdHlwZSAgbXBlZzsKIAllbnVtIHNhYTcxMzRfbXBlZ190c190eXBlIHRzX3R5cGU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdmlkX3BvcnRfb3B0czsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICB0c19mb3JjZV92YWw6MTsKIH07CiAKICNkZWZpbmUgY2FyZF9oYXNfcmFkaW8oZGV2KSAgIChOVUxMICE9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvLm5hbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCmluZGV4IGM0NTk2NmUuLjljMWQzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogCS8qIFByZXBhcmUgc29tZSBiYXNpYyBjb21tYW5kL3Jlc3BvbnNlIHN0cnVjdHVyZXMgKi8KIAltZW1zZXQoJmNvbW1hbmRfdCwgMCwgc2l6ZW9mKGNvbW1hbmRfdCkpOwotCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKCZyZXNwb25zZV90KSk7CisJbWVtc2V0KCZyZXNwb25zZV90LCAwLCBzaXplb2YocmVzcG9uc2VfdCkpOwogCXBjb21tYW5kX3QgPSAmY29tbWFuZF90OwogCXByZXNwb25zZV90ID0gJnJlc3BvbnNlX3Q7CiAJY29tbWFuZF90LmlkID0gaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggNWFiN2M1YS4uMmY3OGI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWNsa19lbmFibGUocGNkZXYtPmNsayk7CisJcG1fcnVudGltZV9nZXRfc3luYyhpY2ktPnY0bDJfZGV2LmRldik7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KIAl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKIAotCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoaWNpLT52NGwyX2Rldi5kZXYpOwogCiAJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKQEAgLTExNzMsOCArMTE3Myw4IEBACiAJd2lkdGhfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LndpZHRoLCAqc2NhbGVfaCk7CiAJaGVpZ2h0X2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC5oZWlnaHQsICpzY2FsZV92KTsKIAotCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3Qud2lkdGgsIGljZC0+dXNlcl93aWR0aCk7Ci0JKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC5oZWlnaHQsIGljZC0+dXNlcl9oZWlnaHQpOworCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKHdpZHRoX2luLCBpY2QtPnVzZXJfd2lkdGgpOworCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGhlaWdodF9pbiwgaWNkLT51c2VyX2hlaWdodCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwppbmRleCA5ZDg0Yzk0Li40YTc3MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCkBAIC0yMDc3LDcgKzIwNzcsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc245YzEwMl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuOWMxMDJfdm1fb3BzID0gewogCS5vcGVuID0gc245YzEwMl92bV9vcGVuLAogCS5jbG9zZSA9IHNuOWMxMDJfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA1OWFhN2EzLi4zNmU2MTdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTExNjAsMTMgKzExNjAsMTUgQEAKIAkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewogCQkJLyogVGhlIGJ1cy0+cmVtb3ZlIHdpbGwgYmUgY2FsbGVkICovCiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmaWNkLT5kZXYpOwotCQkJLyogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCi0JCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkgKi8KLQkJCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7Ci0KLQkJCS8qIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCi0JCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCIgKi8KLQkJCW1lbXNldCgmaWNkLT5kZXYua29iaiwgMCwgc2l6ZW9mKGljZC0+ZGV2LmtvYmopKTsKKwkJCS8qCisJCQkgKiBOb3QgYmVmb3JlIGRldmljZV91bnJlZ2lzdGVyKCksIC5yZW1vdmUKKwkJCSAqIG5lZWRzIHBhcmVudCB0byBjYWxsIGljaS0+b3BzLT5yZW1vdmUoKS4KKwkJCSAqIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCisJCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCwiIHNpbmNlIDIuNi4zMgorCQkJICogdGhpcyBpcyBhbHNvIG5lZWRlZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9mIHRoZQorCQkJICogZGV2aWNlIHByaXZhdGUgZGF0YS4KKwkJCSAqLworCQkJbWVtc2V0KCZpY2QtPmRldiwgMCwgc2l6ZW9mKGljZC0+ZGV2KSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKaW5kZXggMGI5OTZlYS4uNmI0MTg2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKQEAgLTc5MCw3ICs3OTAsNyBAQAogCWlmIChzYnVmLT5tYXBjb3VudCA9PSAwKQogCQlzYnVmLT52NGxidWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfTUFQUEVEOwogfQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzdGtfdjRsX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3RrX3Y0bF92bV9vcHMgPSB7CiAJLm9wZW4gPSBzdGtfdjRsX3ZtX29wZW4sCiAJLmNsb3NlID0gc3RrX3Y0bF92bV9jbG9zZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGMzMjI1YTUuLjFiODk3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJX19zMzIgdmFsdWUsIF9fdTggKmRhdGEpCiB7CiAJZGF0YVswXSA9IHZhbHVlID09IDAgPyAwIDogKHZhbHVlID4gMCkgPyAxIDogMHhmZjsKLQlkYXRhWzJdID0gbWluKGFicyh2YWx1ZSksIDB4ZmYpOworCWRhdGFbMl0gPSBtaW4oKGludClhYnModmFsdWUpLCAweGZmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nIHV2Y19jdHJsX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCA5ZTczNTE1Li5hMmJkZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTEwNjksNyArMTA2OSw3IEBACiAJYnVmZmVyLT52bWFfdXNlX2NvdW50LS07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXZjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXZjX3ZtX29wcyA9IHsKIAkub3BlbgkJPSB1dmNfdm1fb3BlbiwKIAkuY2xvc2UJCT0gdXZjX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggZjk2MGU4ZS4uYTZlNDFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTkwLDcgKzkwLDggQEAKIAkJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKIAotCWlmIChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKKwlpZiAoIShmb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpICYmCisJICAgIHN0cmVhbS0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfRklYX0JBTkRXSURUSCAmJgogCSAgICBzdHJlYW0tPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgewogCQl1MzIgaW50ZXJ2YWw7CiAJCXUzMiBiYW5kd2lkdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCmluZGV4IGYxY2NmOTguLjhlOTNjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCmluZGV4IGQwOWNlODNhLi42MzVmZmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0gewogCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCiAJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKaW5kZXggYThkZDIyYS4uMDMyZWJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTM5NCw3ICszOTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CiB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKaW5kZXggMzBhZTMwZi4uMzVmMzkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQogewogCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCiAJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IGNkNmEzNDQuLmIwMzRhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC0zODU3LDcgKzM4NTcsNyBAQAogCWRwcmludGsoInZpbm9fdm1fY2xvc2UoKTogY291bnQgPSAlZFxuIiwgZmItPm1hcF9jb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdmlub192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpbm9fdm1fb3BzID0gewogCS5vcGVuCT0gdmlub192bV9vcGVuLAogCS5jbG9zZQk9IHZpbm9fdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKaW5kZXggYjNjNjQzNi4uMzEyYTcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCkBAIC05MzUsNyArOTM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpjMDMwMV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpjMDMwMV92bV9vcHMgPSB7CiAJLm9wZW4gPSB6YzAzMDFfdm1fb3BlbiwKIAkuY2xvc2UgPSB6YzAzMDFfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggYmNkZWZiMS4uNDcxMzdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0zMTcyLDcgKzMxNzIsNyBAQAogCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpvcmFuX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0gewogCS5vcGVuID0gem9yYW5fdm1fb3BlbiwKIAkuY2xvc2UgPSB6b3Jhbl92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCBiYzJlYzIxLi4zNGYzZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjZGVmaW5lIG15X1ZFUlNJT04JTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCiAjZGVmaW5lIE1ZTkFNCQkibXB0bGFuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKaW5kZXggNTQ0N2RhMS4uNjEzNDgxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCkBAIC01Nyw4ICs1Nyw2IEBACiAgKiBUaGUgQUIzMTAwIGlzIHVzdWFsbHkgYXNzaWduZWQgYWRkcmVzcyAweDQ4ICg3LWJpdCkKICAqIFRoZSBjaGlwIGlzIGRlZmluZWQgaW4gdGhlIHBsYXRmb3JtIGkyY19ib2FyZF9kYXRhIHNlY3Rpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIEkyQ19DTElFTlRfRU5EIH07Ci1JMkNfQ0xJRU5UX0lOU01PRF8xKGFiMzEwMCk7CiAKIHU4IGFiMzEwMF9nZXRfY2hpcF90eXBlKHN0cnVjdCBhYjMxMDAgKmFiMzEwMCkKIHsKQEAgLTk2Niw3ICs5NjQsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWIzMTAwX2lkW10gPSB7Ci0JeyAiYWIzMTAwIiwgYWIzMTAwIH0sCisJeyAiYWIzMTAwIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYjMxMDBfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCBlNDI0Y2Y2Li5hMWM0N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtNDgwLDcgKzQ4MCw2IEBACiBhZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMpCiB7CiAJc3RydWN0IGRldmljZQkqY2hpbGQ7Ci0Jc3RydWN0IGRldmljZQkqdXNiX3RyYW5zY2VpdmVyID0gTlVMTDsKIAogCWlmICh0d2xfaGFzX2JjaSgpICYmIHBkYXRhLT5iY2kgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7CiAJCWNoaWxkID0gYWRkX2NoaWxkKDMsICJ0d2w0MDMwX2JjaSIsCkBAIC01MzIsMTYgKzUzMSw2MSBAQAogCX0KIAogCWlmICh0d2xfaGFzX3VzYigpICYmIHBkYXRhLT51c2IpIHsKKworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY1ID0geworCQkJLnN1cHBseSA9CSJ1c2IxdjUiLAorCQl9OworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY4ID0geworCQkJLnN1cHBseSA9CSJ1c2IxdjgiLAorCQl9OworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YxID0geworCQkJLnN1cHBseSA9CSJ1c2IzdjEiLAorCQl9OworCisJLyogRmlyc3QgYWRkIHRoZSByZWd1bGF0b3JzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBieSB0cmFuc2NlaXZlciAqLworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSkgeworCQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KKwkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKKwkJCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9CisJCQkJCVJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCQl9OworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjUsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY1LCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY4LAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjF2OCwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjNWMSwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IzdjEsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCX0KKwogCQljaGlsZCA9IGFkZF9jaGlsZCgwLCAidHdsNDAzMF91c2IiLAogCQkJCXBkYXRhLT51c2IsIHNpemVvZigqcGRhdGEtPnVzYiksCiAJCQkJdHJ1ZSwKIAkJCQkvKiBpcnEwID0gVVNCX1BSRVMsIGlycTEgPSBVU0IgKi8KIAkJCQlwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMiwgcGRhdGEtPmlycV9iYXNlICsgNCk7CisKIAkJaWYgKElTX0VSUihjaGlsZCkpCiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAKIAkJLyogd2UgbmVlZCB0byBjb25uZWN0IHJlZ3VsYXRvcnMgdG8gdGhpcyB0cmFuc2NlaXZlciAqLwotCQl1c2JfdHJhbnNjZWl2ZXIgPSBjaGlsZDsKKwkJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgY2hpbGQpIHsKKwkJCXVzYjF2NS5kZXYgPSBjaGlsZDsKKwkJCXVzYjF2OC5kZXYgPSBjaGlsZDsKKwkJCXVzYjN2MS5kZXYgPSBjaGlsZDsKKwkJfQogCX0KIAogCWlmICh0d2xfaGFzX3dhdGNoZG9nKCkpIHsKQEAgLTU4MCw0NyArNjI0LDYgQEAKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAl9CiAKLQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiB1c2JfdHJhbnNjZWl2ZXIpIHsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2NSA9IHsKLQkJCS5zdXBwbHkgPQkidXNiMXY1IiwKLQkJfTsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2OCA9IHsKLQkJCS5zdXBwbHkgPQkidXNiMXY4IiwKLQkJfTsKLQkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjN2MSA9IHsKLQkJCS5zdXBwbHkgPQkidXNiM3YxIiwKLQkJfTsKLQotCQkvKiB0aGlzIGlzIGEgdGVtcGxhdGUgdGhhdCBnZXRzIGNvcGllZCAqLwotCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB1c2JfZml4ZWQgPSB7Ci0JCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9Ci0JCQkJICBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCQkuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPQotCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJfTsKLQotCQl1c2IxdjUuZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCQl1c2IxdjguZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCQl1c2IzdjEuZGV2ID0gdXNiX3RyYW5zY2VpdmVyOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWNSwgJnVzYl9maXhlZCwKLQkJCQkmdXNiMXY1LCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY4LCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IxdjgsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IzVjEsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjN2MSwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQogCS8qIG1heWJlIGFkZCBMRE9zIHRoYXQgYXJlIG9taXR0ZWQgb24gY29zdC1yZWR1Y2VkIHBhcnRzICovCiAJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7CiAJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WUExMMiwgcGRhdGEtPnZwbGwyKTsKQEAgLTc5Miw3ICs3OTUsNyBAQAogCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKIAkJCQkJdHdsLT5hZGRyZXNzKTsKIAkJCWlmICghdHdsLT5jbGllbnQpIHsKLQkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCmluZGV4IDJhZmMwODAuLmZhMjk0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgogCiB1bnNpZ25lZCBpbnQgdWNiMTQwMF9hZGNfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHUxNiBhZGNfY2hhbm5lbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggZmVhOTA4NS4uNjBjMzk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCmluZGV4IGQzMDE1ZGYuLmFjMDU2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKQEAgLTUwNyw2ICs1MDcsOCBAQAogewogCWludCBpLCByZXQ7CiAKKwltdXRleF9pbml0KCZ3bTgzMXgtPmlycV9sb2NrKTsKKwogCWlmICghaXJxKSB7CiAJCWRldl93YXJuKHdtODMxeC0+ZGV2LAogCQkJICJObyBpbnRlcnJ1cHQgc3BlY2lmaWVkIC0gZnVuY3Rpb25hbGl0eSBsaW1pdGVkXG4iKTsKQEAgLTUyMSw3ICs1MjMsNiBAQAogCX0KIAogCXdtODMxeC0+aXJxID0gaXJxOwotCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOwogCUlOSVRfV09SSygmd204MzF4LT5pcnFfd29yaywgd204MzF4X2lycV93b3JrZXIpOwogCiAJLyogTWFzayB0aGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgc291cmNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VlcHJvbS9tYXg2ODc1LmMgYi9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYwppbmRleCAzYzBjNThlLi41YTZiMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYworKysgYi9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYwpAQCAtMzMsMTIgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0vKiBEbyBub3Qgc2NhbiAtIHRoZSBNQVg2ODc1IGFjY2VzcyBtZXRob2Qgd2lsbCB3cml0ZSB0byBzb21lIEVFUFJPTSBjaGlwcyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobWF4Njg3NSk7Ci0KIC8qIFRoZSBNQVg2ODc1IGNhbiBvbmx5IHJlYWQvd3JpdGUgMTYgYnl0ZXMgYXQgYSB0aW1lICovCiAjZGVmaW5lIFNMSUNFX1NJWkUJCQkxNgogI2RlZmluZSBTTElDRV9CSVRTCQkJNApAQCAtMTQ2LDMxICsxNDAsMjEgQEAKIAkucmVhZCA9IG1heDY4NzVfcmVhZCwKIH07CiAKLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBtYXg2ODc1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQorc3RhdGljIGludCBtYXg2ODc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3QgbWF4Njg3NV9kYXRhICpkYXRhOworCWludCBlcnI7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQQogCQkJCSAgICAgfCBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE9ubHkgY2hlY2sgZXZlbiBhZGRyZXNzZXMgKi8KKwkvKiBPbmx5IGJpbmQgdG8gZXZlbiBhZGRyZXNzZXMgKi8KIAlpZiAoY2xpZW50LT5hZGRyICYgMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdHJsY3B5KGluZm8tPnR5cGUsICJtYXg2ODc1IiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtYXg2ODc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBtYXg2ODc1X2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4Njg3NV9kYXRhKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIyLDkgKzIwNiw2IEBACiAJLnByb2JlCQk9IG1heDY4NzVfcHJvYmUsCiAJLnJlbW92ZQkJPSBtYXg2ODc1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBtYXg2ODc1X2lkLAotCi0JLmRldGVjdAkJPSBtYXg2ODc1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1heDY4NzVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hwaWxvLmMgYi9kcml2ZXJzL21pc2MvaHBpbG8uYwppbmRleCAxYWQyN2M2Li5hOTJhM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHBpbG8uYworKysgYi9kcml2ZXJzL21pc2MvaHBpbG8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwppbmRleCAyNzZkM2ZiLi5lMjAzMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYwpAQCAtMjIsNiArMjIsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJsb3dsZXZlbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKaW5kZXggNjhhMGE1Yi4uNTcyZDQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYwpAQCAtMjIsNiArMjIsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJsb3dsZXZlbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKaW5kZXggYmVjOWUyYy4uMmRlNDg3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYwpAQCAtMjAsNiArMjAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJkb3RfY29tbWFuZC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwppbmRleCBmYTU3YjY3Li4wNGMyNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCisrKyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGhhbnRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTI3MSw3ICsyNzIsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaGFudG9tX2ZpbGVfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGhhbnRvbV9maWxlX29wcyA9IHsKIAkub3BlbiA9IHBoYW50b21fb3BlbiwKIAkucmVsZWFzZSA9IHBoYW50b21fcmVsZWFzZSwKIAkudW5sb2NrZWRfaW9jdGwgPSBwaGFudG9tX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGFlZDYwOTguLjQxYzhmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTUzLDcgKzUzLDYgQEAKIC8qIEd1YXJhbnRlZWQgdXNlciBhdmFpbGFibGUgcmVzb3VyY2VzIG9uIGVhY2ggbm9kZSAqLwogc3RhdGljIGludCBtYXhfdXNlcl9jYnJzLCBtYXhfdXNlcl9kc3JfYnl0ZXM7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdydV9mb3BzOwogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGdydV9taXNjZGV2OwogCiAKQEAgLTQyNiw3ICs0MjUsNyBAQAogCWdydV9wcm9jX2V4aXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3J1X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnVfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ3J1X2ZpbGVfdW5sb2NrZWRfaW9jdGwsCiAJLm1tYXAJCT0gZ3J1X2ZpbGVfbW1hcCwKQEAgLTQzOCw3ICs0MzcsNyBAQAogCS5mb3BzCQk9ICZncnVfZm9wcywKIH07CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHMgPSB7CiAJLmNsb3NlCQk9IGdydV92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGdydV9mYXVsdCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCmluZGV4IGNjZDQ0MDguLjNmMjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCkBAIC0xNjEsMTQgKzE2MSwxNSBAQAogc3RhdGljIHNzaXplX3Qgb3B0aW9uc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWNoYXIgYnVmWzgwXTsKKwljaGFyIGJ1ZlsyMF07CiAKLQlpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBzaXplb2YoYnVmKSAtIDEpIDwgMCkKKwlpZiAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2NvdW50IC0gMV0gPSAnXDAnOwotCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCi0JCWdydV9vcHRpb25zID0gdmFsOworCWJ1Zltjb3VudF0gPSAnXDAnOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZncnVfb3B0aW9ucykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAppbmRleCAzNGFiM2Q0Li40Njk5MGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaApAQCAtNjI0LDcgKzYyNCw3IEBACiAgKi8KIHN0cnVjdCBncnVfdW5sb2FkX2NvbnRleHRfcmVxOwogCi1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHM7CiBleHRlcm4gc3RydWN0IGRldmljZSAqZ3J1ZGV2OwogCiBleHRlcm4gc3RydWN0IGdydV92bWFfZGF0YSAqZ3J1X2FsbG9jX3ZtYV9kYXRhKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwppbmRleCA2MTBkYmQxLi45NmQxMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1tY19kYmdfZXh0X2NzZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1jX2RiZ19leHRfY3NkX2ZvcHMgPSB7CiAJLm9wZW4JCT0gbW1jX2V4dF9jc2Rfb3BlbiwKIAkucmVhZAkJPSBtbWNfZXh0X2NzZF9yZWFkLAogCS5yZWxlYXNlCT0gbW1jX2V4dF9jc2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwppbmRleCA2NjM2MzU0Li5mODVkY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCkBAIC0yOSw2ICsyOSw4IEBACiAJdW5zaWduZWQgaSwgbnJfc3RyaW5nczsKIAljaGFyICoqYnVmZmVyLCAqc3RyaW5nOwogCisJLyogRmluZCBhbGwgbnVsbC10ZXJtaW5hdGVkIChpbmNsdWRpbmcgemVybyBsZW5ndGgpIHN0cmluZ3MgaW4KKwkgICB0aGUgVFBMTFYxX0lORk8gZmllbGQuIFRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZC4gKi8KIAlidWYgKz0gMjsKIAlzaXplIC09IDI7CiAKQEAgLTM5LDExICs0MSw4IEBACiAJCWlmIChidWZbaV0gPT0gMCkKIAkJCW5yX3N0cmluZ3MrKzsKIAl9Ci0KLQlpZiAobnJfc3RyaW5ncyA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0RJTzogaWdub3JpbmcgYnJva2VuIENJU1RQTF9WRVJTXzFcbiIpOworCWlmIChucl9zdHJpbmdzID09IDApCiAJCXJldHVybiAwOwotCX0KIAogCXNpemUgPSBpOwogCkBAIC05OCw2ICs5NywyMiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGVlZF91bml0WzhdID0KIAl7IDEwMDAwLCAxMDAwMDAsIDEwMDAwMDAsIDEwMDAwMDAwLCAwLCAwLCAwLCAwIH07CiAKKy8qIEZVTkNFIHR1cGxlcyB3aXRoIHRoZXNlIHR5cGVzIGdldCBwYXNzZWQgdG8gU0RJTyBkcml2ZXJzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmdW5jZV90eXBlX3doaXRlbGlzdFtdID0geworCTQgLyogQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEIHVzZWQgaW4gQnJvYWRjb20gY2FyZHMgKi8KK307CisKK3N0YXRpYyBpbnQgY2lzdHBsX2Z1bmNlX3doaXRlbGlzdGVkKHVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZ1bmNlX3R5cGVfd2hpdGVsaXN0KTsgaSsrKSB7CisJCWlmIChmdW5jZV90eXBlX3doaXRlbGlzdFtpXSA9PSB0eXBlKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNpc3RwbF9mdW5jZV9jb21tb24oc3RydWN0IG1tY19jYXJkICpjYXJkLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkKIHsKQEAgLTEyMCw2ICsxMzUsMTAgQEAKIAl1bnNpZ25lZCB2c247CiAJdW5zaWduZWQgbWluX3NpemU7CiAKKwkvKiBsZXQgU0RJTyBkcml2ZXJzIHRha2UgY2FyZSBvZiB3aGl0ZWxpc3RlZCBGVU5DRSB0dXBsZXMgKi8KKwlpZiAoY2lzdHBsX2Z1bmNlX3doaXRlbGlzdGVkKGJ1ZlswXSkpCisJCXJldHVybiAtRUlMU0VROworCiAJdnNuID0gZnVuYy0+Y2FyZC0+Y2Njci5zZGlvX3ZzbjsKIAltaW5fc2l6ZSA9ICh2c24gPT0gU0RJT19TRElPX1JFVl8xXzAwKSA/IDI4IDogNDI7CiAKQEAgLTE1NCwxMyArMTczLDEyIEBACiAJZWxzZQogCQlyZXQgPSBjaXN0cGxfZnVuY2VfY29tbW9uKGNhcmQsIGJ1Ziwgc2l6ZSk7CiAKLQlpZiAocmV0KSB7CisJaWYgKHJldCAmJiByZXQgIT0gLUVJTFNFUSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgQ0lTVFBMX0ZVTkNFIHNpemUgJXUgIgogCQkgICAgICAgInR5cGUgJXVcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgc2l6ZSwgYnVmWzBdKTsKLQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiB0eXBlZGVmIGludCAodHBsX3BhcnNlX3QpKHN0cnVjdCBtbWNfY2FyZCAqLCBzdHJ1Y3Qgc2Rpb19mdW5jICosCkBAIC0yNTMsOCArMjcxLDMzIEBACiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCk7IGkrKykKIAkJCWlmIChjaXNfdHBsX2xpc3RbaV0uY29kZSA9PSB0cGxfY29kZSkKIAkJCQlicmVhazsKLQkJaWYgKGkgPj0gQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpKSB7Ci0JCQkvKiB0aGlzIHR1cGxlIGlzIHVua25vd24gdG8gdGhlIGNvcmUgKi8KKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCkpIHsKKwkJCWNvbnN0IHN0cnVjdCBjaXNfdHBsICp0cGwgPSBjaXNfdHBsX2xpc3QgKyBpOworCQkJaWYgKHRwbF9saW5rIDwgdHBsLT5taW5fc2l6ZSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IGJhZCBDSVMgdHVwbGUgMHglMDJ4IgorCQkJCSAgICAgICAiIChsZW5ndGggPSAldSwgZXhwZWN0ZWQgPj0gJXUpXG4iLAorCQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCisJCQkJICAgICAgIHRwbF9jb2RlLCB0cGxfbGluaywgdHBsLT5taW5fc2l6ZSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0gZWxzZSBpZiAodHBsLT5wYXJzZSkgeworCQkJCXJldCA9IHRwbC0+cGFyc2UoY2FyZCwgZnVuYywKKwkJCQkJCSB0aGlzLT5kYXRhLCB0cGxfbGluayk7CisJCQl9CisJCQkvKgorCQkJICogV2UgZG9uJ3QgbmVlZCB0aGUgdHVwbGUgYW55bW9yZSBpZiBpdCB3YXMKKwkJCSAqIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYnkgdGhlIFNESU8gY29yZSBvciBpZiBpdCBpcworCQkJICogbm90IGdvaW5nIHRvIGJlIHBhcnNlZCBieSBTRElPIGRyaXZlcnMuCisJCQkgKi8KKwkJCWlmICghcmV0IHx8IHJldCAhPSAtRUlMU0VRKQorCQkJCWtmcmVlKHRoaXMpOworCQl9IGVsc2UgeworCQkJLyogdW5rbm93biB0dXBsZSAqLworCQkJcmV0ID0gLUVJTFNFUTsKKwkJfQorCisJCWlmIChyZXQgPT0gLUVJTFNFUSkgeworCQkJLyogdGhpcyB0dXBsZSBpcyB1bmtub3duIHRvIHRoZSBjb3JlIG9yIHdoaXRlbGlzdGVkICovCiAJCQl0aGlzLT5uZXh0ID0gTlVMTDsKIAkJCXRoaXMtPmNvZGUgPSB0cGxfY29kZTsKIAkJCXRoaXMtPnNpemUgPSB0cGxfbGluazsKQEAgLTI2MywxOSArMzA2LDggQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkgICAgICAgIiVzOiBxdWV1aW5nIENJUyB0dXBsZSAweCUwMnggbGVuZ3RoICV1XG4iLAogCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgdHBsX2NvZGUsIHRwbF9saW5rKTsKLQkJfSBlbHNlIHsKLQkJCWNvbnN0IHN0cnVjdCBjaXNfdHBsICp0cGwgPSBjaXNfdHBsX2xpc3QgKyBpOwotCQkJaWYgKHRwbF9saW5rIDwgdHBsLT5taW5fc2l6ZSkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IGJhZCBDSVMgdHVwbGUgMHglMDJ4IChsZW5ndGggPSAldSwgZXhwZWN0ZWQgPj0gJXUpXG4iLAotCQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCi0JCQkJICAgICAgIHRwbF9jb2RlLCB0cGxfbGluaywgdHBsLT5taW5fc2l6ZSk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCX0gZWxzZSBpZiAodHBsLT5wYXJzZSkgewotCQkJCXJldCA9IHRwbC0+cGFyc2UoY2FyZCwgZnVuYywKLQkJCQkJCSB0aGlzLT5kYXRhLCB0cGxfbGluayk7Ci0JCQl9Ci0JCQlrZnJlZSh0aGlzKTsKKwkJCS8qIGtlZXAgb24gYW5hbHl6aW5nIHR1cGxlcyAqLworCQkJcmV0ID0gMDsKIAkJfQogCiAJCXB0ciArPSB0cGxfbGluazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCA3Y2IwNTdmLi40MzJhZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0yNzYsNiArMjc2LDQ3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNTUNfUzNDX0hXX1NESU9fSVJRCisgICAgICAgYm9vbCAiSGFyZHdhcmUgc3VwcG9ydCBmb3IgU0RJTyBJUlEiCisgICAgICAgZGVwZW5kcyBvbiBNTUNfUzNDCisgICAgICAgaGVscAorICAgICAgICAgRW5hYmxlIHRoZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBTRElPIGludGVycnVwdHMgaW5zdGVhZCBvZiB1c2luZworCSB0aGUgZ2VuZXJpYyBwb2xsaW5nIGNvZGUuCisKK2Nob2ljZQorCXByb21wdCAiU2Ftc3VuZyBTM0MgU0QvTU1DIHRyYW5zZmVyIGNvZGUiCisJZGVwZW5kcyBvbiBNTUNfUzNDCisKK2NvbmZpZyBNTUNfUzNDX1BJTworCWJvb2wgIlVzZSBQSU8gdHJhbnNmZXJzIG9ubHkiCisJaGVscAorCSAgVXNlIFBJTyB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbWVtb3J5IGFuZCB0aGUgaGFyZHdhcmUuCisKKwkgIFBJTyBpcyBzbG93ZXIgdGhhbiBETUEgYXMgaXQgcmVxdWlyZXMgQ1BVIGluc3RydWN0aW9ucyB0bworCSAgbW92ZSB0aGUgZGF0YS4gVGhpcyBoYXMgYmVlbiB0aGUgdHJhZGl0aW9uYWwgZGVmYXVsdCBmb3IKKwkgIHRoZSBTM0MgTUNJIGRyaXZlci4KKworY29uZmlnIE1NQ19TM0NfRE1BCisJYm9vbCAiVXNlIERNQSB0cmFuc2ZlcnMgb25seSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFVzZSBETUEgdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIG1lbW9yeSBhbmQgdGhlIGhhcmRhcmUuCisKKwkgIEN1cnJlbnRseSwgdGhlIERNQSBzdXBwb3J0IGluIHRoaXMgZHJpdmVyIHNlZW1zIHRvIG5vdCBiZQorCSAgd29ya2luZyBwcm9wZXJseSBhbmQgbmVlZHMgdG8gYmUgZGVidWdnZWQgYmVmb3JlIHRoaXMKKwkgIG9wdGlvbiBpcyB1c2VmdWwuCisKK2NvbmZpZyBNTUNfUzNDX1BJT0RNQQorCWJvb2wgIlN1cHBvcnQgZm9yIGJvdGggUElPIGFuZCBETUEgKEVYUEVSSU1FTlRBTCkiCisJaGVscAorCSAgQ29tcGlsZSBib3RoIHRoZSBQSU8gYW5kIERNQSB0cmFuc2ZlciByb3V0aW5lcyBpbnRvIHRoZQorCSAgZHJpdmVyIGFuZCBsZXQgdGhlIHBsYXRmb3JtIHNlbGVjdCBhdCBydW4tdGltZSB3aGljaCBvbmUKKwkgIGlzIGJlc3QuCisKKwkgIFNlZSBub3RlcyBmb3IgdGhlIERNQSBvcHRpb24uCisKK2VuZGNob2ljZQorCiBjb25maWcgTU1DX1NEUklDT0hfQ1MKIAl0cmlzdGF0ZSAiTU1DL1NEIGRyaXZlciBmb3IgUmljb2ggQmF5MUNvbnRyb2xsZXJzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBDSSAmJiBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwppbmRleCBlNTU2ZDQyLi42MzkyNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCkBAIC03Miw3ICs3Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfbWNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDg3NDFkMGYuLjcwNWE1ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0yMiwxMiArMjIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJtbWNpLmgiCiAKQEAgLTM4LDYgKzM5LDM2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm1heCA9IDUxNTYzMzsKIAorLyoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBob3N0LT5sb2NrIGhlbGQKKyAqLworc3RhdGljIHZvaWQgbW1jaV9zZXRfY2xrcmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBkZXNpcmVkKQoreworCXUzMiBjbGsgPSAwOworCisJaWYgKGRlc2lyZWQpIHsKKwkJaWYgKGRlc2lyZWQgPj0gaG9zdC0+bWNsaykgeworCQkJY2xrID0gTUNJX0NMS19CWVBBU1M7CisJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsazsKKwkJfSBlbHNlIHsKKwkJCWNsayA9IGhvc3QtPm1jbGsgLyAoMiAqIGRlc2lyZWQpIC0gMTsKKwkJCWlmIChjbGsgPj0gMjU2KQorCQkJCWNsayA9IDI1NTsKKwkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKDIgKiAoY2xrICsgMSkpOworCQl9CisJCWlmIChob3N0LT5od19kZXNpZ25lciA9PSAweDgwKQorCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCisJCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKKwkJLyogVGhpcyBoYXNuJ3QgcHJvdmVuIHRvIGJlIHdvcnRod2hpbGUgKi8KKwkJLyogY2xrIHw9IE1DSV9DTEtfUFdSU0FWRTsgKi8KKwl9CisKKwlpZiAoaG9zdC0+bW1jLT5pb3MuYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKKwkJY2xrIHw9IE1DSV9XSURFX0JVUzsKKworCXdyaXRlbChjbGssIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworfQorCiBzdGF0aWMgdm9pZAogbW1jaV9yZXF1ZXN0X2VuZChzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKQEAgLTQxOSwzMCArNDUwLDMxIEBACiBzdGF0aWMgdm9pZCBtbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0JdTMyIGNsayA9IDAsIHB3ciA9IDA7Ci0KLQlpZiAoaW9zLT5jbG9jaykgewotCQlpZiAoaW9zLT5jbG9jayA+PSBob3N0LT5tY2xrKSB7Ci0JCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKLQkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrOwotCQl9IGVsc2UgewotCQkJY2xrID0gaG9zdC0+bWNsayAvICgyICogaW9zLT5jbG9jaykgLSAxOwotCQkJaWYgKGNsayA+PSAyNTYpCi0JCQkJY2xrID0gMjU1OwotCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGsgLyAoMiAqIChjbGsgKyAxKSk7Ci0JCX0KLQkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyID09IEFNQkFfVkVORE9SX1NUKQotCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCi0JCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKLQl9Ci0KLQlpZiAoaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZCkKLQkJcHdyIHw9IGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQobW1jX2RldihtbWMpLCBpb3MtPnZkZCk7CisJdTMyIHB3ciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgorCQlpZihob3N0LT52Y2MgJiYKKwkJICAgcmVndWxhdG9yX2lzX2VuYWJsZWQoaG9zdC0+dmNjKSkKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZjYyk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgorI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKwkJaWYgKGhvc3QtPnZjYykKKwkJCS8qIFRoaXMgaW1wbGljaXRseSBlbmFibGVzIHRoZSByZWd1bGF0b3IgKi8KKwkJCW1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIGlvcy0+dmRkKTsKKyNlbmRpZgorCQkvKgorCQkgKiBUaGUgdHJhbnNsYXRlX3ZkZCBmdW5jdGlvbiBpcyBub3QgdXNlZCBpZiB5b3UgaGF2ZQorCQkgKiBhbiBleHRlcm5hbCByZWd1bGF0b3IsIG9yIHlvdXIgZGVzaWduIGlzIHJlYWxseSB3ZWlyZC4KKwkJICogVXNpbmcgaXQgd291bGQgbWVhbiBzZW5kaW5nIGluIHBvd2VyIGNvbnRyb2wgQk9USCB1c2luZworCQkgKiBhIHJlZ3VsYXRvciBBTkQgdGhlIDQgTU1DSVBXUiBiaXRzLiBJZiB3ZSBkb24ndCBoYXZlCisJCSAqIGEgcmVndWxhdG9yLCB3ZSBtaWdodCBoYXZlIHNvbWUgb3RoZXIgcGxhdGZvcm0gc3BlY2lmaWMKKwkJICogcG93ZXIgY29udHJvbCBiZWhpbmQgdGhpcyB0cmFuc2xhdGUgZnVuY3Rpb24uCisJCSAqLworCQlpZiAoIWhvc3QtPnZjYyAmJiBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKQorCQkJcHdyIHw9IGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQobW1jX2RldihtbWMpLCBpb3MtPnZkZCk7CiAJCS8qIFRoZSBTVCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgdGhpcywgZmFsbCB0aHJvdWdoIHRvIFBPV0VSX09OICovCiAJCWlmIChob3N0LT5od19kZXNpZ25lciAhPSBBTUJBX1ZFTkRPUl9TVCkgewogCQkJcHdyIHw9IE1DSV9QV1JfVVA7CkBAIC00NjUsMTIgKzQ5NywxNiBAQAogCQl9CiAJfQogCi0Jd3JpdGVsKGNsaywgaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCW1tY2lfc2V0X2Nsa3JlZyhob3N0LCBpb3MtPmNsb2NrKTsKIAogCWlmIChob3N0LT5wd3IgIT0gcHdyKSB7CiAJCWhvc3QtPnB3ciA9IHB3cjsKIAkJd3JpdGVsKHB3ciwgaG9zdC0+YmFzZSArIE1NQ0lQT1dFUik7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IG1tY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQpAQCAtNTE3LDcgKzU1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKIHsKLQlzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJaW50IHJldDsKQEAgLTU4Myw3ICs2MTksMzAgQEAKIAltbWMtPm9wcyA9ICZtbWNpX29wczsKIAltbWMtPmZfbWluID0gKGhvc3QtPm1jbGsgKyA1MTEpIC8gNTEyOwogCW1tYy0+Zl9tYXggPSBtaW4oaG9zdC0+bWNsaywgZm1heCk7Ci0JbW1jLT5vY3JfYXZhaWwgPSBwbGF0LT5vY3JfbWFzazsKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJLyogSWYgd2UncmUgdXNpbmcgdGhlIHJlZ3VsYXRvciBmcmFtZXdvcmssIHRyeSB0byBmZXRjaCBhIHJlZ3VsYXRvciAqLworCWhvc3QtPnZjYyA9IHJlZ3VsYXRvcl9nZXQoJmRldi0+ZGV2LCAidm1tYyIpOworCWlmIChJU19FUlIoaG9zdC0+dmNjKSkKKwkJaG9zdC0+dmNjID0gTlVMTDsKKwllbHNlIHsKKwkJaW50IG1hc2sgPSBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKGhvc3QtPnZjYyk7CisKKwkJaWYgKG1hc2sgPCAwKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJlcnJvciBnZXR0aW5nIE9DUiBtYXNrICglZClcbiIsCisJCQkJbWFzayk7CisJCWVsc2UgeworCQkJaG9zdC0+bW1jLT5vY3JfYXZhaWwgPSAodTMyKSBtYXNrOworCQkJaWYgKHBsYXQtPm9jcl9tYXNrKQorCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIlByb3ZpZGVkIG9jcl9tYXNrL3NldHBvd2VyIHdpbGwgbm90IGJlIHVzZWQgIgorCQkJCSAiKHVzaW5nIHJlZ3VsYXRvciBpbnN0ZWFkKVxuIik7CisJCX0KKwl9CisjZW5kaWYKKwkvKiBGYWxsIGJhY2sgdG8gcGxhdGZvcm0gZGF0YSBpZiBubyByZWd1bGF0b3IgaXMgZm91bmQgKi8KKwlpZiAoaG9zdC0+dmNjID09IE5VTEwpCisJCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CisJbW1jLT5jYXBzID0gcGxhdC0+Y2FwYWJpbGl0aWVzOwogCiAJLyoKIAkgKiBXZSBjYW4gZG8gU0dJTwpAQCAtNjE5LDcgKzY3OCw2IEBACiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzEpOwogCXdyaXRlbCgweGZmZiwgaG9zdC0+YmFzZSArIE1NQ0lDTEVBUik7CiAKLSNpZmRlZiBDT05GSUdfR1BJT0xJQgogCWlmIChncGlvX2lzX3ZhbGlkKHBsYXQtPmdwaW9fY2QpKSB7CiAJCXJldCA9IGdwaW9fcmVxdWVzdChwbGF0LT5ncGlvX2NkLCBEUklWRVJfTkFNRSAiIChjZCkiKTsKIAkJaWYgKHJldCA9PSAwKQpAQCAtNjM4LDcgKzY5Niw2IEBACiAJCWVsc2UgaWYgKHJldCAhPSAtRU5PU1lTKQogCQkJZ290byBlcnJfZ3Bpb193cDsKIAl9Ci0jZW5kaWYKIAogCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBtbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKIAlpZiAocmV0KQpAQCAtNzIwLDYgKzc3NywxMCBAQAogCQljbGtfZGlzYWJsZShob3N0LT5jbGspOwogCQljbGtfcHV0KGhvc3QtPmNsayk7CiAKKwkJaWYgKHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykpCisJCQlyZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2MpOworCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CisKIAkJbW1jX2ZyZWVfaG9zdChtbWMpOwogCiAJCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IDgzOWYyNjQuLjFjZWI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1bnNpZ25lZCBpbnQJCW1jbGs7CiAJdW5zaWduZWQgaW50CQljY2xrOwogCXUzMgkJCXB3cjsKLQlzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdDsKIAogCXU4CQkJaHdfZGVzaWduZXI7CiAJdTgJCQlod19yZXZpc2lvbjo0OwpAQCAtMTc1LDYgKzE3NSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZ19wdHI7CiAJdW5zaWduZWQgaW50CQlzZ19vZmY7CiAJdW5zaWduZWQgaW50CQlzaXplOworCXN0cnVjdCByZWd1bGF0b3IJKnZjYzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWNpX2luaXRfc2coc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwppbmRleCBlN2EzMzFkLi5iOGZkN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwpAQCAtMTUyOSw2ICsxNTI5LDcgQEAKIAkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiAKIAltbWNfb21hcF9mY2xrX2VuYWJsZShob3N0LCAwKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CiAJY2xrX3B1dChob3N0LT5pY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNDQ4N2NjMC4uMGFlY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIwMTMsNyArMjAxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwX2hzbW1jX2RyaXZlciwgb21hcF9oc21tY19wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGU1NWFjNzkuLmIwMGQ2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIApAQCAtOTYsMTAgKzk3LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBweGFtY2lfc2V0X3Bvd2VyKHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZkZCkKIHsKKwlpbnQgb247CisKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJaWYgKGhvc3QtPnZjYykKIAkJbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgdmRkKTsKICNlbmRpZgorCWlmICghaG9zdC0+dmNjICYmIGhvc3QtPnBkYXRhICYmCisJICAgIGdwaW9faXNfdmFsaWQoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIpKSB7CisJCW9uID0gKCgxIDw8IHZkZCkgJiBob3N0LT5wZGF0YS0+b2NyX21hc2spOworCQlncGlvX3NldF92YWx1ZShob3N0LT5wZGF0YS0+Z3Bpb19wb3dlciwKKwkJCSAgICAgICAhIW9uIF4gaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXJfaW52ZXJ0KTsKKwl9CiAJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQogCQlob3N0LT5wZGF0YS0+c2V0cG93ZXIobW1jX2Rldihob3N0LT5tbWMpLCB2ZGQpOwogfQpAQCAtNDIxLDYgKzQzMCwxMiBAQAogewogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwlpZiAoaG9zdC0+cGRhdGEgJiYgZ3Bpb19pc192YWxpZChob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvKSkgeworCQlpZiAoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9yb19pbnZlcnQpCisJCQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm8pOworCQllbHNlCisJCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybyk7CisJfQogCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+Z2V0X3JvKQogCQlyZXR1cm4gISFob3N0LT5wZGF0YS0+Z2V0X3JvKG1tY19kZXYobW1jKSk7CiAJLyoKQEAgLTUzNCw3ICs1NDksNyBAQAogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyLCAqZG1hcngsICpkbWF0eDsKLQlpbnQgcmV0LCBpcnE7CisJaW50IHJldCwgaXJxLCBncGlvX2NkID0gLTEsIGdwaW9fcm8gPSAtMSwgZ3Bpb19wb3dlciA9IC0xOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTY2MSwxMyArNjc2LDYzIEBACiAJfQogCWhvc3QtPmRtYV9kcmNtcnR4ID0gZG1hdHgtPnN0YXJ0OwogCisJaWYgKGhvc3QtPnBkYXRhKSB7CisJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJZ3Bpb19ybyA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm87CisJCWdwaW9fcG93ZXIgPSBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcjsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fcG93ZXIsICJtbWMgY2FyZCBwb3dlciIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX3Bvd2VyICVkXG4iLCBncGlvX3Bvd2VyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX3Bvd2VyLAorCQkJCSAgICAgIGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyX2ludmVydCk7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX3JvLCAibW1jIGNhcmQgcmVhZCBvbmx5Iik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fcm8gJWRcbiIsIGdwaW9fcm8pOworCQkJZ290byBlcnJfZ3Bpb19ybzsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3JvKTsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19jZCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fY2QsICJtbWMgY2FyZCBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19jZCAlZFxuIiwgZ3Bpb19jZCk7CisJCQlnb3RvIGVycl9ncGlvX2NkOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fY2QpOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBweGFtY2lfZGV0ZWN0X2lycSwKKwkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkgICJtbWMgY2FyZCBkZXRlY3QiLCBtbWMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIpOworCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCX0KKwl9CisKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCiAJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZ3Bpb19wb3dlciBhbmQgc2V0cG93ZXIoKSBib3RoIGRlZmluZWRcbiIpOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pICYmIGhvc3QtPnBkYXRhLT5nZXRfcm8pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJncGlvX3JvIGFuZCBnZXRfcm8oKSBib3RoIGRlZmluZWRcbiIpOworCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX3JlcXVlc3RfaXJxOgorCWdwaW9fZnJlZShncGlvX2NkKTsKK2Vycl9ncGlvX2NkOgorCWdwaW9fZnJlZShncGlvX3JvKTsKK2Vycl9ncGlvX3JvOgorCWdwaW9fZnJlZShncGlvX3Bvd2VyKTsKICBvdXQ6CiAJaWYgKGhvc3QpIHsKIAkJaWYgKGhvc3QtPmRtYSA+PSAwKQpAQCAtNjg4LDEyICs3NTMsMjYgQEAKIHN0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGdwaW9fY2QgPSAtMSwgZ3Bpb19ybyA9IC0xLCBncGlvX3Bvd2VyID0gLTE7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChtbWMpIHsKIAkJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAorCQlpZiAoaG9zdC0+cGRhdGEpIHsKKwkJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJCWdwaW9fcm8gPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvOworCQkJZ3Bpb19wb3dlciA9IGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyOworCQl9CisJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fY2QpKSB7CisJCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvX2NkKSwgbW1jKTsKKwkJCWdwaW9fZnJlZShncGlvX2NkKTsKKwkJfQorCQlpZiAoZ3Bpb19pc192YWxpZChncGlvX3JvKSkKKwkJCWdwaW9fZnJlZShncGlvX3JvKTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpCisJCQlncGlvX2ZyZWUoZ3Bpb19wb3dlcik7CiAJCWlmIChob3N0LT52Y2MpCiAJCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CiAKQEAgLTcyNSwyMCArODA0LDIwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YW1jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCi0JCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBQTVNHX1NVU1BFTkQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNzQ2LDE5ICs4MjUsMjIgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFtY2lfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YW1jaV9yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhbWNpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhbWNpX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhbWNpX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFtY2lfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IDhjMDhjZDcuLjk5Yjc0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNTgsOCArNjAsNiBAQAogCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsIGFyZ3MpOyAgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUkVTU0laRShyZXNzb3VyY2UpICgoKHJlc3NvdXJjZSktPmVuZCAtIChyZXNzb3VyY2UpLT5zdGFydCkrMSkKLQogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjbWNpX2RtYV9jbGllbnQgPSB7CiAJLm5hbWUJCT0gInMzYy1tY2kiLAogfTsKQEAgLTE2NCw2ICsxNjQsNDAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NTUNfREVCVUcgKi8KIAorLyoqCisgKiBzM2NtY2lfaG9zdF91c2VkbWEgLSByZXR1cm4gd2hldGhlciB0aGUgaG9zdCBpcyB1c2luZyBkbWEgb3IgcGlvCisgKiBAaG9zdDogVGhlIGhvc3Qgc3RhdGUKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaG9zdCBpcyB1c2luZyBETUEgdG8gdHJhbnNmZXIgZGF0YSwgZWxzZSBmYWxzZQorICogdG8gdXNlIFBJTyBtb2RlLiBXaWxsIHJldHVybiBzdGF0aWMgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGRyaXZlcgorICogY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIHMzY21jaV9ob3N0X3VzZWRtYShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIGZhbHNlOworI2VsaWYgZGVmaW5lZChDT05GSUdfTU1DX1MzQ19ETUEpCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBob3N0LT5kb2RtYTsKKyNlbmRpZgorfQorCisvKioKKyAqIHMzY21jaV9ob3N0X2NhbnBpbyAtIHJldHVybiB0cnVlIGlmIGhvc3QgaGFzIHBpbyBjb2RlIGF2YWlsYWJsZQorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgUElPIHN1cHBvcnQgY29kZQorICogYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjbWNpX2hvc3RfY2FucGlvKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHUzMiBlbmFibGVfaW1hc2soc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCB1MzIgaW1hc2spCiB7CiAJdTMyIG5ld21hc2s7CkBAIC0xOTAsNyArMjI0LDMzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbWFzayhzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCiB7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwl1MzIgbWFzayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKworCS8qIHByZXNlcnZlIHRoZSBTRElPIElSUSBtYXNrIHN0YXRlICovCisJbWFzayAmPSBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUTsKKwl3cml0ZWwobWFzaywgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworfQorCisvKioKKyAqIHMzY21jaV9jaGVja19zZGlvX2lycSAtIHRlc3Qgd2hldGhlciB0aGUgU0RJTyBJUlEgaXMgYmVpbmcgc2lnbmFsbGVkCisgKiBAaG9zdDogVGhlIGhvc3QgdG8gY2hlY2suCisgKgorICogVGVzdCB0byBzZWUgaWYgdGhlIFNESU8gaW50ZXJydXB0IGlzIGJlaW5nIHNpZ25hbGxlZCBpbiBjYXNlIHRoZQorICogY29udHJvbGxlciBoYXMgZmFpbGVkIHRvIHJlLWRldGVjdCBhIGNhcmQgaW50ZXJydXB0LiBSZWFkIEdQRTggYW5kCisgKiBzZWUgaWYgaXQgaXMgbG93IGFuZCBpZiBzbywgc2lnbmFsIGEgU0RJTyBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgY2FsbGVkIGlmIGEgcmVxdWVzdCBpcyBmaW5pc2hlZCAod2UgYXNzdW1lIHRoYXQgdGhlCisgKiBidXMgaXMgbm93IGlkbGUpIGFuZCB3aGVuIHRoZSBTRElPIElSUSBpcyBlbmFibGVkIGluIGNhc2UgdGhlIElSUSBpcworICogYWxyZWFkeSBiZWluZyBpbmRpY2F0ZWQuCisqLworc3RhdGljIHZvaWQgczNjbWNpX2NoZWNrX3NkaW9faXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlpZiAoaG9zdC0+c2Rpb19pcnFlbikgeworCQlpZiAoZ3Bpb19nZXRfdmFsdWUoUzNDMjQxMF9HUEUoOCkpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2lnbmFsbGluZyBpcnFcbiIsIF9fZnVuY19fKTsKKwkJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2RhdGFfYnVmZmVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwKQEAgLTIzOCw2ICsyOTgsNjQgQEAKIAlyZXR1cm4gNjMgLSBmaWZvc3RhdDsKIH0KIAorLyoqCisgKiBzM2NtY2lfZW5hYmxlX2lycSAtIGVuYWJsZSBJUlEsIGFmdGVyIGhhdmluZyBkaXNhYmxlZCBpdC4KKyAqIEBob3N0OiBUaGUgZGV2aWNlIHN0YXRlLgorICogQG1vcmU6IFRydWUgaWYgbW9yZSBJUlFzIGFyZSBleHBlY3RlZCBmcm9tIHRyYW5zZmVyLgorICoKKyAqIEVuYWJsZSB0aGUgbWFpbiBJUlEgaWYgbmVlZGVkIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkLgorICoKKyAqIFRoZSBJUlEgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczoKKyAqCS0gZGlzYWJsZWQgZHVyaW5nIElETEUKKyAqCS0gZGlzYWJsZWQgd2hpbHN0IHByb2Nlc3NpbmcgZGF0YQorICoJLSBlbmFibGVkIGR1cmluZyB0cmFuc2ZlcgorICoJLSBlbmFibGVkIHdoaWxzdCBhd2FpdGluZyBTRElPIGludGVycnVwdCBkZXRlY3Rpb24KKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2VuYWJsZV9pcnEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCBib29sIG1vcmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGVuYWJsZSA9IGZhbHNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaG9zdC0+aXJxX2VuYWJsZWQgPSBtb3JlOworCWhvc3QtPmlycV9kaXNhYmxlZCA9IGZhbHNlOworCisJZW5hYmxlID0gbW9yZSB8IGhvc3QtPnNkaW9faXJxZW47CisKKwlpZiAoaG9zdC0+aXJxX3N0YXRlICE9IGVuYWJsZSkgeworCQlob3N0LT5pcnFfc3RhdGUgPSBlbmFibGU7CisKKwkJaWYgKGVuYWJsZSkKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICoKKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2Rpc2FibGVfaXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgYm9vbCB0cmFuc2ZlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLy9wcmludGsoS0VSTl9ERUJVRyAiJXM6IHRyYW5zZmVyICVkXG4iLCBfX2Z1bmNfXywgdHJhbnNmZXIpOworCisJaG9zdC0+aXJxX2Rpc2FibGVkID0gdHJhbnNmZXI7CisKKwlpZiAodHJhbnNmZXIgJiYgaG9zdC0+aXJxX3N0YXRlKSB7CisJCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOworCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgZG9fcGlvX3JlYWQoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQogewogCWludCByZXM7CkBAIC0zNzQsOCArNDkyLDcgQEAKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSAoc3RydWN0IHMzY21jaV9ob3N0ICopIGRhdGE7CiAKLQotCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2Rpc2FibGVfaXJxKGhvc3QsIHRydWUpOwogCiAJaWYgKGhvc3QtPnBpb19hY3RpdmUgPT0gWEZFUl9XUklURSkKIAkJZG9fcGlvX3dyaXRlKGhvc3QpOwpAQCAtMzk1LDkgKzUxMiwxMCBAQAogCQkJCWhvc3QtPm1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlOVkFMOwogCQl9CiAKKwkJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgZmFsc2UpOwogCQlmaW5hbGl6ZV9yZXF1ZXN0KGhvc3QpOwogCX0gZWxzZQotCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJCXMzY21jaV9lbmFibGVfaXJxKGhvc3QsIHRydWUpOwogfQogCiAvKgpAQCAtNDMyLDE3ICs1NTAsMjcgQEAKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CiAJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CiAJdTMyIG1jaV9jc3RhLCBtY2lfZHN0YSwgbWNpX2ZzdGEsIG1jaV9kY250LCBtY2lfaW1zazsKLQl1MzIgbWNpX2NjbGVhciwgbWNpX2RjbGVhcjsKKwl1MzIgbWNpX2NjbGVhciA9IDAsIG1jaV9kY2xlYXI7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAKKwltY2lfZHN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURTVEEpOworCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCisJaWYgKG1jaV9kc3RhICYgUzNDMjQxMF9TRElEU1RBX1NESU9JUlFERVRFQ1QpIHsKKwkJaWYgKG1jaV9pbXNrICYgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpIHsKKwkJCW1jaV9kY2xlYXIgPSBTM0MyNDEwX1NESURTVEFfU0RJT0lSUURFVEVDVDsKKwkJCXdyaXRlbChtY2lfZGNsZWFyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKTsKKworCQkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNvbXBsZXRlX2xvY2ssIGlmbGFncyk7CiAKIAltY2lfY3N0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRFNUQVQpOwotCW1jaV9kc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSk7CiAJbWNpX2RjbnQgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKTsKIAltY2lfZnN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwotCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCW1jaV9jY2xlYXIgPSAwOwogCW1jaV9kY2xlYXIgPSAwOwogCiAJaWYgKChob3N0LT5jb21wbGV0ZV93aGF0ID09IENPTVBMRVRJT05fTk9ORSkgfHwKQEAgLTQ2Niw3ICs1OTQsNyBAQAogCQlnb3RvIGlycV9vdXQ7CiAJfQogCi0JaWYgKCFob3N0LT5kb2RtYSkgeworCWlmICghczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CiAJCWlmICgoaG9zdC0+cGlvX2FjdGl2ZSA9PSBYRkVSX1dSSVRFKSAmJgogCQkgICAgKG1jaV9mc3RhICYgUzNDMjQxMF9TRElGU1RBX1RGREVUKSkgewogCkBAIC02NzMsNiArODAxLDcgQEAKIAlkYmcoaG9zdCwgZGJnX2RtYSwgIkRNQSBGSU5JU0hFRCBTaXplOiVpIERTVEE6JTA4eCBEQ05UOiUwOHhcbiIsCiAJCXNpemUsIG1jaV9kc3RhLCBtY2lfZGNudCk7CiAKKwlob3N0LT5kbWFfY29tcGxldGUgPSAxOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX0ZJTkFMSVpFOwogCiBvdXQ6CkBAIC02ODMsOSArODEyLDkgQEAKIGZhaWxfcmVxdWVzdDoKIAlob3N0LT5tcnEtPmRhdGEtPmVycm9yID0gLUVJTlZBTDsKIAlob3N0LT5jb21wbGV0ZV93aGF0ID0gQ09NUExFVElPTl9GSU5BTElaRTsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCWdvdG8gb3V0OworCWNsZWFyX2ltYXNrKGhvc3QpOwogCisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQpAQCAtNzAyLDggKzgzMSw5IEBACiAKIAlpZiAoY21kLT5kYXRhICYmIChjbWQtPmVycm9yID09IDApICYmCiAJICAgIChjbWQtPmRhdGEtPmVycm9yID09IDApKSB7Ci0JCWlmIChob3N0LT5kb2RtYSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKLQkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmchXG4iKTsKKwkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKKwkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmcgKCVkKSFcbiIsCisJCQkgICAgaG9zdC0+ZG1hX2NvbXBsZXRlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTcyOCw3ICs4NTgsNyBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDTURBUkcpOwogCXdyaXRlbChTM0MyNDEwX1NESURDT05fU1RPUCwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRENPTik7CiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRENPTik7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwljbGVhcl9pbWFzayhob3N0KTsKIAogCWlmIChjbWQtPmRhdGEgJiYgY21kLT5lcnJvcikKIAkJY21kLT5kYXRhLT5lcnJvciA9IGNtZC0+ZXJyb3I7CkBAIC03NTQsNyArODg0LDcgQEAKIAkvKiBJZiB3ZSBoYWQgYW4gZXJyb3Igd2hpbGUgdHJhbnNmZXJpbmcgZGF0YSB3ZSBmbHVzaCB0aGUKIAkgKiBETUEgY2hhbm5lbCBhbmQgdGhlIGZpZm8gdG8gY2xlYXIgb3V0IGFueSBnYXJiYWdlLiAqLwogCWlmIChtcnEtPmRhdGEtPmVycm9yICE9IDApIHsKLQkJaWYgKGhvc3QtPmRvZG1hKQorCQlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQogCQkJczNjMjQxMF9kbWFfY3RybChob3N0LT5kbWEsIFMzQzI0MTBfRE1BT1BfRkxVU0gpOwogCiAJCWlmIChob3N0LT5pczI0NDApIHsKQEAgLTc3Niw2ICs5MDYsOCBAQAogcmVxdWVzdF9kb25lOgogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX05PTkU7CiAJaG9zdC0+bXJxID0gTlVMTDsKKworCXMzY21jaV9jaGVja19zZGlvX2lycShob3N0KTsKIAltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKIH0KIApAQCAtODcyLDcgKzEwMDQsNyBAQAogCiAJZGNvbiAgPSBkYXRhLT5ibG9ja3MgJiBTM0MyNDEwX1NESURDT05fQkxLTlVNX01BU0s7CiAKLQlpZiAoaG9zdC0+ZG9kbWEpCisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKIAkJZGNvbiB8PSBTM0MyNDEwX1NESURDT05fRE1BRU47CiAKIAlpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKQEAgLTk1MCw3ICsxMDgyLDcgQEAKIHN0YXRpYyBpbnQgczNjbWNpX3ByZXBhcmVfZG1hKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWludCBkbWFfbGVuLCBpOwotCWludCBydyA9IChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSA/IDEgOiAwOworCWludCBydyA9IGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEU7CiAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIApAQCAtOTU4LDcgKzEwOTAsNyBAQAogCXMzYzI0MTBfZG1hX2N0cmwoaG9zdC0+ZG1hLCBTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKIAogCWRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKLQkJCSAgICAgKHJ3KSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJICAgICBydyA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOwogCiAJaWYgKGRtYV9sZW4gPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05NjksMTEgKzExMDEsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hX2xlbjsgaSsrKSB7CiAJCWludCByZXM7CiAKLQkJZGJnKGhvc3QsIGRiZ19kbWEsICJlbnF1ZXVlICVpOiV1QCV1XG4iLCBpLAotCQkJc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSwKLQkJCXNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CisJCWRiZyhob3N0LCBkYmdfZG1hLCAiZW5xdWV1ZSAlaTogJTA4eEAldVxuIiwgaSwKKwkJICAgIHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSksCisJCSAgICBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSkpOwogCi0JCXJlcyA9IHMzYzI0MTBfZG1hX2VucXVldWUoaG9zdC0+ZG1hLCAodm9pZCAqKSBob3N0LAorCQlyZXMgPSBzM2MyNDEwX2RtYV9lbnF1ZXVlKGhvc3QtPmRtYSwgaG9zdCwKIAkJCQkJICBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pLAogCQkJCQkgIHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CiAKQEAgLTEwMTgsNyArMTE1MCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoaG9zdC0+ZG9kbWEpCisJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCiAJCQlyZXMgPSBzM2NtY2lfcHJlcGFyZV9kbWEoaG9zdCwgY21kLT5kYXRhKTsKIAkJZWxzZQogCQkJcmVzID0gczNjbWNpX3ByZXBhcmVfcGlvKGhvc3QsIGNtZC0+ZGF0YSk7CkBAIC0xMDM3LDcgKzExNjksNyBAQAogCXMzY21jaV9zZW5kX2NvbW1hbmQoaG9zdCwgY21kKTsKIAogCS8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KLQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgczNjbWNpX2NhcmRfcHJlc2VudChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTEwNDksNyArMTE4MSw3IEBACiAJaWYgKHBkYXRhLT5ncGlvX2RldGVjdCA9PSAwKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fZGV0ZWN0KSA/IDAgOiAxOworCXJldCA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2RldGVjdCkgPyAwIDogMTsKIAlyZXR1cm4gcmV0IF4gcGRhdGEtPmRldGVjdF9pbnZlcnQ7CiB9CiAKQEAgLTExMDQsMTIgKzEyMzYsMTIgQEAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09OOgogCWNhc2UgTU1DX1BPV0VSX1VQOgotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUEU1X1NEQ0xLKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTYsIFMzQzI0MTBfR1BFNl9TRENNRCk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU3LCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTgsIFMzQzI0MTBfR1BFOF9TRERBVDEpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOSwgUzNDMjQxMF9HUEU5X1NEREFUMik7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxMCwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDUpLCBTM0MyNDEwX0dQRTVfU0RDTEspOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDYpLCBTM0MyNDEwX0dQRTZfU0RDTUQpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDcpLCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg4KSwgUzNDMjQxMF9HUEU4X1NEREFUMSk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoOSksIFMzQzI0MTBfR1BFOV9TRERBVDIpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDEwKSwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOwogCiAJCWlmIChob3N0LT5wZGF0YS0+c2V0X3Bvd2VyKQogCQkJaG9zdC0+cGRhdGEtPnNldF9wb3dlcihpb3MtPnBvd2VyX21vZGUsIGlvcy0+dmRkKTsKQEAgLTExMjEsOCArMTI1Myw3IEBACiAKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJZGVmYXVsdDoKLQkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRTUsIDApOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQRSg1KSwgMCk7CiAKIAkJaWYgKGhvc3QtPmlzMjQ0MCkKIAkJCW1jaV9jb24gfD0gUzNDMjQ0MF9TRElDT05fU0RSRVNFVDsKQEAgLTExNjgsNyArMTI5OSw3IEBACiAJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOwogCWludCByZXQ7CiAKLQlpZiAocGRhdGEtPmdwaW9fd3Byb3RlY3QgPT0gMCkKKwlpZiAocGRhdGEtPm5vX3dwcm90ZWN0KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fd3Byb3RlY3QpOwpAQCAtMTE3OSwxMSArMTMxMCw1MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjb247CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljb24gPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCWhvc3QtPnNkaW9faXJxZW4gPSBlbmFibGU7CisKKwlpZiAoZW5hYmxlID09IGhvc3QtPnNkaW9faXJxZW4pCisJCWdvdG8gc2FtZV9zdGF0ZTsKKworCWlmIChlbmFibGUpIHsKKwkJY29uIHw9IFMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisJCWVuYWJsZV9pbWFzayhob3N0LCBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSk7CisKKwkJaWYgKCFob3N0LT5pcnFfc3RhdGUgJiYgIWhvc3QtPmlycV9kaXNhYmxlZCkgeworCQkJaG9zdC0+aXJxX3N0YXRlID0gdHJ1ZTsKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCWRpc2FibGVfaW1hc2soaG9zdCwgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpOworCQljb24gJj0gflMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisKKwkJaWYgKCFob3N0LT5pcnFfZW5hYmxlZCAmJiBob3N0LT5pcnFfc3RhdGUpIHsKKwkJCWRpc2FibGVfaXJxX25vc3luYyhob3N0LT5pcnEpOworCQkJaG9zdC0+aXJxX3N0YXRlID0gZmFsc2U7CisJCX0KKwl9CisKKwl3cml0ZWwoY29uLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCisgc2FtZV9zdGF0ZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzM2NtY2lfY2hlY2tfc2Rpb19pcnEoaG9zdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHMzY21jaV9vcHMgPSB7CiAJLnJlcXVlc3QJPSBzM2NtY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IHMzY21jaV9zZXRfaW9zLAogCS5nZXRfcm8JCT0gczNjbWNpX2dldF9ybywKIAkuZ2V0X2NkCQk9IHMzY21jaV9jYXJkX3ByZXNlbnQsCisJLmVuYWJsZV9zZGlvX2lycSA9IHMzY21jaV9lbmFibGVfc2Rpb19pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHMzY21jaV9kZWZfcGRhdGEgPSB7CkBAIC0xMjQ2LDExICsxNDE4LDE0MCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXMyNDQwKQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgczNjbWNpX3N0YXRlX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihzZXEsICJSZWdpc3RlciBiYXNlID0gMHglMDh4XG4iLCAodTMyKWhvc3QtPmJhc2UpOworCXNlcV9wcmludGYoc2VxLCAiQ2xvY2sgcmF0ZSA9ICVsZFxuIiwgaG9zdC0+Y2xrX3JhdGUpOworCXNlcV9wcmludGYoc2VxLCAiUHJlc2NhbGUgPSAlZFxuIiwgaG9zdC0+cHJlc2NhbGVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlzMjQ0MCA9ICVkXG4iLCBob3N0LT5pczI0NDApOworCXNlcV9wcmludGYoc2VxLCAiSVJRID0gJWRcbiIsIGhvc3QtPmlycSk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZW5hYmxlZCA9ICVkXG4iLCBob3N0LT5pcnFfZW5hYmxlZCk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZGlzYWJsZWQgPSAlZFxuIiwgaG9zdC0+aXJxX2Rpc2FibGVkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSBzdGF0ZSA9ICVkXG4iLCBob3N0LT5pcnFfc3RhdGUpOworCXNlcV9wcmludGYoc2VxLCAiQ0QgSVJRID0gJWRcbiIsIGhvc3QtPmlycV9jZCk7CisJc2VxX3ByaW50ZihzZXEsICJEbyBETUEgPSAlZFxuIiwgczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlNESUlNU0sgYXQgJWRcbiIsIGhvc3QtPnNkaWltc2spOworCXNlcV9wcmludGYoc2VxLCAiU0RJREFUQSBhdCAlZFxuIiwgaG9zdC0+c2RpZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NtY2lfc3RhdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3N0YXRlX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2NtY2lfZm9wc19zdGF0ZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gczNjbWNpX3N0YXRlX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKyNkZWZpbmUgREJHX1JFRyhfcikgeyAuYWRkciA9IFMzQzI0MTBfU0RJIyNfciwgLm5hbWUgPSAjX3IgfQorCitzdHJ1Y3QgczNjbWNpX3JlZyB7CisJdW5zaWduZWQgc2hvcnQJYWRkcjsKKwl1bnNpZ25lZCBjaGFyCSpuYW1lOworfSBkZWJ1Z19yZWdzW10gPSB7CisJREJHX1JFRyhDT04pLAorCURCR19SRUcoUFJFKSwKKwlEQkdfUkVHKENNREFSRyksCisJREJHX1JFRyhDTURDT04pLAorCURCR19SRUcoQ01EU1RBVCksCisJREJHX1JFRyhSU1AwKSwKKwlEQkdfUkVHKFJTUDEpLAorCURCR19SRUcoUlNQMiksCisJREJHX1JFRyhSU1AzKSwKKwlEQkdfUkVHKFRJTUVSKSwKKwlEQkdfUkVHKEJTSVpFKSwKKwlEQkdfUkVHKERDT04pLAorCURCR19SRUcoRENOVCksCisJREJHX1JFRyhEU1RBKSwKKwlEQkdfUkVHKEZTVEEpLAorCXt9Cit9OworCitzdGF0aWMgaW50IHMzY21jaV9yZWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBzM2NtY2lfcmVnICpycHRyID0gZGVidWdfcmVnczsKKworCWZvciAoOyBycHRyLT5uYW1lOyBycHRyKyspCisJCXNlcV9wcmludGYoc2VxLCAiU0RJJXNcdD0weCUwOHhcbiIsIHJwdHItPm5hbWUsCisJCQkgICByZWFkbChob3N0LT5iYXNlICsgcnB0ci0+YWRkcikpOworCisJc2VxX3ByaW50ZihzZXEsICJTRElJTVNLXHQ9MHglMDh4XG4iLCByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zaykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjbWNpX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3JlZ3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHMzY21jaV9mb3BzX3JlZ3MgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHMzY21jaV9yZWdzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIHMzY21jaV9kZWJ1Z2ZzX2F0dGFjaChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmhvc3QtPnBkZXYtPmRldjsKKworCWhvc3QtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoZGV2KSwgTlVMTCk7CisJaWYgKElTX0VSUihob3N0LT5kZWJ1Z19yb290KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyByb290XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhvc3QtPmRlYnVnX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDQ0LAorCQkJCQkJaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJCSZzM2NtY2lfZm9wc19zdGF0ZSk7CisKKwlpZiAoSVNfRVJSKGhvc3QtPmRlYnVnX3N0YXRlKSkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnIHN0YXRlIGZpbGVcbiIpOworCisJaG9zdC0+ZGVidWdfcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3MiLCAwNDQ0LAorCQkJCQkgICAgICAgaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJICAgICAgICZzM2NtY2lfZm9wc19yZWdzKTsKKworCWlmIChJU19FUlIoaG9zdC0+ZGVidWdfcmVncykpCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyByZWdzIGZpbGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3JlZ3MpOworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3N0YXRlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShob3N0LT5kZWJ1Z19yb290KTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19hdHRhY2goc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0CSptbWM7CiAJaW50IHJldDsKKwlpbnQgaXMyNDQwOworCWludCBpOworCisJaXMyNDQwID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CiAKIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IHMzY21jaV9ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKQEAgLTEyNTgsNiArMTU1OSwxOCBAQAogCQlnb3RvIHByb2JlX291dDsKIAl9CiAKKwlmb3IgKGkgPSBTM0MyNDEwX0dQRSg1KTsgaSA8PSBTM0MyNDEwX0dQRSgxMCk7IGkrKykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGdwaW8gJWRcbiIsIGkpOworCisJCQlmb3IgKGktLTsgaSA+PSBTM0MyNDEwX0dQRSg1KTsgaS0tKQorCQkJCWdwaW9fZnJlZShpKTsKKworCQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCX0KKwl9CisKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgCT0gbW1jOwogCWhvc3QtPnBkZXYJPSBwZGV2OwpAQCAtMTI4MiwxMSArMTU5NSwxMiBAQAogCQlob3N0LT5jbGtfZGl2CT0gMjsKIAl9CiAKLQlob3N0LT5kb2RtYQkJPSAwOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgCT0gQ09NUExFVElPTl9OT05FOwogCWhvc3QtPnBpb19hY3RpdmUgCT0gWEZFUl9OT05FOwogCi0JaG9zdC0+ZG1hCQk9IFMzQ01DSV9ETUE7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPRE1BCisJaG9zdC0+ZG9kbWEJCT0gaG9zdC0+cGRhdGEtPmRtYTsKKyNlbmRpZgogCiAJaG9zdC0+bWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWhvc3QtPm1lbSkgewpAQCAtMTI5NCwxOSArMTYwOCwxOSBAQAogCQkJImZhaWxlZCB0byBnZXQgaW8gbWVtb3J5IHJlZ2lvbiByZXNvdWNlLlxuIik7CiAKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCWdvdG8gcHJvYmVfZnJlZV9ncGlvOwogCX0KIAogCWhvc3QtPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LAotCQkJCSAgICAgICBSRVNTSVpFKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOworCQkJCSAgICAgICByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOwogCiAJaWYgKCFob3N0LT5tZW0pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaW8gbWVtb3J5IHJlZ2lvbi5cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2dwaW87CiAJfQogCi0JaG9zdC0+YmFzZSA9IGlvcmVtYXAoaG9zdC0+bWVtLT5zdGFydCwgUkVTU0laRShob3N0LT5tZW0pKTsKKwlob3N0LT5iYXNlID0gaW9yZW1hcChob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOwogCWlmICghaG9zdC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIGlvIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzMzEsMzEgKzE2NDUsNjAgQEAKIAkgKiBlbnN1cmUgd2UgZG9uJ3QgbG9jayB0aGUgc3lzdGVtIHdpdGggdW4tc2VydmljZWFibGUgcmVxdWVzdHMuICovCiAKIAlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOwogCi0JaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOwotCi0JaWYgKGhvc3QtPmlycV9jZCA+PSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnFfY2QsIHMzY21jaV9pcnFfY2QsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCURSSVZFUl9OQU1FLCBob3N0KSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNhcmQgZGV0ZWN0IGlycS5cbiIpOwotCQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCwgInMzY21jaSBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBkZXRlY3QgZ3Bpb1xuIik7CiAJCQlnb3RvIHByb2JlX2ZyZWVfaXJxOwogCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImhvc3QgZGV0ZWN0IGhhcyBubyBpcnEgYXZhaWxhYmxlXG4iKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3Bpbihob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QsCi0JCQkJICAgIFMzQzI0MTBfR1BJT19JTlBVVCk7CisKKwkJaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCisJCWlmIChob3N0LT5pcnFfY2QgPj0gMCkgeworCQkJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycV9jZCwgczNjbWNpX2lycV9jZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQlEUklWRVJfTkFNRSwgaG9zdCkpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJjYW4ndCBnZXQgY2FyZCBkZXRlY3QgaXJxLlxuIik7CisJCQkJcmV0ID0gLUVOT0VOVDsKKwkJCQlnb3RvIHByb2JlX2ZyZWVfZ3Bpb19jZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJICJob3N0IGRldGVjdCBoYXMgbm8gaXJxIGF2YWlsYWJsZVxuIik7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCQl9CisJfSBlbHNlCisJCWhvc3QtPmlycV9jZCA9IC0xOworCisJaWYgKCFob3N0LT5wZGF0YS0+bm9fd3Byb3RlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LCAiczNjbWNpIHdwIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgd3JpdGVwcm90ZWN0XG4iKTsKKwkJCWdvdG8gcHJvYmVfZnJlZV9pcnFfY2Q7CisJCX0KKworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCk7CiAJfQogCi0JaWYgKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KQotCQlzM2MyNDEwX2dwaW9fY2ZncGluKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LAotCQkJCSAgICBTM0MyNDEwX0dQSU9fSU5QVVQpOworCS8qIGRlcGVuZGluZyBvbiB0aGUgZG1hIHN0YXRlLCBnZXQgYSBkbWEgY2hhbm5lbCB0byB1c2UuICovCiAKLQlpZiAoczNjMjQxMF9kbWFfcmVxdWVzdChTM0NNQ0lfRE1BLCAmczNjbWNpX2RtYV9jbGllbnQsIE5VTEwpIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IERNQSBjaGFubmVsLlxuIik7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBwcm9iZV9mcmVlX2lycV9jZDsKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CisJCWhvc3QtPmRtYSA9IHMzYzI0MTBfZG1hX3JlcXVlc3QoRE1BQ0hfU0RJLCAmczNjbWNpX2RtYV9jbGllbnQsCisJCQkJCQlob3N0KTsKKwkJaWYgKGhvc3QtPmRtYSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgRE1BIGNoYW5uZWwuXG4iKTsKKwkJCWlmICghczNjbWNpX2hvc3RfY2FucGlvKCkpIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBwcm9iZV9mcmVlX2dwaW9fd3A7CisJCQl9IGVsc2UgeworCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWxsaW5nIGJhY2sgdG8gUElPLlxuIik7CisJCQkJaG9zdC0+ZG9kbWEgPSAwOworCQkJfQorCQl9CiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RpIik7CkBAIC0xMzYzLDcgKzE3MDYsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBjbG9jayBzb3VyY2UuXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlob3N0LT5jbGsgPSBOVUxMOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2RtYTsKIAl9CiAKIAlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmNsayk7CkBAIC0xMzc2LDcgKzE3MTksMTEgQEAKIAogCW1tYy0+b3BzIAk9ICZzM2NtY2lfb3BzOwogCW1tYy0+b2NyX2F2YWlsCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfSFdfU0RJT19JUlEKKwltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1NESU9fSVJROworI2Vsc2UKIAltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisjZW5kaWYKIAltbWMtPmZfbWluIAk9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYgKiAyNTYpOwogCW1tYy0+Zl9tYXggCT0gaG9zdC0+Y2xrX3JhdGUgLyBob3N0LT5jbGtfZGl2OwogCkBAIC0xNDA4LDggKzE3NTUsMTIgQEAKIAkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCisJczNjbWNpX2RlYnVnZnNfYXR0YWNoKGhvc3QpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGlzYXRpb24gZG9uZS5cbiIpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyAtIHVzaW5nICVzLCAlcyBTRElPIElSUVxuIiwgbW1jX2hvc3RuYW1lKG1tYyksCisJCSBzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkgPyAiZG1hIiA6ICJwaW8iLAorCQkgbW1jLT5jYXBzICYgTU1DX0NBUF9TRElPX0lSUSA/ICJodyIgOiAic3ciKTsKIAogCXJldHVybiAwOwogCkBAIC0xNDIyLDYgKzE3NzMsMTggQEAKICBjbGtfZnJlZToKIAljbGtfcHV0KGhvc3QtPmNsayk7CiAKKyBwcm9iZV9mcmVlX2RtYToKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQorCQlzM2MyNDEwX2RtYV9mcmVlKGhvc3QtPmRtYSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworIHByb2JlX2ZyZWVfZ3Bpb193cDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub193cHJvdGVjdCkKKwkJZ3Bpb19mcmVlKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KTsKKworIHByb2JlX2ZyZWVfZ3Bpb19jZDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpCisJCWdwaW9fZnJlZShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCiAgcHJvYmVfZnJlZV9pcnFfY2Q6CiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwpAQCAtMTQzMywxMCArMTc5NiwxNSBAQAogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAKICBwcm9iZV9mcmVlX21lbV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CisKKyBwcm9iZV9mcmVlX2dwaW86CisJZm9yIChpID0gUzNDMjQxMF9HUEUoNSk7IGkgPD0gUzNDMjQxMF9HUEUoMTApOyBpKyspCisJCWdwaW9fZnJlZShpKTsKIAogIHByb2JlX2ZyZWVfaG9zdDoKIAltbWNfZnJlZV9ob3N0KG1tYyk7CisKICBwcm9iZV9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0NDksNiArMTgxNyw3IEBACiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwogCisJczNjbWNpX2RlYnVnZnNfcmVtb3ZlKGhvc3QpOwogCXMzY21jaV9jcHVmcmVxX2RlcmVnaXN0ZXIoaG9zdCk7CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKQEAgLTE0NTgsMTA0ICsxODI3LDEwMiBAQAogewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYyAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QJKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGQgPSBob3N0LT5wZGF0YTsKKwlpbnQgaTsKIAogCXMzY21jaV9zaHV0ZG93bihwZGV2KTsKIAogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAogCXRhc2tsZXRfZGlzYWJsZSgmaG9zdC0+cGlvX3Rhc2tsZXQpOwotCXMzYzI0MTBfZG1hX2ZyZWUoUzNDTUNJX0RNQSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCisJCXMzYzI0MTBfZG1hX2ZyZWUoaG9zdC0+ZG1hLCAmczNjbWNpX2RtYV9jbGllbnQpOwogCiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAorCWlmICghcGQtPm5vX3dwcm90ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fd3Byb3RlY3QpOworCisJaWYgKCFwZC0+bm9fZGV0ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fZGV0ZWN0KTsKKworCWZvciAoaSA9IFMzQzI0MTBfR1BFKDUpOyBpIDw9IFMzQzI0MTBfR1BFKDEwKTsgaSsrKQorCQlncGlvX2ZyZWUoaSk7CisKKwogCWlvdW5tYXAoaG9zdC0+YmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CiAKIAltbWNfZnJlZV9ob3N0KG1tYyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV8yNDEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gczNjbWNpX3Byb2JlKGRldiwgMCk7Ci19CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzM2NtY2lfZHJpdmVyX2lkc1tdID0geworCXsKKwkJLm5hbWUJPSAiczNjMjQxMC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAwLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQxMi1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sCisJeyB9Cit9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQorTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgczNjbWNpX2RyaXZlcl9pZHMpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQ0MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzY21jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHBtX21lc3NhZ2UgZXZlbnQgPSB7IFBNX0VWRU5UX1NVU1BFTkQgfTsKIAotCXJldHVybiAgbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChtbWMsIGV2ZW50KTsKIH0KIAotc3RhdGljIGludCBzM2NtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwogCiAJcmV0dXJuIG1tY19yZXN1bWVfaG9zdChtbWMpOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgczNjbWNpX3BtID0geworCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAorfTsKKworI2RlZmluZSBzM2NtY2lfcG1fb3BzICZzM2NtY2lfcG0KICNlbHNlIC8qIENPTkZJR19QTSAqLwotI2RlZmluZSBzM2NtY2lfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzY21jaV9yZXN1bWUgTlVMTAorI2RlZmluZSBzM2NtY2lfcG1fb3BzIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQxMF9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInMzYzI0MTAtc2RpIiwKLQkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV8yNDEwX3Byb2JlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJzM2Mtc2RpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IHMzY21jaV9wbV9vcHMsCisJfSwKKwkuaWRfdGFibGUJPSBzM2NtY2lfZHJpdmVyX2lkcywKKwkucHJvYmUJCT0gczNjbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCiAJLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAotCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0MTJfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJzM2MyNDEyLXNkaSIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfMjQxMl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDQwX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpXzI0NDBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCi19OwotCi0KIHN0YXRpYyBpbnQgX19pbml0IHMzY21jaV9pbml0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0MTJfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDQwX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2NtY2lfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMl9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQ0MF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoczNjbWNpX2luaXQpOwpAQCAtMTU2NCw2ICsxOTMxLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MgTU1DL1NEIENhcmQgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEtsZWZmZWwgPHRrQG1haW50ZWNoLmRlPiwgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEyLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDQwLXNkaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKaW5kZXggY2ExYmEzZC4uYzc2YjUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCkBAIC04LDkgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyogRklYTUU6IERNQSBSZXNvdXJjZSBtYW5hZ2VtZW50ID8hICovCi0jZGVmaW5lIFMzQ01DSV9ETUEgMAotCiBlbnVtIHMzY21jaV93YWl0Zm9yIHsKIAlDT01QTEVUSU9OX05PTkUsCiAJQ09NUExFVElPTl9GSU5BTElaRSwKQEAgLTQyLDYgKzM5LDExIEBACiAJaW50CQkJZG9kbWE7CiAJaW50CQkJZG1hdG9nbzsKIAorCWJvb2wJCQlpcnFfZGlzYWJsZWQ7CisJYm9vbAkJCWlycV9lbmFibGVkOworCWJvb2wJCQlpcnFfc3RhdGU7CisJaW50CQkJc2Rpb19pcnFlbjsKKwogCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOwogCWludAkJCWNtZF9pc19zdG9wOwogCkBAIC02OCw2ICs3MCwxMiBAQAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfc3RhdGU7CisJc3RydWN0IGRlbnRyeQkJKmRlYnVnX3JlZ3M7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCXN0cnVjdCBub3RpZmllcl9ibG9jawlmcmVxX3RyYW5zaXRpb247CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDM3OWMzMTYuLjRjMTkyNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKaW5kZXggYzJiYWYzMy4uMGExMTcyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDg0MWUwODUuLjE0YmUwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTQ4Niw2ICs0ODYsNyBAQAogCiBjb25maWcgTVREX0dQSU9fQUREUgogCXRyaXN0YXRlICJHUElPLWFzc2lzdGVkIEZsYXNoIENoaXAgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTyB8fCBHUElPTElCCiAJZGVwZW5kcyBvbiBNVERfQ09NUExFWF9NQVBQSU5HUwogCXNlbGVjdCBNVERfUEFSVElUSU9OUwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDFkNWNmODYuLmFlMmY2ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTgsNCArNTgsNiBAQAogb2JqLSQoQ09ORklHX01URF9PTUFQX05PUikJKz0gb21hcF9ub3Iubwogb2JqLSQoQ09ORklHX01URF9JTlRFTF9WUl9OT1IpCSs9IGludGVsX3ZyX25vci5vCiBvYmotJChDT05GSUdfTVREX0JGSU5fQVNZTkMpCSs9IGJmaW4tYXN5bmMtZmxhc2gubworb2JqLSQoQ09ORklHX01URF9SQlRYNDkzOSkJKz0gcmJ0eDQ5MzktZmxhc2gubworb2JqLSQoQ09ORklHX01URF9WTVUpCQkrPSB2bXUtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9HUElPX0FERFIpCSs9IGdwaW8tYWRkci1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYwppbmRleCA0NGVmOWE0Li4xYWQ1Y2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKQEAgLTEzLDcgKzEzLDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTIzLDkgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2RlZmluZSBwcl9kZXZpbml0KGZtdCwgYXJncy4uLikgKHsgc3RhdGljIGNvbnN0IF9fZGV2aW5pdGNvbnN0IGNoYXIgX19mbXRbXSA9IGZtdDsgcHJpbnRrKF9fZm10LCAjIyBhcmdzKTsgfSkKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiZ3Bpby1hZGRyLWZsYXNoIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggZmRiOTdmMy4uZDdhNDc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0yMDksOCArMjA5LDggQEAKIAl9CiAJc3ViZGV2LT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTQTExMDAgZmxhc2g6IENGSSBkZXZpY2UgYXQgMHglMDhseCwgJWRNaUIsICIKLQkJIiVkLWJpdFxuIiwgcGh5cywgc3ViZGV2LT5tdGQtPnNpemUgPj4gMjAsCisJcHJpbnRrKEtFUk5fSU5GTyAiU0ExMTAwIGZsYXNoOiBDRkkgZGV2aWNlIGF0IDB4JTA4bHgsICV1TWlCLCAlZC1iaXRcbiIsCisJCXBoeXMsICh1bnNpZ25lZCkoc3ViZGV2LT5tdGQtPnNpemUgPj4gMjApLAogCQlzdWJkZXYtPm1hcC5iYW5rd2lkdGggKiA4KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKaW5kZXggMGFjYmY0Zi4uOGNhMTdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYworKysgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCkBAIC0zMiwxNCArMzIsNiBAQAogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKIH07CiAKLXN0YXRpYyBpbnQgYmxrdHJhbnNfZGlzY2FyZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKLQlyZXEtPmNtZFswXSA9IFJFUV9MQl9PUF9ESVNDQVJEOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRvX2Jsa3RyYW5zX3JlcXVlc3Qoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyLAogCQkJICAgICAgIHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCiAJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKQEAgLTUyLDEwICs0NCw2IEBACiAKIAlidWYgPSByZXEtPmJ1ZmZlcjsKIAotCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCi0JICAgIHJlcS0+Y21kWzBdID09IFJFUV9MQl9PUF9ESVNDQVJEKQotCQlyZXR1cm4gdHItPmRpc2NhcmQoZGV2LCBibG9jaywgbnNlY3QpOwotCiAJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNjMsNiArNTEsOSBAQAogCSAgICBnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAoYmxrX2Rpc2NhcmRfcnEocmVxKSkKKwkJcmV0dXJuIHRyLT5kaXNjYXJkKGRldiwgYmxvY2ssIG5zZWN0KTsKKwogCXN3aXRjaChycV9kYXRhX2RpcihyZXEpKSB7CiAJY2FzZSBSRUFEOgogCQlmb3IgKDsgbnNlY3QgPiAwOyBuc2VjdC0tLCBibG9jaysrLCBidWYgKz0gdHItPmJsa3NpemUpCkBAIC0zODAsOCArMzcxLDggQEAKIAl0ci0+YmxrY29yZV9wcml2LT5ycS0+cXVldWVkYXRhID0gdHI7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZSh0ci0+YmxrY29yZV9wcml2LT5ycSwgdHItPmJsa3NpemUpOwogCWlmICh0ci0+ZGlzY2FyZCkKLQkJYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHRyLT5ibGtjb3JlX3ByaXYtPnJxLAotCQkJCSAgICAgIGJsa3RyYW5zX2Rpc2NhcmRfcmVxdWVzdCk7CisJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRElTQ0FSRCwKKwkJCQkJdHItPmJsa2NvcmVfcHJpdi0+cnEpOwogCiAJdHItPmJsa3NoaWZ0ID0gZmZzKHRyLT5ibGtzaXplKSAtIDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDIyMTEzODYuLjI5NTdjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtNzYxLDYgKzc2MSw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCkBAIC03NzcsNiArNzc4LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZyBldmVuIHdoZW4gT09CIGlzbid0IHVzZWQuCiAgKi8KQEAgLTgxOCw2ICs4MjAsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJCXVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCkBAIC05MzksNiArOTQyLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycyB3aGljaCBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KQEAgLTk4Myw2ICs5ODcsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KICAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KQEAgLTEwMzEsNiArMTAzNiw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgogICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGUxZjdkMGEuLjE0Y2VjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlICJ1YmkuaCIKIAogLyogTWF4aW11bSBsZW5ndGggb2YgdGhlICdtdGQ9JyBwYXJhbWV0ZXIgKi8KQEAgLTEyNTcsNyArMTI1OCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXN1bHQ7CiAKIAlyZXN1bHQgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmRwLCAwKTsKLQlpZiAoc3RyID09IGVuZHAgfHwgcmVzdWx0IDwgMCkgeworCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPj0gSU5UX01BWCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVCSSBlcnJvcjogaW5jb3JyZWN0IGJ5dGVzIGNvdW50OiBcIiVzXCJcbiIsCiAJCSAgICAgICBzdHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGU3MTYxYWQuLjkwYWY2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNzk0LDE2ICs3OTQsMTUgQEAKIAkJICogbnVtYmVyLgogCQkgKi8KIAkJaW1hZ2Vfc2VxID0gYmUzMl90b19jcHUoZWNoLT5pbWFnZV9zZXEpOwotCQlpZiAoIXNpLT5pbWFnZV9zZXFfc2V0KSB7CisJCWlmICghdWJpLT5pbWFnZV9zZXEgJiYgaW1hZ2Vfc2VxKQogCQkJdWJpLT5pbWFnZV9zZXEgPSBpbWFnZV9zZXE7Ci0JCQlzaS0+aW1hZ2Vfc2VxX3NldCA9IDE7Ci0JCX0gZWxzZSBpZiAodWJpLT5pbWFnZV9zZXEgJiYgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CisJCWlmICh1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEgJiYKKwkJICAgIHViaS0+aW1hZ2Vfc2VxICE9IGltYWdlX3NlcSkgewogCQkJdWJpX2VycigiYmFkIGltYWdlIHNlcXVlbmNlIG51bWJlciAlZCBpbiBQRUIgJWQsICIKIAkJCQkiZXhwZWN0ZWQgJWQiLCBpbWFnZV9zZXEsIHBudW0sIHViaS0+aW1hZ2Vfc2VxKTsKIAkJCXViaV9kYmdfZHVtcF9lY19oZHIoZWNoKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0KIAl9CiAKIAkvKiBPSywgd2UndmUgZG9uZSB3aXRoIHRoZSBFQyBoZWFkZXIsIGxldCdzIGxvb2sgYXQgdGhlIFZJRCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmggYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCmluZGV4IGJhYjMxNjkuLmZmMTc5YWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTEwMyw3ICsxMDMsNiBAQAogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCi0gKiBAaW1hZ2Vfc2VxX3NldDogaW5kaWNhdGVzIEB1YmktPmltYWdlX3NlcSBpcyBrbm93bgogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKICAqIFVCSSBzdWItc3lzdGVtcyB0byBidWlsZCBmaW5hbCBVQkkgZGF0YSBzdHJ1Y3R1cmVzLCBmdXJ0aGVyIGVycm9yLXJlY292ZXJ5CkBAIC0xMjcsNyArMTI2LDYgQEAKIAl1aW50NjRfdCBlY19zdW07CiAJaW50IGVjX2NvdW50OwogCWludCBjb3JyX2NvdW50OwotCWludCBpbWFnZV9zZXFfc2V0OwogfTsKIAogc3RydWN0IHViaV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBlMTljYTRiLi5iMmY3MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTk3NSw3ICs5NzUsNyBAQAogCiBjb25maWcgRVRIT0MKIAl0cmlzdGF0ZSAiT3BlbkNvcmVzIDEwLzEwMCBNYnBzIEV0aGVybmV0IE1BQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTQorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTSAmJiBIQVNfRE1BCiAJc2VsZWN0IE1JSQogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCBjZTZmMWFjLi4zZjRiNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC0xMDg4LDcgKzEwODgsMTQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KSkgIT0gMCkgeworCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVyciAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKIAkJCQlEUlZfTkFNRSwgZXJyKTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTEyMDksMTIgKzEyMTYsNiBAQAogCQlhdXAtPnR4X2RiX2ludXNlW2ldID0gcERCOwogCX0KIAotCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwotCiAJLyoKIAkgKiBUaGUgYm9vdCBjb2RlIHVzZXMgdGhlIGV0aGVybmV0IGNvbnRyb2xsZXIsIHNvIHJlc2V0IGl0IHRvIHN0YXJ0CiAJICogZnJlc2guICBhdTEwMDBfaW5pdCgpIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIGlzIGluIHJlc2V0IHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwppbmRleCBmZjQ0OWRlLi44NzYyYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwppbmRleCAxNWMwMTk1Li5hMjRiZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYworKysgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwpAQCAtNzY4LDEwICs3NjgsMjQgQEAKIAogCWUxMDBfc2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIGRhdGEpOwogCi0JLyogUmVuZWdvdGlhdGUgd2l0aCBsaW5rIHBhcnRuZXIgKi8KKwlkYXRhID0gZTEwMF9nZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNQ1IpOwogCWlmIChhdXRvbmVnX25vcm1hbCkgewotCSAgZGF0YSA9IGUxMDBfZ2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTUNSKTsKLQlkYXRhIHw9IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVDsKKwkJLyogUmVuZWdvdGlhdGUgd2l0aCBsaW5rIHBhcnRuZXIgKi8KKwkJZGF0YSB8PSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CisJfSBlbHNlIHsKKwkJLyogRG9uJ3QgbmVnb3RpYXRlIHNwZWVkIG9yIGR1cGxleCAqLworCQlkYXRhICY9IH4oQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKworCQkvKiBTZXQgc3BlZWQgYW5kIGR1cGxleCBzdGF0aWMgKi8KKwkJaWYgKGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDEwKQorCQkJZGF0YSAmPSB+Qk1DUl9TUEVFRDEwMDsKKwkJZWxzZQorCQkJZGF0YSB8PSBCTUNSX1NQRUVEMTAwOworCisJCWlmIChjdXJyZW50X2R1cGxleCAhPSBmdWxsKQorCQkJZGF0YSAmPSB+Qk1DUl9GVUxMRFBMWDsKKwkJZWxzZQorCQkJZGF0YSB8PSBCTUNSX0ZVTExEUExYOwogCX0KIAllMTAwX3NldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUiwgZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IGRiNjM4MDM3Li5lMzQ3ODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMTY0LDE2ICsxNjQsMTQgQEAKICMgZGVmaW5lIEVNQUNfTUJQX01DQVNUQ0hBTihjaCkJCSgoY2gpICYgMHg3KQogCiAvKiBFTUFDIG1hY19jb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBUWVBFCQkoMHgyMDApCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBBQ0VFTgkoMHg0MCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX01JSUVOCQkoMHgyMCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTgkoMHg4MCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTl9TSElGVCAoNykKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0ZVTExEVVBMRVhFTgkoMHgxKQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfVFhQVFlQRQkJQklUKDkpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBBQ0VFTglCSVQoNikKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dNSUlFTgkJQklUKDUpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9HSUdBQklURU4JQklUKDcpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9GVUxMRFVQTEVYRU4JQklUKDApCiAjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9STUlJU1BFRURfTUFTSwlCSVQoMTUpCiAKIC8qIEdJR0FCSVQgTU9ERSByZWxhdGVkIGJpdHMgKi8KLSNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HTUlJRU4JQklUKDUpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHCUJJVCg3KQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJR0ZPUkNFCUJJVCgxNykKIApAQCAtMTkyLDEwICsxOTAsMTAgQEAKICNkZWZpbmUgRU1BQ19SWF9CVUZGRVJfT0ZGU0VUX01BU0sJKDB4RkZGRikKIAogLyogTUFDX0lOX1ZFQ1RPUiAoMHgxODApIHJlZ2lzdGVyIGJpdCBmaWVsZHMgKi8KLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAkgICAgICAoMHgyMDAwMCkKLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9TVEFUUEVORF9JTlQJICAgICAgKDB4MTAwMDApCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwkgICAgICAoMHgwMTAwKQotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1RYX0lOVF9WRUMJICAgICAgKDB4MDEpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfSE9TVF9JTlQJQklUKDE3KQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAlCSVQoMTYpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwlCSVQoOCkKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9UWF9JTlRfVkVDCUJJVCgwKQogCiAvKiogTk9URTo6IEZvciBETTY0NnggdGhlIElOX1ZFQ1RPUiBoYXMgY2hhbmdlZCAqLwogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX1JYX0lOVF9WRUMJQklUKEVNQUNfREVGX1JYX0NIKQpAQCAtMjAzLDcgKzIwMSw2IEBACiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfSE9TVF9JTlQJQklUKDI2KQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAlCSVQoMjcpCiAKLQogLyogQ1BQSSBiaXQgcG9zaXRpb25zICovCiAjZGVmaW5lIEVNQUNfQ1BQSV9TT1BfQklUCQlCSVQoMzEpCiAjZGVmaW5lIEVNQUNfQ1BQSV9FT1BfQklUCQlCSVQoMzApCkBAIC03NTAsOCArNzQ3LDcgQEAKIAogCWlmIChwcml2LT5zcGVlZCA9PSBTUEVFRF8xMDAwICYmIChwcml2LT52ZXJzaW9uID09IEVNQUNfVkVSU0lPTl8yKSkgewogCQltYWNfY29udHJvbCA9IGVtYWNfcmVhZChFTUFDX01BQ0NPTlRST0wpOwotCQltYWNfY29udHJvbCB8PSAoRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HTUlJRU4gfAotCQkJCUVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHIHwKKwkJbWFjX2NvbnRyb2wgfD0gKEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHIHwKIAkJCQlFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJR0ZPUkNFKTsKIAl9IGVsc2UgewogCQkvKiBDbGVhciB0aGUgR0lHIGJpdCBhbmQgR0lHRk9SQ0UgYml0ICovCkBAIC0yMTA4LDcgKzIxMDQsNyBAQAogCiAJLyogRW5hYmxlIE1JSSAqLwogCXZhbCA9IGVtYWNfcmVhZChFTUFDX01BQ0NPTlRST0wpOwotCXZhbCB8PSAoRU1BQ19NQUNDT05UUk9MX01JSUVOKTsKKwl2YWwgfD0gKEVNQUNfTUFDQ09OVFJPTF9HTUlJRU4pOwogCWVtYWNfd3JpdGUoRU1BQ19NQUNDT05UUk9MLCB2YWwpOwogCiAJLyogRW5hYmxlIE5BUEkgYW5kIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDk2ODZjMWYuLjdhM2JkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMjM3LDYgKzIzNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZDE5YjA4NC4uM2MyOWEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTUxLDYgKzE1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCAxODlkZmEyLi4zZTE4N2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtMTQxLDYgKzE0MSw4IEBACiAjZGVmaW5lIEhWX1ROQ1JTX1VQUEVSCQlQSFlfUkVHKDc3OCwgMjkpIC8qIFRyYW5zbWl0IHdpdGggbm8gQ1JTICovCiAjZGVmaW5lIEhWX1ROQ1JTX0xPV0VSCQlQSFlfUkVHKDc3OCwgMzApCiAKKyNkZWZpbmUgRTEwMDBfRkNSVFZfUENIICAgICAweDA1RjQwIC8qIFBDSCBGbG93IENvbnRyb2wgUmVmcmVzaCBUaW1lciBWYWx1ZSAqLworCiAvKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIFN0YXR1cyAqLwogI2RlZmluZSBCTV9DU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMTcKICNkZWZpbmUgQk1fQ1NfU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgIDB4MDQwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMWJmNGQyYS4uZTgyNjM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0zMjcsMTAgKzMyNywxOCBAQAogCiAJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBody0+ZmMucmVxdWVzdGVkX21vZGU7CiAKLQkJcmV0dmFsID0gKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgPwotCQkJICBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3KSA6IGUxMDAwZV9mb3JjZV9tYWNfZmMoaHcpKTsKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CisJCQlyZXR2YWwgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3KTsKKwkJCS8qIGltcGxpY2l0IGdvdG8gb3V0ICovCisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBlMTAwMGVfZm9yY2VfbWFjX2ZjKGh3KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBvdXQ7CisJCQllMTAwMGVfc2V0X2ZjX3dhdGVybWFya3MoaHcpOworCQl9CiAJfQogCitvdXQ6CiAJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCA1MWRkYjA0Li5lZmYzZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTExMTgsNyArMTExOCw4IEBACiAJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CiAJfQogCS8qIFJlc3RhcnQgYXV0by1uZWcgdG8gYWN0aXZhdGUgdGhlIGJpdHMgKi8KLQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CisJaWYgKCFlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpCisJCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfUkVTVEFSVF9BTjsKIAlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQoaHcsIEhWX09FTV9CSVRTLCBvZW1fcmVnKTsKIAogb3V0OgpAQCAtMzU1OCw2ICszNTU5LDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0ZMQVNICiAJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUworCQkJCSAgfCBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSAvKiBlcnJhdGEgKi8KIAkJCQkgIHwgRkxBR19BUE1FX0lOX1dVQywKIAkucGJhCQkJPSAyNiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSA0MDk2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDA2ODdjNmEuLmZhZDhmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTI3NjksMjUgKzI3NjksMzggQEAKIAkvKgogCSAqIGZsb3cgY29udHJvbCBzZXR0aW5ncwogCSAqCi0JICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IHR3byBmdWxsIGZyYW1lCisJICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IG9uZSBmdWxsIGZyYW1lCiAJICogKG9yIHRoZSBzaXplIHVzZWQgZm9yIGVhcmx5IHJlY2VpdmUpIGFib3ZlIGl0IGluIHRoZSBSeCBGSUZPLgogCSAqIFNldCBpdCB0byB0aGUgbG93ZXIgb2Y6CiAJICogLSA5MCUgb2YgdGhlIFJ4IEZJRk8gc2l6ZSwgYW5kCiAJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgdGhlIGVhcmx5IHJlY2VpdmUgc2l6ZSAoZm9yIHBhcnRzCiAJICogICB3aXRoIEVSVCBzdXBwb3J0IGFzc3VtaW5nIEVSVCBzZXQgdG8gRTEwMDBfRVJUXzIwNDgpLCBvcgotCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHR3byBmdWxsIGZyYW1lcworCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lCiAJICovCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgJiYKLQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtIChFMTAwMF9FUlRfMjA0OCA8PCAzKSkpOwotCWVsc2UKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtICgyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKSk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyoKKwkJICogV29ya2Fyb3VuZCBQQ0ggTE9NIGFkYXB0ZXIgaGFuZ3Mgd2l0aCBjZXJ0YWluIG5ldHdvcmsKKwkJICogbG9hZHMuICBJZiBoYW5ncyBwZXJzaXN0LCB0cnkgZGlzYWJsaW5nIFR4IGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkJZmMtPmhpZ2hfd2F0ZXIgPSAweDM1MDA7CisJCQlmYy0+bG93X3dhdGVyICA9IDB4MTUwMDsKKwkJfSBlbHNlIHsKKwkJCWZjLT5oaWdoX3dhdGVyID0gMHg1MDAwOworCQkJZmMtPmxvd193YXRlciAgPSAweDMwMDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKSAmJgorCQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gKEUxMDAwX0VSVF8yMDQ4IDw8IDMpKSk7CisJCWVsc2UKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQlmYy0+bG93X3dhdGVyID0gKGZjLT5oaWdoX3dhdGVyIC0gKDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwotCWZjLT5sb3dfd2F0ZXIgJj0gRTEwMDBfRkNSVExfUlRMOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiBFMTAwMF9GQ1JUSF9SVEg7IC8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSA4OworCX0KIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfRElTQUJMRV9GQ19QQVVTRV9USU1FKQogCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKQEAgLTI4MTMsNiArMjgyNiwxMCBAQAogCWlmIChtYWMtPm9wcy5pbml0X2h3KGh3KSkKIAkJZV9lcnIoIkhhcmR3YXJlIEVycm9yXG4iKTsKIAorCS8qIGFkZGl0aW9uYWwgcGFydCBvZiB0aGUgZmxvdy1jb250cm9sIHdvcmthcm91bmQgYWJvdmUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZXczMihGQ1JUVl9QQ0gsIDB4MTAwMCk7CisKIAllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAKIAkvKiBFbmFibGUgaC93IHRvIHJlY29nbml6ZSBhbiA4MDIuMVEgVkxBTiBFdGhlcm5ldCBwYWNrZXQgKi8KQEAgLTM2MTAsNyArMzYyNyw3IEBACiAJCQljYXNlIFNQRUVEXzEwMDoKIAkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JCQkJLyogbWF5YmUgYWRkIHNvbWUgdGltZW91dCBmYWN0b3IgPyAqLworCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTA7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQyODgsOCArNDMwNSwxMCBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKLQkvKiBlMTAwMGVfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCisJLyogZTEwMDBlX2Rvd24gLT4gZTEwMDBlX3Jlc2V0IGRlcGVuZGVudCBvbiBtYXhfZnJhbWVfc2l6ZSAmIG10dSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOworCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CiAKQEAgLTQzMTksOSArNDMzOCw2IEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFVEhfRlJBTUVfTEVOICsgVkxBTl9ITEVOCiAJCQkJCSArIEVUSF9GQ1NfTEVOOwogCi0JZV9pbmZvKCJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwotCW5ldGRldi0+bXR1ID0gbmV3X210dTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwZV91cChhZGFwdGVyKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKaW5kZXggMDMxNzViMy4uODVmOTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwpAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBJODI1NzdfQ0ZHX0FTU0VSVF9DUlNfT05fVFggICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVCAgICAgICAoMyA8PCAxMCkgLyogYXV0byBkb3duc2hpZnQgMTAwLzEwICovCiAjZGVmaW5lIEk4MjU3N19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBJODI1NzdfQ1RSTF9ET1dOU0hJRlRfTUFTSyAgICAgICAgKDcgPDwgMTApCiAKIC8qIDgyNTc3IHNwZWNpZmljIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTgyNTc3X1BIWV9DVFJMXzIgICAgICAgICAgICAxOApAQCAtNjYwLDE1ICs2NTksNiBAQAogCXBoeV9kYXRhIHw9IEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVDsKIAogCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJODI1NzdfQ0ZHX1JFRywgcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQotCS8qIFNldCBudW1iZXIgb2YgbGluayBhdHRlbXB0cyBiZWZvcmUgZG93bnNoaWZ0ICovCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSTgyNTc3X0NUUkxfUkVHLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQlwaHlfZGF0YSAmPSB+STgyNTc3X0NUUkxfRE9XTlNISUZUX01BU0s7Ci0JcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIEk4MjU3N19DVFJMX1JFRywgcGh5X2RhdGEpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0yNjU4LDE5ICsyNjQ4LDE4IEBACiAJCXBhZ2UgPSAwOwogCiAJaWYgKHJlZyA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKLQkJaWYgKChody0+cGh5LnR5cGUgIT0gZTEwMDBfcGh5XzgyNTc4KSB8fAotCQkgICAgKChyZWcgIT0gSTgyNTc4X0FERFJfUkVHKSAmJgotCQkgICAgIChyZWcgIT0gSTgyNTc4X0FERFJfUkVHICsgMSkpKSB7Ci0JCQl1MzIgcGh5X2FkZHIgPSBody0+cGh5LmFkZHI7CisJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKIAotCQkJaHctPnBoeS5hZGRyID0gMTsKKwkJaHctPnBoeS5hZGRyID0gMTsKIAotCQkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCi0JCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKLQkJfQorCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCSAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKKwkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CisKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjY3OCw3ICsyNjY3LDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKQEAgLTI3ODQsMTkgKzI3NzMsMTggQEAKIAl9CiAKIAlpZiAocmVnID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewotCQlpZiAoKGh3LT5waHkudHlwZSAhPSBlMTAwMF9waHlfODI1NzgpIHx8Ci0JCSAgICAoKHJlZyAhPSBJODI1NzhfQUREUl9SRUcpICYmCi0JCSAgICAgKHJlZyAhPSBJODI1NzhfQUREUl9SRUcgKyAxKSkpIHsKLQkJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKKwkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOwogCi0JCQlody0+cGh5LmFkZHIgPSAxOworCQlody0+cGh5LmFkZHIgPSAxOwogCi0JCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KLQkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOwotCQl9CisJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLworCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJCQkJICAgICAocGFnZSA8PCBJR1BfUEFHRV9TSElGVCkpOworCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKKworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjgwNSw3ICsyNzkzLDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggZDRkOWEzZS4uZjViOTZjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xMTEsNiArMTExLDcgQEAKICAqIFNvcnJ5LCBJIGhhZCB0byByZXdyaXRlIG1vc3Qgb2YgdGhpcyBmb3IgMi41LnggLURhdmVNCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCA1OTA0NzNhLi5mN2Q5YWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9ldGhvYy5oPgogCiBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplID0gMHg4MDAwOyAvKiAzMiBLQnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V3cmszLmMgYi9kcml2ZXJzL25ldC9ld3JrMy5jCmluZGV4IGIyYTVlYzguLmRkNGJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V3cmszLmMKKysrIGIvZHJpdmVycy9uZXQvZXdyazMuYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDczZmU5NzcuLjMxMTY2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCAxZDUwNjRhLi5mNzUxOWE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICg1KkhaKQogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCmluZGV4IDdiY2FmN2MuLmUzNDRjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKaW5kZXggYWE0NDg4ZS4uZWQ2MGZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCkBAIC03MSw2ICs3MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCmluZGV4IDg4YzU5MzUuLjE2ODZmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYwpAQCAtNjEsNiArNjEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKaW5kZXggMDAxM2M0MC4uOTFjNTc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IGE5YTFhOTkuLmRkODY2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtOTgsNiArOTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBhYWIzZDk3Li5iMjQzZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpZ2IuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IDJmYzMwYjQuLmNiOTBkNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCBmNGQxM2ZjNS4uYjU0ZDNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC0xMTgsNyArMTE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCA1ZjlkNzMzLi44ZDcxM2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTgyLDcgKzgyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IGIzZDMwYmMuLmMwZTBiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwppbmRleCAxNDQ1ZTU4Li44NGRiMTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybW9kLmg+CkBAIC0xNjMsNiArMTY0LDIyIEBACiB9CiAKIC8qCisgKiBTZXQgdGhlIElyREEgY29tbXVuaWNhdGlvbnMgbW9kZS4KKyAqLworc3RhdGljIHZvaWQgcHhhX2lyZGFfc2V0X21vZGUoc3RydWN0IHB4YV9pcmRhICpzaSwgaW50IG1vZGUpCit7CisJaWYgKHNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZSkKKwkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIG1vZGUpOworCWVsc2UgeworCQlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sCisJCQkJCSEobW9kZSAmIElSX09GRikgXgorCQkJCQkhc2ktPnBkYXRhLT5ncGlvX3B3ZG93bl9pbnZlcnRlZCk7CisJCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIG1vZGUpOworCX0KK30KKworLyoKICAqIFNldCB0aGUgSXJEQSBjb21tdW5pY2F0aW9ucyBzcGVlZC4KICAqLwogc3RhdGljIGludCBweGFfaXJkYV9zZXRfc3BlZWQoc3RydWN0IHB4YV9pcmRhICpzaSwgaW50IHNwZWVkKQpAQCAtMTg4LDcgKzIwNSw3IEBACiAJCQlweGFfaXJkYV9kaXNhYmxlX2NsayhzaSk7CiAKIAkJCS8qIHNldCBib2FyZCB0cmFuc2NlaXZlciB0byBTSVIgbW9kZSAqLwotCQkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX1NJUk1PREUpOworCQkJcHhhX2lyZGFfc2V0X21vZGUoc2ksIElSX1NJUk1PREUpOwogCiAJCQkvKiBlbmFibGUgdGhlIFNUVUFSVCBjbG9jayAqLwogCQkJcHhhX2lyZGFfZW5hYmxlX3NpcmNsayhzaSk7CkBAIC0yMjIsNyArMjM5LDcgQEAKIAkJSUNDUjAgPSAwOwogCiAJCS8qIHNldCBib2FyZCB0cmFuc2NlaXZlciB0byBGSVIgbW9kZSAqLwotCQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgSVJfRklSTU9ERSk7CisJCXB4YV9pcmRhX3NldF9tb2RlKHNpLCBJUl9GSVJNT0RFKTsKIAogCQkvKiBlbmFibGUgdGhlIEZJQ1AgY2xvY2sgKi8KIAkJcHhhX2lyZGFfZW5hYmxlX2ZpcmNsayhzaSk7CkBAIC02NDEsNyArNjU4LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBwb3dlciBvZmYgYm9hcmQgdHJhbnNjZWl2ZXIgKi8KLQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgSVJfT0ZGKTsKKwlweGFfaXJkYV9zZXRfbW9kZShzaSwgSVJfT0ZGKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJweGFfaXI6IGlyZGEgc2h1dGRvd25cbiIpOwogfQpAQCAtODQ5LDEwICs4NjYsMjYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9tZW1fNTsKIAotCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApCisJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sICJJckRBIHN3aXRjaCIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfc3RhcnR1cDsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sCisJCQkJCSFzaS0+cGRhdGEtPmdwaW9fcHdkb3duX2ludmVydGVkKTsKKwkJaWYgKGVycikgeworCQkJZ3Bpb19mcmVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pOworCQkJZ290byBlcnJfc3RhcnR1cDsKKwkJfQorCX0KKworCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApIHsKIAkJZXJyID0gc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3N0YXJ0dXA7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9zdGFydHVwOworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pICYmIHNpLT5wZGF0YS0+c3RhcnR1cCkKKwkJZGV2X3dhcm4oc2ktPmRldiwgImdwaW9fcHdkb3duIGFuZCBzdGFydHVwKCkgYm90aCBkZWZpbmVkIVxuIik7CiAKIAlkZXYtPm5ldGRldl9vcHMgPSAmcHhhX2lyZGFfbmV0ZGV2X29wczsKIApAQCAtOTAzLDYgKzkzNiw4IEBACiAJaWYgKGRldikgewogCQlzdHJ1Y3QgcHhhX2lyZGEgKnNpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpCisJCQlncGlvX2ZyZWUoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bik7CiAJCWlmIChzaS0+cGRhdGEtPnNodXRkb3duKQogCQkJc2ktPnBkYXRhLT5zaHV0ZG93bihzaS0+ZGV2KTsKIAkJa2ZyZWUoc2ktPnR4X2J1ZmYuaGVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYwppbmRleCBmY2YyODdiLi45OWUxZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCBhNTAzNmY3Li5hNDU2NTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC0yNDAsMTEgKzI0MCwxMSBAQAogc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3R4X2lzX3BhdXNlZChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCiB7Ci0JaW50IHRjOwogCXUzMiB0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkY7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlpbnQgdGM7CiAJCWludCByZWdfaWR4ID0gdHhfcmluZy0+cmVnX2lkeDsKIAkJaW50IGRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwppbmRleCAwYmUxNGQ3Li5jMTQ2MzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCkBAIC01NjgsNiArNTY4LDE2IEBACiAJCWlvd3JpdGUxNigqd3B0cisrLCBrcy0+aHdfYWRkcik7CiB9CiAKK3N0YXRpYyB2b2lkIGtzX2Rpc2FibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQoreworCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwgMHgwMDAwKTsKK30gIC8qIGtzX2Rpc2FibGVfaW50ICovCisKK3N0YXRpYyB2b2lkIGtzX2VuYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCit7CisJa3Nfd3JyZWcxNihrcywgS1NfSUVSLCBrcy0+cmNfaWVyKTsKK30gIC8qIGtzX2VuYWJsZV9pbnQgKi8KKwogLyoqCiAgKiBrc190eF9maWZvX3NwYWNlIC0gcmV0dXJuIHRoZSBhdmFpbGFibGUgaGFyZHdhcmUgYnVmZmVyIHNpemUuCiAgKiBAa3M6IFRoZSBjaGlwIGluZm9ybWF0aW9uCkBAIC02ODEsNiArNjkxLDQ3IEBACiB9CiAKIAordm9pZCBrc19lbmFibGVfcW11KHN0cnVjdCBrc19uZXQgKmtzKQoreworCXUxNiB3OworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOworCS8qIEVuYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KKwlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3IHwgVFhDUl9UWEUpOworCisJLyoKKwkgKiBSWCBGcmFtZSBDb3VudCBUaHJlc2hvbGQgRW5hYmxlIGFuZCBBdXRvLURlcXVldWUgUlhRIEZyYW1lCisJICogRW5hYmxlCisJICovCisKKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhRQ1IpOworCWtzX3dycmVnMTYoa3MsIEtTX1JYUUNSLCB3IHwgUlhRQ1JfUlhGQ1RFKTsKKworCS8qIEVuYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOworCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3IHwgUlhDUjFfUlhFKTsKKwlrcy0+ZW5hYmxlZCA9IHRydWU7Cit9ICAvKiBrc19lbmFibGVfcW11ICovCisKK3N0YXRpYyB2b2lkIGtzX2Rpc2FibGVfcW11KHN0cnVjdCBrc19uZXQgKmtzKQoreworCXUxNgl3OworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOworCisJLyogRGlzYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KKwl3ICAmPSB+VFhDUl9UWEU7CisJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7CisKKwkvKiBEaXNhYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7CisJdyAmPSB+UlhDUjFfUlhFIDsKKwlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyk7CisKKwlrcy0+ZW5hYmxlZCA9IGZhbHNlOworCit9ICAvKiBrc19kaXNhYmxlX3FtdSAqLworCiAvKioKICAqIGtzX3JlYWRfcW11IC0gcmVhZCAxIHBrdCBkYXRhIGZyb20gdGhlIFFNVS4KICAqIEBrczogVGhlIGNoaXAgaW5mb3JtYXRpb24KQEAgLTc1Miw3ICs4MDMsNyBAQAogCQkJKGZyYW1lX2hkci0+bGVuIDwgUlhfQlVGX1NJWkUpICYmIGZyYW1lX2hkci0+bGVuKSkgewogCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJCS8qIHJlYWQgZGF0YSBibG9jayBpbmNsdWRpbmcgQ1JDIDQgYnl0ZXMgKi8KLQkJCWtzX3JlYWRfcW11KGtzLCAodTE2ICopc2tiLT5kYXRhLCBmcmFtZV9oZHItPmxlbiArIDQpOworCQkJa3NfcmVhZF9xbXUoa3MsICh1MTYgKilza2ItPmRhdGEsIGZyYW1lX2hkci0+bGVuKTsKIAkJCXNrYl9wdXQoc2tiLCBmcmFtZV9oZHItPmxlbik7CiAJCQlza2ItPmRldiA9IG5ldGRldjsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CkBAIC04NjEsNyArOTEyLDcgQEAKIAkJa3NfZGJnKGtzLCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOwogCiAJLyogcmVzZXQgdGhlIEhXICovCi0JZXJyID0gcmVxdWVzdF9pcnEoa3MtPmlycSwga3NfaXJxLCBLU19JTlRfRkxBR1MsIERSVl9OQU1FLCBrcyk7CisJZXJyID0gcmVxdWVzdF9pcnEoa3MtPmlycSwga3NfaXJxLCBLU19JTlRfRkxBR1MsIERSVl9OQU1FLCBuZXRkZXYpOwogCiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWQ6ICVkXG4iLApAQCAtODY5LDYgKzkyMCwxNSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIHdha2UgdXAgcG93ZXJtb2RlIHRvIG5vcm1hbCBtb2RlICovCisJa3Nfc2V0X3Bvd2VybW9kZShrcywgUE1FQ1JfUE1fTk9STUFMKTsKKwltZGVsYXkoMSk7CS8qIHdhaXQgZm9yIG5vcm1hbCBtb2RlIHRvIHRha2UgZWZmZWN0ICovCisKKwlrc193cnJlZzE2KGtzLCBLU19JU1IsIDB4ZmZmZik7CisJa3NfZW5hYmxlX2ludChrcyk7CisJa3NfZW5hYmxlX3FtdShrcyk7CisJbmV0aWZfc3RhcnRfcXVldWUoa3MtPm5ldGRldik7CisKIAlpZiAobmV0aWZfbXNnX2lmdXAoa3MpKQogCQlrc19kYmcoa3MsICJuZXR3b3JrIGRldmljZSAlcyB1cFxuIiwgbmV0ZGV2LT5uYW1lKTsKIApAQCAtODkyLDE5ICs5NTIsMTQgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAotCWtmcmVlKGtzLT5mcmFtZV9oZWFkX2luZm8pOwotCiAJbXV0ZXhfbG9jaygma3MtPmxvY2spOwogCiAJLyogdHVybiBvZmYgdGhlIElSUXMgYW5kIGFjayBhbnkgb3V0c3RhbmRpbmcgKi8KIAlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7CiAJa3Nfd3JyZWcxNihrcywgS1NfSVNSLCAweGZmZmYpOwogCi0JLyogc2h1dGRvd24gUlggcHJvY2VzcyAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCAweDAwMDApOwotCi0JLyogc2h1dGRvd24gVFggcHJvY2VzcyAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIDB4MDAwMCk7CisJLyogc2h1dGRvd24gUlgvVFggUU1VICovCisJa3NfZGlzYWJsZV9xbXUoa3MpOwogCiAJLyogc2V0IHBvd2VybW9kZSB0byBzb2Z0IHBvd2VyIGRvd24gdG8gc2F2ZSBwb3dlciAqLwogCWtzX3NldF9wb3dlcm1vZGUoa3MsIFBNRUNSX1BNX1NPRlRET1dOKTsKQEAgLTkyOSwxNyArOTg0LDggQEAKICAqLwogc3RhdGljIHZvaWQga3Nfd3JpdGVfcW11KHN0cnVjdCBrc19uZXQgKmtzLCB1OCAqcGRhdGEsIHUxNiBsZW4pCiB7Ci0JdW5zaWduZWQgZmlkID0ga3MtPmZpZDsKLQotCWZpZCA9IGtzLT5maWQ7Ci0Ja3MtPmZpZCA9IChrcy0+ZmlkICsgMSkgJiBUWEZSX1RYRklEX01BU0s7Ci0KLQkvKiByZWR1Y2UgdGhlIHR4IGludGVycnVwdCBvY2N1cnJhbmNlcy4gKi8KLQlpZiAoIWZpZCkKLQkJZmlkIHw9IFRYRlJfVFhJQzsgICAgICAgLyogaXJxIG9uIGNvbXBsZXRpb24gKi8KLQogCS8qIHN0YXJ0IGhlYWRlciBhdCB0eGJbMF0gdG8gYWxpZ24gdHh3IGVudHJpZXMgKi8KLQlrcy0+dHhoLnR4d1swXSA9IGNwdV90b19sZTE2KGZpZCk7CisJa3MtPnR4aC50eHdbMF0gPSAwOwogCWtzLT50eGgudHh3WzFdID0gY3B1X3RvX2xlMTYobGVuKTsKIAogCS8qIDEuIHNldCBzdWRvLURNQSBtb2RlICovCkBAIC05NTcsMTYgKzEwMDMsNiBAQAogCQk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzX2Rpc2FibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQotewotCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwgMHgwMDAwKTsKLX0gIC8qIGtzX2Rpc2FibGVfaW50ICovCi0KLXN0YXRpYyB2b2lkIGtzX2VuYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0Ja3Nfd3JyZWcxNihrcywgS1NfSUVSLCBrcy0+cmNfaWVyKTsKLX0gIC8qIGtzX2VuYWJsZV9pbnQgKi8KLQogLyoqCiAgKiBrc19zdGFydF94bWl0IC0gdHJhbnNtaXQgcGFja2V0CiAgKiBAc2tiCQk6IFRoZSBidWZmZXIgdG8gdHJhbnNtaXQKQEAgLTE0MTAsMjUgKzE0NDYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGtzX2Rpc2FibGUoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0JdTE2CXc7Ci0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7Ci0KLQkvKiBEaXNhYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLwotCXcgICY9IH5UWENSX1RYRTsKLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3KTsKLQotCS8qIERpc2FibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKLQl3ICY9IH5SWENSMV9SWEUgOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3KTsKLQotCWtzLT5lbmFibGVkID0gZmFsc2U7Ci0KLX0gIC8qIGtzX2Rpc2FibGUgKi8KLQogc3RhdGljIHZvaWQga3Nfc2V0dXAoc3RydWN0IGtzX25ldCAqa3MpCiB7CiAJdTE2CXc7CkBAIC0xNDYzLDcgKzE0ODAsNyBAQAogCXcgPSBUWENSX1RYRkNFIHwgVFhDUl9UWFBFIHwgVFhDUl9UWENSQyB8IFRYQ1JfVENHSVA7CiAJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7CiAKLQl3ID0gUlhDUjFfUlhGQ0UgfCBSWENSMV9SWEJFIHwgUlhDUjFfUlhVRTsKKwl3ID0gUlhDUjFfUlhGQ0UgfCBSWENSMV9SWEJFIHwgUlhDUjFfUlhVRSB8IFJYQ1IxX1JYTUUgfCBSWENSMV9SWElQRkNDOwogCiAJaWYgKGtzLT5wcm9taXNjdW91cykgICAgICAgICAvKiBiUHJvbWlzY3VvdXMgKi8KIAkJdyB8PSAoUlhDUjFfUlhBRSB8IFJYQ1IxX1JYSU5WRik7CkBAIC0xNDg2LDI4ICsxNTAzLDYgQEAKIAlrcy0+cmNfaWVyID0gKElSUV9MQ0kgfCBJUlFfVFhJIHwgSVJRX1JYSSk7CiB9ICAvKiBrc19zZXR1cF9pbnQgKi8KIAotdm9pZCBrc19lbmFibGUoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0JdTE2IHc7Ci0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7Ci0JLyogRW5hYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcgfCBUWENSX1RYRSk7Ci0KLQkvKgotCSAqIFJYIEZyYW1lIENvdW50IFRocmVzaG9sZCBFbmFibGUgYW5kIEF1dG8tRGVxdWV1ZSBSWFEgRnJhbWUKLQkgKiBFbmFibGUKLQkgKi8KLQotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWFFDUik7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfUlhRQ1IsIHcgfCBSWFFDUl9SWEZDVEUpOwotCi0JLyogRW5hYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLwotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcgfCBSWENSMV9SWEUpOwotCWtzLT5lbmFibGVkID0gdHJ1ZTsKLX0gIC8qIGtzX2VuYWJsZSAqLwotCiBzdGF0aWMgaW50IGtzX2h3X2luaXQoc3RydWN0IGtzX25ldCAqa3MpCiB7CiAjZGVmaW5lCU1IRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB0eXBlX2ZyYW1lX2hlYWQpICogTUFYX1JFQ1ZfRlJBTUVTKQpAQCAtMTYxMiwxMSArMTYwNyw5IEBACiAKIAlrc19zb2Z0X3Jlc2V0KGtzLCBHUlJfR1NSKTsKIAlrc19od19pbml0KGtzKTsKLQlrc19kaXNhYmxlKGtzKTsKKwlrc19kaXNhYmxlX3FtdShrcyk7CiAJa3Nfc2V0dXAoa3MpOwogCWtzX3NldHVwX2ludChrcyk7Ci0Ja3NfZW5hYmxlX2ludChrcyk7Ci0Ja3NfZW5hYmxlKGtzKTsKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwga3MtPm1hY19hZGRyLCA2KTsKIAogCWRhdGEgPSBrc19yZHJlZzE2KGtzLCBLU19PQkNSKTsKQEAgLTE2NTgsNiArMTY1MSw3IEBACiAJc3RydWN0IGtzX25ldCAqa3MgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCisJa2ZyZWUoa3MtPmZyYW1lX2hlYWRfaW5mbyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpb3VubWFwKGtzLT5od19hZGRyKTsKIAlmcmVlX25ldGRldihuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCmluZGV4IGNlZTE5OWMuLjNjMTY2MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZncuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKQEAgLTMzLDYgKzMzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCiAjaW5jbHVkZSAiZncuaCIKICNpbmNsdWRlICJpY20uaCIKQEAgLTY5OCw2ICs2OTksNyBAQAogI2RlZmluZSBJTklUX0hDQV9JTl9TSVpFCQkgMHgyMDAKICNkZWZpbmUgSU5JVF9IQ0FfVkVSU0lPTl9PRkZTRVQJCSAweDAwMAogI2RlZmluZQkgSU5JVF9IQ0FfVkVSU0lPTgkJIDIKKyNkZWZpbmUgSU5JVF9IQ0FfQ0FDSEVMSU5FX1NaX09GRlNFVAkgMHgwZQogI2RlZmluZSBJTklUX0hDQV9GTEFHU19PRkZTRVQJCSAweDAxNAogI2RlZmluZSBJTklUX0hDQV9RUENfT0ZGU0VUCQkgMHgwMjAKICNkZWZpbmUJIElOSVRfSENBX1FQQ19CQVNFX09GRlNFVAkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDEwKQpAQCAtNzM1LDYgKzczNyw5IEBACiAKIAkqKCh1OCAqKSBtYWlsYm94LT5idWYgKyBJTklUX0hDQV9WRVJTSU9OX09GRlNFVCkgPSBJTklUX0hDQV9WRVJTSU9OOwogCisJKigodTggKikgbWFpbGJveC0+YnVmICsgSU5JVF9IQ0FfQ0FDSEVMSU5FX1NaX09GRlNFVCkgPQorCQkoaWxvZzIoY2FjaGVfbGluZV9zaXplKCkpIC0gNCkgPDwgNTsKKwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHU19PRkZTRVQgLyA0KSAmPSB+Y3B1X3RvX2JlMzIoMSA8PCAxKTsKICNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCAzZGQ0ODFlLi4yOTFhNTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTI4Miw2ICsxMjgyLDggQEAKIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNzIpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1YSkgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQrR2VuMiAxMEdpZ0UgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NjQpIH0sIC8qIE1UMjY0NjggQ29ubmVjdFggRU4gMTBHaWdFIFBDSWUgZ2VuMiovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzQ2KSB9LCAvKiBNVDI2NDM4IENvbm5lY3RYIEVOIDQwR2lnRSBQQ0llIGdlbjIgNUdUL3MgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NmUpIH0sIC8qIE1UMjY0NzggQ29ubmVjdFgyIDQwR2lnRSBQQ0llIGdlbjIgKi8KIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IDczODRmNTkuLmUxMjM3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMTE2Myw2ICsxMTYzLDggQEAKIAl1MzIgaW50X3ZlY19iaXQ7CiAJdTMyIGhlYXJ0Yml0OwogCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyX3N0YXRzIHN0YXRzOwogCiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IDFjNDZkYTYuLjE3YmIzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC01NDUsNiArNTQ1LDggQEAKICNkZWZpbmUJTkVUWEVOX05JVV9URVNUX01VWF9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwOTQpCiAjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUEFVU0VfQ1RMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDk4KQogI2RlZmluZQlORVRYRU5fTklVX1hHX1BBVVNFX0xFVkVMCShORVRYRU5fQ1JCX05JVSArIDB4MDAwZGMpCisjZGVmaW5lCU5FVFhFTl9OSVVfRlJBTUVfQ09VTlRfU0VMRUNUCShORVRYRU5fQ1JCX05JVSArIDB4MDAwYWMpCisjZGVmaW5lCU5FVFhFTl9OSVVfRlJBTUVfQ09VTlQJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwYjApCiAjZGVmaW5lCU5FVFhFTl9OSVVfWEdfU0VMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMTI4KQogI2RlZmluZSBORVRYRU5fTklVX0dCX1BBVVNFX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDMwYykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggMzE4NWE5OC4uNTJhMzc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0zODMsMjQgKzM4Myw1MSBAQAogCiBpbnQgbmV0eGVuX3AyX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtb2RlKQogewotCV9fdTMyIHJlZzsKKwl1MzIgbWFjX2NmZzsKKwl1MzIgY250ID0gMDsKKwlfX3UzMiByZWcgPSAweDAyMDA7CiAJdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCXUxNiBib2FyZF90eXBlID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAKIAlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOwotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQotCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOwotCWVsc2UKLQkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisJbWFjX2NmZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCkpOworCW1hY19jZmcgJj0gfjB4NDsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzAgKyAoMHgxMDAwMCAqIHBvcnQpLCBtYWNfY2ZnKTsKIAotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSkKLQkJcmVnID0gKHJlZyB8IDB4MTAwMFVMKTsKLQllbHNlCi0JCXJlZyA9IChyZWcgJiB+MHgxMDAwVUwpOworCWlmICgoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaKSB8fAorCQkJKGJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWikpCisJCXJlZyA9ICgweDIwIDw8IHBvcnQpOwogCi0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSwgcmVnKTsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9GUkFNRV9DT1VOVF9TRUxFQ1QsIHJlZyk7CisKKwltZGVsYXkoMTApOworCisJd2hpbGUgKE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0ZSQU1FX0NPVU5UKSAmJiArK2NudCA8IDIwKQorCQltZGVsYXkoMTApOworCisJaWYgKGNudCA8IDIwKSB7CisKKwkJcmVnID0gTlhSRDMyKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOworCisJCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQorCQkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKKwkJZWxzZQorCQkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisKKwkJaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFKQorCQkJcmVnID0gKHJlZyB8IDB4MTAwMFVMKTsKKwkJZWxzZQorCQkJcmVnID0gKHJlZyAmIH4weDEwMDBVTCk7CisKKwkJTlhXUjMyKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7CisJfQorCisJbWFjX2NmZyB8PSAweDQ7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQzNiw3ICs0NjMsNyBAQAogewogCXUzMgl2YWwgPSAwOwogCXUxNiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQl1OCAqYWRkciA9IGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHI7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5tYWNfYWRkcjsKIAogCWlmIChhZGFwdGVyLT5tY19lbmFibGVkKQogCQlyZXR1cm4gMDsKQEAgLTQ2NSw3ICs0OTIsNyBAQAogewogCXUzMgl2YWwgPSAwOwogCXUxNiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQl1OCAqYWRkciA9IGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHI7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5tYWNfYWRkcjsKIAogCWlmICghYWRhcHRlci0+bWNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CkBAIC02NjAsNyArNjg3LDcgQEAKIAogCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYWRhcHRlci0+bWFjX2xpc3QsICZkZWxfbGlzdCk7CiAKLQlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyLCAmZGVsX2xpc3QpOworCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyLCAmZGVsX2xpc3QpOwogCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIGJjYXN0X2FkZHIsICZkZWxfbGlzdCk7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggZTQwYjkxNC4uOGEwOTA0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtNTQ0LDYgKzU0NCw4IEBACiAJCQkJY29udGludWU7CiAJCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHgxYykpIC8qIE1TIGNsb2NrICovCiAJCQkJY29udGludWU7CisJCQlpZiAoKG9mZiAmIDB4MGZmMDAwMDApID09IE5FVFhFTl9DUkJfRERSX05FVCkKKwkJCQljb250aW51ZTsKIAkJCWlmIChvZmYgPT0gKE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHgxOCkpCiAJCQkJYnVmW2ldLmRhdGEgPSAweDEwMjA7CiAJCQkvKiBza2lwIHRoZSBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCAwYjRhNTZhLi4zYmY3OGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC00MzcsNiArNDM3LDcgQEAKIAkJbmV0ZGV2LT5kZXZfYWRkcltpXSA9ICoocCArIDUgLSBpKTsKIAogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPm1hY19hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAogCS8qIHNldCBzdGF0aW9uIGFkZHJlc3MgKi8KIApAQCAtNDU5LDYgKzQ2MCw3IEBACiAJCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAJfQogCisJbWVtY3B5KGFkYXB0ZXItPm1hY19hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgYWRkci0+c2FfZGF0YSk7CiAKQEAgLTk1Niw3ICs5NTgsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkcik7CisJCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyKTsKIAogCWFkYXB0ZXItPnNldF9tdWx0aShuZXRkZXYpOwogCWFkYXB0ZXItPnNldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IGM1OTRlMTkuLjU3ZmQ0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA2ZDI4YjE4Li5jMWIzZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEwMDAuYyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCmluZGV4IGVlMzY2YzUuLmM5YzcwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwppbmRleCBjZWUwMGFkLi40OWViOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCWVmeF9vd29yZF90IHJlZzsKIAogCS8qIEdQSU8gMyBhbmQgdGhlIEdQSU8gcmVnaXN0ZXIgYXJlIHNoYXJlZCB3aXRoIEkyQywgc28gYmxvY2sgdGhhdCAqLwotCW11dGV4X2xvY2soJmVmeC0+aTJjX2FkYXAuYnVzX2xvY2spOworCWkyY19sb2NrX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCiAJLyogUHVsbCBSU1RfTiAoR1BJTyAyKSBsb3cgdGhlbiBsZXQgaXQgdXAgYWdhaW4sIHNldHRpbmcgdGhlCiAJICogRkxBU0hfQ0ZHXzEgc3RyYXAgKEdQSU8gMykgYXBwcm9wcmlhdGVseS4gIE9ubHkgY2hhbmdlIHRoZQpAQCAtMjA0LDcgKzIwNCw3IEBACiAJZmFsY29uX3dyaXRlKGVmeCwgJnJlZywgR1BJT19DVExfUkVHX0tFUik7CiAJbXNsZWVwKDEpOwogCi0JbXV0ZXhfdW5sb2NrKCZlZngtPmkyY19hZGFwLmJ1c19sb2NrKTsKKwlpMmNfdW5sb2NrX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCiAJc3NsZWVwKDEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA5Nzk0OWQwLi5jMDcyZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCAzOGE1MDhiLi5iMjcxNTZlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtNzMsNiArNzMsNyBAQAogCiAvKiBJbmNsdWRlIGZpbGVzICovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAwMWY2ODExLi44ZjU0MTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IGUxN2M1MzUuLmZlM2NlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IGMyZjE0ZGMuLjk1NDI5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC00MTYsMTMgKzQxNiw4IEBACiAJdW5zaWduZWQgaW50IHR4c2l6ZSA9IHByaXYtPmRtYV90eF9zaXplOwogCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgYmZzaXplID0gcHJpdi0+ZG1hX2J1Zl9zejsKLQlpbnQgYnVmZjJfbmVlZGVkID0gMDsKLQlpbnQgZGlzX2ljID0gMDsKKwlpbnQgYnVmZjJfbmVlZGVkID0gMCwgZGlzX2ljID0gMDsKIAotI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQkvKiBVc2luZyBUaW1lcnMgZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIGNvbXBsZXRpb24gZm9yIHRoZSByZWNlcHRpb24gKi8KLQlkaXNfaWMgPSAxOwotI2VuZGlmCiAJLyogU2V0IHRoZSBCdWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIE1UVTsKIAkgKiBpbmRlZWQsIGluIGNhc2Ugb2YganVtYm8gd2UgbmVlZCB0byBidW1wLXVwIHRoZSBidWZmZXIgc2l6ZXMuCiAJICovCkBAIC00MzcsNiArNDMyLDExIEBACiAJZWxzZQogCQliZnNpemUgPSBETUFfQlVGRkVSX1NJWkU7CiAKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIG9uIGNvbXBsZXRpb24gZm9yIHRoZSByZWNlcHRpb24gaWYgdGltZXIgaXMgb24gKi8KKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlkaXNfaWMgPSAxOworI2VuZGlmCiAJLyogSWYgdGhlIE1UVSBleGNlZWRzIDhrIHNvIHVzZSB0aGUgc2Vjb25kIGJ1ZmZlciBpbiB0aGUgY2hhaW4gKi8KIAlpZiAoYmZzaXplID49IEJVRl9TSVpFXzhLaUIpCiAJCWJ1ZmYyX25lZWRlZCA9IDE7CkBAIC04MDksMjAgKzgwOSwyMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX2VuYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotI2lmbmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0Jd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOwotI2Vsc2UKLQlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CisJZWxzZQogI2VuZGlmCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX2Rpc2FibGVfaXJxKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLSNpZm5kZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCXdyaXRlbCgwLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7Ci0jZWxzZQotCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CisJZWxzZQogI2VuZGlmCisJd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKIH0KIAogc3RhdGljIGludCBzdG1tYWNfaGFzX3dvcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtMTAzMSwyMiArMTAzMywyMyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQlwcml2LT50bSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdG1tYWNfdGltZXIgKiksIEdGUF9LRVJORUwpOworCXByaXYtPnRtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bW1hY190aW1lciAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KHByaXYtPnRtID09IE5VTEwpKSB7CiAJCXByX2VycigiJXM6IEVSUk9SOiB0aW1lciBtZW1vcnkgYWxsb2MgZmFpbGVkIFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcHJpdi0+dG0tPmZyZXEgPSB0bXJhdGU7CiAKLQkvKiBUZXN0IGlmIHRoZSBIVyB0aW1lciBjYW4gYmUgYWN0dWFsbHkgdXNlZC4KLQkgKiBJbiBjYXNlIG9mIGZhaWx1cmUgY29udGludWUgd2l0aCBubyB0aW1lci4gKi8KKwkvKiBUZXN0IGlmIHRoZSBleHRlcm5hbCB0aW1lciBjYW4gYmUgYWN0dWFsbHkgdXNlZC4KKwkgKiBJbiBjYXNlIG9mIGZhaWx1cmUgY29udGludWUgd2l0aG91dCB0aW1lci4gKi8KIAlpZiAodW5saWtlbHkoKHN0bW1hY19vcGVuX2V4dF90aW1lcihkZXYsIHByaXYtPnRtKSkgPCAwKSkgewotCQlwcl93YXJuaW5nKCJzdG1tYWNldGg6IGNhbm5vdCBhdHRhY2ggdGhlIEhXIHRpbWVyXG4iKTsKKwkJcHJfd2FybmluZygic3RtbWFjZXRoOiBjYW5ub3QgYXR0YWNoIHRoZSBleHRlcm5hbCB0aW1lci5cbiIpOwogCQl0bXJhdGUgPSAwOwogCQlwcml2LT50bS0+ZnJlcSA9IDA7CiAJCXByaXYtPnRtLT50aW1lcl9zdGFydCA9IHN0bW1hY19ub190aW1lcl9zdGFydGVkOwogCQlwcml2LT50bS0+dGltZXJfc3RvcCA9IHN0bW1hY19ub190aW1lcl9zdG9wcGVkOwotCX0KKwl9IGVsc2UKKwkJcHJpdi0+dG0tPmVuYWJsZSA9IDE7CiAjZW5kaWYKIAogCS8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgVFgvUlggZGVzY3JpcHRvcnMgY2hhaW5zLiAqLwpAQCAtMTMyMiw5ICsxMzI1LDExIEBACiAKIAkvKiBJbnRlcnJ1cHQgb24gY29tcGxldGl0aW9uIG9ubHkgZm9yIHRoZSBsYXRlc3Qgc2VnbWVudCAqLwogCXByaXYtPm1hY190eXBlLT5vcHMtPmNsb3NlX3R4X2Rlc2MoZGVzYyk7CisKICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0JLyogQ2xlYW4gSUMgd2hpbGUgdXNpbmcgdGltZXJzICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CisJLyogQ2xlYW4gSUMgd2hpbGUgdXNpbmcgdGltZXIgKi8KKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbGVhcl90eF9pYyhkZXNjKTsKICNlbmRpZgogCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLwogCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CkBAIC0yMDI4LDcgKzIwMzMsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOwotCQlkaXNfaWMgPSAxOworCQlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQkJZGlzX2ljID0gMTsKICNlbmRpZgogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKaW5kZXggYjgzOGM2NS4uNjc5ZjYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYwpAQCAtNjMsNyArNjMsNyBAQAogCiAJc3RtbWFjX3J0YyA9IHJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOwogCWlmIChzdG1tYWNfcnRjID09IE5VTEwpIHsKLQkJcHJfZXJyb3IoIm9wZW4gcnRjIGRldmljZSBmYWlsZWRcbiIpOworCQlwcl9lcnIoIm9wZW4gcnRjIGRldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTcxLDcgKzcxLDcgQEAKIAogCS8qIFBlcmlvZGljIG1vZGUgaXMgbm90IHN1cHBvcnRlZCAqLwogCWlmICgocnRjX2lycV9zZXRfZnJlcShzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2ssIHRtLT5mcmVxKSA8IDApKSB7Ci0JCXByX2Vycm9yKCJzZXQgcGVyaW9kaWMgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJzZXQgcGVyaW9kaWMgZmFpbGVkXG4iKTsKIAkJcnRjX2lycV91bnJlZ2lzdGVyKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzayk7CiAJCXJ0Y19jbGFzc19jbG9zZShzdG1tYWNfcnRjKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCmluZGV4IGY3OTVjYWUuLjY4NjM1OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAl2b2lkICgqdGltZXJfc3RhcnQpICh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpOwogCXZvaWQgKCp0aW1lcl9zdG9wKSAodm9pZCk7CiAJdW5zaWduZWQgaW50IGZyZXE7CisJdW5zaWduZWQgaW50IGVuYWJsZTsKIH07CiAKIC8qIE9wZW4gdGhlIEhXIHRpbWVyIGRldmljZSBhbmQgcmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IDE5MjdiM2QuLjYxNjQwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCA2YTNjNzUxLi43NWZhMzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMTA4LDYgKzEwOCw3IEBACiAjZGVmaW5lIElCTVRSX0RFQlVHX01FU1NBR0VTIDAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpZmRlZiBQQ01DSUEJCS8qIHJlcXVpcmVkIGZvciBpYm10cl9jcy5jIHRvIGJ1aWxkICovCiAjdW5kZWYgTU9EVUxFCQkvKiB5ZXMsIHJlYWxseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IGQ2ZDM0NTIuLjU5MjFmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZmE0ZTU4MS4uNDNiYzNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMzc4LDcgKzM3OCw3IEBACiB9CiAKICNkZWZpbmUgRFVNUChidWZfLCBsZW5fKQlcCi0JZGJnX2R1bXAoX19MSU5FX18sIF9fZnVuY19fLCBidWZfLCBsZW5fKQorCWRiZ19kdW1wKF9fTElORV9fLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGNoYXIgKilidWZfLCBsZW5fKQogCiAjZGVmaW5lIERVTVAxKGJ1Zl8sIGxlbl8pCQkJXAogCWRvIHsJCQkJCVwKQEAgLTEzNjMsNyArMTM2Myw3IEBACiAJLyogcmVzZXQgdGhlIHJ0cyBhbmQgZHRyICovCiAJLyogZG8gdGhlIGFjdHVhbCBjbG9zZSAqLwogCXNlcmlhbC0+b3Blbl9jb3VudC0tOwotCWtyZWZfcHV0KCZzZXJpYWwtPnBhcmVudC0+cmVmLCBoc29fc2VyaWFsX3JlZl9mcmVlKTsKKwogCWlmIChzZXJpYWwtPm9wZW5fY291bnQgPD0gMCkgewogCQlzZXJpYWwtPm9wZW5fY291bnQgPSAwOwogCQlzcGluX2xvY2tfaXJxKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKQEAgLTEzODMsNiArMTM4Myw4IEBACiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPnBhcmVudC0+aW50ZXJmYWNlKTsKIAogCW11dGV4X3VubG9jaygmc2VyaWFsLT5wYXJlbnQtPm11dGV4KTsKKworCWtyZWZfcHV0KCZzZXJpYWwtPnBhcmVudC0+cmVmLCBoc29fc2VyaWFsX3JlZl9mcmVlKTsKIH0KIAogLyogY2xvc2UgdGhlIHJlcXVlc3RlZCBzZXJpYWwgcG9ydCAqLwpAQCAtMTUyNyw3ICsxNTI5LDcgQEAKIAkJZGV2X3dhcm4oJnVzYi0+ZGV2LAogCQkJICJoc28gcmVjZWl2ZWQgaW52YWxpZCBzZXJpYWwgc3RhdGUgbm90aWZpY2F0aW9uXG4iKTsKIAkJRFVNUChzZXJpYWxfc3RhdGVfbm90aWZpY2F0aW9uLAotCQkgICAgIHNpemVvZihoc29fc2VyaWFsX3N0YXRlX25vdGlmYXRpb24pKQorCQkgICAgIHNpemVvZihzdHJ1Y3QgaHNvX3NlcmlhbF9zdGF0ZV9ub3RpZmljYXRpb24pKTsKIAl9IGVsc2UgewogCiAJCVVBUlRfc3RhdGVfYml0bWFwID0gbGUxNl90b19jcHUoc2VyaWFsX3N0YXRlX25vdGlmaWNhdGlvbi0+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCAwY2FhODAwLi5mNTZkZWM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC0zNjIsMTIgKzM2MiwxMiBAQAogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCQl9Ci0JCWRldi0+aGFyZF9tdHUgPSB0bXA7Ci0JCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCQlkZXZfd2FybigmaW50Zi0+ZGV2LAogCQkJICJkZXYgY2FuJ3QgdGFrZSAldSBieXRlIHBhY2tldHMgKG1heCAldSksICIKIAkJCSAiYWRqdXN0aW5nIE1UVSB0byAldVxuIiwKLQkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIG5ldC0+bXR1KTsKKwkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIHRtcCAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJZGV2LT5oYXJkX210dSA9IHRtcDsKKwkJbmV0LT5tdHUgPSBkZXYtPmhhcmRfbXR1IC0gbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAJfQogCiAJLyogUkVWSVNJVDogIHBlcmlwaGVyYWwgImFsaWdubWVudCIgcmVxdWVzdCBpcyBpZ25vcmVkIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IGFkZTViMzQuLjUyYWY1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTIxMCwzMiArMjEwLDI5IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGV2X3N0YXRzOwogCWludCBjcHU7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCB0b3RhbCA9IHswfTsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWRldl9zdGF0cyA9ICZkZXYtPnN0YXRzOwogCi0JZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gMDsKLQlkZXZfc3RhdHMtPnR4X3BhY2tldHMgPSAwOwotCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfZHJvcHBlZCA9IDA7Ci0JZGV2X3N0YXRzLT5yeF9kcm9wcGVkID0gMDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOwogCi0JCWRldl9zdGF0cy0+cnhfcGFja2V0cyArPSBzdGF0cy0+cnhfcGFja2V0czsKLQkJZGV2X3N0YXRzLT50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOwotCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKLQkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7Ci0JCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKLQkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOworCQl0b3RhbC5yeF9wYWNrZXRzICs9IHN0YXRzLT5yeF9wYWNrZXRzOworCQl0b3RhbC50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOworCQl0b3RhbC5yeF9ieXRlcyAgICs9IHN0YXRzLT5yeF9ieXRlczsKKwkJdG90YWwudHhfYnl0ZXMgICArPSBzdGF0cy0+dHhfYnl0ZXM7CisJCXRvdGFsLnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7CisJCXRvdGFsLnJ4X2Ryb3BwZWQgKz0gc3RhdHMtPnJ4X2Ryb3BwZWQ7CiAJfQorCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHRvdGFsLnJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gdG90YWwudHhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICAgPSB0b3RhbC5yeF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICAgPSB0b3RhbC50eF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQgPSB0b3RhbC50eF9kcm9wcGVkOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCA9IHRvdGFsLnJ4X2Ryb3BwZWQ7CiAKLQlyZXR1cm4gZGV2X3N0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIGludCB2ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiYjhiNTJkLi5iOWUwMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwppbmRleCA5NjkzYjBmLi4wYmQ4OThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IDY2MzYwYTIuLmUyYzMzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtNzYsNiArNzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCmluZGV4IDI1NzNjMTguLmNkOGNiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4MWM4YWVjLi4wN2QwMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODEsNiArODEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCAzZTkwZWI4Li5iZWRhMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggODNkYTU5Ni4uNThjNjY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGE1MmYyOWMuLmYxMzQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IGRiYmYwZDEuLjliOTA0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ4bWl0LmgiCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDFkOTIyM2IuLjRiNjAxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCmluZGV4IDExMzE5ZWMuLmFhZjIyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAiYjQzbGVnYWN5LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCmluZGV4IDZmYTE0YTQuLjRkZmI0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCkBAIC0xLDYgKzEsNyBAQAogLyogSG9zdCBBUCBkcml2ZXIgSW5mbyBGcmFtZSBwcm9jZXNzaW5nIChwYXJ0IG9mIGhvc3RhcC5vIG1vZHVsZSkgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCAzZjJiZGE4Li45NDE5Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0xLDYgKzEsNyBAQAogLyogaW9jdGwoKSAobW9zdGx5IExpbnV4IFdpcmVsZXNzIEV4dGVuc2lvbnMpIHJvdXRpbmVzIGZvciBIb3N0IEFQIGRyaXZlciAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMGQzMGE5ZS4uYTZjYTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpcHcyMjAwLmgiCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDIzMWM4MzMuLmYwNTliNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGEyMmEwNTAuLjZmNzAzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDUyNGU3ZTQuLjZlNmY1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCA4NzdhZjQ0Li45MjFkYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNDg0ZDVjMS4uMmRjOTI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCA1MzJjOGQ2Li5hNjg1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAiaXdsLWRldi5oIiAvKiBGSVhNRTogcmVtb3ZlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBjMTg5MDc1Li5mYjliY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggODM3YTE5My4uZDAwYTgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKaW5kZXggYTU2YTJiMC4uZjNjNTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwppbmRleCAyM2I1MmZhLi44NDE1OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXdtLmgiCiAjaW5jbHVkZSAiYnVzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYwppbmRleCBkNjY4ZTQ3Li4yMjJlYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCA0MGRiY2JjLi43NzFhMzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IDY4NTA5ODEuLjBhMzI0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAiZGVjbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNGMwMThmNy4uOGMzNzY2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMyw2ICszLDcgQEAKICAgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAicmFkaW90YXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDRjOTdjNmEuLmJjMDg0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMTksNiArMTksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCBlMjZkN2IzLi4yNTA1YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKaW5kZXggZjdjNjc3ZS4uNjlkMmY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGNkNThlLi4xYzg4YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAogCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IDdiM2VlOGMuLjY4YmM5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21kaW8uYyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCmluZGV4IGJhY2FhNTMuLjRiMjJiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCkBAIC05Nyw2ICs5NywxMiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3JlZ2lzdGVyKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBvZl9waHlfZmluZF9kZXZpY2UgKi8KK3N0YXRpYyBpbnQgb2ZfcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQoreworCXJldHVybiBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpID09IHBoeV9ucDsKK30KKwogLyoqCiAgKiBvZl9waHlfZmluZF9kZXZpY2UgLSBHaXZlIGEgUEhZIG5vZGUsIGZpbmQgdGhlIHBoeV9kZXZpY2UKICAqIEBwaHlfbnA6IFBvaW50ZXIgdG8gdGhlIHBoeSdzIGRldmljZSB0cmVlIG5vZGUKQEAgLTEwNiwxNSArMTEyLDEwIEBACiBzdHJ1Y3QgcGh5X2RldmljZSAqb2ZfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25wKQogewogCXN0cnVjdCBkZXZpY2UgKmQ7Ci0JaW50IG1hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQotCXsKLQkJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOwotCX0KLQogCWlmICghcGh5X25wKQogCQlyZXR1cm4gTlVMTDsKIAotCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgbWF0Y2gpOworCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgb2ZfcGh5X21hdGNoKTsKIAlyZXR1cm4gZCA/IHRvX3BoeV9kZXZpY2UoZCkgOiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChvZl9waHlfZmluZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKaW5kZXggMmI3YWUzNi4uNWRmNjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCkBAIC0zNSwxMiArMzUsMjMgQEAKIC8qIGF0b21pY190IGJlY2F1c2Ugd2FpdF9ldmVudCBjaGVja3MgaXQgb3V0c2lkZSBvZiBidWZmZXJfbXV0ZXggKi8KIHN0YXRpYyBhdG9taWNfdCBidWZmZXJfcmVhZHkgPSBBVE9NSUNfSU5JVCgwKTsKIAotLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBldmVudCBidWZmZXIuIFdoZW4gd2UKLSAqIGdldCBuZWFyIHRvIHRoZSBlbmQgd2Ugd2FrZSB1cCB0aGUgcHJvY2VzcwotICogc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4KKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZSBnZXQgbmVhciB0byB0aGUgZW5kIHdlCisgKiB3YWtlIHVwIHRoZSBwcm9jZXNzIHNsZWVwaW5nIG9uIHRoZSByZWFkKCkgb2YgdGhlIGZpbGUuIFRvIHByb3RlY3QKKyAqIHRoZSBldmVudF9idWZmZXIgdGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hlbiBidWZmZXJfbXV0ZXgKKyAqIGlzIHNldC4KICAqLwogdm9pZCBhZGRfZXZlbnRfZW50cnkodW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSBhbGwgd29ya3F1ZXVlcyBvciBoYW5kbGVycyBhcmUKKwkgKiBjYW5jZWxlZCBvciBmbHVzaGVkIGJlZm9yZSB0aGUgZXZlbnQgYnVmZmVyIGlzIGZyZWVkLgorCSAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChidWZmZXJfcG9zID09IGJ1ZmZlcl9zaXplKSB7CiAJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmV2ZW50X2xvc3Rfb3ZlcmZsb3cpOwogCQlyZXR1cm47CkBAIC02OSw3ICs4MCw2IEBACiAKIGludCBhbGxvY19ldmVudF9idWZmZXIodm9pZCkKIHsKLQlpbnQgZXJyID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wcm9maWxlZnNfbG9jaywgZmxhZ3MpOwpAQCAtODAsMjEgKzkwLDIyIEBACiAJaWYgKGJ1ZmZlcl93YXRlcnNoZWQgPj0gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gdm1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBidWZmZXJfc2l6ZSk7CiAJaWYgKCFldmVudF9idWZmZXIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogCiB2b2lkIGZyZWVfZXZlbnRfYnVmZmVyKHZvaWQpCiB7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAl2ZnJlZShldmVudF9idWZmZXIpOwotCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxMiBAQAogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAorCS8qIE1heSBoYXBwZW4gaWYgdGhlIGJ1ZmZlciBpcyBmcmVlZCBkdXJpbmcgcGVuZGluZyByZWFkcy4gKi8KKwlpZiAoIWV2ZW50X2J1ZmZlcikgeworCQlyZXR2YWwgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKwogCWF0b21pY19zZXQoJmJ1ZmZlcl9yZWFkeSwgMCk7CiAKIAlyZXR2YWwgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDE0YmJhYTEuLmU1ZjhmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTE3NSwxNSArMTc1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWRyaGQgPSAoc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICopaGVhZGVyOwotCWlmICghZHJoZC0+YWRkcmVzcykgewotCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLwotCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgemVybyFcbiIKLQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJZG1hcnUgPSBremFsbG9jKHNpemVvZigqZG1hcnUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYXJ1KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM1NCw2ICszNDUsNyBAQAogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgYWNwaV9kbWFyX3Jlc2VydmVkX21lbW9yeSAqcm1ycjsKIAlzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IgKmF0c3I7CisJc3RydWN0IGFjcGlfZG1hcl9yaHNhICpyaHNhOwogCiAJc3dpdGNoIChoZWFkZXItPnR5cGUpIHsKIAljYXNlIEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQ6CkBAIC0zNzUsNiArMzY3LDEyIEBACiAJCWF0c3IgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IsIGhlYWRlcik7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJBVFNSIGZsYWdzOiAlI3hcbiIsIGF0c3ItPmZsYWdzKTsKIAkJYnJlYWs7CisJY2FzZSBBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFk6CisJCXJoc2EgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EsIGhlYWRlcik7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJSSFNBIGJhc2U6ICUjMDE2THggcHJveGltaXR5IGRvbWFpbjogJSN4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyaHNhLT5iYXNlX2FkZHJlc3MsCisJCSAgICAgICByaHNhLT5wcm94aW1pdHlfZG9tYWluKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC00NTksOSArNDU3LDEzIEBACiAJCQlyZXQgPSBkbWFyX3BhcnNlX29uZV9hdHNyKGVudHJ5X2hlYWRlcik7CiAjZW5kaWYKIAkJCWJyZWFrOworCQljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKKwkJCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggUkhTQSAoeWV0PykgKi8KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlXG4iKTsKKwkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlICVkXG4iLAorCQkJCWVudHJ5X2hlYWRlci0+dHlwZSk7CiAJCQlyZXQgPSAwOyAvKiBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJCQlicmVhazsKIAkJfQpAQCAtNTgwLDEyICs1ODIsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IF9faW5pdCBjaGVja196ZXJvX2FkZHJlc3Modm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICplbnRyeV9oZWFkZXI7CisJc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICpkcmhkOworCisJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopZG1hcl90Ymw7CisJZW50cnlfaGVhZGVyID0gKHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICopKGRtYXIgKyAxKTsKKworCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpZW50cnlfaGVhZGVyKSA8CisJCQkoKCh1bnNpZ25lZCBsb25nKWRtYXIpICsgZG1hcl90YmwtPmxlbmd0aCkpIHsKKwkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIG9uIGJhZCBBQ1BJIHRhYmxlcyAqLworCQlpZiAoZW50cnlfaGVhZGVyLT5sZW5ndGggPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkiSW52YWxpZCAwLWxlbmd0aCBzdHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZW50cnlfaGVhZGVyLT50eXBlID09IEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQpIHsKKwkJCWRyaGQgPSAodm9pZCAqKWVudHJ5X2hlYWRlcjsKKwkJCWlmICghZHJoZC0+YWRkcmVzcykgeworCQkJCS8qIFByb21vdGUgYW4gYXR0aXR1ZGUgb2YgdmlvbGVuY2UgdG8gYSBCSU9TIGVuZ2luZWVyIHRvZGF5ICovCisJCQkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BUiByZXBvcnRlZCBhdCBhZGRyZXNzIHplcm8hXG4iCisJCQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQllbnRyeV9oZWFkZXIgPSAoKHZvaWQgKillbnRyeV9oZWFkZXIgKyBlbnRyeV9oZWFkZXItPmxlbmd0aCk7CisJfQorCXJldHVybiAxOworfQorCiB2b2lkIF9faW5pdCBkZXRlY3RfaW50ZWxfaW9tbXUodm9pZCkKIHsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKLQorCWlmIChyZXQpCisJCXJldCA9IGNoZWNrX3plcm9fYWRkcmVzcygpOwogCXsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCmluZGV4IGE5ZDkyNmIuLmU3YmU2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKQEAgLTQwNiw3ICs0MDYsNiBAQAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8tPmhhcmR3YXJlX2lkLnN0cmluZ1tzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQubGVuZ3RoKSAtIDFdID0gJ1wwJzsKIAogCWlmIChpbmZvLT5jdXJyZW50X3N0YXR1cyAmJiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkgJiYKIAkJCSghc3RyY21wKGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZywgSUJNX0hBUkRXQVJFX0lEMSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IDUzODM2MDAuLjljNmE5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIHJlYWQ/IGFuZCB3cml0ZT8gZnVuY3Rpb25zICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGRlbGF5cyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIHNpZ25hbF9wZW5kaW5nKCkgKi8KIAogI2RlZmluZSBNWV9OQU1FCSJjcHFwaHAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDg1NWRkN2MuLjE4NDBhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKICNkZWZpbmUgSVNfSVNBX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSVNBKQorI2RlZmluZSBJU19BWkFMSUEocGRldikgKChwZGV2KS0+dmVuZG9yID09IDB4ODA4NiAmJiAocGRldiktPmRldmljZSA9PSAweDNhM2UpCiAKICNkZWZpbmUgSU9BUElDX1JBTkdFX1NUQVJUCSgweGZlZTAwMDAwKQogI2RlZmluZSBJT0FQSUNfUkFOR0VfRU5ECSgweGZlZWZmZmZmKQpAQCAtOTQsNiArOTUsNyBAQAogLyogZ2xvYmFsIGlvbW11IGxpc3QsIHNldCBOVUxMIGZvciBpZ25vcmVkIERNQVIgdW5pdHMgKi8KIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaW9tbXUgKipnX2lvbW11czsKIAorc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCk7CiBzdGF0aWMgaW50IHJ3YmZfcXVpcms7CiAKIC8qCkBAIC0xOTM0LDYgKzE5MzYsOSBAQAogfQogCiBzdGF0aWMgaW50IGlvbW11X2lkZW50aXR5X21hcHBpbmc7CisjZGVmaW5lIElERU5UTUFQX0FMTAkJMQorI2RlZmluZSBJREVOVE1BUF9HRlgJCTIKKyNkZWZpbmUgSURFTlRNQVBfQVpBTElBCQk0CiAKIHN0YXRpYyBpbnQgaW9tbXVfZG9tYWluX2lkZW50aXR5X21hcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKQEAgLTIxNTEsOCArMjE1NiwxNCBAQAogCiBzdGF0aWMgaW50IGlvbW11X3Nob3VsZF9pZGVudGl0eV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGFydHVwKQogewotCWlmIChpb21tdV9pZGVudGl0eV9tYXBwaW5nID09IDIpCi0JCXJldHVybiBJU19HRlhfREVWSUNFKHBkZXYpOworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0FaQUxJQSkgJiYgSVNfQVpBTElBKHBkZXYpKQorCQlyZXR1cm4gMTsKKworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0dGWCkgJiYgSVNfR0ZYX0RFVklDRShwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIShpb21tdV9pZGVudGl0eV9tYXBwaW5nICYgSURFTlRNQVBfQUxMKSkKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3RhcnQgb2ZmIHdpdGggYWxsIGRldmljZXMgaW4gdGhlIDE6MSBkb21haW4sIGFuZApAQCAtMjMzMiwxMSArMjM0MywxNCBAQAogCX0KIAogCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOworCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0FMTDsKKwogI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKLQllbHNlCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAyOworCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfR0ZYOwogI2VuZGlmCisKKwljaGVja190eWxlcnNidXJnX2lzb2NoKCk7CisKIAkvKgogCSAqIElmIHBhc3MgdGhyb3VnaCBpcyBub3Qgc2V0IG9yIG5vdCBlbmFibGVkLCBzZXR1cCBjb250ZXh0IGVudHJpZXMgZm9yCiAJICogaWRlbnRpdHkgbWFwcGluZ3MgZm9yIHJtcnIsIGdmeCwgYW5kIGlzYSBhbmQgbWF5IGZhbGwgYmFjayB0byBzdGF0aWMKQEAgLTI3NTMsNyArMjc2NywxNSBAQAogCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7Ci0JZmxhZ3MgJj0gfihHRlBfRE1BIHwgR0ZQX0RNQTMyKTsKKworCWlmICghaW9tbXVfbm9fbWFwcGluZyhod2RldikpCisJCWZsYWdzICY9IH4oR0ZQX0RNQSB8IEdGUF9ETUEzMik7CisJZWxzZSBpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgZG1hX2dldF9yZXF1aXJlZF9tYXNrKGh3ZGV2KSkgeworCQlpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgRE1BX0JJVF9NQVNLKDMyKSkKKwkJCWZsYWdzIHw9IEdGUF9ETUE7CisJCWVsc2UKKwkJCWZsYWdzIHw9IEdGUF9ETUEzMjsKKwl9CiAKIAl2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOwogCWlmICghdmFkZHIpCkBAIC0zMTkzLDYgKzMyMTUsMzMgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAorLyoKKyAqIEhlcmUgd2Ugb25seSByZXNwb25kIHRvIGFjdGlvbiBvZiB1bmJvdW5kIGRldmljZSBmcm9tIGRyaXZlci4KKyAqCisgKiBBZGRlZCBkZXZpY2UgaXMgbm90IGF0dGFjaGVkIHRvIGl0cyBETUFSIGRvbWFpbiBoZXJlIHlldC4gVGhhdCB3aWxsIGhhcHBlbgorICogd2hlbiBtYXBwaW5nIHRoZSBkZXZpY2UgdG8gaW92YS4KKyAqLworc3RhdGljIGludCBkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CisKKwlkb21haW4gPSBmaW5kX2RvbWFpbihwZGV2KTsKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIgJiYgIWlvbW11X3Bhc3NfdGhyb3VnaCkKKwkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRldmljZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGRldmljZV9ub3RpZmllciwKK307CisKIGludCBfX2luaXQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwpAQCAtMzI0NSw2ICszMjk0LDggQEAKIAogCXJlZ2lzdGVyX2lvbW11KCZpbnRlbF9pb21tdV9vcHMpOwogCisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwY2lfYnVzX3R5cGUsICZkZXZpY2VfbmIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NzAsMyArMzcyMSw2MSBAQAogfQogCiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyYTQwLCBxdWlya19pb21tdV9yd2JmKTsKKworLyogT24gVHlsZXJzYnVyZyBjaGlwc2V0cywgc29tZSBCSU9TZXMgaGF2ZSBiZWVuIGtub3duIHRvIGVuYWJsZSB0aGUKKyAgIElTT0NIIERNQVIgdW5pdCBmb3IgdGhlIEF6YWxpYSBzb3VuZCBkZXZpY2UsIGJ1dCBub3QgZ2l2ZSBpdCBhbnkKKyAgIFRMQiBlbnRyaWVzLCB3aGljaCBjYXVzZXMgaXQgdG8gZGVhZGxvY2suIENoZWNrIGZvciB0aGF0LiAgV2UgZG8KKyAgIHRoaXMgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbml0X2RtYXJzKCksIGluc3RlYWQgb2YgaW4gYSBQQ0kKKyAgIHF1aXJrLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJpbnQgdGhlIG9ibm94aW91cyAiQklPUyBicm9rZW4iCisgICBtZXNzYWdlIGlmIFZULWQgaXMgYWN0dWFsbHkgZGlzYWJsZWQuCisqLworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1aW50MzJfdCB2dGlzb2NoY3RybDsKKworCS8qIElmIHRoZXJlJ3Mgbm8gQXphbGlhIGluIHRoZSBzeXN0ZW0gYW55d2F5LCBmb3JnZXQgaXQuICovCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2EzZSwgTlVMTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisJcGNpX2Rldl9wdXQocGRldik7CisKKwkvKiBTeXN0ZW0gTWFuYWdlbWVudCBSZWdpc3RlcnMuIE1pZ2h0IGJlIGhpZGRlbiwgaW4gd2hpY2ggY2FzZQorCSAgIHdlIGNhbid0IGRvIHRoZSBzYW5pdHkgY2hlY2suIEJ1dCB0aGF0J3MgT0ssIGJlY2F1c2UgdGhlCisJICAga25vd24tYnJva2VuIEJJT1NlcyBfZG9uJ3RfIGFjdHVhbGx5IGhpZGUgaXQsIHNvIGZhci4gKi8KKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzNDJlLCBOVUxMKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHgxODgsICZ2dGlzb2NoY3RybCkpIHsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKKworCS8qIElmIEF6YWxpYSBETUEgaXMgcm91dGVkIHRvIHRoZSBub24taXNvY2ggRE1BUiB1bml0LCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCAmIDEpCisJCXJldHVybjsKKworCS8qIERyb3AgYWxsIGJpdHMgb3RoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIFRMQiBlbnRyaWVzICovCisJdnRpc29jaGN0cmwgJj0gMHgxYzsKKworCS8qIElmIHdlIGhhdmUgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiBUTEIgZW50cmllcyAoMTYpLCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCA9PSAweDEwKQorCQlyZXR1cm47CisKKwkvKiBaZXJvIFRMQiBlbnRyaWVzPyBZb3UgZ2V0IHRvIHJpZGUgdGhlIHNob3J0IGJ1cyB0byBzY2hvb2wuICovCisJaWYgKCF2dGlzb2NoY3RybCkgeworCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUEgcm91dGVkIHRvIElTT0NIIERNQVIgdW5pdCBidXQgbm8gVExCIHNwYWNlLlxuIgorCQkgICAgICJCSU9TIHZlbmRvcjogJXM7IFZlcjogJXM7IFByb2R1Y3QgVmVyc2lvbjogJXNcbiIsCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfQVpBTElBOworCQlyZXR1cm47CisJfQorCQorCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQVI6IFJlY29tbWVuZGVkIFRMQiBlbnRyaWVzIGZvciBJU09DSCB1bml0IGlzIDE2OyB5b3VyIEJJT1Mgc2V0ICVkXG4iLAorCSAgICAgICB2dGlzb2NoY3RybCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDZlZGVjZmYuLjRlNGMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC01MTMsNyArNTEzLDExIEBACiAJZWxzZSBpZiAoc3RhdGUgPT0gUENJX0QyIHx8IGRldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDIpCiAJCXVkZWxheShQQ0lfUE1fRDJfREVMQVkpOwogCi0JZGV2LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOworCWRldi0+Y3VycmVudF9zdGF0ZSA9IChwbWNzciAmIFBDSV9QTV9DVFJMX1NUQVRFX01BU0spOworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgIT0gc3RhdGUgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJSZWZ1c2VkIHRvIGNoYW5nZSBwb3dlciBzdGF0ZSwgIgorCQkJImN1cnJlbnRseSBpbiBEJWRcbiIsIGRldi0+Y3VycmVudF9zdGF0ZSk7CiAKIAkvKiBBY2NvcmRpbmcgdG8gc2VjdGlvbiA1LjQuMSBvZiB0aGUgIlBDSSBCVVMgUE9XRVIgTUFOQUdFTUVOVAogCSAqIElOVEVSRkFDRSBTUEVDSUZJQ0FUSU9OLCBSRVYuIDEuMiIsIGEgZGV2aWNlIHRyYW5zaXRpb25pbmcKQEAgLTI1NDIsMTAgKzI1NDYsMTAgQEAKIAogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKLSAqIEBkZXYgdGhlIFBDSSBkZXZpY2UKLSAqIEBkZWNvZGUgLSB0cnVlID0gZW5hYmxlIGRlY29kaW5nLCBmYWxzZSA9IGRpc2FibGUgZGVjb2RpbmcKLSAqIEBjb21tYW5kX2JpdHMgUENJX0NPTU1BTkRfSU8gYW5kL29yIFBDSV9DT01NQU5EX01FTU9SWQotICogQGNoYW5nZV9icmlkZ2UgLSB0cmF2ZXJzZSBhbmNlc3RvcnMgYW5kIGNoYW5nZSBicmlkZ2VzCisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICogQGRlY29kZTogdHJ1ZSA9IGVuYWJsZSBkZWNvZGluZywgZmFsc2UgPSBkaXNhYmxlIGRlY29kaW5nCisgKiBAY29tbWFuZF9iaXRzOiBQQ0lfQ09NTUFORF9JTyBhbmQvb3IgUENJX0NPTU1BTkRfTUVNT1JZCisgKiBAY2hhbmdlX2JyaWRnZTogdHJhdmVyc2UgYW5jZXN0b3JzIGFuZCBjaGFuZ2UgYnJpZGdlcwogICovCiBpbnQgcGNpX3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKQEAgLTI3MTksMTcgKzI3MjMsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7Ci0JCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoY2hhciAqc3RyKQogewogCXdoaWxlIChzdHIpIHsKQEAgLTI3NjcsOCArMjc2MCw2IEBACiB9CiBlYXJseV9wYXJhbSgicGNpIiwgcGNpX3NldHVwKTsKIAotZGV2aWNlX2luaXRjYWxsKHBjaV9pbml0KTsKLQogRVhQT1JUX1NZTUJPTChwY2lfcmVlbmFibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9kZXZpY2VfaW8pOwogRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX2RldmljZV9tZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCAyY2U4ZjljLi40MGMzY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC01Miw3ICs1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIGFlcmRyaXZlciA9IHsKIAkubmFtZQkJPSAiYWVyIiwKLQkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkucG9ydF90eXBlCT0gUENJRV9SQ19QT1JULAogCS5zZXJ2aWNlCT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAogCiAJLnByb2JlCQk9IGFlcl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggNzQ1NDAyZS4uNWI3MDU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTY1Niw4ICs2NTYsMTAgQEAKIAlmcmVlX2xpbmtfc3RhdGUobGluayk7CiAKIAkvKiBSZWNoZWNrIGxhdGVuY2llcyBhbmQgY29uZmlndXJlIHVwc3RyZWFtIGxpbmtzICovCi0JcGNpZV91cGRhdGVfYXNwbV9jYXBhYmxlKHJvb3QpOwotCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJaWYgKHBhcmVudF9saW5rKSB7CisJCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKKwkJcGNpZV9jb25maWdfYXNwbV9wYXRoKHBhcmVudF9saW5rKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOwogCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCA2ZGY1Yzk4Li5mNjM1ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0zMCw3ICszMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGdsb2JhbCBkYXRhICovCi1zdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfbmFtZVtdID0gInBjaWVwb3J0LWRyaXZlciI7CiAKIHN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0yNjIsNyArMjYxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2llX3BvcnRkcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKilkZXZpY2VfbmFtZSwKKwkubmFtZQkJPSAicGNpZXBvcnQiLAogCS5pZF90YWJsZQk9ICZwb3J0X3BjaV9pZHNbMF0sCiAKIAkucHJvYmUJCT0gcGNpZV9wb3J0ZHJ2X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA2MDk5ZmFjLi4yNDVkMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNjcwLDYgKzY3MCwyNSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LAlxdWlya192dDgyMzVfYWNwaSk7CiAKKy8qCisgKiBUSSBYSU8yMDAwYSBQQ0llLVBDSSBCcmlkZ2UgZXJyb25lb3VzbHkgcmVwb3J0cyBpdCBzdXBwb3J0cyBmYXN0IGJhY2stdG8tYmFjazoKKyAqCURpc2FibGUgZmFzdCBiYWNrLXRvLWJhY2sgb24gdGhlIHNlY29uZGFyeSBidXMgc2VnbWVudAorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfeGlvMjAwMGEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgY29tbWFuZDsKKworCWRldl93YXJuKCZkZXYtPmRldiwgIlRJIFhJTzIwMDBhIHF1aXJrIGRldGVjdGVkOyAiCisJCSJzZWNvbmRhcnkgYnVzIGZhc3QgYmFjay10by1iYWNrIHRyYW5zZmVycyBkaXNhYmxlZFxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwZGV2LCAmZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spCisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIGNvbW1hbmQgJiB+UENJX0NPTU1BTkRfRkFTVF9CQUNLKTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1hJTzIwMDBBLAorCQkJcXVpcmtfeGlvMjAwMGEpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDIAogCkBAIC05OTAsNyArMTAwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19hbWRfaWRlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogc2V0IFNCWDAwIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCisJLyogc2V0IFNCWDAwL0h1ZHNvbi0yIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCiAJdTggdG1wOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX0RFVklDRSwgJnRtcCk7CkBAIC0xMDA5LDggKzEwMjgsOCBAQAogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCkBAIC0yNTcyLDYgKzI1OTEsMTkgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2lfYXBwbHlfZmluYWxfcXVpcmtzKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsX3N5bmMocGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyk7CiAjZWxzZQogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCA3MDZmODJkLi5jNTQ1MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtMjA1LDQzICsyMDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCi17Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwotCXVuc2lnbmVkIGludCB0eXBlX21hc2s7Ci0JaW50IGksIHJldCA9IC1FQlVTWTsKLQotCXR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyID0gYnVzLT5yZXNvdXJjZVtpXTsKLQkJaWYgKCFyKQotCQkJY29udGludWU7Ci0KLQkJLyogdHlwZV9tYXNrIG11c3QgbWF0Y2ggKi8KLQkJaWYgKChyZXMtPmZsYWdzIF4gci0+ZmxhZ3MpICYgdHlwZV9tYXNrKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZShyLCByZXMpOwotCi0JCWlmIChyZXQgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKLQkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7Ci0JfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7Ci0JCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXNubyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fcmVzb3VyY2VfZml4ZWQpOwotI2VuZGlmCi0KIC8qIFNvcnQgcmVzb3VyY2VzIGJ5IGFsaWdubWVudCAqLwogdm9pZCBwZGV2X3NvcnRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggZmJmOTY1Yi4uMTdmMzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDEwIEBACiAJdHJpc3RhdGUgIkF1MXgwMCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfQkNNNjNYWAorCXRyaXN0YXRlICJiY202M3h4IHBjbWNpYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkNNNjNYWCAmJiBQQ01DSUEKKwogY29uZmlnIFBDTUNJQV9TQTExMDAKIAl0cmlzdGF0ZSAiU0ExMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9TQTExMDAgJiYgUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDA0NzM5NGQuLmEwM2EzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfTTMyUl9QQ0MpCQkJCSs9IG0zMnJfcGNjLm8KIG9iai0kKENPTkZJR19NMzJSX0NGQykJCQkJKz0gbTMycl9jZmMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9BVTFYMDApCQkJKz0gYXUxeDAwX3NzLm8KK29iai0kKENPTkZJR19QQ01DSUFfQkNNNjNYWCkJCQkrPSBiY202M3h4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfUENNQ0lBX1ZSQzQxNzEpCQkJKz0gdnJjNDE3MV9jYXJkLm8KIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MykJCQkrPSB2cmM0MTczX2NhcmR1Lm8KIG9iai0kKENPTkZJR19PTUFQX0NGKQkJCQkrPSBvbWFwX2NmLm8KQEAgLTcxLDYgKzcyLDcgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfQVJDSF9WSVBFUikJCQkrPSBweGEyeHhfdmlwZXIubwogcHhhMnh4LW9iai0kKENPTkZJR19UUklaRVBTX1BDTUNJQSkJCSs9IHB4YTJ4eF90cml6ZXBzNC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCitweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRDKQkJKz0gcHhhMnh4X3BhbG10Yy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTUxEKQkJKz0gcHhhMnh4X3BhbG1sZC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfRTc0MCkJCQkrPSBweGEyeHhfZTc0MC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfU1RBUkdBVEUyKQkJKz0gcHhhMnh4X3N0YXJnYXRlMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggOWUxMTQwZi4uZTFkY2NlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkID0gY2YtPmJvYXJkOwogCi0JcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwogCQlpZiAoYm9hcmQtPmlycV9waW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCA5MDAxMzM0Li4wMjA4ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTUxNSw3ICs1MTUsNyBAQAogc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg4YTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgImJjbTYzeHhfcGNtY2lhLmgiCisKKyNkZWZpbmUgUEZYCSJiY202M3h4X3BjbWNpYTogIgorCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKy8qIGlmIGNhcmRidXMgaXMgdXNlZCwgcGxhdGZvcm0gZGV2aWNlIG5lZWRzIHJlZmVyZW5jZSB0byBhY3R1YWwgcGNpCisgKiBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqYmNtNjN4eF9jYl9kZXY7CisjZW5kaWYKKworLyoKKyAqIHJlYWQvd3JpdGUgaGVscGVyIGZvciBwY21jaWEgcmVncworICovCitzdGF0aWMgaW5saW5lIHUzMiBwY21jaWFfcmVhZGwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LCB1MzIgb2ZmKQoreworCXJldHVybiBiY21fcmVhZGwoc2t0LT5iYXNlICsgb2ZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjbWNpYV93cml0ZWwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSB1MzIgdmFsLCB1MzIgb2ZmKQoreworCWJjbV93cml0ZWwodmFsLCBza3QtPmJhc2UgKyBvZmYpOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgKHJlLSlpbml0aWFsaXNlIHRoZSBzb2NrZXQsIHR1cm4gb24gc3RhdHVzCisgKiBpbnRlcnJ1cHRzIGFuZCBQQ01DSUEgYnVzLCBhbmQgd2FpdCBmb3IgcG93ZXIgdG8gc3RhYmlsaXNlIHNvIHRoYXQKKyAqIHRoZSBjYXJkIHN0YXR1cyBzaWduYWxzIHJlcG9ydCBjb3JyZWN0bHkuCisgKgorICogSGFyZHdhcmUgY2Fubm90IGRvIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKQoreworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgcmVtb3ZlIHBvd2VyIG9uIHRoZSBzb2NrZXQsIGRpc2FibGUgSVJRcyBmcm9tCisgKiB0aGUgY2FyZCwgdHVybiBvZmYgc3RhdHVzIGludGVycnVwdHMsIGFuZCBkaXNhYmxlIHRoZSBQQ01DSUEgYnVzLgorICoKKyAqIEhhcmR3YXJlIGNhbm5vdCBkbyB0aGF0LgorICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBzZXRfc29ja2V0KCkgb3BlcmF0aW9uIGZvciB0aGUgaW4ta2VybmVsIFBDTUNJQQorICogc2VydmljZSAoZm9ybWVybHkgU1NfU2V0U29ja2V0IGluIENhcmQgU2VydmljZXMpLiBXZSBtb3JlIG9yCisgKiBsZXNzIHB1bnQgYWxsIG9mIHRoaXMgd29yayBhbmQgbGV0IHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBkZXRhaWxzCisgKiBvZiBwb3dlciBjb25maWd1cmF0aW9uLCByZXNldCwgJmMuIFdlIGFsc28gcmVjb3JkIHRoZSB2YWx1ZSBvZgorICogYHN0YXRlJyBpbiBvcmRlciB0byByZWd1cmdpdGF0ZSBpdCB0byB0aGUgUENNQ0lBIGNvcmUgbGF0ZXIuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2t0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBub3RlOiBoYXJkd2FyZSBjYW5ub3QgY29udHJvbCBzb2NrZXQgcG93ZXIsIHNvIHdlIHdpbGwKKwkgKiBhbHdheXMgcmVwb3J0IFNTX1BPV0VST04gKi8KKworCS8qIGFwcGx5IHNvY2tldCByZXNldCAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKKwkJdmFsIHw9IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCWVsc2UKKwkJdmFsICY9IH5QQ01DSUFfQzFfUkVTRVRfTUFTSzsKKworCS8qIHJldmVyc2UgcmVzZXQgbG9naWMgZm9yIGNhcmRidXMgY2FyZCAqLworCWlmIChza3QtPmNhcmRfZGV0ZWN0ZWQgJiYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9DQVJEQlVTKSkKKwkJdmFsIF49IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCisJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkvKiBrZWVwIHJlcXVlc3RlZCBzdGF0ZSBmb3IgZXZlbnQgcmVwb3J0aW5nICovCisJc2t0LT5yZXF1ZXN0ZWRfc3RhdGUgPSAqc3RhdGU7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogaWRlbnRpdHkgY2FyZHR5cGUgZnJvbSBWU1sxMl0gaW5wdXQsIENEWzEyXSBpbnB1dCB3aGlsZSBvbmx5IFZTMiBpcworICogZmxvYXRpbmcsIGFuZCBDRFsxMl0gaW5wdXQgd2hpbGUgb25seSBWUzEgaXMgZmxvYXRpbmcKKyAqLworZW51bSB7CisJSU5fVlMxID0gKDEgPDwgMCksCisJSU5fVlMyID0gKDEgPDwgMSksCisJSU5fQ0QxX1ZTMkggPSAoMSA8PCAyKSwKKwlJTl9DRDJfVlMySCA9ICgxIDw8IDMpLAorCUlOX0NEMV9WUzFIID0gKDEgPDwgNCksCisJSU5fQ0QyX1ZTMUggPSAoMSA8PCA1KSwKK307CisKK3N0YXRpYyBjb25zdCB1OCB2c2NkX3RvX2NhcmR0eXBlW10gPSB7CisKKwkvKiBWUzEgZmxvYXQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzEgfCBJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViksCisKKwkvKiBWUzEgZ3JvdW5kZWQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgZ3JvdW5kZWQgKi8KKwlbMF0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEXzVWIHwgQ0FSRF8zViB8IENBUkRfWFYpLAorCisJLyogVlMxIHRpZWQgdG8gQ0QxLCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMUhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YgfCBDQVJEX1hWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGdyb3VuZGVkICovCisJW0lOX1ZTMSB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWIHwgQ0FSRF9YViB8IENBUkRfWVYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfWFYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDEgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfWFYgfCBDQVJEX1lWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEX1lWKSwKKworCS8qIFZTMiBncm91bmRlZCwgVlMxIGlzIHRpZWQgdG8gQ0QxLCBDRDIgaXMgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxIHwgSU5fQ0QxX1ZTMUhdID0gMCwgLyogaWdub3JlIGNhcmRiYXkgKi8KK307CisKKy8qCisgKiBwb2xsIGhhcmR3YXJlIHRvIGNoZWNrIGNhcmQgaW5zZXJ0aW9uIHN0YXR1cworICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZ2V0X3NvY2tldF9zdGF0dXMoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXVuc2lnbmVkIGludCBzdGF0OworCXUzMiB2YWw7CisKKwlzdGF0ID0gMDsKKworCS8qIGNoZWNrIENEIGZvciBjYXJkIHByZXNlbmNlICovCisJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisKKwlpZiAoISh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spICYmICEodmFsICYgUENNQ0lBX0MxX0NEMl9NQVNLKSkKKwkJc3RhdCB8PSBTU19ERVRFQ1Q7CisKKwkvKiBpZiBuZXcgaW5zZXJ0aW9uLCBkZXRlY3QgY2FyZHR5cGUgKi8KKwlpZiAoKHN0YXQgJiBTU19ERVRFQ1QpICYmICFza3QtPmNhcmRfZGV0ZWN0ZWQpIHsKKwkJdW5zaWduZWQgaW50IHN0YXQgPSAwOworCisJCS8qIGZsb2F0IFZTMSwgZmxvYXQgVlMyICovCisJCXZhbCB8PSBQQ01DSUFfQzFfVlMxT0VfTUFTSzsKKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzJPRV9NQVNLOworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gc3RhYmlsaXplIGFuZCByZWFkIFZTWzEyXSAqLworCQl1ZGVsYXkoMTApOworCQl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX1ZTMV9NQVNLKSA/IElOX1ZTMSA6IDA7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9WUzJfTUFTSykgPyBJTl9WUzIgOiAwOworCisJCS8qIGRyaXZlIFZTMSBsb3csIGZsb2F0IFZTMiAqLworCQl2YWwgJj0gflBDTUNJQV9DMV9WUzFPRV9NQVNLOworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMkggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMkggOiAwOworCisJCS8qIGZsb2F0IFZTMSwgZHJpdmUgVlMyIGxvdyAqLworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMU9FX01BU0s7CisJCXZhbCAmPSB+UENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMUggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMUggOiAwOworCisJCS8qIGd1ZXNzIGNhcmR0eXBlIGZyb20gYWxsIHRoaXMgKi8KKwkJc2t0LT5jYXJkX3R5cGUgPSB2c2NkX3RvX2NhcmR0eXBlW3N0YXRdOworCQlpZiAoIXNrdC0+Y2FyZF90eXBlKQorCQkJZGV2X2Vycigmc2t0LT5zb2NrZXQuZGV2LCAidW5zdXBwb3J0ZWQgY2FyZCB0eXBlXG4iKTsKKworCQkvKiBkcml2ZSBib3RoIFZTIHBpbiB0byAwIGFnYWluICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9WUzFPRV9NQVNLIHwgUENNQ0lBX0MxX1ZTMk9FX01BU0spOworCisJCS8qIGVuYWJsZSBjb3JyZWN0IGxvZ2ljICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9FTl9QQ01DSUFfTUFTSyB8IFBDTUNJQV9DMV9FTl9DQVJEQlVTX01BU0spOworCQlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX1BDQ0FSRCkKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX01BU0s7CisJCWVsc2UKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fQ0FSREJVU19NQVNLOworCisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCX0KKwlza3QtPmNhcmRfZGV0ZWN0ZWQgPSAoc3RhdCAmIFNTX0RFVEVDVCkgPyAxIDogMDsKKworCS8qIHJlcG9ydCBjYXJkIHR5cGUvdm9sdGFnZSAqLworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfQ0FSREJVUykKKwkJc3RhdCB8PSBTU19DQVJEQlVTOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfM1YpCisJCXN0YXQgfD0gU1NfM1ZDQVJEOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfWFYpCisJCXN0YXQgfD0gU1NfWFZDQVJEOworCXN0YXQgfD0gU1NfUE9XRVJPTjsKKworCWlmIChncGlvX2dldF92YWx1ZShza3QtPnBkLT5yZWFkeV9ncGlvKSkKKwkJc3RhdCB8PSBTU19SRUFEWTsKKworCXJldHVybiBzdGF0OworfQorCisvKgorICogY29yZSByZXF1ZXN0IHRvIGdldCBjdXJyZW50IHNvY2tldCBzdGF0dXMKKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisJKnN0YXR1cyA9IF9fZ2V0X3NvY2tldF9zdGF0dXMoc2t0KTsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogc29ja2V0IHBvbGxpbmcgdGltZXIgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgYmNtNjN4eF9wY21jaWFfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXVuc2lnbmVkIGludCBzdGF0LCBldmVudHM7CisKKwlza3QgPSAoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqKWRhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisKKwlzdGF0ID0gX19nZXRfc29ja2V0X3N0YXR1cyhza3QpOworCisJLyoga2VlcCBvbmx5IGNoYW5nZWQgYml0cywgYW5kIG1hc2sgd2l0aCByZXF1aXJlZCBvbmUgZnJvbSB0aGUKKwkgKiBjb3JlICovCisJZXZlbnRzID0gKHN0YXQgXiBza3QtPm9sZF9zdGF0dXMpICYgc2t0LT5yZXF1ZXN0ZWRfc3RhdGUuY3NjX21hc2s7CisJc2t0LT5vbGRfc3RhdHVzID0gc3RhdDsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCWlmIChldmVudHMpCisJCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNrdC0+c29ja2V0LCBldmVudHMpOworCisJbW9kX3RpbWVyKCZza3QtPnRpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJDTTYzWFhfUENNQ0lBX1BPTExfUkFURSkpOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCS8qIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGNhbGxlZCBieSBwY21jaWEgbGF5ZXIgaWYgc3RhdGljCisJICogbWFwcGluZyBpcyB1c2VkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisJaWYgKG1hcC0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQlyZXMgPSBza3QtPmF0dHJfcmVzOworCWVsc2UKKwkJcmVzID0gc2t0LT5jb21tb25fcmVzOworCisJbWFwLT5zdGF0aWNfc3RhcnQgPSByZXMtPnN0YXJ0ICsgbWFwLT5jYXJkX3N0YXJ0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGJjbTYzeHhfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IGJjbTYzeHhfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSBiY202M3h4X3BjbWNpYV9zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IGJjbTYzeHhfcGNtY2lhX2dldF9zdGF0dXMsCisJLnNldF9zb2NrZXQJCT0gYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldCwKKwkuc2V0X2lvX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfbWVtX21hcCwKK307CisKKy8qCisgKiByZWdpc3RlciBwY21jaWEgc29ja2V0IHRvIGNvcmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJxX3JlczsKKwl1bnNpZ25lZCBpbnQgcmVnbWVtX3NpemUgPSAwLCBpb21lbV9zaXplID0gMDsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlza3QgPSBremFsbG9jKHNpemVvZigqc2t0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza3QpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZza3QtPmxvY2spOworCXNvY2sgPSAmc2t0LT5zb2NrZXQ7CisJc29jay0+ZHJpdmVyX2RhdGEgPSBza3Q7CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgcmVzb3VyY2VzIHdlIG5lZWQgKi8KKwlza3QtPmNvbW1vbl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXNrdC0+YXR0cl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCXNrdC0+cGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXNrdC0+Y29tbW9uX3JlcyB8fCAhc2t0LT5hdHRyX3JlcyB8fCAhaXJxX3JlcyB8fCAhc2t0LT5wZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiByZW1hcCBwY21jaWEgcmVnaXN0ZXJzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSwgImJjbTYzeHhfcGNtY2lhIikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXNrdC0+cmVnX3JlcyA9IHJlczsKKworCXNrdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVnbWVtX3NpemUpOworCWlmICghc2t0LT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlbWFwIGlvIHJlZ2lzdGVycyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMyk7CisJaW9tZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlza3QtPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGlvbWVtX3NpemUpOworCWlmICghc2t0LT5pb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlc291cmNlcyBhcmUgc3RhdGljICovCisJc29jay0+cmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCXNvY2stPm9wcyA9ICZiY202M3h4X3BjbWNpYV9vcGVyYXRpb25zOworCXNvY2stPm93bmVyID0gVEhJU19NT0RVTEU7CisJc29jay0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJc29jay0+ZmVhdHVyZXMgPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+aW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2t0LT5pb19iYXNlOworCXNvY2stPnBjaV9pcnEgPSBpcnFfcmVzLT5zdGFydDsKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJc29jay0+Y2JfZGV2ID0gYmNtNjN4eF9jYl9kZXY7CisJaWYgKGJjbTYzeHhfY2JfZGV2KQorCQlzb2NrLT5mZWF0dXJlcyB8PSBTU19DQVBfQ0FSREJVUzsKKyNlbmRpZgorCisJLyogYXNzdW1lIGNvbW1vbiAmIGF0dHJpYnV0ZSBtZW1vcnkgaGF2ZSB0aGUgc2FtZSBzaXplICovCisJc29jay0+bWFwX3NpemUgPSByZXNvdXJjZV9zaXplKHNrdC0+Y29tbW9uX3Jlcyk7CisKKwkvKiBpbml0aWFsaXplIHBvbGxpbmcgdGltZXIgKi8KKwlzZXR1cF90aW1lcigmc2t0LT50aW1lciwgYmNtNjN4eF9wY21jaWFfcG9sbCwgKHVuc2lnbmVkIGxvbmcpc2t0KTsKKworCS8qIGluaXRpYWxpemUgIHBjbWNpYSAgY29udHJvbCByZWdpc3RlciwgIGRyaXZlICBWU1sxMl0gdG8gIDAsCisJICogbGVhdmUgQ0IgSURTRUwgdG8gdGhlIG9sZCAgdmFsdWUgc2luY2UgaXQgaXMgc2V0IGJ5IHRoZSBQQ0kKKwkgKiBsYXllciAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCXZhbCAmPSBQQ01DSUFfQzFfQ0JJRFNFTF9NQVNLOworCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX0dQSU9fTUFTSzsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCS8qCisJICogSGFyZHdhcmUgaGFzIG9ubHkgb25lIHNldCBvZiB0aW1pbmdzIHJlZ2lzdGVycywgbm90IG9uZSBmb3IKKwkgKiBlYWNoIG1lbW9yeSBhY2Nlc3MgdHlwZSwgc28gd2UgY29uZmlndXJlIHRoZW0gZm9yIHRoZQorCSAqIHNsb3dlc3Qgb25lOiBhdHRyaWJ1dGUgbWVtb3J5LgorCSAqLworCXZhbCA9IFBDTUNJQV9DMl9EQVRBMTZfTUFTSzsKKwl2YWwgfD0gMTAgPDwgUENNQ0lBX0MyX1JXQ09VTlRfU0hJRlQ7CisJdmFsIHw9IDYgPDwgUENNQ0lBX0MyX0lOQUNUSVZFX1NISUZUOworCXZhbCB8PSAzIDw8IFBDTUNJQV9DMl9TRVRVUF9TSElGVDsKKwl2YWwgfD0gMyA8PCBQQ01DSUFfQzJfSE9MRF9TSElGVDsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzJfUkVHKTsKKworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc29jayk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBzdGFydCBwb2xsaW5nIHNvY2tldCAqLworCW1vZF90aW1lcigmc2t0LT50aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNrdCk7CisJcmV0dXJuIDA7CisKK2VycjoKKwlpZiAoc2t0LT5pb19iYXNlKQorCQlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJaWYgKHNrdC0+YmFzZSkKKwkJaW91bm1hcChza3QtPmJhc2UpOworCWlmIChza3QtPnJlZ19yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihza3QtPnJlZ19yZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSk7CisJa2ZyZWUoc2t0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiY202M3h4X2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJZGVsX3RpbWVyX3N5bmMoJnNrdC0+dGltZXIpOworCWlvdW5tYXAoc2t0LT5iYXNlKTsKKwlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJcmVzID0gc2t0LT5yZWdfcmVzOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWtmcmVlKHNrdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtNjN4eF9wY21jaWFfZHJpdmVyID0geworCS5wcm9iZQk9IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoYmNtNjN4eF9kcnZfcGNtY2lhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYmNtNjN4eF9wY21jaWEiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9jYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwkvKiBrZWVwIHBjaSBkZXZpY2UgKi8KKwliY202M3h4X2NiX2RldiA9IGRldjsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYmNtNjN4eF9jYl9leGl0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisJYmNtNjN4eF9jYl9kZXYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmNtNjN4eF9jYl90YWJsZVtdID0geworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuZGV2aWNlCQk9IEJDTTYzNDhfQ1BVX0lELAorCQkuc3VidmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5jbGFzcwkJPSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgPDwgOCwKKwkJLmNsYXNzX21hc2sJPSB+MCwKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5kZXZpY2UJCT0gQkNNNjM1OF9DUFVfSUQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmNsYXNzCQk9IFBDSV9DTEFTU19CUklER0VfQ0FSREJVUyA8PCA4LAorCQkuY2xhc3NfbWFzawk9IH4wLAorCX0sCisKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmNtNjN4eF9jYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY202M3h4X2NhcmRidXNfZHJpdmVyID0geworCS5uYW1lCQk9ICJiY202M3h4X2NhcmRidXMiLAorCS5pZF90YWJsZQk9IGJjbTYzeHhfY2JfdGFibGUsCisJLnByb2JlCQk9IGJjbTYzeHhfY2JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChiY202M3h4X2NiX2V4aXQpLAorfTsKKyNlbmRpZgorCisvKgorICogaWYgY2FyZGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIHJlZ2lzdGVyIG91ciBwbGF0Zm9ybSBkZXZpY2UgYWZ0ZXIKKyAqIG91ciBmYWtlIGNhcmRidXMgYnJpZGdlIGhhcyBiZWVuIHJlZ2lzdGVyZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9wY21jaWFfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJjbTYzeHhfY2FyZGJ1c19kcml2ZXIpOworI2Vsc2UKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiY202M3h4X3BjbWNpYV9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlyZXR1cm4gcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiY202M3h4X2NhcmRidXNfZHJpdmVyKTsKKyNlbHNlCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisjZW5kaWYKK30KKworbW9kdWxlX2luaXQoYmNtNjN4eF9wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChiY202M3h4X3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggUENNQ0lBIENhcmQgU2VydmljZXM6IGJjbTYzeHggU29ja2V0IENvbnRyb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmggYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTU3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgQkNNNjNYWF9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9QQ01DSUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KKworLyogc29ja2V0IHBvbGxpbmcgcmF0ZSBpbiBtcyAqLworI2RlZmluZSBCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUJNTAwCisKK2VudW0geworCUNBUkRfQ0FSREJVUyA9ICgxIDw8IDApLAorCUNBUkRfUENDQVJEID0gKDEgPDwgMSksCisJQ0FSRF81ViA9ICgxIDw8IDIpLAorCUNBUkRfM1YgPSAoMSA8PCAzKSwKKwlDQVJEX1hWID0gKDEgPDwgNCksCisJQ0FSRF9ZViA9ICgxIDw8IDUpLAorfTsKKworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgc29ja2V0OworCisJLyogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9wbGF0Zm9ybV9kYXRhICpwZDsKKworCS8qIGFsbCByZWdzIGFjY2VzcyBhcmUgcHJvdGVjdGVkIGJ5IHRoaXMgc3BpbmxvY2sgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwkvKiBwY21jaWEgcmVnaXN0ZXJzIHJlc291cmNlICovCisJc3RydWN0IHJlc291cmNlICpyZWdfcmVzOworCisJLyogYmFzZSByZW1hcHBlZCBhZGRyZXNzIG9mIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCS8qIHdoZXRoZXIgYSBjYXJkIGlzIGRldGVjdGVkIGF0IHRoZSBtb21lbnQgKi8KKwlpbnQgY2FyZF9kZXRlY3RlZDsKKworCS8qIHR5cGUgb2YgZGV0ZWN0ZWQgY2FyZCAobWFzayBvZiBhYm92ZSBlbnVtKSAqLworCXU4IGNhcmRfdHlwZTsKKworCS8qIGtlZXAgbGFzdCBzb2NrZXQgc3RhdHVzIHRvIGltcGxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX3N0YXR1czsKKworCS8qIGJhY2t1cCBvZiByZXF1ZXN0ZWQgc29ja2V0IHN0YXRlICovCisJc29ja2V0X3N0YXRlX3QgcmVxdWVzdGVkX3N0YXRlOworCisJLyogdGltZXIgdXNlZCBmb3Igc29ja2V0IHN0YXR1cyBwb2xsaW5nICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwkvKiBhdHRyaWJ1dGUvY29tbW9uIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmF0dHJfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqY29tbW9uX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKKworCS8qIGJhc2UgYWRkcmVzcyBvZiBpbyBtZW1vcnkgKi8KKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7Cit9OworCisjZW5kaWYgLyogQkNNNjNYWF9QQ01DSUFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCmluZGV4IGI1OWQ0MTEuLjMwMGIzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyBpbnQgYmZpbl9jZl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIG1lc2cpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGJmaW5fY2ZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDRhMTEwYjcuLjZjNGE0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0xNDYzLDcgKzE0NjMsOSBAQAogCSAgICByZXR1cm4gLUVOT01FTTsKICAgICB9CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKyAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKyAgICBpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCisJICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwogICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCSAgICBnb3RvIGRvbmU7CkBAIC0xNDkwLDcgKzE0OTIsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGludCAqaW5mbykKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7CiAgICAgdHVwbGVfdCAqdHVwbGU7CiAgICAgY2lzcGFyc2VfdCAqcDsKQEAgLTE1MTUsMzAgKzE1MTcsMzAgQEAKICAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogICAgIGlmIChyZXQgIT0gMCkKIAlnb3RvIGRvbmU7CiAKICAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKICAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCiAgICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQogCWRldl9vaysrOwogCiAgICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCiAgICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCiAgICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKyAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQogCWlkZW50X29rKys7CiAKICAgICBpZiAoIWRldl9vayAmJiAhaWRlbnRfb2spCiAJZ290byBkb25lOwogCiAgICAgZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgewotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKIAkJYnJlYWs7CiAJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCAwNjYwYWQxLi42OThkNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTk4LDEwICs5OCwxMyBAQAogICogVGhlc2UgZnVuY3Rpb25zIGNoZWNrIGZvciB0aGUgYXBwcm9wcmlhdGUgc3RydWN0IHBjbWNpYV9zb2tldCBhcnJheXMsCiAgKiBhbmQgcGFzcyB0aGVtIHRvIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHBjbWNpYV97c3VzcGVuZCxyZXN1bWV9X3NvY2tldAogICovCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitzdGF0aWMgaW50IHNvY2tldF9sYXRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKLWludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmNiKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqKSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCkBAIC0xMTAsMjkgKzExMywzNCBAQAogCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKIAkJCWNvbnRpbnVlOwogCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7CisJCWNiKHNvY2tldCk7CiAJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOworfQogCitpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X3N1c3BlbmQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKTsKIAordm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9lYXJseV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUpOworCit2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfbGF0ZV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZSk7CisKIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0KLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0JCWlmIChzb2NrZXQtPmRldi5wYXJlbnQgIT0gZGV2KQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQl9Ci0JdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQorCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9yZXN1bWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUpOwpAQCAtNTQ2LDI5ICs1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0Ci0gKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCi0gKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KLSAqLwotc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKIAlza3QtPm9wcy0+c2V0X3NvY2tldChza3QsICZza3QtPnNvY2tldCk7CisJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKKwkJc2t0LT5yZXN1bWVfc3RhdHVzID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwpAQCAtNTk2LDYgKzU5OSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVzdW1lIGEgc29ja2V0LiAgSWYgYSBjYXJkIGlzIHByZXNlbnQsIHZlcmlmeSBpdHMgQ0lTIGFnYWluc3QKKyAqIG91ciBjYWNoZWQgY29weS4gIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhlIGNhcmQgaGFzIGJlZW4KKyAqIHJlcGxhY2VkLCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXJzLgorICovCitzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc29ja2V0X2Vhcmx5X3Jlc3VtZShza3QpOworCXJldHVybiBzb2NrZXRfbGF0ZV9yZXN1bWUoc2t0KTsKK30KKwogc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDc5NjE1ZTYuLjFmNDA5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMTk3LDggKzE5Nyw3IEBACiAJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCXVuc2lnbmVkIGludCAqY291bnQpOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOwogCiAvKiByc3JjX21nci5jICovCiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCA5ZjMwMGQzLi5mNWI3MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWlmICghdmVyczEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLAogCQkJICAgICAgIENJU1RQTF9NQU5GSUQsICZtYW5mX2lkKSkgewogCQlwX2Rldi0+bWFuZl9pZCA9IG1hbmZfaWQubWFuZjsKIAkJcF9kZXYtPmNhcmRfaWQgPSBtYW5mX2lkLmNhcmQ7CkBAIC01ODEsOSArNTgxLDkgQEAKIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKLQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBDSVNUUExfVkVSU18xLAorCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7Ci0JCWZvciAoaT0wOyBpIDwgdmVyczEtPm5zOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCi0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJm5vX2NoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKIAkJZHNfZGV2X2RiZygwLCAmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggNDY1NjFmYS4uYTA0ZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaTgyMDkyYWFfc29ja2V0X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDQwZDQ5NTMuLmE0YWFjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMDUzLDggKzEwNTMsOCBAQAogICAgIHVfY2hhciBtYXAsIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywgaW8tPnNwZWVkLAorCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogICAgIG1hcCA9IGlvLT5tYXA7CiAgICAgaWYgKChtYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQAogc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjM2NV9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA2MmI0ZWNjLi43ZGZiZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTUzNyw4ICs1MzcsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMycl9jZmM6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI2x4LSUjbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCSAgaW8tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAltYXAgPSBpby0+bWFwOwogCiAJcmV0dXJuIDA7CkBAIC01NTQsOCArNTU1LDkgQEAKIAlwY2Nfc29ja2V0X3QgKnQgPSAmc29ja2V0W3NvY2tdOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAiJSNseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY5OSw3ICs3MDEsNyBAQAogc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGNmY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwppbmRleCAxMjAzNGI0Li5jNjUyNGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKQEAgLTQ5Miw4ICs0OTIsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTE1LDggKzUxNiw5IEBACiAjZW5kaWYKIAogCWRlYnVnKDMsICJtMzJyLXBjYzogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgIiUjbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCi0JCSBtZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJICIlI2xseCwgICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY3NSw3ICs2NzcsNyBAQAogc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBjY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBkMWFkMDk2Li40MDM1NTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTk3NSw4ICs5NzUsOSBAQAogI2RlZmluZSBNOFhYX0JBU0UgKFBDTUNJQV9JT19XSU5fQkFTRSArIGlvLT5zdGFydCkKIAogCWRwcmludGsoIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM0LjR4LSUjNC40eClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCWlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSIlIzQuNGxseC0lIzQuNGxseClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCWlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCiAJaWYgKChpby0+bWFwID49IFBDTUNJQV9JT19XSU5fTk8pIHx8IChpby0+c3RhcnQgPiAweGZmZmYpCiAJICAgIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkKQEAgLTEwNTUsOCArMTA1Niw5IEBACiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzLT5wY21jaWE7CiAKIAlkcHJpbnRrKCJTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzUuNWx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCi0JCW1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkiJSM1LjVsbHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKKwkJbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJbWVtLT5jYXJkX3N0YXJ0KTsKIAogCWlmICgobWVtLT5tYXAgPj0gUENNQ0lBX01FTV9XSU5fTk8pCiAvLyAgICAgICAgICB8fCAoKG1lbS0+cykgPj0gUENNQ0lBX01FTV9XSU5fU0laRSkKQEAgLTExMDcsOCArMTEwOSw5IEBACiAJfQogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKiBjb3B5IHRoZSBzdHJ1Y3QgYW5kIG1vZGlmeSB0aGUgY29weSAqLwogCkBAIC0xMjk2LDcgKzEyOTksNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtOHh4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBtOHh4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IGYzNzM2MzkuLjY4NTcwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCiBzdGF0aWMgaW50IG9tYXBfY2Zfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwX2NmX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCAzMmM0NDA0Li4zMGNmNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlwY21jaWFfdmFsaWRhdGVfbWVtKHMpOwogCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6CiAJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggOGJlZDFkYS4uNzBhMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTY0MSw2ICs2NDEsMTIgQEAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldikpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZW07CiAKKwlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogcmVmdXNpbmcgdG8gbG9hZCB0aGUgZHJpdmVyICIKKwkJCQkgImFzIHRoZSBpb19iYXNlIGlzIDAuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOworCX0KKwogCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogQ2lycnVzIFBENjcyOSBQQ0kgdG8gUENNQ0lBIEJyaWRnZSAiCiAJCSJhdCAweCVsbHggb24gaXJxICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLCBkZXYtPmlycSk7CkBAIC03NTgsNyArNzY0LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGQ2NzI5X3NvY2tldF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBkNjcyOV9zb2NrZXRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBjNDlhNzI2Li4wZTM1YWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTMwMCwyNSArMzAwLDI5IEBACiAJcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChkZXYpOwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZkZXYtPmRldik7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhkZXYpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzICBweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X3BjbWNpYV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVtb3ZlLAotCS5zdXNwZW5kIAk9IHB4YTJ4eF9kcnZfcGNtY2lhX3N1c3BlbmQsCi0JLnJlc3VtZSAJPSBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1wY21jaWEiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnB4YTJ4eF9kcnZfcGNtY2lhX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODk5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKKyAqCisgKiBEcml2ZXIgZm9yIFBhbG0gVHVuZ3N0ZW58QyBQQ01DSUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10Yy5oPgorI2luY2x1ZGUgInNvY19jb21tb24uaCIKKworc3RhdGljIGludCBwYWxtdGNfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAiUENNQ0lBIFBXUjEiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyLCAiUENNQ0lBIFBXUjIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAiUENNQ0lBIFBXUjMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsICJQQ01DSUEgUlNUIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI0OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFksICJQQ01DSUEgUkRZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSwgIlBDTUNJQSBQV1JSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjc7CisKKwlza3QtPmlycSA9IElSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJcmV0dXJuIDA7CisKK2Vycjc6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CitlcnI2OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworZXJyNToKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKK2VycjQ6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMpOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMyk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCisJCQkJCXN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5kZXRlY3QgPSAxOyAvKiBhbHdheXMgaW5zZXJ0ZWQgKi8KKwlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXN0YXRlLT5idmQxICAgPSAxOworCXN0YXRlLT5idmQyICAgPSAxOworCXN0YXRlLT53cnByb3QgPSAwOworCXN0YXRlLT52c18zdiAgPSAxOworCXN0YXRlLT52c19YdiAgPSAwOworfQorCitzdGF0aWMgaW50IHBhbG10Y193aWZpX3Bvd2VyZG93bih2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMCk7CisJbWRlbGF5KDQwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWxtdGNfd2lmaV9wb3dlcnVwKHZvaWQpCit7CisJaW50IHRpbWVvdXQgPSA1MDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDEpOworCW1kZWxheSg1MCk7CisKKwkvKiBQb3dlciB1cCB0aGUgY2FyZCwgMS44ViBmaXJzdCwgYWZ0ZXIgYSB3aGlsZSAzLjNWICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgMSk7CisJbWRlbGF5KDEwMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMSk7CisKKwkvKiBXYWl0IHRpbGwgdGhlIGNhcmQgaXMgcmVhZHkgKi8KKwl3aGlsZSAoIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSkgJiYKKwkJdGltZW91dCkgeworCQltZGVsYXkoMSk7CisJCXRpbWVvdXQtLTsKKwl9CisKKwkvKiBQb3dlciBkb3duIHRoZSBXaUZpIGluIGNhc2Ugb2YgZXJyb3IgKi8KKwlpZiAoIXRpbWVvdXQpIHsKKwkJcGFsbXRjX3dpZmlfcG93ZXJkb3duKCk7CisJCXJldHVybiAxOworCX0KKworCS8qIFJlc2V0IHRoZSBjYXJkICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAxKTsKKwltZGVsYXkoMjApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMCk7CisJbWRlbGF5KDI1KTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQljb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJaW50IHJldCA9IDE7CisKKwlpZiAoc3RhdGUtPlZjYyA9PSAwKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcmRvd24oKTsKKwllbHNlIGlmIChzdGF0ZS0+VmNjID09IDMzKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcnVwKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbXRjX3BjbWNpYV9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKworCS5maXJzdAkJCT0gMCwKKwkubnIJCQk9IDEsCisKKwkuaHdfaW5pdAkJPSBwYWxtdGNfcGNtY2lhX2h3X2luaXQsCisJLmh3X3NodXRkb3duCQk9IHBhbG10Y19wY21jaWFfaHdfc2h1dGRvd24sCisKKwkuc29ja2V0X3N0YXRlCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlLAorCS5jb25maWd1cmVfc29ja2V0CT0gcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCisJLnNvY2tldF9pbml0CQk9IHBhbG10Y19wY21jaWFfc29ja2V0X2luaXQsCisJLnNvY2tldF9zdXNwZW5kCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFsbXRjX3BjbWNpYV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhbG10Y19wY21jaWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGFsbXRjKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcGFsbXRjX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CisJaWYgKCFwYWxtdGNfcGNtY2lhX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGFsbXRjX3BjbWNpYV9kZXZpY2UsICZwYWxtdGNfcGNtY2lhX29wcywKKwkJCQkJc2l6ZW9mKHBhbG10Y19wY21jaWFfb3BzKSk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwYWxtdGNfcGNtY2lhX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBhbG10Y19wY21jaWFfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWxtdGNfcGNtY2lhX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwYWxtdGNfcGNtY2lhX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHBhbG10Y19wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChwYWxtdGNfcGNtY2lhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGV4IE9zYm9ybmUgPGF0b0BtZXNoeS5vcmc+LCIKKwkgICAgIiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgc3VwcG9ydCBmb3IgUGFsbSBUdW5nc3RlbnxDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1wY21jaWEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDljYTIyYzcuLjcwMzlmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAgICAgLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLwogICAgIGIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFiKSB7CisJICAgIHByaW50aygiXG4iKTsKIAkgICAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKIAkJICAgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NSw3ICsyNzYsNyBAQAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsIGNvdW50KTsKKwkJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBjb3VudCk7CiAJCS8qIGludmFsaWRhdGUgbWFwcGluZyBhbmQgQ0lTIGNhY2hlICovCiAJCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCQlzLT5jaXNfdmlydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYwppbmRleCBmNDI0MTQ2YS4uYWM4YWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkuc29ja2V0X3N1c3BlbmQJCT0gYXNzYWJldF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCi1pbnQgX19pbml0IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBkOGRhNWFjLi4yZDBlOTk3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMKaW5kZXggNGM0MWU4Ni4uMGM3NmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5zb2NrZXRfc3VzcGVuZCAJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogfTsKIAotaW50IF9faW5pdCBwY21jaWFfbmVwb25zZXRfaW5pdChzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYpCitpbnQgcGNtY2lhX25lcG9uc2V0X2luaXQoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2KQogewogCWludCByZXQgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYwppbmRleCA0MDEwNTJhMi4uNGJlNGUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogc3RhdGljIGludCBwY21jaWFfc3VzcGVuZChzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwY21jaWFfcmVzdW1lKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggMTYzY2Y5OC4uZWY3ZTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtMzM2LDggKzMzNiw5IEBACiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBzcGVlZCA9IG1hcC0+c3BlZWQ7CiAKLQlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgIHNwZWVkICV1IHN0YXJ0IDB4JTA4eCBzdG9wIDB4JTA4eFxuIiwKLQkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsIG1hcC0+c3RhcnQsIG1hcC0+c3RvcCk7CisJZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOGxseCBzdG9wIDB4JTA4bGx4XG4iLAorCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RvcCk7CiAJZGVidWcoc2t0LCAyLCAiZmxhZ3M6ICVzJXMlcyVzJXMlcyVzJXNcbiIsCiAJCShtYXAtPmZsYWdzPT0wKT8iPE5PTkU+IjoiIiwKIAkJKG1hcC0+ZmxhZ3MmTUFQX0FDVElWRSk/IkFDVElWRSAiOiIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCBmZjlhM2JiMy4uNzhkNWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmY2hhaW5zKSkKKwkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmNoYWlucykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKCFjaGFpbnMpCiAJCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggOGViMDQyMy4uNjkxODg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpAQCAtNzMyLDggKzczMiw4IEBACiAgICAgdV9zaG9ydCBiYXNlLCBsZW4sIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgaWYgKChpby0+bWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgVENJQ19BRFIyX0lORFJFRyB8IChwc29jayA8PCBUQ0lDX1NTX1NIRlQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggZDRhZDUwZC4uYzlmY2JkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggYjQ1OWU4Ny4uOGJlNGNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTEyMjUsNjAgKzEyMjUsODEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKIAotCWlmIChzb2NrZXQpIHsKLQkJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUpCi0JCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIHJldDsKIAotCQkvKiBGSVhNRTogcGNpX3NhdmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3NhdmVfc3RhdGUoZGV2KTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKQorCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKIAotCQkvKgotCQkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKLQkJICogYnJpZGdlIGludG8gRDMuICBBdCBhIGd1ZXNzLCBzb21lIG90aGVyIGxhcHRvcCB3aWxsCi0JCSAqIHByb2JhYmx5IHJlcXVpcmUgdGhpcywgc28gbGVhdmUgaXQgY29tbWVudGVkIG91dCBmb3Igbm93LgotCQkgKi8KLQkJLyogcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDMpOyAqLwotCX0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJLyoKKwkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKKwkgKiBicmlkZ2UgaW50byBEMy4gIEF0IGEgZ3Vlc3MsIHNvbWUgb3RoZXIgbGFwdG9wIHdpbGwKKwkgKiBwcm9iYWJseSByZXF1aXJlIHRoaXMsIHNvIGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQgZm9yIG5vdy4KKwkgKi8KKwkvKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMyk7ICovCiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CiAKLQlpZiAoc29ja2V0KSB7Ci0JCWludCByYzsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIDA7CiAKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDApOwotCQkvKiBGSVhNRTogcGNpX3Jlc3RvcmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDE2KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMTcqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAxNio0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDE3KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOwogCi0JCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCQlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKLQkJCXNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZShzb2NrZXQpOwotCX0KKwlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKKwkJc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKHNvY2tldCk7CiAKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7CisJcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKGRldik7CisJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfbGF0ZV9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHllbnRhX3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS5yZXN1bWVfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS5yZXN1bWUgPSB5ZW50YV9kZXZfcmVzdW1lLAorCS5mcmVlemVfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKKwkudGhhd19ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnRoYXcgPSB5ZW50YV9kZXZfcmVzdW1lLAorCS5wb3dlcm9mZl9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS5yZXN0b3JlX25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkucmVzdG9yZSA9IHllbnRhX2Rldl9yZXN1bWUsCit9OworCisjZGVmaW5lIFlFTlRBX1BNX09QUwkoJnllbnRhX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIFlFTlRBX1BNX09QUwlOVUxMCiAjZW5kaWYKIAogI2RlZmluZSBDQl9JRCh2ZW5kLGRldix0eXBlKQkJCQlcCkBAIC0xMzc2LDEwICsxMzk3LDcgQEAKIAkuaWRfdGFibGUJPSB5ZW50YV90YWJsZSwKIAkucHJvYmUJCT0geWVudGFfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh5ZW50YV9jbG9zZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSB5ZW50YV9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHllbnRhX2Rldl9yZXN1bWUsCi0jZW5kaWYKKwkuZHJpdmVyLnBtCT0gWUVOVEFfUE1fT1BTLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IGRhM2MwOGIuLjQyMjZlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0zNTAsMTMgKzM1MCwxNCBAQAogCS5zZXRfYmxvY2sgPSBlZWVwY19yZmtpbGxfc2V0LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVlZXBjX2VuYWJsZV9jYW1lcmEodm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCiB7CiAJLyoKIAkgKiBJZiB0aGUgZm9sbG93aW5nIGNhbGwgdG8gc2V0X2FjcGkoKSBmYWlscywgaXQncyBiZWNhdXNlIHRoZXJlJ3Mgbm8KIAkgKiBjYW1lcmEgc28gd2UgY2FuIGlnbm9yZSB0aGUgZXJyb3IuCiAJICovCi0Jc2V0X2FjcGkoQ01fQVNMX0NBTUVSQSwgMSk7CisJaWYgKGdldF9hY3BpKENNX0FTTF9DQU1FUkEpID09IDApCisJCXNldF9hY3BpKENNX0FTTF9DQU1FUkEsIDEpOwogfQogCiAvKgpAQCAtNjI0LDcgKzYyNSw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gZWVlcGNfYmFja2xpZ2h0X2RldmljZTsKIAlpZiAoYmQpIHsKIAkJaW50IG9sZCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwotCQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcyhiZCk7CisJCWJhY2tsaWdodF9mb3JjZV91cGRhdGUoYmQsIEJBQ0tMSUdIVF9VUERBVEVfSE9US0VZKTsKIAkJcmV0dXJuIG9sZDsKIAl9CiAJcmV0dXJuIC0xOwpAQCAtMTE4OSw3ICsxMTkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVlZXBjX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggZjM1YWVlNS4uYmNkNGJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC05NDQsNyArOTQ0LDcgQEAKIAlzdHJ1Y3QgZnVqaXRzdV9ob3RrZXlfdCAqZnVqaXRzdV9ob3RrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmdWppdHN1X2hvdGtleS0+aW5wdXQ7CiAKLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogCWlmIChmdWppdHN1X2hvdGtleS0+bG9nb2xhbXBfcmVnaXN0ZXJlZCkKIAkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxvZ29sYW1wX2xlZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IGFmZGJkYWFmLi5hMmE3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTEyMTEsMTUgKzEyMTEsNiBAQAogCQl9CiAJfQogCi0JLyogdHJ5IHRvIF9JTkkgdGhlIGRldmljZSBpZiBzdWNoIG1ldGhvZCBleGlzdHMgKEFDUEkgc3BlYyAzLjAtNi41LjEKLQkgKiBzaG91bGQgYmUgcmVzcGVjdGVkIGFzIHdlIGFscmVhZHkgY2hlY2tlZCBmb3IgdGhlIGRldmljZSBwcmVzZW5jZSBhYm92ZSAqLwotCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsIE1FVEhPRF9OQU1FX19JTkksICZoYW5kbGUpKSkgewotCQlkcHJpbnRrKCJJbnZva2luZyBfSU5JXG4iKTsKLQkJaWYgKEFDUElfRkFJTFVSRShhY3BpX2V2YWx1YXRlX29iamVjdChzb255X25jX2FjcGlfaGFuZGxlLCBNRVRIT0RfTkFNRV9fSU5JLAotCQkJCQkJTlVMTCwgTlVMTCkpKQotCQkJZHByaW50aygiX0lOSSBNZXRob2QgZmFpbGVkXG4iKTsKLQl9Ci0KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiRUNPTiIsCiAJCQkJCSAmaGFuZGxlKSkpIHsKIAkJaWYgKGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLCAxLCBOVUxMKSkKQEAgLTEzOTksMjcgKzEzOTAsMjAgQEAKIAlzdHJ1Y3Qgc29ueXBpX2V2ZW50CSpldmVudHM7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlX2N0cmwgewotCWludAkJCQltb2RlbDsKLQlpbnQJCQkJKCpoYW5kbGVfaXJxKShjb25zdCB1OCwgY29uc3QgdTgpOwotCXUxNgkJCQlldnBvcnRfb2Zmc2V0OwotCXU4CQkJCWhhc19jYW1lcmE7Ci0JdTgJCQkJaGFzX2JsdWV0b290aDsKLQl1OAkJCQloYXNfd3dhbjsKLQlzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMJKmV2ZW50X3R5cGVzOwotfTsKLQogc3RydWN0IHNvbnlfcGljX2RldiB7Ci0Jc3RydWN0IGRldmljZV9jdHJsCSpjb250cm9sOwotCXN0cnVjdCBhY3BpX2RldmljZQkqYWNwaV9kZXY7Ci0Jc3RydWN0IHNvbnlfcGljX2lycQkqY3VyX2lycTsKLQlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0CSpjdXJfaW9wb3J0OwotCXN0cnVjdCBsaXN0X2hlYWQJaW50ZXJydXB0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWlvcG9ydHM7Ci0Jc3RydWN0IG11dGV4CQlsb2NrOwotCXU4CQkJY2FtZXJhX3Bvd2VyOwotCXU4CQkJYmx1ZXRvb3RoX3Bvd2VyOwotCXU4CQkJd3dhbl9wb3dlcjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJCSphY3BpX2RldjsKKwlzdHJ1Y3Qgc29ueV9waWNfaXJxCQkqY3VyX2lycTsKKwlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0CQkqY3VyX2lvcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpbnRlcnJ1cHRzOworCXN0cnVjdCBsaXN0X2hlYWQJCWlvcG9ydHM7CisJc3RydWN0IG11dGV4CQkJbG9jazsKKwlzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMJKmV2ZW50X3R5cGVzOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpoYW5kbGVfaXJxKShjb25zdCB1OCwgY29uc3QgdTgpOworCWludAkJCQltb2RlbDsKKwl1MTYJCQkJZXZwb3J0X29mZnNldDsKKwl1OAkJCQljYW1lcmFfcG93ZXI7CisJdTgJCQkJYmx1ZXRvb3RoX3Bvd2VyOworCXU4CQkJCXd3YW5fcG93ZXI7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNvbnlfcGljX2RldiBzcGljX2RldiA9IHsKQEAgLTE0MjcsNiArMTQxMSw4IEBACiAJLmlvcG9ydHMJPSBMSVNUX0hFQURfSU5JVChzcGljX2Rldi5pb3BvcnRzKSwKIH07CiAKK3N0YXRpYyBpbnQgc3BpY19kcnZfcmVnaXN0ZXJlZDsKKwogLyogRXZlbnQgbWFza3MgKi8KICNkZWZpbmUgU09OWVBJX0pPR0dFUl9NQVNLCQkJMHgwMDAwMDAwMQogI2RlZmluZSBTT05ZUElfQ0FQVFVSRV9NQVNLCQkJMHgwMDAwMDAwMgpAQCAtMTcyNCwyNyArMTcxMCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2N0cmwgc3BpY190eXBlc1tdID0gewotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMSwKLQkJLmhhbmRsZV9pcnEgPSBOVUxMLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMV9PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUxX2V2ZW50cywKLQl9LAotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMiwKLQkJLmhhbmRsZV9pcnEgPSBOVUxMLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMl9PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUyX2V2ZW50cywKLQl9LAotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMywKLQkJLmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50cywKLQl9LAotfTsKLQogc3RhdGljIHZvaWQgc29ueV9waWNfZGV0ZWN0X2RldmljZV90eXBlKHN0cnVjdCBzb255X3BpY19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwpAQCAtMTc1Miw0OCArMTcxNyw2MyBAQAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMywgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1swXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMV9PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMV9ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTI7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMl9PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNCwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIGRlZmF1bHQgKi8KLQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1sxXTsKKwlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMjsKKwlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VUOworCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHM7CiAKIG91dDoKIAlpZiAocGNpZGV2KQogCQlwY2lfZGV2X3B1dChwY2lkZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYICJkZXRlY3RlZCBUeXBlJWQgbW9kZWxcbiIsCi0JCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEgPyAxIDoKLQkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOiAzKTsKKwkJCWRldi0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSA/IDEgOgorCQkJZGV2LT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUyID8gMiA6IDMpOwogfQogCiAvKiBjYW1lcmEgdGVzdHMgYW5kIHBvd2Vyb24vcG93ZXJvZmYgKi8KQEAgLTI1NjYsNyArMjU0Niw3IEBACiAJYnVmZmVyLnBvaW50ZXIgPSByZXNvdXJjZTsKIAogCS8qIHNldHVwIFR5cGUgMSByZXNvdXJjZXMgKi8KLQlpZiAoc3BpY19kZXYuY29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSkgeworCWlmIChzcGljX2Rldi5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxKSB7CiAKIAkJLyogc2V0dXAgaW8gcmVzb3VyY2VzICovCiAJCXJlc291cmNlLT5yZXMxLnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfSU87CkBAIC0yNjQ5LDI5ICsyNjI5LDI4IEBACiAJCWRhdGFfbWFzayA9IGluYl9wKGRldi0+Y3VyX2lvcG9ydC0+aW8yLm1pbmltdW0pOwogCWVsc2UKIAkJZGF0YV9tYXNrID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArCi0JCQkJZGV2LT5jb250cm9sLT5ldnBvcnRfb2Zmc2V0KTsKKwkJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCiAJZHByaW50aygiZXZlbnQgKFslLjJ4XSBbJS4yeF0pIGF0IHBvcnQgMHglLjR4KCsweCUuMngpXG4iLAogCQkJZXYsIGRhdGFfbWFzaywgZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSwKLQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCiAJaWYgKGV2ID09IDB4MDAgfHwgZXYgPT0gMHhmZikKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JZm9yIChpID0gMDsgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5tYXNrOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkZXYtPmV2ZW50X3R5cGVzW2ldLm1hc2s7IGkrKykgewogCi0JCWlmICgoZGF0YV9tYXNrICYgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5kYXRhKSAhPQotCQkgICAgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5kYXRhKQorCQlpZiAoKGRhdGFfbWFzayAmIGRldi0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkgIT0KKwkJICAgIGRldi0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghKG1hc2sgJiBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLm1hc2spKQorCQlpZiAoIShtYXNrICYgZGV2LT5ldmVudF90eXBlc1tpXS5tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWZvciAoaiA9IDA7IGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OyBqKyspIHsKLQkJCWlmIChldiA9PSBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5kYXRhKSB7CisJCWZvciAoaiA9IDA7IGRldi0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OyBqKyspIHsKKwkJCWlmIChldiA9PSBkZXYtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5kYXRhKSB7CiAJCQkJZGV2aWNlX2V2ZW50ID0KLQkJCQkJZGV2LT5jb250cm9sLT4KLQkJCQkJCWV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsKKwkJCQkJZGV2LT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQpAQCAtMjY3OSwxMyArMjY1OCwxMiBAQAogCS8qIFN0aWxsIG5vdCBhYmxlIHRvIGRlY29kZSB0aGUgZXZlbnQgdHJ5IHRvIHBhc3MKIAkgKiBpdCBvdmVyIHRvIHRoZSBtaW5pZHJpdmVyCiAJICovCi0JaWYgKGRldi0+Y29udHJvbC0+aGFuZGxlX2lycSAmJgotCQkJZGV2LT5jb250cm9sLT5oYW5kbGVfaXJxKGRhdGFfbWFzaywgZXYpID09IDApCisJaWYgKGRldi0+aGFuZGxlX2lycSAmJiBkZXYtPmhhbmRsZV9pcnEoZGF0YV9tYXNrLCBldikgPT0gMCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJZHByaW50aygidW5rbm93biBldmVudCAoWyUuMnhdIFslLjJ4XSkgYXQgcG9ydCAweCUuNHgoKzB4JS4yeClcbiIsCiAJCQlldiwgZGF0YV9tYXNrLCBkZXYtPmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtLAotCQkJZGV2LT5jb250cm9sLT5ldnBvcnRfb2Zmc2V0KTsKKwkJCWRldi0+ZXZwb3J0X29mZnNldCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogCiBmb3VuZDoKQEAgLTI4MTYsNyArMjc5NCw3IEBACiAJLyogcmVxdWVzdCBJUlEgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaXJxLCAmc3BpY19kZXYuaW50ZXJydXB0cywgbGlzdCkgewogCQlpZiAoIXJlcXVlc3RfaXJxKGlycS0+aXJxLmludGVycnVwdHNbMF0sIHNvbnlfcGljX2lycSwKLQkJCQkJSVJRRl9TSEFSRUQsICJzb255LWxhcHRvcCIsICZzcGljX2RldikpIHsKKwkJCQkJSVJRRl9ESVNBQkxFRCwgInNvbnktbGFwdG9wIiwgJnNwaWNfZGV2KSkgewogCQkJZHByaW50aygiSVJROiAlZCAtIHRyaWdnZXJpbmc6ICVkIC0gIgogCQkJCQkicG9sYXJpdHk6ICVkIC0gc2hyOiAlZFxuIiwKIAkJCQkJaXJxLT5pcnEuaW50ZXJydXB0c1swXSwKQEAgLTI5NDksNiArMjkyNyw3IEBACiAJCQkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgU1BJQyBkcml2ZXIuIik7CiAJCQlnb3RvIG91dDsKIAkJfQorCQlzcGljX2Rydl9yZWdpc3RlcmVkID0gMTsKIAl9CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfbmNfZHJpdmVyKTsKQEAgLTI5NjAsNyArMjkzOSw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZ2lzdGVyX3BpYzoKLQlpZiAoIW5vX3NwaWMpCisJaWYgKHNwaWNfZHJ2X3JlZ2lzdGVyZWQpCiAJCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzb255X3BpY19kcml2ZXIpOwogb3V0OgogCXJldHVybiByZXN1bHQ7CkBAIC0yOTY5LDcgKzI5NDgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNvbnlfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9uY19kcml2ZXIpOwotCWlmICghbm9fc3BpYykKKwlpZiAoc3BpY19kcnZfcmVnaXN0ZXJlZCkKIAkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfcGljX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBmNzhkMjc1Li5kOTMxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2RlZmluZSBUUEFDUElfVkVSU0lPTiAiMC4yMyIKLSNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjA0MDAKKyNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjA1MDAKIAogLyoKICAqICBDaGFuZ2Vsb2c6CkBAIC0xNDUsNiArMTQ1LDUxIEBACiAJVFBfQUNQSV9XR1NWX1NUQVRFX1VXQlBXUgk9IDB4MDAyMCwgLyogVVdCIHJhZGlvIGVuYWJsZWQgKi8KIH07CiAKKy8qIEhLRVkgZXZlbnRzICovCitlbnVtIHRwYWNwaV9oa2V5X2V2ZW50X3QgeworCS8qIEhvdGtleS1yZWxhdGVkICovCisJVFBfSEtFWV9FVl9IT1RLRVlfQkFTRQkJPSAweDEwMDEsIC8qIGZpcnN0IGhvdGtleSAoRk4rRjEpICovCisJVFBfSEtFWV9FVl9CUkdIVF9VUAkJPSAweDEwMTAsIC8qIEJyaWdodG5lc3MgdXAgKi8KKwlUUF9IS0VZX0VWX0JSR0hUX0RPV04JCT0gMHgxMDExLCAvKiBCcmlnaHRuZXNzIGRvd24gKi8KKwlUUF9IS0VZX0VWX1ZPTF9VUAkJPSAweDEwMTUsIC8qIFZvbHVtZSB1cCBvciB1bm11dGUgKi8KKwlUUF9IS0VZX0VWX1ZPTF9ET1dOCQk9IDB4MTAxNiwgLyogVm9sdW1lIGRvd24gb3IgdW5tdXRlICovCisJVFBfSEtFWV9FVl9WT0xfTVVURQkJPSAweDEwMTcsIC8qIE1peGVyIG91dHB1dCBtdXRlICovCisKKwkvKiBSZWFzb25zIGZvciB3YWtpbmcgdXAgZnJvbSBTMy9TNCAqLworCVRQX0hLRVlfRVZfV0tVUF9TM19VTkRPQ0sJPSAweDIzMDQsIC8qIHVuZG9jayByZXF1ZXN0ZWQsIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X1VORE9DSwk9IDB4MjQwNCwgLyogdW5kb2NrIHJlcXVlc3RlZCwgUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfQkFZRUoJPSAweDIzMDUsIC8qIGJheSBlamVjdGlvbiByZXEsIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X0JBWUVKCT0gMHgyNDA1LCAvKiBiYXkgZWplY3Rpb24gcmVxLCBTNCAqLworCVRQX0hLRVlfRVZfV0tVUF9TM19CQVRMT1cJPSAweDIzMTMsIC8qIGJhdHRlcnkgZW1wdHksIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X0JBVExPVwk9IDB4MjQxMywgLyogYmF0dGVyeSBlbXB0eSwgUzQgKi8KKworCS8qIEF1dG8tc2xlZXAgYWZ0ZXIgZWplY3QgcmVxdWVzdCAqLworCVRQX0hLRVlfRVZfQkFZRUpfQUNLCQk9IDB4MzAwMywgLyogYmF5IGVqZWN0aW9uIGNvbXBsZXRlICovCisJVFBfSEtFWV9FVl9VTkRPQ0tfQUNLCQk9IDB4NDAwMywgLyogdW5kb2NrIGNvbXBsZXRlICovCisKKwkvKiBNaXNjIGJheSBldmVudHMgKi8KKwlUUF9IS0VZX0VWX09QVERSVl9FSgkJPSAweDMwMDYsIC8qIG9wdC4gZHJpdmUgdHJheSBlamVjdGVkICovCisKKwkvKiBVc2VyLWludGVyZmFjZSBldmVudHMgKi8KKwlUUF9IS0VZX0VWX0xJRF9DTE9TRQkJPSAweDUwMDEsIC8qIGxhcHRvcCBsaWQgY2xvc2VkICovCisJVFBfSEtFWV9FVl9MSURfT1BFTgkJPSAweDUwMDIsIC8qIGxhcHRvcCBsaWQgb3BlbmVkICovCisJVFBfSEtFWV9FVl9UQUJMRVRfVEFCTEVUCT0gMHg1MDA5LCAvKiB0YWJsZXQgc3dpdmVsIHVwICovCisJVFBfSEtFWV9FVl9UQUJMRVRfTk9URUJPT0sJPSAweDUwMGEsIC8qIHRhYmxldCBzd2l2ZWwgZG93biAqLworCVRQX0hLRVlfRVZfUEVOX0lOU0VSVEVECQk9IDB4NTAwYiwgLyogdGFibGV0IHBlbiBpbnNlcnRlZCAqLworCVRQX0hLRVlfRVZfUEVOX1JFTU9WRUQJCT0gMHg1MDBjLCAvKiB0YWJsZXQgcGVuIHJlbW92ZWQgKi8KKwlUUF9IS0VZX0VWX0JSR0hUX0NIQU5HRUQJPSAweDUwMTAsIC8qIGJhY2tsaWdodCBjb250cm9sIGV2ZW50ICovCisKKwkvKiBUaGVybWFsIGV2ZW50cyAqLworCVRQX0hLRVlfRVZfQUxBUk1fQkFUX0hPVAk9IDB4NjAxMSwgLyogYmF0dGVyeSB0b28gaG90ICovCisJVFBfSEtFWV9FVl9BTEFSTV9CQVRfWEhPVAk9IDB4NjAxMiwgLyogYmF0dGVyeSBjcml0aWNhbGx5IGhvdCAqLworCVRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX0hPVAk9IDB4NjAyMSwgLyogc2Vuc29yIHRvbyBob3QgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9YSE9UCT0gMHg2MDIyLCAvKiBzZW5zb3IgY3JpdGljYWxseSBob3QgKi8KKwlUUF9IS0VZX0VWX1RITV9UQUJMRV9DSEFOR0VECT0gMHg2MDMwLCAvKiB0aGVybWFsIHRhYmxlIGNoYW5nZWQgKi8KKworCS8qIE1pc2MgKi8KKwlUUF9IS0VZX0VWX1JGS0lMTF9DSEFOR0VECT0gMHg3MDAwLCAvKiByZmtpbGwgc3dpdGNoIGNoYW5nZWQgKi8KK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWluIGRyaXZlcgogICovCkBAIC0xODQ4LDYgKzE4OTMsMjcgQEAKICAqIEhvdGtleSBzdWJkcml2ZXIKICAqLwogCisvKgorICogVGhpbmtQYWQgZmlybXdhcmUgZXZlbnQgbW9kZWwKKyAqCisgKiBUaGUgVGhpbmtQYWQgZmlybXdhcmUgaGFzIHR3byBtYWluIGV2ZW50IGludGVyZmFjZXM6IG5vcm1hbCBBQ1BJCisgKiBub3RpZmljYXRpb25zICh3aGljaCBmb2xsb3cgdGhlIEFDUEkgc3RhbmRhcmQpLCBhbmQgYSBwcml2YXRlIGV2ZW50CisgKiBpbnRlcmZhY2UuCisgKgorICogVGhlIHByaXZhdGUgZXZlbnQgaW50ZXJmYWNlIGFsc28gaXNzdWVzIGV2ZW50cyBmb3IgdGhlIGhvdGtleXMuICBBcworICogdGhlIGRyaXZlciBnYWluZWQgZmVhdHVyZXMsIHRoZSBldmVudCBoYW5kbGluZyBjb2RlIGVuZGVkIHVwIGJlaW5nCisgKiBidWlsdCBhcm91bmQgdGhlIGhvdGtleSBzdWJkcml2ZXIuICBUaGlzIHdpbGwgbmVlZCB0byBiZSByZWZhY3RvcmVkCisgKiB0byBhIG1vcmUgZm9ybWFsIGV2ZW50IEFQSSBldmVudHVhbGx5LgorICoKKyAqIFNvbWUgImhvdGtleXMiIGFyZSBhY3R1YWxseSBzdXBwb3NlZCB0byBiZSB1c2VkIGFzIGV2ZW50IHJlcG9ydHMsCisgKiBzdWNoIGFzICJicmlnaHRuZXNzIGhhcyBjaGFuZ2VkIiwgInZvbHVtZSBoYXMgY2hhbmdlZCIsIGRlcGVuZGluZyBvbgorICogdGhlIFRoaW5rUGFkIG1vZGVsIGFuZCBob3cgdGhlIGZpcm13YXJlIGlzIG9wZXJhdGluZy4KKyAqCisgKiBVbmxpa2Ugb3RoZXIgY2xhc3NlcywgaG90a2V5LWNsYXNzIGV2ZW50cyBoYXZlIG1hc2svdW5tYXNrIGNvbnRyb2wgb24KKyAqIG5vbi1hbmNpZW50IGZpcm13YXJlLiAgSG93ZXZlciwgaG93IGl0IGJlaGF2ZXMgY2hhbmdlcyBhIGxvdCB3aXRoIHRoZQorICogZmlybXdhcmUgbW9kZWwgYW5kIHZlcnNpb24uCisgKi8KKwogZW51bSB7CS8qIGhvdCBrZXkgc2NhbiBjb2RlcyAoZGVyaXZlZCBmcm9tIEFDUEkgRFNEVCkgKi8KIAlUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GMQkJPSAwLAogCVRQX0FDUElfSE9US0VZU0NBTl9GTkYyLApAQCAtMTg3NSw3ICsxOTQxLDcgQEAKIAlUUF9BQ1BJX0hPVEtFWVNDQU5fVEhJTktQQUQsCiB9OwogCi1lbnVtIHsJLyogS2V5cyBhdmFpbGFibGUgdGhyb3VnaCBOVlJBTSBwb2xsaW5nICovCitlbnVtIHsJLyogS2V5cy9ldmVudHMgYXZhaWxhYmxlIHRocm91Z2ggTlZSQU0gcG9sbGluZyAqLwogCVRQQUNQSV9IS0VZX05WUkFNX0tOT1dOX01BU0sgPSAweDAwZmI4OGMwVSwKIAlUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sgID0gMHgwMGZiODAwMFUsCiB9OwpAQCAtMTkzMCw4ICsxOTk2LDExIEBACiBzdGF0aWMgc3RydWN0IG11dGV4IGhvdGtleV90aHJlYWRfbXV0ZXg7CiAKIC8qCi0gKiBBY3F1aXJlIG11dGV4IHRvIHdyaXRlIHBvbGxlciBjb250cm9sIHZhcmlhYmxlcy4KLSAqIEluY3JlbWVudCBob3RrZXlfY29uZmlnX2NoYW5nZSB3aGVuIGNoYW5naW5nIHRoZW0uCisgKiBBY3F1aXJlIG11dGV4IHRvIHdyaXRlIHBvbGxlciBjb250cm9sIHZhcmlhYmxlcyBhcyBhbgorICogYXRvbWljIGJsb2NrLgorICoKKyAqIEluY3JlbWVudCBob3RrZXlfY29uZmlnX2NoYW5nZSB3aGVuIGNoYW5naW5nIHRoZW0gaWYgeW91CisgKiB3YW50IHRoZSBrdGhyZWFkIHRvIGZvcmdldCBvbGQgc3RhdGUuCiAgKgogICogU2VlIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQvSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKICAqLwpAQCAtMTk0Miw2ICsyMDExLDExIEBACiAgKiBob3RrZXkgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzCiAgKgogICogTXVzdCBiZSBhdG9taWMgb3IgcmVhZGVycyB3aWxsIGFsc28gbmVlZCB0byBhY3F1aXJlIG11dGV4CisgKgorICogSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVC9IT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorICogc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBjaGFuZ2VzIG5lZWQgdG8gYmUgdGFrZW4gYXMKKyAqIGEgYmxvY2ssIE9SIHdoZW4gb25lIG5lZWRzIHRvIGZvcmNlIHRoZSBrdGhyZWFkIHRvIGZvcmdldAorICogb2xkIHN0YXRlLgogICovCiBzdGF0aWMgdTMyIGhvdGtleV9zb3VyY2VfbWFzazsJCS8qIGJpdCBtYXNrIDA9QUNQSSwxPU5WUkFNICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGhvdGtleV9wb2xsX2ZyZXEgPSAxMDsgLyogSHogKi8KQEAgLTE5NzIsMTAgKzIwNDYsMTIgQEAKIAogc3RhdGljIGludCBob3RrZXlfYXV0b3NsZWVwX2FjazsKIAotc3RhdGljIHUzMiBob3RrZXlfb3JpZ19tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfYWxsX21hc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9yZXNlcnZlZF9tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfbWFzazsKK3N0YXRpYyB1MzIgaG90a2V5X29yaWdfbWFzazsJCS8qIGV2ZW50cyB0aGUgQklPUyBoYWQgZW5hYmxlZCAqLworc3RhdGljIHUzMiBob3RrZXlfYWxsX21hc2s7CQkvKiBhbGwgZXZlbnRzIHN1cHBvcnRlZCBpbiBmdyAqLworc3RhdGljIHUzMiBob3RrZXlfcmVzZXJ2ZWRfbWFzazsJLyogZXZlbnRzIGJldHRlciBsZWZ0IGRpc2FibGVkICovCitzdGF0aWMgdTMyIGhvdGtleV9kcml2ZXJfbWFzazsJCS8qIGV2ZW50cyBuZWVkZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHUzMiBob3RrZXlfdXNlcl9tYXNrOwkJLyogZXZlbnRzIHZpc2libGUgdG8gdXNlcnNwYWNlICovCitzdGF0aWMgdTMyIGhvdGtleV9hY3BpX21hc2s7CQkvKiBldmVudHMgZW5hYmxlZCBpbiBmaXJtd2FyZSAqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGhvdGtleV9yZXBvcnRfbW9kZTsKIApAQCAtMTk4Myw2ICsyMDU5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfc2V0ICpob3RrZXlfZGV2X2F0dHJpYnV0ZXM7CiAKK3N0YXRpYyB2b2lkIHRwYWNwaV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IGhrZXlfZXZlbnQpOworc3RhdGljIHZvaWQgaG90a2V5X2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpOworCiAvKiBIS0VZLk1IS0coKSByZXR1cm4gYml0cyAqLwogI2RlZmluZSBUUF9IT1RLRVlfVEFCTEVUX01BU0sgKDEgPDwgMykKIApAQCAtMjAxNywyNCArMjA5Niw1MyBAQAogfQogCiAvKgorICogUmVhZHMgY3VycmVudCBldmVudCBtYXNrIGZyb20gZmlybXdhcmUsIGFuZCB1cGRhdGVzCisgKiBob3RrZXlfYWNwaV9tYXNrIGFjY29yZGluZ2x5LiAgQWxzbyByZXNldHMgYW55IGJpdHMKKyAqIGZyb20gaG90a2V5X3VzZXJfbWFzayB0aGF0IGFyZSB1bmF2YWlsYWJsZSB0byBiZQorICogZGVsaXZlcmVkIChzaGFkb3cgcmVxdWlyZW1lbnQgb2YgdGhlIHVzZXJzcGFjZSBBQkkpLgorICoKICAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IGhvdGtleV9tYXNrX2dldCh2b2lkKQogewotCXUzMiBtID0gMDsKLQogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQl1MzIgbSA9IDA7CisKIAkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmbSwgIkRIS04iLCAiZCIpKQogCQkJcmV0dXJuIC1FSU87CisKKwkJaG90a2V5X2FjcGlfbWFzayA9IG07CisJfSBlbHNlIHsKKwkJLyogbm8gbWFzayBzdXBwb3J0IGRvZXNuJ3QgbWVhbiBubyBldmVudCBzdXBwb3J0Li4uICovCisJCWhvdGtleV9hY3BpX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CiAJfQotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKLQlob3RrZXlfbWFzayA9IG0gfCAoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2spOwotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECisKKwkvKiBzeW5jIHVzZXJzcGFjZS12aXNpYmxlIG1hc2sgKi8KKwlob3RrZXlfdXNlcl9tYXNrICY9IChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKTsKIAogCXJldHVybiAwOwogfQogCit2b2lkIHN0YXRpYyBob3RrZXlfbWFza193YXJuX2luY29tcGxldGVfbWFzayh2b2lkKQoreworCS8qIGxvZyBvbmx5IHdoYXQgdGhlIHVzZXIgY2FuIGZpeC4uLiAqLworCWNvbnN0IHUzMiB3YW50ZWRtYXNrID0gaG90a2V5X2RyaXZlcl9tYXNrICYKKwkJfihob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKSAmCisJCShob3RrZXlfYWxsX21hc2sgfCBUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLKTsKKworCWlmICh3YW50ZWRtYXNrKQorCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkJInJlcXVpcmVkIGV2ZW50cyAweCUwOHggbm90IGVuYWJsZWQhXG4iLAorCQkJd2FudGVkbWFzayk7Cit9CisKIC8qCisgKiBTZXQgdGhlIGZpcm13YXJlIG1hc2sgd2hlbiBzdXBwb3J0ZWQKKyAqCisgKiBBbHNvIGNhbGxzIGhvdGtleV9tYXNrX2dldCB0byB1cGRhdGUgaG90a2V5X2FjcGlfbWFzay4KKyAqCisgKiBOT1RFOiBkb2VzIG5vdCBzZXQgYml0cyBpbiBob3RrZXlfdXNlcl9tYXNrLCBidXQgbWF5IHJlc2V0IHRoZW0uCisgKgogICogQ2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgaG90a2V5X21hc2tfc2V0KHUzMiBtYXNrKQpAQCAtMjA0Miw2NiArMjE1MCwxMDAgQEAKIAlpbnQgaTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWlmICghdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmICYmCi0JCSAgICAobWFzayA9PSAweGZmZmYgfHwgbWFzayA9PSAweGZmZmZmZiB8fAotCQkgICAgIG1hc2sgPT0gMHhmZmZmZmZmZikpIHsKLQkJCXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiA9IDE7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJzZXR0aW5nIHRoZSBob3RrZXkgbWFzayB0byAweCUwOHggaXMgbGlrZWx5ICIKLQkJCSAgICAgICAibm90IHRoZSBiZXN0IHdheSB0byBnbyBhYm91dCBpdFxuIiwgbWFzayk7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIGRyaXZlciBkZWZhdWx0cywgIgotCQkJICAgICAgICJhbmQgcmVmZXIgdG8gdXAtdG8tZGF0ZSB0aGlua3BhZC1hY3BpICIKLQkJCSAgICAgICAiZG9jdW1lbnRhdGlvblxuIik7Ci0JCX0KKwljb25zdCB1MzIgZndtYXNrID0gbWFzayAmIH5ob3RrZXlfc291cmNlX21hc2s7CiAKLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQkJdTMyIG0gPSAxIDw8IGk7Ci0JCQkvKiBlbmFibGUgaW4gZmlybXdhcmUgbWFzayBvbmx5IGtleXMgbm90IGluIE5WUkFNCi0JCQkgKiBtb2RlLCBidXQgZW5hYmxlIHRoZSBrZXkgaW4gdGhlIGNhY2hlZCBob3RrZXlfbWFzawotCQkJICogcmVnYXJkbGVzcyBvZiBtb2RlLCBvciB0aGUga2V5IHdpbGwgZW5kIHVwCi0JCQkgKiBkaXNhYmxlZCBieSBob3RrZXlfbWFza19nZXQoKSAqLwogCQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLAogCQkJCQlOVUxMLCAiTUhLTSIsICJ2ZGQiLCBpICsgMSwKLQkJCQkJISEoKG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrKSAmIG0pKSkgeworCQkJCQkhIShtYXNrICYgKDEgPDwgaSkpKSkgewogCQkJCXJjID0gLUVJTzsKIAkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaG90a2V5X21hc2sgPSAoaG90a2V5X21hc2sgJiB+bSkgfCAobWFzayAmIG0pOwogCQkJfQogCQl9Ci0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECi0KLQkJLyogaG90a2V5X21hc2tfZ2V0IG11c3QgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLwotCQlpZiAoIWhvdGtleV9tYXNrX2dldCgpICYmICFyYyAmJgotCQkgICAgKGhvdGtleV9tYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzaykgIT0KLQkJICAgICAobWFzayAmIH5ob3RrZXlfc291cmNlX21hc2spKSB7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJyZXF1ZXN0ZWQgaG90IGtleSBtYXNrIDB4JTA4eCwgYnV0ICIKLQkJCSAgICAgICAiZmlybXdhcmUgZm9yY2VkIGl0IHRvIDB4JTA4eFxuIiwKLQkJCSAgICAgICBtYXNrLCBob3RrZXlfbWFzayk7Ci0JCX0KLQl9IGVsc2UgewotI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCi0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKLQkJaG90a2V5X21hc2sgPSBtYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOwotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotCQlob3RrZXlfbWFza19nZXQoKTsKLQkJaWYgKGhvdGtleV9tYXNrICE9IG1hc2spIHsKLQkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkgICAgICAgInJlcXVlc3RlZCBob3Qga2V5IG1hc2sgMHglMDh4LCAiCi0JCQkgICAgICAgImZvcmNlZCB0byAweCUwOHggKE5WUkFNIHBvbGwgbWFzayBpcyAiCi0JCQkgICAgICAgIjB4JTA4eCk6IG5vIGZpcm13YXJlIG1hc2sgc3VwcG9ydFxuIiwKLQkJCSAgICAgICBtYXNrLCBob3RrZXlfbWFzaywgaG90a2V5X3NvdXJjZV9tYXNrKTsKLQkJfQotI2Vsc2UKLQkJaG90a2V5X21hc2tfZ2V0KCk7Ci0JCXJjID0gLUVOWElPOwotI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCiAJfQogCisJLyoKKwkgKiBXZSAqbXVzdCogbWFrZSBhbiBpbmNvbmRpdGlvbmFsIGNhbGwgdG8gaG90a2V5X21hc2tfZ2V0IHRvCisJICogcmVmcmVzaCBob3RrZXlfYWNwaV9tYXNrIGFuZCB1cGRhdGUgaG90a2V5X3VzZXJfbWFzaworCSAqCisJICogVGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gYWxzbyBsb2cgd2hlbiB3ZSBjYW5ub3QgX2VuYWJsZV8KKwkgKiBhIGdpdmVuIGV2ZW50LgorCSAqLworCWlmICghaG90a2V5X21hc2tfZ2V0KCkgJiYgIXJjICYmIChmd21hc2sgJiB+aG90a2V5X2FjcGlfbWFzaykpIHsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJhc2tlZCBmb3IgaG90a2V5IG1hc2sgMHglMDh4LCBidXQgIgorCQkgICAgICAgImZpcm13YXJlIGZvcmNlZCBpdCB0byAweCUwOHhcbiIsCisJCSAgICAgICBmd21hc2ssIGhvdGtleV9hY3BpX21hc2spOworCX0KKworCWhvdGtleV9tYXNrX3dhcm5faW5jb21wbGV0ZV9tYXNrKCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTZXRzIGhvdGtleV91c2VyX21hc2sgYW5kIHRyaWVzIHRvIHNldCB0aGUgZmlybXdhcmUgbWFzaworICoKKyAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAorICovCitzdGF0aWMgaW50IGhvdGtleV91c2VyX21hc2tfc2V0KGNvbnN0IHUzMiBtYXNrKQoreworCWludCByYzsKKworCS8qIEdpdmUgcGVvcGxlIGEgY2hhbmNlIHRvIG5vdGljZSB0aGV5IGFyZSBkb2luZyBzb21ldGhpbmcgdGhhdAorCSAqIGlzIGJvdW5kIHRvIGdvIGJvb20gb24gdGhlaXIgdXNlcnMgc29vbmVyIG9yIGxhdGVyICovCisJaWYgKCF0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgJiYKKwkgICAgKG1hc2sgPT0gMHhmZmZmIHx8IG1hc2sgPT0gMHhmZmZmZmYgfHwKKwkgICAgIG1hc2sgPT0gMHhmZmZmZmZmZikpIHsKKwkJdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmID0gMTsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJzZXR0aW5nIHRoZSBob3RrZXkgbWFzayB0byAweCUwOHggaXMgbGlrZWx5ICIKKwkJICAgICAgICJub3QgdGhlIGJlc3Qgd2F5IHRvIGdvIGFib3V0IGl0XG4iLCBtYXNrKTsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIGRyaXZlciBkZWZhdWx0cywgIgorCQkgICAgICAgImFuZCByZWZlciB0byB1cC10by1kYXRlIHRoaW5rcGFkLWFjcGkgIgorCQkgICAgICAgImRvY3VtZW50YXRpb25cbiIpOworCX0KKworCS8qIFRyeSB0byBlbmFibGUgd2hhdCB0aGUgdXNlciBhc2tlZCBmb3IsIHBsdXMgd2hhdGV2ZXIgd2UgbmVlZC4KKwkgKiB0aGlzIHN5bmNzIGV2ZXJ5dGhpbmcgYnV0IHdvbid0IGVuYWJsZSBiaXRzIGluIGhvdGtleV91c2VyX21hc2sgKi8KKwlyYyA9IGhvdGtleV9tYXNrX3NldCgobWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJiB+aG90a2V5X3NvdXJjZV9tYXNrKTsKKworCS8qIEVuYWJsZSB0aGUgYXZhaWxhYmxlIGJpdHMgaW4gaG90a2V5X3VzZXJfbWFzayAqLworCWhvdGtleV91c2VyX21hc2sgPSBtYXNrICYgKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogU2V0cyB0aGUgZHJpdmVyIGhvdGtleSBtYXNrLgorICoKKyAqIENhbiBiZSBjYWxsZWQgZXZlbiBpZiB0aGUgaG90a2V5IHN1YmRyaXZlciBpcyBpbmFjdGl2ZQorICovCitzdGF0aWMgaW50IHRwYWNwaV9ob3RrZXlfZHJpdmVyX21hc2tfc2V0KGNvbnN0IHUzMiBtYXNrKQoreworCWludCByYzsKKworCS8qIERvIHRoZSByaWdodCB0aGluZyBpZiBob3RrZXlfaW5pdCBoYXMgbm90IGJlZW4gY2FsbGVkIHlldCAqLworCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KSB7CisJCWhvdGtleV9kcml2ZXJfbWFzayA9IG1hc2s7CisJCXJldHVybiAwOworCX0KKworCW11dGV4X2xvY2soJmhvdGtleV9tdXRleCk7CisKKwlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCisJaG90a2V5X2RyaXZlcl9tYXNrID0gbWFzazsKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAorCWhvdGtleV9zb3VyY2VfbWFzayB8PSAobWFzayAmIH5ob3RrZXlfYWxsX21hc2spOworI2VuZGlmCisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKKworCXJjID0gaG90a2V5X21hc2tfc2V0KChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X2RyaXZlcl9tYXNrKSAmCisJCQkJCQkJfmhvdGtleV9zb3VyY2VfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOworCiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMTM3LDExICsyMjc5LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB0cGFjcGlfaW5wdXRfc2VuZF9rZXkodW5zaWduZWQgaW50IHNjYW5jb2RlKQorLyogRG8gTk9UIGNhbGwgd2l0aG91dCB2YWxpZGF0aW5nIHNjYW5jb2RlIGZpcnN0ICovCitzdGF0aWMgdm9pZCB0cGFjcGlfaW5wdXRfc2VuZF9rZXkoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQogewotCXVuc2lnbmVkIGludCBrZXljb2RlOwotCi0Ja2V5Y29kZSA9IGhvdGtleV9rZXljb2RlX21hcFtzY2FuY29kZV07CisJY29uc3QgdW5zaWduZWQgaW50IGtleWNvZGUgPSBob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdOwogCiAJaWYgKGtleWNvZGUgIT0gS0VZX1JFU0VSVkVEKSB7CiAJCW11dGV4X2xvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKQEAgLTIxNjIsMTkgKzIzMDMsMjggQEAKIAl9CiB9CiAKKy8qIERvIE5PVCBjYWxsIHdpdGhvdXQgdmFsaWRhdGluZyBzY2FuY29kZSBmaXJzdCAqLworc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCit7CisJaG90a2V5X2RyaXZlcl9ldmVudChzY2FuY29kZSk7CisJaWYgKGhvdGtleV91c2VyX21hc2sgJiAoMSA8PCBzY2FuY29kZSkpCisJCXRwYWNwaV9pbnB1dF9zZW5kX2tleShzY2FuY29kZSk7Cit9CisKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogc3RhdGljIHN0cnVjdCB0cF9hY3BpX2Rydl9zdHJ1Y3QgaWJtX2hvdGtleV9hY3BpZHJpdmVyOwogCisvKiBEbyBOT1QgY2FsbCB3aXRob3V0IHZhbGlkYXRpbmcgc2NhbmNvZGUgZmlyc3QgKi8KIHN0YXRpYyB2b2lkIHRwYWNwaV9ob3RrZXlfc2VuZF9rZXkodW5zaWduZWQgaW50IHNjYW5jb2RlKQogewotCXRwYWNwaV9pbnB1dF9zZW5kX2tleShzY2FuY29kZSk7CisJdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChzY2FuY29kZSk7CiAJaWYgKGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpIHsKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChpYm1faG90a2V5X2FjcGlkcml2ZXIuZGV2aWNlLAotCQkJCQkJMHg4MCwgMHgxMDAxICsgc2NhbmNvZGUpOworCQkJCTB4ODAsIFRQX0hLRVlfRVZfSE9US0VZX0JBU0UgKyBzY2FuY29kZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBob3RrZXlfcmVhZF9udnJhbShzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm4sIHUzMiBtKQorc3RhdGljIHZvaWQgaG90a2V5X3JlYWRfbnZyYW0oc3RydWN0IHRwX252cmFtX3N0YXRlICpuLCBjb25zdCB1MzIgbSkKIHsKIAl1OCBkOwogCkBAIC0yMjEwLDIxICsyMzYwLDI0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoc3RydWN0IHRwX252cmFtX3N0YXRlICpvbGRuLAorCQkJCQkgICBzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm5ld24sCisJCQkJCSAgIGNvbnN0IHUzMiBldmVudF9tYXNrKQoreworCiAjZGVmaW5lIFRQQUNQSV9DT01QQVJFX0tFWShfX3NjYW5jb2RlLCBfX21lbWJlcikgXAogCWRvIHsgXAotCQlpZiAoKG1hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgJiYgXAorCQlpZiAoKGV2ZW50X21hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgJiYgXAogCQkgICAgb2xkbi0+X19tZW1iZXIgIT0gbmV3bi0+X19tZW1iZXIpIFwKLQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgXAorCQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgVFBBQ1BJX01BWV9TRU5EX0tFWShfX3NjYW5jb2RlKSBcCi0JZG8geyBpZiAobWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSBcCi0JCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IH0gd2hpbGUgKDApCisJZG8geyBcCisJCWlmIChldmVudF9tYXNrICYgKDEgPDwgX19zY2FuY29kZSkpIFwKKwkJCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKKwl9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoc3RydWN0IHRwX252cmFtX3N0YXRlICpvbGRuLAotCQkJCQkgICBzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm5ld24sCi0JCQkJCSAgIHUzMiBtYXNrKQotewogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fVEhJTktQQUQsIHRoaW5rcGFkX3RvZ2dsZSk7CiAJVFBBQ1BJX0NPTVBBUkVfS0VZKFRQX0FDUElfSE9US0VZU0NBTl9GTlNQQUNFLCB6b29tX3RvZ2dsZSk7CiAJVFBBQ1BJX0NPTVBBUkVfS0VZKFRQX0FDUElfSE9US0VZU0NBTl9GTkY3LCBkaXNwbGF5X3RvZ2dsZSk7CkBAIC0yMjcwLDE1ICsyNDIzLDIyIEBACiAJCQl9CiAJCX0KIAl9Ci19CiAKICN1bmRlZiBUUEFDUElfQ09NUEFSRV9LRVkKICN1bmRlZiBUUEFDUElfTUFZX1NFTkRfS0VZCit9CiAKKy8qCisgKiBQb2xsaW5nIGRyaXZlcgorICoKKyAqIFdlIHRyYWNrIGFsbCBldmVudHMgaW4gaG90a2V5X3NvdXJjZV9tYXNrIGFsbCB0aGUgdGltZSwgc2luY2UKKyAqIG1vc3Qgb2YgdGhlbSBhcmUgZWRnZS1iYXNlZC4gIFdlIG9ubHkgaXNzdWUgdGhvc2UgcmVxdWVzdGVkIGJ5CisgKiBob3RrZXlfdXNlcl9tYXNrIG9yIGhvdGtleV9kcml2ZXJfbWFzaywgdGhvdWdoLgorICovCiBzdGF0aWMgaW50IGhvdGtleV9rdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHRwX252cmFtX3N0YXRlIHNbMl07Ci0JdTMyIG1hc2s7CisJdTMyIHBvbGxfbWFzaywgZXZlbnRfbWFzazsKIAl1bnNpZ25lZCBpbnQgc2ksIHNvOwogCXVuc2lnbmVkIGxvbmcgdDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2RldGVjdG9yLCBtdXN0X3Jlc2V0OwpAQCAtMjI5OCwxMCArMjQ1OCwxMiBAQAogCS8qIEluaXRpYWwgc3RhdGUgZm9yIGNvbXBhcmVzICovCiAJbXV0ZXhfbG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKIAljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKLQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJcG9sbF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrOworCWV2ZW50X21hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJgorCQkJKGhvdGtleV9kcml2ZXJfbWFzayB8IGhvdGtleV91c2VyX21hc2spOwogCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwotCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgbWFzayk7CisJaG90a2V5X3JlYWRfbnZyYW0oJnNbc29dLCBwb2xsX21hc2spOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJaWYgKHQgPT0gMCkgewpAQCAtMjMyNCwxNSArMjQ4NiwxNyBAQAogCQkJdCA9IDA7CiAJCQljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKIAkJfQotCQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJCXBvbGxfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzazsKKwkJZXZlbnRfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmCisJCQkJKGhvdGtleV9kcml2ZXJfbWFzayB8IGhvdGtleV91c2VyX21hc2spOwogCQlwb2xsX2ZyZXEgPSBob3RrZXlfcG9sbF9mcmVxOwogCQltdXRleF91bmxvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAKLQkJaWYgKGxpa2VseShtYXNrKSkgewotCQkJaG90a2V5X3JlYWRfbnZyYW0oJnNbc2ldLCBtYXNrKTsKKwkJaWYgKGxpa2VseShwb2xsX21hc2spKSB7CisJCQlob3RrZXlfcmVhZF9udnJhbSgmc1tzaV0sIHBvbGxfbWFzayk7CiAJCQlpZiAobGlrZWx5KHNpICE9IHNvKSkgewogCQkJCWhvdGtleV9jb21wYXJlX2FuZF9pc3N1ZV9ldmVudCgmc1tzb10sICZzW3NpXSwKLQkJCQkJCQkJbWFzayk7CisJCQkJCQkJCWV2ZW50X21hc2spOwogCQkJfQogCQl9CiAKQEAgLTIzNjQsMTAgKzI1MjgsMTIgQEAKIC8qIGNhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZCAqLwogc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXAoYm9vbCBtYXlfd2FybikKIHsKLQl1MzIgaG90a2V5c190b19wb2xsID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJY29uc3QgdTMyIHBvbGxfZHJpdmVyX21hc2sgPSBob3RrZXlfZHJpdmVyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CisJY29uc3QgdTMyIHBvbGxfdXNlcl9tYXNrID0gaG90a2V5X3VzZXJfbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKIAotCWlmIChob3RrZXlzX3RvX3BvbGwgIT0gMCAmJiBob3RrZXlfcG9sbF9mcmVxID4gMCAmJgotCSAgICAodHBhY3BpX2lucHV0ZGV2LT51c2VycyA+IDAgfHwgaG90a2V5X3JlcG9ydF9tb2RlIDwgMikpIHsKKwlpZiAoaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKKwkgICAgKHBvbGxfZHJpdmVyX21hc2sgfHwKKwkgICAgIChwb2xsX3VzZXJfbWFzayAmJiB0cGFjcGlfaW5wdXRkZXYtPnVzZXJzID4gMCkpKSB7CiAJCWlmICghdHBhY3BpX2hvdGtleV90YXNrKSB7CiAJCQl0cGFjcGlfaG90a2V5X3Rhc2sgPSBrdGhyZWFkX3J1bihob3RrZXlfa3RocmVhZCwKIAkJCQkJTlVMTCwgVFBBQ1BJX05WUkFNX0tUSFJFQURfTkFNRSk7CkBAIC0yMzgwLDEyICsyNTQ2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKLQkJaWYgKG1heV93YXJuICYmIGhvdGtleXNfdG9fcG9sbCAhPSAwICYmCisJCWlmIChtYXlfd2FybiAmJiAocG9sbF9kcml2ZXJfbWFzayB8fCBwb2xsX3VzZXJfbWFzaykgJiYKIAkJICAgIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgewogCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCQkiaG90IGtleXMgMHglMDh4IHJlcXVpcmUgcG9sbGluZywgIgotCQkJCSJ3aGljaCBpcyBjdXJyZW50bHkgZGlzYWJsZWRcbiIsCi0JCQkJaG90a2V5c190b19wb2xsKTsKKwkJCQkiaG90IGtleXMgMHglMDh4IGFuZC9vciBldmVudHMgMHglMDh4ICIKKwkJCQkicmVxdWlyZSBwb2xsaW5nLCB3aGljaCBpcyBjdXJyZW50bHkgIgorCQkJCSJkaXNhYmxlZFxuIiwKKwkJCQlwb2xsX3VzZXJfbWFzaywgcG9sbF9kcml2ZXJfbWFzayk7CiAJCX0KIAl9CiB9CkBAIC0yNDAzLDkgKzI1NzAsNyBAQAogCWlmICghZnJlcSkKIAkJaG90a2V5X3BvbGxfc3RvcF9zeW5jKCk7CiAKLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCiAJaG90a2V5X3BvbGxfZnJlcSA9IGZyZXE7Ci0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIH0KIAogI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KQEAgLTI0NDAsNyArMjYwNSw4IEBACiBzdGF0aWMgdm9pZCBob3RrZXlfaW5wdXRkZXZfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCS8qIGRpc2FibGUgaG90a2V5IHBvbGxpbmcgd2hlbiBwb3NzaWJsZSAqLwotCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcpCisJaWYgKHRwYWNwaV9saWZlY3ljbGUgPT0gVFBBQ1BJX0xJRkVfUlVOTklORyAmJgorCSAgICAhKGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9kcml2ZXJfbWFzaykpCiAJCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCkBAIC0yNDg4LDE1ICsyNjU0LDcgQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCWludCByZXM7Ci0KLQlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXMgPSBob3RrZXlfbWFza19nZXQoKTsKLQltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7Ci0KLQlyZXR1cm4gKHJlcyk/Ci0JCXJlcyA6IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDh4XG4iLCBob3RrZXlfbWFzayk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDh4XG4iLCBob3RrZXlfdXNlcl9tYXNrKTsKIH0KIAogc3RhdGljIHNzaXplX3QgaG90a2V5X21hc2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjUxMiw3ICsyNjcwLDcgQEAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCXJlcyA9IGhvdGtleV9tYXNrX3NldCh0KTsKKwlyZXMgPSBob3RrZXlfdXNlcl9tYXNrX3NldCh0KTsKIAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiAJaG90a2V5X3BvbGxfc2V0dXAodHJ1ZSk7CkBAIC0yNTk0LDYgKzI3NTIsOCBAQAogCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdDsKKwl1MzIgcl9ldjsKKwlpbnQgcmM7CiAKIAlpZiAocGFyc2Vfc3RydG91bChidWYsIDB4ZmZmZmZmZmZVTCwgJnQpIHx8CiAJCSgodCAmIH5UUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLKSAhPSAwKSkKQEAgLTI2MDYsMTQgKzI3NjYsMjggQEAKIAlob3RrZXlfc291cmNlX21hc2sgPSB0OwogCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiAKKwlyYyA9IGhvdGtleV9tYXNrX3NldCgoaG90a2V5X3VzZXJfbWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJgorCQkJfmhvdGtleV9zb3VyY2VfbWFzayk7CiAJaG90a2V5X3BvbGxfc2V0dXAodHJ1ZSk7Ci0JaG90a2V5X21hc2tfc2V0KGhvdGtleV9tYXNrKTsKKworCS8qIGNoZWNrIGlmIGV2ZW50cyBuZWVkZWQgYnkgdGhlIGRyaXZlciBnb3QgZGlzYWJsZWQgKi8KKwlyX2V2ID0gaG90a2V5X2RyaXZlcl9tYXNrICYgfihob3RrZXlfYWNwaV9tYXNrICYgaG90a2V5X2FsbF9tYXNrKQorCQkmIH5ob3RrZXlfc291cmNlX21hc2sgJiBUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLOwogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwogCisJaWYgKHJjIDwgMCkKKwkJcHJpbnRrKFRQQUNQSV9FUlIgImhvdGtleV9zb3VyY2VfbWFzazogZmFpbGVkIHRvIHVwZGF0ZSB0aGUiCisJCQkiZmlybXdhcmUgZXZlbnQgbWFzayFcbiIpOworCisJaWYgKHJfZXYpCisJCXByaW50ayhUUEFDUElfTk9USUNFICJob3RrZXlfc291cmNlX21hc2s6ICIKKwkJCSJzb21lIGltcG9ydGFudCBldmVudHMgd2VyZSBkaXNhYmxlZDogIgorCQkJIjB4JTA0eFxuIiwgcl9ldik7CisKIAl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soImhvdGtleV9zb3VyY2VfbWFzayIsICJzZXQgdG8gMHglMDhseFxuIiwgdCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIChyYyA8IDApID8gcmMgOiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9zb3VyY2VfbWFzayA9CkBAIC0yNzMxLDkgKzI5MDUsOCBAQAogCiBzdGF0aWMgdm9pZCBob3RrZXlfd2FrZXVwX3JlYXNvbl9ub3RpZnlfY2hhbmdlKHZvaWQpCiB7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKQotCQlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKLQkJCSAgICAgIndha2V1cF9yZWFzb24iKTsKKwlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKKwkJICAgICAid2FrZXVwX3JlYXNvbiIpOwogfQogCiAvKiBzeXNmcyB3YWtldXAgaG90dW5wbHVnX2NvbXBsZXRlIChwb2xsYWJsZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI3NTAsOSArMjkyMyw4IEBACiAKIHN0YXRpYyB2b2lkIGhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2Uodm9pZCkKIHsKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spCi0JCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAotCQkJICAgICAid2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZSIpOworCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAorCQkgICAgICJ3YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjc2MCwyNyArMjkzMiwxOSBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhvdGtleV9hdHRyaWJ1dGVzW10gX19pbml0ZGF0YSA9IHsKIAkmZGV2X2F0dHJfaG90a2V5X2VuYWJsZS5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19lbmFibGVkLmF0dHIsCisJJmRldl9hdHRyX2hvdGtleV9iaW9zX21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X3JlcG9ydF9tb2RlLmF0dHIsCi0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKKwkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9yZWFzb24uYXR0ciwKKwkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9ob3R1bnBsdWdfY29tcGxldGUuYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X2FsbF9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9yZWNvbW1lbmRlZF9tYXNrLmF0dHIsCisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAkmZGV2X2F0dHJfaG90a2V5X3NvdXJjZV9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9wb2xsX2ZyZXEuYXR0ciwKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhvdGtleV9tYXNrX2F0dHJpYnV0ZXNbXSBfX2luaXRkYXRhID0gewotCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19tYXNrLmF0dHIsCi0jaWZuZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCi0JJmRldl9hdHRyX2hvdGtleV9tYXNrLmF0dHIsCi0JJmRldl9hdHRyX2hvdGtleV9hbGxfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfcmVjb21tZW5kZWRfbWFzay5hdHRyLAotI2VuZGlmCi0JJmRldl9hdHRyX2hvdGtleV93YWtldXBfcmVhc29uLmF0dHIsCi0JJmRldl9hdHRyX2hvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlLmF0dHIsCi19OwotCiAvKgogICogU3luYyBib3RoIHRoZSBodyBhbmQgc3cgYmxvY2tpbmcgc3RhdGUgb2YgYWxsIHN3aXRjaGVzCiAgKi8KQEAgLTI4NDMsMTYgKzMwMDcsMTYgQEAKIAogCWtmcmVlKGhvdGtleV9rZXljb2RlX21hcCk7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5KSB7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElUIHwgVFBBQ1BJX0RCR19IS0VZLAotCQkJICAgInJlc3RvcmluZyBvcmlnaW5hbCBob3Qga2V5IG1hc2tcbiIpOwotCQkvKiBubyBzaG9ydC1jaXJjdWl0IGJvb2xlYW4gb3BlcmF0b3IgYmVsb3chICovCi0JCWlmICgoaG90a2V5X21hc2tfc2V0KGhvdGtleV9vcmlnX21hc2spIHwKLQkJICAgICBob3RrZXlfc3RhdHVzX3NldChmYWxzZSkpICE9IDApCi0JCQlwcmludGsoVFBBQ1BJX0VSUgotCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSBob3Qga2V5IG1hc2sgIgotCQkJICAgICAgICJ0byBCSU9TIGRlZmF1bHRzXG4iKTsKLQl9CisJZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSAgICJyZXN0b3Jpbmcgb3JpZ2luYWwgSEtFWSBzdGF0dXMgYW5kIG1hc2tcbiIpOworCS8qIHllcywgdGhlcmUgaXMgYSBiaXR3aXNlIG9yIGJlbG93LCB3ZSB3YW50IHRoZQorCSAqIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgZXZlbiBpZiBvbmUgb2YgdGhlbSBmYWlsICovCisJaWYgKCgodHBfZmVhdHVyZXMuaG90a2V5X21hc2sgJiYKKwkgICAgICBob3RrZXlfbWFza19zZXQoaG90a2V5X29yaWdfbWFzaykpIHwKKwkgICAgIGhvdGtleV9zdGF0dXNfc2V0KGZhbHNlKSkgIT0gMCkKKwkJcHJpbnRrKFRQQUNQSV9FUlIKKwkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSBob3Qga2V5IG1hc2sgIgorCQkgICAgICAgInRvIEJJT1MgZGVmYXVsdHNcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaG90a2V5X3VubWFwKGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKQEAgLTI4NjQsNiArMzAyOCwzNSBAQAogCX0KIH0KIAorLyoKKyAqIEhLRVkgcXVpcmtzOgorICogICBUUEFDUElfSEtfUV9JTklNQVNLOglTdXBwb3J0cyBGTitGMyxGTitGNCxGTitGMTIKKyAqLworCisjZGVmaW5lCVRQQUNQSV9IS19RX0lOSU1BU0sJMHgwMDAxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBhY3BpX3F1aXJrIHRwYWNwaV9ob3RrZXlfcXRhYmxlW10gX19pbml0Y29uc3QgPSB7CisJVFBBQ1BJX1FfSUJNKCdJJywgJ0gnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogNjAwRSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdOJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIDYwMEUgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnRCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiA3NzAsIDc3MEUsIDc3MEVEICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1cnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIwbSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdWJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMHAgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnMCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFlLCBBMjJlICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1UnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxZSAqLworCVRQQUNQSV9RX0lCTSgnSycsICdYJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMW0sIEEyMm0gKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFwLCBBMjJwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0InLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIyZSAqLworCVRQQUNQSV9RX0lCTSgnMScsICczJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMm0gKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMzAvcCAoMCkgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnQycsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBSMzAgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBSMzEgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnWScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjAgKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjEgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnNicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjIgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnWicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBYMjAsIFgyMSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdEJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFgyMiwgWDIzLCBYMjQgKi8KK307CisKIHN0YXRpYyBpbnQgX19pbml0IGhvdGtleV9pbml0KHN0cnVjdCBpYm1faW5pdF9zdHJ1Y3QgKmlpYm0pCiB7CiAJLyogUmVxdWlyZW1lbnRzIGZvciBjaGFuZ2luZyB0aGUgZGVmYXVsdCBrZXltYXBzOgpAQCAtMjkwNiw5ICszMDk5LDcgQEAKIAkJS0VZX1VOS05PV04sCS8qIDB4MEQ6IEZOK0lOU0VSVCAqLwogCQlLRVlfVU5LTk9XTiwJLyogMHgwRTogRk4rREVMRVRFICovCiAKLQkJLyogYnJpZ2h0bmVzczogZmlybXdhcmUgYWx3YXlzIHJlYWN0cyB0byB0aGVtLCB1bmxlc3MKLQkJICogWC5vcmcgZGlkIHNvbWUgdHJpY2tzIGluIHRoZSByYWRlb24gQklPUyBzY3JhdGNoCi0JCSAqIHJlZ2lzdGVycyBvZiAqc29tZSogbW9kZWxzICovCisJCS8qIGJyaWdodG5lc3M6IGZpcm13YXJlIGFsd2F5cyByZWFjdHMgdG8gdGhlbSAqLwogCQlLRVlfUkVTRVJWRUQsCS8qIDB4MEY6IEZOK0hPTUUgKGJyaWdodG5lc3MgdXApICovCiAJCUtFWV9SRVNFUlZFRCwJLyogMHgxMDogRk4rRU5EIChicmlnaHRuZXNzIGRvd24pICovCiAKQEAgLTI5ODMsNiArMzE3NCw4IEBACiAJaW50IHN0YXR1czsKIAlpbnQgaGtleXY7CiAKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKwogCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCSJpbml0aWFsaXppbmcgaG90a2V5IHN1YmRyaXZlclxuIik7CiAKQEAgLTMwMDgsOSArMzIwMSwxNiBAQAogCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KQogCQlyZXR1cm4gMTsKIAorCXF1aXJrcyA9IHRwYWNwaV9jaGVja19xdWlya3ModHBhY3BpX2hvdGtleV9xdGFibGUsCisJCQkJICAgICBBUlJBWV9TSVpFKHRwYWNwaV9ob3RrZXlfcXRhYmxlKSk7CisKIAl0cGFjcGlfZGlzYWJsZV9icmlnaHRuZXNzX2RlbGF5KCk7CiAKLQlob3RrZXlfZGV2X2F0dHJpYnV0ZXMgPSBjcmVhdGVfYXR0cl9zZXQoMTMsIE5VTEwpOworCS8qIE1VU1QgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIHRvCisJICogaG90a2V5X2Rldl9hdHRyaWJ1dGVzICovCisJaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KAorCQkJCQlBUlJBWV9TSVpFKGhvdGtleV9hdHRyaWJ1dGVzKSArIDIsCisJCQkJCU5VTEwpOwogCWlmICghaG90a2V5X2Rldl9hdHRyaWJ1dGVzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXMgPSBhZGRfbWFueV90b19hdHRyX3NldChob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCkBAIC0zMDE5LDcgKzMyMTksNyBAQAogCWlmIChyZXMpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKLQkvKiBtYXNrIG5vdCBzdXBwb3J0ZWQgb24gNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwKKwkvKiBtYXNrIG5vdCBzdXBwb3J0ZWQgb24gNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsCiAJICAgQTMwLCBSMzAsIFIzMSwgVDIwLTIyLCBYMjAtMjEsIFgyMi0yNC4gIERldGVjdGVkIGJ5IGNoZWNraW5nCiAJICAgZm9yIEhLRVkgaW50ZXJmYWNlIHZlcnNpb24gMHgxMDAgKi8KIAlpZiAoYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhrZXl2LCAiTUhLViIsICJxZCIpKSB7CkBAIC0zMDMzLDEwICszMjMzLDIyIEBACiAJCQkgKiBNSEtWIDB4MTAwIGluIEEzMSwgUjQwLCBSNDBlLAogCQkJICogVDR4LCBYMzEsIGFuZCBsYXRlcgogCQkJICovCi0JCQl0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayA9IDE7CiAJCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkJImZpcm13YXJlIEhLRVkgaW50ZXJmYWNlIHZlcnNpb246IDB4JXhcbiIsCiAJCQkJaGtleXYpOworCisJCQkvKiBQYXJhbm9pYSBjaGVjayBBTkQgaW5pdCBob3RrZXlfYWxsX21hc2sgKi8KKwkJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhvdGtleV9hbGxfbWFzaywKKwkJCQkJIk1IS0EiLCAicWQiKSkgeworCQkJCXByaW50ayhUUEFDUElfRVJSCisJCQkJICAgICAgICJtaXNzaW5nIE1IS0EgaGFuZGxlciwgIgorCQkJCSAgICAgICAicGxlYXNlIHJlcG9ydCB0aGlzIHRvICVzXG4iLAorCQkJCSAgICAgICBUUEFDUElfTUFJTCk7CisJCQkJLyogRmFsbGJhY2s6IHByZS1pbml0IGZvciBGTitGMyxGNCxGMTIgKi8KKwkJCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOworCQkJfSBlbHNlIHsKKwkJCQl0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayA9IDE7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTMwNDQsMzIgKzMyNTYsMjMgQEAKIAkJImhvdGtleSBtYXNrcyBhcmUgJXNcbiIsCiAJCXN0cl9zdXBwb3J0ZWQodHBfZmVhdHVyZXMuaG90a2V5X21hc2spKTsKIAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZob3RrZXlfYWxsX21hc2ssCi0JCQkJIk1IS0EiLCAicWQiKSkgewotCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCSAgICAgICAibWlzc2luZyBNSEtBIGhhbmRsZXIsICIKLQkJCSAgICAgICAicGxlYXNlIHJlcG9ydCB0aGlzIHRvICVzXG4iLAotCQkJICAgICAgIFRQQUNQSV9NQUlMKTsKLQkJCS8qIEZOK0YxMiwgRk4rRjQsIEZOK0YzICovCi0JCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOwotCQl9Ci0JfQorCS8qIEluaXQgaG90a2V5X2FsbF9tYXNrIGlmIG5vdCBpbml0aWFsaXplZCB5ZXQgKi8KKwlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrICYmICFob3RrZXlfYWxsX21hc2sgJiYKKwkgICAgKHF1aXJrcyAmIFRQQUNQSV9IS19RX0lOSU1BU0spKQorCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOyAgLyogRk4rRjEyLCBGTitGNCwgRk4rRjMgKi8KIAotCS8qIGhvdGtleV9zb3VyY2VfbWFzayAqbXVzdCogYmUgemVybyBmb3IKLQkgKiB0aGUgZmlyc3QgaG90a2V5X21hc2tfZ2V0ICovCisJLyogSW5pdCBob3RrZXlfYWNwaV9tYXNrIGFuZCBob3RrZXlfb3JpZ19tYXNrICovCiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7CisJCS8qIGhvdGtleV9zb3VyY2VfbWFzayAqbXVzdCogYmUgemVybyBmb3IKKwkJICogdGhlIGZpcnN0IGhvdGtleV9tYXNrX2dldCB0byByZXR1cm4gaG90a2V5X29yaWdfbWFzayAqLwogCQlyZXMgPSBob3RrZXlfbWFza19nZXQoKTsKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX2V4aXQ7CiAKLQkJaG90a2V5X29yaWdfbWFzayA9IGhvdGtleV9tYXNrOwotCQlyZXMgPSBhZGRfbWFueV90b19hdHRyX3NldCgKLQkJCQlob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCi0JCQkJaG90a2V5X21hc2tfYXR0cmlidXRlcywKLQkJCQlBUlJBWV9TSVpFKGhvdGtleV9tYXNrX2F0dHJpYnV0ZXMpKTsKLQkJaWYgKHJlcykKLQkJCWdvdG8gZXJyX2V4aXQ7CisJCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfYWNwaV9tYXNrOworCX0gZWxzZSB7CisJCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CisJCWhvdGtleV9hY3BpX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CiAJfQogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCkBAIC0zMTgzLDE0ICszMzg2LDkgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X2FsbF9tYXNrCi0JCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOwotCX0gZWxzZSB7Ci0JCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSwotCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLQl9CisJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLCisJCQkJJiB+aG90a2V5X2FsbF9tYXNrCisJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7CiAKIAl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICV1XG4iLApAQCAtMzIwNCwxMyArMzQwMiwxOCBAQAogCQlob3RrZXlfZXhpdCgpOwogCQlyZXR1cm4gcmVzOwogCX0KLQlyZXMgPSBob3RrZXlfbWFza19zZXQoKChob3RrZXlfYWxsX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spCi0JCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2spCi0JCQkJfCBob3RrZXlfb3JpZ19tYXNrKTsKKwlyZXMgPSBob3RrZXlfbWFza19zZXQoKChob3RrZXlfYWxsX21hc2sgJiB+aG90a2V5X3Jlc2VydmVkX21hc2spCisJCQkgICAgICAgfCBob3RrZXlfZHJpdmVyX21hc2spCisJCQkgICAgICAmIH5ob3RrZXlfc291cmNlX21hc2spOwogCWlmIChyZXMgPCAwICYmIHJlcyAhPSAtRU5YSU8pIHsKIAkJaG90a2V5X2V4aXQoKTsKIAkJcmV0dXJuIHJlczsKIAl9CisJaG90a2V5X3VzZXJfbWFzayA9IChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKQorCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJImluaXRpYWwgbWFza3M6IHVzZXI9MHglMDh4LCBmdz0weCUwOHgsIHBvbGw9MHglMDh4XG4iLAorCQlob3RrZXlfdXNlcl9tYXNrLCBob3RrZXlfYWNwaV9tYXNrLCBob3RrZXlfc291cmNlX21hc2spOwogCiAJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkibGVnYWN5IGlibS9ob3RrZXkgZXZlbnQgcmVwb3J0aW5nIG92ZXIgcHJvY2ZzICVzXG4iLApAQCAtMzI0NSw3ICszNDQ4LDcgQEAKIAlpZiAoc2NhbmNvZGUgPiAwICYmIHNjYW5jb2RlIDwgMHgyMSkgewogCQlzY2FuY29kZS0tOwogCQlpZiAoIShob3RrZXlfc291cmNlX21hc2sgJiAoMSA8PCBzY2FuY29kZSkpKSB7Ci0JCQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworCQkJdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChzY2FuY29kZSk7CiAJCQkqc2VuZF9hY3BpX2V2ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwpAQCAtMzI2NCwyMCArMzQ2NywyMCBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDIzMDQ6IC8qIHN1c3BlbmQsIHVuZG9jayAqLwotCWNhc2UgMHgyNDA0OiAvKiBoaWJlcm5hdGlvbiwgdW5kb2NrICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzNfVU5ET0NLOiAvKiBzdXNwZW5kLCB1bmRvY2sgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9VTkRPQ0s6IC8qIGhpYmVybmF0aW9uLCB1bmRvY2sgKi8KIAkJaG90a2V5X3dha2V1cF9yZWFzb24gPSBUUF9BQ1BJX1dBS0VVUF9VTkRPQ0s7CiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCWJyZWFrOwogCi0JY2FzZSAweDIzMDU6IC8qIHN1c3BlbmQsIGJheSBlamVjdCAqLwotCWNhc2UgMHgyNDA1OiAvKiBoaWJlcm5hdGlvbiwgYmF5IGVqZWN0ICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzNfQkFZRUo6IC8qIHN1c3BlbmQsIGJheSBlamVjdCAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1M0X0JBWUVKOiAvKiBoaWJlcm5hdGlvbiwgYmF5IGVqZWN0ICovCiAJCWhvdGtleV93YWtldXBfcmVhc29uID0gVFBfQUNQSV9XQUtFVVBfQkFZRUo7CiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCWJyZWFrOwogCi0JY2FzZSAweDIzMTM6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsIChTMykgKi8KLQljYXNlIDB4MjQxMzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwgKFM0KSAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX0JBVExPVzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwvUzMgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9CQVRMT1c6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsL1M0ICovCiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJFTUVSR0VOQ1kgV0FLRVVQOiBiYXR0ZXJ5IGFsbW9zdCBlbXB0eVxuIik7CiAJCS8qIGhvdyB0byBhdXRvLWhlYWw6ICovCkBAIC0zMzA3LDIxICszNTEwLDIxIEBACiAJKmlnbm9yZV9hY3BpX2V2ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGhrZXkpIHsKLQljYXNlIDB4NTAxMDogLyogTGVub3ZvIG5ldyBCSU9TOiBicmlnaHRuZXNzIGNoYW5nZWQgKi8KLQljYXNlIDB4NTAwYjogLyogWDYxdDogdGFibGV0IHBlbiBpbnNlcnRlZCBpbnRvIGJheSAqLwotCWNhc2UgMHg1MDBjOiAvKiBYNjF0OiB0YWJsZXQgcGVuIHJlbW92ZWQgZnJvbSBiYXkgKi8KKwljYXNlIFRQX0hLRVlfRVZfUEVOX0lOU0VSVEVEOiAgLyogWDYxdDogdGFibGV0IHBlbiBpbnNlcnRlZCBpbnRvIGJheSAqLworCWNhc2UgVFBfSEtFWV9FVl9QRU5fUkVNT1ZFRDogICAvKiBYNjF0OiB0YWJsZXQgcGVuIHJlbW92ZWQgZnJvbSBiYXkgKi8KIAkJcmV0dXJuIHRydWU7CiAKLQljYXNlIDB4NTAwOTogLyogWDQxdC1YNjF0OiBzd2l2ZWwgdXAgKHRhYmxldCBtb2RlKSAqLwotCWNhc2UgMHg1MDBhOiAvKiBYNDF0LVg2MXQ6IHN3aXZlbCBkb3duIChub3JtYWwgbW9kZSkgKi8KKwljYXNlIFRQX0hLRVlfRVZfVEFCTEVUX1RBQkxFVDogICAvKiBYNDF0LVg2MXQ6IHRhYmxldCBtb2RlICovCisJY2FzZSBUUF9IS0VZX0VWX1RBQkxFVF9OT1RFQk9PSzogLyogWDQxdC1YNjF0OiBub3JtYWwgbW9kZSAqLwogCQl0cGFjcGlfaW5wdXRfc2VuZF90YWJsZXRzdygpOwogCQlob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSgpOwogCQkqc2VuZF9hY3BpX2V2ID0gZmFsc2U7CiAJCXJldHVybiB0cnVlOwogCi0JY2FzZSAweDUwMDE6Ci0JY2FzZSAweDUwMDI6Ci0JCS8qIExJRCBzd2l0Y2ggZXZlbnRzLiAgRG8gbm90IHByb3BhZ2F0ZSAqLworCWNhc2UgVFBfSEtFWV9FVl9MSURfQ0xPU0U6CS8qIExpZCBjbG9zZWQgKi8KKwljYXNlIFRQX0hLRVlfRVZfTElEX09QRU46CS8qIExpZCBvcGVuZWQgKi8KKwljYXNlIFRQX0hLRVlfRVZfQlJHSFRfQ0hBTkdFRDoJLyogYnJpZ2h0bmVzcyBjaGFuZ2VkICovCisJCS8qIGRvIG5vdCBwcm9wYWdhdGUgdGhlc2UgZXZlbnRzICovCiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCXJldHVybiB0cnVlOwogCkBAIC0zMzM5LDMwICszNTQyLDMwIEBACiAJKmlnbm9yZV9hY3BpX2V2ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGhrZXkpIHsKLQljYXNlIDB4NjAxMToKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX0hPVDoKIAkJcHJpbnRrKFRQQUNQSV9DUklUCiAJCQkiVEhFUk1BTCBBTEFSTTogYmF0dGVyeSBpcyB0b28gaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogd2FybiB1c2VyIHRocm91Z2ggZ3VpICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDEyOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9CQVRfWEhPVDoKIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiBiYXR0ZXJ5IGlzIGV4dHJlbWVseSBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDIxOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfSE9UOgogCQlwcmludGsoVFBBQ1BJX0NSSVQKIAkJCSJUSEVSTUFMIEFMQVJNOiAiCiAJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgdG9vIGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSwgdGhhdCAqLwogCQkvKiBzb21lIGludGVybmFsIGNvbXBvbmVudCBpcyB0b28gaG90ICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDIyOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfWEhPVDoKIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiAiCiAJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgZXh0cmVtZWx5IGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGltbWVkaWF0ZSBzbGVlcC9oaWJlcm5hdGUgKi8KIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSAweDYwMzA6CisJY2FzZSBUUF9IS0VZX0VWX1RITV9UQUJMRV9DSEFOR0VEOgogCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCSJFQyByZXBvcnRzIHRoYXQgVGhlcm1hbCBUYWJsZSBoYXMgY2hhbmdlZFxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogZG8gbm90aGluZywgd2UgZG9uJ3QgaGF2ZQpAQCAtMzQyMCw3ICszNjIzLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQkvKiAweDMwMDAtMHgzRkZGOiBiYXktcmVsYXRlZCB3YWtldXBzICovCi0JCQlpZiAoaGtleSA9PSAweDMwMDMpIHsKKwkJCWlmIChoa2V5ID09IFRQX0hLRVlfRVZfQkFZRUpfQUNLKSB7CiAJCQkJaG90a2V5X2F1dG9zbGVlcF9hY2sgPSAxOwogCQkJCXByaW50ayhUUEFDUElfSU5GTwogCQkJCSAgICAgICAiYmF5IGVqZWN0ZWRcbiIpOwpAQCAtMzQzMiw3ICszNjM1LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDQ6CiAJCQkvKiAweDQwMDAtMHg0RkZGOiBkb2NrLXJlbGF0ZWQgd2FrZXVwcyAqLwotCQkJaWYgKGhrZXkgPT0gMHg0MDAzKSB7CisJCQlpZiAoaGtleSA9PSBUUF9IS0VZX0VWX1VORE9DS19BQ0spIHsKIAkJCQlob3RrZXlfYXV0b3NsZWVwX2FjayA9IDE7CiAJCQkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkJICAgICAgICJ1bmRvY2tlZFxuIik7CkBAIC0zNDU0LDcgKzM2NTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgNzoKIAkJCS8qIDB4NzAwMC0weDdGRkY6IG1pc2MgKi8KLQkJCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyAmJiBoa2V5ID09IDB4NzAwMCkgeworCQkJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV93bHN3ICYmCisJCQkJCWhrZXkgPT0gVFBfSEtFWV9FVl9SRktJTExfQ0hBTkdFRCkgewogCQkJCXRwYWNwaV9zZW5kX3JhZGlvc3dfdXBkYXRlKCk7CiAJCQkJc2VuZF9hY3BpX2V2ID0gMDsKIAkJCQlrbm93bl9ldiA9IHRydWU7CkBAIC0zNTAwLDEwICszNzA0LDEyIEBACiB7CiAJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOwogCi0JaWYgKGhvdGtleV9tYXNrX2dldCgpKQorCWlmIChob3RrZXlfc3RhdHVzX3NldCh0cnVlKSA8IDAgfHwKKwkgICAgaG90a2V5X21hc2tfc2V0KGhvdGtleV9hY3BpX21hc2spIDwgMCkKIAkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJICAgICAgICJlcnJvciB3aGlsZSB0cnlpbmcgdG8gcmVhZCBob3Qga2V5IG1hc2sgIgotCQkgICAgICAgImZyb20gZmlybXdhcmVcbiIpOworCQkgICAgICAgImVycm9yIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmVzZXQgdGhlIGV2ZW50ICIKKwkJICAgICAgICJmaXJtd2FyZSBpbnRlcmZhY2VcbiIpOworCiAJdHBhY3BpX3NlbmRfcmFkaW9zd191cGRhdGUoKTsKIAlob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSgpOwogCWhvdGtleV93YWtldXBfcmVhc29uX25vdGlmeV9jaGFuZ2UoKTsKQEAgLTM1MzIsOCArMzczOCw4IEBACiAJCXJldHVybiByZXM7CiAKIAlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHQlc1xuIiwgZW5hYmxlZChzdGF0dXMsIDApKTsKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIm1hc2s6XHRcdDB4JTA4eFxuIiwgaG90a2V5X21hc2spOworCWlmIChob3RrZXlfYWxsX21hc2spIHsKKwkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIm1hc2s6XHRcdDB4JTA4eFxuIiwgaG90a2V5X3VzZXJfbWFzayk7CiAJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sCiAJCQkgICAgICAgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlLCByZXNldCwgPG1hc2s+XG4iKTsKIAl9IGVsc2UgewpAQCAtMzU3MCw3ICszNzc2LDcgQEAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCW1hc2sgPSBob3RrZXlfbWFzazsKKwltYXNrID0gaG90a2V5X3VzZXJfbWFzazsKIAogCXJlcyA9IDA7CiAJd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKQEAgLTM1OTIsMTIgKzM3OTgsMTEgQEAKIAkJfQogCX0KIAotCWlmICghcmVzKQorCWlmICghcmVzKSB7CiAJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGhvdGtleSIsCiAJCQkic2V0IG1hc2sgdG8gMHglMDh4XG4iLCBtYXNrKTsKLQotCWlmICghcmVzICYmIG1hc2sgIT0gaG90a2V5X21hc2spCi0JCXJlcyA9IGhvdGtleV9tYXNrX3NldChtYXNrKTsKKwkJcmVzID0gaG90a2V5X3VzZXJfbWFza19zZXQobWFzayk7CisJfQogCiBlcnJleGl0OgogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKQEAgLTYwMTAsOCArNjIxNSwxMCBAQAogCQkJCQlUUEFDUElfQkFDS0xJR0hUX0RFVl9OQU1FLCBOVUxMLCBOVUxMLAogCQkJCQkmaWJtX2JhY2tsaWdodF9kYXRhKTsKIAlpZiAoSVNfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKSkgeworCQlpbnQgcmMgPSBQVFJfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJaWJtX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogCQlwcmludGsoVFBBQ1BJX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CisJCXJldHVybiByYzsKIAl9CiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19CUkdIVCwKIAkJCSJicmlnaHRuZXNzIGlzIHN1cHBvcnRlZFxuIik7CkBAIC03NDk5LDYgKzc3MDYsMjEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIEhLRVkgZXZlbnQgY2FsbG91dCBmb3Igb3RoZXIgc3ViZHJpdmVycyBnbyBoZXJlCisgKiAoeWVzLCBpdCBpcyB1Z2x5LCBidXQgaXQgaXMgcXVpY2ssIHNhZmUsIGFuZCBnZXRzIHRoZSBqb2IgZG9uZQorICovCitzdGF0aWMgdm9pZCB0cGFjcGlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBoa2V5X2V2ZW50KQoreworfQorCisKKworc3RhdGljIHZvaWQgaG90a2V5X2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCit7CisJdHBhY3BpX2RyaXZlcl9ldmVudChUUF9IS0VZX0VWX0hPVEtFWV9CQVNFICsgc2NhbmNvZGUpOworfQorCiAvKiBzeXNmcyBuYW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBzc2l6ZV90IHRoaW5rcGFkX2FjcGlfcGRldl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IGMwN2ZkYjkuLjgzYjhiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAlhY3BpX2hhbmRsZSB0ZW1wID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IHBucF9kZXYgKmRldjsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7CiAKIAkvKgogCSAqIElmIGEgUG5QYWNwaSBkZXZpY2UgaXMgbm90IHByZXNlbnQgLCB0aGUgZGV2aWNlCkBAIC0xOTMsMTUgKzE5NCwxMiBAQAogCWlmIChkZXYtPmNhcGFiaWxpdGllcyAmIFBOUF9DT05GSUdVUkFCTEUpCiAJCXBucGFjcGlfcGFyc2VfcmVzb3VyY2Vfb3B0aW9uX2RhdGEoZGV2KTsKIAotCWlmIChkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gZGV2aWNlLT5wbnAuY2lkX2xpc3Q7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJaWYgKCFpc3BucGlkYWNwaShjaWRfbGlzdC0+aWRzW2ldLnN0cmluZykpCi0JCQkJY29udGludWU7Ci0JCQlwbnBfYWRkX2lkKGRldiwgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkgeworCQlpZiAoIXN0cmNtcChpZC0+aWQsIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzcG5waWRhY3BpKGlkLT5pZCkpCisJCQljb250aW51ZTsKKwkJcG5wX2FkZF9pZChkZXYsIGlkLT5pZCk7CiAJfQogCiAJLyogY2xlYXIgb3V0IHRoZSBkYW1hZ2VkIGZsYWdzICovCkBAIC0yMzIsOSArMjMwLDggQEAKIAlzdHJ1Y3QgcG5wX2RldiAqcG5wID0gX3BucDsKIAogCS8qIHRydWUgbWVhbnMgaXQgbWF0Y2hlZCAqLwotCXJldHVybiBhY3BpLT5mbGFncy5oYXJkd2FyZV9pZAotCSAgICAmJiAhYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKGFjcGktPmhhbmRsZSkKLQkgICAgJiYgY29tcGFyZV9wbnBfaWQocG5wLT5pZCwgYWNwaS0+cG5wLmhhcmR3YXJlX2lkKTsKKwlyZXR1cm4gIWFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShhY3BpLT5oYW5kbGUpCisJICAgICYmIGNvbXBhcmVfcG5wX2lkKHBucC0+aWQsIGFjcGlfZGV2aWNlX2hpZChhY3BpKSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG5wX2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgYWNwaV9oYW5kbGUgKiBoYW5kbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggMzVhMGIxOS4uMmQ0MTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMjcxLDYgKzI3MSw3IEBACiB7CiAJc3RydWN0IHBwc19kZXZpY2UgKnBwczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjYXB0dXJlZCA9IDA7CiAKIAlpZiAoKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcHM6IHVua25vd24gZXZlbnQgKCV4KSBmb3Igc291cmNlICVkXG4iLApAQCAtMjkzLDcgKzI5NCw4IEBACiAKIAkvKiBDaGVjayB0aGUgZXZlbnQgKi8KIAlwcHMtPmN1cnJlbnRfbW9kZSA9IHBwcy0+cGFyYW1zLm1vZGU7Ci0JaWYgKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpICYKKwkJCShwcHMtPnBhcmFtcy5tb2RlICYgUFBTX0NBUFRVUkVBU1NFUlQpKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQVNTRVJUKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5hc3NlcnRfb2ZmX3R1KTsKQEAgLTMwMyw4ICszMDUsMTEgQEAKIAkJcHBzLT5hc3NlcnRfc2VxdWVuY2UrKzsKIAkJcHJfZGVidWcoImNhcHR1cmUgYXNzZXJ0IHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKIAkJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQotCWlmIChldmVudCAmIFBQU19DQVBUVVJFQ0xFQVIpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgJgorCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUNMRUFSKSkgewogCQkvKiBXZSBoYXZlIHRvIGFkZCBhbiBvZmZzZXQ/ICovCiAJCWlmIChwcHMtPnBhcmFtcy5tb2RlICYgUFBTX09GRlNFVENMRUFSKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5jbGVhcl9vZmZfdHUpOwpAQCAtMzE0LDEyICszMTksMTcgQEAKIAkJcHBzLT5jbGVhcl9zZXF1ZW5jZSsrOwogCQlwcl9kZWJ1ZygiY2FwdHVyZSBjbGVhciBzZXEgIyV1IGZvciBzb3VyY2UgJWRcbiIsCiAJCQlwcHMtPmNsZWFyX3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQogCi0JcHBzLT5nbyA9IH4wOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CisJLyogV2FrZSB1cCBpaWYgY2FwdHVyZWQgc29tdGhpbmcgKi8KKwlpZiAoY2FwdHVyZWQpIHsKKwkJcHBzLT5nbyA9IH4wOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBwcy0+cXVldWUpOwogCi0Ja2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwkJa2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcHMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvcHBzLmMgYi9kcml2ZXJzL3Bwcy9wcHMuYwppbmRleCBmZWExN2U3Li5jYTUxODNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9wcHMuYworKysgYi9kcml2ZXJzL3Bwcy9wcHMuYwpAQCAtNzEsOSArNzEsMTQgQEAKIAljYXNlIFBQU19HRVRQQVJBTVM6CiAJCXByX2RlYnVnKCJQUFNfR0VUUEFSQU1TOiBzb3VyY2UgJWRcbiIsIHBwcy0+aWQpOwogCi0JCS8qIFJldHVybiBjdXJyZW50IHBhcmFtZXRlcnMgKi8KLQkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwcHMtPnBhcmFtcywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKKwkJc3Bpbl9sb2NrX2lycSgmcHBzLT5sb2NrKTsKKworCQkvKiBHZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyAqLworCQlwYXJhbXMgPSBwcHMtPnBhcmFtczsKKworCQlzcGluX3VubG9ja19pcnEoJnBwcy0+bG9jayk7CisKKwkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwYXJhbXMsIHNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggNzQ0ZWExZC4uZWZlNTY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMTI4Myw3ICsxMjgzLDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBhcmUgd2UgdGhlIGxhc3QgdXNlciBhbmQgcGVybWl0dGVkIHRvIGRpc2FibGUgPyAqLwotCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikgeworCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJgorCSAgICAocmRldi0+Y29uc3RyYWludHMgJiYgIXJkZXYtPmNvbnN0cmFpbnRzLT5hbHdheXNfb24pKSB7CiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwogCQlpZiAoX3JlZ3VsYXRvcl9jYW5fY2hhbmdlX3N0YXR1cyhyZGV2KSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggZjhiMjk1Ny4uZjlmNTE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC0xOTYsMTEgKzE5NiwxMCBAQAogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGRydmRhdGEtPmRldik7Ci0Ja2ZyZWUoZHJ2ZGF0YS0+ZGVzYy5uYW1lKTsKLQlrZnJlZShkcnZkYXRhKTsKLQogCWlmIChncGlvX2lzX3ZhbGlkKGRydmRhdGEtPmdwaW8pKQogCQlncGlvX2ZyZWUoZHJ2ZGF0YS0+Z3Bpbyk7CisJa2ZyZWUoZHJ2ZGF0YS0+ZGVzYy5uYW1lKTsKKwlrZnJlZShkcnZkYXRhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCmluZGV4IGJiNjFhZWQuLjkwMmRiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKQEAgLTE3NSwxOCArMTc1LDE4IEBACiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gbGRvLT53bTgzMXg7CiAJaW50IGN0cmxfcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0xET19DT05UUk9MOwogCWludCBvbl9yZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX09OX0NPTlRST0w7Ci0JdW5zaWduZWQgaW50IHJldDsKKwlpbnQgcmV0OwogCiAJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgb25fcmVnKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoIShyZXQgJiBXTTgzMVhfTERPMV9PTl9NT0RFKSkKIAkJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIGN0cmxfcmVnKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocmV0ICYgV004MzFYX0xETzFfTFBfTU9ERSkKIAkJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDRjZGIzMWEuLmEwYzgxNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKIGludCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZSAqdG0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKaW5kZXggN2ZlMWZhMi4uMDNlYTUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwpAQCAtNTgsNyArNTgsMTYgQEAKIAljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CiAJLyogQWNrIElSUSAqLwogCXdyaXRlbCgxLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfRVZFTlQpOworCS8qCisJICogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCisJICogdGhlIFJUQyBsaXZlcyBvbiBhIGxvd2VyLWNsb2NrZWQgbGluZSBhbmQgd2lsbAorCSAqIG5vdCByZWxlYXNlIHRoZSBJUlEgbGluZSB1bnRpbCBhZnRlciBhIGZldyAoc2xvd2VyKQorCSAqIGNsb2NrIGN5Y2xlcy4gVGhlIGludGVycnVwdCB3aWxsIGJlIHJlLWVuYWJsZWQgd2hlbgorCSAqIGEgbmV3IGFsYXJtIGlzIHNldCBhbnl3YXkuCisJICovCisJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKIAljbGtfZGlzYWJsZShydGFwLT5jbGspOworCiAJLyogU2V0IGFsYXJtIGZsYWcgKi8KIAlydGNfdXBkYXRlX2lycShydGFwLT5ydGMsIDEsIFJUQ19BRik7CiAKQEAgLTEyOCw2ICsxMzcsOCBAQAogCWVsc2UKIAkJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKIAljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBjb2g5MDEzMzFfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDhhMTFkZTkuLjYyMjI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRjLWNvcmUuaCIKIAogc3RhdGljIGRldl90IHJ0Y19kZXZ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYwppbmRleCBmNGRkODdlLi4zM2ExMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYwpAQCAtNzAsNyArNzAsNyBAQAogCXJ0Yy0+dG1faG91ciA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX0hPVVJdKTsKIAlydGMtPnRtX3dkYXkgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9XS0RBWV0pOwogCXJ0Yy0+dG1fbWRheSA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX0RBWV0pOwotCXJ0Yy0+dG1fbW9uID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdKTsKKwlydGMtPnRtX21vbiA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSkgLSAxOwogCXJ0Yy0+dG1feWVhciA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX1lFQVJdKSArIDEwMDsKIH0KIApAQCAtODEsNyArODEsNyBAQAogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9IT1VSXSA9IGJpbjJiY2QocnRjLT50bV9ob3VyKTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfV0tEQVldID0gYmluMmJjZChydGMtPnRtX3dkYXkpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9EQVldID0gYmluMmJjZChydGMtPnRtX21kYXkpOwotCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0gPSBiaW4yYmNkKHJ0Yy0+dG1fbW9uKTsKKwlwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdID0gYmluMmJjZChydGMtPnRtX21vbiArIDEpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9ZRUFSXSA9IGJpbjJiY2QocnRjLT50bV95ZWFyICUgMTAwKTsKIH0KIApAQCAtMjQ1LDggKzI0NSw5IEBACiAJcmV0ID0gcGNmNTA2MzNfd3JpdGVfYmxvY2socnRjLT5wY2YsIFBDRjUwNjMzX1JFR19SVENTQ0EsCiAJCQkJUENGNTA2MzNfVElfRVhURU5ULCAmcGNmX3RtLnRpbWVbMF0pOwogCi0JaWYgKCFhbGFybV9tYXNrZWQpCisJaWYgKCFhbGFybV9tYXNrZWQgfHwgYWxybS0+ZW5hYmxlZCkKIAkJcGNmNTA2MzNfaXJxX3VubWFzayhydGMtPnBjZiwgUENGNTA2MzNfSVJRX0FMQVJNKTsKKwlydGMtPmFsYXJtX2VuYWJsZWQgPSBhbHJtLT5lbmFibGVkOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1weGEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1weGEuYwppbmRleCBiYjhjYzA1Li43NDdjYTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXB4YS5jCkBAIC00MzgsMzQgKzQzOCwzNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YV9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YV9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQllbmFibGVfaXJxX3dha2UocHhhX3J0Yy0+aXJxX0Fscm0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHB4YV9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWRpc2FibGVfaXJxX3dha2UocHhhX3J0Yy0+aXJxX0Fscm0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhX3J0Y19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhX3J0Y19yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhX3J0Y19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFfcnRjX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhX3J0Y19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChweGFfcnRjX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGFfcnRjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJCT0gInB4YS1ydGMiLAorCQkubmFtZQk9ICJweGEtcnRjIiwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YV9ydGNfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCAwMjFiMjkyLi4yOWY5OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zOTMsMzEgKzM5MywzNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNhMTEwMF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQllbmFibGVfaXJxX3dha2UoSVJRX1JUQ0Fscm0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNhMTEwMF9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWRpc2FibGVfaXJxX3dha2UoSVJRX1JUQ0Fscm0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgc2ExMTAwX3J0Y19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgc2ExMTAwX3J0Y19yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2ExMTAwX3J0Y19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzYTExMDBfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzYTExMDBfcnRjX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMTAwX3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzYTExMDBfcnRjX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHNhMTEwMF9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNhMTEwMF9ydGNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAic2ExMTAwLXJ0YyIsCisJCS5uYW1lCT0gInNhMTEwMC1ydGMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmc2ExMTAwX3J0Y19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhZDE2NDA1Li40MjNjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtOTYsNyArOTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKIHsKLQlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7CisJcmV0dXJuICEhKHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2MzAyMF9jaGlwX29wcyB2MzAyMF9tbWlvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCAyYzgzOWQwLi5mYWRkZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yMDksMTkgKzIwOSwxOCBAQAogCiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaXJxX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGZyZXEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1NjQgY291bnQ7CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoZnJlcSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWNvdW50ID0gUlRDX0ZSRVFVRU5DWTsKIAlkb19kaXYoY291bnQsIGZyZXEpOwogCi0JcGVyaW9kaWNfY291bnQgPSBjb3VudDsKLQogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKwlwZXJpb2RpY19jb3VudCA9IGNvdW50OworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBwZXJpb2RpY19jb3VudCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIHBlcmlvZGljX2NvdW50ID4+IDE2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBkYWQwNDQ5Li5hYWNjYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTI1MDgsOCArMjUwOCw2IEBACiAJZGV2aWNlLT5zdG9wcGVkICY9IH5EQVNEX1VOUkVTVU1FRF9QTTsKIAogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JaWYgKGRldmljZS0+YmxvY2spCi0JCWRhc2Rfc2NoZWR1bGVfYmxvY2tfYmgoZGV2aWNlLT5ibG9jayk7CiAKIAlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5yZXN0b3JlKQogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+cmVzdG9yZShkZXZpY2UpOwpAQCAtMjUyMCw2ICsyNTE4LDkgQEAKIAkJICovCiAJCWRldmljZS0+c3RvcHBlZCB8PSBEQVNEX1VOUkVTVU1FRF9QTTsKIAorCWlmIChkZXZpY2UtPmJsb2NrKQorCQlkYXNkX3NjaGVkdWxlX2Jsb2NrX2JoKGRldmljZS0+YmxvY2spOworCiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTMyLDYgKzI1MzMsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCXVuc2lnbmVkIGxvbmcgKmlkYXc7CiAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIApAQCAtMjU0NSw5ICsyNTQ3LDE3IEBACiAKIAljY3cgPSBjcXItPmNwYWRkcjsKIAljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9SREM7Ci0JY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClyZGNfYnVmZmVyOwotCWNjdy0+Y291bnQgPSByZGNfYnVmZmVyX3NpemU7CisJaWYgKGlkYWxfaXNfbmVlZGVkKHJkY19idWZmZXIsIHJkY19idWZmZXJfc2l6ZSkpIHsKKwkJaWRhdyA9ICh1bnNpZ25lZCBsb25nICopIChjcXItPmRhdGEpOworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBpZGF3OworCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfSURBOworCQlpZGF3ID0gaWRhbF9jcmVhdGVfd29yZHMoaWRhdywgcmRjX2J1ZmZlciwgcmRjX2J1ZmZlcl9zaXplKTsKKwl9IGVsc2UgeworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSByZGNfYnVmZmVyOworCQljY3ctPmZsYWdzID0gMDsKKwl9CiAKKwljY3ctPmNvdW50ID0gcmRjX2J1ZmZlcl9zaXplOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY3FyLT5leHBpcmVzID0gMTAqSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYWIzNTIxNy4uNDE3Yjk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMjMzOCw2ICsyMzM4LDggQEAKIAkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KIAlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOwogCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKKwlpZiAoYmxrX3Blcl90cmsgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KIAlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSBibGtfcnFfcG9zKHJlcSkgPj4gYmxvY2stPnMyYl9zaGlmdDsKIAlmaXJzdF9vZmZzID0gc2VjdG9yX2RpdihmaXJzdF90cmssIGJsa19wZXJfdHJrKTsKQEAgLTMyMTEsOCArMzIxMywxMCBAQAogaW50IGRhc2RfZWNrZF9yZXN0b3JlX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGRhc2RfZWNrZF9jaGFyYWN0ZXJpc3RpY3MgdGVtcF9yZGNfZGF0YTsKIAlpbnQgaXNfa25vd24sIHJjOwogCXN0cnVjdCBkYXNkX3VpZCB0ZW1wX3VpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCkBAIC0zMjI1LDcgKzMyMjksOCBAQAogCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZwcml2YXRlLT51aWQpOwogCWRhc2RfZ2V0X3VpZChkZXZpY2UtPmNkZXYsICZ0ZW1wX3VpZCk7CiAJaWYgKG1lbWNtcCgmcHJpdmF0ZS0+dWlkLCAmdGVtcF91aWQsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKSAhPSAwKQotCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzIGNoYW5nZWRcbiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzICIKKwkJCSJjaGFuZ2VkXG4iKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+dWlkKTsKQEAgLTMyNDUsMTUgKzMyNTAsMTcgQEAKIAlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCi0JbWVtc2V0KCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgc2l6ZW9mKHByaXZhdGUtPnJkY19kYXRhKSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCBEQVNEX0VDS0RfTUFHSUMsCi0JCQkJCSAmcHJpdmF0ZS0+cmRjX2RhdGEsIDY0KTsKKwkJCQkJICZ0ZW1wX3JkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7CiAJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJCSAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBmYWlsZWQsIHJjPSVkIGZvciAiCiAJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnI7CiAJfQorCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisJbWVtY3B5KCZwcml2YXRlLT5yZGNfZGF0YSwgJnRlbXBfcmRjX2RhdGEsIHNpemVvZih0ZW1wX3JkY19kYXRhKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwogCiAJLyogYWRkIGRldmljZSB0byBhbGlhcyBtYW5hZ2VtZW50ICovCiAJZGFzZF9hbGlhc19hZGRfZGV2aWNlKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDg5ZWNlMWMuLjY2ZTIxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAlhdG9taWNfc2V0KCZtb25wcml2LT5tc2dsaW1fY291bnQsIDApOwogCW1vbnByaXYtPndyaXRlX2luZGV4ICA9IDA7CiAJbW9ucHJpdi0+cmVhZF9pbmRleCAgID0gMDsKKwlkZXZfc2V0X2RydmRhdGEobW9ucmVhZGVyX2RldmljZSwgTlVMTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTU9OX01TR0xJTTsgaSsrKQogCQlrZnJlZShtb25wcml2LT5tc2dfYXJyYXlbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCmluZGV4IGQ2YTAyMmY1Li42MmRkZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCkBAIC0xMzYxLDExICsxMzYxLDEzIEBACiAKIHZvaWQgcmF3MzI3MF9wbV91bmZyZWV6ZShzdHJ1Y3QgcmF3MzI3MF92aWV3ICp2aWV3KQogeworI2lmZGVmIENPTkZJR19UTjMyNzBfQ09OU09MRQogCXN0cnVjdCByYXczMjcwICpycDsKIAogCXJwID0gdmlldy0+ZGV2OwogCWlmIChycCAmJiB0ZXN0X2JpdChSQVczMjcwX0ZMQUdTX0ZST1pFTiwgJnJwLT5mbGFncykpCiAJCWNjd19kZXZpY2VfZm9yY2VfY29uc29sZSgpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZV9pZCByYXczMjcwX2lkW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKaW5kZXggZGFhZWMxOC4uYjQ0NDYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwpAQCAtMjYsNyArMjYsNiBAQAogc3RhdGljIGludCBzY2xwX2FzeW5jX3NlbmRfd2FpdChjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY2FsbGhvbWVfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NscF9hc3luY19sb2NrKTsKLXN0YXRpYyBjaGFyIG5vZGVuYW1lWzY0XTsKICNkZWZpbmUgU0NMUF9OT1JNQUxfV1JJVEUJMHgwMAogCiBzdHJ1Y3QgYXN5bmNfZXZidWYgewpAQCAtNTIsOSArNTEsMTAgQEAKIHN0YXRpYyBpbnQgY2FsbF9ob21lX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0JCXN0cm5jYXQoZGF0YSwgbm9kZW5hbWUsIHN0cmxlbihub2RlbmFtZSkpOwotCQlzY2xwX2FzeW5jX3NlbmRfd2FpdChkYXRhKTsKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cm5jYXQoZGF0YSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQlzaXplb2YoaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lKSk7CisJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7CisJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhbGxfaG9tZV9wYW5pY19uYiA9IHsKQEAgLTYyLDIxICs2MiwyMCBAQAogCS5wcmlvcml0eSA9IElOVF9NQVgsCiB9OwogCi1zdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY19oYW5kbGVyX2NhbGxob21lKHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogCQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmNvdW50LAogCQkJCSBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGxlbiwgcmM7Ci0JY2hhciBidWZbMl07CisJY2hhciBidWZbM107CiAKLQlpZiAoISpjb3VudCB8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CisJaWYgKCEqY291bnQgfHwgKCpwcG9zICYmICF3cml0ZSkpIHsKIAkJKmNvdW50ID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghd3JpdGUpIHsKLQkJbGVuID0gIHNwcmludGYoYnVmLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwotCQlidWZbbGVuXSA9ICdcMCc7CisJCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgY2FsbGhvbWVfZW5hYmxlZCk7CiAJCXJjID0gY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBzaXplb2YoYnVmKSk7CiAJCWlmIChyYyAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDAsNyArOTksNyBAQAogCXsKIAkJLnByb2NuYW1lCT0gImNhbGxob21lIiwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2hhbmRsZXJfY2FsbGhvbWUsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2hhbmRsZXJfY2FsbGhvbWUsCiAJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKQEAgLTE3MSwzOSArMTcwLDI5IEBACiAJcmMgPSBzY2xwX3JlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKLQljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKLQlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpIHsKLQkJcmMgPSAtRU5PTUVNOworCXJjID0gLUVPUE5PVFNVUFA7CisJaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKQogCQlnb3RvIG91dF9zY2xwOwotCX0KLQlpZiAoIShzY2xwX2FzeW5jX3JlZ2lzdGVyLnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfQVNZTkNfTUFTSykpIHsKLQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXRfc2NscDsKLQl9CiAJcmMgPSAtRU5PTUVNOworCWNhbGxob21lX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoa2Vybl9kaXJfdGFibGUpOworCWlmICghY2FsbGhvbWVfc3lzY3RsX2hlYWRlcikKKwkJZ290byBvdXRfc2NscDsKIAlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjbHBfcmVxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXF1ZXN0KQotCQlnb3RvIG91dF9zeXM7CiAJc2NjYiA9IChzdHJ1Y3Qgc2NscF9hc3luY19zY2NiICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JaWYgKCFzY2NiKQorCWlmICghcmVxdWVzdCB8fCAhc2NjYikKIAkJZ290byBvdXRfbWVtOwotCXJjID0gIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKLQkJCQkJICAgICAmY2FsbF9ob21lX3BhbmljX25iKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X21lbTsKLQotCXN0cm5jcHkobm9kZW5hbWUsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwgNjQpOwotCXJldHVybiAwOwotCisJcmMgPSBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJCSAgICAmY2FsbF9ob21lX3BhbmljX25iKTsKKwlpZiAoIXJjKQorCQlnb3RvIG91dDsKIG91dF9tZW06CiAJa2ZyZWUocmVxdWVzdCk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzY2NiKTsKLW91dF9zeXM6CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoY2FsbGhvbWVfc3lzY3RsX2hlYWRlcik7CiBvdXRfc2NscDoKIAlzY2xwX3VucmVnaXN0ZXIoJnNjbHBfYXN5bmNfcmVnaXN0ZXIpOworb3V0OgogCXJldHVybiByYzsKLQogfQogbW9kdWxlX2luaXQoc2NscF9hc3luY19pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwppbmRleCA4NGMxOTFjLi4wNTkwOWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwpAQCAtMjAsOSArMjAsMTIgQEAKIAogI2luY2x1ZGUgInNjbHAuaCIKIAorc3RhdGljIHZvaWQgKCpvbGRfbWFjaGluZV9yZXN0YXJ0KShjaGFyICopOworc3RhdGljIHZvaWQgKCpvbGRfbWFjaGluZV9oYWx0KSh2b2lkKTsKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfcG93ZXJfb2ZmKSh2b2lkKTsKKwogLyogU2h1dGRvd24gaGFuZGxlci4gU2lnbmFsIGNvbXBsZXRpb24gb2Ygc2h1dGRvd24gYnkgbG9hZGluZyBzcGVjaWFsIFBTVy4gKi8KLXN0YXRpYyB2b2lkCi1kb19tYWNoaW5lX3F1aWVzY2Uodm9pZCkKK3N0YXRpYyB2b2lkIGRvX21hY2hpbmVfcXVpZXNjZSh2b2lkKQogewogCXBzd190IHF1aWVzY2VfcHN3OwogCkBAIC0zMywyMyArMzYsNDggQEAKIH0KIAogLyogSGFuZGxlciBmb3IgcXVpZXNjZSBldmVudC4gU3RhcnQgc2h1dGRvd24gcHJvY2VkdXJlLiAqLwotc3RhdGljIHZvaWQKLXNjbHBfcXVpZXNjZV9oYW5kbGVyKHN0cnVjdCBldmJ1Zl9oZWFkZXIgKmV2YnVmKQorc3RhdGljIHZvaWQgc2NscF9xdWllc2NlX2hhbmRsZXIoc3RydWN0IGV2YnVmX2hlYWRlciAqZXZidWYpCiB7Ci0JX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkICopIGRvX21hY2hpbmVfcXVpZXNjZTsKLQlfbWFjaGluZV9oYWx0ID0gZG9fbWFjaGluZV9xdWllc2NlOwotCV9tYWNoaW5lX3Bvd2VyX29mZiA9IGRvX21hY2hpbmVfcXVpZXNjZTsKKwlpZiAoX21hY2hpbmVfcmVzdGFydCAhPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2UpIHsKKwkJb2xkX21hY2hpbmVfcmVzdGFydCA9IF9tYWNoaW5lX3Jlc3RhcnQ7CisJCW9sZF9tYWNoaW5lX2hhbHQgPSBfbWFjaGluZV9oYWx0OworCQlvbGRfbWFjaGluZV9wb3dlcl9vZmYgPSBfbWFjaGluZV9wb3dlcl9vZmY7CisJCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2U7CisJCV9tYWNoaW5lX2hhbHQgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJCV9tYWNoaW5lX3Bvd2VyX29mZiA9IGRvX21hY2hpbmVfcXVpZXNjZTsKKwl9CiAJY3RybF9hbHRfZGVsKCk7CiB9CiAKKy8qIFVuZG8gbWFjaGluZSByZXN0YXJ0L2hhbHQvcG93ZXJfb2ZmIG1vZGlmaWNhdGlvbiBvbiByZXN1bWUgKi8KK3N0YXRpYyB2b2lkIHNjbHBfcXVpZXNjZV9wbV9ldmVudChzdHJ1Y3Qgc2NscF9yZWdpc3RlciAqcmVnLAorCQkJCSAgZW51bSBzY2xwX3BtX2V2ZW50IHNjbHBfcG1fZXZlbnQpCit7CisJc3dpdGNoIChzY2xwX3BtX2V2ZW50KSB7CisJY2FzZSBTQ0xQX1BNX0VWRU5UX1JFU1RPUkU6CisJCWlmIChvbGRfbWFjaGluZV9yZXN0YXJ0KSB7CisJCQlfbWFjaGluZV9yZXN0YXJ0ID0gb2xkX21hY2hpbmVfcmVzdGFydDsKKwkJCV9tYWNoaW5lX2hhbHQgPSBvbGRfbWFjaGluZV9oYWx0OworCQkJX21hY2hpbmVfcG93ZXJfb2ZmID0gb2xkX21hY2hpbmVfcG93ZXJfb2ZmOworCQkJb2xkX21hY2hpbmVfcmVzdGFydCA9IE5VTEw7CisJCQlvbGRfbWFjaGluZV9oYWx0ID0gTlVMTDsKKwkJCW9sZF9tYWNoaW5lX3Bvd2VyX29mZiA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ0xQX1BNX0VWRU5UX0ZSRUVaRToKKwljYXNlIFNDTFBfUE1fRVZFTlRfVEhBVzoKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHNjbHBfcmVnaXN0ZXIgc2NscF9xdWllc2NlX2V2ZW50ID0gewogCS5yZWNlaXZlX21hc2sgPSBFVlRZUF9TSUdRVUlFU0NFX01BU0ssCi0JLnJlY2VpdmVyX2ZuID0gc2NscF9xdWllc2NlX2hhbmRsZXIKKwkucmVjZWl2ZXJfZm4gPSBzY2xwX3F1aWVzY2VfaGFuZGxlciwKKwkucG1fZXZlbnRfZm4gPSBzY2xwX3F1aWVzY2VfcG1fZXZlbnQKIH07CiAKIC8qIEluaXRpYWxpemUgcXVpZXNjZSBkcml2ZXIuICovCi1zdGF0aWMgaW50IF9faW5pdAotc2NscF9xdWllc2NlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNjbHBfcXVpZXNjZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHNjbHBfcmVnaXN0ZXIoJnNjbHBfcXVpZXNjZV9ldmVudCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKaW5kZXggMTc4NzI0Zi4uYjlkMmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwpAQCAtNzA1LDIxICs3MDUsNiBAQAogfQogX19pbml0Y2FsbChzY2xwX3Z0MjIwX3R0eV9pbml0KTsKIAotI2lmZGVmIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEUKLQotc3RhdGljIHZvaWQKLXNjbHBfdnQyMjBfY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQotewotCV9fc2NscF92dDIyMF93cml0ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWYsIGNvdW50LCAxLCAxLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICoKLXNjbHBfdnQyMjBfY29uX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKLXsKLQkqaW5kZXggPSAwOwotCXJldHVybiBzY2xwX3Z0MjIwX2RyaXZlcjsKLX0KLQogc3RhdGljIHZvaWQgX19zY2xwX3Z0MjIwX2ZsdXNoX2J1ZmZlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NzYsNiArNzYxLDIxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NDTFBfVlQyMjBfQ09OU09MRQorCitzdGF0aWMgdm9pZAorc2NscF92dDIyMF9jb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJX19zY2xwX3Z0MjIwX3dyaXRlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1ZiwgY291bnQsIDEsIDEsIDApOworfQorCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKgorc2NscF92dDIyMF9jb25fZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQoreworCSppbmRleCA9IDA7CisJcmV0dXJuIHNjbHBfdnQyMjBfZHJpdmVyOworfQorCiBzdGF0aWMgaW50CiBzY2xwX3Z0MjIwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggNjRmNTdlZi4uMGMwNzA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTYyLDkgKzE2MiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJmRldmljZS0+YmxrX2RhdGEucmVxdWVzdF9xdWV1ZV9sb2NrKTsKIAl3aGlsZSAoCiAJCSFibGtfcXVldWVfcGx1Z2dlZChxdWV1ZSkgJiYKLQkJKHJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHF1ZXVlKSkgJiYKKwkJYmxrX3BlZWtfcmVxdWVzdChxdWV1ZSkgJiYKIAkJbnJfcXVldWVkIDwgVEFQRUJMT0NLX01JTl9SRVFVRVVFCiAJKSB7CisJCXJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHF1ZXVlKTsKIAkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKIAkJCURCRl9FVkVOVCgxLCAiVEJMT0NLOiBSZWplY3Rpbmcgd3JpdGUgcmVxdWVzdFxuIik7CiAJCQlzcGluX3VubG9ja19pcnEoJmRldmljZS0+YmxrX2RhdGEucmVxdWVzdF9xdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IDY1NjVmMDIuLjdlYWI5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtMjY1LDEzICsyNjUsMTEgQEAKIHN0YXRpYyB2b2lkICoKIGNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgY2N3ZGV2X2l0ZXIgKml0ZXI7CisJc3RydWN0IGNjd2Rldl9pdGVyICppdGVyID0gcy0+cHJpdmF0ZTsKIAogCWlmICgqb2Zmc2V0ID49IChfX01BWF9TVUJDSEFOTkVMICsgMSkgKiAoX19NQVhfU1NJRCArIDEpKQogCQlyZXR1cm4gTlVMTDsKLQlpdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVyKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwltZW1zZXQoaXRlciwgMCwgc2l6ZW9mKCppdGVyKSk7CiAJaXRlci0+c3NpZCA9ICpvZmZzZXQgLyAoX19NQVhfU1VCQ0hBTk5FTCArIDEpOwogCWl0ZXItPmRldm5vID0gKm9mZnNldCAlIChfX01BWF9TVUJDSEFOTkVMICsgMSk7CiAJcmV0dXJuIGl0ZXI7CkBAIC0yODAsOCArMjc4LDYgQEAKIHN0YXRpYyB2b2lkCiBjaW9faWdub3JlX3Byb2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCkKIHsKLQlpZiAoIUlTX0VSUihpdCkpCi0JCWtmcmVlKGl0KTsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMzc4LDE0ICszNzQsMTUgQEAKIHN0YXRpYyBpbnQKIGNpb19pZ25vcmVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY2lvX2lnbm9yZV9wcm9jX3NlcV9vcHMpOworCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZjaW9faWdub3JlX3Byb2Nfc2VxX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpb19pZ25vcmVfcHJvY19mb3BzID0gewogCS5vcGVuICAgID0gY2lvX2lnbm9yZV9wcm9jX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIAkud3JpdGUgICA9IGNpb19pZ25vcmVfd3JpdGUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwppbmRleCA0MDAwMjgzLi44YWI1MTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogCWNocC0+c3RhdGUgPSAxOwogCWNocC0+ZGV2LnBhcmVudCA9ICZjaGFubmVsX3N1YnN5c3RlbXNbY2hwaWQuY3NzaWRdLT5kZXZpY2U7CiAJY2hwLT5kZXYucmVsZWFzZSA9IGNocF9yZWxlYXNlOwotCWRldl9zZXRfbmFtZSgmY2hwLT5kZXYsICJjaHAleC4lMDJ4IiwgY2hwaWQuY3NzaWQsIGNocGlkLmlkKTsKIAogCS8qIE9idGFpbiBjaGFubmVsIHBhdGggZGVzY3JpcHRpb24gYW5kIGZpbGwgaXQgaW4uICovCiAJcmV0ID0gY2hzY19kZXRlcm1pbmVfYmFzZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBpZCwgJmNocC0+ZGVzYyk7CkBAIC00MTEsNiArNDEwLDcgQEAKIAl9IGVsc2UgewogCQljaHAtPmNtZyA9IC0xOwogCX0KKwlkZXZfc2V0X25hbWUoJmNocC0+ZGV2LCAiY2hwJXguJTAyeCIsIGNocGlkLmNzc2lkLCBjaHBpZC5pZCk7CiAKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNocC0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGY3ODBiZGQuLjI0OTBiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMTI1MCw4ICsxMjUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAotCWNkZXYgPSBzY2hfZ2V0X2NkZXYoc2NoKTsKLQlpZiAoY2RldikgeworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkgewogCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2NoLT5kZXYua29iaiwKIAkJCQkJJmlvX3N1YmNoYW5uZWxfYXR0cl9ncm91cCk7CiAJCWlmIChyYykKQEAgLTEyNjAsMTMgKzEyNTksMTMgQEAKIAkJCQkgICAgICAiMC4leC4lMDR4IChyYz0lZClcbiIsCiAJCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubywgcmMpOwogCQkvKgotCQkgKiBUaGlzIHN1YmNoYW5uZWwgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBjY3dfZGV2aWNlLgorCQkgKiBUaGUgY29uc29sZSBzdWJjaGFubmVsIGFscmVhZHkgaGFzIGFuIGFzc29jaWF0ZWQgY2N3X2RldmljZS4KIAkJICogVGhyb3cgdGhlIGRlbGF5ZWQgdWV2ZW50IGZvciB0aGUgc3ViY2hhbm5lbCwgcmVnaXN0ZXIKLQkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuIFRoaXMgaGFwcGVucyBmb3IgYWxsIGVhcmx5Ci0JCSAqIGRldmljZXMsIGUuZy4gdGhlIGNvbnNvbGUuCisJCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LgogCQkgKi8KIAkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKKwkJY2RldiA9IHNjaF9nZXRfY2RldihzY2gpOwogCQljZGV2LT5kZXYuZ3JvdXBzID0gY2N3ZGV2X2F0dHJfZ3JvdXBzOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKIAkJY2N3X2RldmljZV9yZWdpc3RlcihjZGV2KTsKQEAgLTE2MDksNyArMTYwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRldmljZV9zZXRfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQordm9pZCBjY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJaWYgKCFjZGV2KQogCQlyZXR1cm47CkBAIC0xNzA1LDcgKzE3MDQsNyBAQAogCQljY3dfZGV2aWNlX3RyaWdnZXJfcmVwcm9iZShjZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBESVNDOgotCQlkZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKKwkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGVkMzlhMmMuLjI0NmM2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtMTI1LDYgKzEyNSw3IEBACiB2b2lkIGNjd19kZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHN0cnVjdCBjY3dfZGV2aWNlICopOwogdm9pZCBjY3dfZGV2aWNlX2tpbGxfaW8oc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X2RldmljZV9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKK3ZvaWQgY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIHZvaWQgY2N3X2RldmljZV9zZXRfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiAKIC8qIHFkaW8gbmVlZHMgdGhpcy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggZTcyOGNlNC4uYjk2MTNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTM4NywxOSArMzg3LDM1IEBACiAKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IHN0YXRlOwogCi0JaWYgKHN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgeworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJQ0lPX01TR19FVkVOVCgwLCAiQm94ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJCWlmIChjZGV2LT5vbmxpbmUgJiYgIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCiAJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7Ci0JfQotCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfTk9UX09QRVIpIHsKKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfTk9UX09QRVI6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkRldmljZSAlMDR4IGdvbmUgb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQogCQkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKKwkJZWxzZQorCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJCWJyZWFrOworCWNhc2UgREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKwkJQ0lPX01TR19FVkVOVCgwLCAiRGlzY29ubmVjdGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgIgorCQkJICAgICAgIiUwNHhcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKKwkJCSAgICAgIHNjaC0+c2NoaWQuc2NoX25vKTsKKwkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkpCisJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQllbHNlCisJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5KSB7CkBAIC02NzEsNiArNjg3LDEwIEBACiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfTk9UX09QRVIpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgeworCQljY3dfZGV2aWNlX2RvbmUoY2RldiwgREVWX1NUQVRFX0JPWEVEKTsKKwkJcmV0dXJuIDA7CisJfQogCWlmIChjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSkgewogCQljY3dfZGV2aWNlX2RvbmUoY2RldiwgREVWX1NUQVRFX09GRkxJTkUpOwogCQlyZXR1cm4gMDsKQEAgLTczMCwxMSArNzUwLDEwIEBACiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX2dlbmVyaWNfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCQkgICAgICAgZW51bSBkZXZfZXZlbnQgZGV2X2V2ZW50KQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0KLQljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwotCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7Ci0JY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CisJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJZWxzZQorCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IDFiNzhmNjM5Li43Njc2OTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQkgICBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCSA9IHFzdGF0X3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKaW5kZXggZWZmOTQzOS4uOTY4ZTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCkBAIC04NCw3ICs4NCw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHFkaW9fcGVyZl9wcm9jX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxZGlvX3BlcmZfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWRpb19wZXJmX3Byb2NfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0gcWRpb19wZXJmX3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwppbmRleCBjMjBkNDc5Li41Njc3YjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAJCS5Ub0NhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAogCQkuRnJvbUNhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBDUFJCWCBzdGF0aWNfY3ByYnggPSB7CisJc3RhdGljIHN0cnVjdCBDUFJCWCBsb2NhbF9jcHJieCA9IHsKIAkJLmNwcmJfbGVuCT0gMHgwMGRjLAogCQkuY3ByYl92ZXJfaWQJPSAweDAyLAogCQkuZnVuY19pZAk9IHsweDU0LCAweDMyfSwKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJbXNnLT5oZHIgPSBzdGF0aWNfdHlwZTZfaGRyWDsKIAltc2ctPmhkci5Gcm9tQ2FyZExlbjIgPSByYW5kb21fbnVtYmVyX2xlbmd0aCwKLQltc2ctPmNwcmJ4ID0gc3RhdGljX2NwcmJ4OworCW1zZy0+Y3ByYnggPSBsb2NhbF9jcHJieDsKIAltc2ctPmNwcmJ4LnJwbF9kYXRhbCA9IHJhbmRvbV9udW1iZXJfbGVuZ3RoLAogCW1zZy0+Y3ByYnguZG9tYWluID0gQVBfUUlEX1FVRVVFKGFwX2Rldi0+cWlkKTsKIAltZW1jcHkobXNnLT5mdW5jdGlvbl9jb2RlLCBtc2ctPmhkci5mdW5jdGlvbl9jb2RlLCAweDAyKTsKQEAgLTU2MSw3ICs1NjEsOCBAQAogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X2ljYSh6ZGV2LCByZXBseSwKIAkJCQkJCSAgb3V0cHV0ZGF0YSwgb3V0cHV0ZGF0YWxlbmd0aCk7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwogCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KQEAgLTU4Nyw3ICs1ODgsOCBAQAogCQl9CiAJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCiAJCQlyZXR1cm4gY29udmVydF90eXBlODZfeGNyYih6ZGV2LCByZXBseSwgeGNSQik7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl4Y1JCLT5zdGF0dXMgPSAweDAwMDgwNDRETDsgLyogSEREX0ludmFsaWRQYXJtICovCiAJCXpkZXYtPm9ubGluZSA9IDA7CkBAIC02MTAsNyArNjEyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X3JuZyh6ZGV2LCByZXBseSwgZGF0YSk7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwogCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwppbmRleCAxMDIwMDBkLi4zMDEyMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCkBAIC0xNTgsNyArMTU4LDEyIEBACiAJCXNtc2dfcGF0aC0+ZmxhZ3MgPSAwOwogCQlyYyA9IGl1Y3ZfcGF0aF9jb25uZWN0KHNtc2dfcGF0aCwgJnNtc2dfaGFuZGxlciwgIipNU0cgICAgIiwKIAkJCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXVjdl9wYXRoX2Nvbm5lY3QgcmV0dXJuZWQgd2l0aCByYyAlaVxuIiwgcmMpOworI2lmZGVmIENPTkZJR19QTV9ERUJVRworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiaXVjdl9wYXRoX2Nvbm5lY3QgcmV0dXJuZWQgd2l0aCByYyAlaVxuIiwgcmMpOworI2VuZGlmCisJCWNwY21kKCJTRVQgU01TRyBJVUNWIiwgTlVMTCwgMCwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggMWJlNmJmNy4uMjg4OWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC04MCwyOCArODAsMzUgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGNoYXIgKmJ1c2lkLCB1NjQgd3dwbiwgdTY0IGx1bikKIHsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCi0JbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci0JcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlhZGFwdGVyID0gemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChidXNpZCk7Ci0JaWYgKGFkYXB0ZXIpCi0JCXpmY3BfYWRhcHRlcl9nZXQoYWRhcHRlcik7Ci0JcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCWNjd2RldiA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOworCWlmICghY2N3ZGV2KQorCQlyZXR1cm47CiAKKwlpZiAoY2N3X2RldmljZV9zZXRfb25saW5lKGNjd2RldikpCisJCWdvdG8gb3V0X2Njd2RldjsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd2Rldi0+ZGV2KTsKIAlpZiAoIWFkYXB0ZXIpCi0JCWdvdG8gb3V0X2FkYXB0ZXI7Ci0JcG9ydCA9IHpmY3BfcG9ydF9lbnF1ZXVlKGFkYXB0ZXIsIHd3cG4sIDAsIDApOwotCWlmIChJU19FUlIocG9ydCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOworCisJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKTsKKwlpZiAoIXBvcnQpCiAJCWdvdG8gb3V0X3BvcnQ7CisKKwl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCXVuaXQgPSB6ZmNwX3VuaXRfZW5xdWV1ZShwb3J0LCBsdW4pOwogCWlmIChJU19FUlIodW5pdCkpCiAJCWdvdG8gb3V0X3VuaXQ7CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKLQljY3dfZGV2aWNlX3NldF9vbmxpbmUoYWRhcHRlci0+Y2N3X2RldmljZSk7CiAKKwl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCAwLCAiYXVpZGNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIApAQCAtMTExLDIwICsxMTgsMjMgQEAKIAl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogb3V0X3BvcnQ6CiAJemZjcF9hZGFwdGVyX3B1dChhZGFwdGVyKTsKLW91dF9hZGFwdGVyOgorb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworb3V0X2Njd2RldjoKKwlwdXRfZGV2aWNlKCZjY3dkZXYtPmRldik7CiAJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9zZXR1cChjaGFyICpkZXZzdHIpCiB7CiAJY2hhciAqdG9rZW47Ci0JY2hhciAqc3RyOworCWNoYXIgKnN0ciwgKnN0cl9zYXZlZDsKIAljaGFyIGJ1c2lkW1pGQ1BfQlVTX0lEX1NJWkVdOwogCXU2NCB3d3BuLCBsdW47CiAKIAkvKiBkdXBsaWNhdGUgZGV2c3RyIGFuZCBrZWVwIHRoZSBvcmlnaW5hbCBmb3Igc3lzZnMgcHJlc2VudGF0aW9uKi8KLQlzdHIgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyX3NhdmVkID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0ciA9IHN0cl9zYXZlZDsKIAlpZiAoIXN0cikKIAkJcmV0dXJuOwogCkBAIC0xNDMsMTIgKzE1MywxMiBAQAogCWlmICghdG9rZW4gfHwgc3RyaWN0X3N0cnRvdWxsKHRva2VuLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZsdW4pKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlrZnJlZShzdHIpOworCWtmcmVlKHN0cl9zYXZlZCk7CiAJemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoYnVzaWQsIHd3cG4sIGx1bik7CiAJcmV0dXJuOwogCi0gZXJyX291dDoKLQlrZnJlZShzdHIpOworZXJyX291dDoKKwlrZnJlZShzdHJfc2F2ZWQpOwogCXByX2VycigiJXMgaXMgbm90IGEgdmFsaWQgU0NTSSBkZXZpY2VcbiIsIGRldnN0cik7CiB9CiAKQEAgLTU5MywxMCArNjAzLDggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zdGF0X3dvcmspOwogCXpmY3BfZmNfd2thX3BvcnRzX2ZvcmNlX29mZmxpbmUoYWRhcHRlci0+Z3MpOwotCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYua29iaiwKIAkJCSAgICZ6ZmNwX3N5c2ZzX2FkYXB0ZXJfYXR0cnMpOwogCWRldl9zZXRfZHJ2ZGF0YSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IDBjOTBmOGUuLmUwODMzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMTAyLDYgKzEwMiwxNCBAQAogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CiAJaWYgKCFhZGFwdGVyKQogCQlnb3RvIG91dDsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCisJLyogdGhpcyBhbHNvIHJlbW92ZXMgdGhlIHNjc2kgZGV2aWNlcywgc28gY2FsbCBpdCBmaXJzdCAqLworCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAKIAl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CkBAIC0xMTcsMTEgKzEyNSw4IEBACiAJd3JpdGVfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmcG9ydF9yZW1vdmVfbGgsIGxpc3QpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkgewotCQkJaWYgKHVuaXQtPmRldmljZSkKLQkJCQlzY3NpX3JlbW92ZV9kZXZpY2UodW5pdC0+ZGV2aWNlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkKIAkJCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwotCQl9CiAJCXpmY3BfcG9ydF9kZXF1ZXVlKHBvcnQpOwogCX0KIAl3YWl0X2V2ZW50KGFkYXB0ZXItPnJlbW92ZV93cSwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlZmNvdW50KSA9PSAwKTsKQEAgLTE5MiwxMyArMTk3LDkgQEAKIAogCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7Ci0JaWYgKCFhZGFwdGVyKQotCQlnb3RvIG91dDsKLQogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc29mZjEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci1vdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1MywxMyArMjU0LDE3IEBACiAKIAltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOworCWlmICghYWRhcHRlcikKKwkJZ290byBvdXQ7CisKIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NodXQxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKK291dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogfQogCi1zdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyID0geworc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyID0gewogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICA9ICJ6ZmNwIiwKIAkuaWRzICAgICAgICAgPSB6ZmNwX2Njd19kZXZpY2VfaWQsCkBAIC0yODQsMjAgKzI4OSwzIEBACiB7CiAJcmV0dXJuIGNjd19kcml2ZXJfcmVnaXN0ZXIoJnpmY3BfY2N3X2RyaXZlcik7CiB9Ci0KLS8qKgotICogemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZCAtIGZpbmQgemZjcF9hZGFwdGVyIHN0cnVjdAotICogQGJ1c2lkOiBidXMgaWQgc3RyaW5nIG9mIHpmY3AgYWRhcHRlciB0byBmaW5kCi0gKi8KLXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoY2hhciAqYnVzaWQpCi17Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2U7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7Ci0KLQljY3dfZGV2aWNlID0gZ2V0X2Njd2Rldl9ieV9idXNpZCgmemZjcF9jY3dfZHJpdmVyLCBidXNpZCk7Ci0JaWYgKGNjd19kZXZpY2UpIHsKLQkJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKLQkJcHV0X2RldmljZSgmY2N3X2RldmljZS0+ZGV2KTsKLQl9Ci0JcmV0dXJuIGFkYXB0ZXI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCmluZGV4IDgzMDVjODcuLmVmNjgxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCkBAIC04Niw4ICs4NiwyMyBAQAogc3RhdGljIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfY2ZkY19nZXRfYWRhcHRlcih1MzIgZGV2bm8pCiB7CiAJY2hhciBidXNpZFs5XTsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCiAJc25wcmludGYoYnVzaWQsIHNpemVvZihidXNpZCksICIwLjAuJTA0eCIsIGRldm5vKTsKLQlyZXR1cm4gemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChidXNpZCk7CisJY2N3ZGV2ID0gZ2V0X2Njd2Rldl9ieV9idXNpZCgmemZjcF9jY3dfZHJpdmVyLCBidXNpZCk7CisJaWYgKCFjY3dkZXYpCisJCWdvdG8gb3V0OworCisJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3ZGV2LT5kZXYpOworCWlmICghYWRhcHRlcikKKwkJZ290byBvdXRfcHV0OworCisJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKK291dF9wdXQ6CisJcHV0X2RldmljZSgmY2N3ZGV2LT5kZXYpOworb3V0OgorCXJldHVybiBhZGFwdGVyOwogfQogCiBzdGF0aWMgaW50IHpmY3BfY2ZkY19zZXRfZnNmKHN0cnVjdCB6ZmNwX2ZzZl9jZmRjICpmc2ZfY2ZkYywgaW50IGNvbW1hbmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCA3M2QzNjZiLi5mNzNlMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTg1OCwxMCArODU4LDcgQEAKIAkJaWYgKGZjX2hvc3RfcG9ydF90eXBlKGFkYXB0ZXItPnNjc2lfaG9zdCkgPT0gRkNfUE9SVFRZUEVfUFRQKQogCQkJcmV0dXJuIHpmY3BfZXJwX29wZW5fcHRwX3BvcnQoYWN0KTsKIAkJaWYgKCFwb3J0LT5kX2lkKSB7Ci0JCQl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwotCQkJaWYgKCFxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsCi0JCQkJCSZwb3J0LT5naWRfcG5fd29yaykpCi0JCQkJemZjcF9wb3J0X3B1dChwb3J0KTsKKwkJCXpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHBvcnQpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9wb3J0KGFjdCk7CkBAIC04NjksMTIgKzg2NiwxMSBAQAogCWNhc2UgWkZDUF9FUlBfU1RFUF9QT1JUX09QRU5JTkc6CiAJCS8qIERfSUQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyBvcGVuICovCiAJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSB7Ci0JCQlpZiAocG9ydC0+ZF9pZCkKLQkJCQlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwotCQkJZWxzZSB7Ci0JCQkJYWN0LT5zdGVwID0gWkZDUF9FUlBfU1RFUF9QT1JUX0NMT1NJTkc7Ci0JCQkJcmV0dXJuIFpGQ1BfRVJQX0NPTlRJTlVFUzsKKwkJCWlmICghcG9ydC0+ZF9pZCkgeworCQkJCXpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHBvcnQpOworCQkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQkJfQorCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIAkJfQogCQlpZiAocG9ydC0+ZF9pZCAmJiAhKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKSkgewogCQkJcG9ydC0+ZF9pZCA9IDA7CkBAIC04ODksMTkgKzg4NSwyMSBAQAogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CisJaW50IHBfc3RhdHVzID0gYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cyk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpCisJaWYgKChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykgJiYKKwkgICAgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkKIAkJZ290byBjbG9zZV9pbml0X2RvbmU7CiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIAljYXNlIFpGQ1BfRVJQX1NURVBfVU5JTklUSUFMSVpFRDoKIAkJemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHBvcnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKKwkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOgotCQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKKwkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCAzNjkzNWJjLi5iM2YyOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qIHpmY3BfY2N3LmMgKi8KIGV4dGVybiBpbnQgemZjcF9jY3dfcmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gaW50IHpmY3BfY2N3X3ByaXZfc2NoKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gc3RydWN0IHpmY3BfYWRhcHRlciAqemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChjaGFyICopOworZXh0ZXJuIHN0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlcjsKIAogLyogemZjcF9jZmRjLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbWlzY2RldmljZSB6ZmNwX2NmZGNfbWlzYzsKQEAgLTk2LDYgKzk2LDcgQEAKIGV4dGVybiB2b2lkIF96ZmNwX2ZjX3NjYW5fcG9ydHNfbGF0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcG9ydF9kaWRfbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IGZzZl9wbG9naSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2xpbmtfdGVzdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCA3MjJmMjJkLi5kZjIzYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zNjEsNiArMzYxLDE3IEBACiB9CiAKIC8qKgorICogemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAgLSB0cmlnZ2VyIHRoZSBkX2lkIGxvb2t1cCB1c2luZyBhIEdJRF9QTiByZXF1ZXN0CisgKiBAcG9ydDogVGhlIHpmY3BfcG9ydCB0byBsb29rdXAgdGhlIGRfaWQgZm9yLgorICovCit2b2lkIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJemZjcF9wb3J0X2dldChwb3J0KTsKKwlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKSkKKwkJemZjcF9wb3J0X3B1dChwb3J0KTsKK30KKworLyoqCiAgKiB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlIC0gZXZhbHVhdGUgUExPR0kgcGxheWxvYWQKICAqIEBwb3J0OiB6ZmNwX3BvcnQgc3RydWN0dXJlCiAgKiBAcGxvZ2k6IHBsb2dpIHBheWxvYWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IGYwOWM4NjMuLjRlNDFiYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTA1OCwxNCArMTA1OCwyOCBAQAogCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAogCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CisJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKIAlpZiAoYnl0ZXMgPD0gMCkKIAkJcmV0dXJuIC1FSU87CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3JlcSwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19yZXNwLAorCQkJCSBpbnQgbWF4X3NiYWxzKQoreworCWludCByZXQ7CisKKwlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBzZ19yZXEsIHNnX3Jlc3AsIG1heF9zYmFscyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIGNvbW1vbiBzZXR0aW5ncyBmb3IgY3QvZ3MgYW5kIGVscyByZXF1ZXN0cyAqLwotCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gMiAqIFJfQV9UT1Y7Ci0JemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAyICogUl9BX1RPViArIDEwKTsKKwl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsICgyICogUl9BX1RPViArIDEwKSAqIEhaKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA5NCw4ICsxMTA4LDggQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBjdC0+cmVxLCBjdC0+cmVzcCwKLQkJCQkJICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOworCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGN0LT5yZXEsIGN0LT5yZXNwLAorCQkJCSAgICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CiAKQEAgLTExOTIsNyArMTIwNiw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0JcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgZWxzLT5yZXEsIGVscy0+cmVzcCwgMik7CisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHJlcSwgZWxzLT5yZXEsIGVscy0+cmVzcCwgMik7CiAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwpAQCAtMTQ2MSw5ICsxNDc1LDE2IEBACiAJCXBsb2dpID0gKHN0cnVjdCBmc2ZfcGxvZ2kgKikgcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHM7CiAJCWlmIChyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmVsczFfbGVuZ3RoID49CiAJCSAgICBGU0ZfUExPR0lfTUlOX0xFTikgewotCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikKKwkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pIHsKIAkJCQlwb3J0LT5kX2lkID0gMDsKLQkJCWVsc2UgeworCQkJCWRldl93YXJuKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkJCSAiQSBwb3J0IG9wZW5lZCB3aXRoIFdXUE4gMHglMDE2THggIgorCQkJCQkgInJldHVybmVkIGRhdGEgdGhhdCBpZGVudGlmaWVzIGl0IGFzICIKKwkJCQkJICJXV1BOIDB4JTAxNkx4XG4iLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+d3dwbiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgcGxvZ2ktPnNlcnZfcGFyYW0ud3dwbik7CisJCQl9IGVsc2UgewogCQkJCXBvcnQtPnd3bm4gPSBwbG9naS0+c2Vydl9wYXJhbS53d25uOwogCQkJCXpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUocG9ydCwgcGxvZ2kpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDA3OWE4Y2YuLmQzMTAwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogCiAJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgInN5dWFzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOworCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCA4MmJiM2IyLi5lMTFjY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMzY2LDYgKzM2Niw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL2N4Z2IzaS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3Njc2kvYm54MmkvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWciCiAKIGNvbmZpZyBTR0lXRDkzX1NDU0kKIAl0cmlzdGF0ZSAiU0dJIFdEOTNDOTMgU0NTSSBEcml2ZXIiCkBAIC0xODI3LDYgKzE4MjgsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxpYnNycC4KIAorY29uZmlnIFNDU0lfQkZBX0ZDCisJdHJpc3RhdGUgIkJyb2NhZGUgQkZBIEZpYnJlIENoYW5uZWwgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfRkNfQVRUUlMKKwloZWxwCisJICBUaGlzIGJmYSBkcml2ZXIgc3VwcG9ydHMgYWxsIEJyb2NhZGUgUENJZSBGQy9GQ09FIGhvc3QgYWRhcHRlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIGJmYS4KKwogZW5kaWYgIyBTQ1NJX0xPV0xFVkVMCiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL3BjbWNpYS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCmluZGV4IDYxYTk0YWYuLjNhZDYxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKQEAgLTg2LDYgKzg2LDcgQEAKIG9iai0kKENPTkZJR19TQ1NJX1FMQV9GQykJKz0gcWxhMnh4eC8KIG9iai0kKENPTkZJR19TQ1NJX1FMQV9JU0NTSSkJKz0gcWxhNHh4eC8KIG9iai0kKENPTkZJR19TQ1NJX0xQRkMpCQkrPSBscGZjLworb2JqLSQoQ09ORklHX1NDU0lfQkZBX0ZDKQkrPSBiZmEvCiBvYmotJChDT05GSUdfU0NTSV9QQVMxNikJKz0gcGFzMTYubwogb2JqLSQoQ09ORklHX1NDU0lfVDEyOCkJCSs9IHQxMjgubwogb2JqLSQoQ09ORklHX1NDU0lfRE1YMzE5MUQpCSs9IGRteDMxOTFkLm8KQEAgLTEzMCw2ICsxMzEsNyBAQAogb2JqLSQoQ09ORklHX1BTM19ST00pCQkrPSBwczNyb20ubwogb2JqLSQoQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kpCSs9IGxpYmlzY3NpLm8gbGliaXNjc2lfdGNwLm8gY3hnYjNpLwogb2JqLSQoQ09ORklHX1NDU0lfQk5YMl9JU0NTSSkJKz0gbGliaXNjc2kubyBibngyaS8KK29iai0kKENPTkZJR19CRTJJU0NTSSkJCSs9IGxpYmlzY3NpLm8gYmUyaXNjc2kvCiBvYmotJChDT05GSUdfU0NTSV9QTUNSQUlEKQkrPSBwbWNyYWlkLm8KIAogb2JqLSQoQ09ORklHX0FSTSkJCSs9IGFybS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1MmZjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBCRTJJU0NTSQorCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUworCisJaGVscAorCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlTQ1NJIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMnCisJMTBHYnBzIFN0b3JhZ2UgYWRhcHRlciAtIEJsYWRlRW5naW5lIDIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgdG8gYnVpbGQgdGhlIGlTQ1NJIGRyaXZlciBmb3IgU2VydmVyRW5naW5lJ3MgQmxhZGVFbmdpbmUuCisjCisjCisKK29iai0kKENPTkZJR19CRTJJU0NTSSkgKz0gYmUyaXNjc2kubworCitiZTJpc2NzaS15IDo9IGJlX2lzY3NpLm8gYmVfbWFpbi5vIGJlX21nbXQubyBiZV9jbWRzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MDIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCkBAIC0wLDAgKzEsMTgzIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaWZuZGVmIEJFSVNDU0lfSAorI2RlZmluZSBCRUlTQ1NJX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKworI2RlZmluZSBGV19WRVJfTEVOIDMyCisKK3N0cnVjdCBiZV9kbWFfbWVtIHsKKwl2b2lkICp2YTsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBiZV9xdWV1ZV9pbmZvIHsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBkbWFfbWVtOworCXUxNiBsZW47CisJdTE2IGVudHJ5X3NpemU7CQkvKiBTaXplIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHF1ZXVlICovCisJdTE2IGlkOworCXUxNiB0YWlsLCBoZWFkOworCWJvb2wgY3JlYXRlZDsKKwlhdG9taWNfdCB1c2VkOwkJLyogTnVtYmVyIG9mIHZhbGlkIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSAqLworfTsKKworc3RhdGljIGlubGluZSB1MzIgTU9EVUxPKHUxNiB2YWwsIHUxNiBsaW1pdCkKK3sKKwlXQVJOX09OKGxpbWl0ICYgKGxpbWl0IC0gMSkpOworCXJldHVybiB2YWwgJiAobGltaXQgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2luYyh1MTYgKmluZGV4LCB1MTYgbGltaXQpCit7CisJKmluZGV4ID0gTU9EVUxPKCgqaW5kZXggKyAxKSwgbGltaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX2hlYWRfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPmhlYWQgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX3RhaWxfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPnRhaWwgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfaGVhZF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT5oZWFkLCBxLT5sZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfdGFpbF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT50YWlsLCBxLT5sZW4pOworfQorCisvKklTQ1NJICovCisKK3N0cnVjdCBiZV9lcV9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJY2hhciBkZXNjWzMyXTsKKworCS8qIEFkYXB0aXZlIGludGVycnVwdCBjb2FsZXNjaW5nIChBSUMpIGluZm8gKi8KKwlib29sIGVuYWJsZV9haWM7CisJdTE2IG1pbl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCXUxNiBtYXhfZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgY3VyX2VxZDsJCS8qIGluIHVzZWNzICovCit9OworCitzdHJ1Y3QgYmVfbWNjX29iaiB7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxOworfTsKKworc3RydWN0IGJlX2N0cmxfaW5mbyB7CisJdTggX19pb21lbSAqY3NyOworCXU4IF9faW9tZW0gKmRiOwkJLyogRG9vciBCZWxsICovCisJdTggX19pb21lbSAqcGNpY2ZnOwkvKiBQQ0kgY29uZmlnIHNwYWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwkvKiBNYm94IHVzZWQgZm9yIGNtZCByZXF1ZXN0L3Jlc3BvbnNlICovCisJc3BpbmxvY2tfdCBtYm94X2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtYm94IGNtZHMgdG8gQkUgY2FyZCAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOworCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKKwkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7CisKKwkvKiBNQ0MgUmluZ3MgKi8KKwlzdHJ1Y3QgYmVfbWNjX29iaiBtY2Nfb2JqOworCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCisJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKKworCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLworCXZvaWQgKCphc3luY19jYikgKHZvaWQgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7CisJdm9pZCAqYWRhcHRlcl9jdHh0OworfTsKKworI2luY2x1ZGUgImJlX2NtZHMuaCIKKworI2RlZmluZSBQQUdFX1NISUZUXzRLIDEyCisjZGVmaW5lIFBBR0VfU0laRV80SyAoMSA8PCBQQUdFX1NISUZUXzRLKQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCisjZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCisJCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKyAJXAorCQkJKHNpemUpICsgKFBBR0VfU0laRV80SyAtIDEpKSA+PiBQQUdFX1NISUZUXzRLKSkKKworLyogQnl0ZSBvZmZzZXQgaW50byB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGFkZHJlc3MgKi8KKyNkZWZpbmUgT0ZGU0VUX0lOX1BBR0UoYWRkcikJCQkJCQlcCisJCSgoc2l6ZV90KShhZGRyKSAmIChQQUdFX1NJWkVfNEstMSkpCisKKy8qIFJldHVybnMgYml0IG9mZnNldCB3aXRoaW4gYSBEV09SRCBvZiBhIGJpdGZpZWxkICovCisjZGVmaW5lIEFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkgIAkJCQlcCisJCSgoKHNpemVfdCkmKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpJTMyKQorCisvKiBSZXR1cm5zIHRoZSBiaXQgbWFzayBvZiB0aGUgZmllbGQgdGhhdCBpcyBOT1Qgc2hpZnRlZCBpbnRvIGxvY2F0aW9uLiAqLworc3RhdGljIGlubGluZSB1MzIgYW1hcF9tYXNrKHUzMiBiaXRzaXplKQoreworCXJldHVybiAoYml0c2l6ZSA9PSAzMiA/IDB4RkZGRkZGRkYgOiAoMSA8PCBiaXRzaXplKSAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYW1hcF9zZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywKKwkJCQkJdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXUzMiAqZHcgPSAodTMyICopIHB0ciArIGR3X29mZnNldDsKKwkqZHcgJj0gfihtYXNrIDw8IG9mZnNldCk7CisJKmR3IHw9IChtYXNrICYgdmFsdWUpIDw8IG9mZnNldDsKK30KKworI2RlZmluZSBBTUFQX1NFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIsIHZhbCkJCQkJXAorCQlhbWFwX3NldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCksCQlcCisJCQl2YWwpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfZ2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCit7CisJdTMyICpkdyA9IHB0cjsKKwlyZXR1cm4gbWFzayAmICgqKGR3ICsgZHdfb2Zmc2V0KSA+PiBvZmZzZXQpOworfQorCisjZGVmaW5lIEFNQVBfR0VUX0JJVFMoX3N0cnVjdCwgZmllbGQsIHB0cikJCQkJXAorCQlhbWFwX2dldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkpCisKKyNkZWZpbmUgYmVfZHdzX2NwdV90b19sZSh3cmIsIGxlbikgc3dhcF9kd3Mod3JiLCBsZW4pCisjZGVmaW5lIGJlX2R3c19sZV90b19jcHUod3JiLCBsZW4pIHN3YXBfZHdzKHdyYiwgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZHdzKHZvaWQgKndyYiwgaW50IGxlbikKK3sKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MzIgKmR3ID0gd3JiOworCVdBUk5fT04obGVuICUgNCk7CisJZG8geworCQkqZHcgPSBjcHVfdG9fbGUzMigqZHcpOworCQlkdysrOworCQlsZW4gLT0gNDsKKwl9IHdoaWxlIChsZW4pOworI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworfQorCitleHRlcm4gdm9pZCBiZWlzY3NpX2NxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCBib29sIGFybSwKKwkJCSAgICAgIHUxNiBudW1fcG9wcGVkKTsKKworI2VuZGlmIC8qIEJFSVNDU0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMDdiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTAsMCArMSw1MjMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX21nbXQuaCIKKyNpbmNsdWRlICJiZV9tYWluLmgiCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWlmIChjb21wbC0+ZmxhZ3MgIT0gMCkgeworCQljb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShjb21wbC0+ZmxhZ3MpOworCQlXQVJOX09OKChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykgPT0gMCk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV9tY2NfY29tcGxfdXNlKHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWNvbXBsLT5mbGFncyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwl1MTYgY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1czsKKworCWJlX2R3c19sZV90b19jcHUoY29tcGwsIDQpOworCisJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKKwkJCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsCisJCQkiZXJyb3IgaW4gY21kIGNvbXBsZXRpb246IHN0YXR1cyhjb21wbC9leHRkKT0lZC8lZFxuIiwKKwkJCWNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCit7CisJcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCisJCUFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PSBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworfQorCit2b2lkIGJlaXNjc2lfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIGJvb2wgYXJtLAorCQkgICAgICAgdTE2IG51bV9wb3BwZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAoYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9DUV9SRUFSTV9TSElGVDsKKwl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9DUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfQ1FfT0ZGU0VUKTsKK30KKworc3RhdGljIGludCBiZV9tYm94X2RiX3JlYWR5X3dhaXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKyNkZWZpbmUgbG9uZ19kZWxheSAyMDAwCisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCWludCBjbnQgPSAwLCB3YWl0ID0gNTsJLyogaW4gdXNlY3MgKi8KKwl1MzIgcmVhZHk7CisKKwlkbyB7CisJCXJlYWR5ID0gaW9yZWFkMzIoZGIpICYgTVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJCWlmIChyZWFkeSkKKwkJCWJyZWFrOworCisJCWlmIChjbnQgPiA2MDAwMDAwKSB7CisJCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsICJtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjbnQgPiA1MCkgeworCQkJd2FpdCA9IGxvbmdfZGVsYXk7CisJCQltZGVsYXkobG9uZ19kZWxheSAvIDEwMDApOworCQl9IGVsc2UKKwkJCXVkZWxheSh3YWl0KTsKKwkJY250ICs9IHdhaXQ7CisJfSB3aGlsZSAodHJ1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCWludCBzdGF0dXM7CisJdTMyIHZhbCA9IDA7CisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZjdHJsLT5tYm94X21lbTsKKwlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7CisJc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwgPSAmbWJveC0+Y29tcGw7CisKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOworCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWQgMVxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXZhbCA9IDA7CisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CisJdmFsIHw9ICh1MzIpIChtYm94X21lbS0+ZG1hID4+IDQpIDw8IDI7CisJaW93cml0ZTMyKHZhbCwgZGIpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGN0cmwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgYmVfbWJveF9kYl9yZWFkeV93YWl0IGZhaWxlZCAyXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGJlX21jY19jb21wbF9pc19uZXcoY29tcGwpKSB7CisJCXN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGN0cmwsICZtYm94LT5jb21wbCk7CisJCWJlX21jY19jb21wbF91c2UoY29tcGwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJBZnRlciBiZV9tY2NfY29tcGxfcHJvY2VzcyBcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAorCQkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpCit7CisJaWYgKGVtYmVkZGVkKQorCQl3cmItPmVtYmVkZGVkIHw9IE1DQ19XUkJfRU1CRURERURfTUFTSzsKKwllbHNlCisJCXdyYi0+ZW1iZWRkZWQgfD0gKHNnZV9jbnQgJiBNQ0NfV1JCX1NHRV9DTlRfTUFTSykgPDwKKwkJCQkJCU1DQ19XUkJfU0dFX0NOVF9TSElGVDsKKwl3cmItPnBheWxvYWRfbGVuZ3RoID0gcGF5bG9hZF9sZW47CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIDgpOworfQorCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pCit7CisJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOworCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKKwlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKK30KKworc3RhdGljIHZvaWQgYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShzdHJ1Y3QgcGh5c19hZGRyICpwYWdlcywgdTMyIG1heF9wYWdlcywKKwkJCQkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQoreworCWludCBpLCBidWZfcGFnZXM7CisJdTY0IGRtYSA9ICh1NjQpIG1lbS0+ZG1hOworCisJYnVmX3BhZ2VzID0gbWluKFBBR0VTXzRLX1NQQU5ORUQobWVtLT52YSwgbWVtLT5zaXplKSwgbWF4X3BhZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0ubG8gPSBjcHVfdG9fbGUzMihkbWEgJiAweEZGRkZGRkZGKTsKKwkJcGFnZXNbaV0uaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGRtYSkpOworCQlkbWEgKz0gUEFHRV9TSVpFXzRLOworCX0KK30KKworc3RhdGljIHUzMiBlcV9kZWxheV90b19tdWx0KHUzMiB1c2VjX2RlbGF5KQoreworI2RlZmluZSBNQVhfSU5UUl9SQVRFIDY1MTA0MgorCWNvbnN0IHUzMiByb3VuZCA9IDEwOworCXUzMiBtdWx0aXBsaWVyOworCisJaWYgKHVzZWNfZGVsYXkgPT0gMCkKKwkJbXVsdGlwbGllciA9IDA7CisJZWxzZSB7CisJCXUzMiBpbnRlcnJ1cHRfcmF0ZSA9IDEwMDAwMDAgLyB1c2VjX2RlbGF5OworCQlpZiAoaW50ZXJydXB0X3JhdGUgPT0gMCkKKwkJCW11bHRpcGxpZXIgPSAxMDIzOworCQllbHNlIHsKKwkJCW11bHRpcGxpZXIgPSAoTUFYX0lOVFJfUkFURSAtIGludGVycnVwdF9yYXRlKSAqIHJvdW5kOworCQkJbXVsdGlwbGllciAvPSBpbnRlcnJ1cHRfcmF0ZTsKKwkJCW11bHRpcGxpZXIgPSAobXVsdGlwbGllciArIHJvdW5kIC8gMikgLyByb3VuZDsKKwkJCW11bHRpcGxpZXIgPSBtaW4obXVsdGlwbGllciwgKHUzMikgMTAyMyk7CisJCX0KKwl9CisJcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3N0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSkKK3sKKwlyZXR1cm4gJigoc3RydWN0IGJlX21jY19tYWlsYm94ICopKG1ib3hfbWVtLT52YSkpLT53cmI7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZlcS0+ZG1hX21lbTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX0VRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGZ1bmMsIHJlcS0+Y29udGV4dCwKKwkJCQkJCVBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCB2YWxpZCwgcmVxLT5jb250ZXh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHNpemUsIHJlcS0+Y29udGV4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBjb3VudCwgcmVxLT5jb250ZXh0LAorCQkJCQlfX2lsb2cyX3UzMihlcS0+bGVuIC8gMjU2KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBkZWxheW11bHQsIHJlcS0+Y29udGV4dCwKKwkJCQkJZXFfZGVsYXlfdG9fbXVsdChlcV9kZWxheSkpOworCWJlX2R3c19jcHVfdG9fbGUocmVxLT5jb250ZXh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWVxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmVxX2lkKTsKKwkJZXEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCWludCBzdGF0dXM7CisJdTggKmVuZGlhbl9jaGVjazsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJZW5kaWFuX2NoZWNrID0gKHU4ICopIHdyYjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4MTI7CisJKmVuZGlhbl9jaGVjaysrID0gMHgzNDsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJKmVuZGlhbl9jaGVjaysrID0gMHg1NjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDc4OworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZndfaW5pdGlhbGl6ZSBGYWlsZWQgXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksIGludCBjb2FsZXNjZV93bSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmNxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJaWYgKCFxX21lbS0+dmEpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgInVuaW5pdGlhbGl6ZWQgcV9tZW0tPnZhXG4iKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvYWxlc2N3bSwgY3R4dCwgY29hbGVzY2Vfd20pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgbm9kZWxheSwgY3R4dCwgbm9fZGVsYXkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY291bnQsIGN0eHQsCisJCSAgICAgIF9faWxvZzJfdTMyKGNxLT5sZW4gLyAyNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHNvbGV2ZW50LCBjdHh0LCBzb2xfZXZ0cyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBldmVudGFibGUsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXFpZCwgY3R4dCwgZXEtPmlkKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGFybWVkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWNxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNxX2lkKTsKKwkJY3EtPmNyZWF0ZWQgPSB0cnVlOworCX0gZWxzZQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBiZV9jbWRfY3FfY3JlYXRlLCBzdGF0dXM9b3glMDh4IFxuIiwKKwkJCXN0YXR1cyk7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIGJlX2VuY29kZWRfcV9sZW4oaW50IHFfbGVuKQoreworCXUzMiBsZW5fZW5jb2RlZCA9IGZscyhxX2xlbik7CS8qIGxvZzIobGVuKSArIDEgKi8KKwlpZiAobGVuX2VuY29kZWQgPT0gMTYpCisJCWxlbl9lbmNvZGVkID0gMDsKKwlyZXR1cm4gbGVuX2VuY29kZWQ7Cit9CitpbnQgYmVpc2NzaV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQkJICBpbnQgcXVldWVfdHlwZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXU4IHN1YnN5cyA9IDAsIG9wY29kZSA9IDA7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwlzd2l0Y2ggKHF1ZXVlX3R5cGUpIHsKKwljYXNlIFFUWVBFX0VROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0NROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX1dSQlE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0RQRFVROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0lTQ1NJOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9TR0w6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlCVUcoKTsKKwkJcmV0dXJuIC0xOworCX0KKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBzdWJzeXMsIG9wY29kZSwgc2l6ZW9mKCpyZXEpKTsKKwlpZiAocXVldWVfdHlwZSAhPSBRVFlQRV9TR0wpCisJCXJlcS0+aWQgPSBjcHVfdG9fbGUxNihxLT5pZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkcikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcsCisJCQkgICBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZHEsIGludCBsZW5ndGgsCisJCQkJICAgIGludCBlbnRyeV9zaXplKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZkcS0+ZG1hX21lbTsKKwl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByeF9wZGlkLCBjdHh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHJ4X3BkaWRfdmFsaWQsIGN0eHQsCisJCSAgICAgIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcGNpX2Z1bmNfaWQsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByaW5nX3NpemUsIGN0eHQsCisJCSAgICAgIGJlX2VuY29kZWRfcV9sZW4obGVuZ3RoIC8gc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCBkZWZhdWx0X2J1ZmZlcl9zaXplLAorCQkgICAgICBjdHh0LCBlbnRyeV9zaXplKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIGNxX2lkX3JlY3YsIGN0eHQsCisJCSAgICAgIGNxLT5pZCk7CisKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwkJZHEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+aWQpOworCQlkcS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykKKwkJd3JicS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jaWQpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfaXNjc2lfcG9zdF9zZ2xfcGFnZXMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCQkJdTMyIHBhZ2Vfb2Zmc2V0LCB1MzIgbnVtX3BhZ2VzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGN1cnJfcGFnZXM7CisJdTMyIGludGVybmFsX3BhZ2Vfb2Zmc2V0ID0gMDsKKwl1MzIgdGVtcF9udW1fcGFnZXMgPSBudW1fcGFnZXM7CisKKwlpZiAobnVtX3BhZ2VzID09IDB4ZmYpCisJCW51bV9wYWdlcyA9IDE7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJZG8geworCQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCQliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTLAorCQkJCSAgIHNpemVvZigqcmVxKSk7CisJCWN1cnJfcGFnZXMgPSBCRV9OVU1CRVJfT0ZfRklFTEQoc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSwKKwkJCQkJCXBhZ2VzKTsKKwkJcmVxLT5udW1fcGFnZXMgPSBtaW4obnVtX3BhZ2VzLCBjdXJyX3BhZ2VzKTsKKwkJcmVxLT5wYWdlX29mZnNldCA9IHBhZ2Vfb2Zmc2V0OworCQliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIHJlcS0+bnVtX3BhZ2VzLCBxX21lbSk7CisJCXFfbWVtLT5kbWEgPSBxX21lbS0+ZG1hICsgKHJlcS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKwkJaW50ZXJuYWxfcGFnZV9vZmZzZXQgKz0gcmVxLT5udW1fcGFnZXM7CisJCXBhZ2Vfb2Zmc2V0ICs9IHJlcS0+bnVtX3BhZ2VzOworCQludW1fcGFnZXMgLT0gcmVxLT5udW1fcGFnZXM7CisKKwkJaWYgKHRlbXBfbnVtX3BhZ2VzID09IDB4ZmYpCisJCQlyZXEtPm51bV9wYWdlcyA9IHRlbXBfbnVtX3BhZ2VzOworCisJCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJGVyBDTUQgdG8gbWFwIGlzY3NpIGZyYWdzIGZhaWxlZC5cbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0gd2hpbGUgKG51bV9wYWdlcyA+IDApOworZXJyb3I6CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwZDY4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTAsMCArMSw4NzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpZm5kZWYgQkVJU0NTSV9DTURTX0gKKyNkZWZpbmUgQkVJU0NTSV9DTURTX0gKKworLyoqCisgKiBUaGUgZHJpdmVyIHNlbmRzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnRzIGNvbW1hbmQgcmVxdWVzdHMgdG8gdGhlCisgKiBmaXJtd2FyZSBpbiB0aGUgQkUuIFRoZXNlIHJlcXVlc3RzIGFyZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHByb2Nlc3NvcgorICogdXNpbmcgV29yayBSZXF1ZXN0IEJsb2NrcyAoV1JCcykgc3VibWl0dGVkIHRvIHRoZSBNQ0MtV1JCIHJpbmcgb3IgdmlhIG9uZQorICogV1JCIGluc2lkZSBhIE1BSUxCT1guCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcnZpY2VkIGJ5IHRoZSBBUk0gcHJvY2Vzc29yIGluIHRoZSBCbGFkZUVuZ2luZSdzIE1QVS4KKyAqLworc3RydWN0IGJlX3NnZSB7CisJdTMyIHBhX2xvOworCXUzMiBwYV9oaTsKKwl1MzIgbGVuOworfTsKKworI2RlZmluZSBNQ0NfV1JCX1NHRV9DTlRfU0hJRlQgMwkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX01BU0sgMHgxRgkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KK3N0cnVjdCBiZV9tY2Nfd3JiIHsKKwl1MzIgZW1iZWRkZWQ7CQkvKiBkd29yZCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOwkvKiBkd29yZCAxICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAyICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAzICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCA0ICovCisJdW5pb24geworCQl1OCBlbWJlZGRlZF9wYXlsb2FkWzIzNl07CS8qIHVzZWQgYnkgZW1iZWRkZWQgY21kcyAqLworCQlzdHJ1Y3QgYmVfc2dlIHNnbFsxOV07CS8qIHVzZWQgYnkgbm9uLWVtYmVkZGVkIGNtZHMgKi8KKwl9IHBheWxvYWQ7Cit9OworCisjZGVmaW5lIENRRV9GTEFHU19WQUxJRF9NQVNLICgxIDw8IDMxKQorI2RlZmluZSBDUUVfRkxBR1NfQVNZTkNfTUFTSyAoMSA8PCAzMCkKKworLyogQ29tcGxldGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgTUNDX1NUQVRVU19TVUNDRVNTIDB4MAorCisjZGVmaW5lIENRRV9TVEFUVVNfQ09NUExfTUFTSyAweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVCAwCS8qIGJpdHMgMCAtIDE1ICovCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLIDB4RkZGRgorI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfU0hJRlQgMAkJLyogYml0cyAwIC0gMTUgKi8KKworc3RydWN0IGJlX21jY19jb21wbCB7CisJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgdGFnMDsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgdGFnMTsJCS8qIGR3b3JkIDIgKi8KKwl1MzIgZmxhZ3M7CQkvKiBkd29yZCAzICovCit9OworCisvKioqKioqKioqIE1haWxib3ggZG9vciBiZWxsICoqKioqKioqKioqKiovCisvKioKKyAqIFVzZWQgZm9yIGRyaXZlciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEZXLgorICogVGhlIHNvZnR3YXJlIG11c3Qgd3JpdGUgdGhpcyByZWdpc3RlciB0d2ljZSB0byBwb3N0IGFueSBjb21tYW5kLiBGaXJzdCwKKyAqIGl0IHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0xIGFuZCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogZm9yIHRoZSBNQUlMQk9YIHN0cnVjdHVyZS4gU29mdHdhcmUgbXVzdCBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhpcworICogaXMgYWNrbm93bGVkZ2VkLiBUaGVuLCBzb3R3YXJlIHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0wIHdpdGggdGhlIGxvd2VyCisgKiBiaXRzIGluIHRoZSBhZGRyZXNzLiBJdCBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGUgY29tbWFuZCBpcworICogY29tcGxldGUuIFVwb24gY29tcGxldGlvbiwgdGhlIE1BSUxCT1ggd2lsbCBjb250YWluIGEgdmFsaWQgY29tcGxldGlvbgorICogcXVldWUgZW50cnkuCisgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfT0ZGU0VUCTB4MTYwCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLCTB4MQkvKiBiaXQgMCAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLCTB4MgkvKiBiaXQgMSAqLworCisvKioqKioqKioqKiBNUFUgc2VtcGhvcmUgKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCAweGFjCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0sgMHgwMDAwRkZGRgorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfTUFTSyAweDEKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUIDMxCisKKy8qKioqKioqKioqIE1DQyBkb29yIGJlbGwgKioqKioqKioqKioqLworI2RlZmluZSBEQl9NQ0NRX09GRlNFVCAweDE0MAorI2RlZmluZSBEQl9NQ0NRX1JJTkdfSURfTUFTSyAweDdGRgkJLyogYml0cyAwIC0gMTAgKi8KKy8qIE51bWJlciBvZiBlbnRyaWVzIHBvc3RlZCAqLworI2RlZmluZSBEQl9NQ0NRX05VTV9QT1NURURfU0hJRlQgMTYJCS8qIGJpdHMgMTYgLSAyOSAqLworCisvKiBNUFUgc2VtcGhvcmUgUE9TVCBzdGFnZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19SRFkJCTB4YzAwMAkvKiBGVyBpcyBkb25lIHdpdGggUE9TVCAqLworCisvKioKKyAqIFdoZW4gdGhlIGFzeW5jIGJpdCBvZiBtY2NfY29tcGwgaXMgc2V0LCB0aGUgbGFzdCA0IGJ5dGVzIG9mCisgKiBtY2NfY29tcGwgaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKyAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQJOAkvKiBiaXRzIDggLSAxNSAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSwkweEZGCisjZGVmaW5lIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURQkweDEKK3N0cnVjdCBiZV9hc3luY19ldmVudF90cmFpbGVyIHsKKwl1MzIgY29kZTsKK307CisKK2VudW0geworCUFTWU5DX0VWRU5UX0xJTktfRE9XTiA9IDB4MCwKKwlBU1lOQ19FVkVOVF9MSU5LX1VQID0gMHgxCit9OworCisvKioKKyAqIFdoZW4gdGhlIGV2ZW50IGNvZGUgb2YgYW4gYXN5bmMgdHJhaWxlciBpcyBsaW5rLXN0YXRlLCB0aGUgbWNjX2NvbXBsCisgKiBtdXN0IGJlIGludGVycHJldGVkIGFzIGZvbGxvd3MKKyAqLworc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgeworCXU4IHBoeXNpY2FsX3BvcnQ7CisJdTggcG9ydF9saW5rX3N0YXR1czsKKwl1OCBwb3J0X2R1cGxleDsKKwl1OCBwb3J0X3NwZWVkOworCXU4IHBvcnRfZmF1bHQ7CisJdTggcnN2ZDBbN107CisJc3RydWN0IGJlX2FzeW5jX2V2ZW50X3RyYWlsZXIgdHJhaWxlcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tY2NfbWFpbGJveCB7CisJc3RydWN0IGJlX21jY193cmIgd3JiOworCXN0cnVjdCBiZV9tY2NfY29tcGwgY29tcGw7Cit9OworCisvKiBUeXBlIG9mIHN1YnN5c3RlbXMgc3VwcG9ydGVkIGJ5IEZXICovCisjZGVmaW5lIENNRF9TVUJTWVNURU1fQ09NTU9OICAgIDB4MQorI2RlZmluZSBDTURfU1VCU1lTVEVNX0lTQ1NJICAgICAweDIKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9FVEggICAgICAgMHgzCisjZGVmaW5lIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JIDB4NgorI2RlZmluZSBDTURfQ09NTU9OX1RDUF9VUExPQUQgICAweDEKKworLyoqCisgKiBMaXN0IG9mIGNvbW1vbiBvcGNvZGVzIHN1YnN5c3RlbSAgQ01EX1NVQlNZU1RFTV9DT01NT04KKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFCQkJCTEyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFCQkJCTEzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0NSRUFURSAgICAgICAgCQkyMQorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FUVFJJQlVURVMgICAgICAgICAgICAgICAzMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJCQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRwkJCTQyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0RFU1RST1kgICAgICAgIAkJNTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZICAgICAgICAJCTU0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfREVTVFJPWSAgICAgICAgCQk1NQorI2RlZmluZSBPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRwkJNTgKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GVU5DVElPTl9SRVNFVAkJCTYxCisKKy8qKgorICogTElTVCBvZiBvcGNvZGVzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIEluaXRpYXRvciBhbmQgVGFyZ2V0CisgKiB1c2VkIGJ5IENNRF9TVUJTWVNURU1fSVNDU0kKKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTCQkyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVMgICAgICAgIDMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHCQk3CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfU0VUX0ZSQUdOVU1fQklUU19GT1JfU0dMX0NSQSA2MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWSAJCTY1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUJCQk2NgorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfREVTVFJPWSAJCTY3CisKK3N0cnVjdCBiZV9jbWRfcmVxX2hkciB7CisJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLworCXU4IHN1YnN5c3RlbTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwb3J0X251bWJlcjsJCS8qIGR3b3JkIDAgKi8KKwl1OCBkb21haW47CQkvKiBkd29yZCAwICovCisJdTMyIHRpbWVvdXQ7CQkvKiBkd29yZCAxICovCisJdTMyIHJlcXVlc3RfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHsKKwl1MzIgaW5mbzsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMSAqLworCXUzMiByZXNwb25zZV9sZW5ndGg7CS8qIGR3b3JkIDIgKi8KKwl1MzIgYWN0dWFsX3Jlc3BfbGVuOwkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgcGh5c19hZGRyIHsKKwl1MzIgbG87CisJdTMyIGhpOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCRSBDb21tYW5kIGRlZmluaXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZSAtIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfZXFfY29udGV4dCB7CisJdTggY2lkeFsxM107CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTNdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IHNpemU7CQkvKiBkd29yZCAwICovCisJdTggcGlkeFsxM107CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDJbM107CQkvKiBkd29yZCAxICovCisJdTggcGRbMTBdOwkJLyogZHdvcmQgMSAqLworCXU4IGNvdW50WzNdOwkJLyogZHdvcmQgMSAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMSAqLworCXU4IHN0YWxsZWQ7CQkvKiBkd29yZCAxICovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDNbNF07CQkvKiBkd29yZCAyICovCisJdTggZnVuY1s4XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNDsJCS8qIGR3b3JkIDIgKi8KKwl1OCBkZWxheW11bHRbMTBdOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDVbMl07CQkvKiBkd29yZCAyICovCisJdTggcGhhc2VbMl07CQkvKiBkd29yZCAyICovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNls0XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkN1szMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CS8qIGR3WzRdICovCisJdTE2IG51bV9wYWdlczsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0KSAvIDhdOwkvKiBkd1s0XSAqLworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHJlc3BfaGRyOworCXUxNiBlcV9pZDsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYWNfYWRkciB7CisJdTE2IHNpemVfb2Zfc3RydWN0OworCXU4IGFkZHJbRVRIX0FMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHR5cGU7CisJdTggcGVybWFuZW50OworCXUxNiBpZl9pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tYWNfcXVlcnkgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBtYWNfYWRkciBtYWM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIENRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2NvbnRleHQgeworCXU4IGNpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwOwkJLyogZHdvcmQgMCAqLworCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCAqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IGNvdW50WzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMCAqLworCXU4IGV2ZW50YWJsZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwaWR4WzExXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBwZFsxMF07CQkvKiBkd29yZCAxICovCisJdTggZXFpZFs4XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSAqLworCXU4IGFybWVkOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQzWzRdOwkJLyogZHdvcmQgMiAqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMjBdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ1WzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgY3FfaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBNQ0NRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19jb250ZXh0IHsKKwl1OCBjb25faW5kZXhbMTRdOworCXU4IHJzdmQwWzJdOworCXU4IHJpbmdfc2l6ZVs0XTsKKwl1OCBmZXRjaF93cmI7CisJdTggZmV0Y2hfcjJ0OworCXU4IGNxX2lkWzEwXTsKKwl1OCBwcm9kX2luZGV4WzE0XTsKKwl1OCBmaWRbOF07CisJdTggcGRpZFs5XTsKKwl1OCB2YWxpZDsKKwl1OCByc3ZkMVszMl07CisJdTggcnN2ZDJbMzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWNjX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX21jY19jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogUSBEZXN0cm95ICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeXBlIG9mIFF1ZXVlIHRvIGJlIGRlc3Ryb3llZCAqLworZW51bSB7CisJUVRZUEVfRVEgPSAxLAorCVFUWVBFX0NRLAorCVFUWVBFX01DQ1EsCisJUVRZUEVfV1JCUSwKKwlRVFlQRV9EUERVUSwKKwlRVFlQRV9TR0wKK307CisKK3N0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IGJ5cGFzc19mbHVzaDsJLyogdmFsaWQgb25seSBmb3IgcnggcSBkZXN0cm95ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWFjYWRkciB7CisJdTggYnl0ZVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9tY2FzdF9tYWNfY29uZmlnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fbWFjOworCXU4IHByb21pc2N1b3VzOworCXU4IGludGVyZmFjZV9pZDsKKwlzdHJ1Y3QgbWFjYWRkciBtYWNbMzJdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSB2b2lkICplbWJlZGRlZF9wYXlsb2FkKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCit7CisJcmV0dXJuIHdyYi0+cGF5bG9hZC5lbWJlZGRlZF9wYXlsb2FkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9zZ2UgKm5vbmVtYmVkZGVkX3NnbChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiAmd3JiLT5wYXlsb2FkLnNnbFswXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqIE1vZGlmeSBFUSBEZWxheSAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfbW9kaWZ5X2VxX2RlbGF5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBudW1fZXE7CisJc3RydWN0IHsKKwkJdTMyIGVxX2lkOworCQl1MzIgcGhhc2U7CisJCXUzMiBkZWxheV9tdWx0aXBsaWVyOworCX0gZGVsYXlbOF07Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogR2V0IE1BQyBBRERSICoqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRVRIX0FMRU4JNgorCisKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbmljX3BvcnRfY291bnQ7CisJdTMyIHNwZWVkOworCXUzMiBtYXhfc3BlZWQ7CisJdTMyIGxpbmtfc3RhdGU7CisJdTMyIG1heF9mcmFtZV9zaXplOworCXUxNiBzaXplX29mX3N0cnVjdHVyZTsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTMyIHJzdmRbMjNdOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIG5pY19wb3J0X2NvdW50OworCXUzMiBzcGVlZDsKKwl1MzIgbWF4X3NwZWVkOworCXUzMiBsaW5rX3N0YXRlOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3R1cmU7CisJdTggbWFjX2FkZHJlc3NbNl07CisJdTMyIHJzdmRbMjNdOworfTsKKworaW50IGJlaXNjc2lfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksCisJCQkgIGludCBudW1fY3FlX2RtYV9jb2FsZXNjZSk7CisKK2ludCBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCQkgIGludCB0eXBlKTsKK2ludCBiZV9wb2xsX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK3Vuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CitpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIpOworCisvKklTQ1NJIEZ1bmN0dWlvbnMgKi8KK2ludCBiZV9jbWRfZndfaW5pdGlhbGl6ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKKworc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKTsKKworaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworCitpbnQgYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgaW50IGxlbmd0aCwKKwkJCQkgICAgaW50IGVudHJ5X3NpemUpOworCitpbnQgYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLCB1MzIgcGFnZV9vZmZzZXQsCisJCQkJdTMyIG51bV9wYWdlcyk7CisKK2ludCBiZV9jbWRfd3JicV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAorCQkgICAgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKndyYnEpOworCitzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTggZGJ1Zl9jaW5kZXhbMTNdOwkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggcmluZ19zaXplWzRdOwkvKiBkd29yZCAwICovCisJdTggcmluZ19zdGF0ZVs0XTsJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGRidWZfcGluZGV4WzEzXTsJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyOwkJLyogZHdvcmQgMSAqLworCXU4IHBjaV9mdW5jX2lkWzhdOwkvKiBkd29yZCAxICovCisJdTggcnhfcGRpZFs5XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByeF9wZGlkX3ZhbGlkOwkvKiBkd29yZCAxICovCisJdTggZGVmYXVsdF9idWZmZXJfc2l6ZVsxNl07CS8qIGR3b3JkIDIgKi8KKwl1OCBjcV9pZF9yZWN2WzEwXTsJLyogZHdvcmQgMiAqLworCXU4IHJ4X3BkaWRfbm90X3ZhbGlkOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDNbNV07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMzJdOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXU4IHVscF9udW07CisJdTggcnN2ZDA7CisJc3RydWN0IGJlX2RlZmF1bHRfcGR1X2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9wb3N0X3NnbF9wYWdlc19yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcGFnZV9vZmZzZXQ7CisJdTMyIHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbMjZdOworCXUzMiByc3ZkMTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1OCB1bHBfbnVtOworCXU4IHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciByZXNwX2hkcjsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgU09MX0NJRF9NQVNLCQkweDAwMDBGRkMwCisjZGVmaW5lIFNPTF9DT0RFX01BU0sJCTB4MDAwMDAwM0YKKyNkZWZpbmUgU09MX1dSQl9JTkRFWF9NQVNLCTB4MDBGRjAwMDAKKyNkZWZpbmUgU09MX0NNRF9XTkRfTUFTSwkweEZGMDAwMDAwCisjZGVmaW5lIFNPTF9SRVNfQ05UX01BU0sJMHg3RkZGRkZGRgorI2RlZmluZSBTT0xfRVhQX0NNRF9TTl9NQVNLCTB4RkZGRkZGRkYKKyNkZWZpbmUgU09MX0hXX1NUU19NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNPTF9TVFNfTUFTSwkJMHgwMDAwRkYwMAorI2RlZmluZSBTT0xfUkVTUF9NQVNLCQkweDAwRkYwMDAwCisjZGVmaW5lIFNPTF9GTEFHU19NQVNLCQkweDdGMDAwMDAwCisjZGVmaW5lIFNPTF9TX01BU0sJCTB4ODAwMDAwMDAKKworc3RydWN0IHNvbF9jcWUgeworCXUzMiBkd1s0XTsKK307CisKK3N0cnVjdCBhbWFwX3NvbF9jcWUgeworCXU4IGh3X3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3Jlc3BbOF07CQkvKiBkd29yZCAwICovCisJdTggaV9mbGFnc1s3XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzOwkJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX2V4cF9jbWRfc25bMzJdOwkvKiBkd29yZCAxICovCisJdTggY29kZVs2XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBjaWRbMTBdOwkJLyogZHdvcmQgMiAqLworCXU4IHdyYl9pbmRleFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfY21kX3duZFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfcmVzX2NudFszMV07CS8qIGR3b3JkIDMgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKKworLyoqCisgKiBQb3N0IFdSQiBRdWV1ZSBEb29yYmVsbCBSZWdpc3RlciB1c2VkIGJ5IHRoZSBob3N0IFN0b3JhZ2UKKyAqIHN0YWNrIHRvIG5vdGlmeSB0aGUKKyAqIGNvbnRyb2xsZXIgb2YgYSBwb3N0ZWQgV29yayBSZXF1ZXN0IEJsb2NrCisgKi8KKyNkZWZpbmUgREJfV1JCX1BPU1RfQ0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSwkweEZGCS8qIGJpdHMgMCAtIDkgKi8KKworI2RlZmluZSBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVAkxNgorI2RlZmluZSBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQJMjQKKworc3RydWN0IGZyYWdudW1fYml0c19mb3Jfc2dsX2NyYV9pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2JpdHM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaXNjc2lfY2xlYW51cF9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGNodXRlOworCXU4IGhkcl9yaW5nX2lkOworCXU4IGRhdGFfcmluZ19pZDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGVxX2RlbGF5IHsKKwl1MzIgZXFfaWQ7CisJdTMyIHBoYXNlOworCXUzMiBkZWxheV9tdWx0aXBsaWVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2VxX2RlbGF5X3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2VxOworCXN0cnVjdCBlcV9kZWxheSBkZWxheVs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCB7CisJdTE2IHNpemVfb2Zfc3RydWN0dXJlOworCXU4IHJlc2VydmVkOworCXU4IGlwX3R5cGU7CisJdTggaXBfYWRkcmVzc1sxNl07CisJdTMyIHJzdmQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCBpcF9hZGRyZXNzOworCXUxNiB0Y3BfcG9ydDsKKwl1MTYgY2lkOworCXUxNiBjcV9pZDsKKwl1MTYgZGVmcV9pZDsKKwlzdHJ1Y3QgcGh5c19hZGRyIGRhdGFvdXRfdGVtcGxhdGVfcGE7CisJdTE2IGhkcl9yaW5nX2lkOworCXUxNiBkYXRhX3JpbmdfaWQ7CisJdTggZG9fb2ZmbG9hZDsKKwl1OCByc3ZkMFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiBjb25uZWN0aW9uX2hhbmRsZTsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21jY193cmJfY29udGV4dCB7CisJc3RydWN0IE1DQ19XUkIgKndyYjsKKwlpbnQgKnVzZXJzX2ZpbmFsX3N0YXR1czsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgREJfREVGX1BEVV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfTUFTSwkJMHgzRkZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9SRUFSTV9TSElGVAkJMTQKKyNkZWZpbmUgREJfREVGX1BEVV9FVkVOVF9TSElGVAkJMTUKKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfU0hJRlQJCTE2CisKK3N0cnVjdCBkbXNnX2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgdXBsb2FkX3R5cGU7CisJdTMyIHJlc2V0X3NlcTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19vdXQgeworCXUzMiBkd1szMl07Cit9IF9fcGFja2VkOworCit1bmlvbiB0Y3BfdXBsb2FkX3BhcmFtcyB7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX291dCByZXNwb25zZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV91bHBfZndfY2ZnIHsKKwl1MzIgdWxwX21vZGU7CisJdTMyIGV0eF9iYXNlOworCXUzMiBldHhfY291bnQ7CisJdTMyIHNxX2Jhc2U7CisJdTMyIHNxX2NvdW50OworCXUzMiBycV9iYXNlOworCXUzMiBycV9jb3VudDsKKwl1MzIgZHFfYmFzZTsKKwl1MzIgZHFfY291bnQ7CisJdTMyIGxyb19iYXNlOworCXUzMiBscm9fY291bnQ7CisJdTMyIGljZF9iYXNlOworCXUzMiBpY2RfY291bnQ7Cit9OworCitzdHJ1Y3QgYmVfZndfY2ZnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBiZV9jb25maWdfbnVtYmVyOworCXUzMiBhc2ljX3JldmlzaW9uOworCXUzMiBwaHlzX3BvcnQ7CisJdTMyIGZ1bmN0aW9uX21vZGU7CisJc3RydWN0IGJlX3VscF9md19jZmcgdWxwWzJdOworCXUzMiBmdW5jdGlvbl9jYXBzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFICAxCisjZGVmaW5lIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUICAgICAgNQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1RDUF9DT05ORUNUX0FORF9PRkZMT0FEIDcwCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX09GRkxPQURfU0VTU0lPTiA0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX01PRElGWV9FUV9ERUxBWQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0NMRUFOVVAJNTkKKyNkZWZpbmUJT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FECTU2CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfRVJST1JfUkVDT1ZFUllfSU5WQUxJREFURV9DT01NQU5EUyAxCisvKiAtLS0gQ01EX0lTQ1NJX0lOVkFMSURBVEVfQ09OTkVDVElPTl9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfSVNDU0lfQ09OTkVDVElPTl9JTlZBTElEQVRFIDEKKyNkZWZpbmUgQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSVNTVUVfVENQX1JTVCAyCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX0lOVkFMSURBVEVfQ09OTkVDVElPTiA0MgorCisjZGVmaW5lIElOSV9XUl9DTUQJCQkxCS8qIEluaXRpYXRvciB3cml0ZSBjb21tYW5kICovCisjZGVmaW5lIElOSV9UTUZfQ01ECQkJMgkvKiBJbml0aWF0b3IgVE1GIGNvbW1hbmQgKi8KKyNkZWZpbmUgSU5JX05PUE9VVF9DTUQJCQkzCS8qIEluaXRpYXRvcjsgU2VuZCBhIE5PUC1PVVQgKi8KKyNkZWZpbmUgSU5JX1JEX0NNRAkJCTUJLyogSW5pdGlhdG9yIHJlcXVlc3RpbmcgdG8gc2VuZAorCQkJCQkJICogYSByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfQ1RYX1VQRFRfQ01ECQk3CS8qIFRhcmdldCBjb250ZXh0IHVwZGF0ZSAqLworI2RlZmluZSBUR1RfU1RTX0NNRAkJCTgJLyogVGFyZ2V0IFIyVCBhbmQgb3RoZXIgQkhTCisJCQkJCQkgKiB3aGVyZSBvbmx5IHRoZSBzdGF0dXMgbnVtYmVyCisJCQkJCQkgKiBuZWVkIHRvIGJlIHVwZGF0ZWQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfREFUQUlOX0NNRAkJCTkJLyogVGFyZ2V0IERhdGEtSW5zIGluIHJlc3BvbnNlCisJCQkJCQkgKiB0byByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfU09TX1BEVQkJCTEwCS8qIFRhcmdldDpzdGFuZGFsb25lIHN0YXR1cworCQkJCQkJICogcmVzcG9uc2UKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfRE1fQ01ECQkJMTEJLyogSW5kaWNhdGVzIHRoYXQgdGhlIGJocworCQkJCQkJICogIHByZXBhcmVkYnkKKwkJCQkJCSAqIGRyaXZlciBzaG91bGQgbm90IGJlIHRvdWNoZWQKKwkJCQkJCSAqLworLyogLS0tIENNRF9DSFVURV9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfQ09OTkVDVElPTl9DSFVURV8wCQkxCisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0NIVVRFXzEJCTIKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMgkJMworCisjZGVmaW5lIEVRX01BSk9SX0NPREVfQ09NUExFVElPTgkwCisKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fREVMX0NGR19GUk9NX0ZMQVNIIDAKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0ggMQorCisvKiAtLS0gQ09OTkVDVElPTl9VUExPQURfUEFSQU1TIC0tLSAqLworLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdXBsb2FkIGRlc2lyZWQuICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCAgICAgIDEJLyogR3JhY2VmdWwgdXBsb2FkICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9BQk9SVF9SRVNFVCAgIDIJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGgKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlQJCTMJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGhvdXQKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlRfV0lUSF9TRVEgNAkvKiBBYm9ydGl2ZSB1cGxvYWQgd2l0aCByZXNldCwKKwkJCQkJCSAqIHNlcXVlbmNlIG51bWJlciBieSBkcml2ZXIgICovCisKKy8qIFJldHVybnMgYnl0ZSBzaXplIG9mIGdpdmVuIGZpZWxkIHdpdGggYSBzdHJ1Y3R1cmUuICovCisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZmllbGQgYXJyYXkuICovCisjZGVmaW5lIEJFX05VTUJFUl9PRl9GSUVMRChfdHlwZV8sIF9maWVsZF8pCVwKKwkoRklFTERfU0laRU9GKF90eXBlXywgX2ZpZWxkXykvc2l6ZW9mKCgoKF90eXBlXyAqKTApLT5fZmllbGRfWzBdKSkpXAorCisvKioKKyAqIERpZmZlcmVudCB0eXBlcyBvZiBpU0NTSSBjb21wbGV0aW9ucyB0byBob3N0IGRyaXZlciBmb3IgYm90aCBpbml0aWF0b3IKKyAqIGFuZCB0YWdldCBtb2RlCisgKiBvZiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgU09MX0NNRF9DT01QTEVURQkJMQkvKiBTb2xpY2l0ZWQgY29tbWFuZCBjb21wbGV0ZWQKKwkJCQkJCSAqIG5vcm1hbGx5CisJCQkJCQkgKi8KKyNkZWZpbmUgU09MX0NNRF9LSUxMRURfREFUQV9ESUdFU1RfRVJSICAyCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogaW52YWxpZGF0ZWQgaW50ZXJuYWxseSBkdWUKKwkJCQkJCSAqIHRvIERhdGEgRGlnZXN0IGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTCAzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5CisJCQkJCQkgKiBkdWUgdG8gYSByZWNpZXZlZCBQRFUKKwkJCQkJCSAqIHNpemUgPiBEU0wKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0JVUlNUX0xFTl9NSVNNQVRDSCAgIDQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRpIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgc2VxdWVuY2Ugc2l6ZSA+CisJCQkJCQkgKiBGQkwvTUJMLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQUhTX1JDVkQJCTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIFBEVSBIZHIgdGhhdCBoYXMKKwkJCQkJCSAqIEFIUyAqLworI2RlZmluZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSCTYJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIEhkciBEaWdlc3QKKwkJCQkJCSAqIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTktOT1dOX0hEUgkJNwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogIGludGVybmFsbHkKKwkJCQkJCSAqIGR1ZSB0byBhIGJhZCBvcGNvZGUgaW4gdGhlCisJCQkJCQkgKiBwZHUgaGRyCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQJOAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB0aGF0IGRvZXMgbm90IGJlbG9uZworCQkJCQkJICogdG8gdGhpcyBDb25uZWN0aW9uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRCA5CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB2YWx1ZSA+IE1heAorCQkJCQkJICogU3VwcG9ydGVkIElUVHMvVFRUcworCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfUlNUX1JDVkQJCTEwCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVENQIFJTVAorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfVElNRURfT1VUCQkxMQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gdGltZW91dCBvbgorCQkJCQkJICogdGNwIHNlZ21lbnQgMTIgcmV0cmFuc21pdAorCQkJCQkJICogYXR0ZW1wdHMgZmFpbGVkCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9SU1RfU0VOVAkJMTIJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIFRDUCBSU1QKKwkJCQkJCSAqIHNlbnQgYnkgdGhlIFR4IHNpZGUKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0ZJTl9SQ1ZECQkxMwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYW4KKwkJCQkJCSAqIGluY29taW5nIFRDUCBGSU4uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfVU5TT0xfUERVX1JDVkQJMTQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGJhZAorCQkJCQkJICogdW5zb2xpY2l0ZWQgUERVIFVuc29saWNpdGVkCisJCQkJCQkgKiBQRFVzIGFyZSBQRFVzIHdpdGgKKwkJCQkJCSAqIElUVD0weGZmZmZmZmZmCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfV1JCX0lOREVYX0VSUk9SCTE1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBiYWQgV1JCCisJCQkJCQkgKiBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMCTE2CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpdmVkCisJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbAorCQkJCQkJICogb3ZlciBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUwJMTcJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGNvbW1hbmQgaGFzIHJlc2lkdWFsIHVuZGVyCisJCQkJCQkgKiBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1NUQVRTTl9SQ1ZECTE4CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgU3RhdHVzU04KKwkJCQkJCSAqLworI2RlZmluZSBDTURfS0lMTEVEX0lOVkFMSURfUjJUX1JDVkQJMTkJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIGFuIFIyVCB3aXRoIHNvbWUgaW52YWxpZAorCQkJCQkJICogZmllbGRzIGluIGl0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfTFVOX0lOVkFMSUQJMjAJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgTFVOLgorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElECTIxCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byB0aGUKKwkJCQkJCSAqIGNvcnJlc3BvbmRpbmcgSUNEIG5vdCBpbiBhCisJCQkJCQkgKiB2YWxpZCBzdGF0ZQorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElECTIyCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkIGR1ZQorCQkJCQkJICogIHRvIHJlY2VpdmVkIFBEVSBoYXMgYW4KKwkJCQkJCSAqICBpbnZhbGlkIElUVC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUgkyMwkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZCBkdWUKKwkJCQkJCSAqIHRvIHJlY2VpdmVkIHNlcXVlbmNlIGJ1ZmZlcgorCQkJCQkJICogb2Zmc2V0IGlzIG91dCBvZiBvcmRlci4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEIDI0CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhCisJCQkJCQkgKiByZWNpZXZlZCBQRFUgaGFzIGFuIGludmFsaWQKKwkJCQkJCSAqIERhdGFTTgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX05PVElGWQkJMjUJLyogQ29ubmVjdGlvbiBpbnZhbGlkYXRpb24KKwkJCQkJCSAqIGNvbXBsZXRpb24gbm90aWZ5LgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX0lOREVYX05PVElGWQkyNgkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbgorCQkJCQkJICogd2l0aCBkYXRhIFBEVSBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfSU5WQUxJREFURURfTk9USUZZCQkyNwkvKiBDb21tYW5kIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbm5vdGlmaWZ5LgorCQkJCQkJICovCisjZGVmaW5lIFVOU09MX0hEUl9OT1RJRlkJCTI4CS8qIFVuc29saWNpdGVkIGhlYWRlciBub3RpZnkuKi8KKyNkZWZpbmUgVU5TT0xfREFUQV9OT1RJRlkJCTI5CS8qIFVuc29saWNpdGVkIGRhdGEgbm90aWZ5LiovCisjZGVmaW5lIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWSAJMzAJLyogVW5zb2xpY2l0ZWQgZGF0YSBkaWdlc3QKKwkJCQkJCSAqIGVycm9yIG5vdGlmeS4KKwkJCQkJCSAqLworI2RlZmluZSBEUklWRVJNU0dfTk9USUZZCQkzMQkvKiBUQ1AgYWNrbm93bGVkZ2UgYmFzZWQKKwkJCQkJCSAqIG5vdGlmaWNhdGlvbi4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OIDMyIC8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgICogaW50ZXJuYWxseSBkdWUgdG8gY29tbWFuZAorCQkJCQkJICAqIGFuZCBkYXRhIGFyZSBub3Qgb24gc2FtZQorCQkJCQkJICAqIGNvbm5lY3Rpb24uCisJCQkJCQkgICovCisjZGVmaW5lIFNPTF9DTURfS0lMTEVEX0RJRl9FUlIJCTMzCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogIGludmFsaWRhdGVkIGludGVybmFsbHkgZHVlCisJCQkJCQkgKiAgdG8gRElGIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TWU5fUkNWRAkJMzQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGluY29taW5nCisJCQkJCQkgKiBUQ1AgU1lOCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTU1fREFUQV9SQ1ZECTM1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVW5zb2xpY2l0ZWQgUERVCisJCQkJCQkgKiB0aGF0IGhhcyBpbW1lZGlhdGUgZGF0YSBvbgorCQkJCQkJICogdGhlIGN4bgorCQkJCQkJICovCisKK3ZvaWQgYmVfd3JiX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIsIGludCBwYXlsb2FkX2xlbiwKKwkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpOworCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pOworCisjZW5kaWYgLyogIUJFSVNDU0lfQ01EU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDI1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpAQCAtMCwwICsxLDYzOCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisKKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorCitleHRlcm4gc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydDsKKworLyoqCisgKiBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlIC0gY3JlYXRlcyBhIG5ldyBpc2NzaSBzZXNzaW9uCisgKiBAY21kc19tYXg6IG1heCBjb21tYW5kcyBzdXBwb3J0ZWQKKyAqIEBxZGVwdGg6IG1heCBxdWV1ZSBkZXB0aCBzdXBwb3J0ZWQKKyAqIEBpbml0aWFsX2NtZHNuOiBpbml0aWFsIGlzY3NpIENNRFNOCisgKi8KK3N0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJCQkJIHUxNiBjbWRzX21heCwKKwkJCQkJCSB1MTYgcWRlcHRoLAorCQkJCQkJIHUzMiBpbml0aWFsX2NtZHNuKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZVxuIik7CisKKwlpZiAoIWVwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlaXNjc2lfc2Vzc2lvbl9jcmVhdGU6IGludmFsaWQgZXAgXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzaG9zdCA9IHBoYmEtPnNob3N0OworCWlmIChjbWRzX21heCA+IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNhbm5vdCBoYW5kbGUgJWQgY21kcy4iCisJCQkgICAgICJNYXggY21kcyBwZXIgc2Vzc2lvbiBzdXBwb3J0ZWQgaXMgJWQuIFVzaW5nICVkLiAiCisJCQkgICAgICJcbiIsIGNtZHNfbWF4LAorCQkJICAgICAgYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biwKKwkJCSAgICAgIGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCQljbWRzX21heCA9IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47CisJfQorCisJIGNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQsCisJCQkJCSAgIHNob3N0LCBjbWRzX21heCwKKwkJCQkJICAgc2l6ZW9mKCpiZWlzY3NpX3Nlc3MpLAorCQkJCQkgICBzaXplb2YoKmlvX3Rhc2spLAorCQkJCQkgICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKKwlpZiAoIWNsc19zZXNzaW9uKQorCQlyZXR1cm4gTlVMTDsKKwlzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKKwliZWlzY3NpX3Nlc3MtPmJoc19wb29sID0gIHBjaV9wb29sX2NyZWF0ZSgiYmVpc2NzaV9iaHNfcG9vbCIsCisJCQkJCQkgICBwaGJhLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpLAorCQkJCQkJICAgNjQsIDApOworCWlmICghYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCkKKwkJZ290byBkZXN0cm95X3Nlc3M7CisKKwlyZXR1cm4gY2xzX3Nlc3Npb247CitkZXN0cm95X3Nlc3M6CisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3kgLSBkZXN0cm95cyBpc2NzaSBzZXNzaW9uCisgKiBAY2xzX3Nlc3Npb246CXBvaW50ZXIgdG8gaXNjc2kgY2xzIHNlc3Npb24KKyAqCisgKiBEZXN0cm95cyBpU0NTSSBzZXNzaW9uIGluc3RhbmNlIGFuZCByZWxlYXNlcworICogcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgaXQuCisgKi8KK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisKKwlwY2lfcG9vbF9kZXN0cm95KGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpOworCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9jcmVhdGUgLSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaXNjc2kgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwdHIgdG8gaXNjc2lfY2xzX3Nlc3Npb24KKyAqIEBjaWQ6IGlzY3NpIGNpZAorICovCitzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKgorYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLCB1MzIgY2lkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3M7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fY3JlYXRlICxjaWQiCisJCSAiZnJvbSBpc2NzaSBsYXllcj0lZFxuIiwgY2lkKTsKKwlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOworCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCisJY2xzX2Nvbm4gPSBpc2NzaV9jb25uX3NldHVwKGNsc19zZXNzaW9uLCBzaXplb2YoKmJlaXNjc2lfY29ubiksIGNpZCk7CisJaWYgKCFjbHNfY29ubikKKwkJcmV0dXJuIE5VTEw7CisKKwljb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwliZWlzY3NpX2Nvbm4tPmVwID0gTlVMTDsKKwliZWlzY3NpX2Nvbm4tPnBoYmEgPSBwaGJhOworCWJlaXNjc2lfY29ubi0+Y29ubiA9IGNvbm47CisJc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCWJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uLT5iZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX3Nlc3M7CisJcmV0dXJuIGNsc19jb25uOworfQorCisvKioKKyAqIGJlaXNjc2lfYmluZGNvbm5fY2lkIC0gQmluZCB0aGUgYmVpc2NzaV9jb25uIHdpdGggcGhiYSBjb25uZWN0aW9uIHRhYmxlCisgKiBAYmVpc2NzaV9jb25uOiBUaGUgcG9pbnRlciB0byAgYmVpc2NzaV9jb25uIHN0cnVjdHVyZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2JpbmRjb25uX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCXVuc2lnbmVkIGludCBjaWQpCit7CisJaWYgKHBoYmEtPmNvbm5fdGFibGVbY2lkXSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkNvbm5lY3Rpb24gdGFibGUgYWxyZWFkeSBvY2N1cGllZC4gRGV0ZWN0ZWQgY2xhc2hcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5jb25uX3RhYmxlWyVkXT0lcChiZWlzY3NpX2Nvbm4pIFxuIiwKKwkJCSBjaWQsIGJlaXNjc2lfY29ubik7CisJCXBoYmEtPmNvbm5fdGFibGVbY2lkXSA9IGJlaXNjc2lfY29ubjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2JpbmQgLSBCaW5kcyBpc2NzaSBzZXNzaW9uL2Nvbm5lY3Rpb24gd2l0aCBUQ1AgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBzZXNzaW9uCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEB0cmFuc3BvcnRfZmQ6IEVQIGhhbmRsZSg2NCBiaXQpCisgKgorICogVGhpcyBmdW5jdGlvbiBiaW5kcyB0aGUgVENQIENvbm4gd2l0aCBpU0NTSSBDb25uZWN0aW9uIGFuZCBTZXNzaW9uLgorICovCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdTY0IHRyYW5zcG9ydF9mZCwgaW50IGlzX2xlYWRpbmcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0KKwkJKHN0cnVjdCBTY3NpX0hvc3QgKilpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2JpbmRcbiIpOworCWVwID0gaXNjc2lfbG9va3VwX2VuZHBvaW50KHRyYW5zcG9ydF9mZCk7CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisKKwlpZiAoaXNjc2lfY29ubl9iaW5kKGNsc19zZXNzaW9uLCBjbHNfY29ubiwgaXNfbGVhZGluZykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJlaXNjc2lfZXAtPnBoYmEgIT0gcGhiYSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImJlaXNjc2lfZXAtPmhiYT0lcCBub3QgZXF1YWwgdG8gcGhiYT0lcCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+cGhiYSwgcGhiYSk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKKwliZWlzY3NpX2Nvbm4tPmVwID0gYmVpc2NzaV9lcDsKKwliZWlzY3NpX2VwLT5jb25uID0gYmVpc2NzaV9jb25uOworCVNFX0RFQlVHKERCR19MVkxfOCwgImJlaXNjc2lfY29ubj0lcCBjb25uPSVwIGVwX2NpZD0lZCBcbiIsCisJCSBiZWlzY3NpX2Nvbm4sIGNvbm4sIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJcmV0dXJuIGJlaXNjc2lfYmluZGNvbm5fY2lkKHBoYmEsIGJlaXNjc2lfY29ubiwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtIC0gZ2V0IHRoZSBpc2NzaSBwYXJhbWV0ZXIKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBpc2NzaSBjbHMgY29ubgorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaXNjc2kgcGFyYW1ldGVyCisgKi8KK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCWludCBsZW4gPSAwOworCisJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CisJaWYgKCFiZWlzY3NpX2VwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSAsIG5vIGJlaXNjc2lfZXBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9QT1JUOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVodVxuIiwgYmVpc2NzaV9lcC0+ZHN0X3RjcHBvcnQpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0NPTk5fQUREUkVTUzoKKwkJaWYgKGJlaXNjc2lfZXAtPmlwX3R5cGUgPT0gQkUyX0lQVjQpCisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsICZiZWlzY3NpX2VwLT5kc3RfYWRkcik7CisJCWVsc2UKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNlxuIiwgJmJlaXNjc2lfZXAtPmRzdDZfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBpc2NzaV9jb25uX2dldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1Zik7CisJfQorCXJldHVybiBsZW47Cit9CisKK2ludCBiZWlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJaW50IHJldDsKKworCXJldCA9IGlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogSWYgdXNlcnNwYWNlIHRyaWVkIHRvIHNldCB0aGUgdmFsdWUgdG8gaGlnaGVyIHRoYW4gd2UgY2FuCisJICogc3VwcG9ydCBvdmVycmlkZSBoZXJlLgorCSAqLworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX1BBUkFNX0ZJUlNUX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiA4MTkyKQorCQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSA4MTkyOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEg6CisJCWlmIChjb25uLT5tYXhfcmVjdl9kbGVuZ3RoID4gNjU1MzYpCisJCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gNjU1MzY7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiAyNjIxNDQpCisJCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDI2MjE0NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSAtIGdldCB0aGUgaXNjc2kgcGFyYW1ldGVyCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gc2NzaV9ob3N0IHN0cnVjdHVyZQorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaG9zdCBwYXJhbWV0ZXIKKyAqLworaW50IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlpbnQgbGVuID0gMDsKKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSFdBRERSRVNTOgorCQliZV9jbWRfZ2V0X21hY19hZGRyKCZwaGJhLT5jdHJsLCBwaGJhLT5tYWNfYWRkcmVzcyk7CisJCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaXNjc2lfaG9zdF9nZXRfcGFyYW0oc2hvc3QsIHBhcmFtLCBidWYpOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9nZXRfc3RhdHMgLSBnZXQgdGhlIGlzY3NpIHN0YXRzCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEBzdGF0czogcG9pbnRlciB0byBpc2NzaV9zdGF0cyBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGlzY3NpIHN0YXRzCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9nZXRfc3RhdHNcbiIpOworCXN0YXRzLT50eGRhdGFfb2N0ZXRzID0gY29ubi0+dHhkYXRhX29jdGV0czsKKwlzdGF0cy0+cnhkYXRhX29jdGV0cyA9IGNvbm4tPnJ4ZGF0YV9vY3RldHM7CisJc3RhdHMtPmRhdGFvdXRfcGR1cyA9IGNvbm4tPmRhdGFvdXRfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2lyc3BfcGR1cyA9IGNvbm4tPnNjc2lyc3BfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2ljbWRfcGR1cyA9IGNvbm4tPnNjc2ljbWRfcGR1c19jbnQ7CisJc3RhdHMtPmRhdGFpbl9wZHVzID0gY29ubi0+ZGF0YWluX3BkdXNfY250OworCXN0YXRzLT50bWZyc3BfcGR1cyA9IGNvbm4tPnRtZnJzcF9wZHVzX2NudDsKKwlzdGF0cy0+dG1mY21kX3BkdXMgPSBjb25uLT50bWZjbWRfcGR1c19jbnQ7CisJc3RhdHMtPnIydF9wZHVzID0gY29ubi0+cjJ0X3BkdXNfY250OworCXN0YXRzLT5kaWdlc3RfZXJyID0gMDsKKwlzdGF0cy0+dGltZW91dF9lcnIgPSAwOworCXN0YXRzLT5jdXN0b21fbGVuZ3RoID0gMDsKKwlzdHJjcHkoc3RhdHMtPmN1c3RvbVswXS5kZXNjLCAiZWhfYWJvcnRfY250Iik7CisJc3RhdHMtPmN1c3RvbVswXS52YWx1ZSA9IGNvbm4tPmVoX2Fib3J0X2NudDsKK30KKworLyoqCisgKiBiZWlzY3NpX3NldF9wYXJhbXNfZm9yX29mZmxkIC0gZ2V0IHRoZSBwYXJhbWV0ZXJzIGZvciBvZmZsb2FkCisgKiBAYmVpc2NzaV9jb25uOiBwb2ludGVyIHRvIGJlaXNjc2lfY29ubgorICogQHBhcmFtczogcG9pbnRlciB0byBvZmZsb2FkX3BhcmFtcyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgIGJlaXNjc2lfc2V0X3BhcmFtc19mb3Jfb2ZmbGQoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgIHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBtYXhfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPm1heF9idXJzdCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPm1heF94bWl0X2RsZW5ndGgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPmZpcnN0X2J1cnN0KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGVybCwgcGFyYW1zLAorCQkgICAgICBzZXNzaW9uLT5lcmwpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZGRlLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPmRhdGFkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGhkZSwgcGFyYW1zLAorCQkgICAgICBjb25uLT5oZHJkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGlyMnQsIHBhcmFtcywKKwkJICAgICAgc2Vzc2lvbi0+aW5pdGlhbF9yMnRfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgaW1kLCBwYXJhbXMsCisJCSAgICAgIHNlc3Npb24tPmltbV9kYXRhX2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGV4cF9zdGF0c24sIHBhcmFtcywKKwkJICAgICAgKGNvbm4tPmV4cF9zdGF0c24gLSAxKSk7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX3N0YXJ0IC0gb2ZmbG9hZCBvZiBzZXNzaW9uIHRvIGNoaXAKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBiZWlzY3NpX2Nvbm4KKyAqLworaW50IGJlaXNjc2lfY29ubl9zdGFydChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMpKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIGJlaXNjc2lfY29ubl9zdGFydCAsIG5vIGJlaXNjc2lfZXBcbiIpOworCisJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZSk7CisJYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcyA9IDA7CisJYmVpc2NzaV9zZXRfcGFyYW1zX2Zvcl9vZmZsZChiZWlzY3NpX2Nvbm4sICZwYXJhbXMpOworCWJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKGJlaXNjc2lfY29ubiwgJnBhcmFtcyk7CisJaXNjc2lfY29ubl9zdGFydChjbHNfY29ubik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfY2lkIC0gQWxsb2NhdGUgYSBjaWQKKyAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfZ2V0X2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gMHhGRkZGOworCisJaWYgKCFwaGJhLT5hdmxibF9jaWRzKQorCQlyZXR1cm4gY2lkOworCisJY2lkID0gcGhiYS0+Y2lkX2FycmF5W3BoYmEtPmNpZF9hbGxvYysrXTsKKwlpZiAocGhiYS0+Y2lkX2FsbG9jID09IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKQorCQlwaGJhLT5jaWRfYWxsb2MgPSAwOworCXBoYmEtPmF2bGJsX2NpZHMtLTsKKwlyZXR1cm4gY2lkOworfQorCisvKioKKyAqIGJlaXNjc2lfb3Blbl9jb25uIC0gQXNrIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKiBAc3JjX2FkZHI6IFRoZSBzb3VyY2UgSVAgYWRkcmVzcworICogQGRzdF9hZGRyOiBUaGUgRGVzdGluYXRpb24gIElQIGFkZHJlc3MKKyAqCisgKiBBc2tzIHRoZSBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlpbnQgcmV0ID0gLTE7CisKKwliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZCAiLAorCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+CisJICAgIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOworCXJldHVybiBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9wdXRfY2lkIC0gRnJlZSB0aGUgY2lkCisgKiBAcGhiYTogVGhlIHBoYmEgZm9yIHdoaWNoIHRoZSBjaWQgaXMgYmVpbmcgZnJlZWQKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gZnJlZQorICovCitzdGF0aWMgdm9pZCBiZWlzY3NpX3B1dF9jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaWQpCit7CisJcGhiYS0+YXZsYmxfY2lkcysrOworCXBoYmEtPmNpZF9hcnJheVtwaGJhLT5jaWRfZnJlZSsrXSA9IGNpZDsKKwlpZiAocGhiYS0+Y2lkX2ZyZWUgPT0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpCisJCXBoYmEtPmNpZF9mcmVlID0gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2ZyZWVfZXAgLSBmcmVlIGVuZHBvaW50CisgKiBAZXA6CXBvaW50ZXIgdG8gaXNjc2kgZW5kcG9pbnQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKworCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCWJlaXNjc2lfZXAtPnBoYmEgPSBOVUxMOworCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoZXApOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfY29ubmVjdCAtIEFzayBjaGlwIHRvIGNyZWF0ZSBUQ1AgQ29ubgorICogQHNjc2lfaG9zdDogUG9pbnRlciB0byBzY3NpX2hvc3Qgc3RydWN0dXJlCisgKiBAZHN0X2FkZHI6IFRoZSBJUCBhZGRyZXNzIG9mIFRhcmdldAorICogQG5vbl9ibG9ja2luZzogYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwKKyAqCisgKiBUaGlzIHJvdXRpbmVzIGZpcnN0IGFza3MgY2hpcCB0byBjcmVhdGUgYSBjb25uZWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRlcyBhbiBFUAorICovCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKgorYmVpc2NzaV9lcF9jb25uZWN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkgICBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCWludCByZXQ7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Nvbm5lY3QgXG4iKTsKKwlpZiAoc2hvc3QpCisJCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCWVsc2UgeworCQlyZXQgPSAtRU5YSU87CisJCVNFX0RFQlVHKERCR19MVkxfMSwgInNob3N0IGlzIE5VTEwgXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisJZXAgPSBpc2NzaV9jcmVhdGVfZW5kcG9pbnQoc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50KSk7CisJaWYgKCFlcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwliZWlzY3NpX2VwLT5waGJhID0gcGhiYTsKKworCWlmIChiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZykpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9lcDsKKwl9CisKKwlyZXR1cm4gZXA7CisKK2ZyZWVfZXA6CisJYmVpc2NzaV9mcmVlX2VwKGVwKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfcG9sbCAtIFBvbGwgdG8gc2VlIGlmIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKyAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAorICogQHRpbWVvdXRfbXM6IHRpbWVvdXQgc3BlY2lmaWVkIGluIG1pbGxpc2VjcworICoKKyAqIFBvbGwgdG8gc2VlIGlmIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaGVkCisgKi8KK2ludCBiZWlzY3NpX2VwX3BvbGwoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluICBiZWlzY3NpX2VwX3BvbGxcbiIpOworCWlmIChiZWlzY3NpX2VwLT5jaWRfdmxkID09IDEpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jbG9zZV9jb25uIC0gVXBsb2FkIHRoZSAgY29ubmVjdGlvbgorICogQGVwOiBUaGUgaXNjc2kgZW5kcG9pbnQKKyAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCisJaWYgKE1HTVRfU1RBVFVTX1NVQ0NFU1MgIT0KKwkgICAgbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsCisJCUNPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJ1cGxvYWQgZmFpbGVkIGZvciBjaWQgMHgleCIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QgLSBUZWFycyBkb3duIHRoZSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKgorICogVGVhcnMgZG93biB0aGUgVENQIGNvbm5lY3Rpb24KKyAqLwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCWludCBmbGFnID0gMDsKKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3RcbiIpOworCisJaWYgKGJlaXNjc2lfZXAtPmNvbm4pIHsKKwkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKKwkJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOworCQliZWlzY3NpX2Nsb3NlX2Nvbm4oZXAsIGZsYWcpOworCX0KKworCWJlaXNjc2lfZnJlZV9lcChlcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQgLSBVbmJpbmQgdGhlIGJlaXNjc2lfY29ubiBmcm9tIHBoYmEgY29ubiB0YWJsZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlpZiAocGhiYS0+Y29ubl90YWJsZVtjaWRdKQorCQlwaGJhLT5jb25uX3RhYmxlW2NpZF0gPSBOVUxMOworCWVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJDb25uZWN0aW9uIHRhYmxlIE5vdCBvY2N1cGllZC4gXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9zdG9wIC0gSW52YWxpZGF0ZSBhbmQgc3RvcCB0aGUgY29ubmVjdGlvbgorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGdldCBpc2NzaV9jb25uCisgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcgPSBDTURfSVNDU0lfU0VTU0lPTl9TQVZFX0NGR19PTl9GTEFTSDsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wXG4iKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgLCBubyBiZWlzY3NpX2VwXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0dXMgPSBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLAorCQkJCQkgICAgYmVpc2NzaV9lcC0+ZXBfY2lkLCAxLAorCQkJCQkgICAgc2F2ZWNmZ19mbGFnKTsKKwlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9CisJYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJmZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2lmbmRlZiBfQkVfSVNDU0lfCisjZGVmaW5lIF9CRV9JU0NTSV8KKworI2luY2x1ZGUgImJlX21haW4uaCIKKyNpbmNsdWRlICJiZV9tZ210LmgiCisKKyNkZWZpbmUgQkUyX0lQVjQgIDB4MQorI2RlZmluZSBCRTJfSVBWNiAgMHgxMAorCit2b2lkIGJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyAqcGFyYW1zKTsKKwordm9pZCBiZWlzY3NpX29mZmxvYWRfaXNjc2koc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwKKwkJCSAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgIHVuc2lnbmVkIGludCBmd19oYW5kbGUpOworCitzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKKwkJCQkJCSB1aW50MTZfdCBjbWRzX21heCwKKwkJCQkJCSB1aW50MTZfdCBxZGVwdGgsCisJCQkJCQkgdWludDMyX3QgaW5pdGlhbF9jbWRzbik7CisKK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbik7CisKK3N0cnVjdCBpc2NzaV9jbHNfY29ubiAqYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24KKwkJCQkJICAgKmNsc19zZXNzaW9uLCB1aW50MzJfdCBjaWQpOworCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdWludDY0X3QgdHJhbnNwb3J0X2ZkLCBpbnQgaXNfbGVhZGluZyk7CisKK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOworCitpbnQgYmVpc2NzaV9nZXRfaG9zdF9wYXJhbShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCSAgIGVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKKworaW50IGJlaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CisKK2ludCBiZWlzY3NpX2Nvbm5fc3RhcnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubik7CisKK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpOworCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXBfY29ubmVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJCQkgIGludCBub25fYmxvY2tpbmcpOworCitpbnQgYmVpc2NzaV9lcF9wb2xsKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCB0aW1lb3V0X21zKTsKKwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCk7CisKK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWFjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC0wLDAgKzEsMzM5MCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSAiYmVfbWFpbi5oIgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Oworc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeDsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKK01PRFVMRV9BVVRIT1IoIlNlcnZlckVuZ2luZXMgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9wYXJhbShiZV9pb3BvbGxfYnVkZ2V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGVuYWJsZV9tc2l4LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGJlX21heF9waHlzX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhiZV9tYXhfcGh5c19zaXplLCAiTWF4aW11bSBTaXplIChJbiBLaWxvYnl0ZXMpIG9mIHBoeXNpY2FsbHkiCisJCQkJICAgImNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgY2FuIGJlIGFsbG9jYXRlZC4iCisJCQkJICAgIlJhbmdlIGlzIDE2IC0gMTI4Iik7CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXYtPnJlcXVlc3RfcXVldWUsIDY1NTM2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmVpc2NzaV9zaHQgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIlNlcnZlckVuZ2luZXMgMTBHYmUgb3Blbi1pc2NzaSBJbml0aWF0b3IgRHJpdmVyIiwKKwkucHJvY19uYW1lID0gRFJWX05BTUUsCisJLnF1ZXVlY29tbWFuZCA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGlzY3NpX2VoX2Fib3J0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLnNsYXZlX2NvbmZpZ3VyZSA9IGJlaXNjc2lfc2xhdmVfY29uZmlndXJlLAorCS50YXJnZXRfYWxsb2MgPSBpc2NzaV90YXJnZXRfYWxsb2MsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKKwkuc2dfdGFibGVzaXplID0gQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMsCisJLmNhbl9xdWV1ZSA9IEJFMl9JT19ERVBUSCwKKwkudGhpc19pZCA9IC0xLAorCS5tYXhfc2VjdG9ycyA9IEJFSVNDU0lfTUFYX1NFQ1RPUlMsCisJLmNtZF9wZXJfbHVuID0gQkVJU0NTSV9DTURfUEVSX0xVTiwKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKK307CitzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0gUENJIERyaXZlciBvcGVyYXRpb25zIGFuZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVpc2NzaV9wY2lfaWRfdGFibGUpID0geworCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBiZWlzY3NpX2hiYSAqYmVpc2NzaV9oYmFfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmJlaXNjc2lfc2h0LCBzaXplb2YoKnBoYmEpLCAwKTsKKwlpZiAoIXNob3N0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9oYmFfYWxsb2MgLSIKKwkJCSJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2hvc3QtPmRtYV9ib3VuZGFyeSA9IHBjaWRldi0+ZG1hX21hc2s7CisJc2hvc3QtPm1heF9pZCA9IEJFMl9NQVhfU0VTU0lPTlM7CisJc2hvc3QtPm1heF9jaGFubmVsID0gMDsKKwlzaG9zdC0+bWF4X2NtZF9sZW4gPSBCRUlTQ1NJX01BWF9DTURfTEVOOworCXNob3N0LT5tYXhfbHVuID0gQkVJU0NTSV9OVU1fTUFYX0xVTjsKKwlzaG9zdC0+dHJhbnNwb3J0dCA9IGJlaXNjc2lfc2NzaV90cmFuc3BvcnQ7CisKKwlwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwltZW1zZXQocGhiYSwgMCwgc2l6ZW9mKCpwaGJhKSk7CisJcGhiYS0+c2hvc3QgPSBzaG9zdDsKKwlwaGJhLT5wY2lkZXYgPSBwY2lfZGV2X2dldChwY2lkZXYpOworCisJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCAmcGhiYS0+cGNpZGV2LT5kZXYpKQorCQlnb3RvIGZyZWVfZGV2aWNlczsKKwlyZXR1cm4gcGhiYTsKKworZnJlZV9kZXZpY2VzOgorCXBjaV9kZXZfcHV0KHBoYmEtPnBjaWRldik7CisJaXNjc2lfaG9zdF9mcmVlKHBoYmEtPnNob3N0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWlmIChwaGJhLT5jc3JfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5jc3JfdmEpOworCQlwaGJhLT5jc3JfdmEgPSBOVUxMOworCX0KKwlpZiAocGhiYS0+ZGJfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5kYl92YSk7CisJCXBoYmEtPmRiX3ZhID0gTlVMTDsKKwl9CisJaWYgKHBoYmEtPnBjaV92YSkgeworCQlpb3VubWFwKHBoYmEtPnBjaV92YSk7CisJCXBoYmEtPnBjaV92YSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbWFwX3BjaV9iYXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXU4IF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGhiYS0+Y3RybC5jc3IgPSBhZGRyOworCXBoYmEtPmNzcl92YSA9IGFkZHI7CisJcGhiYS0+Y3NyX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCksIDEyOCAqIDEwMjQpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJcGhiYS0+Y3RybC5kYiA9IGFkZHI7CisJcGhiYS0+ZGJfdmEgPSBhZGRyOworCXBoYmEtPmRiX3BhLnUuYTY0LmFkZHJlc3MgPSAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCk7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAxKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJZ290byBwY2lfbWFwX2VycjsKKwlwaGJhLT5jdHJsLnBjaWNmZyA9IGFkZHI7CisJcGhiYS0+cGNpX3ZhID0gYWRkcjsKKwlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCXJldHVybiAwOworCitwY2lfbWFwX2VycjoKKwliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2VuYWJsZV9wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9lbmFibGVfcGNpIC0gZW5hYmxlIGRldmljZSAiCisJCQkiZmFpbGVkLiBSZXR1cm5pbmcgLUVOT0RFVlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNvdWxkIG5vdCBzZXQgUENJIERNQSBNYXNrXG4iKTsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV9jdHJsX2luaXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsbG9jID0gJmN0cmwtPm1ib3hfbWVtX2FsbG9jZWQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsaWduID0gJmN0cmwtPm1ib3hfbWVtOworCWludCBzdGF0dXMgPSAwOworCisJY3RybC0+cGRldiA9IHBkZXY7CisJc3RhdHVzID0gYmVpc2NzaV9tYXBfcGNpX2JhcnMocGhiYSwgcGRldik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCW1ib3hfbWVtX2FsbG9jLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCkgKyAxNjsKKwltYm94X21lbV9hbGxvYy0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJCQkJICBtYm94X21lbV9hbGxvYy0+c2l6ZSwKKwkJCQkJCSAgJm1ib3hfbWVtX2FsbG9jLT5kbWEpOworCWlmICghbWJveF9tZW1fYWxsb2MtPnZhKSB7CisJCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCW1ib3hfbWVtX2FsaWduLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCk7CisJbWJveF9tZW1fYWxpZ24tPnZhID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT52YSwgMTYpOworCW1ib3hfbWVtX2FsaWduLT5kbWEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPmRtYSwgMTYpOworCW1lbXNldChtYm94X21lbV9hbGlnbi0+dmEsIDAsIHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpKTsKKwlzcGluX2xvY2tfaW5pdCgmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2dldF9wYXJhbXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSBCRTJfSU9fREVQVEg7CisJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBCRTJfTUFYX1NFU1NJT05TOworCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBCRTJfQVNZTkNQRFVTOworCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gQkUyX01BWF9JQ0RTIC8gMjsKKwlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gPSBCRTJfU0dFOworCXBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6ID0gQkUyX0RFRlBEVV9IRFJfU1o7CisJcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6ID0gQkUyX0RFRlBEVV9EQVRBX1NaOworCXBoYmEtPnBhcmFtcy5lcV90aW1lciA9IDY0OworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KKwkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9IChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPCAxMDI0KQorCQkJCT8gMTAyNCA6IHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllczsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWQgXG4iLAorCQkgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKKwlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgPQorCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCisJCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSJwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXM9JWQgQkUyX0NNRFNfUEVSX0NYTj0lZCIKKwkJIkJFMl9MT0dPVVRTPSVkIEJFMl9UTUZTPSVkIEJFMl9BU1lOQ1BEVVM9JWQgXG4iLAorCQlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsIEJFMl9DTURTX1BFUl9DWE4sCisJCUJFMl9MT0dPVVRTLCBCRTJfVE1GUywgQkUyX0FTWU5DUERVUyk7CisJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biA9IDI1NjsKK30KKworc3RhdGljIHZvaWQgaHdpX3JpbmdfZXFfZGIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2xyX2ludGVycnVwdCwKKwkJCSAgIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkLAorCQkJICAgdW5zaWduZWQgY2hhciByZWFybSwgdW5zaWduZWQgY2hhciBldmVudCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gaWQgJiBEQl9FUV9SSU5HX0lEX01BU0s7CisJaWYgKHJlYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9FUV9SRUFSTV9TSElGVDsKKwlpZiAoY2xyX2ludGVycnVwdCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfQ0xSX1NISUZUOworCWlmIChldmVudCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfRVZOVF9TSElGVDsKKwl2YWwgfD0gbnVtX3Byb2Nlc3NlZCA8PCBEQl9FUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIHBoYmEtPmRiX3ZhICsgREJfRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBiZV9pc3IgLSBUaGUgaXNyIHJvdXRpbmUgb2YgdGhlIGRyaXZlci4KKyAqIEBpcnE6IE5vdCB1c2VkCisgKiBAZGV2X2lkOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlycXJldHVybl90IGJlX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3E7CisJdW5zaWduZWQgbG9uZyBmbGFncywgaW5kZXg7CisJdW5zaWduZWQgaW50IG51bV9lcV9wcm9jZXNzZWQ7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybDsKKwlpbnQgaXNyOworCisJcGhiYSA9IGRldl9pZDsKKwlpZiAoIWVuYWJsZV9tc2l4KSB7CisJCWN0cmwgPSAmcGhiYS0+Y3RybDs7CisJCWlzciA9IGlvcmVhZDMyKGN0cmwtPmNzciArIENFVl9JU1IwX09GRlNFVCArCisJCQkgICAgICAgKFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSAqIENFVl9JU1JfU0laRSkpOworCQlpZiAoIWlzcikKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJaW5kZXggPSAwOworCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJaWYgKCFlcWUpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgImVxZSBpcyBOVUxMXG4iKTsKKworCW51bV9lcV9wcm9jZXNzZWQgPSAwOworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpIHsKKwkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQorCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisJCQlpZiAoIWJsa19pb3BvbGxfc2NoZWRfcHJlcCgmcGhiYS0+aW9wb2xsKSkKKwkJCQlibGtfaW9wb2xsX3NjaGVkKCZwaGJhLT5pb3BvbGwpOworCisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJWYWxpZCBFUUVcbiIpOworCQl9CisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsCW51bV9lcV9wcm9jZXNzZWQsIDAsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCisJCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisKKwkJCWlmICgoKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksCisJCQkgICAgIHJlc291cmNlX2lkKSAvIDMyXSAmCisJCQkgICAgIEVRRV9SRVNJRF9NQVNLKSA+PiAxNikgIT0gY3EtPmlkKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQkJcGhiYS0+dG9kb19tY2NfY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJCXBoYmEtPnRvZG9fY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCX0KKwkJaWYgKHBoYmEtPnRvZG9fY3EgfHwgcGhiYS0+dG9kb19tY2NfY3EpCisJCQlxdWV1ZV93b3JrKHBoYmEtPndxLCAmcGhiYS0+d29ya19jcXMpOworCisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIG51bV9lcV9wcm9jZXNzZWQsIDEsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X2lycXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBiZV9pc3IsIElSUUZfU0hBUkVELCAiYmVpc2NzaSIsIHBoYmEpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfaW5pdF9pcnFzLSIKKwkJCSAgICAgIkZhaWxlZCB0byByZWdpc3RlciBpcnFcXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9yaW5nX2NxX2RiKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlYXJtLCB1bnNpZ25lZCBjaGFyIGV2ZW50KQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAocmVhcm0pCisJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOworCXZhbCB8PSBudW1fcHJvY2Vzc2VkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9DUV9PRkZTRVQpOworfQorCisvKgorICogYXN5bmMgcGR1cyBpbmNsdWRlCisgKiBhLiB1bnNvbGljaXRlZCBOT1AtSW4gKHRhcmdldCBpbml0aWF0ZWQgTk9QLUluKQorICogYi4gQXN5bmMgTWVzc2FnZXMKKyAqIGMuIFJlamVjdCBQRFUKKyAqIGQuIExvZ2luIHJlc3BvbnNlCisgKiBUaGVzZSBoZWFkZXJzIGFycml2ZSB1bnByb2Nlc3NlZCBieSB0aGUgRVAgZmlybXdhcmUgYW5kIGlTQ1NJIGxheWVyCisgKiBwcm9jZXNzIHRoZW0KKyAqLworc3RhdGljIHVuc2lnbmVkIGludAorYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJICBzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHUsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGR1X2xlbiwKKwkJCSAgdm9pZCAqcGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZfbGVuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXN3aXRjaCAocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIG9wY29kZSkgLyAzMl0gJgorCQkJCQkJUERVQkFTRV9PUENPREVfTUFTSykgeworCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKKwkJcGJ1ZmZlciA9IE5VTEw7CisJCWJ1Zl9sZW4gPSAwOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX0FTWU5DX0VWRU5UOgorCQlicmVhazsKKwljYXNlIElTQ1NJX09QX1JFSkVDVDoKKwkJV0FSTl9PTighcGJ1ZmZlcik7CisJCVdBUk5fT04oIShidWZfbGVuID09IDQ4KSk7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIElTQ1NJX09QX1JFSkVDVFxuIik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVucmVjb2duaXplZCBvcGNvZGUgMHgleCBpbiBhc3luYyBtc2cgXG4iLAorCQkJICAgICAocHBkdS0+CisJCQkgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBvcGNvZGUpIC8gMzJdCisJCQkJCQkmIFBEVUJBU0VfT1BDT0RFX01BU0spKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKXBwZHUsIHBidWZmZXIsIGJ1Zl9sZW4pOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZ2xfaGFuZGxlICphbGxvY19pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYXZibCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkluIGFsbG9jX2lvX3NnbF9oYW5kbGUsaW9fc2dsX2FsbG9jX2luZGV4PSVkIFxuIiwKKwkJCSBwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXgpOworCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+CisJCQkJCQlpb19zZ2xfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9hbGxvY19pbmRleF0gPSBOVUxMOworCQlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsLS07CisJCWlmIChwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXggPT0gKHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLSAxKSkKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKQoreworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGZyZWVfLGlvX3NnbF9mcmVlX2luZGV4PSVkIFxuIiwKKwkJIHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4KTsKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0pIHsKKwkJLyoKKwkJICogdGhpcyBjYW4gaGFwcGVuIGlmIGNsZWFuX3Rhc2sgaXMgY2FsbGVkIG9uIGEgdGFzayB0aGF0CisJCSAqIGZhaWxlZCBpbiB4bWl0X3Rhc2sgb3IgYWxsb2NfcGR1LgorCQkgKi8KKwkJIFNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiRG91YmxlIEZyZWUgaW4gSU8gU0dMIGlvX3NnbF9mcmVlX2luZGV4PSVkLCIKKwkJCSAidmFsdWUgdGhlcmU9JXAgXG4iLCBwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCwKKwkJCSBwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSk7CisJCXJldHVybjsKKwl9CisJcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0gPSBwc2dsX2hhbmRsZTsKKwlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsKys7CisJaWYgKHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID09IChwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0gMSkpCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4Kys7Cit9CisKKy8qKgorICogYWxsb2Nfd3JiX2hhbmRsZSAtIFRvIGFsbG9jYXRlIGEgd3JiIGhhbmRsZQorICogQHBoYmE6IFRoZSBoYmEgcG9pbnRlcgorICogQGNpZDogVGhlIGNpZCB0byB1c2UgZm9yIGFsbG9jYXRpb24KKyAqIEBpbmRleDogaW5kZXggYWxsb2NhdGlvbiBhbmQgd3JiIGluZGV4CisgKgorICogVGhpcyBoYXBwZW5zIHVuZGVyIHNlc3Npb25fbG9jayB1bnRpbCBzdWJtaXNzaW9uIHRvIGNoaXAKKyAqLworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCSAgICBpbnQgaW5kZXgpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtpbmRleF07CisJcHdyYl9oYW5kbGUtPndyYl9pbmRleCA9IGluZGV4OworCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gaW5kZXg7CisJcmV0dXJuIHB3cmJfaGFuZGxlOworfQorCisvKioKKyAqIGZyZWVfd3JiX2hhbmRsZSAtIFRvIGZyZWUgdGhlIHdyYiBoYW5kbGUgYmFjayB0byBwb29sCisgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCisgKiBAcHdyYl9jb250ZXh0OiBUaGUgY29udGV4dCB0byBmcmVlIGZyb20KKyAqIEBwd3JiX2hhbmRsZTogVGhlIHdyYl9oYW5kbGUgdG8gZnJlZQorICoKKyAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitmcmVlX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQsCisJCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSkKK3sKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSAiRlJFRSBXUkI6IHB3cmJfaGFuZGxlPSVwIGZyZWVfaW5kZXg9JWQ9MHgleCIKKwkJICJ3cmJfaGFuZGxlc19hdmFpbGFibGU9JWQgXG4iLAorCQkgcHdyYl9oYW5kbGUsIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwKKwkJIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwgcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUpOworfQorCitzdGF0aWMgc3RydWN0IHNnbF9oYW5kbGUgKmFsbG9jX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCisJaWYgKHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpIHsKKwkJcHNnbF9oYW5kbGUgPSBwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9hbGxvY19pbmRleF07CisJCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4XSA9IE5VTEw7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfc2dsX2FsbG9jX2luZGV4PSVkPTB4JXggXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCwgcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4KTsKKwkJcGhiYS0+ZWhfc2dsX2huZGxfYXZibC0tOworCQlpZiAocGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID09CisJCSAgICAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0KKwkJICAgICAxKSkKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCit2b2lkCitmcmVlX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSkKK3sKKworCWlmIChwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSkgeworCQkvKgorCQkgKiB0aGlzIGNhbiBoYXBwZW4gaWYgY2xlYW5fdGFzayBpcyBjYWxsZWQgb24gYSB0YXNrIHRoYXQKKwkJICogZmFpbGVkIGluIHhtaXRfdGFzayBvciBhbGxvY19wZHUuCisJCSAqLworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkRvdWJsZSBGcmVlIGluIGVoIFNHTCAsZWhfc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9mcmVlX2luZGV4KTsKKwkJcmV0dXJuOworCX0KKwlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwlpZiAocGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXggPT0KKwkgICAgKHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC0gcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtIDEpKQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCsrOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfaW8oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGJlX3N0YXR1c19iaHMgKnN0c19iaHMgPQorCQkJCShzdHJ1Y3QgYmVfc3RhdHVzX2JocyAqKWlvX3Rhc2stPmNtZF9iaHM7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJdW5zaWduZWQgaW50IHNlbnNlX2xlbjsKKwl1bnNpZ25lZCBjaGFyICpzZW5zZTsKKwl1MzIgcmVzaWQgPSAwLCBleHBfY21kc24sIG1heF9jbWRzbjsKKwl1OCByc3AsIHN0YXR1cywgZmxhZ3M7CisKKwlleHBfY21kc24gPSBiZTMyX3RvX2NwdShwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCSYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJbWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCXJzcCA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvIDMyXQorCQkJCQkJJiBTT0xfUkVTUF9NQVNLKSA+PiAxNik7CisJc3RhdHVzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3N0cykgLyAzMl0KKwkJCQkJCSYgU09MX1NUU19NQVNLKSA+PiA4KTsKKwlmbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKworCXRhc2stPnNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHN0YXR1czsKKwlpZiAocnNwICE9IElTQ1NJX1NUQVRVU19DTURfQ09NUExFVEVEKSB7CisJCXRhc2stPnNjLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWdvdG8gdW5tYXA7CisJfQorCisJLyogYmlkaSBub3QgaW5pdGlhbGx5IHN1cHBvcnRlZCAqLworCWlmIChmbGFncyAmIChJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cgfCBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVykpIHsKKwkJcmVzaWQgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvCisJCQkJMzJdICYgU09MX1JFU19DTlRfTUFTSyk7CisKKwkJaWYgKCFzdGF0dXMgJiYgKGZsYWdzICYgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cpKQorCQkJdGFzay0+c2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKworCQlpZiAoZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cpIHsKKwkJCXNjc2lfc2V0X3Jlc2lkKHRhc2stPnNjLCByZXNpZCk7CisJCQlpZiAoIXN0YXR1cyAmJiAoc2NzaV9idWZmbGVuKHRhc2stPnNjKSAtIHJlc2lkIDwKKwkJCSAgICB0YXNrLT5zYy0+dW5kZXJmbG93KSkKKwkJCQl0YXNrLT5zYy0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKKwkJc2Vuc2UgPSBzdHNfYmhzLT5zZW5zZV9pbmZvICsgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKwkJc2Vuc2VfbGVuID0KKwkJICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydCkoc3RzX2Jocy0+c2Vuc2VfaW5mb1swXSkpOworCQltZW1jcHkodGFzay0+c2MtPnNlbnNlX2J1ZmZlciwgc2Vuc2UsCisJCSAgICAgICBtaW5fdCh1MTYsIHNlbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CisJfQorCWlmIChpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9SRUFEKSB7CisJCWlmIChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCisJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKQorCQkJIGNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gKHBzb2wtPgorCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQorCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSyk7CisJfQordW5tYXA6CisJc2NzaV9kbWFfdW5tYXAoaW9fdGFzay0+c2NzaV9jbW5kKTsKKwlpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2sodGFzaywgZXhwX2NtZHNuLCBtYXhfY21kc24pOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbG9nb3V0KHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT50MndhaXQgPSA1OworCWhkci0+dDJyZXRhaW4gPSAwOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KKwkJCQkJMzJdICYgU09MX1JFU1BfTUFTSyk7CisJaGRyLT5leHBfY21kc24gPSBjcHVfdG9fYmUzMihwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT4KKwkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5obGVuZ3RoID0gMDsKKworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX3RtZihzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaXNjc2lfdG1fcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKXRhc2stPmhkcjsKKwloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCisJCQkJCTMyXSAmIFNPTF9SRVNQX01BU0spOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfY29tcGxldGVfZHJ2cl9tc2dzKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CisJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCisJCQkJU09MX0NJRF9NQVNLKSA+PiA2KV07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KKwkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBwd3JiX2hhbmRsZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbm9waW5fcmVzcChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGlzY3NpX25vcGluICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX25vcGluICopdGFzay0+aGRyOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX05PT1BfSU47CisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBod2lfY29tcGxldGVfY21kKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPgorCQl3cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0KKwkJJiBTT0xfQ0lEX01BU0spID4+IDYpXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLworCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKKworCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKKwlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKKwlzd2l0Y2ggKChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKKwkJIFdSQl9UWVBFX01BU0spID4+IDI4KSB7CisJY2FzZSBIV0hfVFlQRV9JTzoKKwljYXNlIEhXSF9UWVBFX0lPX1JEOgorCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09CisJCSAgICBJU0NTSV9PUF9OT09QX09VVCkgeworCQkJYmVfY29tcGxldGVfbm9waW5fcmVzcChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQl9IGVsc2UKKwkJCWJlX2NvbXBsZXRlX2lvKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9MT0dPVVQ6CisJCWJlX2NvbXBsZXRlX2xvZ291dChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTE9HSU46CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiXHRcdCBObyBIV0hfVFlQRV9MT0dJTiBFeHBlY3RlZCBpbiBod2lfY29tcGxldGVfY21kIgorCQkJICItIFNvbGljaXRlZCBwYXRoIFxuIik7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9UTUY6CisJCWJlX2NvbXBsZXRlX3RtZihiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTk9QOgorCQliZV9jb21wbGV0ZV9ub3Bpbl9yZXNwKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIndyYl9pbmRleCAweCV4IENJRCAweCV4XG4iLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvCisJCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQorCQkJCQkmIFNPTF9DSURfTUFTSykgPj4gNikpOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0CisJCQkJCSAgKnBhc3luY19jdHgsIHVuc2lnbmVkIGludCBpc19oZWFkZXIsCisJCQkJCSAgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCWlmIChpc19oZWFkZXIpCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLgorCQkgICAgaGVhZGVyX2J1c3lfbGlzdDsKKwllbHNlCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLmRhdGFfYnVzeV9saXN0OworfQorCitzdGF0aWMgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKgoraHdpX2dldF9hc3luY19oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICBzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkgICAgIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSwgdW5zaWduZWQgaW50ICpwY3FfaW5kZXgpCit7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBoeXNfYWRkcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwYnVzeV9saXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwlpbnQgYnVmZmVyX2xlbiA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJfaW5kZXggPSAtMTsKKwl1bnNpZ25lZCBjaGFyIGlzX2hlYWRlciA9IDA7CisKKwlwaHlzX2FkZHIudS5hMzIuYWRkcmVzc19sbyA9CisJICAgIHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkYl9hZGRyX2xvKSAvIDMyXSAtCisJICAgICgocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCQkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisJcGh5c19hZGRyLnUuYTMyLmFkZHJlc3NfaGkgPQorCSAgICBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZGJfYWRkcl9oaSkgLyAzMl07CisKKwlwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyA9CisJCQkqKCh1bnNpZ25lZCBsb25nIGxvbmcgKikoJnBoeXNfYWRkci51LmE2NC5hZGRyZXNzKSk7CisKKwlzd2l0Y2ggKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBjb2RlKSAvIDMyXQorCQkJJiBQRFVDUUVfQ09ERV9NQVNLKSB7CisJY2FzZSBVTlNPTF9IRFJfTk9USUZZOgorCQlpc19oZWFkZXIgPSAxOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCAxLAorCQkJKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKworCQlidWZmZXJfbGVuID0gKHVuc2lnbmVkIGludCkocGh5c19hZGRyLnUuYTY0LmFkZHJlc3MgLQorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5wYV9iYXNlLnUuYTY0LmFkZHJlc3MpOworCisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLworCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idWZmZXJfc2l6ZTsKKworCQlicmVhazsKKwljYXNlIFVOU09MX0RBVEFfTk9USUZZOgorCQlwYnVzeV9saXN0ID0gaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgMCwgKHBkcGR1X2NxZS0+CisJCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKwkJYnVmZmVyX2xlbiA9ICh1bnNpZ25lZCBsb25nKShwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyAtCisJCQkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LgorCQkJCQlhNjQuYWRkcmVzcyk7CisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLyBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1ZmZlcl9zaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYnVzeV9saXN0ID0gTlVMTDsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkiVW5leHBlY3RlZCBjb2RlPSVkIFxuIiwKKwkJCSBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJY29kZSkgLyAzMl0gJiBQRFVDUUVfQ09ERV9NQVNLKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJV0FSTl9PTighKGJ1ZmZlcl9pbmRleCA8PSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzKSk7CisJV0FSTl9PTihsaXN0X2VtcHR5KHBidXN5X2xpc3QpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhc3luY19oYW5kbGUsIHBidXN5X2xpc3QsIGxpbmspIHsKKwkJV0FSTl9PTihwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCk7CisJCWlmIChwYXN5bmNfaGFuZGxlLT5pbmRleCA9PSBidWZmZXJfaW5kZXgpCisJCQlicmVhazsKKwl9CisKKwlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKworCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7CisJcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyID0gaXNfaGVhZGVyOworCXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW4gPSAoKHBkcGR1X2NxZS0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisKKwkqcGNxX2luZGV4ID0gKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spOworCXJldHVybiBwYXN5bmNfaGFuZGxlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfdXBkYXRlX2FzeW5jX3dyaXRhYmxlcyhzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkJICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGNxX2luZGV4KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBidXN5X2xpc3Q7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGU7CisJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzLCB3cml0YWJsZXMgPSAwOworCXVuc2lnbmVkIGludCAqcGVwX3JlYWRfcHRyLCAqcHdyaXRhYmxlczsKKworCisJaWYgKGlzX2hlYWRlcikgeworCQlwZXBfcmVhZF9wdHIgPSAmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXM7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLm51bV9lbnRyaWVzOworCX0gZWxzZSB7CisJCXBlcF9yZWFkX3B0ciA9ICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzOworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJfQorCisJd2hpbGUgKCgqcGVwX3JlYWRfcHRyKSAhPSBjcV9pbmRleCkgeworCQkoKnBlcF9yZWFkX3B0cikrKzsKKwkJKnBlcF9yZWFkX3B0ciA9ICgqcGVwX3JlYWRfcHRyKSAlIG51bV9lbnRyaWVzOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCBpc19oZWFkZXIsCisJCQkJCQkgICAgICpwZXBfcmVhZF9wdHIpOworCQlpZiAod3JpdGFibGVzID09IDApCisJCQlXQVJOX09OKGxpc3RfZW1wdHkocGJ1c3lfbGlzdCkpOworCisJCWlmICghbGlzdF9lbXB0eShwYnVzeV9saXN0KSkgeworCQkJcGFzeW5jX2hhbmRsZSA9IGxpc3RfZW50cnkocGJ1c3lfbGlzdC0+bmV4dCwKKwkJCQkJCSAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJICAgbGluayk7CisJCQlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKwkJCXBhc3luY19oYW5kbGUtPmNvbnN1bWVkID0gMTsKKwkJfQorCisJCXdyaXRhYmxlcysrOworCX0KKworCWlmICghd3JpdGFibGVzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRHVwbGljYXRlIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAtIGluZGV4IDB4JXghIVxuIiwKKwkJCSBjcV9pbmRleCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJKnB3cml0YWJsZXMgPSAqcHdyaXRhYmxlcyArIHdyaXRhYmxlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBod2lfZnJlZV9hc3luY19tc2coc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3JpKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlLCAqdG1wX2hhbmRsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdDsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGxpc3QgID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhc3luY19oYW5kbGUsIHRtcF9oYW5kbGUsIHBsaXN0LCBsaW5rKSB7CisJCWxpc3RfZGVsKCZwYXN5bmNfaGFuZGxlLT5saW5rKTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMrKzsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzKys7CisJCQlpKys7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAwOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c19hZGRyICoKK2h3aV9nZXRfcmluZ19hZGRyZXNzKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsCisJCSAgICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2UgPSBOVUxMOworCisJaWYgKGlzX2hlYWRlcikKKwkJcGFzeW5jX3NnZSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5yaW5nX2Jhc2U7CisJZWxzZQorCQlwYXN5bmNfc2dlID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2U7CisKKwlyZXR1cm4gcGFzeW5jX3NnZSArIGhvc3Rfd3JpdGVfcHRyOworfQorCitzdGF0aWMgdm9pZCBod2lfcG9zdF9hc3luY19idWZmZXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKnBmcmVlX2xpbmssICpwYnVzeV9saXN0OworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2U7CisJdW5zaWduZWQgaW50IHJpbmdfaWQsIG51bV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBob3N0X3dyaXRlX251bTsKKwl1bnNpZ25lZCBpbnQgd3JpdGFibGVzOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCWlmIChpc19oZWFkZXIpIHsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzLAorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMpOworCQlwZnJlZV9saW5rID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0cjsKKwkJcmluZ19pZCA9IHBod2lfY3RybHItPmRlZmF1bHRfcGR1X2hkci5pZDsKKwl9IGVsc2UgeworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcywKKwkJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcyk7CisJCXBmcmVlX2xpbmsgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHI7CisJCXJpbmdfaWQgPSBwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkOworCX0KKworCXdyaXRhYmxlcyA9ICh3cml0YWJsZXMgLyA4KSAqIDg7CisJaWYgKHdyaXRhYmxlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgd3JpdGFibGVzOyBpKyspIHsKKwkJCXBidXN5X2xpc3QgPQorCQkJICAgIGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIGlzX2hlYWRlciwKKwkJCQkJCSAgICBob3N0X3dyaXRlX251bSk7CisJCQlwYXN5bmNfaGFuZGxlID0KKwkJCSAgICBsaXN0X2VudHJ5KHBmcmVlX2xpbmssIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJCQlsaW5rKTsKKwkJCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOworCQkJcGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPSAwOworCisJCQlwZnJlZV9saW5rID0gcGZyZWVfbGluay0+bmV4dDsKKworCQkJcGFzeW5jX3NnZSA9IGh3aV9nZXRfcmluZ19hZGRyZXNzKHBhc3luY19jdHgsCisJCQkJCQlpc19oZWFkZXIsIGhvc3Rfd3JpdGVfbnVtKTsKKworCQkJcGFzeW5jX3NnZS0+aGkgPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2xvOworCQkJcGFzeW5jX3NnZS0+bG8gPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2hpOworCisJCQlsaXN0X21vdmUoJnBhc3luY19oYW5kbGUtPmxpbmssIHBidXN5X2xpc3QpOworCisJCQlob3N0X3dyaXRlX251bSsrOworCQkJaG9zdF93cml0ZV9udW0gPSBob3N0X3dyaXRlX251bSAlIG51bV9lbnRyaWVzOworCQl9CisKKwkJaWYgKGlzX2hlYWRlcikgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhvc3Rfd3JpdGVfcHRyID0KKwkJCQkJCQlob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfSBlbHNlIHsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHIgPSBob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfQorCisJCWRvb3JiZWxsIHw9IHJpbmdfaWQgJiBEQl9ERUZfUERVX1JJTkdfSURfTUFTSzsKKwkJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX1JFQVJNX1NISUZUOworCQlkb29yYmVsbCB8PSAwIDw8IERCX0RFRl9QRFVfRVZFTlRfU0hJRlQ7CisJCWRvb3JiZWxsIHw9ICh3cml0YWJsZXMgJiBEQl9ERUZfUERVX0NRUFJPQ19NQVNLKQorCQkJCQk8PCBEQl9ERUZfUERVX0NRUFJPQ19TSElGVDsKKworCQlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfUlhVTFAwX09GRlNFVCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod2lfZmx1c2hfZGVmYXVsdF9wZHVfYnVmZmVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQkJIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGNxX2luZGV4ID0gLTE7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisJQlVHX09OKHBhc3luY19oYW5kbGUtPmlzX2hlYWRlciAhPSAwKTsKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisKKwlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgcGFzeW5jX2hhbmRsZS0+Y3JpKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2h3aV9md2RfYXN5bmNfbXNnKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwgdW5zaWduZWQgc2hvcnQgY3JpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXZvaWQgKnBoZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCBoZHJfbGVuID0gMCwgYnVmX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IHN0YXR1cywgaW5kZXggPSAwLCBvZmZzZXQgPSAwOworCXZvaWQgKnBmaXJzdF9idWZmZXIgPSBOVUxMOworCXVuc2lnbmVkIGludCBudW1fYnVmID0gMDsKKworCXBsaXN0ID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXN5bmNfaGFuZGxlLCBwbGlzdCwgbGluaykgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJcGhkciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQloZHJfbGVuID0gcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl9sZW4gPSBwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCQkJaWYgKCFudW1fYnVmKSB7CisJCQkJcGZpcnN0X2J1ZmZlciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQkJbnVtX2J1ZisrOworCQkJfQorCQkJbWVtY3B5KHBmaXJzdF9idWZmZXIgKyBvZmZzZXQsCisJCQkgICAgICAgcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlciwgYnVmX2xlbik7CisJCQlvZmZzZXQgPSBidWZfbGVuOworCQl9CisJCWluZGV4Kys7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCSAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKKwkJCQkJICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKKwkJCQkJICAgYnVmX2xlbik7CisKKwlpZiAoc3RhdHVzID09IDApCisJCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBjcmkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfZ2F0aGVyX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlKQoreworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXVuc2lnbmVkIGludCBieXRlc19uZWVkZWQgPSAwLCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIHNob3J0IGNyaSA9IHBhc3luY19oYW5kbGUtPmNyaTsKKwlzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJbGlzdF9kZWwoJnBhc3luY19oYW5kbGUtPmxpbmspOworCWlmIChwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpIHsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CisJCQlCVUcoKTsKKwkJfQorCisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAxOworCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX2xlbiA9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCisJCXBwZHUgPSBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyOworCQlieXRlc19uZWVkZWQgPSAoKCgocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsCisJCQlkYXRhX2xlbl9oaSkgLyAzMl0gJiBQRFVCQVNFX0RBVEFMRU5ISV9NQVNLKSA8PCA4KSAmCisJCQkweEZGRkYwMDAwKSB8ICgoYmUxNl90b19jcHUoKHBwZHUtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIGRhdGFfbGVuX2xvKSAvIDMyXQorCQkJJiBQRFVCQVNFX0RBVEFMRU5MT19NQVNLKSA+PiAxNikpICYgMHgwMDAwRkZGRikpOworCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmJ5dGVzX25lZWRlZCA9CisJCQkgICAgYnl0ZXNfbmVlZGVkOworCisJCQlpZiAoYnl0ZXNfbmVlZGVkID09IDApCisJCQkJc3RhdHVzID0gaHdpX2Z3ZF9hc3luY19tc2coYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkJCSAgIHBhc3luY19jdHgsIGNyaSk7CisJCX0KKwl9IGVsc2UgeworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCSAgICAgIGxpc3QpOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCWJ5dGVzX3JlY2VpdmVkICs9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisKKwkJCWlmIChwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfcmVjZWl2ZWQgPj0KKwkJCSAgICBwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfbmVlZGVkKQorCQkJCXN0YXR1cyA9IGh3aV9md2RfYXN5bmNfbXNnKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJCQkgICBwYXN5bmNfY3R4LCBjcmkpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9wcm9jZXNzX2RlZmF1bHRfcGR1X3Jpbmcoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGlfdF9kcGR1X2NxZSAqcGRwZHVfY3FlKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3FfaW5kZXggPSAtMTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisJaHdpX2dhdGhlcl9hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLCBwYXN5bmNfaGFuZGxlKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVpc2NzaV9wcm9jZXNzX2NxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcTsKKwlzdHJ1Y3Qgc29sX2NxZSAqc29sOworCXN0cnVjdCBkbXNnX2NxZSAqZG1zZzsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CisJdW5zaWduZWQgaW50IHRvdF9udW1wID0gMDsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlzb2wgPSBxdWV1ZV90YWlsX25vZGUoY3EpOworCisJd2hpbGUgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQpIC8gMzJdICYKKwkgICAgICAgQ1FFX1ZBTElEX01BU0spIHsKKwkJYmVfZHdzX2xlX3RvX2NwdShzb2wsIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOworCisJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbKHUzMikgKHNvbC0+CisJCQkJIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCSBTT0xfQ0lEX01BU0spID4+IDZdOworCisJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKKwkJCQkgICAgICh1MzIpKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGNpZCkgLyAzMl0gJiBTT0xfQ0lEX01BU0spID4+IDYpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgeworCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgcGh3aV9jb250ZXh0LT5iZV9jcS5pZCwKKwkJCQkJbnVtX3Byb2Nlc3NlZCwgMCwgMCk7CisJCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQkJbnVtX3Byb2Nlc3NlZCA9IDA7CisJCX0KKworCQlzd2l0Y2ggKCh1MzIpIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJMzJdICYgQ1FFX0NPREVfTUFTSykgeworCQljYXNlIFNPTF9DTURfQ09NUExFVEU6CisJCQlod2lfY29tcGxldGVfY21kKGJlaXNjc2lfY29ubiwgcGhiYSwgc29sKTsKKwkJCWJyZWFrOworCQljYXNlIERSSVZFUk1TR19OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJSZWNlaXZlZCBEUklWRVJNU0dfTk9USUZZIFxuIik7CisJCQlkbXNnID0gKHN0cnVjdCBkbXNnX2NxZSAqKXNvbDsKKwkJCWh3aV9jb21wbGV0ZV9kcnZyX21zZ3MoYmVpc2NzaV9jb25uLCBwaGJhLCBzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgVU5TT0xfSERSX05PVElGWToKKwkJY2FzZSBVTlNPTF9EQVRBX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIFVOU09MX0hEUi9EQVRBX05PVElGWVxuIik7CisJCQlod2lfcHJvY2Vzc19kZWZhdWx0X3BkdV9yaW5nKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJICAgICAoc3RydWN0IGlfdF9kcGR1X2NxZSAqKXNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9JTkRFWF9OT1RJRlk6CisJCWNhc2UgQ01EX0lOVkFMSURBVEVEX05PVElGWToKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJJZ25vcmluZyBDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC9jeG4iCisJCQkJICJpbnZhbGlkYXRlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNPTF9DTURfS0lMTEVEX0RBVEFfRElHRVNUX0VSUjoKKwkJY2FzZSBDTURfS0lMTEVEX0lOVkFMSURfU1RBVFNOX1JDVkQ6CisJCWNhc2UgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0xVTl9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQ6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKKwkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgU09MX0NJRF9NQVNLKSk7CisJCQlicmVhazsKKwkJY2FzZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJEaWdlc3QgZXJyb3Igb24gZGVmIHBkdSByaW5nLCBkcm9wcGluZy4uXG4iKTsKKwkJCWh3aV9mbHVzaF9kZWZhdWx0X3BkdV9idWZmZXIocGhiYSwgYmVpc2NzaV9jb25uLAorCQkJCQkgICAgIChzdHJ1Y3QgaV90X2RwZHVfY3FlICopIHNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fS0lMTEVEX1BEVV9TSVpFX0VYQ0VFRFNfRFNMOgorCQljYXNlIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIOgorCQljYXNlIENYTl9LSUxMRURfQUhTX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9IRFJfRElHRVNUX0VSUjoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOS05PV05fSERSOgorCQljYXNlIENYTl9LSUxMRURfU1RBTEVfSVRUX1RUVF9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfSU5WQUxJRF9JVFRfVFRUX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9USU1FRF9PVVQ6CisJCWNhc2UgQ1hOX0tJTExFRF9GSU5fUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9VTlNPTF9QRFVfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9XUkJfSU5ERVhfRVJST1I6CisJCWNhc2UgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0dGluZyBDSUQgIgorCQkJCSAiMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAorCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQkJYnJlYWs7CisJCWNhc2UgQ1hOX0tJTExFRF9SU1RfU0VOVDoKKwkJY2FzZSBDWE5fS0lMTEVEX1JTVF9SQ1ZEOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IHJlY2VpdmVkL3NlbnQgIgorCQkJCSAib24gQ0lEIDB4JXguLi5cbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKKwkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgSW52YWxpZCBjb2RlPSAlZCAiCisJCQkJICJyZWNlaXZlZCBvbiBDSUQgMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlicmVhazsKKwkJfQorCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQsIHNvbCwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGNxKTsKKwkJc29sID0gcXVldWVfdGFpbF9ub2RlKGNxKTsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCX0KKworCWlmIChudW1fcHJvY2Vzc2VkID4gMCkgeworCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQlod2lfcmluZ19jcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2NxLmlkLCBudW1fcHJvY2Vzc2VkLAorCQkJICAgICAgIDEsIDApOworCX0KKwlyZXR1cm4gdG90X251bXA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmVpc2NzaV9oYmEsIHdvcmtfY3FzKTsKKworCWlmIChwaGJhLT50b2RvX21jY19jcSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJcGhiYS0+dG9kb19tY2NfY3EgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJNQ0MgSW50ZXJydXB0IE5vdCBleHBlY3RlZCBcbiIpOworCX0KKworCWlmIChwaGJhLT50b2RvX2NxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlwaGJhLT50b2RvX2NxID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCX0KK30KKworc3RhdGljIGludCBiZV9pb3BvbGwoc3RydWN0IGJsa19pb3BvbGwgKmlvcCwgaW50IGJ1ZGdldCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHJldDsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisKKwlwaGJhID0gY29udGFpbmVyX29mKGlvcCwgc3RydWN0IGJlaXNjc2lfaGJhLCBpb3BvbGwpOworCisJcmV0ID0gYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCWlmIChyZXQgPCBidWRnZXQpIHsKKwkJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisKKwkJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwkJYmxrX2lvcG9sbF9jb21wbGV0ZShpb3ApOworCQlod2lfcmluZ19lcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2VxLnEuaWQsIDAsCisJCQkJCQkJMCwgMSwgMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfd3JpdGVfc2dsKHN0cnVjdCBpc2NzaV93cmIgKnB3cmIsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgICAgdW5zaWduZWQgaW50IG51bV9zZywgc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwc2dsOworCXVuc2lnbmVkIHNob3J0IHNnX2xlbiwgaW5kZXg7CisJdW5zaWduZWQgaW50IHNnZV9sZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqbF9zZzsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2xvLCBwd3JiLAorCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfaGksIHB3cmIsCisJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCisJbF9zZyA9IHNnOworCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLCBzZ19uZXh0KHNnKSkgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfaGksIHB3cmIsCisJCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKKwkJCQkJCQlzZ19sZW4pOworCQkJc2dlX2xlbiA9IHNnX2xlbjsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJMSk7CisJCX0gZWxzZSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCTApOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfcjJ0X29mZnNldCwKKwkJCQkJCQlwd3JiLCBzZ2VfbGVuKTsKKwkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2FkZHJfbG8sIHB3cmIsCisJCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9hZGRyX2hpLCBwd3JiLAorCQkJCQkJCShhZGRyID4+IDMyKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sZW4sIHB3cmIsCisJCQkJCQkJc2dfbGVuKTsKKwkJfQorCX0KKwlwc2dsID0gKHN0cnVjdCBpc2NzaV9zZ2UgKilpb190YXNrLT5wc2dsX2hhbmRsZS0+cGZyYWc7CisJbWVtc2V0KHBzZ2wsIDAsIHNpemVvZigqcHNnbCkgKiBCRTJfU0dFKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4gLSAyKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCisJaWYgKG51bV9zZyA9PSAyKQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLCAxKTsKKwlzZyA9IGxfc2c7CisJcHNnbCsrOworCXBzZ2wrKzsKKwlvZmZzZXQgPSAwOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9zZzsgaW5kZXgrKywgc2dfbmV4dChzZyksIHBzZ2wrKykgeworCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCQkJCQkoYWRkciA+PiAzMikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCBzZ19sZW4pOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgb2Zmc2V0KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAwKTsKKwkJb2Zmc2V0ICs9IHNnX2xlbjsKKwl9CisJcHNnbC0tOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV93cml0ZV9idWZmZXIoc3RydWN0IGlzY3NpX3dyYiAqcHdyYiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGlzY3NpX3NnZSAqcHNnbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBpb190YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX25vbmlvX2JocykgLSAyOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9sbywgcHdyYiwKKwkJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2hpLCBwd3JiLAorCQkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKworCWlmICh0YXNrLT5kYXRhKSB7CisJCWlmICh0YXNrLT5kYXRhX2NvdW50KSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJCWFkZHIgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwaGJhLT5wY2lkZXYsCisJCQkJCQkgICAgdGFzay0+ZGF0YSwKKwkJCQkJCSAgICB0YXNrLT5kYXRhX2NvdW50LCAxKTsKKwkJfSBlbHNlIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCQkJYWRkciA9IDA7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGVuLCBwd3JiLAorCQkJCQkJdGFzay0+ZGF0YV9jb3VudCk7CisKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwgMSk7CisJfSBlbHNlIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CisJCWFkZHIgPSAwOworCX0KKworCXBzZ2wgPSAoc3RydWN0IGlzY3NpX3NnZSAqKWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5wZnJhZzsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCWlmICh0YXNrLT5kYXRhKSB7CisJCXBzZ2wrKzsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCByc3ZkMCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMCk7CisKKwkJcHNnbCsrOworCQlpZiAodGFzay0+ZGF0YSkgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCAweDEwNik7CisJfQorCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZmluZF9tZW1fcmVxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2NxX3BhZ2VzLCBudW1fZXFfcGFnZXMsIG51bV9hc3luY19wZHVfYnVmX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMsIHdyYl9zel9wZXJfY3huOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXMsIG51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXM7CisKKwludW1fY3FfcGFnZXMgPSBQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgKiBcCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CisJbnVtX2VxX3BhZ2VzID0gUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzICogXAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmVfZXFfZW50cnkpKTsKKwludW1fYXN5bmNfcGR1X2J1Zl9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeik7CisJbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSk7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeik7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3NnbF9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcikpOworCisJcGhiYS0+cGFyYW1zLmh3aV93c19zeiA9IHNpemVvZihzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIpOworCisJcGhiYS0+bWVtX3JlcVtJU0NTSV9NRU1fR0xPQkFMX0hFQURFUl0gPSAyICoKKwkJCQkJCSBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FERE5fQ09OVEVYVF0gPQorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkpOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0NRXSA9IG51bV9jcV9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fRVFdID0gbnVtX2VxX3BhZ2VzICogUEFHRV9TSVpFOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1dSQl0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikKKwkgICAgKiAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikKKwkgICAgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsKKwl3cmJfc3pfcGVyX2N4biA9ICBzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpICoKKwkJCQkgKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9XUkJIXSA9IHJvdW5kdXBfcG93X29mX3R3bygod3JiX3N6X3Blcl9jeG4pICoKKwkJCQlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCk7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fU0dMSF0gPSBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpICoKKwkJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmw7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1NHRV0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKgorCQlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKiBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybDsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19EQVRBX0JVRl0gPQorCQludW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfREFUQV9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEVdID0KKwkJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqCisJCXNpemVvZihzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSk7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFXSA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKgorCQlzaXplb2Yoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUpOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19QRFVfQ09OVEVYVF0gPQorCQlzaXplb2Yoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCkgKworCQkocGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IGh3aV9hc3luY19lbnRyeSkpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfYWxsb2NfbWVtKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlkbWFfYWRkcl90IGJ1c19hZGQ7CisJc3RydWN0IG1lbV9hcnJheSAqbWVtX2FyciwgKm1lbV9hcnJfb3JpZzsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYWxsb2Nfc2l6ZSwgY3Vycl9hbGxvY19zaXplOworCisJcGhiYS0+cGh3aV9jdHJsciA9IGttYWxsb2MocGhiYS0+cGFyYW1zLmh3aV93c19zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5waHdpX2N0cmxyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBoYmEtPmluaXRfbWVtID0ga2NhbGxvYyhTRV9NRU1fTUFYLCBzaXplb2YoKm1lbV9kZXNjciksCisJCQkJIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+aW5pdF9tZW0pIHsKKwkJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbV9hcnJfb3JpZyA9IGttYWxsb2Moc2l6ZW9mKCptZW1fYXJyX29yaWcpICogQkVJU0NTSV9NQVhfRlJBR1NfSU5JVCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbV9hcnJfb3JpZykgeworCQlrZnJlZShwaGJhLT5pbml0X21lbSk7CisJCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwlmb3IgKGkgPSAwOyBpIDwgU0VfTUVNX01BWDsgaSsrKSB7CisJCWogPSAwOworCQltZW1fYXJyID0gbWVtX2Fycl9vcmlnOworCQlhbGxvY19zaXplID0gcGhiYS0+bWVtX3JlcVtpXTsKKwkJbWVtc2V0KG1lbV9hcnIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqCisJCSAgICAgICBCRUlTQ1NJX01BWF9GUkFHU19JTklUKTsKKwkJY3Vycl9hbGxvY19zaXplID0gbWluKGJlX21heF9waHlzX3NpemUgKiAxMDI0LCBhbGxvY19zaXplKTsKKwkJZG8geworCQkJbWVtX2Fyci0+dmlydHVhbF9hZGRyZXNzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQkJCQkJcGhiYS0+cGNpZGV2LAorCQkJCQkJCWN1cnJfYWxsb2Nfc2l6ZSwKKwkJCQkJCQkmYnVzX2FkZCk7CisJCQlpZiAoIW1lbV9hcnItPnZpcnR1YWxfYWRkcmVzcykgeworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgPD0gQkVfTUlOX01FTV9TSVpFKQorCQkJCQlnb3RvIGZyZWVfbWVtOworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgLQorCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhjdXJyX2FsbG9jX3NpemUpKQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSByb3VuZGRvd25fcG93X29mX3R3bworCQkJCQkJCSAgICAgKGN1cnJfYWxsb2Nfc2l6ZSk7CisJCQkJZWxzZQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSBjdXJyX2FsbG9jX3NpemUgLyAyOworCQkJfSBlbHNlIHsKKwkJCQltZW1fYXJyLT5idXNfYWRkcmVzcy51LgorCQkJCSAgICBhNjQuYWRkcmVzcyA9IChfX3U2NCkgYnVzX2FkZDsKKwkJCQltZW1fYXJyLT5zaXplID0gY3Vycl9hbGxvY19zaXplOworCQkJCWFsbG9jX3NpemUgLT0gY3Vycl9hbGxvY19zaXplOworCQkJCWN1cnJfYWxsb2Nfc2l6ZSA9IG1pbihiZV9tYXhfcGh5c19zaXplICoKKwkJCQkJCSAgICAgIDEwMjQsIGFsbG9jX3NpemUpOworCQkJCWorKzsKKwkJCQltZW1fYXJyKys7CisJCQl9CisJCX0gd2hpbGUgKGFsbG9jX3NpemUpOworCQltZW1fZGVzY3ItPm51bV9lbGVtZW50cyA9IGo7CisJCW1lbV9kZXNjci0+c2l6ZV9pbl9ieXRlcyA9IHBoYmEtPm1lbV9yZXFbaV07CisJCW1lbV9kZXNjci0+bWVtX2FycmF5ID0ga21hbGxvYyhzaXplb2YoKm1lbV9hcnIpICogaiwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIW1lbV9kZXNjci0+bWVtX2FycmF5KQorCQkJZ290byBmcmVlX21lbTsKKworCQltZW1jcHkobWVtX2Rlc2NyLT5tZW1fYXJyYXksIG1lbV9hcnJfb3JpZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqIGopOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUobWVtX2Fycl9vcmlnKTsKKwlyZXR1cm4gMDsKK2ZyZWVfbWVtOgorCW1lbV9kZXNjci0+bnVtX2VsZW1lbnRzID0gajsKKwl3aGlsZSAoKGkpIHx8IChqKSkgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uc2l6ZSwKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIHZpcnR1YWxfYWRkcmVzcywKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIGJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MpOworCQl9CisJCWlmIChpKSB7CisJCQlpLS07CisJCQlrZnJlZShtZW1fZGVzY3ItPm1lbV9hcnJheSk7CisJCQltZW1fZGVzY3ItLTsKKwkJfQorCX0KKwlrZnJlZShtZW1fYXJyX29yaWcpOworCWtmcmVlKHBoYmEtPmluaXRfbWVtKTsKKwlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2dldF9tZW1vcnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWJlaXNjc2lfZmluZF9tZW1fcmVxKHBoYmEpOworCXJldHVybiBiZWlzY3NpX2FsbG9jX21lbShwaGJhKTsKK30KKworc3RhdGljIHZvaWQgaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgcGR1X2RhdGFfb3V0ICpwZGF0YV9vdXQ7CisJc3RydWN0IHBkdV9ub3Bfb3V0ICpwbm9wX291dDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBJU0NTSV9NRU1fR0xPQkFMX0hFQURFUjsKKwlwZGF0YV9vdXQgPQorCSAgICAoc3RydWN0IHBkdV9kYXRhX291dCAqKW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwltZW1zZXQocGRhdGFfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIG9wY29kZSwgcGRhdGFfb3V0LAorCQkgICAgICBJSU9DX1NDU0lfREFUQSk7CisKKwlwbm9wX291dCA9CisJICAgIChzdHJ1Y3QgcGR1X25vcF9vdXQgKikoKHVuc2lnbmVkIGNoYXIgKiltZW1fZGVzY3ItPm1lbV9hcnJheVswXS4KKwkJCQkgICB2aXJ0dWFsX2FkZHJlc3MgKyBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJbWVtc2V0KHBub3Bfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIHR0dCwgcG5vcF9vdXQsIDB4RkZGRkZGRkYpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIGZfYml0LCBwbm9wX291dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCwgaV9iaXQsIHBub3Bfb3V0LCAwKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9pbml0X3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyX3dyYmgsICptZW1fZGVzY3Jfd3JiOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmI7CisJdW5zaWduZWQgaW50IG51bV9jeG5fd3JiaDsKKwl1bnNpZ25lZCBpbnQgbnVtX2N4bl93cmIsIGosIGlkeCwgaW5kZXg7CisKKwltZW1fZGVzY3Jfd3JiaCA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl93cmJoICs9IEhXSV9NRU1fV1JCSDsKKworCW1lbV9kZXNjcl93cmIgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfd3JiICs9IEhXSV9NRU1fV1JCOworCisJaWR4ID0gMDsKKwlwd3JiX2hhbmRsZSA9IG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJbnVtX2N4bl93cmJoID0gKChtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJKChzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpKSAqCisJCQkgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImNpZD0lZCBwd3JiX2NvbnRleHQ9JXAgXG4iLCBpbmRleCwKKwkJCQkJCXB3cmJfY29udGV4dCk7CisJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZSA9CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUgKikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huLCBHRlBfS0VSTkVMKTsKKwkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSAqKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4sIEdGUF9LRVJORUwpOworCQlpZiAobnVtX2N4bl93cmJoKSB7CisJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKKwkJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal0gPSBwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbal0gPQorCQkJCQkJCQlwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSsrOworCQkJCXB3cmJfaGFuZGxlKys7CisJCQl9CisJCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOworCQkJbnVtX2N4bl93cmJoLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXB3cmJfaGFuZGxlID0KKwkJCSAgICBtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmJoID0KKwkJCSAgICAoKG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkgICAgICgoc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlKSkgKgorCQkJICAgICAgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdID0gcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkW2pdID0KKwkJCQkgICAgcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKKwkJCQlwd3JiX2hhbmRsZSsrOworCQkJfQorCQkJcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID0gMDsKKwkJCW51bV9jeG5fd3JiaC0tOworCQl9CisJfQorCWlkeCA9IDA7CisJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwludW1fY3huX3dyYiA9CisJICAgICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLyAoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCisJICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCWlmIChudW1fY3huX3dyYikgeworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdOworCQkJCXB3cmJfaGFuZGxlLT5wd3JiID0gcHdyYjsKKwkJCQlwd3JiKys7CisJCQl9CisJCQludW1fY3huX3dyYi0tOworCQl9IGVsc2UgeworCQkJaWR4Kys7CisJCQlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmIgPSAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCQkJKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKKwkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CisJCQkJcHdyYisrOworCQkJfQorCQkJbnVtX2N4bl93cmItLTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaHdpX2luaXRfYXN5bmNfcGR1X2N0eChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBoYmFfcGFyYW1ldGVycyAqcCA9ICZwaGJhLT5wYXJhbXM7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hlYWRlcl9oLCAqcGFzeW5jX2RhdGFfaDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfUERVX0NPTlRFWFQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2N0cmxyLT5waHdpX2N0eHQtPnBhc3luY19jdHggPSAoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqKQorCQkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4OworCW1lbXNldChwYXN5bmNfY3R4LCAwLCBzaXplb2YoKnBhc3luY19jdHgpKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5udW1fZW50cmllcyA9IHAtPmFzeW5jcGR1c19wZXJfY3RybDsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfaGRyX3N6OworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfZGF0YV9zejsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzID0gcC0+YXN5bmNwZHVzX3Blcl9jdHJsOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIudmFfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucGFfYmFzZS51LmE2NC5hZGRyZXNzID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnJpbmdfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRTsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUiCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdCk7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19EQVRBX0JVRiIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS52YV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfUklORzsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0RBVEFfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFOworCWlmICghbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKworCXBhc3luY19oZWFkZXJfaCA9CisJCShzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqKXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5oYW5kbGVfYmFzZTsKKwlwYXN5bmNfZGF0YV9oID0KKwkJKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICopcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5oYW5kbGVfYmFzZTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHAtPmFzeW5jcGR1c19wZXJfY3RybDsgaW5kZXgrKykgeworCQlwYXN5bmNfaGVhZGVyX2gtPmNyaSA9IC0xOworCQlwYXN5bmNfaGVhZGVyX2gtPmluZGV4ID0gKGNoYXIpaW5kZXg7CisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmspOworCQlwYXN5bmNfaGVhZGVyX2gtPnBidWZmZXIgPQorCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkocGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnZhX2Jhc2UpICsKKwkJCShwLT5kZWZwZHVfaGRyX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfaGVhZGVyX2gtPnBhLnUuYTY0LmFkZHJlc3MgPQorCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyArCisJCQkocC0+ZGVmcGR1X2hkcl9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmssCisJCQkJJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QpOworCQlwYXN5bmNfaGVhZGVyX2grKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzKys7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2luZGV4XS53YWl0X3F1ZXVlLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaW5kZXhdLgorCQkJICAgICAgIGhlYWRlcl9idXN5X2xpc3QpOworCQlwYXN5bmNfZGF0YV9oLT5jcmkgPSAtMTsKKwkJcGFzeW5jX2RhdGFfaC0+aW5kZXggPSAoY2hhcilpbmRleDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19kYXRhX2gtPmxpbmspOworCQlwYXN5bmNfZGF0YV9oLT5wYnVmZmVyID0KKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQorCQkJKHBhc3luY19jdHgtPmFzeW5jX2RhdGEudmFfYmFzZSkgKworCQkJKHAtPmRlZnBkdV9kYXRhX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfZGF0YV9oLT5wYS51LmE2NC5hZGRyZXNzID0KKwkJICAgIHBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LmE2NC5hZGRyZXNzICsKKwkJICAgIChwLT5kZWZwZHVfZGF0YV9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfZGF0YV9oLT5saW5rLAorCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJcGFzeW5jX2RhdGFfaCsrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcysrOworCisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtpbmRleF0uZGF0YV9idXN5X2xpc3QpOworCX0KKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyID0gLTE7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5lcF9yZWFkX3B0ciA9IC0xOworfQorCitzdGF0aWMgaW50CitiZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXModm9pZCAqdmlydHVhbF9hZGRyZXNzLAorCQkJIHU2NCBwaHlzaWNhbF9hZGRyZXNzLCB1MzIgbGVuZ3RoLAorCQkJIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJV0FSTl9PTighdmlydHVhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFwaHlzaWNhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFsZW5ndGggPiAwKTsKKwlXQVJOX09OKCFzZ2wpOworCisJc2dsLT52YSA9IHZpcnR1YWxfYWRkcmVzczsKKwlzZ2wtPmRtYSA9IHBoeXNpY2FsX2FkZHJlc3M7CisJc2dsLT5zaXplID0gbGVuZ3RoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwltZW1zZXQoc2dsLCAwLCBzaXplb2YoKnNnbCkpOworfQorCitzdGF0aWMgdm9pZAoraHdpX2J1aWxkX2JlX3NnbF9hcnIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBtZW1fYXJyYXkgKnBtZW0sIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJaWYgKHNnbC0+dmEpCisJCWJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc2dsKTsKKworCWJlX3NnbF9jcmVhdGVfY29udGlndW91cyhwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfYnVpbGRfYmVfc2dsX2J5X29mZnNldChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICBzdHJ1Y3QgbWVtX2FycmF5ICpwbWVtLCBzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCWlmIChzZ2wtPnZhKQorCQliZV9zZ2xfZGVzdHJveV9jb250aWd1b3VzKHNnbCk7CisKKwliZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXMoKHVuc2lnbmVkIGNoYXIgKilwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyBpbnQgYmVfZmlsbF9xdWV1ZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJdTE2IGxlbiwgdTE2IGVudHJ5X3NpemUsIHZvaWQgKnZhZGRyZXNzKQoreworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmcS0+ZG1hX21lbTsKKworCW1lbXNldChxLCAwLCBzaXplb2YoKnEpKTsKKwlxLT5sZW4gPSBsZW47CisJcS0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJbWVtLT5zaXplID0gbGVuICogZW50cnlfc2l6ZTsKKwltZW0tPnZhID0gdmFkZHJlc3M7CisJaWYgKCFtZW0tPnZhKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobWVtLT52YSwgMCwgbWVtLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2NyZWF0ZV9lcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZXFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwltZW0gPSAmZXEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fRVE7CisJZXFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKworCXJldCA9IGJlX2ZpbGxfcXVldWUoZXEsIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSwgZXFfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBFUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJcmV0ID0gYmVpc2NzaV9jbWRfZXFfY3JlYXRlKCZwaGJhLT5jdHJsLCBlcSwKKwkJCQkgICAgcGh3aV9jb250ZXh0LT5iZV9lcS5jdXJfZXFkKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUiCisJCQkgICAgICJGYWlsZWRmb3IgRVEgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiZXEgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfZXEucS5pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9jcmVhdGVfY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgICBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqY3FfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCW1lbSA9ICZjcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9DUTsKKwljcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC8gMiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpLCBjcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIElTQ1NJIENRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVpc2NzaV9jbWRfY3FfY3JlYXRlKCZwaGJhLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMCk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVpc2NzaV9jbWRfZXFfY3JlYXRlIEZhaWxlZCBmb3IgSVNDU0kgQ1EgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgY3EgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfY3EuaWQpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIklTQ1NJIENRIENSRUFURURcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJsciwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkZWZfcGR1X3Jpbmdfc3opCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgKmNxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZHFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWRxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2hkcnE7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwltZW0gPSAmZHEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgSERSXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSgmcGhiYS0+Y3RybCwgY3EsIGRxLAorCQkJCQkgICAgICBkZWZfcGR1X3Jpbmdfc3osCisJCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6KTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlIEZhaWxlZCBERUZIRFJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9oZHIuaWQgPSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkOworCVNFX0RFQlVHKERCR19MVkxfOCwgImlzY3NpIGRlZiBwZHUgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQsCisJCQlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHIsCisJCQl1bnNpZ25lZCBpbnQgZGVmX3BkdV9yaW5nX3N6KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZGF0YXEsICpjcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmRxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwlkYXRhcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcTsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCW1lbSA9ICZkYXRhcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRhdGFxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgREFUQVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCXJldCA9IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoJnBoYmEtPmN0cmwsIGNxLCBkYXRhcSwKKwkJCQkJICAgICAgZGVmX3BkdV9yaW5nX3N6LAorCQkJCQkgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3opOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUgRmFpbGVkIgorCQkJICAgICAiIGZvciBERUYgUERVIERBVEFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkID0gcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXEuaWQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgZGVmIGRhdGEgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcS5pZCk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCAwKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJERUZBVUxUIFBEVSBEQVRBIFJJTkcgQ1JFQVRFRCBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX3Bvc3RfcGFnZXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBtZW1fYXJyYXkgKnBtX2FycjsKKwl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQsIGk7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCWludCBzdGF0dXM7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9TR0U7CisJcG1fYXJyID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXk7CisKKwlwYWdlX29mZnNldCA9IChzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKiBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKgorCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCkgLyBQQUdFX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IG1lbV9kZXNjci0+bnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJaHdpX2J1aWxkX2JlX3NnbF9hcnIocGhiYSwgcG1fYXJyLCAmc2dsKTsKKwkJc3RhdHVzID0gYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKCZwaGJhLT5jdHJsLCAmc2dsLAorCQkJCQkJcGFnZV9vZmZzZXQsCisJCQkJCQkocG1fYXJyLT5zaXplIC8gUEFHRV9TSVpFKSk7CisJCXBhZ2Vfb2Zmc2V0ICs9IHBtX2Fyci0+c2l6ZSAvIFBBR0VfU0laRTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgInBvc3Qgc2dsIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwbV9hcnIrKzsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiUE9TVEVEIFBBR0VTIFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0LAorCQkJIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscikKK3sKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleCwgb2Zmc2V0LCBzaXplLCBudW1fd3JiX3JpbmdzOworCXU2NCBwYV9hZGRyX2xvOworCXVuc2lnbmVkIGludCBpZHgsIG51bSwgaTsKKwlzdHJ1Y3QgbWVtX2FycmF5ICpwd3JiX2FycjsKKwl2b2lkICp3cmJfdmFkZHI7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBzdGF0dXM7CisKKwlpZHggPSAwOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX1dSQjsKKwlwd3JiX2FyciA9IGttYWxsb2Moc2l6ZW9mKCpwd3JiX2FycikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHdyYl9hcnIpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gY3JlYXRlIHdyYiByaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3cmJfdmFkZHIgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlwYV9hZGRyX2xvID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCW51bV93cmJfcmluZ3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBudW0rKykgeworCQlpZiAobnVtX3dyYl9yaW5ncykgeworCQkJcHdyYl9hcnJbbnVtXS52aXJ0dWFsX2FkZHJlc3MgPSB3cmJfdmFkZHI7CisJCQlwd3JiX2FycltudW1dLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYik7CisJCQl3cmJfdmFkZHIgKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJcGFfYWRkcl9sbyArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXdyYl92YWRkciA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJcGFfYWRkcl9sbyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCQkJbnVtX3dyYl9yaW5ncyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uc2l6ZSAvCisJCQkJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKwkJCXB3cmJfYXJyW251bV0udmlydHVhbF9hZGRyZXNzID0gd3JiX3ZhZGRyOworCQkJcHdyYl9hcnJbbnVtXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzXAorCQkJCQkJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpOworCQkJd3JiX3ZhZGRyICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCXBhX2FkZHJfbG8gICArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJd3JiX21lbV9pbmRleCA9IDA7CisJCW9mZnNldCA9IDA7CisJCXNpemUgPSAwOworCisJCWh3aV9idWlsZF9iZV9zZ2xfYnlfb2Zmc2V0KHBoYmEsICZwd3JiX2FycltpXSwgJnNnbCk7CisJCXN0YXR1cyA9IGJlX2NtZF93cmJxX2NyZWF0ZSgmcGhiYS0+Y3RybCwgJnNnbCwKKwkJCQkJICAgICZwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0pOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAid3JicSBjcmVhdGUgZmFpbGVkLiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpXS5jaWQgPSBwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0uaWQ7CisJfQorCWtmcmVlKHB3cmJfYXJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV93cmJfaGFuZGxlcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDI7IGluZGV4ICs9IDIpIHsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlKTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlpbnQgaTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgeworCQlxID0gJnBod2lfY29udGV4dC0+YmVfd3JicVtpXTsKKwkJaWYgKHEtPmNyZWF0ZWQpCisJCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfV1JCUSk7CisJfQorCisJZnJlZV93cmJfaGFuZGxlcyhwaGJhKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0RQRFVRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9EUERVUSk7CisKKwliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0NRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfRVEpOworfQorCitzdGF0aWMgaW50IGh3aV9pbml0X3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJdW5zaWduZWQgaW50IGRlZl9wZHVfcmluZ19zejsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJaW50IHN0YXR1czsKKworCWRlZl9wZHVfcmluZ19zeiA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcik7CisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5tYXhfZXFkID0gMDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLm1pbl9lcWQgPSAwOworCXBod2lfY29udGV4dC0+YmVfZXEuY3VyX2VxZCA9IDY0OworCXBod2lfY29udGV4dC0+YmVfZXEuZW5hYmxlX2FpYyA9IGZhbHNlOworCWJlX2NtZF9md19pbml0aWFsaXplKCZwaGJhLT5jdHJsKTsKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9lcShwaGJhLCBwaHdpX2NvbnRleHQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiRVEgbm90IGNyZWF0ZWQgXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVuc3VwcG9ydGVkIGZ3IHZlcnNpb24gXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2dldF9md19jb25maWcoY3RybCwgcGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfY3EocGhiYSwgcGh3aV9jb250ZXh0KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkNRIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHBoYmEsIHBod2lfY29udGV4dCwgcGh3aV9jdHJsciwKKwkJCQkJZGVmX3BkdV9yaW5nX3N6KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkRlZmF1bHQgSGVhZGVyIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShwaGJhLCBwaHdpX2NvbnRleHQsCisJCQkJCSBwaHdpX2N0cmxyLCBkZWZfcGR1X3Jpbmdfc3opOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRGVmYXVsdCBEYXRhIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX3Bvc3RfcGFnZXMocGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJQb3N0IFNHTCBQYWdlcyBGYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhwaGJhLAlwaHdpX2NvbnRleHQsIHBod2lfY3RybHIpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiV1JCIFJpbmdzIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJod2lfaW5pdF9wb3J0IHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJvcjoKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiaHdpX2luaXRfcG9ydCBmYWlsZWQiKTsKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgaW50IGh3aV9pbml0X2NvbnRyb2xsZXIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCWlmICgxID09IHBoYmEtPmluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5udW1fZWxlbWVudHMpIHsKKwkJcGh3aV9jdHJsci0+cGh3aV9jdHh0ID0gKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKilwaGJhLT4KKwkJICAgIGluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGh3aV9jdHJsci0+cGh3aV9jdHh0PSVwIFxuIiwKKwkJCSBwaHdpX2N0cmxyLT5waHdpX2N0eHQpOworCX0gZWxzZSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJIV0lfTUVNX0FERE5fQ09OVEVYVCBpcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQuIgorCQkJICAgICAiRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHBoYmEpOworCWJlaXNjc2lfaW5pdF93cmJfaGFuZGxlKHBoYmEpOworCWh3aV9pbml0X2FzeW5jX3BkdV9jdHgocGhiYSk7CisJaWYgKGh3aV9pbml0X3BvcnQocGhiYSkgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiaHdpX2luaXRfY29udHJvbGxlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9tZW0oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBpLCBqOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJaSA9IDA7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFX01FTV9NQVg7IGkrKykgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5zaXplLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0udmlydHVhbF9hZGRyZXNzLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uYnVzX2FkZHJlc3MuCisJCQkJdS5hNjQuYWRkcmVzcyk7CisJCX0KKwkJa2ZyZWUobWVtX2Rlc2NyLT5tZW1fYXJyYXkpOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUocGhiYS0+aW5pdF9tZW0pOworCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXJldCA9IGJlaXNjc2lfZ2V0X21lbW9yeShwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUgLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2FsbG9jX21lbW9yeSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGh3aV9pbml0X2NvbnRyb2xsZXIocGhiYSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2luaXQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiUmV0dXJuIHN1Y2Nlc3MgZnJvbSBiZWlzY3NpX2luaXRfY29udHJvbGxlciIpOworCXJldHVybiAwOworCitmcmVlX2luaXQ6CisJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3Jfc2dsaCwgKm1lbV9kZXNjcl9zZzsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3NnZSAqcGZyYWc7CisJdW5zaWduZWQgaW50IGFycl9pbmRleCwgaSwgaWR4OworCisJcGhiYS0+aW9fc2dsX2huZGxfYXZibCA9IDA7CisJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCA9IDA7CisJbWVtX2Rlc2NyX3NnbGggPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfc2dsaCArPSBIV0lfTUVNX1NHTEg7CisJaWYgKDEgPT0gbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgeworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUgKikgKgorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwsCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhiYS0+aW9fc2dsX2huZGxfYmFzZSkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKKwkJCQkJCSAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLQorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwpLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpIHsKKwkJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSFdJX01FTV9TR0xIIGlzIG1vcmUgdGhhbiBvbmUgZWxlbWVudC4iCisJCQkgICAgICJGYWlsaW5nIHRvIGxvYWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhcnJfaW5kZXggPSAwOworCWlkeCA9IDA7CisJd2hpbGUgKGlkeCA8IG1lbV9kZXNjcl9zZ2xoLT5udW1fZWxlbWVudHMpIHsKKwkJcHNnbF9oYW5kbGUgPSBtZW1fZGVzY3Jfc2dsaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7IGkgPCAobWVtX2Rlc2NyX3NnbGgtPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkgICAgICBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpKTsgaSsrKSB7CisJCQlpZiAoYXJyX2luZGV4IDwgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCkgeworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwrKzsKKwkJCQlhcnJfaW5kZXgrKzsKKwkJCX0gZWxzZSB7CisJCQkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsXSA9CisJCQkJCQkJCXBzZ2xfaGFuZGxlOworCQkJCWFycl9pbmRleCsrOworCQkJCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwkJCX0KKwkJCXBzZ2xfaGFuZGxlKys7CisJCX0KKwkJaWR4Kys7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJICJwaGJhLT5pb19zZ2xfaG5kbF9hdmJsPSVkIgorCQkgInBoYmEtPmVoX3NnbF9obmRsX2F2Ymw9JWQgXG4iLAorCQkgcGhiYS0+aW9fc2dsX2huZGxfYXZibCwKKwkJIHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpOworCW1lbV9kZXNjcl9zZyA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl9zZyArPSBIV0lfTUVNX1NHRTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJcbiBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cz0lZCBcbiIsCisJCSBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cyk7CisJYXJyX2luZGV4ID0gMDsKKwlpZHggPSAwOworCXdoaWxlIChpZHggPCBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cykgeworCQlwZnJhZyA9IG1lbV9kZXNjcl9zZy0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IChtZW1fZGVzY3Jfc2ctPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJICAgICAoc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZ2UpICogcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvKTsKKwkJICAgICBpKyspIHsKKwkJCWlmIChhcnJfaW5kZXggPCBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsKQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+aW9fc2dsX2huZGxfYmFzZVthcnJfaW5kZXhdOworCQkJZWxzZQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQkJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybF07CisJCQlwc2dsX2hhbmRsZS0+cGZyYWcgPSBwZnJhZzsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwZnJhZywgMCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcGZyYWcsIDApOworCQkJcGZyYWcgKz0gcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvOworCQkJcHNnbF9oYW5kbGUtPnNnbF9pbmRleCA9CisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIGFycl9pbmRleCsrOworCQl9CisJCWlkeCsrOworCX0KKwlwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYmFfc2V0dXBfY2lkX3RibHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWludCBpLCBuZXdfY2lkOworCisJcGhiYS0+Y2lkX2FycmF5ID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5jaWRfYXJyYXkpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gIgorCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBoYmEtPmVwX2FycmF5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKKwkJCQkgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPmVwX2FycmF5KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICIKKwkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJscyBcbiIpOworCQlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbmV3X2NpZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQ7CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJcGhiYS0+Y2lkX2FycmF5W2ldID0gbmV3X2NpZDsKKwkJbmV3X2NpZCArPSAyOworCX0KKwlwaGJhLT5hdmxibF9jaWRzID0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGh3aV9lbmFibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXU4IF9faW9tZW0gKmFkZHI7CisJdTMyIHJlZzsKKwl1MzIgZW5hYmxlZDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwlhZGRyID0gKHU4IF9faW9tZW0gKikgKCh1OCBfX2lvbWVtICopIGN0cmwtPnBjaWNmZyArCisJCQlQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUKTsKKwlyZWcgPSBpb3JlYWQzMihhZGRyKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IFxuIiwgcmVnKTsKKworCWVuYWJsZWQgPSByZWcgJiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCWlmICghZW5hYmxlZCkgeworCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eCBhZGRyPSVwIFxuIiwgcmVnLCBhZGRyKTsKKwkJaW93cml0ZTMyKHJlZywgYWRkcik7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZCBcbiIsIGVxLT5pZCk7CisKKwkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCAwLCAxLCAxKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJJbiBod2lfZW5hYmxlX2ludHIsIE5vdCBFbmFibGVkIFxuIik7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9kaXNhYmxlX2ludHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKworCXU4IF9faW9tZW0gKmFkZHIgPSBjdHJsLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOworCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKKworCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwlpZiAoZW5hYmxlZCkgeworCQlyZWcgJj0gfk1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJCWlvd3JpdGUzMihyZWcsIGFkZHIpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkluIGh3aV9kaXNhYmxlX2ludHIsIEFscmVhZHkgRGlzYWJsZWQgXG4iKTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9jb250cm9sbGVyIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlIFxuIik7CisJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKKwl9CisKKwlpZiAoaGJhX3NldHVwX2NpZF90YmxzKHBoYmEpKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgaW4gaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CisJCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOworCQlnb3RvIGRvX2NsZWFudXBfY3RybHI7CisJfQorCisJcmV0dXJuIHJldDsKKworZG9fY2xlYW51cF9jdHJscjoKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBod2lfcHVyZ2VfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKworCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KKwkJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW5fcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgY2hhciBtZ210X3N0YXR1czsKKworCW1nbXRfc3RhdHVzID0gbWdtdF9lcGZ3X2NsZWFudXAocGhiYSwgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMCk7CisJaWYgKG1nbXRfc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIm1nbXRfZXBmd19jbGVhbnVwIEZBSUxFRCBcbiIpOworCWh3aV9jbGVhbnVwKHBoYmEpOworCWh3aV9wdXJnZV9lcShwaGJhKTsKKwlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCWtmcmVlKHBoYmEtPmVwX2FycmF5KTsKK30KKwordm9pZAorYmVpc2NzaV9vZmZsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICAgc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJLyoKKwkgKiBXZSBjYW4gYWx3YXlzIHVzZSAwIGhlcmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBieSBsaWJpc2NzaSBmb3IKKwkgKiBsb2dpbi9zdGFydHVwIHJlbGF0ZWQgdGFza3MuCisJICovCisJcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwgMCk7CisJcHdyYiA9IChzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqKXB3cmJfaGFuZGxlLT5wd3JiOworCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgsIHB3cmIsIHBhcmFtcy0+ZHdbb2Zmc2V0b2YKKwkJICAgICAgKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgpIC8gMzJdKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGgsIHB3cmIsCisJCSAgICAgIHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aCkgLyAzMl0pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJICAgICAgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwd3JiLAorCQkgICAgICBwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGZpcnN0X2J1cnN0X2xlbmd0aCkgLyAzMl0pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBlcmwsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGVybCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRVJMKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBkZGUsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGRkZSkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRERFKSA+PiAyKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGhkZSwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaGRlKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19IREUpID4+IDMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgaXIydCwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaXIydCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfSVIyVCkgPj4gNCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBpbWQsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgICBpbWQpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0lNRCkgPj4gNSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBzdGF0X3NuLAorCQkgICAgICBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBleHBfc3RhdHNuKSAvIDMyXSArIDEpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHR5cGUsIHB3cmIsCisJCSAgICAgIDB4Nyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCB3cmJfaWR4LAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHB0cjJuZXh0d3JiLAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJc2Vzc2lvbl9zdGF0ZSwgcHdyYiwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBjb21wbHRvbmFjaywKKwkJICAgICAgcHdyYiwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBub3RwcmVkYmxxLAorCQkgICAgICBwd3JiLCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIG1vZGUsIHB3cmIsCisJCSAgICAgIDApOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IElTQ1NJX01FTV9HTE9CQUxfSEVBREVSOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJcGFkX2J1ZmZlcl9hZGRyX2hpLCBwd3JiLAorCQkgICAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCQlwYWRfYnVmZmVyX2FkZHJfbG8sIHB3cmIsCisJCSAgICAgIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfbG8pOworCisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIpKTsKKworCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOworCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwKKwkJCQkJREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisKKwlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcGFyc2VfcGR1KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBpdHRfdCBpdHQsCisJCQkgICAgICBpbnQgKmluZGV4LCBpbnQgKmFnZSkKK3sKKwkqaW5kZXggPSBiZTMyX3RvX2NwdShpdHQpID4+IDE2OworCWlmIChhZ2UpCisJCSphZ2UgPSBjb25uLT5zZXNzaW9uLT5hZ2U7Cit9CisKKy8qKgorICogYmVpc2NzaV9hbGxvY19wZHUgLSBhbGxvY2F0ZXMgcGR1IGFuZCByZWxhdGVkIHJlc291cmNlcworICogQHRhc2s6IGxpYmlzY3NpIHRhc2sKKyAqIEBvcGNvZGU6IG9wY29kZSBvZiBwZHUgZm9yIHRhc2sKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBzZXNzaW9uIGxvY2sgaGVsZC4gSXQgd2lsbCBhbGxvY2F0ZQorICogdGhlIHdyYiBhbmQgc2dsIGlmIG5lZWRlZCBmb3IgdGhlIGNvbW1hbmQuIEFuZCBpdCB3aWxsIHByZXAKKyAqIHRoZSBwZHUncyBpdHQuIGJlaXNjc2lfcGFyc2VfcGR1IHdpbGwgbGF0ZXIgdHJhbnNsYXRlCisgKiB0aGUgcGR1IGl0dCB0byB0aGUgbGliaXNjc2kgdGFzayBpdHQuCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9hbGxvY19wZHUoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHVpbnQ4X3Qgb3Bjb2RlKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCWl0dF90IGl0dDsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlkbWFfYWRkcl90IHBhZGRyOworCisJaW9fdGFzay0+Y21kX2JocyA9IHBjaV9wb29sX2FsbG9jKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsCisJCQkJCSAgR0ZQX0tFUk5FTCwgJnBhZGRyKTsKKworCWlmICghaW9fdGFzay0+Y21kX2JocykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLAorCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkJCQkJdGFzay0+aXR0KTsKKwlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CisJaW9fdGFzay0+Y29ubiA9IGJlaXNjc2lfY29ubjsKKworCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkcjsKKwl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfYmhzKTsKKworCWlmICh0YXNrLT5zYykgeworCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBhbGxvY19pb19zZ2xfaGFuZGxlKHBoYmEpOworCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJZ290byBmcmVlX2huZGxzOworCisJfSBlbHNlIHsKKwkJaW9fdGFzay0+c2NzaV9jbW5kID0gTlVMTDsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgeworCQkJaWYgKCFiZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzKSB7CisJCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IChzdHJ1Y3Qgc2dsX2hhbmRsZSAqKQorCQkJCQkJYWxsb2NfbWdtdF9zZ2xfaGFuZGxlKHBoYmEpOworCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJCQlnb3RvIGZyZWVfaG5kbHM7CisKKwkJCQliZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzID0gMTsKKwkJCQliZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlID0KKwkJCQkJCQlpb190YXNrLT5wc2dsX2hhbmRsZTsKKwkJCX0gZWxzZSB7CisJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPQorCQkJCQkJYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IGFsbG9jX21nbXRfc2dsX2hhbmRsZShwaGJhKTsKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCisJCQkJZ290byBmcmVlX2huZGxzOworCQl9CisJfQorCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpdGFzay0+aXR0IDw8IDE2KSB8CisJCQkodW5zaWduZWQgaW50KShpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KSk7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCA9IGl0dDsKKwlyZXR1cm4gMDsKKworZnJlZV9obmRsczoKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MpOworCVNFX0RFQlVHKERCR19MVkxfMSwgIkFsbG9jIG9mIFNHTF9JQ0QgRmFpbGVkIFxuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW51cF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKSB7CisJCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKKwkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCX0KKworCWlmIChpb190YXNrLT5jbWRfYmhzKSB7CisJCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzKTsKKwl9CisKKwlpZiAodGFzay0+c2MpIHsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJCWZyZWVfaW9fc2dsX2hhbmRsZShwaGJhLCBpb190YXNrLT5wc2dsX2hhbmRsZSk7CisJCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikKKwkJCXJldHVybjsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgaW9fdGFzay0+cHNnbF9oYW5kbGUpOworCQkJc3Bpbl91bmxvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICB1bnNpZ25lZCBpbnQgbnVtX3NnLCB1bnNpZ25lZCBpbnQgeGZlcmxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHdyaXRlZGlyKQoreworCisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisKKwlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmV4cF9zdGF0c24gPSAwOworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpOworCisJaWYgKHdyaXRlZGlyKSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIiBXUklURSBDb21tYW5kIFx0Iik7CisJCW1lbXNldCgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDAsIDQ4KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGl0dCwKKwkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwKKwkJCSAgICAgICh1bnNpZ25lZCBpbnQpaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBvcGNvZGUsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsCisJCQkgICAgICBJU0NTSV9PUENPREVfU0NTSV9EQVRBX09VVCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBmaW5hbF9iaXQsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCX0gZWxzZSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIlJFQUQgQ29tbWFuZCBcdCIpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCX0KKwltZW1jcHkoJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LgorCSAgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGx1bikgLyAzMl0sCisJICAgICAgIGlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5sdW4sIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBsdW4sIHB3cmIsCisJCSAgICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydClpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuCisJCQkJICBsdW5bMF0pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsIHhmZXJsZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7CisKKwlod2lfd3JpdGVfc2dsKHB3cmIsIHNnLCBudW1fc2csIGlvX3Rhc2spOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCisJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7CisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOworCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOworCisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbXRhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqYWJvcnRlZF9pb190YXNrLCAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisJc3RydWN0IGlzY3NpX3Rhc2sgKmFib3J0ZWRfdGFzazsKKworCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dsX2ljZF9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpOworCisJc3dpdGNoICh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSB7CisJY2FzZSBJU0NTSV9PUF9MT0dJTjoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsIDEpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX05PT1BfT1VUOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfVEVYVDoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9TQ1NJX1RNRlVOQzoKKwkJYWJvcnRlZF90YXNrID0gaXNjc2lfaXR0X3RvX3Rhc2soY29ubiwKKwkJCQkJKChzdHJ1Y3QgaXNjc2lfdG0gKil0YXNrLT5oZHIpLT5ydHQpOworCQkgaWYgKCFhYm9ydGVkX3Rhc2spCisJCQlyZXR1cm4gMDsKKwkJYWJvcnRlZF9pb190YXNrID0gYWJvcnRlZF90YXNrLT5kZF9kYXRhOworCQlpZiAoIWFib3J0ZWRfaW9fdGFzay0+c2NzaV9jbW5kKQorCQkJcmV0dXJuIDA7CisKKwkJbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKKwkJCQkgICAgIGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCwKKwkJCQkgICAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfVE1GX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9MT0dPVVQ6CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkJSFdIX1RZUEVfTE9HT1VUKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJvcGNvZGUgPSVkIE5vdCBzdXBwb3J0ZWQgXG4iLAorCQkJIHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsCisJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmRhdGFfY291bnQpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcHRyMm5leHR3cmIsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKKwliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfdGFza194bWl0KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgbnVtX3NnOworCXVuc2lnbmVkIGludCAgd3JpdGVkaXIgPSAwLCB4ZmVybGVuID0gMDsKKworCVNFX0RFQlVHKERCR19MVkxfNCwgIlxuIGNpZD0lZCBJbiBiZWlzY3NpX3Rhc2tfeG1pdCB0YXNrPSVwIGNvbm49JXAgXHQiCisJCSAiYmVpc2NzaV9jb25uPSVwIFxuIiwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkgdGFzaywgY29ubiwgYmVpc2NzaV9jb25uKTsKKwlpZiAoIXNjKQorCQlyZXR1cm4gYmVpc2NzaV9tdGFzayh0YXNrKTsKKworCWlvX3Rhc2stPnNjc2lfY21uZCA9IHNjOworCW51bV9zZyA9IHNjc2lfZG1hX21hcChzYyk7CisJaWYgKG51bV9zZyA8IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIHNjc2lfZG1hX21hcCBGYWlsZWRcbiIpCisJCXJldHVybiBudW1fc2c7CisJfQorCVNFX0RFQlVHKERCR19MVkxfNCwgInhmZXJsZW49MHglMDh4IHNjbWQ9JXAgbnVtX3NnPSVkIHNlcm51bT0lbHVcbiIsCisJCSAgKHNjc2lfYnVmZmxlbihzYykpLCBzYywgbnVtX3NnLCBzYy0+c2VyaWFsX251bWJlcik7CisJeGZlcmxlbiA9IHNjc2lfYnVmZmxlbihzYyk7CisJc2cgPSBzY3NpX3NnbGlzdChzYyk7CisJaWYgKHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCXdyaXRlZGlyID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF80LCAidGFzay0+aW1tX2NvdW50PTB4JTA4eCBcbiIsCisJCQkgdGFzay0+aW1tX2NvdW50KTsKKwl9IGVsc2UKKwkJd3JpdGVkaXIgPSAwOworCXJldHVybiBiZWlzY3NpX2lvdGFzayh0YXNrLCBzZywgbnVtX3NnLCB4ZmVybGVuLCB3cml0ZWRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKKworCXBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJaWYgKCFwaGJhKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9yZW1vdmUgY2FsbGVkIHdpdGggbm8gcGhiYSBcbiIpOworCQlyZXR1cm47CisJfQorCisJaHdpX2Rpc2FibGVfaW50cihwaGJhKTsKKwlpZiAocGhiYS0+cGNpZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworCisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5kbWEpOworCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKKwlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOworCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJlaXNjc2lfZGV2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfZW5hYmxlX3BjaShwY2lkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgdG8gZW5hYmxlIHBjaSBkZXZpY2UgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaGJhID0gYmVpc2NzaV9oYmFfYWxsb2MocGNpZGV2KTsKKwlpZiAoIXBoYmEpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkiIEZhaWxlZCBpbiBiZWlzY3NpX2hiYV9hbGxvYyBcbiIpOworCQlnb3RvIGRpc2FibGVfcGNpOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOworCXJldCA9IGJlX2N0cmxfaW5pdChwaGJhLCBwY2lkZXYpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCQkiRmFpbGVkIGluIGJlX2N0cmxfaW5pdFxuIik7CisJCWdvdG8gaGJhX2ZyZWU7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlzcl9sb2NrKTsKKwliZWlzY3NpX2dldF9wYXJhbXMocGhiYSk7CisJcmV0ID0gYmVpc2NzaV9pbml0X3BvcnQocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2luaXRfcG9ydFxuIik7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKworCXNucHJpbnRmKHBoYmEtPndxX25hbWUsIHNpemVvZihwaGJhLT53cV9uYW1lKSwgImJlaXNjc2lfcV9pcnEldSIsCisJCSBwaGJhLT5zaG9zdC0+aG9zdF9ubyk7CisJcGhiYS0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShwaGJhLT53cV9uYW1lKTsKKwlpZiAoIXBoYmEtPndxKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrIHF1ZXVlXG4iKTsKKwkJZ290byBmcmVlX3R3cTsKKwl9CisKKwlJTklUX1dPUksoJnBoYmEtPndvcmtfY3FzLCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2Nxcyk7CisKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKSB7CisJCWJsa19pb3BvbGxfaW5pdCgmcGhiYS0+aW9wb2xsLCBiZV9pb3BvbGxfYnVkZ2V0LCBiZV9pb3BvbGwpOworCQlibGtfaW9wb2xsX2VuYWJsZSgmcGhiYS0+aW9wb2xsKTsKKwl9CisKKwlyZXQgPSBiZWlzY3NpX2luaXRfaXJxcyhwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIHRvIGJlaXNjc2lfaW5pdF9pcnFzXG4iKTsKKwkJZ290byBmcmVlX2Jsa2VuYmxkOworCX0KKwlyZXQgPSBod2lfZW5hYmxlX2ludHIocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCB0byBod2lfZW5hYmxlX2ludHJcbiIpOworCQlnb3RvIGZyZWVfY3RybHI7CisJfQorCisJU0VfREVCVUcoREJHX0xWTF84LCAiXG5cblxuIFNVQ0NFU1MgLSBEUklWRVIgTE9BREVEIFxuXG5cbiIpOworCXJldHVybiAwOworCitmcmVlX2N0cmxyOgorCWlmIChwaGJhLT5wY2lkZXYtPmlycSkKKwkJZnJlZV9pcnEocGhiYS0+cGNpZGV2LT5pcnEsIHBoYmEpOworZnJlZV9ibGtlbmJsZDoKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworZnJlZV90d3E6CisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CitmcmVlX3BvcnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLmRtYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CitoYmFfZnJlZToKKwlpc2NzaV9ob3N0X3JlbW92ZShwaGJhLT5zaG9zdCk7CisJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKKwlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOworZGlzYWJsZV9wY2k6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9IERSVl9OQU1FLAorCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfAorCQlDQVBfTVVMVElfUjJUIHwgQ0FQX0RBVEFER1NUIHwgQ0FQX0RBVEFfUEFUSF9PRkZMT0FELAorCS5wYXJhbV9tYXNrID0gSVNDU0lfTUFYX1JFQ1ZfRExFTkdUSCB8CisJCUlTQ1NJX01BWF9YTUlUX0RMRU5HVEggfAorCQlJU0NTSV9IRFJER1NUX0VOIHwKKwkJSVNDU0lfREFUQURHU1RfRU4gfAorCQlJU0NTSV9JTklUSUFMX1IyVF9FTiB8CisJCUlTQ1NJX01BWF9SMlQgfAorCQlJU0NTSV9JTU1fREFUQV9FTiB8CisJCUlTQ1NJX0ZJUlNUX0JVUlNUIHwKKwkJSVNDU0lfTUFYX0JVUlNUIHwKKwkJSVNDU0lfUERVX0lOT1JERVJfRU4gfAorCQlJU0NTSV9EQVRBU0VRX0lOT1JERVJfRU4gfAorCQlJU0NTSV9FUkwgfAorCQlJU0NTSV9DT05OX1BPUlQgfAorCQlJU0NTSV9DT05OX0FERFJFU1MgfAorCQlJU0NTSV9FWFBfU1RBVFNOIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9QT1JUIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTIHwKKwkJSVNDU0lfVEFSR0VUX05BTUUgfCBJU0NTSV9UUEdUIHwKKwkJSVNDU0lfVVNFUk5BTUUgfCBJU0NTSV9QQVNTV09SRCB8CisJCUlTQ1NJX1VTRVJOQU1FX0lOIHwgSVNDU0lfUEFTU1dPUkRfSU4gfAorCQlJU0NTSV9GQVNUX0FCT1JUIHwgSVNDU0lfQUJPUlRfVE1PIHwKKwkJSVNDU0lfTFVfUkVTRVRfVE1PIHwKKwkJSVNDU0lfUElOR19UTU8gfCBJU0NTSV9SRUNWX1RNTyB8CisJCUlTQ1NJX0lGQUNFX05BTUUgfCBJU0NTSV9JTklUSUFUT1JfTkFNRSwKKwkuaG9zdF9wYXJhbV9tYXNrID0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfCBJU0NTSV9IT1NUX0lQQUREUkVTUyB8CisJCQkJSVNDU0lfSE9TVF9JTklUSUFUT1JfTkFNRSwKKwkuY3JlYXRlX3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlLAorCS5kZXN0cm95X3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveSwKKwkuY3JlYXRlX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fY3JlYXRlLAorCS5iaW5kX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fYmluZCwKKwkuZGVzdHJveV9jb25uID0gaXNjc2lfY29ubl90ZWFyZG93biwKKwkuc2V0X3BhcmFtID0gYmVpc2NzaV9zZXRfcGFyYW0sCisJLmdldF9jb25uX3BhcmFtID0gYmVpc2NzaV9jb25uX2dldF9wYXJhbSwKKwkuZ2V0X3Nlc3Npb25fcGFyYW0gPSBpc2NzaV9zZXNzaW9uX2dldF9wYXJhbSwKKwkuZ2V0X2hvc3RfcGFyYW0gPSBiZWlzY3NpX2dldF9ob3N0X3BhcmFtLAorCS5zdGFydF9jb25uID0gYmVpc2NzaV9jb25uX3N0YXJ0LAorCS5zdG9wX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fc3RvcCwKKwkuc2VuZF9wZHUgPSBpc2NzaV9jb25uX3NlbmRfcGR1LAorCS54bWl0X3Rhc2sgPSBiZWlzY3NpX3Rhc2tfeG1pdCwKKwkuY2xlYW51cF90YXNrID0gYmVpc2NzaV9jbGVhbnVwX3Rhc2ssCisJLmFsbG9jX3BkdSA9IGJlaXNjc2lfYWxsb2NfcGR1LAorCS5wYXJzZV9wZHVfaXR0ID0gYmVpc2NzaV9wYXJzZV9wZHUsCisJLmdldF9zdGF0cyA9IGJlaXNjc2lfY29ubl9nZXRfc3RhdHMsCisJLmVwX2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Nvbm5lY3QsCisJLmVwX3BvbGwgPSBiZWlzY3NpX2VwX3BvbGwsCisJLmVwX2Rpc2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QsCisJLnNlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQgPSBpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJlaXNjc2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wcm9iZSA9IGJlaXNjc2lfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBiZWlzY3NpX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBiZWlzY3NpX3BjaV9pZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgYmVpc2NzaV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwliZWlzY3NpX3Njc2lfdHJhbnNwb3J0ID0KKwkJCWlzY3NpX3JlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCWlmICghYmVpc2NzaV9zY3NpX3RyYW5zcG9ydCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIGJlaXNjc2kiCisJCQkgInRyYW5zcG9ydC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCisJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIiCisJCQkgImJlaXNjc2kgcGNpIGRyaXZlci5cbiIpOworCQlnb3RvIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OworCX0KKwlyZXR1cm4gMDsKKwordW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ6CisJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVpc2NzaV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworfQorCittb2R1bGVfaW5pdChiZWlzY3NpX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGJlaXNjc2lfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjOWI3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKQEAgLTAsMCArMSw4MzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUFJTl8KKyNkZWZpbmUgX0JFSVNDU0lfTUFJTl8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGstaW9wb2xsLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL2lzY3NpX3Byb3RvLmg+CisjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KKworI2luY2x1ZGUgImJlLmgiCisKKworCisjZGVmaW5lIERSVl9OQU1FCQkiYmUyaXNjc2kiCisjZGVmaW5lIEJVSUxEX1NUUgkJIjIuMC41MjcuMCIKKworI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIiBcCisJCQkJIkxpbnV4IGlTQ1NJIERyaXZlciB2ZXJzaW9uIiBCVUlMRF9TVFIKKyNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCisKKyNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCisjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCisjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAzCisKKyNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwk2NAorI2RlZmluZSBCRTJfQ01EU19QRVJfQ1hOCTEyOAorI2RlZmluZSBCRTJfTE9HT1VUUwkJQkUyX01BWF9TRVNTSU9OUworI2RlZmluZSBCRTJfVE1GUwkJMTYKKyNkZWZpbmUgQkUyX05PUE9VVF9SRVEJCTE2CisjZGVmaW5lIEJFMl9BU1lOQ1BEVVMJCUJFMl9NQVhfU0VTU0lPTlMKKyNkZWZpbmUgQkUyX01BWF9JQ0RTCQkyMDQ4CisjZGVmaW5lIEJFMl9TR0UJCQkzMgorI2RlZmluZSBCRTJfREVGUERVX0hEUl9TWgk2NAorI2RlZmluZSBCRTJfREVGUERVX0RBVEFfU1oJODE5MgorI2RlZmluZSBCRTJfSU9fREVQVEggXAorCShCRTJfTUFYX0lDRFMgLyAyIC0gKEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfTk9QT1VUX1JFUSkpCisKKyNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJQkUyX1NHRQorCisjZGVmaW5lIEJFSVNDU0lfTUFYX0NNTkRTCTEwMjQJLyogTWF4IElPJ3MgcGVyIEN0cmxyIHNodC0+Y2FuX3F1ZXVlICovCisjZGVmaW5lIEJFSVNDU0lfQ01EX1BFUl9MVU4JMTI4CS8qIHNjc2lfaG9zdC0+Y21kX3Blcl9sdW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9NQVhfU0VDVE9SUwkyMDQ4CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KKworI2RlZmluZSBCRUlTQ1NJX01BWF9DTURfTEVOCTE2CS8qIHNjc2lfaG9zdC0+bWF4X2NtZF9sZW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9OVU1fTUFYX0xVTgkyNTYJLyogc2NzaV9ob3N0LT5tYXhfbHVuICovCisjZGVmaW5lIEJFSVNDU0lfTlVNX0RFVklDRVNfU1VQUE9SVEVECTB4MDEKKyNkZWZpbmUgQkVJU0NTSV9NQVhfRlJBR1NfSU5JVAkxOTIKKyNkZWZpbmUgQkVfTlVNX01TSVhfRU5UUklFUyAJMQorI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFIAkweGFjCisKKyNkZWZpbmUgQkVfU0VOU0VfSU5GT19TSVpFCQkyNTgKKyNkZWZpbmUgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFCTY0CisjZGVmaW5lIEJFX01JTl9NRU1fU0laRQkJCTE2Mzg0CisKKyNkZWZpbmUgSUlPQ19TQ1NJX0RBVEEgICAgICAgICAgICAgICAgICAweDA1CS8qIFdyaXRlIE9wZXJhdGlvbiAqLworCisjZGVmaW5lIERCR19MVkwJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBEQkdfTFZMXzEJCQkweDAwMDAwMDAxCisjZGVmaW5lIERCR19MVkxfMgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgREJHX0xWTF8zCQkJMHgwMDAwMDAwNAorI2RlZmluZSBEQkdfTFZMXzQJCQkweDAwMDAwMDA4CisjZGVmaW5lIERCR19MVkxfNQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgREJHX0xWTF82CQkJMHgwMDAwMDAyMAorI2RlZmluZSBEQkdfTFZMXzcJCQkweDAwMDAwMDQwCisjZGVmaW5lIERCR19MVkxfOAkJCTB4MDAwMDAwODAKKworI2RlZmluZSBTRV9ERUJVRyhkZWJ1Z19tYXNrLCBmbXQsIGFyZ3MuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoZGVidWdfbWFzayAmIERCR19MVkwpIHsJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiKCVzKCk6JWQpOiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7XAorCQlwcmludGsoZm10LCAjI2FyZ3MpOwkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qKgorICogaGFyZHdhcmUgbmVlZHMgdGhlIGFzeW5jIFBEVSBidWZmZXJzIHRvIGJlIHBvc3RlZCBpbiBtdWx0aXBsZXMgb2YgOAorICogU28gaGF2ZSBhdGxlYXN0IDggb2YgdGhlbSBieSBkZWZhdWx0CisgKi8KKworI2RlZmluZSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aSkJKHBod2ktPnBod2lfY3R4dC0+cGFzeW5jX2N0eCkKKworLyoqKioqKioqKiBNZW1vcnkgQkFSIHJlZ2lzdGVyICoqKioqKioqKioqKi8KKyNkZWZpbmUgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCAJMHhmYworLyoqCisgKiBIb3N0IEludGVycnVwdCBFbmFibGUsIGlmIHNldCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFsdGhvdWdoICJQQ0kgSW50ZXJydXB0CisgKiBEaXNhYmxlIiBtYXkgc3RpbGwgZ2xvYmFsbHkgYmxvY2sgaW50ZXJydXB0cyBpbiBhZGRpdGlvbiB0byBpbmRpdmlkdWFsCisgKiBpbnRlcnJ1cHQgbWFza3M7IGEgbWVjaGFuaXNtIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byBibG9jayBhbGwgaW50ZXJydXB0cworICogYXRvbWljYWxseSB3aXRob3V0IGhhdmluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSBQQ0kgSW50ZXJydXB0IERpc2FibGUgYml0CisgKiB3aXRoIHRoZSBPUy4KKyAqLworI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBJU1IwIFJlZ2lzdGVyIG9mZnNldCAqKioqKioqKioqLworI2RlZmluZSBDRVZfSVNSMF9PRkZTRVQgCQkJMHhDMTgKKyNkZWZpbmUgQ0VWX0lTUl9TSVpFCQkJCTQKKworLyoqCisgKiBNYWNyb3MgZm9yIHJlYWRpbmcvd3JpdGluZyBhIHByb3RlY3Rpb24gZG9tYWluIG9yIENTUiByZWdpc3RlcnMKKyAqIGluIEJsYWRlRW5naW5lLgorICovCisKKyNkZWZpbmUgREJfVFhVTFAwX09GRlNFVCAweDQwCisjZGVmaW5lIERCX1JYVUxQMF9PRkZTRVQgMHhBMAorLyoqKioqKioqKiBFdmVudCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9FUV9PRkZTRVQJCQlEQl9DUV9PRkZTRVQKKyNkZWZpbmUgREJfRVFfUklOR19JRF9NQVNLCQkweDFGRgkvKiBiaXRzIDAgLSA4ICovCisvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGVxICovCisjZGVmaW5lIERCX0VRX0NMUl9TSElGVAkJCSg5KQkvKiBiaXQgOSAqLworLyogTXVzdCBiZSAxICovCisjZGVmaW5lIERCX0VRX0VWTlRfU0hJRlQJCSgxMCkJLyogYml0IDEwICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfRVFfTlVNX1BPUFBFRF9TSElGVAkJKDE2KQkvKiBiaXRzIDE2IC0gMjggKi8KKy8qIFJlYXJtIGJpdCAqLworI2RlZmluZSBEQl9FUV9SRUFSTV9TSElGVAkJKDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBDb21wbCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9DUV9PRkZTRVQgCQkJMHgxMjAKKyNkZWZpbmUgREJfQ1FfUklOR19JRF9NQVNLCQkweDNGRgkvKiBiaXRzIDAgLSA5ICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfQ1FfTlVNX1BPUFBFRF9TSElGVAkJKDE2KSAJLyogYml0cyAxNiAtIDI4ICovCisvKiBSZWFybSBiaXQgKi8KKyNkZWZpbmUgREJfQ1FfUkVBUk1fU0hJRlQJCSgyOSkgCS8qIGJpdCAyOSAqLworCisjZGVmaW5lIEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykJKHBjLT5waHdpX2N0cmxyKQorI2RlZmluZSBIV0lfR0VUX0RFRl9CVUZRX0lEKHBjKSAoKChzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKilcCisJCShHRVRfSFdJX0NPTlRST0xMRVJfV1MocGMpKSktPmRlZmF1bHRfcGR1X2RhdGEuaWQpCisjZGVmaW5lIEhXSV9HRVRfREVGX0hEUlFfSUQocGMpICgoKHN0cnVjdCBod2lfY29udHJvbGxlciAqKVwKKwkJKEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykpKS0+ZGVmYXVsdF9wZHVfaGRyLmlkKQorCisjZGVmaW5lIFBBR0VTX1JFUVVJUkVEKHgpIFwKKwkoKHggPCBQQUdFX1NJWkUpID8gMSA6ICAoKHggKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRSkpCisKK2VudW0gYmVfbWVtX2VudW0geworCUhXSV9NRU1fQURETl9DT05URVhULAorCUhXSV9NRU1fQ1EsCisJSFdJX01FTV9FUSwKKwlIV0lfTUVNX1dSQiwKKwlIV0lfTUVNX1dSQkgsCisJSFdJX01FTV9TR0xILAkvKiA1ICovCisJSFdJX01FTV9TR0UsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGLAorCUhXSV9NRU1fQVNZTkNfREFUQV9CVUYsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfUklORywKKwlIV0lfTUVNX0FTWU5DX0RBVEFfUklORywJLyogMTAgKi8KKwlIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUsCisJSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRSwKKwlIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhULAorCUlTQ1NJX01FTV9HTE9CQUxfSEVBREVSLAorCVNFX01FTV9NQVggIAkvKiAxNSAqLworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzMzIgeworCXVuc2lnbmVkIGludCBhZGRyZXNzX2xvOworCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzczMyIGEzMjsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgYTY0OworCX0gdTsKK307CisKK3N0cnVjdCBtZW1fYXJyYXkgeworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBidXNfYWRkcmVzczsJLyogQnVzIGFkZHJlc3Mgb2YgbG9jYXRpb24gKi8KKwl2b2lkICp2aXJ0dWFsX2FkZHJlc3M7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgdG8gdGhlIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50IHNpemU7CQkvKiBTaXplIHJlcXVpcmVkIGJ5IG1lbW9yeSBibG9jayAqLworfTsKKworc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgbWVtb3J5IHBhcmFtZXRlciAqLworCXVuc2lnbmVkIGludCBjYXRlZ29yeTsJLyogdHlwZSBpbmRpY2F0ZXMgY2FjaGVkL25vbi1jYWNoZWQgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VsZW1lbnRzOwkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcworCQkJCQkgKiBkZXNjcmlwdG9yCisJCQkJCSAqLworCXVuc2lnbmVkIGludCBhbGlnbm1lbnRfbWFzazsJLyogQWxpZ25tZW50IG1hc2sgZm9yIHRoaXMgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZV9pbl9ieXRlczsJLyogU2l6ZSByZXF1aXJlZCBieSBtZW1vcnkgYmxvY2sgKi8KKwlzdHJ1Y3QgbWVtX2FycmF5ICptZW1fYXJyYXk7Cit9OworCitzdHJ1Y3Qgc2dsX2hhbmRsZSB7CisJdW5zaWduZWQgaW50IHNnbF9pbmRleDsKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwZnJhZzsKK307CisKK3N0cnVjdCBoYmFfcGFyYW1ldGVycyB7CisJdW5zaWduZWQgaW50IGlvc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgY3huc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgYXN5bmNwZHVzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBpY2RzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBudW1fc2dlX3Blcl9pbzsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2hkcl9zejsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2RhdGFfc3o7CisJdW5zaWduZWQgaW50IG51bV9jcV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBudW1fZXFfZW50cmllczsKKwl1bnNpZ25lZCBpbnQgd3Jic19wZXJfY3huOworCXVuc2lnbmVkIGludCBjcmFzaG1vZGU7CisJdW5zaWduZWQgaW50IGhiYV9udW07CisKKwl1bnNpZ25lZCBpbnQgbWdtdF93c19zejsKKwl1bnNpZ25lZCBpbnQgaHdpX3dzX3N6OworCisJdW5zaWduZWQgaW50IGV0bzsKKwl1bnNpZ25lZCBpbnQgbGR0bzsKKworCXVuc2lnbmVkIGludCBkYmdfZmxhZ3M7CisJdW5zaWduZWQgaW50IG51bV9jeG47CisKKwl1bnNpZ25lZCBpbnQgZXFfdGltZXI7CisJLyoqCisJICogVGhlc2UgYXJlIGNhbGN1bGF0ZWQgZnJvbSBvdGhlciBwYXJhbXMuIFRoZXkncmUgaGVyZQorCSAqIGZvciBkZWJ1ZyBwdXJwb3NlcworCSAqLworCXVuc2lnbmVkIGludCBudW1fbWNjX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fbWNjX2NxX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fY3FfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9lcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9oZHJfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fc2dlOworfTsKKworc3RydWN0IGJlaXNjc2lfaGJhIHsKKwlzdHJ1Y3QgaGJhX3BhcmFtZXRlcnMgcGFyYW1zOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwl1bnNpZ25lZCBpbnQgbWVtX3JlcVtTRV9NRU1fTUFYXTsKKwkvKiBQQ0kgQkFSIG1hcHBlZCBhZGRyZXNzZXMgKi8KKwl1OCBfX2lvbWVtICpjc3JfdmE7CS8qIENTUiAqLworCXU4IF9faW9tZW0gKmRiX3ZhOwkvKiBEb29yICBCZWxsICAqLworCXU4IF9faW9tZW0gKnBjaV92YTsJLyogUENJIENvbmZpZyAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBjc3JfcGE7CS8qIENTUiAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBkYl9wYTsJLyogQ1NSICovCisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBjaV9wYTsJLyogQ1NSICovCisJLyogUENJIHJlcHJlc2VudGF0aW9uIG9mIG91ciBIQkEgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydCBhc2ljX3JldmlzaW9uOworCXN0cnVjdCBibGtfaW9wb2xsCWlvcG9sbDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKmluaXRfbWVtOworCisJdW5zaWduZWQgc2hvcnQgaW9fc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKippb19zZ2xfaG5kbF9iYXNlOworCisJdW5zaWduZWQgc2hvcnQgZWhfc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKiplaF9zZ2xfaG5kbF9iYXNlOworCXNwaW5sb2NrX3QgaW9fc2dsX2xvY2s7CisJc3BpbmxvY2tfdCBtZ210X3NnbF9sb2NrOworCXNwaW5sb2NrX3QgaXNyX2xvY2s7CisJdW5zaWduZWQgaW50IGFnZTsKKwl1bnNpZ25lZCBzaG9ydCBhdmxibF9jaWRzOworCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwl1bnNpZ25lZCBzaG9ydCBjaWRfZnJlZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uX3RhYmxlW0JFMl9NQVhfU0VTU0lPTlMgKiAyXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhiYV9xdWV1ZTsKKwl1bnNpZ25lZCBzaG9ydCAqY2lkX2FycmF5OworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKmVwX2FycmF5OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCB7CisJCS8qKgorCQkgKiBncm91cCB0b2dldGhlciBzaW5jZSB0aGV5IGFyZSB1c2VkIG1vc3QgZnJlcXVlbnRseQorCQkgKiBmb3IgY2lkIHRvIGNyaSBjb252ZXJzaW9uCisJCSAqLworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgcGh5c19wb3J0OworCisJCXVuc2lnbmVkIGludCBpc3Jfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgcGNpX2Z1bmN0aW9uOworCisJCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwkJdW5zaWduZWQgc2hvcnQgY2lkX2ZyZWU7CisJCXVuc2lnbmVkIHNob3J0IGF2bGJsX2NpZHM7CisJCXNwaW5sb2NrX3QgY2lkX2xvY2s7CisJfSBmd19jb25maWc7CisKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdW5zaWduZWQgc2hvcnQgdG9kb19jcTsKKwl1bnNpZ25lZCBzaG9ydCB0b2RvX21jY19jcTsKKwljaGFyIHdxX25hbWVbMjBdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsJLyogVGhlIGFjdHVhayB3b3JrIHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfY3FzOwkvKiBUaGUgd29yayBiZWluZyBxdWV1ZWQgKi8KKwlzdHJ1Y3QgYmVfY3RybF9pbmZvIGN0cmw7Cit9OworCitzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uIHsKKwlzdHJ1Y3QgcGNpX3Bvb2wgKmJoc19wb29sOworfTsKKworLyoqCisgKiBzdHJ1Y3QgYmVpc2NzaV9jb25uIC0gaXNjc2kgY29ubmVjdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJlaXNjc2lfY29ubiB7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXUzMiBleHBfc3RhdHNuOworCXUzMiBiZWlzY3NpX2Nvbm5fY2lkOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBzaG9ydCBsb2dpbl9pbl9wcm9ncmVzczsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcGxvZ2luX3NnbF9oYW5kbGU7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgY2hpcCAqLworc3RydWN0IHBkdV9kYXRhX291dCB7CisJdTMyIGR3WzEyXTsKK307CisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX3BkdV9kYXRhX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlICovCisJdTggcnN2ZDBbMl07CQkvKiBzaG91bGQgYmUgMCAqLworCXU4IHJzdmQxWzddOworCXU4IGZpbmFsX2JpdDsJCS8qIEYgYml0ICovCisJdTggcnN2ZDJbMTZdOworCXU4IGFoc19sZW5ndGhbOF07CS8qIG5vIEFIUyAqLworCXU4IGRhdGFfbGVuX2hpWzhdOworCXU4IGRhdGFfbGVuX2xvWzE2XTsJLyogRGF0YVNlZ21lbnRMZW5ndGggKi8KKwl1OCBsdW5bNjRdOworCXU4IGl0dFszMl07CQkvKiBJVFQ7IGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHR0dFszMl07CQkvKiBUVFQ7IHZhbGlkIGZvciBSMlQgb3IgMHhmZmZmZmZmZiAqLworCXU4IHJzdmQzWzMyXTsKKwl1OCBleHBfc3RhdF9zblszMl07CisJdTggcnN2ZDRbMzJdOworCXU4IGRhdGFfc25bMzJdOworCXU4IGJ1ZmZlcl9vZmZzZXRbMzJdOworCXU4IHJzdmQ1WzMyXTsKK307CisKK3N0cnVjdCBiZV9jbWRfYmhzIHsKKwlzdHJ1Y3QgaXNjc2lfY21kIGlzY3NpX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbMTZdOworCXN0cnVjdCBwZHVfZGF0YV9vdXQgaXNjc2lfZGF0YV9wZHU7CisJdW5zaWduZWQgY2hhciBwYWQyW0JFX1NFTlNFX0lORk9fU0laRSAtCisJCQlzaXplb2Yoc3RydWN0IHBkdV9kYXRhX291dCldOworfTsKKworc3RydWN0IGJlaXNjc2lfaW9fdGFzayB7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKKwl1bnNpZ25lZCBpbnQgY21kX3NuOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7CisJdW5zaWduZWQgc2hvcnQgaGVhZGVyX2xlbjsKKworCXN0cnVjdCBiZV9jbWRfYmhzICpjbWRfYmhzOworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBiaHNfcGE7CisJdW5zaWduZWQgc2hvcnQgYmhzX2xlbjsKK307CisKK3N0cnVjdCBiZV9ub25pb19iaHMgeworCXN0cnVjdCBpc2NzaV9oZHIgaXNjc2lfaGRyOworCXVuc2lnbmVkIGNoYXIgcGFkMVsxNl07CisJc3RydWN0IHBkdV9kYXRhX291dCBpc2NzaV9kYXRhX3BkdTsKKwl1bnNpZ25lZCBjaGFyIHBhZDJbQkVfU0VOU0VfSU5GT19TSVpFIC0KKwkJCXNpemVvZihzdHJ1Y3QgcGR1X2RhdGFfb3V0KV07Cit9OworCitzdHJ1Y3QgYmVfc3RhdHVzX2JocyB7CisJc3RydWN0IGlzY3NpX2NtZCBpc2NzaV9oZHI7CisJdW5zaWduZWQgY2hhciBwYWQxWzE2XTsKKwkvKioKKwkgKiBUaGUgcGx1cyAyIGJlbG93IGlzIHRvIGhvbGQgdGhlIHNlbnNlIGluZm8gbGVuZ3RoIHRoYXQgZ2V0cworCSAqIERNQSdlZCBieSBSeFVMUAorCSAqLworCXVuc2lnbmVkIGNoYXIgc2Vuc2VfaW5mb1tCRV9TRU5TRV9JTkZPX1NJWkVdOworfTsKKworc3RydWN0IGlzY3NpX3NnZSB7CisJdTMyIGR3WzRdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UgeworCXU4IGFkZHJfaGlbMzJdOworCXU4IGFkZHJfbG9bMzJdOworCXU4IHNnZV9vZmZzZXRbMjJdOwkvKiBEV09SRCAyICovCisJdTggcnN2ZDBbOV07CQkvKiBEV09SRCAyICovCisJdTggbGFzdF9zZ2U7CQkvKiBEV09SRCAyICovCisJdTggbGVuWzE3XTsJCS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMVsxNV07CQkvKiBEV09SRCAzICovCit9OworCitzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyB7CisJdTMyIGR3WzVdOworfTsKKworI2RlZmluZSBPRkZMRF9QQVJBTVNfRVJMCTB4MDAwMDAwMDMKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0RERQkweDAwMDAwMDA0CisjZGVmaW5lIE9GRkxEX1BBUkFNU19IREUJMHgwMDAwMDAwOAorI2RlZmluZSBPRkZMRF9QQVJBTVNfSVIyVAkweDAwMDAwMDEwCisjZGVmaW5lIE9GRkxEX1BBUkFNU19JTUQJMHgwMDAwMDAyMAorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgeworCXU4IG1heF9idXJzdF9sZW5ndGhbMzJdOworCXU4IG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGhbMzJdOworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFszMl07CisJdTggZXJsWzJdOworCXU4IGRkZVsxXTsKKwl1OCBoZGVbMV07CisJdTggaXIydFsxXTsKKwl1OCBpbWRbMV07CisJdTggcGFkWzI2XTsKKwl1OCBleHBfc3RhdHNuWzMyXTsKK307CisKKy8qIHZvaWQgaHdpX2NvbXBsZXRlX2RydnJfbXNncyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpOyovCisKK3N0cnVjdCBhc3luY19wZHVfaGFuZGxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBhOworCXZvaWQgKnBidWZmZXI7CisJdW5zaWduZWQgaW50IGNvbnN1bWVkOworCXVuc2lnbmVkIGNoYXIgaW5kZXg7CisJdW5zaWduZWQgY2hhciBpc19oZWFkZXI7CisJdW5zaWduZWQgc2hvcnQgY3JpOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbjsKK307CisKK3N0cnVjdCBod2lfYXN5bmNfZW50cnkgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgaGRyX3JlY2VpdmVkOworCQl1bnNpZ25lZCBjaGFyIGhkcl9sZW47CisJCXVuc2lnbmVkIHNob3J0IGJ5dGVzX3JlY2VpdmVkOworCQl1bnNpZ25lZCBpbnQgYnl0ZXNfbmVlZGVkOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJfSB3YWl0X3F1ZXVlOworCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkZXJfYnVzeV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YV9idXN5X2xpc3Q7Cit9OworCisjZGVmaW5lIEJFX01JTl9BU1lOQ19FTlRSSUVTIDEyOAorCitzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0IHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJfSBhc3luY19oZWFkZXI7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwkJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCX0gYXN5bmNfZGF0YTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSB2YXJ5aW5nIHNpemUgbGlzdCEgRG8gbm90IGFkZCBhbnl0aGluZworCSAqIGFmdGVyIHRoaXMgZW50cnkhIQorCSAqLworCXN0cnVjdCBod2lfYXN5bmNfZW50cnkgYXN5bmNfZW50cnlbQkVfTUlOX0FTWU5DX0VOVFJJRVNdOworfTsKKworI2RlZmluZSBQRFVDUUVfQ09ERV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgUERVQ1FFX0RQTF9NQVNLCQkweEZGRkYwMDAwCisjZGVmaW5lIFBEVUNRRV9JTkRFWF9NQVNLCTB4MDAwMEZGRkYKKworc3RydWN0IGlfdF9kcGR1X2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUgeworCXU4IGRiX2FkZHJfaGlbMzJdOworCXU4IGRiX2FkZHJfbG9bMzJdOworCXU4IGNvZGVbNl07CisJdTggY2lkWzEwXTsKKwl1OCBkcGxbMTZdOworCXU4IGluZGV4WzE2XTsKKwl1OCBudW1fY29uc1sxMF07CisJdTggcnN2ZDBbNF07CisJdTggZmluYWw7CisJdTggdmFsaWQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIENRRV9WQUxJRF9NQVNLCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1FFX0NPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIENRRV9DSURfTUFTSwkweDAwMDBGRkMwCisKKyNkZWZpbmUgRVFFX1ZBTElEX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRVFFX01BSk9SQ09ERV9NQVNLCTB4MDAwMDAwMEUKKyNkZWZpbmUgRVFFX1JFU0lEX01BU0sJCTB4RkZGRjAwMDAKKworc3RydWN0IGJlX2VxX2VudHJ5IHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2VxX2VudHJ5IHsKKwl1OCB2YWxpZDsJCS8qIERXT1JEIDAgKi8KKwl1OCBtYWpvcl9jb2RlWzNdOwkvKiBEV09SRCAwICovCisJdTggbWlub3JfY29kZVsxMl07CS8qIERXT1JEIDAgKi8KKwl1OCByZXNvdXJjZV9pZFsxNl07CS8qIERXT1JEIDAgKi8KKworfSBfX3BhY2tlZDsKKworc3RydWN0IGNxX2RiIHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2RiIHsKKwl1OCBxaWRbMTBdOworCXU4IGV2ZW50WzFdOworCXU4IHJzdmQwWzVdOworCXU4IG51bV9wb3BwZWRbMTNdOworCXU4IHJlYXJtWzFdOworCXU4IHJzdmQxWzJdOworfSBfX3BhY2tlZDsKKwordm9pZCBiZWlzY3NpX3Byb2Nlc3NfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKKworCitzdHJ1Y3QgaXNjc2lfd3JiIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXUkJfVFlQRV9NQVNLIDB4RjAwMDAwMDAKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCByMnRfZXhwX2R0bFsyNF07CS8qIERXT1JEIDEgKi8KKwl1OCBzZ2xfaWNkX2lkeFsxMl07CS8qIERXT1JEIDIgKi8KKwl1OCByc3ZkMFsyMF07CQkvKiBEV09SRCAyICovCisJdTggZXhwX2RhdGFfc25bMzJdOwkvKiBEV09SRCAzICovCisJdTggaXNjc2lfYmhzX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA0ICovCisJdTggaXNjc2lfYmhzX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA1ICovCisJdTggY21kc25faXR0WzMyXTsJLyogRFdPUkQgNiAqLworCXU4IGRpZl9yZWZfdGFnWzMyXTsJLyogRFdPUkQgNyAqLworCXU4IHNnZTBfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBzZ2UwX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA5ICAqLworCXU4IHNnZTBfb2Zmc2V0WzIyXTsJLyogRFdPUkQgMTAgKi8KKwl1OCBwYnM7CQkJLyogRFdPUkQgMTAgKi8KKwl1OCBkaWZfbW9kZVsyXTsJCS8qIERXT1JEIDEwICovCisJdTggcnN2ZDFbNl07CQkvKiBEV09SRCAxMCAqLworCXU4IHNnZTBfbGFzdDsJCS8qIERXT1JEIDEwICovCisJdTggc2dlMF9sZW5bMTddOwkvKiBEV09SRCAxMSAqLworCXU4IGRpZl9tZXRhX3RhZ1sxNF07CS8qIERXT1JEIDExICovCisJdTggc2dlMF9pbl9kZHI7CQkvKiBEV09SRCAxMSAqLworCXU4IHNnZTFfYWRkcl9oaVszMl07CS8qIERXT1JEIDEyICovCisJdTggc2dlMV9hZGRyX2xvWzMyXTsJLyogRFdPUkQgMTMgKi8KKwl1OCBzZ2UxX3IydF9vZmZzZXRbMjJdOwkvKiBEV09SRCAxNCAqLworCXU4IHJzdmQyWzldOwkJLyogRFdPUkQgMTQgKi8KKwl1OCBzZ2UxX2xhc3Q7CQkvKiBEV09SRCAxNCAqLworCXU4IHNnZTFfbGVuWzE3XTsJLyogRFdPUkQgMTUgKi8KKwl1OCByZWZfc2dsX2ljZF9pZHhbMTJdOwkvKiBEV09SRCAxNSAqLworCXU4IHJzdmQzWzJdOwkJLyogRFdPUkQgMTUgKi8KKwl1OCBzZ2UxX2luX2RkcjsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKKwkJCQkgICAgaW50IGluZGV4KTsKK3ZvaWQKK2ZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKTsKKworc3RydWN0IHBkdV9ub3Bfb3V0IHsKKwl1MzIgZHdbMTJdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlIDB4MDAgKi8KKwl1OCBpX2JpdDsJCS8qIEkgQml0ICovCisJdTggeF9iaXQ7CQkvKiByZXNlcnZlZDsgc2hvdWxkIGJlIDAgKi8KKwl1OCBmcF9iaXRfZmlsbGVyMVs3XTsKKwl1OCBmX2JpdDsJCS8qIGFsd2F5cyAxICovCisJdTggcmVzZXJ2ZWQxWzE2XTsKKwl1OCBhaHNfbGVuZ3RoWzhdOwkvKiBubyBBSFMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFTZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsKKwl1OCBpdHRbMzJdOwkJLyogaW5pdGlhdG9yIGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCB0dHRbMzJdOwkJLyogdGFyZ2V0IGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCBjbWRfc25bMzJdOworCXU4IGV4cF9zdGF0X3NuWzMyXTsKKwl1OCByZXNlcnZlZDVbMTI4XTsKK307CisKKyNkZWZpbmUgUERVQkFTRV9PUENPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIFBEVUJBU0VfREFUQUxFTkhJX01BU0sJMHgwMDAwRkYwMAorI2RlZmluZSBQRFVCQVNFX0RBVEFMRU5MT19NQVNLCTB4RkZGRjAwMDAKKworc3RydWN0IHBkdV9iYXNlIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfYmFzZSB7CisJdTggb3Bjb2RlWzZdOworCXU4IGlfYml0OwkJLyogaW1tZWRpYXRlIGJpdCAqLworCXU4IHhfYml0OwkJLyogcmVzZXJ2ZWQsIGFsd2F5cyAwICovCisJdTggcmVzZXJ2ZWQxWzI0XTsJLyogb3Bjb2RlLXNwZWNpZmljIGZpZWxkcyAqLworCXU4IGFoc19sZW5ndGhbOF07CS8qIGxlbmd0aCB1bml0cyBpcyA0IGJ5dGUgd29yZHMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFzZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsJCS8qIGx1biBvciBvcGNvZGUtc3BlY2lmaWMgZmllbGRzICovCisJdTggaXR0WzMyXTsJCS8qIGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHJlc2VydmVkNFsyMjRdOworfTsKKworc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXUzMiBkd1sxNl07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCBtYXhfYnVyc3RfbGVuZ3RoWzE5XTsJLyogRFdPUkQgMSAqLworCXU4IHJzdmQwWzVdOwkJLyogRFdPUkQgMSAqLworCXU4IHJzdmQxWzE1XTsJCS8qIERXT1JEIDIgKi8KKwl1OCBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoWzE3XTsJLyogRFdPUkQgMiAqLworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFsxNF07CS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMlsyXTsJCS8qIERXT1JEIDMgKi8KKwl1OCB0eF93cmJpbmRleF9kcnZfbXNnWzhdOwkvKiBEV09SRCAzICovCisJdTggcnN2ZDNbNV07CQkvKiBEV09SRCAzICovCisJdTggc2Vzc2lvbl9zdGF0ZVszXTsJLyogRFdPUkQgMyAqLworCXU4IHJzdmQ0WzE2XTsJCS8qIERXT1JEIDQgKi8KKwl1OCB0eF9qdW1ibzsJCS8qIERXT1JEIDQgKi8KKwl1OCBoZGU7CQkJLyogRFdPUkQgNCAqLworCXU4IGRkZTsJCQkvKiBEV09SRCA0ICovCisJdTggZXJsWzJdOwkJLyogRFdPUkQgNCAqLworCXU4IGRvbWFpbl9pZFs1XTsJCS8qIERXT1JEIDQgKi8KKwl1OCBtb2RlOwkJLyogRFdPUkQgNCAqLworCXU4IGltZDsJCQkvKiBEV09SRCA0ICovCisJdTggaXIydDsJCS8qIERXT1JEIDQgKi8KKwl1OCBub3RwcmVkYmxxWzJdOwkvKiBEV09SRCA0ICovCisJdTggY29tcGx0b25hY2s7CQkvKiBEV09SRCA0ICovCisJdTggc3RhdF9zblszMl07CQkvKiBEV09SRCA1ICovCisJdTggcGFkX2J1ZmZlcl9hZGRyX2hpWzMyXTsJLyogRFdPUkQgNiAqLworCXU4IHBhZF9idWZmZXJfYWRkcl9sb1szMl07CS8qIERXT1JEIDcgKi8KKwl1OCBwYWRfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBwYWRfYWRkcl9sb1szMl07CS8qIERXT1JEIDkgKi8KKwl1OCByc3ZkNVszMl07CQkvKiBEV09SRCAxMCAqLworCXU4IHJzdmQ2WzMyXTsJCS8qIERXT1JEIDExICovCisJdTggcnN2ZDdbMzJdOwkJLyogRFdPUkQgMTIgKi8KKwl1OCByc3ZkOFszMl07CQkvKiBEV09SRCAxMyAqLworCXU4IHJzdmQ5WzMyXTsJCS8qIERXT1JEIDE0ICovCisJdTggcnN2ZDEwWzMyXTsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9yaW5nIHsKKwl1MzIgcGFnZXM7CQkvKiBxdWV1ZSBzaXplIGluIHBhZ2VzICovCisJdTMyIGlkOwkJCS8qIHF1ZXVlIGlkIGFzc2lnbmVkIGJ5IGJla2xpYiAqLworCXUzMiBudW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gcXVldWUgKi8KKwl1MzIgY2lkeDsJCS8qIGNvbnN1bWVyIGluZGV4ICovCisJdTMyIHBpZHg7CQkvKiBwcm9kdWNlciBpbmRleCAtLSBub3QgdXNlZCBieSBtb3N0IHJpbmdzICovCisJdTMyIGl0ZW1fc2l6ZTsJCS8qIHNpemUgaW4gYnl0ZXMgb2Ygb25lIG9iamVjdCAqLworCisJdm9pZCAqdmE7CQkvKiBUaGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSByaW5nLiAgVGhpcworCQkJCSAqIHNob3VsZCBiZSBsYXN0IHRvIGFsbG93IDMyICYgNjQgYml0IGRlYnVnZ2VyCisJCQkJICogZXh0ZW5zaW9ucyB0byB3b3JrLgorCQkJCSAqLworfTsKKworc3RydWN0IGh3aV93cmJfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2RydnJfbGlzdDsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqKnB3cmJfaGFuZGxlX2Jhc2U7CisJc3RydWN0IHdyYl9oYW5kbGUgKipwd3JiX2hhbmRsZV9iYXNlc3RkOworCXN0cnVjdCBpc2NzaV93cmIgKnBsYXN0X3dyYjsKKwl1bnNpZ25lZCBzaG9ydCBhbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBmcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IHdyYl9oYW5kbGVzX2F2YWlsYWJsZTsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7Cit9OworCitzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgaW9fc2dsX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBlaF9zZ2xfbGlzdDsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGVfYmFzZTsKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleDsKKworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgd3JiX2NvbnRleHRbQkUyX01BWF9TRVNTSU9OUyAqIDJdOworCXN0cnVjdCBtY2Nfd3JiICpwbWNjX3dyYl9iYXNlOworCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2hkcjsKKwlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9kYXRhOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY3R4dDsKKwl1bnNpZ25lZCBzaG9ydCBjcV9lcnJvcnNbQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTl07Cit9OworCitlbnVtIGh3aF90eXBlX2VudW0geworCUhXSF9UWVBFX0lPID0gMSwKKwlIV0hfVFlQRV9MT0dPVVQgPSAyLAorCUhXSF9UWVBFX1RNRiA9IDMsCisJSFdIX1RZUEVfTk9QID0gNCwKKwlIV0hfVFlQRV9JT19SRCA9IDUsCisJSFdIX1RZUEVfTE9HSU4gPSAxMSwKKwlIV0hfVFlQRV9JTlZBTElEID0gMHhGRkZGRkZGRgorfTsKKworc3RydWN0IHdyYl9oYW5kbGUgeworCWVudW0gaHdoX3R5cGVfZW51bSB0eXBlOworCXVuc2lnbmVkIHNob3J0IHdyYl9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBueHRfd3JiX2luZGV4OworCisJc3RydWN0IGlzY3NpX3Rhc2sgKnBpb19oYW5kbGU7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYjsKK307CisKK3N0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgeworCXN0cnVjdCBiZV9lcV9vYmogYmVfZXE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfY3E7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfbWNjX2NxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX21jYzsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9oZHJxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9kYXRhcTsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX3dyYnFbQkUyX01BWF9TRVNTSU9OU107CisJc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqcGJlX21jY19jb250ZXh0OworCisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlNjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpbmNsdWRlICJiZV9tZ210LmgiCisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKwordW5zaWduZWQgY2hhciBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfZndfY2ZnICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2Z3X2NmZyAqcGZ3X2NmZzsKKwkJcGZ3X2NmZyA9IHJlcTsKKwkJcGhiYS0+ZndfY29uZmlnLnBoeXNfcG9ydCA9IHBmd19jZmctPnBoeXNfcG9ydDsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfY291bnQ7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5zcV9jb3VudDsKKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWcgXG4iKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyAqcmVxOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWdtdF9jaGVja19zdXBwb3J0ZWRfZnciCisJCQkgIlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyk7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUywgc2l6ZW9mKCpyZXEpKTsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlc19yZXNwICpyZXNwID0gbm9uZW1iX2NtZC52YTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBvZiBDTUQ6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZsYXNocm9tX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBpcyA6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZpcm13YXJlX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJIkRldmVsb3BlciBCdWlsZCwgbm90IHBlcmZvcm1pbmcgdmVyc2lvbiBjaGVjay4uLlxuIik7CisKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIEZhaWxlZCBpbiBtZ210X2NoZWNrX3N1cHBvcnRlZF9md1xuIik7CisJaWYgKG5vbmVtYl9jbWQudmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAorCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2NsZWFudXBfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0xFQU5VUCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+Y2h1dGUgPSBjaHV0ZTsKKwlyZXEtPmhkcl9yaW5nX2lkID0gMDsKKwlyZXEtPmRhdGFfcmluZ19pZCA9IDA7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIiBtZ210X2VwZndfY2xlYW51cCAsIEZBSUxFRFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfaWNkcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgdW5zaWduZWQgaW50IGljZCwgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiAqcmVxOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IiCisJCQkgIm1nbXRfaW52YWxpZGF0ZV9pY2RzIFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbik7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQlPUENPREVfQ09NTU9OX0lTQ1NJX0VSUk9SX1JFQ09WRVJZX0lOVkFMSURBVEVfQ09NTUFORFMsCisJCQlzaXplb2YoKnJlcSkpOworCXJlcS0+cmVmX2hhbmRsZSA9IDA7CisJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFOworCXJlcS0+aWNkX2NvdW50ID0gMDsKKwlyZXEtPnRhYmxlW3JlcS0+aWNkX2NvdW50XS5pY2QgPSBpY2Q7CisJcmVxLT50YWJsZVtyZXEtPmljZF9jb3VudF0uY2lkID0gY2lkOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQuZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLnNpemUpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSUNEUyBJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlpZiAobm9uZW1iX2NtZC52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChjdHJsLT5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcSA9CisJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSV9JTkksCisJCQkgICBPUENPREVfSVNDU0lfSU5JX0RSSVZFUl9JTlZBTElEQVRFX0NPTk5FQ1RJT04sCisJCQkgICBzaXplb2YoKnJlcSkpOworCXJlcS0+c2Vzc2lvbl9oYW5kbGUgPSBiZWlzY3NpX2VwLT5md19oYW5kbGU7CisJcmVxLT5jaWQgPSBjaWQ7CisJaWYgKGlzc3VlX3Jlc2V0KQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lTU1VFX1RDUF9SU1Q7CisJZWxzZQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEU7CisJcmVxLT5zYXZlX2NmZyA9IHNhdmVjZmdfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX0NPTU1PTl9UQ1BfVVBMT0FELAorCQkJICAgT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FELCBzaXplb2YoKnJlcSkpOworCXJlcS0+aWQgPSAodW5zaWduZWQgc2hvcnQpY2lkOworCXJlcS0+dXBsb2FkX3R5cGUgPSAodW5zaWduZWQgY2hhcil1cGxvYWRfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X3VwbG9hZF9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IHNvY2thZGRyX2luICpkYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3RfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdF9hZGRyOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7CisJdW5zaWduZWQgc2hvcnQgZGVmX2RhdGFfaWQ7CisJc3RydWN0IHBoeXNfYWRkciB0ZW1wbGF0ZV9hZGRyZXNzID0geyAwLCAwIH07CisJc3RydWN0IHBoeXNfYWRkciAqcHRlbXBsYXRlX2FkZHJlc3M7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWRlZl9oZHJfaWQgPSAodW5zaWduZWQgc2hvcnQpSFdJX0dFVF9ERUZfSERSUV9JRChwaGJhKTsKKwlkZWZfZGF0YV9pZCA9ICh1bnNpZ25lZCBzaG9ydClIV0lfR0VUX0RFRl9CVUZRX0lEKHBoYmEpOworCisJcHRlbXBsYXRlX2FkZHJlc3MgPSAmdGVtcGxhdGVfYWRkcmVzczsKKwlJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGhiYSwgcHRlbXBsYXRlX2FkZHJlc3MpOworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9UQ1BfQ09OTkVDVF9BTkRfT0ZGTE9BRCwKKwkJCSAgIHNpemVvZigqcmVxKSk7CisJaWYgKGRzdF9hZGRyLT5zYV9mYW1pbHkgPT0gUEZfSU5FVCkgeworCQlfX2JlMzIgc19hZGRyID0gZGFkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX3R5cGUgPSBCRTJfSVBWNDsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbMF0gPSBzX2FkZHIgJiAweDAwMDAwMGZmOworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1sxXSA9IChzX2FkZHIgJiAweDAwMDBmZjAwKSA+PiA4OworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1syXSA9IChzX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbM10gPSAoc19hZGRyICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbi0+c2luX3BvcnQpOworCQliZWlzY3NpX2VwLT5kc3RfYWRkciA9IGRhZGRyX2luLT5zaW5fYWRkci5zX2FkZHI7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW4tPnNpbl9wb3J0KTsKKwkJYmVpc2NzaV9lcC0+aXBfdHlwZSA9IEJFMl9JUFY0OworCX0gZWxzZSBpZiAoZHN0X2FkZHItPnNhX2ZhbWlseSA9PSBQRl9JTkVUNikgeworCQlyZXEtPmlwX2FkZHJlc3MuaXBfdHlwZSA9IEJFMl9JUFY2OworCQltZW1jcHkoJnJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzLAorCQkgICAgICAgJmRhZGRyX2luNi0+c2luNl9hZGRyLmluNl91LnU2X2FkZHI4LCAxNik7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbjYtPnNpbjZfcG9ydCk7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW42LT5zaW42X3BvcnQpOworCQltZW1jcHkoJmJlaXNjc2lfZXAtPmRzdDZfYWRkciwKKwkJICAgICAgICZkYWRkcl9pbjYtPnNpbjZfYWRkci5pbjZfdS51Nl9hZGRyOCwgMTYpOworCQliZWlzY3NpX2VwLT5pcF90eXBlID0gQkUyX0lQVjY7CisJfSBlbHNleworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAidW5rbm93biBhZGRyIGZhbWlseSAlZFxuIiwKKwkJCSAgICAgZHN0X2FkZHItPnNhX2ZhbWlseSk7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KKwlyZXEtPmNpZCA9IGNpZDsKKwlyZXEtPmNxX2lkID0gcGh3aV9jb250ZXh0LT5iZV9jcS5pZDsKKwlyZXEtPmRlZnFfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+aGRyX3JpbmdfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+ZGF0YV9yaW5nX2lkID0gZGVmX2RhdGFfaWQ7CisJcmVxLT5kb19vZmZsb2FkID0gMTsKKwlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEubG8gPSBwdGVtcGxhdGVfYWRkcmVzcy0+bG87CisJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmhpID0gcHRlbXBsYXRlX2FkZHJlc3MtPmhpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CisJCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dCA9CisJCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJCWVwID0gcGhiYS0+ZXBfYXJyYXlbcHRjcGNuY3Rfb3V0LT5jaWRdOworCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IDA7CisJCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlODE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUdNVF8KKyNkZWZpbmUgX0JFSVNDU0lfTUdNVF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWFpbi5oIgorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19zZ2UgeworCXU4IHBhX2xvWzMyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwYV9oaVszMl07CQkvKiBkd29yZCAxICovCisJdTggbGVuZ3RoWzMyXTsJCS8qIERXT1JEIDIgKi8KK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBhbWFwX21jY19zZ2Ugc2dsWzE5XTsKKwkJdTggZW1iZWRkZWRbNTkgKiAzMl07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY193cmIgeworCXU4IGVtYmVkZGVkOwkJLyogRFdPUkQgMCAqLworCXU4IHJzdmQwWzJdOwkJLyogRFdPUkQgMCAqLworCXU4IHNnZV9jb3VudFs1XTsJLyogRFdPUkQgMCAqLworCXU4IHJzdmQxWzE2XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBzcGVjaWFsWzhdOwkJLyogRFdPUkQgMCAqLworCXU4IHBheWxvYWRfbGVuZ3RoWzMyXTsKKwl1OCB0YWdbNjRdOwkJLyogRFdPUkQgMiAqLworCXU4IHJzdmQyWzMyXTsJCS8qIERXT1JEIDQgKi8KKwlzdHJ1Y3QgYW1hcF9tY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3N0cnVjdCBtY2Nfc2dlIHsKKwl1MzIgcGFfbG87CQkvKiBkd29yZCAwICovCisJdTMyIHBhX2hpOwkJLyogZHdvcmQgMSAqLworCXUzMiBsZW5ndGg7CQkvKiBEV09SRCAyICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBtY2Nfc2dlIHNnbFsxOV07CisJCXUzMiBlbWJlZGRlZFs1OV07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1DQ19XUkJfRU1CRURERURfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBtY2Nfd3JiIHsKKwl1MzIgZHdbMF07CQkvKiBEV09SRCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOworCXUzMiB0YWdbMl07CQkvKiBEV09SRCAyICovCisJdTMyIHJzdmQyWzFdOwkJLyogRFdPUkQgNCAqLworCXN0cnVjdCBtY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSk7CitpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKTsKKwordW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZyk7Cit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9pY2RzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaWNkLCB1bnNpZ25lZCBpbnQgY2lkKTsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdW5zaWduZWQgaW50IHNlc3Npb25faGFuZGxlOworCXVuc2lnbmVkIHNob3J0IGNpZDsKKwl1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7CisJdW5zaWduZWQgc2hvcnQgY2xlYW51cF90eXBlOworCXVuc2lnbmVkIHNob3J0IHNhdmVfY2ZnOworfSBfX3BhY2tlZDsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHsKKwl1bnNpZ25lZCBpbnQgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgc2hvcnQgY2lkOworCXVuc2lnbmVkIHNob3J0IHVudXNlZDsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXMgeworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHJlc3BvbnNlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSB7CisJdW5zaWduZWQgc2hvcnQgaWNkOworCXVuc2lnbmVkIHNob3J0IGNpZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1bnNpZ25lZCBpbnQgcmVmX2hhbmRsZTsKKwl1bnNpZ25lZCBpbnQgaWNkX2NvdW50OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRfdGFibGUgdGFibGVbMTI4XTsKKwl1bnNpZ25lZCBzaG9ydCBjbGVhbnVwX3R5cGU7CisJdW5zaWduZWQgc2hvcnQgdW51c2VkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX291dCB7CisJdW5zaWduZWQgaW50IHJlZl9oYW5kbGU7CisJdW5zaWduZWQgaW50IGljZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaWNkX3N0YXR1c1sxMjhdOworfSBfX3BhY2tlZDsKKwordW5pb24gaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXMgeworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiByZXF1ZXN0OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19vdXQgcmVzcG9uc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9oYmFfYXR0cmlidXRlcyB7CisJdTggZmxhc2hyb21fdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IG1hbnVmYWN0dXJlcl9uYW1lWzMyXTsKKwl1MzIgc3VwcG9ydGVkX21vZGVzOworCXU4IHNlZXByb21fdmVyc2lvbl9sbzsKKwl1OCBzZWVwcm9tX3ZlcnNpb25faGk7CisJdTggcnN2ZDBbMl07CisJdTMyIGZ3X2NtZF9kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBlcF9md19kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBmdXR1cmVfcmVzZXJ2ZWRbMTJdOworCXUzMiBkZWZhdWx0X2V4dGVuZGVkX3RpbWVvdXQ7CisJdTggY29udHJvbGxlcl9tb2RlbF9udW1iZXJbMzJdOworCXU4IGNvbnRyb2xsZXJfZGVzY3JpcHRpb25bNjRdOworCXU4IGNvbnRyb2xsZXJfc2VyaWFsX251bWJlclszMl07CisJdTggaXBfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZpcm13YXJlX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBiaW9zX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCByZWRib290X3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBkcml2ZXJfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZ3X29uX2ZsYXNoX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1MzIgZnVuY3Rpb25hbGl0aWVzX3N1cHBvcnRlZDsKKwl1MTYgbWF4X2NkYmxlbmd0aDsKKwl1OCBhc2ljX3JldmlzaW9uOworCXU4IGdlbmVyYXRpb25hbF9ndWlkWzE2XTsKKwl1OCBoYmFfcG9ydF9jb3VudDsKKwl1MTYgZGVmYXVsdF9saW5rX2Rvd25fdGltZW91dDsKKwl1OCBpc2NzaV92ZXJfbWluX21heDsKKwl1OCBtdWx0aWZ1bmN0aW9uX2RldmljZTsKKwl1OCBjYWNoZV92YWxpZDsKKwl1OCBoYmFfc3RhdHVzOworCXU4IG1heF9kb21haW5zX3N1cHBvcnRlZDsKKwl1OCBwaHlfcG9ydDsKKwl1MzIgZmlybXdhcmVfcG9zdF9zdGF0dXM7CisJdTMyIGhiYV9tdHVbOF07CisJdTMyIGZ1dHVyZV91MzJbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgeworCXN0cnVjdCBtZ210X2hiYV9hdHRyaWJ1dGVzIGhiYV9hdHRyaWJzOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfc3ViX3ZlbmRvcl9pZDsKKwl1MTYgcGNpX3N1Yl9zeXN0ZW1faWQ7CisJdTggcGNpX2J1c19udW1iZXI7CisJdTggcGNpX2RldmljZV9udW1iZXI7CisJdTggcGNpX2Z1bmN0aW9uX251bWJlcjsKKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1NjQgdW5pcXVlX2lkZW50aWZpZXI7CisJdTggbmV0ZmlsdGVyczsKKwl1OCByc3ZkMFszXTsKKwl1OCBmdXR1cmVfdTMyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyBwYXJhbXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXNfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IG1nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHBhcmFtczsKK30gX19wYWNrZWQ7CisKKy8qIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCAqLworCisjZGVmaW5lIEdFVF9NR01UX0NPTlRST0xMRVJfV1MocGhiYSkgICAgKHBoYmEtPnBtZ210X3dzKQorCisvKiBNR01UIENNRCBmbGFncyAqLworCisjZGVmaW5lIE1HTVRfQ01ESF9GUkVFICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiAgLS0tIE1HTVRfRVJST1JfQ09ERVMgLS0tICovCisvKiAgRXJyb3IgQ29kZXMgcmV0dXJuZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgQ01EIHJlc3BvbnNlIGhlYWRlciAqLworI2RlZmluZSBNR01UX1NUQVRVU19TVUNDRVNTIDAJLyogVGhlIENNRCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMgKi8KKyNkZWZpbmUgTUdNVF9TVEFUVVNfRkFJTEVEIDEJLyogRXJyb3Igc3RhdHVzIGluIHRoZSBTdGF0dXMgZmllbGQgb2YgKi8KKwkJCQkvKiB0aGUgQ01EX1JFU1BPTlNFX0hFQURFUiAgKi8KKworI2RlZmluZSBJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGMsIHBhKSB7XAorICAgIHBhLT5sbyA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2xvOyAgXAorICAgIHBhLT5oaSA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpOyAgXAorfQorCitzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCB7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3MgKnNlc3M7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwl1bnNpZ25lZCBzaG9ydCBpcF90eXBlOworCWNoYXIgZHN0Nl9hZGRyW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CisJdW5zaWduZWQgbG9uZyBkc3RfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBlcF9jaWQ7CisJdW5zaWduZWQgaW50IGZ3X2hhbmRsZTsKKwl1MTYgZHN0X3RjcHBvcnQ7CisJdTE2IGNpZF92bGQ7Cit9OworCit1bnNpZ25lZCBjaGFyIG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOworCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDYwMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitvYmotJChDT05GSUdfU0NTSV9CRkFfRkMpIDo9IGJmYS5vCisKK2JmYS15IDo9IGJmYWQubyBiZmFkX2ludHIubyBiZmFkX29zLm8gYmZhZF9pbS5vIGJmYWRfYXR0ci5vIGJmYWRfZndpbWcubworCitiZmEteSArPSBiZmFfY29yZS5vIGJmYV9pb2MubyBiZmFfaW9jZmMubyBiZmFfZmN4cC5vIGJmYV9scHMubworYmZhLXkgKz0gYmZhX2h3X2NiLm8gYmZhX2h3X2N0Lm8gYmZhX2ludHIubyBiZmFfdGltZXIubyBiZmFfcnBvcnQubyAKK2JmYS15ICs9IGJmYV9mY3BvcnQubyBiZmFfcG9ydC5vIGJmYV91Zi5vIGJmYV9zZ3BnLm8gYmZhX21vZHVsZS5vIGJmYV9pb2ltLm8KK2JmYS15ICs9IGJmYV9pdG5pbS5vIGJmYV9mY3BpbS5vIGJmYV90c2tpbS5vIGJmYV9sb2cubyBiZmFfbG9nX21vZHVsZS5vCitiZmEteSArPSBiZmFfY3NkZWJ1Zy5vIGJmYV9zbS5vIHBsb2cubworCitiZmEteSArPSBmY2J1aWxkLm8gZmFicmljLm8gZmNwaW0ubyB2ZmFwaS5vIGZjcHRtLm8gYmZhX2Zjcy5vIGJmYV9mY3NfcG9ydC5vIAorYmZhLXkgKz0gYmZhX2Zjc191Zi5vIGJmYV9mY3NfbHBvcnQubyBmYWIubyBmZG1pLm8gbXMubyBucy5vIHNjbi5vIGxvb3AubworYmZhLXkgKz0gbHBvcnRfYXBpLm8gbjJuLm8gcnBvcnQubyBycG9ydF9hcGkubyBycG9ydF9mdHJzLm8gdnBvcnQubworCitjY2ZsYWdzLXkgOj0gLUkkKG9iaikgLUkkKG9iaikvaW5jbHVkZSAtSSQob2JqKS9pbmNsdWRlL2NuYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMzI2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYWxsYmFja19wcml2LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCit0eXBlZGVmIHZvaWQgICAgKCpiZmFfY2JfY2Jmbl90KSAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworCisvKioKKyAqIEdlbmVyaWMgQkZBIGNhbGxiYWNrIGVsZW1lbnQuCisgKi8KK3N0cnVjdCBiZmFfY2JfcWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOworCWJmYV9jYl9jYmZuX3QgIGNiZm47CisJYmZhX2Jvb2xlYW5fdCAgIG9uY2U7CisJdTMyCQlyc3ZkOworCXZvaWQgICAgICAgICAgICpjYmFyZzsKK307CisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlKF9fYmZhLCBfX2hjYl9xZSwgX19jYmZuLCBfX2NiYXJnKSBkbyB7CQlcCisJKF9faGNiX3FlKS0+Y2JmbiAgPSAoX19jYmZuKTsgICAgICBcCisJKF9faGNiX3FlKS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorCWxpc3RfYWRkX3RhaWwoJihfX2hjYl9xZSktPnFlLCAmKF9fYmZhKS0+Y29tcF9xKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9kZXF1ZXVlKF9faGNiX3FlKQlsaXN0X2RlbCgmKF9faGNiX3FlKS0+cWUpCisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlX29uY2UoX19iZmEsIF9faGNiX3FlLCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJXAorCShfX2hjYl9xZSktPmNiZm4gID0gKF9fY2Jmbik7ICAgICAgXAorCShfX2hjYl9xZSktPmNiYXJnID0gKF9fY2JhcmcpOyAgICAgIFwKKwlpZiAoIShfX2hjYl9xZSktPm9uY2UpIHsgICAgICBcCisJCWxpc3RfYWRkX3RhaWwoKF9faGNiX3FlKSwgJihfX2JmYSktPmNvbXBfcSk7ICAgICAgXAorCQkoX19oY2JfcWUpLT5vbmNlID0gQkZBX1RSVUU7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9xdWV1ZV9kb25lKF9faGNiX3FlKSBkbyB7CQkJCVwKKwkoX19oY2JfcWUpLT5vbmNlID0gQkZBX0ZBTFNFOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUwYzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY2JfaW9pbV9tYWNyb3MuaCBCRkEgSU9JTSBkcml2ZXIgaW50ZXJmYWNlIG1hY3Jvcy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18KKyNkZWZpbmUgX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorLyoKKyAqICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorICoKKyAqICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4gI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+ICNpbmNsdWRlCisgKiA8c2NzaS9zY3NpX2RldmljZS5oPiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyAqLworI2luY2x1ZGUgImJmYWRfaW1fY29tcGF0LmgiCisKKy8qCisgKiB0YXNrIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gRkNQLTIgRkNQX0NNTkQgSVUKKyAqLworI2RlZmluZSBTSU1QTEVfUSAgICAwCisjZGVmaW5lIEhFQURfT0ZfUSAgIDEKKyNkZWZpbmUgT1JERVJFRF9RICAgMgorI2RlZmluZSBBQ0FfUSAgICAgICA0CisjZGVmaW5lIFVOVEFHR0VEICAgIDUKKworc3RhdGljIGlubGluZSBsdW5fdAorYmZhZF9pbnRfdG9fbHVuKHUzMiBsdW5vKQoreworCXVuaW9uIHsKKwkJdTE2ICAgICAgICBzY3NpX2x1bls0XTsKKwkJbHVuX3QgICAgICAgICAgIGJmYV9sdW47CisJfSBsdW47CisKKwlsdW4uYmZhX2x1biAgICAgPSAwOworCWx1bi5zY3NpX2x1blswXSA9IGJmYV9vc19odG9ucyhsdW5vKTsKKworCXJldHVybiAobHVuLmJmYV9sdW4pOworfQorCisvKioKKyAqIEdldCBMVU4gZm9yIHRoZSBJL08gcmVxdWVzdAorICovCisjZGVmaW5lIGJmYV9jYl9pb2ltX2dldF9sdW4oX19kaW8pCVwKKwliZmFkX2ludF90b19sdW4oKChzdHJ1Y3Qgc2NzaV9jbW5kICopX19kaW8pLT5kZXZpY2UtPmx1bikKKworLyoqCisgKiBHZXQgQ0RCIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB1OCAqCitiZmFfY2JfaW9pbV9nZXRfY2RiKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKworCXJldHVybiAoKHU4ICopIGNtbmQtPmNtbmQpOworfQorCisvKioKKyAqIEdldCBJL08gZGlyZWN0aW9uIChyZWFkL3dyaXRlKSBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBmY3BfaW9kaXIKK2JmYV9jYl9pb2ltX2dldF9pb2RpcihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hZGlyOworCisJZG1hZGlyID0gY21uZC0+c2NfZGF0YV9kaXJlY3Rpb247CisJaWYgKGRtYWRpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm4gRkNQX0lPRElSX1dSSVRFOworCWVsc2UgaWYgKGRtYWRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCXJldHVybiBGQ1BfSU9ESVJfUkVBRDsKKwllbHNlCisJCXJldHVybiBGQ1BfSU9ESVJfTk9ORTsKK30KKworLyoqCisgKiBHZXQgSU8gc2l6ZSBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfY2JfaW9pbV9nZXRfc2l6ZShzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKHNjc2lfYnVmZmxlbihjbW5kKSk7Cit9CisKKy8qKgorICogR2V0IHRpbWVvdXQgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGltZW91dChzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJLyoKKwkgKiBUQkQ6IG5lZWQgYSB0aW1lb3V0IGZvciBzY3NpIHBhc3N0aHJ1CisJICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCBTRyBlbGVtZW50IGZvciB0aGUgSS9PIHJlcXVlc3QgZ2l2ZW4gdGhlIFNHIGVsZW1lbnQgaW5kZXgKKyAqLworc3RhdGljIGlubGluZSB1bmlvbiBiZmlfYWRkcl91CitiZmFfY2JfaW9pbV9nZXRfc2dhZGRyKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXU2NCAgICAgICAgYWRkcjsKKworCXNnZSA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY3NpX3NnbGlzdChjbW5kKSArIHNnZWlkOworCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZ2UpOworCisJcmV0dXJuICgqKHVuaW9uIGJmaV9hZGRyX3UgKikgJmFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NiX2lvaW1fZ2V0X3NnbGVuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXUzMiAgICAgICAgbGVuOworCisJc2dlID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjc2lfc2dsaXN0KGNtbmQpICsgc2dlaWQ7CisJbGVuID0gc2dfZG1hX2xlbihzZ2UpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBHZXQgQ29tbWFuZCBSZWZlcmVuY2UgTnVtYmVyIGZvciB0aGUgSS9PIHJlcXVlc3QuIDAgaWYgbm9uZS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NybihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHZXQgU0FNLTMgcHJpb3JpdHkgZm9yIHRoZSBJL08gcmVxdWVzdC4gMCBpcyBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IHRhc2sgYXR0cmlidXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0LiBEZWZhdWx0IGlzIEZDUF9UQVNLX0FUVFJfU0lNUExFKDApLgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGFza2F0dHIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXU4ICAgICAgICAgdGFza19hdHRyID0gVU5UQUdHRUQ7CisKKwlpZiAoY21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJCXN3aXRjaCAoY21uZC0+dGFnKSB7CisJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6CisJCQl0YXNrX2F0dHIgPSBIRUFEX09GX1E7CisJCQlicmVhazsKKwkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKKwkJCXRhc2tfYXR0ciA9IE9SREVSRURfUTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGFza19hdHRyID0gU0lNUExFX1E7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB0YXNrX2F0dHI7Cit9CisKKy8qKgorICogR2V0IENEQiBsZW5ndGggaW4gYnl0ZXMgZm9yIHRoZSBJL08gcmVxdWVzdC4gRGVmYXVsdCBpcyBGQ1BfQ01ORF9DREJfTEVOKDE2KS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NkYmxlbihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKGNtbmQtPmNtZF9sZW4pOworfQorCisKKworI2VuZGlmIC8qIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2VlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5NTljMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2NlZS5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8Y2VlL2JmYV9jZWUuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NlZS5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y25hL2JmYV9jbmFfdHJjbW9kLmg+CisKK0JGQV9UUkNfRklMRShDTkEsIENFRSk7CisKKyNkZWZpbmUgYmZhX2lvY19wb3J0aWQoX19pb2MpICgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfbHB1aWQoX19hcmcpIGJmYV9pb2NfcG9ydGlkKCYoX19hcmcpLT5pb2MpCisKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9sbGRwX2NmZyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zICpsbGRwX2NmZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfZGNiY3hfc3RhdHMoc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zCisJCQkJCSAgICpkY2JjeF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MKKwkJCQkJICAqbGxkcF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICpjZmdfc3RhdHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2NlZV9jZmcodm9pZCAqYnVmZmVyKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9jZWVfc3RhdHModm9pZCAqYnVmZmVyKTsKKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyh2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqY2VlX3N0YXRzID0gYnVmZmVyOworCWJmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKCZjZWVfc3RhdHMtPmRjYnhfc3RhdHMpOworCWJmYV9jZWVfZm9ybWF0X2xsZHBfc3RhdHMoJmNlZV9zdGF0cy0+bGxkcF9zdGF0cyk7CisJYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKCZjZWVfc3RhdHMtPmNmZ19zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmNlZV9jZmcgPSBidWZmZXI7CisJYmZhX2NlZV9mb3JtYXRfbGxkcF9jZmcoJmNlZV9jZmctPmxsZHBfcmVtb3RlKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKHN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyAqZGNiY3hfc3RhdHMpCit7CisJZGNiY3hfc3RhdHMtPnN1YnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5zdWJ0bHZzX3VucmVjb2duaXplZCk7CisJZGNiY3hfc3RhdHMtPm5lZ290aWF0aW9uX2ZhaWxlZCA9CisJCWJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+bmVnb3RpYXRpb25fZmFpbGVkKTsKKwlkY2JjeF9zdGF0cy0+cmVtb3RlX2NmZ19jaGFuZ2VkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5yZW1vdGVfY2ZnX2NoYW5nZWQpOworCWRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkKTsKKwlkY2JjeF9zdGF0cy0+dGx2c19pbnZhbGlkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX2ludmFsaWQpOworCWRjYmN4X3N0YXRzLT5zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+c2Vxbm8pOworCWRjYmN4X3N0YXRzLT5hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+YWNrbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfc2Vxbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfYWNrbm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgKmxsZHBfc3RhdHMpCit7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2FnZWRfb3V0ID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19hZ2VkX291dCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2Rpc2NhcmRlZCA9CisJCWJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfZGlzY2FyZGVkKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfaW5fZXJyb3IgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX2luX2Vycm9yKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCk7CisJbGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQpOworCWxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NmZ19zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAqY2ZnX3N0YXRzKQoreworCWNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duID0gYmZhX29zX250b2hsKGNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duKTsKKwljZmdfc3RhdHMtPmNlZV9zdGF0dXNfdXAgPSBiZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX3VwKTsKKwljZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCk7CisJY2ZnX3N0YXRzLT5yZWN2ZF9pbnZhbGlkX2NmZyA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPnJlY3ZkX2ludmFsaWRfY2ZnKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2xsZHBfY2ZnKHN0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgKmxsZHBfY2ZnKQoreworCWxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsID0gYmZhX29zX250b2hzKGxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsKTsKKwlsbGRwX2NmZy0+ZW5hYmxlZF9zeXN0ZW1fY2FwID0KKwkJYmZhX29zX250b2hzKGxsZHBfY2ZnLT5lbmFibGVkX3N5c3RlbV9jYXApOworfQorCisvKioKKyAqIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLworc3RhdGljICAgICAgICAgIHUzMgorYmZhX2NlZV9hdHRyX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfc3RhdHNfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9jZWVfc3RhdHNfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9jZWVfc3RhdHNfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHJfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfY2VlX2dldF9hdHRyX2lzcihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJY2VlLT5nZXRfYXR0cl9zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCAqcHJvY2VzcworCQkgKiBpdC4KKwkJICovCisJCW1lbWNweShjZWUtPmF0dHIsIGNlZS0+YXR0cl9kbWEua3ZhLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcykpOworCQliZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKGNlZS0+YXR0cik7CisJfQorCWNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlpZiAoY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4pIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQljZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbihjZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcsIHN0YXR1cyk7CisJfQorCWJmYV90cmMoY2VlLCAwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX2NlZV9nZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPmdldF9zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCBwcm9jZXNzCisJCSAqIGl0LgorCQkgKi8KKwkJbWVtY3B5KGNlZS0+c3RhdHMsIGNlZS0+c3RhdHNfZG1hLmt2YSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zKSk7CisJCWJmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyhjZWUtPnN0YXRzKTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbikgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiYXJnLCBzdGF0dXMpOworCX0KKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cl9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9jZWVfcmVzZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJaWYgKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKQorCQljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JhcmcsIHN0YXR1cyk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfY2VlX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gKGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkgKyBiZmFfY2VlX3N0YXRzX21lbWluZm8oKSk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1fY2xhaW0oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSBDRUUgbW9kdWxlIHBvaW50ZXIKKyAqIAkgICAgICBkbWFfa3ZhIEtlcm5lbCBWaXJ0dWFsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqIAkgICAgICBkbWFfcGEgIFBoeXNpY2FsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9tZW1fY2xhaW0oc3RydWN0IGJmYV9jZWVfcyAqY2VlLCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwljZWUtPmF0dHJfZG1hLmt2YSA9IGRtYV9rdmE7CisJY2VlLT5hdHRyX2RtYS5wYSA9IGRtYV9wYTsKKwljZWUtPnN0YXRzX2RtYS5rdmEgPSBkbWFfa3ZhICsgYmZhX2NlZV9hdHRyX21lbWluZm8oKTsKKwljZWUtPnN0YXRzX2RtYS5wYSA9IGRtYV9wYSArIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCk7CisJY2VlLT5hdHRyID0gKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqKWRtYV9rdmE7CisJY2VlLT5zdGF0cyA9CisJCShzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICopKGRtYV9rdmEgKyBiZmFfY2VlX2F0dHJfbWVtaW5mbygpKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgYXR0cmlidXRlcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X2F0dHIoc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHIsCisJCSBiZmFfY2VlX2dldF9hdHRyX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9hdHRyX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKwljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfVFJVRTsKKwljbWQgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICopY2VlLT5nZXRfY2ZnX21iLm1zZzsKKwljZWUtPmF0dHIgPSBhdHRyOworCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuID0gY2JmbjsKKwljZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcgPSBjYmFyZzsKKwliZmlfaDJpX3NldChjbWQtPm1oLCBCRklfTUNfQ0VFLCBCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGNlZS0+aW9jKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjbWQtPmRtYV9hZGRyLCBjZWUtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPmdldF9jZmdfbWIpOworCWJmYV90cmMoY2VlLCAwKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgc3RhdGlzdGljcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHMsCisJCSAgYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqY21kOworCisJYmZhX2Fzc2VydCgoY2VlICE9IE5VTEwpICYmIChjZWUtPmlvYyAhPSBOVUxMKSk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKiljZWUtPmdldF9zdGF0c19tYi5tc2c7CisJY2VlLT5zdGF0cyA9IHN0YXRzOworCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbiA9IGNiZm47CisJY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChjZWUtPmlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY21kLT5kbWFfYWRkciwgY2VlLT5zdGF0c19kbWEucGEpOworCWJmYV9pb2NfbWJveF9xdWV1ZShjZWUtPmlvYywgJmNlZS0+Z2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfY2VlX3Jlc2V0X3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfY2VlX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChjZWUtPmlvYykpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCWNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zICopY2VlLT5yZXNldF9zdGF0c19tYi5tc2c7CisJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4gPSBjYmZuOworCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTLAorCQkgICAgYmZhX2lvY19wb3J0aWQoY2VlLT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPnJlc2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX2NlZV9pc3JzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCisKK3ZvaWQKK2JmYV9jZWVfaXNyKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKm1zZzsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgKmdldF9yc3A7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlID0gKHN0cnVjdCBiZmFfY2VlX3MgKiljYmFyZzsKKwltc2cgPSAodW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKiltOworCWdldF9yc3AgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICopbTsKKwliZmFfdHJjKGNlZSwgbXNnLT5taC5tc2dfaWQpOworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9DRUVfSTJIX0dFVF9DRkdfUlNQOgorCQliZmFfdHJjKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJmYV9jZWVfZ2V0X2F0dHJfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUDoKKwkJYmZhX2NlZV9nZXRfc3RhdHNfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfUkVTRVRfU1RBVFNfUlNQOgorCQliZmFfY2VlX3Jlc2V0X3N0YXRzX2lzcihjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfY2VlX2hiZmFpbCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworCit2b2lkCitiZmFfY2VlX2hiZmFpbCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlOworCWNlZSA9IChzdHJ1Y3QgYmZhX2NlZV9zICopYXJnOworCisJaWYgKGNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPmdldF9hdHRyX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbikgeworCQkJY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4oY2VlLT5jYmZuLmdldF9hdHRyX2NiYXJnLAorCQkJCQkJQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWNlZS0+Z2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCQlpZiAoY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKSB7CisJCQljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZywKKwkJCQkJCSBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCX0KKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbikgeworCQkJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiYXJnLAorCQkJCQkJICAgQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorfQorCisvKioKKyAqIGJmYV9jZWVfYXR0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGlvYyAtIFBvaW50ZXIgdG8gdGhlIGlvYyBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgZGV2IC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgVGhlIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgbWJveCBJU1IgZnVuY3Rpb25zIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludGVyIGFzIG9uZSBvZiB0aGUgcGFyYW1ldGVycy4KKyAqICAgICAgICAgICAgdHJjbW9kIC0KKyAqICAgICAgICAgICAgbG9nbW9kIC0KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9hdHRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkgICAgICAgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwliZmFfYXNzZXJ0KGNlZSAhPSBOVUxMKTsKKwljZWUtPmRldiA9IGRldjsKKwljZWUtPnRyY21vZCA9IHRyY21vZDsKKwljZWUtPmxvZ21vZCA9IGxvZ21vZDsKKwljZWUtPmlvYyA9IGlvYzsKKworCWJmYV9pb2NfbWJveF9yZWdpc3IoY2VlLT5pb2MsIEJGSV9NQ19DRUUsIGJmYV9jZWVfaXNyLCBjZWUpOworCWJmYV9pb2NfaGJmYWlsX2luaXQoJmNlZS0+aGJmYWlsLCBiZmFfY2VlX2hiZmFpbCwgY2VlKTsKKwliZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihjZWUtPmlvYywgJmNlZS0+aGJmYWlsKTsKKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9kZXRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9kZXRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlKQoreworCS8qCisJICogRm9yIG5vdywganVzdCBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGlvY3RsIHBlbmRpbmcgYW5kIG1hcmsgdGhhdCBhcworCSAqIGZhaWxlZD8KKwkgKi8KKwkvKiBiZmFfY2VlX2hiZmFpbChjZWUpOyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTJkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisKKyNkZWZpbmUgREVGX0NGR19OVU1fRkFCUklDUyAgICAgICAgIDEKKyNkZWZpbmUgREVGX0NGR19OVU1fTFBPUlRTICAgICAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9DUVMgICAgICAgICAgICAgNAorI2RlZmluZSBERUZfQ0ZHX05VTV9JT0lNX1JFUVMgICAgICAgKEJGQV9JT0lNX01BWCkKKyNkZWZpbmUgREVGX0NGR19OVU1fVFNLSU1fUkVRUyAgICAgIDEyOAorI2RlZmluZSBERUZfQ0ZHX05VTV9GQ1hQX1JFUVMgICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fVUZfQlVGUyAgICAgICAgIDY0CisjZGVmaW5lIERFRl9DRkdfTlVNX1JQT1JUUyAgICAgICAgICAxMDI0CisjZGVmaW5lIERFRl9DRkdfTlVNX0lUTklNUyAgICAgICAgICAoREVGX0NGR19OVU1fUlBPUlRTKQorI2RlZmluZSBERUZfQ0ZHX05VTV9USU5TICAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgREVGX0NGR19OVU1fU0dQR1MgICAgICAgICAgIDIwNDgKKyNkZWZpbmUgREVGX0NGR19OVU1fUkVRUV9FTEVNUyAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9SU1BRX0VMRU1TICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fU0JPT1RfVEdUUyAgICAgIDE2CisjZGVmaW5lIERFRl9DRkdfTlVNX1NCT09UX0xVTlMgICAgICAxNgorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgb2YgdGhlIEJGQSBsaWJyYXJ5LgorICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJmYV9hdHRhY2goKSB0byBnZXQgdGhlCisgKiBtZW1vcnkgcmVxdWlyZWQgb2YgdGhlIEJGQSBsYXllciBmb3IgYSBnaXZlbiBkcml2ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGNhbGwgd2lsbCBmYWlsLCBpZiB0aGUgY2FwIGlzIG91dCBvZiByYW5nZSBjb21wYXJlZCB0byBwcmUtZGVmaW5lZAorICogdmFsdWVzIHdpdGhpbiB0aGUgQkZBIGxpYnJhcnkKKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIAlwb2ludGVyIHRvIGJmYV9pb2NfY2ZnX3QuIERyaXZlciBsYXllciBzaG91bGQgaW5kaWNhdGUKKyAqIAkJCWl0cyBjb25maWd1cmF0aW9uIGluIHRoaXMgc3RydWN0dXJlLgorICoJCQlUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgY2FuIGJlCisgKgkJCWZldGNoZWQgdXNpbmcgYmZhX2NmZ19nZXRfZGVmYXVsdCgpIEFQSS4KKyAqCisgKiAJCQlJZiBjYXAncyBib3VuZGFyeSBjaGVjayBmYWlscywgdGhlIGxpYnJhcnkgd2lsbCB1c2UKKyAqCQkJdGhlIGRlZmF1bHQgYmZhX2NhcF90IHZhbHVlcyAoYW5kIGxvZyBhIHdhcm5pbmcgbXNnKS4KKyAqCisgKiBAcGFyYW1bb3V0XSBtZW1pbmZvIC0gcG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGlzIGNvbnRlbnQKKyAqIAkJCWluZGljYXRlcyB0aGUgbWVtb3J5IHR5cGUgKHNlZSBiZmFfbWVtX3R5cGVfdCkgYW5kCisgKgkJCWFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQuCisgKgorICoJCQlEcml2ZXIgc2hvdWxkIGFsbG9jYXRlIHRoZSBtZW1vcnksIHBvcHVsYXRlIHRoZQorICoJCQlzdGFydGluZyBhZGRyZXNzIGZvciBlYWNoIGJsb2NrIGFuZCBwcm92aWRlIHRoZSBzYW1lCisgKgkJCXN0cnVjdHVyZSBhcyBpbnB1dCBwYXJhbWV0ZXIgdG8gYmZhX2F0dGFjaCgpIGNhbGwuCisgKgorICogQHJldHVybiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczogQG5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKQoreworCWludCAgICAgICAgICAgICBpOworCXUzMiAgICAgICAga21fbGVuID0gMCwgZG1fbGVuID0gMDsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwliZmFfb3NfbWVtc2V0KCh2b2lkICopbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7CisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ubWVtX3R5cGUgPQorCQlCRkFfTUVNX1RZUEVfS1ZBOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV90eXBlID0KKwkJQkZBX01FTV9UWVBFX0RNQTsKKworCWJmYV9pb2NmY19tZW1pbmZvKGNmZywgJmttX2xlbiwgJmRtX2xlbik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+bWVtaW5mbyhjZmcsICZrbV9sZW4sICZkbV9sZW4pOworCisKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9LVkEgLSAxXS5tZW1fbGVuID0ga21fbGVuOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV9sZW4gPSBkbV9sZW47Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZG8gYXR0YWNoIHRoZSBkcml2ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgQkZBCisgKiBsaWJyYXJ5LiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRyaWdnZXIgYW55IEhXIGluaXRpYWxpemF0aW9uCisgKiBwcm9jZXNzICh3aGljaCB3aWxsIGJlIGRvbmUgaW4gYmZhX2luaXQoKSBjYWxsKQorICoKKyAqIFRoaXMgY2FsbCB3aWxsIGZhaWwsIGlmIHRoZSBjYXAgaXMgb3V0IG9mIHJhbmdlIGNvbXBhcmVkIHRvCisgKiBwcmUtZGVmaW5lZCB2YWx1ZXMgd2l0aGluIHRoZSBCRkEgbGlicmFyeQorICoKKyAqIEBwYXJhbVtvdXRdCWJmYQlQb2ludGVyIHRvIGJmYV90LgorICogQHBhcmFtW2luXQliZmFkIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzIElPQyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbVtpbl0JY2ZnCVBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdC4gU2hvdWxkIGJlIHNhbWUgc3RydWN0dXJlCisgKiAJCQl0aGF0IHdhcyB1c2VkIGluIGJmYV9jZmdfZ2V0X21lbWluZm8oKS4KKyAqIEBwYXJhbVtpbl0gCW1lbWluZm8gUG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGUgZHJpdmVyIHNob3VsZAorICogCQkJdXNlIHRoZSBiZmFfY2ZnX2dldF9tZW1pbmZvKCkgY2FsbCB0bworICogCQkJZmluZCB0aGUgbWVtb3J5IGJsb2NrcyByZXF1aXJlZCwgYWxsb2NhdGUgdGhlCisgKiAJCQlyZXF1aXJlZCBtZW1vcnkgYW5kIHByb3ZpZGUgdGhlIHN0YXJ0aW5nIGFkZHJlc3Nlcy4KKyAqIEBwYXJhbVtpbl0gCXBjaWRldglwb2ludGVyIHRvIHN0cnVjdCBiZmFfcGNpZGV2X3MKKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICoKKyAqLwordm9pZAorYmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCSAgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyAqbWVsZW07CisKKwliZmEtPmZjcyA9IEJGQV9GQUxTRTsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwkvKioKKwkgKiBpbml0aWFsaXplIGFsbCBtZW1vcnkgcG9pbnRlcnMgZm9yIGl0ZXJhdGl2ZSBhbGxvY2F0aW9uCisJICovCisJZm9yIChpID0gMDsgaSA8IEJGQV9NRU1fVFlQRV9NQVg7IGkrKykgeworCQltZWxlbSA9IG1lbWluZm8tPm1lbWluZm8gKyBpOworCQltZWxlbS0+a3ZhX2N1cnAgPSBtZWxlbS0+a3ZhOworCQltZWxlbS0+ZG1hX2N1cnAgPSBtZWxlbS0+ZG1hOworCX0KKworCWJmYV9pb2NmY19hdHRhY2goYmZhLCBiZmFkLCBjZmcsIG1lbWluZm8sIHBjaWRldik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+YXR0YWNoKGJmYSwgYmZhZCwgY2ZnLCBtZW1pbmZvLCBwY2lkZXYpOworCit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgQkZBIElPQy4gSU9DIHNob3VsZCBiZSBzdG9wcGVkIChieQorICogY2FsbGluZyBiZmFfc3RvcCgpKSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhIC0gcG9pbnRlciB0byBiZmFfdC4KKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmRldGFjaChiZmEpOworCisJYmZhX2lvY2ZjX2RldGFjaChiZmEpOworfQorCisKK3ZvaWQKK2JmYV9pbml0X3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwliZmEtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfaW5pdF9sb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJYmZhLT5sb2dtID0gbG9nbW9kOworfQorCisKK3ZvaWQKK2JmYV9pbml0X2FlbihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCWJmYS0+YWVuID0gYWVuOworfQorCit2b2lkCitiZmFfaW5pdF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwliZmEtPnBsb2cgPSBwbG9nOworfQorCisvKioKKyAqIEluaXRpYWxpemUgSU9DLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHksIHdoZW4gdGhlIElPQyBpbml0aWFsaXphdGlvbiBpcworICogY29tcGxldGVkLCB0aGUgYmZhX2NiX2luaXQoKSB3aWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQlpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgZHJpdmVyIHNob3VsZCByZWdpc3RlciB0aGUgaW50ZXJydXB0IHNlcnZpY2UKKyAqIHJvdXRpbmUocykgYW5kIGVuYWJsZSB0aGUgZGV2aWNlIGludGVycnVwdHMuIElmIHRoaXMgaXMgbm90IGRvbmUsCisgKiBiZmFfY2JfaW5pdCgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZAorICovCit2b2lkCitiZmFfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jZmNfaW5pdChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYXRlIHRoZSBJT0MgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NmY19zdGFydChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1aWVzZSB0aGUgSU9DLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LAorICogd2hlbiB0aGUgSU9DIGlzIGFjdHVhbGx5IHN0b3BwZWQsIHRoZSBiZmFfY2Jfc3RvcCgpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0gCWJmYSAtIHBvaW50ZXIgdG8gYmZhX3QuCisgKgorICogQHJldHVybiBOb25lCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqIGJmYV9jYl9zdG9wKCkgY291bGQgYmUgY2FsbGVkIGJlZm9yZSBvciBhZnRlciBiZmFfc3RvcCgpIHJldHVybnMuCisgKgorICogQG5vdGUKKyAqIEluIGNhc2Ugb2YgYW55IGZhaWx1cmUsIHdlIGNvdWxkIGhhbmRsZSBpdCBhdXRvbWF0aWNhbGx5IGJ5IGRvaW5nIGEKKyAqIHJlc2V0IGFuZCB0aGVuIHN1Y2NlZWQgdGhlIGJmYV9zdG9wKCkgY2FsbC4KKyAqLwordm9pZAorYmZhX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY2ZjX3N0b3AoYmZhKTsKK30KKwordm9pZAorYmZhX2NvbXBfZGVxKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJSU5JVF9MSVNUX0hFQUQoY29tcF9xKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmYS0+Y29tcF9xLCBjb21wX3EpOworfQorCit2b2lkCitiZmFfY29tcF9wcm9jZXNzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZW47CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCBjb21wX3EpIHsKKwkJaGNiX3FlID0gKHN0cnVjdCBiZmFfY2JfcWVfcyAqKSBxZTsKKwkJaGNiX3FlLT5jYmZuKGhjYl9xZS0+Y2JhcmcsIEJGQV9UUlVFKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9jb21wX2ZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCXdoaWxlICghbGlzdF9lbXB0eShjb21wX3EpKSB7CisJCWJmYV9xX2RlcShjb21wX3EsICZxZSk7CisJCWhjYl9xZSA9IChzdHJ1Y3QgYmZhX2NiX3FlX3MgKikgcWU7CisJCWhjYl9xZS0+Y2JmbihoY2JfcWUtPmNiYXJnLCBCRkFfRkFMU0UpOworCX0KK30KKwordm9pZAorYmZhX2F0dGFjaF9mY3Moc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5mY3MgPSBCRkFfVFJVRTsKK30KKworLyoqCisgKiBQZXJpb2RpYyB0aW1lciBoZWFydCBiZWF0IGZyb20gZHJpdmVyCisgKi8KK3ZvaWQKK2JmYV90aW1lcl90aWNrKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV90aW1lcl9iZWF0KCZiZmEtPnRpbWVyX21vZCk7Cit9CisKKyNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKKy8qKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIFBDSSB2ZW5kb3IvZGV2aWNlIGlkIGxpc3RzIHN1cHBvcnRlZCBieSB0aGlzCisgKiBCRkEgaW5zdGFuY2UuCisgKi8KK3ZvaWQKK2JmYV9nZXRfcGNpaWRzKHN0cnVjdCBiZmFfcGNpaWRfcyAqKnBjaWlkcywgaW50ICpucGNpaWRzKQoreworCXN0YXRpYyBzdHJ1Y3QgYmZhX3BjaWlkX3MgX19wY2lpZHNbXSA9IHsKKwkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlB9LAorCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUH0sCisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9DVH0sCisJfTsKKworCSpucGNpaWRzID0gc2l6ZW9mKF9fcGNpaWRzKSAvIHNpemVvZihfX3BjaWlkc1swXSk7CisJKnBjaWlkcyA9IF9fcGNpaWRzOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBkZWZhdWx0IHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgdmFsdWUgKGNvbXBpbGVkCisgKiBpbnRvIEJGQSBsYXllcikuIFRoZSBPUyBkcml2ZXIgY2FuIHRoZW4gdHVybiBiYWNrIGFuZCBvdmVyd3JpdGUgZW50cmllcyB0aGF0CisgKiBoYXZlIGJlZW4gY29uZmlndXJlZCBieSB0aGUgdXNlci4KKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIHBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdAorICoKKyAqIEByZXR1cm4KKyAqCXZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfZGVmYXVsdChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJY2ZnLT5md2NmZy5udW1fZmFicmljcyA9IERFRl9DRkdfTlVNX0ZBQlJJQ1M7CisJY2ZnLT5md2NmZy5udW1fbHBvcnRzID0gREVGX0NGR19OVU1fTFBPUlRTOworCWNmZy0+ZndjZmcubnVtX3Jwb3J0cyA9IERFRl9DRkdfTlVNX1JQT1JUUzsKKwljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBERUZfQ0ZHX05VTV9JT0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IERFRl9DRkdfTlVNX1RTS0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzID0gREVGX0NGR19OVU1fRkNYUF9SRVFTOworCWNmZy0+ZndjZmcubnVtX3VmX2J1ZnMgPSBERUZfQ0ZHX05VTV9VRl9CVUZTOworCWNmZy0+ZndjZmcubnVtX2NxcyA9IERFRl9DRkdfTlVNX0NRUzsKKworCWNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zID0gREVGX0NGR19OVU1fUkVRUV9FTEVNUzsKKwljZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IERFRl9DRkdfTlVNX1JTUFFfRUxFTVM7CisJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gREVGX0NGR19OVU1fU0dQR1M7CisJY2ZnLT5kcnZjZmcubnVtX3Nib290X3RndHMgPSBERUZfQ0ZHX05VTV9TQk9PVF9UR1RTOworCWNmZy0+ZHJ2Y2ZnLm51bV9zYm9vdF9sdW5zID0gREVGX0NGR19OVU1fU0JPT1RfTFVOUzsKKwljZmctPmRydmNmZy5wYXRoX3RvdiA9IEJGQV9GQ1BJTV9QQVRIVE9WX0RFRjsKKwljZmctPmRydmNmZy5pb2NfcmVjb3ZlciA9IEJGQV9GQUxTRTsKKwljZmctPmRydmNmZy5kZWxheV9jb21wID0gQkZBX0ZBTFNFOworCit9CisKK3ZvaWQKK2JmYV9jZmdfZ2V0X21pbihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJYmZhX2NmZ19nZXRfZGVmYXVsdChjZmcpOworCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAgID0gQkZBX0lPSU1fTUlOOworCWNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgID0gQkZBX1RTS0lNX01JTjsKKwljZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgICA9IEJGQV9GQ1hQX01JTjsKKwljZmctPmZ3Y2ZnLm51bV91Zl9idWZzICAgICA9IEJGQV9VRl9NSU47CisJY2ZnLT5md2NmZy5udW1fcnBvcnRzICAgICAgPSBCRkFfUlBPUlRfTUlOOworCisJY2ZnLT5kcnZjZmcubnVtX3NncGdzICAgICAgPSBCRkFfU0dQR19NSU47CisJY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgPSBCRkFfUkVRUV9ORUxFTVNfTUlOOworCWNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gQkZBX1JTUFFfTkVMRU1TX01JTjsKKwljZmctPmRydmNmZy5taW5fY2ZnICAgICAgICA9IEJGQV9UUlVFOworfQorCit2b2lkCitiZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYXR0cigmYmZhLT5pb2MsIGlvY19hdHRyKTsKK30KKworLyoqCisgKiBSZXRyaWV2ZSBmaXJtd2FyZSB0cmFjZSBpbmZvcm1hdGlvbiBvbiBJT0MgZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwlyZXR1cm4gYmZhX2lvY19kZWJ1Z19md3NhdmUoJmJmYS0+aW9jLCB0cmNkYXRhLCB0cmNsZW4pOworfQorCisvKioKKyAqIAkJRmV0Y2ggZmlybXdhcmUgdHJhY2UgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dCQliZmEJCQlCRkEgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdCQl0cmNkYXRhCQlGaXJtd2FyZSB0cmFjZSBidWZmZXIKKyAqIEBwYXJhbVtpbixvdXRdCXRyY2xlbgkJRmlybXdhcmUgdHJhY2UgYnVmZmVyIGxlbgorICoKKyAqIEByZXR2YWwgQkZBX1NUQVRVU19PSwkJCUZpcm13YXJlIHRyYWNlIGlzIGZldGNoZWQuCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUwlGaXJtd2FyZSB0cmFjZSBmZXRjaCBpcyBpbiBwcm9ncmVzcy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCXJldHVybiBiZmFfaW9jX2RlYnVnX2Z3dHJjKCZiZmEtPmlvYywgdHJjZGF0YSwgdHJjbGVuKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzFkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jc2RlYnVnLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisKKy8qKgorICogIGNzX2RlYnVnX2FwaQorICovCisKKwordm9pZAorYmZhX3BhbmljKGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpwYW5pY3N0cikKK3sKKwliZmFfbG9nKE5VTEwsIEJGQV9MT0dfSEFMX0FTU0VSVCwgZmlsZSwgbGluZSwgcGFuaWNzdHIpOworCWJmYV9vc19wYW5pYygpOworfQorCit2b2lkCitiZmFfc21fcGFuaWMoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20sIGludCBsaW5lLCBjaGFyICpmaWxlLCBpbnQgZXZlbnQpCit7CisJYmZhX2xvZyhsb2dtLCBCRkFfTE9HX0hBTF9TTV9BU1NFUlQsIGZpbGUsIGxpbmUsIGV2ZW50KTsKKwliZmFfb3NfcGFuaWMoKTsKK30KKworaW50CitiZmFfcV9pc19vbl9xX2Z1bmMoc3RydWN0IGxpc3RfaGVhZCAqcSwgc3RydWN0IGxpc3RfaGVhZCAqcWUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnRxZTsKKworCXRxZSA9IGJmYV9xX25leHQocSk7CisJd2hpbGUgKHRxZSAhPSBxKSB7CisJCWlmICh0cWUgPT0gcWUpCisJCQlyZXR1cm4gKDEpOworCQl0cWUgPSBiZmFfcV9uZXh0KHRxZSk7CisJCWlmICh0cWUgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWJhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNQSU0pOworQkZBX01PRFVMRShmY3BpbSk7CisKKy8qKgorICogIGhhbF9mY3BpbV9tb2QgQkZBIEZDUCBJbml0aWF0b3IgTW9kZSBtb2R1bGUKKyAqLworCisvKioKKyAqIAkJQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRkNQKGltKSBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwliZmFfaXRuaW1fbWVtaW5mbyhjZmcsIGttX2xlbiwgZG1fbGVuKTsKKworCS8qKgorCSAqIElPIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPCBCRkFfSU9JTV9NSU4pCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01JTjsKKwllbHNlIGlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPiBCRkFfSU9JTV9NQVgpCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01BWDsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzICoKKwkgIChzaXplb2Yoc3RydWN0IGJmYV9pb2ltX3MpICsgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zcF9zKSk7CisKKwkqZG1fbGVuICs9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAqIEJGSV9JT0lNX1NOU0xFTjsKKworCS8qKgorCSAqIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzIDwgQkZBX1RTS0lNX01JTikKKwkJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IEJGQV9UU0tJTV9NSU47CisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzICogc2l6ZW9mKHN0cnVjdCBiZmFfdHNraW1fcyk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92KTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fcnBvcnRzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyk7CisKKwlmY3BpbS0+YmZhICAgICAgICAgICAgPSBiZmE7CisJZmNwaW0tPm51bV9pdG5pbXMgICAgID0gY2ZnLT5md2NmZy5udW1fcnBvcnRzOworCWZjcGltLT5udW1faW9pbV9yZXFzICA9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwlmY3BpbS0+bnVtX3Rza2ltX3JlcXMgPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzOworCWZjcGltLT5wYXRoX3RvdiAgICAgICA9IGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92OworCWZjcGltLT5kZWxheV9jb21wCSAgPSBjZmctPmRydmNmZy5kZWxheV9jb21wOworCisJYmZhX2l0bmltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX3Rza2ltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX2lvaW1fYXR0YWNoKGZjcGltLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfaW9pbV9kZXRhY2goZmNwaW0pOworCWJmYV90c2tpbV9kZXRhY2goZmNwaW0pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKKwkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOworCQliZmFfaXRuaW1faW9jZGlzYWJsZShpdG5pbSk7CisJfQorfQorCit2b2lkCitiZmFfZmNwaW1fcGF0aF90b3Zfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcGF0aF90b3YpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlmY3BpbS0+cGF0aF90b3YgPSBwYXRoX3RvdiAqIDEwMDA7CisJaWYgKGZjcGltLT5wYXRoX3RvdiA+IEJGQV9GQ1BJTV9QQVRIVE9WX01BWCkKKwkJZmNwaW0tPnBhdGhfdG92ID0gQkZBX0ZDUElNX1BBVEhUT1ZfTUFYOworfQorCit1MTYKK2JmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlyZXR1cm4gKGZjcGltLT5wYXRoX3RvdiAvIDEwMDApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyAqbW9kc3RhdHMpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwkqbW9kc3RhdHMgPSBmY3BpbS0+c3RhdHM7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fY2xyX21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJbWVtc2V0KCZmY3BpbS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KHFfZGVwdGggPD0gQkZBX0lPQ0ZDX1FERVBUSF9NQVgpOworCisJZmNwaW0tPnFfZGVwdGggPSBxX2RlcHRoOworfQorCit1MTYKK2JmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJcmV0dXJuIChmY3BpbS0+cV9kZXB0aCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BJTV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9GQ1BJTV9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX2ZjcGltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19mY3BpbS5oPgorI2luY2x1ZGUgPGNzL2JmYV93Yy5oPgorI2luY2x1ZGUgImJmYV9zZ3BnX3ByaXYuaCIKKworI2RlZmluZSBCRkFfSVROSU1fTUlOICAgMzIKKyNkZWZpbmUgQkZBX0lUTklNX01BWCAgIDEwMjQKKworI2RlZmluZSBCRkFfSU9JTV9NSU4gICAgOAorI2RlZmluZSBCRkFfSU9JTV9NQVggICAgMjAwMAorCisjZGVmaW5lIEJGQV9UU0tJTV9NSU4gICA0CisjZGVmaW5lIEJGQV9UU0tJTV9NQVggICA1MTIKKyNkZWZpbmUgQkZBX0ZDUElNX1BBVEhUT1ZfREVGCSgzMCAqIDEwMDApCS8qIGluIG1pbGxpc2VjcyAqLworI2RlZmluZSBCRkFfRkNQSU1fUEFUSFRPVl9NQVgJKDkwICogMTAwMCkJLyogaW4gbWlsbGlzZWNzICovCisKKyNkZWZpbmUgYmZhX2ZjcGltX3N0YXRzKF9fZmNwaW0sIF9fc3RhdHMpICAgXAorICAgIChfX2ZjcGltKS0+c3RhdHMuX19zdGF0cyArKworCitzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCSpiZmE7CisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW1fYXJyOworCXN0cnVjdCBiZmFfaW9pbV9zIAkqaW9pbV9hcnI7CisJc3RydWN0IGJmYV9pb2ltX3NwX3MgKmlvaW1fc3BfYXJyOworCXN0cnVjdCBiZmFfdHNraW1fcyAJKnRza2ltX2FycjsKKwlzdHJ1Y3QgYmZhX2RtYV9zCXNuc2Jhc2U7CisJaW50CQkJbnVtX2l0bmltczsKKwlpbnQJCQludW1faW9pbV9yZXFzOworCWludAkJCW51bV90c2tpbV9yZXFzOworCXUzMgkJcGF0aF90b3Y7CisJdTE2CQlxX2RlcHRoOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpdG5pbV9xOyAgICAgICAgLyogIHF1ZXVlIG9mIGFjdGl2ZSBpdG5pbSAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fZnJlZV9xOyAgICAvKiAgZnJlZSBJTyByZXNvdXJjZXMgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJaW9pbV9yZXNmcmVlX3E7IC8qICBJT3Mgd2FpdGluZyBmb3IgZi93ICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX2NvbXBfcTsgICAgLyogIElPIGdsb2JhbCBjb21wIFEgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXRza2ltX2ZyZWVfcTsKKwl1MzIJaW9zX2FjdGl2ZTsJLyogIGN1cnJlbnQgYWN0aXZlIElPcwkgICAgICAqLworCXUzMglkZWxheV9jb21wOworCXN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyBzdGF0czsKK307CisKK3N0cnVjdCBiZmFfaW9pbV9zOworc3RydWN0IGJmYV90c2tpbV9zOworCisvKioKKyAqIEJGQSBJTyAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFlOwkJLyogIHF1ZXVlIGVsZW1lbXQgICAgICAgICAgICAqLworCWJmYV9zbV90CQlzbTsgCS8qICBCRkEgaW9pbSBzdGF0ZSBtYWNoaW5lICAgKi8KKwlzdHJ1Y3QgYmZhX3MgCSAgICAgICAgKmJmYTsJLyogIEJGQSBtb2R1bGUgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MJKmZjcGltOwkvKiAgcGFyZW50IGZjcGltIG1vZHVsZSAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW07CS8qICBpLXQtbiBuZXh1cyBmb3IgdGhpcyBJTyAgKi8KKwlzdHJ1Y3QgYmZhZF9pb2ltX3MgCSpkaW87CS8qICBkcml2ZXIgSU8gaGFuZGxlICAgICAgICAgKi8KKwl1MTYJaW90YWc7CQkvKiAgRldJIElPIHRhZyAgICAgICAgICAgICAgICovCisJdTE2CWFib3J0X3RhZzsJLyogIHVucWl1ZSBhYm9ydCByZXF1ZXN0IHRhZyAqLworCXUxNgluc2dlczsJCS8qICBudW1iZXIgb2YgU0cgZWxlbWVudHMgICAgKi8KKwl1MTYJbnNncGdzOwkJLyogIG51bWJlciBvZiBTRyBwYWdlcyAgICAgICAqLworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOwkvKiAgZmlyc3QgU0cgcGFnZSAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CQkvKiAgYWxsb2NhdGVkIFNHIHBhZ2VzICAgICAgICovCisJc3RydWN0IGJmYV9jYl9xZV9zIGhjYl9xZTsJLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWJmYV9jYl9jYmZuX3QgaW9fY2JmbjsJCS8qICBJTyBjb21wbGV0aW9uIGhhbmRsZXIgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqaW9zcDsJLyogIHNsb3ctcGF0aCBJTyBoYW5kbGluZyAgICAqLworfTsKKworc3RydWN0IGJmYV9pb2ltX3NwX3MgeworCXN0cnVjdCBiZmlfbXNnX3MgCWNvbXBfcnNwbXNnOwkvKiAgSU8gY29tcCBmL3cgcmVzcG9uc2UgICAgICovCisJdTgJCQkqc25zaW5mbzsJLyogIHNlbnNlIGluZm8gZm9yIHRoaXMgSU8gICAqLworCXN0cnVjdCBiZmFfc2dwZ193cWVfcyBzZ3BnX3dxZTsJLyogIHdhaXRxIGVsZW0gZm9yIHNncGcgICAgICAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OwkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJYmZhX2Jvb2xlYW5fdAkJYWJvcnRfZXhwbGljaXQ7CS8qICBhYm9ydGVkIGJ5IE9TICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3Rza2ltX3MJKnRza2ltOwkJLyogIFJlbGV2YW50IFRNIGNtZCAgICAgICAgICAqLworfTsKKworLyoqCisgKiBCRkEgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgKGluaXRpYXRvciBtb2RlKQorICovCitzdHJ1Y3QgYmZhX3Rza2ltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgcWU7CisJYmZhX3NtX3QJCXNtOworCXN0cnVjdCBiZmFfcyAgICAgICAgICAgICpiZmE7ICAgICAgICAvKiAgQkZBIG1vZHVsZSAgKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICAqZmNwaW07ICAgICAgLyogIHBhcmVudCBmY3BpbSBtb2R1bGUgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fcyAgICAgICppdG5pbTsgICAgICAvKiAgaS10LW4gbmV4dXMgZm9yIHRoaXMgSU8gICovCisJc3RydWN0IGJmYWRfdHNraW1fcyAgICAgICAgICpkdHNrOyAgIC8qICBkcml2ZXIgdGFzayBtZ210IGNtbmQgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgICAgICBub3RpZnk7ICAgICAgICAgLyogIG5vdGlmeSBpdG5pbSBvbiBUTSBjb21wICAqLworCWx1bl90ICAgICAgICAgICAgICAgIGx1bjsgICAgICAgICAgICAvKiAgbHVuIGlmIGFwcGxpY2FibGUgICAgICAgICovCisJZW51bSBmY3BfdG1fY21uZCAgICAgICAgdG1fY21uZDsgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCAgKi8KKwl1MTYgICAgICAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICBGV0kgSU8gdGFnICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgICAgICAgdHNlY3M7ICAgICAgICAgIC8qICB0aW1lb3V0IGluIHNlY29uZHMgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICByZXFxX3dhaXQ7ICAgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGlvX3E7ICAgIC8qICBxdWV1ZSBvZiBhZmZlY3RlZCBJT3MgICAgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgICAgICAgd2M7ICAgICAgLyogIHdhaXRpbmcgY291bnRlciAgICAgICAgICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwloY2JfcWU7ICAgICAgLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyAgIHRza19zdGF0dXM7ICAvKiAgVE0gc3RhdHVzICAgICAgICAgICAgICAgICovCit9OworCisvKioKKyAqIEJGQSBpLXQtbiAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICAgICAgICAgICAgICAgKi8KKwliZmFfc21fdAkgIHNtOwkJLyogIGktdC1uIGltIEJGQSBzdGF0ZSBtYWNoaW5lICAqLworCXN0cnVjdCBiZmFfcyAgICAgICpiZmE7CQkvKiAgYmZhIGluc3RhbmNlICAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsJLyogIGJmYSBycG9ydCAgICAgICAgICAgICAgICAgICAqLworCXZvaWQgICAgICAgICAgICpkaXRuOwkJLyogIGRyaXZlciBpLXQtbiBzdHJ1Y3R1cmUgICAgICAqLworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgbWhkcjsJLyogIHByZS1idWlsdCBtaGRyICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgbXNnX25vOwkJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLworCXU4ICAgICAgICAgcmVxcTsJCS8qICBDUSBmb3IgcmVxdWVzdHMgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX3E7CS8qICBxdWV1ZSBvZiBwZW5kaW5nIElPIHJlcXVlc3RzKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX3E7CQkvKiAgcXVldWUgb2YgYWN0aXZlIElPIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBpb19jbGVhbnVwX3E7CS8qICBJTyBiZWluZyBjbGVhbmVkIHVwICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRza19xOwkJLyogIHF1ZXVlIG9mIGFjdGl2ZSBUTSBjb21tYW5kcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgIGRlbGF5X2NvbXBfcTsvKiAgcXVldWUgb2YgZmFpbGVkIGluZmxpZ2h0IGNtZHMgKi8KKwliZmFfYm9vbGVhbl90ICAgc2VxX3JlYzsJLyogIFNRRVIgc3VwcG9ydGVkICAgICAgICAgICAgICAqLworCWJmYV9ib29sZWFuX3QgICBpc19vbmxpbmU7CS8qICBpdG5pbSBpcyBPTkxJTkUgZm9yIElPICAgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgaW90b3ZfYWN0aXZlOwkvKiAgSU8gVE9WIHRpbWVyIGlzIGFjdGl2ZQkgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgcGVuZGluZyBJTyBUT1YJCSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW07CS8qICBmY3BpbSBtb2R1bGUgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCXN0YXRzOworfTsKKworI2RlZmluZSBiZmFfaXRuaW1faXNfb25saW5lKF9pdG5pbSkgKF9pdG5pbSktPmlzX29ubGluZQorI2RlZmluZSBCRkFfRkNQSU1fTU9EKF9oYWwpICgmKF9oYWwpLT5tb2R1bGVzLmZjcGltX21vZCkKKyNkZWZpbmUgQkZBX0lPSU1fRlJPTV9UQUcoX2ZjcGltLCBfaW90YWcpCVwKKwkoJmZjcGltLT5pb2ltX2FycltfaW90YWddKQorI2RlZmluZSBCRkFfVFNLSU1fRlJPTV9UQUcoX2ZjcGltLCBfdG10YWcpICAgICAgICAgICAgICAgICAgXAorICAgICgmZmNwaW0tPnRza2ltX2FycltfdG10YWcgJiAoZmNwaW0tPm51bV90c2tpbV9yZXFzIC0gMSldKQorCisvKgorICogZnVuY3Rpb24gcHJvdG90eXBlcworICovCit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLAorCQkJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2dvb2RfY29tcF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCQkJICAgICAgdTMyICpkbV9sZW4pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2lvZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fdHNrZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK2JmYV9ib29sZWFuX3QgICBiZmFfaXRuaW1faG9sZF9pbyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDUElNX1BSSVZfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyNDM1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBQUE9SVCk7CitCRkFfTU9EVUxFKHBwb3J0KTsKKworI2RlZmluZSBiZmFfcHBvcnRfY2FsbGJhY2soX19wcG9ydCwgX19ldmVudCkgZG8gewkJCVwKKwlpZiAoKF9fcHBvcnQpLT5iZmEtPmZjcykgeyAgICAgIFwKKwkJKF9fcHBvcnQpLT5ldmVudF9jYmZuKChfX3Bwb3J0KS0+ZXZlbnRfY2JhcmcsIChfX2V2ZW50KSk7ICAgICAgXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKF9fcHBvcnQpLT5oY2JfZXZlbnQgPSAoX19ldmVudCk7ICAgICAgXAorCQliZmFfY2JfcXVldWUoKF9fcHBvcnQpLT5iZmEsICYoX19wcG9ydCktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9wb3J0X2V2ZW50LCAoX19wcG9ydCkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlIHBvcnQgaXMgY29uc2lkZXJlZCBkaXNhYmxlZCBpZiBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIHBvcnQgb3IgSU9DIGFyZQorICogZGlzYWJsZWQgZXhwbGljaXRseQorICovCisjZGVmaW5lIEJGQV9QT1JUX0lTX0RJU0FCTEVEKGJmYSkgXAorCSgoYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKGJmYSkgPT0gQkZBX1RSVUUpIHx8IFwKKwkoYmZhX2lvY19pc19kaXNhYmxlZCgmYmZhLT5pb2MpID09IEJGQV9UUlVFKSkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZyk7CisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworLyoqCisgKiBCRkEgcG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCB7CisJQkZBX1BQT1JUX1NNX1NUQVJUID0gMSwJLyogIHN0YXJ0IHBvcnQgc3RhdGUgbWFjaGluZSAqLworCUJGQV9QUE9SVF9TTV9TVE9QID0gMiwJLyogIHN0b3AgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0VOQUJMRSA9IDMsCS8qICBlbmFibGUgcG9ydCAqLworCUJGQV9QUE9SVF9TTV9ESVNBQkxFID0gNCwJLyogIGRpc2FibGUgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0ZXUlNQID0gNSwJLyogIGZpcm13YXJlIGVuYWJsZS9kaXNhYmxlIHJzcCAqLworCUJGQV9QUE9SVF9TTV9MSU5LVVAgPSA2LAkvKiAgZmlybXdhcmUgbGlua3VwIGV2ZW50ICovCisJQkZBX1BQT1JUX1NNX0xJTktET1dOID0gNywJLyogIGZpcm13YXJlIGxpbmt1cCBkb3duICovCisJQkZBX1BQT1JUX1NNX1FSRVNVTUUgPSA4LAkvKiAgQ1Egc3BhY2UgYXZhaWxhYmxlICovCisJQkZBX1BQT1JUX1NNX0hXRkFJTCA9IDksCS8qICBJT0MgaC93IGZhaWx1cmUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9saW5rdXAoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9zdG9wcGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2lvY2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21faW9jZmFpbChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGhhbF9wcG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX3Bwb3J0X3NtX3VuaW5pdCksIEJGQV9QUE9SVF9TVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KSwgQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9lbmFibGluZyksIEJGQV9QUE9SVF9TVF9FTkFCTElOR30sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fbGlua2Rvd24pLCBCRkFfUFBPUlRfU1RfTElOS0RPV059LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2xpbmt1cCksIEJGQV9QUE9SVF9TVF9MSU5LVVB9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCksCisJIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyksIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKSwgQkZBX1BQT1JUX1NUX0RJU0FCTEVEfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9zdG9wcGVkKSwgQkZBX1BQT1JUX1NUX1NUT1BQRUR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2lvY2Rvd24pLCBCRkFfUFBPUlRfU1RfSU9DRE9XTn0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21faW9jZmFpbCksIEJGQV9QUE9SVF9TVF9JT0NET1dOfSwKK307CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBwb3J0LT5iZmEtPmxvZ207CisJd3duX3QgICAgICAgICAgIHB3d24gPSBwcG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgcHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJd3duMnN0cihwd3duX3B0ciwgcHd3bik7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PTkxJTkUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PRkZMSU5FLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0VOQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9FTkFCTEUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9ESVNBQkxFLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9RT1NfTkVHOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX1FPU19ORUcsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYmZhX2lvY19nZXRfYXR0cigmcHBvcnQtPmJmYS0+aW9jLCAmaW9jX2F0dHIpOworCWFlbl9kYXRhLnBvcnQuaW9jX3R5cGUgPSBpb2NfYXR0ci5pb2NfdHlwZTsKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJLyoqCisJCSAqIFN0YXJ0IGV2ZW50IGFmdGVyIElPQyBpcyBjb25maWd1cmVkIGFuZCBCRkEgaXMgc3RhcnRlZC4KKwkJICovCisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBQb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGluIGVuYWJsZWQgc3RhdGUuIERvCisJCSAqIG5vdCBjaGFuZ2Ugc3RhdGUuIFBvcnQgZW5hYmxpbmcgaXMgZG9uZSB3aGVuIFNUQVJUIGV2ZW50IGlzCisJCSAqIHJlY2VpdmVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogSWYgYSBwb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGRpc2FibGVkLCB0aGUKKwkJICogZmlyc3QgZXZlbnQgd2lsbCBhIHBvcnQgZGlzYWJsZSByZXF1ZXN0LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGVuYWJsZSBpcyBpbiBwcm9ncmVzcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEp1c3Qgc2VuZCBkaXNhYmxlIHJlcXVlc3QgdG8gZmlybXdhcmUgd2hlbiByb29tIGJlY29tZXMKKwkJICogYXZhaWxhYmxlIGluIHJlcXVlc3QgcXVldWUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBldmVudHMgd2hlbiBkb2luZyBiYWNrLXRvLWJhY2sKKwkJICogZW5hYmxlL2Rpc2FibGVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fRldSU1A6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisKKwkJYmZhX2Fzc2VydChwcG9ydC0+ZXZlbnRfY2Jmbik7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktVUCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisJCWJmYV9hc3NlcnQocHBvcnQtPmV2ZW50X2NiZm4pOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UsIDAsICJQb3J0IExpbmt1cCIpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LVVApOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PTkxJTkUpOworCQkvKioKKwkJICogSWYgUW9TIGlzIGVuYWJsZWQgYW5kIGl0IGlzIG5vdCBvbmxpbmUsCisJCSAqIFNlbmQgYSBzZXBhcmF0ZSBldmVudC4KKwkJICovCisJCWlmICgocHBvcnQtPmNmZy5xb3NfZW5hYmxlZCkKKwkJICAgICYmIChiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKSAhPSBCRkFfUU9TX09OTElORSkpCisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9RT1NfTkVHKTsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZG93biBldmVudC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua3VwKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZW5hYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpOworCisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFLCAwLCAiUG9ydCBMaW5rZG93biIpOworCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQocHBvcnQtPmJmYSkpIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQl9IGVsc2UgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LRE9XTik7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCS8qKgorCQkgKiBJZ25vcmUgc3RhcnQgZXZlbnQgZm9yIGEgcG9ydCB0aGF0IGlzIGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fc3RvcHBlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIG90aGVyIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBlbmFibGVkLiBJT0MgaXMgZG93bi9mYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21faW9jZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBkaXNhYmxlZC4gSU9DIGlzIGRvd24vZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2lvY2ZhaWwoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoqCisJCSAqIElnbm9yZSBhbGwgZXZlbnRzLgorCQkgKi8KKwkJOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQlwcG9ydC0+ZXZlbnRfY2JmbihwcG9ydC0+ZXZlbnRfY2JhcmcsIHBwb3J0LT5oY2JfZXZlbnQpOworfQorCisjZGVmaW5lIFBQT1JUX1NUQVRTX0RNQV9TWiAoQkZBX1JPVU5EVVAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSwgXAorCQkJCQkJCUJGQV9DQUNIRUxJTkVfU1opKQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCSAgdTMyICpkbV9sZW4pCit7CisJKmRtX2xlbiArPSBQUE9SVF9TVEFUU19ETUFfU1o7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9QUE9SVF9TTV9RUkVTVU1FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9tZW1fY2xhaW0oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pCit7CisJdTggICAgICAgICpkbV9rdmE7CisJdTY0ICAgICAgICBkbV9wYTsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pOworCWRtX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbyk7CisKKwlwcG9ydC0+c3RhdHNfa3ZhID0gZG1fa3ZhOworCXBwb3J0LT5zdGF0c19wYSA9IGRtX3BhOworCXBwb3J0LT5zdGF0cyA9ICh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqKWRtX2t2YTsKKworCWRtX2t2YSArPSBQUE9SVF9TVEFUU19ETUFfU1o7CisJZG1fcGEgKz0gUFBPUlRfU1RBVFNfRE1BX1NaOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKK30KKworLyoqCisgKiBNZW1vcnkgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zICpwb3J0X2NmZyA9ICZwcG9ydC0+Y2ZnOworCisJYmZhX29zX21lbXNldChwcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfcykpOworCXBwb3J0LT5iZmEgPSBiZmE7CisKKwliZmFfcHBvcnRfbWVtX2NsYWltKHBwb3J0LCBtZW1pbmZvKTsKKworCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV91bmluaXQpOworCisJLyoqCisJICogaW5pdGlhbGl6ZSBhbmQgc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbgorCSAqLworCXBvcnRfY2ZnLT50b3BvbG9neSA9IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlA7CisJcG9ydF9jZmctPnNwZWVkID0gQkZBX1BQT1JUX1NQRUVEX0FVVE87CisJcG9ydF9jZmctPnRydW5rZWQgPSBCRkFfRkFMU0U7CisJcG9ydF9jZmctPm1heGZyc2l6ZSA9IDA7CisKKwlwb3J0X2NmZy0+dHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKKworCWJmYV9yZXFxX3dpbml0KCZwcG9ydC0+cmVxcV93YWl0LCBiZmFfcHBvcnRfcXJlc3VtZSwgcHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgcG9ydCBhdHRyaWJ1dGVzIGZyb20gSU9DIGhhcmR3YXJlIGRhdGEuCisJICovCisJYmZhX3Bwb3J0X3NldF93d25zKHBwb3J0KTsKKwlpZiAocHBvcnQtPmNmZy5tYXhmcnNpemUgPT0gMCkKKwkJcHBvcnQtPmNmZy5tYXhmcnNpemUgPSBiZmFfaW9jX21heGZyc2l6ZSgmYmZhLT5pb2MpOworCXBwb3J0LT5jZmcucnhfYmJjcmVkaXQgPSBiZmFfaW9jX3J4X2JiY3JlZGl0KCZiZmEtPmlvYyk7CisJcHBvcnQtPnNwZWVkX3N1cCA9IGJmYV9pb2Nfc3BlZWRfc3VwKCZiZmEtPmlvYyk7CisKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcucnhfYmJjcmVkaXQpOworCWJmYV9hc3NlcnQocHBvcnQtPnNwZWVkX3N1cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIElPQyBpcyByZWFkeS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBDYWxsZWQgYmVmb3JlIElPQyBpcyBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9TVE9QKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBJT0MgZmFpbHVyZSBpcyBkZXRlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fSFdGQUlMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MgKnBldmVudCA9IHBwb3J0LT5ldmVudF9hcmcuaTJobXNnLmV2ZW50OworCisJcHBvcnQtPnNwZWVkID0gcGV2ZW50LT5saW5rX3N0YXRlLnNwZWVkOworCXBwb3J0LT50b3BvbG9neSA9IHBldmVudC0+bGlua19zdGF0ZS50b3BvbG9neTsKKworCWlmIChwcG9ydC0+dG9wb2xvZ3kgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCXBwb3J0LT5teWFscGEgPSBwZXZlbnQtPmxpbmtfc3RhdGUudGwubG9vcF9pbmZvLm15YWxwYTsKKworCS8qCisJICogUW9TIERldGFpbHMKKwkgKi8KKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc19hdHRyKTsKKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfdmNfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc192Y19hdHRyKTsKKworCWJmYV90cmMocHBvcnQtPmJmYSwgcHBvcnQtPnNwZWVkKTsKKwliZmFfdHJjKHBwb3J0LT5iZmEsIHBwb3J0LT50b3BvbG9neSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcmVzZXRfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlwcG9ydC0+c3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTjsKKwlwcG9ydC0+dG9wb2xvZ3kgPSBCRkFfUFBPUlRfVE9QT0xPR1lfTk9ORTsKK30KKworLyoqCisgKiBTZW5kIHBvcnQgZW5hYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zICptOworCisJLyoqCisJICogSW5jcmVtZW50IG1lc3NhZ2UgdGFnIGJlZm9yZSBxdWV1ZSBjaGVjaywgc28gdGhhdCByZXNwb25zZXMgdG8gb2xkCisJICogcmVxdWVzdHMgYXJlIGRpc2NhcmRlZC4KKwkgKi8KKwlwb3J0LT5tc2d0YWcrKzsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+bnd3biA9IHBvcnQtPm53d247CisJbS0+cHd3biA9IHBvcnQtPnB3d247CisJbS0+cG9ydF9jZmcgPSBwb3J0LT5jZmc7CisJbS0+bXNndGFnID0gcG9ydC0+bXNndGFnOworCW0tPnBvcnRfY2ZnLm1heGZyc2l6ZSA9IGJmYV9vc19odG9ucyhwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KG0tPnN0YXRzX2RtYV9hZGRyLCBwb3J0LT5zdGF0c19wYSk7CisJYmZhX3RyYyhwb3J0LT5iZmEsIG0tPnN0YXRzX2RtYV9hZGRyLmEzMi5hZGRyX2xvKTsKKwliZmFfdHJjKHBvcnQtPmJmYSwgbS0+c3RhdHNfZG1hX2FkZHIuYTMyLmFkZHJfaGkpOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNlbmQgcG9ydCBkaXNhYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCkKK3sKKwliZmlfcHBvcnRfZGlzYWJsZV9yZXFfdCAqbTsKKworCS8qKgorCSAqIEluY3JlbWVudCBtZXNzYWdlIHRhZyBiZWZvcmUgcXVldWUgY2hlY2ssIHNvIHRoYXQgcmVzcG9uc2VzIHRvIG9sZAorCSAqIHJlcXVlc3RzIGFyZSBkaXNjYXJkZWQuCisJICovCisJcG9ydC0+bXNndGFnKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwltLT5tc2d0YWcgPSBwb3J0LT5tc2d0YWc7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpCit7CisJcG9ydC0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJnBvcnQtPmJmYS0+aW9jKTsKKwlwb3J0LT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmcG9ydC0+YmZhLT5pb2MpOworCisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPnB3d24pOworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5ud3duKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3NlbmRfdHhjcmVkaXQodm9pZCAqcG9ydF9jYmFyZykKK3sKKworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IHBvcnRfY2Jhcmc7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKwkJcmV0dXJuOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+dHhfYmJjcmVkaXQgPSBiZmFfb3NfaHRvbnMoKHUxNikgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworfQorCisKKworLyoqCisgKiAgYmZhX3Bwb3J0X3B1YmxpYworICovCisKKy8qKgorICogRmlybXdhcmUgbWVzc2FnZSBoYW5kbGVyLgorICovCit2b2lkCitiZmFfcHBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCXVuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgaTJobXNnOworCisJaTJobXNnLm1zZyA9IG1zZzsKKwlwcG9ydC0+ZXZlbnRfYXJnLmkyaG1zZyA9IGkyaG1zZzsKKworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0VWRU5UOgorCQlzd2l0Y2ggKGkyaG1zZy5ldmVudC0+bGlua19zdGF0ZS5saW5rc3RhdGUpIHsKKwkJY2FzZSBCRkFfUFBPUlRfTElOS1VQOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LVVApOworCQkJYnJlYWs7CisJCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LRE9XTik7CisJCQlicmVhazsKKwkJY2FzZSBCRkFfUFBPUlRfVFJVTktfTElOS0RPV046CisJCQkvKiogdG9kbzogZXZlbnQgbm90aWZpY2F0aW9uICovCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfUU9TX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCisJCSAqLworCQlpZiAocHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBwcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJnBwb3J0LT50aW1lcik7CisJCXBwb3J0LT5zdGF0c19zdGF0dXMgPSBpMmhtc2cuZ2V0c3RhdHNfcnNwLT5zdGF0dXM7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywKKwkJCSAgICAgcHBvcnQpOworCQlicmVhazsKKwljYXNlIEJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9DTEVBUl9RT1NfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBjaGVjayBmb3IgdGltZXIgcG9wIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSByc3AKKwkJICovCisJCWlmIChwcG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IHBwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmcHBvcnQtPnRpbWVyKTsKKwkJcHBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwKKwkJCSAgICAgX19iZmFfY2JfcG9ydF9zdGF0c19jbHIsIHBwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9hcGkKKyAqLworCisvKioKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2sgZm9yIHBvcnQgZXZlbnRzLgorICovCit2b2lkCitiZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgdm9pZCAoKmNiZm4pICh2b2lkICpjYmFyZywgYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpLAorCQkJIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBwb3J0LT5ldmVudF9jYmZuID0gY2JmbjsKKwlwcG9ydC0+ZXZlbnRfY2JhcmcgPSBjYmFyZzsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwcG9ydC0+ZGlhZ19idXN5KQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfRElBR19CVVNZKTsKKwllbHNlIGlmIChiZmFfc21fY21wX3N0YXRlCisJCSAoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX0VOQUJMRSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9ESVNBQkxFKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBDb25maWd1cmUgcG9ydCBzcGVlZC4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3BlZWQpOworCisJaWYgKChzcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfQVVUTykgJiYgKHNwZWVkID4gcHBvcnQtPnNwZWVkX3N1cCkpIHsKKwkJYmZhX3RyYyhiZmEsIHBwb3J0LT5zcGVlZF9zdXApOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJfQorCisJcHBvcnQtPmNmZy5zcGVlZCA9IHNwZWVkOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBHZXQgY3VycmVudCBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9wcG9ydF9nZXRfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+c3BlZWQ7Cit9CisKKy8qKgorICogQ29uZmlndXJlIHBvcnQgdG9wb2xvZ3kuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ190b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSwgZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wb2xvZ3kpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHRvcG9sb2d5KTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50b3BvbG9neSk7CisKKwlzd2l0Y2ggKHRvcG9sb2d5KSB7CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfUDJQOgorCWNhc2UgQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1A6CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfQVVUTzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisJfQorCisJcHBvcnQtPmNmZy50b3BvbG9neSA9IHRvcG9sb2d5OworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGN1cnJlbnQgdG9wb2xvZ3kuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3RvcG9sb2d5CitiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPnRvcG9sb2d5OworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4IGFscGEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuaGFyZGFscGEpOworCisJcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEgPSBCRkFfVFJVRTsKKwlwcG9ydC0+Y2ZnLmhhcmRhbHBhID0gYWxwYTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Nscl9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmhhcmRhbHBhKTsKKworCXBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhID0gQkZBX0ZBTFNFOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9nZXRfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4ICphbHBhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJKmFscGEgPSBwb3J0LT5jZmcuaGFyZGFscGE7CisJcmV0dXJuIHBvcnQtPmNmZy5jZmdfaGFyZGFscGE7Cit9CisKK3U4CitiZmFfcHBvcnRfZ2V0X215YWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5teWFscGE7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBtYXhmcnNpemUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG1heGZyc2l6ZSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKworCS8qCisJICogd2l0aCBpbiByYW5nZQorCSAqLworCWlmICgobWF4ZnJzaXplID4gRkNfTUFYX1BEVVNaKSB8fCAobWF4ZnJzaXplIDwgRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkxEX0RGU1opOworCisJLyoKKwkgKiBwb3dlciBvZiAyLCBpZiBub3QgdGhlIG1heCBmcmFtZSBzaXplIG9mIDIxMTIKKwkgKi8KKwlpZiAoKG1heGZyc2l6ZSAhPSBGQ19NQVhfUERVU1opICYmIChtYXhmcnNpemUgJiAobWF4ZnJzaXplIC0gMSkpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfSU5WTERfREZTWik7CisKKwlwcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9IG1heGZyc2l6ZTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCit1MTYKK2JmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPmNmZy5tYXhmcnNpemU7Cit9CisKK3UzMgorYmZhX3Bwb3J0X215cGlkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPm15cGlkOworfQorCit1OAorYmZhX3Bwb3J0X2dldF9yeF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5jZmcucnhfYmJjcmVkaXQ7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB0eF9iYmNyZWRpdCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBvcnQtPmNmZy50eF9iYmNyZWRpdCA9ICh1OCkgdHhfYmJjcmVkaXQ7CisJYmZhX3BvcnRfc2VuZF90eGNyZWRpdChwb3J0KTsKK30KKworLyoqCisgKiBHZXQgcG9ydCBhdHRyaWJ1dGVzLgorICovCisKK3d3bl90CitiZmFfcHBvcnRfZ2V0X3d3bihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBub2RlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlpZiAobm9kZSkKKwkJcmV0dXJuIHBwb3J0LT5ud3duOworCWVsc2UKKwkJcmV0dXJuIHBwb3J0LT5wd3duOworfQorCit2b2lkCitiZmFfcHBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zICphdHRyKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zKSk7CisKKwlhdHRyLT5ud3duID0gcHBvcnQtPm53d247CisJYXR0ci0+cHd3biA9IHBwb3J0LT5wd3duOworCisJYmZhX29zX21lbWNweSgmYXR0ci0+cHBvcnRfY2ZnLCAmcHBvcnQtPmNmZywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MpKTsKKwkvKgorCSAqIHNwZWVkIGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcuc3BlZWQgPSBwcG9ydC0+Y2ZnLnNwZWVkOworCWF0dHItPnNwZWVkX3N1cHBvcnRlZCA9IHBwb3J0LT5zcGVlZF9zdXA7CisJYXR0ci0+c3BlZWQgPSBwcG9ydC0+c3BlZWQ7CisJYXR0ci0+Y29zX3N1cHBvcnRlZCA9IEZDX0NMQVNTXzM7CisKKwkvKgorCSAqIHRvcG9sb2d5IGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcudG9wb2xvZ3kgPSBwcG9ydC0+Y2ZnLnRvcG9sb2d5OworCWF0dHItPnRvcG9sb2d5ID0gcHBvcnQtPnRvcG9sb2d5OworCisJLyoKKwkgKiBiZWFjb24gYXR0cmlidXRlcworCSAqLworCWF0dHItPmJlYWNvbiA9IHBwb3J0LT5iZWFjb247CisJYXR0ci0+bGlua19lMmVfYmVhY29uID0gcHBvcnQtPmxpbmtfZTJlX2JlYWNvbjsKKwlhdHRyLT5wbG9nX2VuYWJsZWQgPSBiZmFfcGxvZ19nZXRfc2V0dGluZyhwcG9ydC0+YmZhLT5wbG9nKTsKKworCWF0dHItPnBwb3J0X2NmZy5wYXRoX3RvdiA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoYmZhKTsKKwlhdHRyLT5wcG9ydF9jZmcucV9kZXB0aCA9IGJmYV9mY3BpbV9xZGVwdGhfZ2V0KGJmYSk7CisJYXR0ci0+cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZShoYWxfcHBvcnRfc21fdGFibGUsIHBwb3J0LT5zbSk7CisJaWYgKGJmYV9pb2NfaXNfZGlzYWJsZWQoJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfSU9DRElTOworCWVsc2UgaWYgKGJmYV9pb2NfZndfbWlzbWF0Y2goJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfRldNSVNNQVRDSDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3F1ZXJ5KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKwliZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19xdWVyeSwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90KSk7CisJYmZpX2gyaV9zZXQobXNnLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19jbGVhciwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3Fvc19zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yZXFfdCAqbXNnOworCisJbXNnID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJaWYgKCFtc2cpIHsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2luaXQoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCwgYmZhX3BvcnRfcW9zX3N0YXRzX2NsZWFyLAorCQkJICAgICAgIHBvcnQpOworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXJldHVybjsKKwl9CisJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisKKwliZmFfb3NfbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc3RhdHNfc3dhcCh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqZCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnMpCit7CisJdTMyICAgICAgICpkaXAgPSAodTMyICopIGQ7CisJdTMyICAgICAgICpzaXAgPSAodTMyICopIHM7CisJaW50ICAgICAgICAgICAgIGk7CisKKwkvKgorCSAqIERvIDY0IGJpdCBmaWVsZHMgc3dhcCBmaXJzdAorCSAqLworCWZvciAoaSA9IDA7CisJICAgICBpIDwKKwkgICAgICgoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAtCisJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zKSkgLyBzaXplb2YodTMyKSk7IGkgPSBpICsgMikgeworI2lmZGVmIF9fQklHRU5ESUFOCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworI2Vsc2UKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpXSk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIE5vdyBzd2FwIHRoZSAzMiBiaXQgZmllbGRzCisJICovCisJZm9yICg7IGkgPCAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpKTsgKytpKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+c3RhdHNfcWZ1bGwpOworCisJaWYgKHBvcnQtPnN0YXRzX3FmdWxsKSB7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCX0KKworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShwb3J0LT5iZmEsICZwb3J0LT5oY2JfcWUsIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKHBvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3Bwb3J0X3N0YXRzX3N3YXAocG9ydC0+c3RhdHNfcmV0LCBwb3J0LT5zdGF0cyk7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5zdGF0c19xZnVsbCk7CisKKwlpZiAocG9ydC0+c3RhdHNfcWZ1bGwpIHsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisJfQorCisJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKHBvcnQtPmJmYSwgJnBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywgcG9ydCk7Cit9CisKKyNkZWZpbmUgQkZBX1BPUlRfU1RBVFNfVE9WCTEwMDAKKworLyoqCisgKiBGZXRjaCBwb3J0IGF0dHJpYnV0ZXMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICAgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfcmV0ID0gc3RhdHM7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX3F1ZXJ5KHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c190aW1lb3V0LCBwb3J0LAorCQkJQkZBX1BPUlRfU1RBVFNfVE9WKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX2NsZWFyKHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCwgcG9ydCwKKwkJCUJGQV9QT1JUX1NUQVRTX1RPVik7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfdHJ1bmtfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGJpdG1hcCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtlZCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtfcG9ydHMpOworCisJaWYgKCFiaXRtYXAgfHwgKGJpdG1hcCAmIChiaXRtYXAgLSAxKSkpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCXBwb3J0LT5jZmcudHJ1bmtlZCA9IEJGQV9UUlVFOworCXBwb3J0LT5jZmcudHJ1bmtfcG9ydHMgPSBiaXRtYXA7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9xb3NfYXR0cl9zICpxb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlxb3NfYXR0ci0+c3RhdGUgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKTsKKwlxb3NfYXR0ci0+dG90YWxfYmJfY3IgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnRvdGFsX2JiX2NyKTsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfdmNfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpxb3NfdmNfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpiZmFfdmNfYXR0ciA9ICZwcG9ydC0+cW9zX3ZjX2F0dHI7CisJdTMyICAgICAgICBpID0gMDsKKworCXFvc192Y19hdHRyLT50b3RhbF92Y19jb3VudCA9IGJmYV9vc19udG9ocyhiZmFfdmNfYXR0ci0+dG90YWxfdmNfY291bnQpOworCXFvc192Y19hdHRyLT5zaGFyZWRfY3JlZGl0ID0gYmZhX29zX250b2hzKGJmYV92Y19hdHRyLT5zaGFyZWRfY3JlZGl0KTsKKwlxb3NfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyA9CisJCWJmYV9vc19udG9obChiZmFfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyk7CisKKwkvKgorCSAqIEluZGl2aWR1YWwgVkMgaW5mbworCSAqLworCXdoaWxlIChpIDwgcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KSB7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLnZjX2NyZWRpdCA9CisJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS52Y19jcmVkaXQ7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLmJvcnJvd19jcmVkaXQgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0uYm9ycm93X2NyZWRpdDsKKwkJcW9zX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHkgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHk7CisJCSsraTsKKwl9Cit9CisKKy8qKgorICogRmV0Y2ggUW9TIFN0YXRzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9nZXRfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwkvKgorCSAqIFFvUyBzdGF0cyBpcyBlbWJlZGRlZCBpbiBwb3J0IHN0YXRzCisJICovCisJcmV0dXJuIChiZmFfcHBvcnRfZ2V0X3N0YXRzKGJmYSwgc3RhdHMsIGNiZm4sIGNiYXJnKSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NsZWFyX3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3Fvc19zdGF0c19jbGVhcihwb3J0KTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZwb3J0LT50aW1lciwgYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQsIHBvcnQsCisJCQlCRkFfUE9SVF9TVEFUU19UT1YpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRmV0Y2ggcG9ydCBhdHRyaWJ1dGVzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF90cnVua19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF90cnVua19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICpiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwkqYml0bWFwID0gcG9ydC0+Y2ZnLnRydW5rX3BvcnRzOworCXJldHVybiBwb3J0LT5jZmcudHJ1bmtlZDsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIChiZmFfc21fdG9fc3RhdGUoaGFsX3Bwb3J0X3NtX3RhYmxlLCBwb3J0LT5zbSkgPT0KKwkJQkZBX1BQT1JUX1NUX0RJU0FCTEVEKTsKKworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfaXNfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKK3JldHVybiAocHBvcnQtPmNmZy5yYXRlbGltaXQgPyBCRkFfVFJVRSA6IEJGQV9GQUxTRSk7CisKK30KKwordm9pZAorYmZhX3Bwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBvbl9vZmYpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnFvc19lbmFibGVkKTsKKworCXBwb3J0LT5jZmcucW9zX2VuYWJsZWQgPSBvbl9vZmY7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9jZmdfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG9uX29mZik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcucmF0ZWxpbWl0KTsKKworCXBwb3J0LT5jZmcucmF0ZWxpbWl0ID0gb25fb2ZmOworCWlmIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pCisJCXBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKK30KKworLyoqCisgKiBDb25maWd1cmUgZGVmYXVsdCBtaW5pbXVtIHJhdGVsaW0gc3BlZWQKKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBzcGVlZCk7CisKKwkvKgorCSAqIEF1dG8gYW5kIHNwZWVkcyBncmVhdGVyIHRoYW4gdGhlIHN1cHBvcnRlZCBzcGVlZCwgYXJlIGludmFsaWQKKwkgKi8KKwlpZiAoKHNwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9BVVRPKSB8fCAoc3BlZWQgPiBwcG9ydC0+c3BlZWRfc3VwKSkgeworCQliZmFfdHJjKGJmYSwgcHBvcnQtPnNwZWVkX3N1cCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRDsKKwl9CisKKwlwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBzcGVlZDsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGRlZmF1bHQgbWluaW11bSByYXRlbGltIHNwZWVkCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkCitiZmFfcHBvcnRfZ2V0X3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCk7CisJcmV0dXJuIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQpOworCit9CisKK3ZvaWQKK2JmYV9wcG9ydF9idXN5KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3RhdHVzKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmRpYWdfYnVzeSk7CisKKwlwcG9ydC0+ZGlhZ19idXN5ID0gc3RhdHVzOworfQorCit2b2lkCitiZmFfcHBvcnRfYmVhY29uKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IGJlYWNvbiwKKwkJIGJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBiZWFjb24pOworCWJmYV90cmMoYmZhLCBsaW5rX2UyZV9iZWFjb24pOworCWJmYV90cmMoYmZhLCBwcG9ydC0+YmVhY29uKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmxpbmtfZTJlX2JlYWNvbik7CisKKwlwcG9ydC0+YmVhY29uID0gYmVhY29uOworCXBwb3J0LT5saW5rX2UyZV9iZWFjb24gPSBsaW5rX2UyZV9iZWFjb247Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9pc19saW5rdXAoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIGJmYV9zbV9jbXBfc3RhdGUoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9saW5rdXApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiMzlhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3MuYyBCRkEgRkNTIG1haW4KKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY2J1aWxkLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYi5oPgorCisvKioKKyAqIEZDUyBzdWItbW9kdWxlcworICovCitzdHJ1Y3QgYmZhX2Zjc19tb2RfcyB7CisJdm9pZCAgICAgICAgICAgICgqbW9kaW5pdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisJdm9pZCAgICAgICAgICAgICgqbW9kZXhpdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit9OworCisjZGVmaW5lIEJGQV9GQ1NfTU9EVUxFKF9tb2QpIHsgX21vZCAjIyBfbW9kaW5pdCwgX21vZCAjIyBfbW9kZXhpdCB9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19tb2RfcyBmY3NfbW9kdWxlc1tdID0geworCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfcHBvcnQpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfdWYpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfZmFicmljKSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Zwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Jwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX2ZjcGltKSwKK307CisKKy8qKgorICogIGZjc19hcGkgQkZBIEZDUyBBUEkKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19leGl0X2NvbXAodm9pZCAqZmNzX2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3MgKmZjcyA9IGZjc19jYmFyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gZmNzLT5iZmFkOworCisJY29tcGxldGUoJmJmYWQtPmNvbXApOworfQorCisKKworLyoqCisgKiAgZmNzX2FwaSBCRkEgRkNTIEFQSQorICovCisKKy8qKgorICogCQlGQ1MgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24uCisgKgorICogCXBhcmFtW2luXQkJZmNzCQlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0JCWJmYQkJQkZBIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQliZmFkCQlCRkEgZHJpdmVyIGluc3RhbmNlCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX21vZF9zICAqbW9kOworCisJZmNzLT5iZmEgPSBiZmE7CisJZmNzLT5iZmFkID0gYmZhZDsKKwlmY3MtPm1pbl9jZmcgPSBtaW5fY2ZnOworCisJYmZhX2F0dGFjaF9mY3MoYmZhKTsKKwlmY2J1aWxkX2luaXQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmNzX21vZHVsZXMpIC8gc2l6ZW9mKGZjc19tb2R1bGVzWzBdKTsgaSsrKSB7CisJCW1vZCA9ICZmY3NfbW9kdWxlc1tpXTsKKwkJbW9kLT5tb2Rpbml0KGZjcyk7CisJfQorfQorCisvKioKKyAqIFN0YXJ0IEZDUyBvcGVyYXRpb25zLgorICovCit2b2lkCitiZmFfZmNzX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX2ZhYnJpY19tb2RzdGFydChmY3MpOworfQorCisvKioKKyAqIAkJRkNTIGRyaXZlciBkZXRhaWxzIGluaXRpYWxpemF0aW9uLgorICoKKyAqIAlwYXJhbVtpbl0JCWZjcwkJRkNTIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQlkcml2ZXJfaW5mbwlEcml2ZXIgRGV0YWlscworICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8pCit7CisKKwlmY3MtPmRyaXZlcl9pbmZvID0gKmRyaXZlcl9pbmZvOworCisJYmZhX2Zjc19mYWJyaWNfcHN5bWJfaW5pdCgmZmNzLT5mYWJyaWMpOworfQorCisvKioKKyAqIAkJRkNTIGluc3RhbmNlIGNsZWFudXAgYW5kIGV4aXQuCisgKgorICogCXBhcmFtW2luXQkJZmNzCQkJRkNTIGluc3RhbmNlCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19tb2RfcyAgKm1vZDsKKwlpbnQgICAgICAgICAgICAgbm1vZHMsIGk7CisKKwliZmFfd2NfaW5pdCgmZmNzLT53YywgYmZhX2Zjc19leGl0X2NvbXAsIGZjcyk7CisKKwlubW9kcyA9IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOworCisJZm9yIChpID0gMDsgaSA8IG5tb2RzOyBpKyspIHsKKwkJYmZhX3djX3VwKCZmY3MtPndjKTsKKworCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CisJCW1vZC0+bW9kZXhpdChmY3MpOworCX0KKworCWJmYV93Y193YWl0KCZmY3MtPndjKTsKK30KKworCit2b2lkCitiZmFfZmNzX3RyY19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwlmY3MtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfZmNzX2xvZ19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwlmY3MtPmxvZ20gPSBsb2dtb2Q7Cit9CisKKwordm9pZAorYmZhX2Zjc19hZW5faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwlmY3MtPmFlbiA9IGFlbjsKK30KKwordm9pZAorYmZhX2Zjc19tb2RleGl0X2NvbXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV93Y19kb3duKCZmY3MtPndjKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzVlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3BvcnQuYyBCRkEgRkNTIHBvcnQKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19mY3MuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgUE9SVCk7CisKKy8qKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1OCByZWFzb25fY29kZSwKKwkJCXU4IHJlYXNvbl9jb2RlX2V4cGwpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2VjaG8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19lY2hvX3MgKmVjaG8sIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9ybmlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqcm5pZCwgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpOworCitzdGF0aWMgc3RydWN0IHsKKwl2b2lkICAgICAgICAgICAgKCppbml0KSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKwl2b2lkICAgICAgICAgICAgKCpvbmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCXZvaWQgICAgICAgICAgICAoKm9mZmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworfSBfX3BvcnRfYWN0aW9uW10gPSB7CisJeworCWJmYV9mY3NfcG9ydF91bmtub3duX2luaXQsIGJmYV9mY3NfcG9ydF91bmtub3duX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF91bmtub3duX29mZmxpbmV9LCB7CisJYmZhX2Zjc19wb3J0X2ZhYl9pbml0LCBiZmFfZmNzX3BvcnRfZmFiX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9mYWJfb2ZmbGluZX0sIHsKKwliZmFfZmNzX3BvcnRfbG9vcF9pbml0LCBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lfSwgeworYmZhX2Zjc19wb3J0X24ybl9pbml0LCBiZmFfZmNzX3BvcnRfbjJuX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9uMm5fb2ZmbGluZX0sfTsKKworLyoqCisgKiAgZmNzX3BvcnRfc20gRkNTIGxvZ2ljYWwgcG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgeworCUJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUgPSAxLAorCUJGQV9GQ1NfUE9SVF9TTV9PTkxJTkUgPSAyLAorCUJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FID0gMywKKwlCRkFfRkNTX1BPUlRfU01fREVMRVRFID0gNCwKKwlCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQgPSA1LAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19wb3J0X29mZmxpbmVfYWN0aW9ucyhwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEU6CisKKwkJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vZmZsaW5lKHBvcnQpOworCisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgeworCQkJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA9PSAwKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9kZWxldGluZyk7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3BvcnRfcHZ0CisgKi8KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIGVudW0gYmZhX2xwb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcG9ydC0+ZmNzLT5sb2dtOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlID0gcG9ydC0+cG9ydF9jZmcucm9sZXM7CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgKnJvbGVfc3RyW0JGQV9QT1JUX1JPTEVfRkNQX01BWCAvIDIgKyAxXSA9CisJCXsgIkluaXRpYXRvciIsICJUYXJnZXQiLCAiSVBGQyIgfTsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisKKwliZmFfYXNzZXJ0KHJvbGUgPD0gQkZBX1BPUlRfUk9MRV9GQ1BfTUFYKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUE9SVF9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PTkxJTkUsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PRkZMSU5FLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTkVXOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9ORVcsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9ERUxFVEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RFTEVURSwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5scG9ydC5yb2xlcyA9IHJvbGU7CisJYWVuX2RhdGEubHBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpOworCWFlbl9kYXRhLmxwb3J0Lmxwd3duID0gbHB3d247Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgcmVqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJIHU4IHJlYXNvbl9jb2RlLCB1OCByZWFzb25fY29kZV9leHBsKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX3JqdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkgICAgICByZWFzb25fY29kZSwgcmVhc29uX2NvZGVfZXhwbCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogUHJvY2VzcyBpbmNvbWluZyBwbG9naSBmcm9tIGEgcmVtb3RlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJLyoKKwkgKiBJZiBtaW4gY2ZnIG1vZGUgaXMgZW5hYmxlZCwgZHJvcCBhbnkgaW5jb21pbmcgUExPR0lzCisJICovCisJaWYgKF9fZmNzX21pbl9jZmcocG9ydC0+ZmNzKSkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmNfcGxvZ2lfcGFyc2UocnhfZmNocykgIT0gRkNfUEFSU0VfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQkvKgorCQkgKiBzZW5kIGEgTFMgcmVqZWN0CisJCSAqLworCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJIEZDX0xTX1JKVF9SU05fUFJPVE9DT0xfRVJST1IsCisJCQkJCSBGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKyogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZSA6IHZlcmlmeSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSByLXBvcnQuCisJICovCisJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkgICAgJiYKKwkgICAgKG1lbWNtcAorCSAgICAgKCh2b2lkICopJmJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSwgKHZvaWQgKikmcGxvZ2ktPnBvcnRfbmFtZSwKKwkgICAgICBzaXplb2Yod3duX3QpKSA8IDApKSB7CisJCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnhfZmNocy0+ZF9pZCkpIHsKKwkJCS8qCisJCQkgKiBBZGRyZXNzIGFzc2lnbmVkIHRvIHVzIGNhbm5vdCBiZSBhIFdLQQorCQkJICovCisJCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUiwKKwkJCQkJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEKTsKKwkJCXJldHVybjsKKwkJfQorCQlwb3J0LT5waWQgPSByeF9mY2hzLT5kX2lkOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBjaGVjayBpZiB3ZSBrbm93IHRoZSBkZXZpY2UgYnkgcHd3bi4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LCBwbG9naS0+cG9ydF9uYW1lKTsKKwlpZiAocnBvcnQpIHsKKwkJLyoqCisJCSAqIERpcmVjdCBBdHRhY2ggUDJQIG1vZGU6IGhhbmRsZSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSBycG9ydC4KKwkJICovCisJCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJCSAgICAmJgorCQkgICAgKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCksCisJCSAgICAgICh2b2lkICopJnBsb2dpLT5wb3J0X25hbWUsIHNpemVvZih3d25fdCkpIDwgMCkpIHsKKwkJCXBvcnQtPnBpZCA9IHJ4X2ZjaHMtPmRfaWQ7CisJCQlycG9ydC0+cGlkID0gcnhfZmNocy0+c19pZDsKKwkJfQorCQliZmFfZmNzX3Jwb3J0X3Bsb2dpKHJwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBOZXh0LCBsb29rdXAgcnBvcnQgYnkgUElELgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcnhfZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkgeworCQkvKioKKwkJICogSW5ib3VuZCBQTE9HSSBmcm9tIGEgbmV3IGRldmljZS4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFJwb3J0IGlzIGtub3duIG9ubHkgYnkgUElELgorCSAqLworCWlmIChycG9ydC0+cHd3bikgeworCQkvKioKKwkJICogVGhpcyBpcyBhIGRpZmZlcmVudCBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBwaWQuIE9sZCBkZXZpY2UKKwkJICogZGlzYXBwZWFyZWQuIFNlbmQgaW1wbGljaXQgTE9HTyB0byBvbGQgZGV2aWNlLgorCQkgKi8KKwkJYmZhX2Fzc2VydChycG9ydC0+cHd3biAhPSBwbG9naS0+cG9ydF9uYW1lKTsKKwkJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChycG9ydCk7CisKKwkJLyoqCisJCSAqIEluYm91bmQgUExPR0kgZnJvbSBhIG5ldyBkZXZpY2UgKHdpdGggb2xkIFBJRCkuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBQTE9HSSBjcm9zc2luZyBlYWNoIG90aGVyLgorCSAqLworCWJmYV9hc3NlcnQocnBvcnQtPnB3d24gPT0gV1dOX05VTEwpOworCWJmYV9mY3NfcnBvcnRfcGxvZ2kocnBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKK30KKworLyoKKyAqIFByb2Nlc3MgaW5jb21pbmcgRUNITy4KKyAqIFNpbmNlIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBsb2dpbiwgaXQgaXMgcHJvY2Vzc2VkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZWNobyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfZWNob19zICplY2hvLCB1MTYgcnhfbGVuKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbiwgcHlsZF9sZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9sZW4pOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCk7CisKKwkvKgorCSAqIENvcHkgdGhlIHBheWxvYWQgKGlmIGFueSkgZnJvbSB0aGUgZWNobyBmcmFtZQorCSAqLworCXB5bGRfbGVuID0gcnhfbGVuIC0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpOworCWJmYV90cmMocG9ydC0+ZmNzLCBweWxkX2xlbik7CisKKwlpZiAocHlsZF9sZW4gPiBsZW4pCisJCW1lbWNweSgoKHU4ICopIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCkpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSwgKGVjaG8gKyAxKSwKKwkJICAgICAgIChweWxkX2xlbiAtIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBweWxkX2xlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGluY29taW5nIFJOSUQuCisgKiBTaW5jZSBpdCBkb2VzIG5vdCByZXF1aXJlIGEgbG9naW4sIGl0IGlzIHByb2Nlc3NlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3JuaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUxNiByeF9sZW4pCit7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb19kYXRhOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJdTE2ICAgICAgICBsZW47CisJdTMyICAgICAgICBkYXRhX2Zvcm1hdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2xlbik7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIE5vZGUgSW5kZW50aWZpY2F0aW9uIERhdGEgRm9ybWF0CisJICogV2Ugb25seSBzdXBwb3J0IEdlbmVyYWwgVG9wb2xvZ3kgRGlzY292ZXJ5IEZvcm1hdC4KKwkgKiBGb3IgYW55IG90aGVyIHJlcXVlc3RlZCBEYXRhIEZvcm1hdHMsIHdlIHJldHVybiBDb21tb24gTm9kZSBJZCBEYXRhCisJICogb25seSwgYXMgcGVyIEZDLUxTLgorCSAqLworCWJmYV90cmMocG9ydC0+ZmNzLCBybmlkLT5ub2RlX2lkX2RhdGFfZm9ybWF0KTsKKwlpZiAocm5pZC0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJZGF0YV9mb3JtYXQgPSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlk7CisJCS8qCisJCSAqIEdldCBHZW5lcmFsIHRvcG9sb2d5IGRhdGEgZm9yIHRoaXMgcG9ydAorCQkgKi8KKwkJYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEocG9ydCwgJmdlbl90b3BvX2RhdGEpOworCX0gZWxzZSB7CisJCWRhdGFfZm9ybWF0ID0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfQ09NTU9OOworCX0KKworCS8qCisJICogQ29weSB0aGUgTm9kZSBJZCBJbmZvCisJICovCisJY29tbW9uX2lkX2RhdGEucG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNvbW1vbl9pZF9kYXRhLm5vZGVfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCWxlbiA9IGZjX3JuaWRfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJZGF0YV9mb3JtYXQsICZjb21tb25faWRfZGF0YSwgJmdlbl90b3BvX2RhdGEpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworCisJcmV0dXJuOworfQorCisvKgorICogIEZpbGwgb3V0IEdlbmVyYWwgVG9wb2xwZ3kgRGlzY292ZXJ5IERhdGEgZm9yIFJOSUQgRUxTLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpCit7CisKKwliZmFfb3NfbWVtc2V0KGdlbl90b3BvX2RhdGEsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCisJZ2VuX3RvcG9fZGF0YS0+YXNzb190eXBlID0gYmZhX29zX2h0b25sKFJOSURfQVNTT0NJQVRFRF9UWVBFX0hPU1QpOworCWdlbl90b3BvX2RhdGEtPnBoeV9wb3J0X251bSA9IDA7CS8qIEB0b2RvICovCisJZ2VuX3RvcG9fZGF0YS0+bnVtX2F0dGFjaGVkX25vZGVzID0gYmZhX29zX2h0b25sKDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5vcGVyX3R5cGUpOworCisJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5pbml0KHBvcnQpOworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub25saW5lKHBvcnQpOworCisJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKTsKKwliZmFfZmNiX3BvcnRfb25saW5lKHBvcnQtPmZjcy0+YmZhZCwgcG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQlwb3J0LT5mYWJyaWMtPnZmX2RydiwgKHBvcnQtPnZwb3J0ID09IE5VTEwpID8KKwkJCU5VTEwgOiBwb3J0LT52cG9ydC0+dnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+b3Blcl90eXBlKTsKKworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub2ZmbGluZShwb3J0KTsKKworCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUocG9ydC0+ZmFicmljKSA9PSBCRkFfVFJVRSkgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUKTsKKwl9IGVsc2UgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9PRkZMSU5FKTsKKwl9CisJYmZhX2ZjYl9wb3J0X29mZmxpbmUocG9ydC0+ZmNzLT5iZmFkLCBwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCXBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJKHBvcnQtPnZwb3J0ID09IE5VTEwpID8gTlVMTCA6IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHJwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ERUxFVEUpOworCisJLyoKKwkgKiBCYXNlIHBvcnQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBPUyBkcml2ZXIKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJYmZhX2ZjYl9wb3J0X2RlbGV0ZShwb3J0LT5mY3MtPmJmYWQsIHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJcG9ydC0+ZmFicmljLT52Zl9kcnYsCisJCQlwb3J0LT52cG9ydCA/IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYgOiBOVUxMKTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChwb3J0LT52cG9ydCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChwb3J0LT5mYWJyaWMpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19scG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbikKK3sKKwl1MzIgICAgICAgIHBpZCA9IGZjaHMtPnNfaWQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfc3RhdHMobHBvcnQsIHVmX3JlY3ZzKTsKKworCWlmICghYmZhX2Zjc19wb3J0X2lzX29ubGluZShscG9ydCkpIHsKKwkJYmZhX3N0YXRzKGxwb3J0LCB1Zl9yZWN2X2Ryb3BzKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBoYW5kbGUgRUxTcyB0aGF0IGRvbm90IHJlcXVpcmUgYSBsb2dpbi4KKwkgKi8KKwkvKgorCSAqIEhhbmRsZSBQTE9HSSBmaXJzdAorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYKKwkJKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19QTE9HSSkpIHsKKwkJYmZhX2Zjc19wb3J0X3Bsb2dpKGxwb3J0LCBmY2hzLCAoc3RydWN0IGZjX2xvZ2lfcyAqKSBlbHNfY21kKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSGFuZGxlIEVDSE8gc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAoKGZjaHMtPnR5cGUgPT0gRkNfVFlQRV9FTFMpICYmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfRUNITykpIHsKKwkJYmZhX2Zjc19wb3J0X2VjaG8obHBvcnQsIGZjaHMsCisJCQkoc3RydWN0IGZjX2VjaG9fcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBIYW5kbGUgUk5JRCBzZXBhcmF0ZWx5LgorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19STklEKSkgeworCQliZmFfZmNzX3BvcnRfcm5pZChscG9ydCwgZmNocywKKwkJCShzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogbG9vayBmb3IgYSBtYXRjaGluZyByZW1vdGUgcG9ydCBJRAorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQobHBvcnQsIHBpZCk7CisJaWYgKHJwb3J0KSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+c19pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+ZF9pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisKKwkJYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHJwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogT25seSBoYW5kbGVzIEVMUyBmcmFtZXMgZm9yIG5vdy4KKwkgKi8KKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykgeworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19SU0NOKSB7CisJCWJmYV9mY3NfcG9ydF9zY25fcHJvY2Vzc19yc2NuKGxwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19MT0dPKSB7CisJCS8qKgorCQkgKiBAdG9kbyBIYW5kbGUgTE9HTyBmcmFtZXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUFJMSSkgeworCQkvKioKKwkJICogQHRvZG8gSGFuZGxlIFBSTEkgZnJhbWVzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBVbmhhbmRsZWQgRUxTIGZyYW1lcy4gU2VuZCBhIExTX1JKVC4KKwkgKi8KKwliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQobHBvcnQsIGZjaHMsIEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQLAorCQkJCSBGQ19MU19SSlRfRVhQX05PX0FERExfSU5GTyk7CisKK30KKworLyoqCisgKiAgIFBJRCBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHJwb3J0LT5waWQgPT0gcGlkKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwaWQpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqICAgUFdXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPnB3d24sIHB3d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwd3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqICAgTldXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfbnd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPm53d24sIG53d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBud3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCBtb2R1bGUgd2hlbiBuZXcgcnBvcnRzIGFyZSBkaXNjb3ZlcmVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJnBvcnQtPnJwb3J0X3EpOworCXBvcnQtPm51bV9ycG9ydHMrKzsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgbW9kdWxlIHRvIHdoZW4gcnBvcnRzIGFyZSBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZGVsX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmcG9ydC0+cnBvcnRfcSwgcnBvcnQpKTsKKwlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKKwlwb3J0LT5udW1fcnBvcnRzLS07CisKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgZm9yIGJhc2UgcG9ydCB3aGVuIGZhYnJpYyBsb2dpbiBpcyBjb21wbGV0ZS4KKyAqIENhbGxlZCBieSB2cG9ydCBmb3IgdmlydHVhbCBwb3J0cyB3aGVuIEZESVNDIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fT05MSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgd2hlbiBmYWJyaWMgZ29lcyBvZmZsaW5lLgorICogQ2FsbGVkIGJ5IHZwb3J0IGZvciB2aXJ0dWFsIHBvcnRzIHdoZW4gdmlydHVhbCBwb3J0IGJlY29tZXMgb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIHRvIGRlbGV0ZSBiYXNlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBDYWxsZWQgYnkgdnBvcnQgdG8gZGVsZXRlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4gU2hvdWxkIGNhbGwKKyAqIGJmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAoKSBmb3IgdnBvcnRzIG9uIGNvbXBsZXRpb24uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgaW4gcHJpdmF0ZSBsb29wIHRvcG9sb2d5IHRvIHByb2Nlc3MgTElQIGV2ZW50LgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBwb3J0IGlzIG9ubGluZSwgZWxzZSByZXR1cm4gRkFMU0UKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2Zjc19wb3J0X2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJcmV0dXJuIChiZmFfc21fY21wX3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpKTsKK30KKworLyoqCisgKiBMb2dpY2FsIHBvcnQgaW5pdGlhbGl6YXRpb24gb2YgYmFzZSBvciB2aXJ0dWFsIHBvcnQuCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgb3IgYnkgdnBvcnQgZm9yIHZpcnR1YWwgcG9ydHMuCisgKi8KK3ZvaWQKK2JmYV9mY3NfbHBvcnRfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJbHBvcnQtPmZjcyA9IGZjczsKKwlscG9ydC0+ZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJYmZhX29zX2Fzc2lnbihscG9ydC0+cG9ydF9jZmcsICpwb3J0X2NmZyk7CisJbHBvcnQtPnZwb3J0ID0gdnBvcnQ7CisJbHBvcnQtPmxwX3RhZyA9ICh2cG9ydCkgPyBiZmFfbHBzX2dldF90YWcodnBvcnQtPmxwcykgOgorCQkJIGJmYV9scHNfZ2V0X3RhZyhscG9ydC0+ZmFicmljLT5scHMpOworCisJSU5JVF9MSVNUX0hFQUQoJmxwb3J0LT5ycG9ydF9xKTsKKwlscG9ydC0+bnVtX3Jwb3J0cyA9IDA7CisKKwlscG9ydC0+YmZhZF9wb3J0ID0KKwkJYmZhX2ZjYl9wb3J0X25ldyhmY3MtPmJmYWQsIGxwb3J0LCBscG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQkJbHBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJCXZwb3J0ID8gdnBvcnQtPnZwb3J0X2RydiA6IE5VTEwpOworCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChscG9ydCwgQkZBX0xQT1JUX0FFTl9ORVcpOworCisJYmZhX3NtX3NldF9zdGF0ZShscG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUpOworfQorCisKKworLyoqCisgKiAgZmNzX2xwb3J0X2FwaQorICovCisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIHN0cnVjdCBiZmFfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cikKK3sKKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKSkKKwkJcG9ydF9hdHRyLT5waWQgPSBwb3J0LT5waWQ7CisJZWxzZQorCQlwb3J0X2F0dHItPnBpZCA9IDA7CisKKwlwb3J0X2F0dHItPnBvcnRfY2ZnID0gcG9ydC0+cG9ydF9jZmc7CisKKwlpZiAocG9ydC0+ZmFicmljKSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gYmZhX2Zjc19mYWJyaWNfcG9ydF90eXBlKHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfYXR0ci0+bG9vcGJhY2sgPSBiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhwb3J0LT5mYWJyaWMpOworCQlwb3J0X2F0dHItPmZhYnJpY19uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0KTsKKwkJbWVtY3B5KHBvcnRfYXR0ci0+ZmFicmljX2lwX2FkZHIsCisJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIocG9ydCksCisJCSAgICAgICBCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1opOworCisJCWlmIChwb3J0LT52cG9ydCAhPSBOVUxMKQorCQkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9WUE9SVDsKKworCX0gZWxzZSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gQkZBX1BQT1JUX1RZUEVfVU5LTk9XTjsKKwkJcG9ydF9hdHRyLT5zdGF0ZSA9IEJGQV9QT1JUX1VOSU5JVDsKKwl9CisKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzRiMjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcHBvcnQuYyBCRkEgRkNTIFBQT1JUICggcGh5c2ljYWwgcG9ydCkKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQUE9SVCk7CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Bwb3J0X2V2ZW50X2hhbmRsZXIodm9pZCAqY2JhcmcsIGJmYV9wcG9ydF9ldmVudF90IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzID0gY2Jhcmc7CisKKwliZmFfdHJjKGZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX0xJTktVUDoKKwkJYmZhX2Zjc19mYWJyaWNfbGlua191cCgmZmNzLT5mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQliZmFfZmNzX2ZhYnJpY19saW5rX2Rvd24oJmZjcy0+ZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTjoKKwkJYmZhX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfcHBvcnRfZXZlbnRfaGFuZGxlciwKKwkJCQkgICAgIGZjcyk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwMWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdWYuYyBCRkEgRkNTIFVGICggVW5zb2xpY2l0ZWQgRnJhbWVzKQorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mYWJyaWMuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBVRik7CisKKy8qKgorICogCQlCRkEgY2FsbGJhY2sgZm9yIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW1baW5dCQljYmFyZwkJY2FsbGJhY2sgYXJnIGZvciByZWNlaXZlIGhhbmRsZXIKKyAqIEBwYXJhbVtpbl0JCXVmCQl1bnNvbGljaXRlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3VmX3JlY3Yodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3MgPSAoc3RydWN0IGJmYV9mY3NfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgKmZjaHMgPSBiZmFfdWZfZ2V0X2ZybWJ1Zih1Zik7CisJdTE2ICAgICAgICBsZW4gPSBiZmFfdWZfZ2V0X2ZybWxlbih1Zik7CisJc3RydWN0IGZjX3ZmdF9zICAgICAgICp2ZnQ7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCS8qKgorCSAqIGNoZWNrIGZvciBWRlQgaGVhZGVyCisJICovCisJaWYgKGZjaHMtPnJvdXRpbmcgPT0gRkNfUlRHX0VYVF9IRFIgJiYKKwkJZmNocy0+Y2F0X2luZm8gPT0gRkNfQ0FUX1ZGVF9IRFIpIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudGFnZ2VkKTsKKwkJdmZ0ID0gYmZhX3VmX2dldF9mcm1idWYodWYpOworCQlpZiAoZmNzLT5wb3J0X3ZmaWQgPT0gdmZ0LT52Zl9pZCkKKwkJCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwkJZWxzZQorCQkJZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCAodTE2KSB2ZnQtPnZmX2lkKTsKKworCQkvKioKKwkJICogZHJvcCBmcmFtZSBpZiB2ZmlkIGlzIHVua25vd24KKwkJICovCisJCWlmICghZmFicmljKSB7CisJCQliZmFfYXNzZXJ0KDApOworCQkJYmZhX3N0YXRzKGZjcywgdWYudmZpZF91bmtub3duKTsKKwkJCWJmYV91Zl9mcmVlKHVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qKgorCQkgKiBza2lwIHZmdCBoZWFkZXIKKwkJICovCisJCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSAodmZ0ICsgMSk7CisJCWxlbiAtPSBzaXplb2Yoc3RydWN0IGZjX3ZmdF9zKTsKKworCQliZmFfdHJjKGZjcywgdmZ0LT52Zl9pZCk7CisJfSBlbHNlIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudW50YWdnZWQpOworCQlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJfQorCisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzBdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbMV0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVsyXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzNdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbNF0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVs1XSk7CisJYmZhX3RyYyhmY3MsIGxlbik7CisKKwliZmFfZmNzX2ZhYnJpY191Zl9yZWN2KGZhYnJpYywgZmNocywgbGVuKTsKKwliZmFfdWZfZnJlZSh1Zik7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX3VmX3JlY3ZfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfdWZfcmVjdiwgZmNzKTsKK30KKwordm9pZAorYmZhX2Zjc191Zl9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTRhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNYUCk7CitCRkFfTU9EVUxFKGZjeHApOworCisvKioKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBfX2JmYV9mY3hwX3NlbmRfY2Jmbih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfcnhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICpmY3hwX3JzcCk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfdHhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcWxlbiwKKwkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBmY2hzX3MgKmZjaHMpOworc3RhdGljIHZvaWQJYmZhX2ZjeHBfcXJlc3VtZSh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZAliZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyAqc2VuZF9yZXEpOworCisvKioKKyAqICBmY3hwX3B2dCBCRkEgRkNYUCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitjbGFpbV9mY3hwX3JlcV9yc3BfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTggICAgICAgICpkbV9rdmEgPSBOVUxMOworCXU2NCAgICAgICAgZG1fcGE7CisJdTMyICAgICAgICBidWZfcG9vbF9zejsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwlkbV9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKworCWJ1Zl9wb29sX3N6ID0gbW9kLT5yZXFfcGxkX3N6ICogbW9kLT5udW1fZmN4cHM7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGZjeHAgcmVxIHBheWxvYWQgbGlzdAorCSAqLworCW1vZC0+cmVxX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJlcV9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cmVxX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBmY3hwIHJzcCBwYXlsb2FkIGxpc3QKKwkgKi8KKwlidWZfcG9vbF9zeiA9IG1vZC0+cnNwX3BsZF9zeiAqIG1vZC0+bnVtX2ZjeHBzOworCW1vZC0+cnNwX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJzcF9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cnNwX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpID0gZG1fa3ZhOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKSA9IGRtX3BhOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fZmN4cHNfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTE2ICAgICAgICBpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJZmN4cCA9IChzdHJ1Y3QgYmZhX2ZjeHBfcyAqKSBiZmFfbWVtaW5mb19rdmEobWkpOworCWJmYV9vc19tZW1zZXQoZmN4cCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG1vZC0+bnVtX2ZjeHBzKTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmZjeHBfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5mY3hwX2FjdGl2ZV9xKTsKKworCW1vZC0+ZmN4cF9saXN0ID0gZmN4cDsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9mY3hwczsgaSsrKSB7CisJCWZjeHAtPmZjeHBfbW9kID0gbW9kOworCQlmY3hwLT5mY3hwX3RhZyA9IGk7CisKKwkJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKKwkJYmZhX3JlcXFfd2luaXQoJmZjeHAtPnJlcXFfd3FlLCBiZmFfZmN4cF9xcmVzdW1lLCBmY3hwKTsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCisJCWZjeHAgPSBmY3hwICsgMTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWkpID0gKHZvaWQgKilmY3hwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJdTE2ICAgICAgICBudW1fZmN4cF9yZXFzID0gY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzOworCisJaWYgKG51bV9mY3hwX3JlcXMgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZXEvcnNwIHBheWxvYWQKKwkgKi8KKwkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9JQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJKmRtX2xlbiArPSBCRkFfRkNYUF9NQVhfSUJVRl9TWiAqIG51bV9mY3hwX3JlcXM7CisJZWxzZQorCQkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9MQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKworCS8qCisJICogQWNjb3VudCBmb3IgZmN4cCBzdHJ1Y3RzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG51bV9mY3hwX3JlcXM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQobW9kLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3hwX21vZF9zKSk7CisJbW9kLT5iZmEgPSBiZmE7CisJbW9kLT5udW1fZmN4cHMgPSBjZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIEZDWFAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGF5bG9hZCBzaXplcy4KKwkgKi8KKwltb2QtPnJlcV9wbGRfc3ogPSBtb2QtPnJzcF9wbGRfc3ogPSBCRkFfRkNYUF9NQVhfSUJVRl9TWjsKKwlpZiAoIWNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCW1vZC0+cnNwX3BsZF9zeiA9IEJGQV9GQ1hQX01BWF9MQlVGX1NaOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+d2FpdF9xKTsKKworCWNsYWltX2ZjeHBfcmVxX3JzcF9tZW0obW9kLCBtZW1pbmZvKTsKKwljbGFpbV9mY3hwc19tZW0obW9kLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmbW9kLT5mY3hwX2FjdGl2ZV9xKSB7CisJCWZjeHAgPSAoc3RydWN0IGJmYV9mY3hwX3MgKikgcWU7CisJCWlmIChmY3hwLT5jYWxsZXIgPT0gTlVMTCkgeworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJQkZBX1NUQVRVU19JT0NfRkFJTFVSRSwgMCwgMCwgTlVMTCk7CisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2dldChzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKmZtKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3FfZGVxKCZmbS0+ZmN4cF9mcmVlX3EsICZmY3hwKTsKKworCWlmIChmY3hwKQorCQlsaXN0X2FkZF90YWlsKCZmY3hwLT5xZSwgJmZtLT5mY3hwX2FjdGl2ZV9xKTsKKworCXJldHVybiAoZmN4cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9wdXQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZTsKKworCWJmYV9xX2RlcSgmbW9kLT53YWl0X3EsICZ3cWUpOworCWlmICh3cWUpIHsKKwkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQl3cWUtPmFsbG9jX2NiZm4od3FlLT5hbGxvY19jYmFyZywgZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+ZmN4cF9hY3RpdmVfcSwgZmN4cCkpOworCWxpc3RfZGVsKCZmY3hwLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX251bGxfY29tcCh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCS8qKmRpc2NhcmRlZCBmY3hwIGNvbXBsZXRpb24gKi8KK30KKworc3RhdGljIHZvaWQKK19fYmZhX2ZjeHBfc2VuZF9jYmZuKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQlmY3hwLT5yc3Bfc3RhdHVzLCBmY3hwLT5yc3BfbGVuLAorCQkJCWZjeHAtPnJlc2lkdWVfbGVuLCAmZmN4cC0+cnNwX2ZjaHMpOworCX0gZWxzZSB7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2VuZF9jb21wKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqZmN4cF9yc3ApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zCSptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CisJdTE2CQlmY3hwX3RhZyA9IGJmYV9vc19udG9ocyhmY3hwX3JzcC0+ZmN4cF90YWcpOworCisJYmZhX3RyYyhiZmEsIGZjeHBfdGFnKTsKKworCWZjeHBfcnNwLT5yc3BfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yc3BfbGVuKTsKKworCS8qKgorCSAqIEB0b2RvIGYvdyBzaG91bGQgbm90IHNldCByZXNpZHVlIHRvIG5vbi0wIHdoZW4gZXZlcnl0aGluZworCSAqICAgICAgIGlzIHJlY2VpdmVkLgorCSAqLworCWlmIChmY3hwX3JzcC0+cmVxX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4gPSAwOworCWVsc2UKKwkJZmN4cF9yc3AtPnJlc2lkdWVfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yZXNpZHVlX2xlbik7CisKKwlmY3hwID0gQkZBX0ZDWFBfRlJPTV9UQUcobW9kLCBmY3hwX3RhZyk7CisKKwliZmFfYXNzZXJ0KGZjeHAtPnNlbmRfY2JmbiAhPSBOVUxMKTsKKworCWhhbF9mY3hwX3J4X3Bsb2cobW9kLT5iZmEsIGZjeHAsIGZjeHBfcnNwKTsKKworCWlmIChmY3hwLT5zZW5kX2NiZm4gIT0gTlVMTCkgeworCQlpZiAoZmN4cC0+Y2FsbGVyID09IE5VTEwpIHsKKwkJCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJZmN4cF9yc3AtPnJlcV9zdGF0dXMsIGZjeHBfcnNwLT5yc3BfbGVuLAorCQkJCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4sICZmY3hwX3JzcC0+ZmNocyk7CisJCQkvKgorCQkJICogZmN4cCBhdXRvbWF0aWNhbGx5IGZyZWVkIG9uIHJldHVybiBmcm9tIHRoZSBjYWxsYmFjaworCQkJICovCisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IGZjeHBfcnNwLT5yZXFfc3RhdHVzOworCQkJZmN4cC0+cnNwX2xlbiA9IGZjeHBfcnNwLT5yc3BfbGVuOworCQkJZmN4cC0+cmVzaWR1ZV9sZW4gPSBmY3hwX3JzcC0+cmVzaWR1ZV9sZW47CisJCQlmY3hwLT5yc3BfZmNocyA9IGZjeHBfcnNwLT5mY2hzOworCisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV90cmMoYmZhLCBmY3hwX3RhZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc3RydWN0IGJmaV9zZ2VfcyAqc2dlLCB1MzIgcmVxbGVuLCB1NjQgcmVxX3BhKQoreworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBzZ2FfemVybyA9IHsgezB9IH07CisKKwlzZ2UtPnNnX2xlbiA9IHJlcWxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisJYmZhX2RtYV9hZGRyX3NldChzZ2VbMF0uc2dhLCByZXFfcGEpOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwlzZ2UrKzsKKworCXNnZS0+c2dhID0gc2dhX3plcm87CisJc2dlLT5zZ19sZW4gPSByZXFsZW47CisJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3R4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFsZW4sIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwkvKgorCSAqIFRPRE86IFRYIG94X2lkCisJICovCisJaWYgKHJlcWxlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcmVxYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JFUV9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsCisJCQkJcmVxbGVuICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpLCBmY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsIHJlcWxlbiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSwKKwkJCQlmY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9UWCwKKwkJCSAgICAgICByZXFsZW4gKyBzaXplb2Yoc3RydWN0IGZjaHNfcyksIGZjaHMpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3J4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKmZjeHBfcnNwKQoreworCWlmIChmY3hwX3JzcC0+cnNwX2xlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcnNwYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCQkgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCQkgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkJICAgICAgJmZjeHBfcnNwLT5mY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCSAgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkgICAgICAgJmZjeHBfcnNwLT5mY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwgJmZjeHBfcnNwLT5mY2hzKTsKKwl9Cit9CisKKy8qKgorICogSGFuZGxlciB0byByZXN1bWUgc2VuZGluZyBmY3hwIHdoZW4gc3BhY2UgaW4gYXZhaWxhYmxlIGluIGNwZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX3MJCSpmY3hwID0gY2Jhcmc7CisJc3RydWN0IGJmYV9zCQkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCXNlbmRfcmVxID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0ZDWFApOworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBRdWV1ZSBmY3hwIHNlbmQgcmVxdWVzdCB0byBmb2ltcndhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MgKnNlbmRfcmVxKQoreworCXN0cnVjdCBiZmFfcyAgICAgIAkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmYV9ycG9ydF9zCQkqcnBvcnQgPSByZXFpLT5iZmFfcnBvcnQ7CisKKwliZmlfaDJpX3NldChzZW5kX3JlcS0+bWgsIEJGSV9NQ19GQ1hQLCBCRklfRkNYUF9IMklfU0VORF9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisKKwlzZW5kX3JlcS0+ZmN4cF90YWcgPSBiZmFfb3NfaHRvbnMoZmN4cC0+ZmN4cF90YWcpOworCWlmIChycG9ydCkgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IHJwb3J0LT5md19oYW5kbGU7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnBvcnQtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwkJaWYgKHNlbmRfcmVxLT5tYXhfZnJtc3ogPT0gMCkKKwkJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9IGVsc2UgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IDA7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9CisKKwlzZW5kX3JlcS0+dmZfaWQgPSBiZmFfb3NfaHRvbnMocmVxaS0+dmZfaWQpOworCXNlbmRfcmVxLT5scF90YWcgPSByZXFpLT5scF90YWc7CisJc2VuZF9yZXEtPmNsYXNzID0gcmVxaS0+Y2xhc3M7CisJc2VuZF9yZXEtPnJzcF90aW1lb3V0ID0gcnNwaS0+cnNwX3RpbWVvdXQ7CisJc2VuZF9yZXEtPmN0cyA9IHJlcWktPmN0czsKKwlzZW5kX3JlcS0+ZmNocyA9IHJlcWktPmZjaHM7CisKKwlzZW5kX3JlcS0+cmVxX2xlbiA9IGJmYV9vc19odG9ubChyZXFpLT5yZXFfdG90X2xlbik7CisJc2VuZF9yZXEtPnJzcF9tYXhsZW4gPSBiZmFfb3NfaHRvbmwocnNwaS0+cnNwX21heGxlbik7CisKKwkvKgorCSAqIHNldHVwIHJlcSBzZ2xlcworCSAqLworCWlmIChmY3hwLT51c2VfaXJlcWJ1ZiA9PSAxKSB7CisJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yZXFfc2dlLCByZXFpLT5yZXFfdG90X2xlbiwKKwkJCQkJQkZBX0ZDWFBfUkVRX1BMRF9QQShmY3hwKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZjeHAtPm5yZXFfc2dsZXMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KGZjeHAtPm5yZXFfc2dsZXMgPT0gMSk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cmVxX3NnZSwKKwkJCQkJCXJlcWktPnJlcV90b3RfbGVuLAorCQkJCQkJZmN4cC0+cmVxX3NnYV9jYmZuKGZjeHAtPmNhbGxlciwKKwkJCQkJCQkJICAgMCkpOworCQl9IGVsc2UgeworCQkJYmZhX2Fzc2VydChyZXFpLT5yZXFfdG90X2xlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCS8qCisJICogc2V0dXAgcnNwIHNnbGVzCisJICovCisJaWYgKGZjeHAtPnVzZV9pcnNwYnVmID09IDEpIHsKKwkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuIDw9IEJGQV9GQ1hQX01BWF9MQlVGX1NaKTsKKworCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwgcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJQkZBX0ZDWFBfUlNQX1BMRF9QQShmY3hwKSk7CisKKwl9IGVsc2UgeworCQlpZiAoZmN4cC0+bnJzcF9zZ2xlcyA+IDApIHsKKwkJCWJmYV9hc3NlcnQoZmN4cC0+bnJzcF9zZ2xlcyA9PSAxKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLAorCQkJCQkJcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJCWZjeHAtPnJzcF9zZ2FfY2JmbihmY3hwLT5jYWxsZXIsCisJCQkJCQkJCSAgIDApKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9hc3NlcnQocnNwaS0+cnNwX21heGxlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCWhhbF9mY3hwX3R4X3Bsb2coYmZhLCByZXFpLT5yZXFfdG90X2xlbiwgZmN4cCwgJnJlcWktPmZjaHMpOworCisJYmZhX3JlcXFfcHJvZHVjZShiZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyhiZmEsIGJmYV9yZXFxX3BpKGJmYSwgQkZBX1JFUVFfRkNYUCkpOworCWJmYV90cmMoYmZhLCBiZmFfcmVxcV9jaShiZmEsIEJGQV9SRVFRX0ZDWFApKTsKK30KKworCisvKioKKyAqICBoYWxfZmN4cF9hcGkgQkZBIEZDWFAgQVBJCisgKi8KKworLyoqCisgKiBBbGxvY2F0ZSBhbiBGQ1hQIGluc3RhbmNlIHRvIHNlbmQgYSByZXNwb25zZSBvciB0byBzZW5kIGEgcmVxdWVzdAorICogdGhhdCBoYXMgYSByZXNwb25zZS4gUmVxdWVzdC9yZXNwb25zZSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYnkgY2FsbGVyLgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCQlCRkEgYmZhIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCW5yZXFfc2dsZXMJTnVtYmVyIG9mIFNHIGVsZW1lbnRzIHJlcXVpcmVkIGZvciByZXF1ZXN0CisgKiAJCQkJYnVmZmVyLiAwLCBpZiBmY3hwIGludGVybmFsIGJ1ZmZlcnMgYXJlCXVzZWQuCisgKiAJCQkJVXNlIGJmYV9mY3hwX2dldF9yZXFidWYoKSB0byBnZXQgdGhlCisgKiAJCQkJaW50ZXJuYWwgcmVxIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0JcmVxX3NnbGVzCVNHIGVsZW1lbnRzIGRlc2NyaWJpbmcgcmVxdWVzdCBidWZmZXIuIFdpbGwgYmUKKyAqIAkJCQljb3BpZWQgaW4gYnkgQkZBIGFuZCBoZW5jZSBjYW4gYmUgZnJlZWQgb24KKyAqIAkJCQlyZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXQlnZXRfcmVxX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlBZGRyZXNzIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JlcV9zZ2xlbglmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlsZW4gKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICogQHBhcmFtW2luXQlnZXRfcnNwX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlc3BvbnNlIFNHCisgKiAJCQkJQWRkcmVzcyAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKiBAcGFyYW1baW5dCWdldF9yc3Bfc2dsZW4JZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXNwb25zZSBTRworICogCQkJCWxlbiAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKgorICogQHJldHVybiBGQ1hQIGluc3RhbmNlLiBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2FsbG9jKHZvaWQgKmNhbGxlciwgc3RydWN0IGJmYV9zICpiZmEsIGludCBucmVxX3NnbGVzLAorCQkJaW50IG5yc3Bfc2dsZXMsIGJmYV9mY3hwX2dldF9zZ2FkZHJfdCByZXFfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCByc3Bfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJdTMyICAgICAgICBucmVxX3NncGcsIG5yc3Bfc2dwZzsKKworCWJmYV9hc3NlcnQoYmZhICE9IE5VTEwpOworCisJZmN4cCA9IGJmYV9mY3hwX2dldChCRkFfRkNYUF9NT0QoYmZhKSk7CisJaWYgKGZjeHAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisKKwlmY3hwLT5jYWxsZXIgPSBjYWxsZXI7CisKKwlpZiAobnJlcV9zZ2xlcyA9PSAwKSB7CisJCWZjeHAtPnVzZV9pcmVxYnVmID0gMTsKKwl9IGVsc2UgeworCQliZmFfYXNzZXJ0KHJlcV9zZ2FfY2JmbiAhPSBOVUxMKTsKKwkJYmZhX2Fzc2VydChyZXFfc2dsZW5fY2JmbiAhPSBOVUxMKTsKKworCQlmY3hwLT51c2VfaXJlcWJ1ZiA9IDA7CisJCWZjeHAtPnJlcV9zZ2FfY2JmbiA9IHJlcV9zZ2FfY2JmbjsKKwkJZmN4cC0+cmVxX3NnbGVuX2NiZm4gPSByZXFfc2dsZW5fY2JmbjsKKworCQlmY3hwLT5ucmVxX3NnbGVzID0gbnJlcV9zZ2xlczsKKworCQkvKgorCQkgKiBhbGxvYyByZXF1aXJlZCBzZ3BncworCQkgKi8KKwkJaWYgKG5yZXFfc2dsZXMgPiBCRklfU0dFX0lOTElORSkgeworCQkJbnJlcV9zZ3BnID0gQkZBX1NHUEdfTlBBR0UobnJlcV9zZ2xlcyk7CisKKwkJCWlmIChiZmFfc2dwZ19tYWxsb2MKKwkJCSAgICAoYmZhLCAmZmN4cC0+cmVxX3NncGdfcSwgbnJlcV9zZ3BnKQorCQkJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJCQkvKiBiZmFfc2dwZ193YWl0KGJmYSwgJmZjeHAtPnJlcV9zZ3BnX3dxZSwKKwkJCQlucmVxX3NncGcpOyAqLworCQkJCS8qCisJCQkJICogVE9ETworCQkJCSAqLworCQkJfQorCQl9CisJfQorCisJaWYgKG5yc3Bfc2dsZXMgPT0gMCkgeworCQlmY3hwLT51c2VfaXJzcGJ1ZiA9IDE7CisJfSBlbHNlIHsKKwkJYmZhX2Fzc2VydChyc3Bfc2dhX2NiZm4gIT0gTlVMTCk7CisJCWJmYV9hc3NlcnQocnNwX3NnbGVuX2NiZm4gIT0gTlVMTCk7CisKKwkJZmN4cC0+dXNlX2lyc3BidWYgPSAwOworCQlmY3hwLT5yc3Bfc2dhX2NiZm4gPSByc3Bfc2dhX2NiZm47CisJCWZjeHAtPnJzcF9zZ2xlbl9jYmZuID0gcnNwX3NnbGVuX2NiZm47CisKKwkJZmN4cC0+bnJzcF9zZ2xlcyA9IG5yc3Bfc2dsZXM7CisJCS8qCisJCSAqIGFsbG9jIHJlcXVpcmVkIHNncGdzCisJCSAqLworCQlpZiAobnJzcF9zZ2xlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlucnNwX3NncGcgPSBCRkFfU0dQR19OUEFHRShucmVxX3NnbGVzKTsKKworCQkJaWYgKGJmYV9zZ3BnX21hbGxvYworCQkJICAgIChiZmEsICZmY3hwLT5yc3Bfc2dwZ19xLCBucnNwX3NncGcpCisJCQkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCS8qIGJmYV9zZ3BnX3dhaXQoYmZhLCAmZmN4cC0+cnNwX3NncGdfd3FlLAorCQkJCW5yc3Bfc2dwZyk7ICovCisJCQkJLyoKKwkJCQkgKiBUT0RPCisJCQkJICovCisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gKGZjeHApOworfQorCisvKioKKyAqIEdldCB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybiAJCXBvaW50ZXIgdG8gdGhlIGludGVybmFsIHJlcXVlc3QgYnVmZmVyCisgKi8KK3ZvaWQgKgorYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCXZvaWQJKnJlcWJ1ZjsKKworCWJmYV9hc3NlcnQoZmN4cC0+dXNlX2lyZXFidWYgPT0gMSk7CisJcmVxYnVmID0gKCh1OCAqKW1vZC0+cmVxX3BsZF9saXN0X2t2YSkgKworCQkJZmN4cC0+ZmN4cF90YWcgKiBtb2QtPnJlcV9wbGRfc3o7CisJcmV0dXJuIHJlcWJ1ZjsKK30KKwordTMyCitiZmFfZmN4cF9nZXRfcmVxYnVmc3ooc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKworCXJldHVybiBtb2QtPnJlcV9wbGRfc3o7Cit9CisKKy8qKgorICogR2V0IHRoZSBpbnRlcm5hbCByZXNwb25zZSBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybgkJcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIKKyAqLwordm9pZCAqCitiZmFfZmN4cF9nZXRfcnNwYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisJdm9pZAkqcnNwYnVmOworCisJYmZhX2Fzc2VydChmY3hwLT51c2VfaXJzcGJ1ZiA9PSAxKTsKKworCXJzcGJ1ZiA9ICgodTggKiltb2QtPnJzcF9wbGRfbGlzdF9rdmEpICsKKwkJCWZjeHAtPmZjeHBfdGFnICogbW9kLT5yc3BfcGxkX3N6OworCXJldHVybiByc3BidWY7Cit9CisKKy8qKgorICogCQlGcmVlIHRoZSBCRkEgRkNYUAorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAkJCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCit2b2lkCitiZmFfZmN4cF9mcmVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisKKwliZmFfYXNzZXJ0KGZjeHAgIT0gTlVMTCk7CisJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCWJmYV9mY3hwX3B1dChmY3hwKTsKK30KKworLyoqCisgKiBTZW5kIGEgRkNYUCByZXF1ZXN0CisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqIEBwYXJhbVtpbl0JcnBvcnQJQkZBIHJwb3J0IHBvaW50ZXIuIENvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIHJwb3J0cworICogQHBhcmFtW2luXQl2Zl9pZAl2aXJ0dWFsIEZhYnJpYyBJRAorICogQHBhcmFtW2luXQlscF90YWcgIGxwb3J0IHRhZworICogQHBhcmFtW2luXQljdHMJdXNlIENvbnRpbm91cyBzZXF1ZW5jZQorICogQHBhcmFtW2luXQljb3MJZmMgQ2xhc3Mgb2YgU2VydmljZQorICogQHBhcmFtW2luXQlyZXFsZW4JcmVxdWVzdCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgRkNIUyBsZW5ndGgKKyAqIEBwYXJhbVtpbl0JZmNocwlmYyBIZWFkZXIgUG9pbnRlci4gVGhlIGhlYWRlciBjb250ZW50IHdpbGwgYmUgY29waWVkCisgKgkJCWluIGJ5IEJGQS4KKyAqCisgKiBAcGFyYW1baW5dCWNiZm4JY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiByZWNlaXZpbmcKKyAqIAkJCQkJCQkJdGhlIHJlc3BvbnNlCisgKiBAcGFyYW1baW5dCWNiYXJnCWFyZyBmb3IgY2JmbgorICogQHBhcmFtW2luXQlyc3BfdGltZW91dAorICoJCQlyZXNwb25zZSB0aW1lb3V0CisgKgorICogQHJldHVybgkJYmZhX3N0YXR1c190CisgKi8KK3ZvaWQKK2JmYV9mY3hwX3NlbmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCXUxNiB2Zl9pZCwgdTggbHBfdGFnLCBiZmFfYm9vbGVhbl90IGN0cywgZW51bSBmY19jb3MgY29zLAorCQl1MzIgcmVxbGVuLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCBiZmFfY2JfZmN4cF9zZW5kX3QgY2JmbiwKKwkJdm9pZCAqY2JhcmcsIHUzMiByc3BfbWF4bGVuLCB1OCByc3BfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYmZhX3MJCQkqYmZhICA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJYmZhX3RyYyhiZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCS8qKgorCSAqIHNldHVwIHJlcXVlc3QvcmVzcG9uc2UgaW5mbworCSAqLworCXJlcWktPmJmYV9ycG9ydCA9IHJwb3J0OworCXJlcWktPnZmX2lkID0gdmZfaWQ7CisJcmVxaS0+bHBfdGFnID0gbHBfdGFnOworCXJlcWktPmNsYXNzID0gY29zOworCXJzcGktPnJzcF90aW1lb3V0ID0gcnNwX3RpbWVvdXQ7CisJcmVxaS0+Y3RzID0gY3RzOworCXJlcWktPmZjaHMgPSAqZmNoczsKKwlyZXFpLT5yZXFfdG90X2xlbiA9IHJlcWxlbjsKKwlyc3BpLT5yc3BfbWF4bGVuID0gcnNwX21heGxlbjsKKwlmY3hwLT5zZW5kX2NiZm4gPSBjYmZuID8gY2JmbiA6IGJmYV9mY3hwX251bGxfY29tcDsKKwlmY3hwLT5zZW5kX2NiYXJnID0gY2Jhcmc7CisKKwkvKioKKwkgKiBJZiBubyByb29tIGluIENQRSBxdWV1ZSwgd2FpdCBmb3IKKwkgKi8KKwlzZW5kX3JlcSA9IGJmYV9yZXFxX25leHQoYmZhLCBCRkFfUkVRUV9GQ1hQKTsKKwlpZiAoIXNlbmRfcmVxKSB7CisJCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93YWl0KGJmYSwgQkZBX1JFUVFfRkNYUCwgJmZjeHAtPnJlcXFfd3FlKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBBYm9ydCBhIEJGQSBGQ1hQCisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3hwX2Fib3J0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCWJmYV9hc3NlcnQoMCk7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKwordm9pZAorYmZhX2ZjeHBfYWxsb2Nfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUsCisJCQliZmFfZmN4cF9hbGxvY19jYmZuX3QgYWxsb2NfY2Jmbiwgdm9pZCAqYWxsb2NfY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmbW9kLT5mY3hwX2ZyZWVfcSkpOworCisJd3FlLT5hbGxvY19jYmZuID0gYWxsb2NfY2JmbjsKKwl3cWUtPmFsbG9jX2NiYXJnID0gYWxsb2NfY2Jhcmc7CisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+d2FpdF9xKTsKK30KKwordm9pZAorYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT53YWl0X3EsIHdxZSkpOworCWxpc3RfZGVsKCZ3cWUtPnFlKTsKK30KKwordm9pZAorYmZhX2ZjeHBfZGlzY2FyZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwkvKioKKwkgKiBJZiB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUsIGNhbmNlbCByZXFxIHdhaXQKKwkgKiBhbmQgZnJlZSBmY3hwLgorCSAqLworCWlmIChmY3hwLT5yZXFxX3dhaXRpbmcpIHsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93Y2FuY2VsKCZmY3hwLT5yZXFxX3dxZSk7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwlmY3hwLT5zZW5kX2NiZm4gPSBiZmFfZmN4cF9udWxsX2NvbXA7Cit9CisKKworCisvKioKKyAqICBoYWxfZmN4cF9wdWJsaWMgQkZBIEZDWFAgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV9mY3hwX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKQoreworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX0ZDWFBfSTJIX1NFTkRfUlNQOgorCQloYWxfZmN4cF9zZW5kX2NvbXAoYmZhLCAoc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKikgbXNnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit1MzIKK2JmYV9mY3hwX2dldF9tYXhyc3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCXJldHVybiBtb2QtPnJzcF9wbGRfc3o7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RhNDkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1hQX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0ZDWFBfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfZmN4cC5oPgorCisjZGVmaW5lIEJGQV9GQ1hQX01JTiAgICAgCSgxKQorI2RlZmluZSBCRkFfRkNYUF9NQVhfSUJVRl9TWgkoMiAqIDEwMjQgKyAyNTYpCisjZGVmaW5lIEJGQV9GQ1hQX01BWF9MQlVGX1NaCSg0ICogMTAyNCArIDI1NikKKworc3RydWN0IGJmYV9mY3hwX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhOwkJLyogIGJhY2twb2ludGVyIHRvIEJGQSAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2xpc3Q7CS8qICBhcnJheSBvZiBGQ1hQcyAqLworCXUxNiAgICAgICAgbnVtX2ZjeHBzOwkvKiAgbWF4IG51bSBGQ1hQIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBmY3hwX2ZyZWVfcTsJLyogIGZyZWUgRkNYUHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZjeHBfYWN0aXZlX3E7CS8qICBhY3RpdmUgRkNYUHMgKi8KKwl2b2lkCSpyZXFfcGxkX2xpc3Rfa3ZhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl1NjQgcmVxX3BsZF9saXN0X3BhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl2b2lkICpyc3BfcGxkX2xpc3Rfa3ZhOwkJLyogIGxpc3Qgb2YgRkNYUCByZXNwIHBsZCAqLworCXU2NCByc3BfcGxkX2xpc3RfcGE7CS8qICBsaXN0IG9mIEZDWFAgcmVzcCBwbGQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICB3YWl0X3E7CQkvKiAgd2FpdCBxdWV1ZSBmb3IgZnJlZSBmY3hwICovCisJdTMyCXJlcV9wbGRfc3o7CisJdTMyCXJzcF9wbGRfc3o7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5mY3hwX21vZCkKKyNkZWZpbmUgQkZBX0ZDWFBfRlJPTV9UQUcoX19tb2QsIF9fdGFnKQkoJihfX21vZCktPmZjeHBfbGlzdFtfX3RhZ10pCisKK3R5cGVkZWYgdm9pZCAgICAoKmZjeHBfc2VuZF9jYl90KSAoc3RydWN0IGJmYV9zICppb2MsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgIHZvaWQgKmNiX2FyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCisvKioKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYSBGQ1hQIHJlcXVlc3QKKyAqLworc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgeworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0OwkvKiAgUG9pbnRlciB0byB0aGUgYmZhIHJwb3J0IHRoYXQgd2FzCisJCQkJCSAqcmV0dXJuZWQgZnJvbSBiZmFfcnBvcnRfY3JlYXRlKCkuCisJCQkJCSAqVGhpcyBjb3VsZCBiZSBsZWZ0IE5VTEwgZm9yIFdLQSBvciBmb3IKKwkJCQkJICpGQ1hQIGludGVyYWN0aW9ucyBiZWZvcmUgdGhlIHJwb3J0CisJCQkJCSAqbmV4dXMgaXMgZXN0YWJsaXNoZWQKKwkJCQkJICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgKi8KKwl1OCBjdHM7CQkvKiAgY29udGlub3VzIHNlcXVlbmNlICovCisJdTggY2xhc3M7CQkvKiAgRkMgY2xhc3MgZm9yIHRoZSByZXF1ZXN0L3Jlc3BvbnNlICovCisJdTE2IG1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUgKi8KKwl1MTYgdmZfaWQ7CQkvKiAgdnNhbiB0YWcgaWYgYXBwbGljYWJsZSAqLworCXU4CWxwX3RhZzsJCS8qICBscG9ydCB0YWcgKi8KKwl1MzIgcmVxX3RvdF9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgdG90YWwgbGVuZ3RoICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyB7CisJc3RydWN0IGZjaHNfcyByc3BfZmNoczsJCS8qICBSZXNwb25zZSBmcmFtZSdzIEZDIGhlYWRlciB3aWxsCisJCQkJCSAqIGJlICpzZW50IGJhY2sgaW4gdGhpcyBmaWVsZCAqLworCXU4ICAgICAgICAgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY29uZHMsIDAtbm8gcmVzcG9uc2UKKwkJCQkJICovCisJdTggICAgICAgICByc3ZkMlszXTsKKwl1MzIgICAgICAgIHJzcF9tYXhsZW47CS8qICBtYXggcmVzcG9uc2UgbGVuZ3RoIGV4cGVjdGVkICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CQkvKiAgZmN4cCBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QgICAgICAgIHNtOyAgICAgICAgICAgICAvKiAgc3RhdGUgbWFjaGluZSAqLworCXZvaWQgICAgICAgICAgIAkqY2FsbGVyOwkvKiAgZHJpdmVyIG9yIGZjcyAqLworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqZmN4cF9tb2Q7CisJCQkJCS8qICBiYWNrIHBvaW50ZXIgdG8gZmN4cCBtb2QgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgaW50ZXJuYWwgdGFnICovCisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgcmVxX2luZm87CisJCQkJCS8qICByZXF1ZXN0IGluZm8gKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyByc3BfaW5mbzsKKwkJCQkJLyogIHJlc3BvbnNlIGluZm8gKi8KKwl1OCAJdXNlX2lyZXFidWY7CS8qICB1c2UgaW50ZXJuYWwgcmVxIGJ1ZiAqLworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CS8qICB1c2UgaW50ZXJuYWwgcnNwIGJ1ZiAqLworCXUzMiAgICAgICAgbnJlcV9zZ2xlczsJLyogIG51bSByZXF1ZXN0IFNHTEVzICovCisJdTMyICAgICAgICBucnNwX3NnbGVzOwkvKiAgbnVtIHJlc3BvbnNlIFNHTEVzICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ19xOwkvKiAgU0cgcGFnZXMgZm9yIHJlcXVlc3QgYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ193cWU7CS8qICB3YWl0IHF1ZXVlIGZvciByZXEgU0cgcGFnZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnNwX3NncGdfcTsJLyogIFNHIHBhZ2VzIGZvciByZXNwb25zZSBidWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJzcF9zZ3BnX3dxZTsJLyogIHdhaXQgcXVldWUgZm9yIHJzcCBTRyBwYWdlICovCisKKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcmVxX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcnNwX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfY2JfZmN4cF9zZW5kX3Qgc2VuZF9jYmZuOyAgIC8qICBzZW5kIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwl2b2lkCQkqc2VuZF9jYmFyZzsJLyogIGNhbGxiYWNrIGFyZyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByZXFfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJlcSBTRyBlbGVtcyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByc3Bfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJzcCBTRyBlbGVtcyAqLworCXU4ICAgICAgICAgcnNwX3N0YXR1czsJLyogIGNvbXA6IHJzcCBzdGF0dXMgKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qICBjb21wOiBhY3R1YWwgcmVzcG9uc2UgbGVuICovCisJdTMyICAgICAgICByZXNpZHVlX2xlbjsJLyogIGNvbXA6IHJlc2lkdWFsIHJzcCBsZW5ndGggKi8KKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIHJzcF9mY2hzOwkvKiAgY29tcDogcmVzcG9uc2UgZmNocyAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CS8qICBjb21wOiBjYWxsYmFjayBxZWxlbSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJcmVxcV93cWU7CisJYmZhX2Jvb2xlYW5fdAlyZXFxX3dhaXRpbmc7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX1JFUV9QTEQoX2ZjeHApIAkoYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihfZmN4cCkpCisKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX0ZDSFMoX2ZjeHApIAkoJigoX2ZjeHApLT5yc3BfaW5mby5mY2hzKSkKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX1BMRChfZmN4cCkgCShiZmFfZmN4cF9nZXRfcnNwYnVmKF9mY3hwKSkKKworI2RlZmluZSBCRkFfRkNYUF9SRVFfUExEX1BBKF9mY3hwKQkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cmVxX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJlcV9wbGRfc3ogICogKF9mY3hwKS0+ZmN4cF90YWcpKQorCisjZGVmaW5lIEJGQV9GQ1hQX1JTUF9QTERfUEEoX2ZjeHApIAkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cnNwX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJzcF9wbGRfc3ogKiAoX2ZjeHApLT5mY3hwX3RhZykpCisKK3ZvaWQJYmZhX2ZjeHBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX0ZDWFBfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMxMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GV0lNR19QUklWX0hfXworI2RlZmluZSBfX0JGQV9GV0lNR19QUklWX0hfXworCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWgkJMjU2CS8qICBGbGFzaCBjaHVuayBzaXplICovCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUwkoQkZJX0ZMQVNIX0NIVU5LX1NaL3NpemVvZih1MzIpKQorCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2VfY3Rfc2l6ZTsKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZik7CitleHRlcm4gdTMyIGJmaV9pbWFnZV9jYl9zaXplOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2N0OworCisjZW5kaWYgLyogX19CRkFfRldJTUdfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTE0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfcHJpdi5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2JyZWcuaD4KKwordm9pZAorYmZhX2h3Y2JfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwkqYmZhX3JlZ3MgPSAmYmZhLT5pb2NmYy5iZmFfcmVnczsKKwliZmFfb3NfYWRkcl90CQlrdmEgPSBiZmFfaW9jX2JhcjAoJmJmYS0+aW9jKTsKKwlpbnQgICAgICAgICAgICAgCWksIHEsIGZuID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJaWYgKGZuID09IDApIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjBfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4wX0lOVF9NU0spOworCX0gZWxzZSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4xX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMV9JTlRfTVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspIHsKKwkJLyoKKwkJICogQ1BFIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5jcGVfcV9waVtpXSA9IChrdmEgKyBDUEVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9jaVtpXSA9IChrdmEgKyBDUEVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9kZXB0aFtpXSA9IChrdmEgKyBDUEVfUV9ERVBUSChxKSk7CisKKwkJLyoKKwkJICogUk1FIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5ybWVfcV9waVtpXSA9IChrdmEgKyBSTUVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9jaVtpXSA9IChrdmEgKyBSTUVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9kZXB0aFtpXSA9IChrdmEgKyBSTUVfUV9ERVBUSChxKSk7CisJfQorfQorCit2b2lkCitiZmFfaHdjYl9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaHdjYl9yc3BxX2Fja19tc2l4KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsCisJCV9fSEZOX0lOVF9STUVfUTAgPDwgUk1FX1FfTlVNKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSwgcnNwcSkpOworfQorCit2b2lkCitiZmFfaHdjYl9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqbXNpeF92ZWNzX2JtYXAsCisJCSB1MzIgKm51bV92ZWNzLCB1MzIgKm1heF92ZWNfYml0KQoreworI2RlZmluZSBfX0hGTl9OVU1JTlRTCTEzCisJaWYgKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSA9PSAwKSB7CisJCSptc2l4X3ZlY3NfYm1hcCA9IChfX0hGTl9JTlRfQ1BFX1EwIHwgX19IRk5fSU5UX0NQRV9RMSB8CisJCQkJICAgX19IRk5fSU5UX0NQRV9RMiB8IF9fSEZOX0lOVF9DUEVfUTMgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTAgfCBfX0hGTl9JTlRfUk1FX1ExIHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1EyIHwgX19IRk5fSU5UX1JNRV9RMyB8CisJCQkJICAgX19IRk5fSU5UX01CT1hfTFBVMCk7CisJCSptYXhfdmVjX2JpdCA9IF9fSEZOX0lOVF9NQk9YX0xQVTA7CisJfSBlbHNlIHsKKwkJKm1zaXhfdmVjc19ibWFwID0gKF9fSEZOX0lOVF9DUEVfUTQgfCBfX0hGTl9JTlRfQ1BFX1E1IHwKKwkJCQkgICBfX0hGTl9JTlRfQ1BFX1E2IHwgX19IRk5fSU5UX0NQRV9RNyB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RNCB8IF9fSEZOX0lOVF9STUVfUTUgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTYgfCBfX0hGTl9JTlRfUk1FX1E3IHwKKwkJCQkgICBfX0hGTl9JTlRfTUJPWF9MUFUxKTsKKwkJKm1heF92ZWNfYml0ID0gX19IRk5fSU5UX01CT1hfTFBVMTsKKwl9CisKKwkqbXNpeF92ZWNzX2JtYXAgfD0gKF9fSEZOX0lOVF9FUlJfRU1DIHwgX19IRk5fSU5UX0VSUl9MUFUwIHwKKwkJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisJKm51bV92ZWNzID0gX19IRk5fTlVNSU5UUzsKK30KKworLyoqCisgKiBObyBzcGVjaWFsIHNldHVwIHJlcXVpcmVkIGZvciBjcm9zc2JvdyAtLSB2ZWN0b3IgYXNzaWdubWVudHMgYXJlIGltcGxpY2l0LgorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwlpbnQgaTsKKworCWJmYV9hc3NlcnQoKG52ZWNzID09IDEpIHx8IChudmVjcyA9PSBfX0hGTl9OVU1JTlRTKSk7CisKKwliZmEtPm1zaXgubnZlY3MgPSBudmVjczsKKwlpZiAobnZlY3MgPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ0JfTUFYOyBpKyspCisJCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2FsbDsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IEJGQV9NU0lYX0NQRV9RMDsgaSA8PSBCRkFfTVNJWF9DUEVfUTc7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yZXFxOworCisJZm9yIChpID0gQkZBX01TSVhfUk1FX1EwOyBpIDw9IEJGQV9NU0lYX1JNRV9RNzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JzcHE7CisKKwlmb3IgKDsgaSA8IEJGQV9NU0lYX0NCX01BWDsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2xwdV9lcnI7Cit9CisKKy8qKgorICogQ3Jvc3Nib3cgLS0gZHVtbXksIGludGVycnVwdHMgYXJlIG1hc2tlZAorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3ZvaWQKK2JmYV9od2NiX21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIE5vIHNwZWNpYWwgZW5hYmxlL2Rpc2FibGUgLS0gdmVjdG9yIGFzc2lnbm1lbnRzIGFyZSBpbXBsaWNpdC4KKyAqLwordm9pZAorYmZhX2h3Y2JfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpCit7CisJYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWFlNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0NGQ19DVCk7CisKK3N0YXRpYyB1MzIgX19jdF9tc2l4X2Vycl92ZWNfcmVnW10gPSB7CisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjAsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjEsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjIsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjMsCit9OworCitzdGF0aWMgdm9pZAorYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4LCBpbnQgdmVjKQoreworCWludCBmbiA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKwliZmFfb3NfYWRkcl90IGt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCisJaWYgKG1zaXgpCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgdmVjKTsKKwllbHNlCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgMCk7Cit9CisKKy8qKgorICogRHVtbXkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGhhbmRsaW5nIHNwdXJpb3VzIGludGVycnVwdCBkdXJpbmcgY2hpcC1yZWluaXQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaHdjdF9tc2l4X2R1bW15KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworfQorCit2b2lkCitiZmFfaHdjdF9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcmVnc19zCSpiZmFfcmVncyA9ICZiZmEtPmlvY2ZjLmJmYV9yZWdzOworCWJmYV9vc19hZGRyX3QJCWt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCWludCAgICAgICAgICAgICAJaSwgcSwgZm4gPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisKKwlpZiAoZm4gPT0gMCkgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMF9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjBfSU5UX01TSyk7CisJfSBlbHNlIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjFfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4xX0lOVF9NU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01BWF9DUVM7IGkrKykgeworCQkvKgorCQkgKiBDUEUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX3BpW2ldID0gKGt2YSArIENQRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2NpW2ldID0gKGt2YSArIENQRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2RlcHRoW2ldID0gKGt2YSArIENQRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+Y3BlX3FfY3RybFtpXSA9IChrdmEgKyBDUEVfUUNUUkxfUShxIDw8IDUpKTsKKworCQkvKgorCQkgKiBSTUUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX3BpW2ldID0gKGt2YSArIFJNRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2NpW2ldID0gKGt2YSArIFJNRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2RlcHRoW2ldID0gKGt2YSArIFJNRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+cm1lX3FfY3RybFtpXSA9IChrdmEgKyBSTUVfUUNUUkxfUShxIDw8IDUpKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwl1MzIJcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY3RybFtyc3BxXSk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2N0cmxbcnNwcV0sIHIzMik7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJIHUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpCit7CisJKm1zaXhfdmVjc19ibWFwID0gKDEgPDwgQkZBX01TSVhfQ1RfTUFYKSAtIDE7CisJKm1heF92ZWNfYml0ID0gKDEgPDwgKEJGQV9NU0lYX0NUX01BWCAtIDEpKTsKKwkqbnVtX3ZlY3MgPSBCRkFfTVNJWF9DVF9NQVg7Cit9CisKKy8qKgorICogU2V0dXAgTVNJLVggdmVjdG9yIGZvciBjYXRhcHVsdAorICovCit2b2lkCitiZmFfaHdjdF9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwliZmFfYXNzZXJ0KChudmVjcyA9PSAxKSB8fCAobnZlY3MgPT0gQkZBX01TSVhfQ1RfTUFYKSk7CisJYmZhX3RyYyhiZmEsIG52ZWNzKTsKKworCWJmYS0+bXNpeC5udmVjcyA9IG52ZWNzOworCWJmYV9od2N0X21zaXhfdW5pbnN0YWxsKGJmYSk7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgaTsKKworCWlmIChiZmEtPm1zaXgubnZlY3MgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGJmYS0+bXNpeC5udmVjcyA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBCRkFfTVNJWF9DVF9NQVg7IGkrKykKKwkJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfYWxsOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gQkZBX01TSVhfQ1BFX1EwOyBpIDw9IEJGQV9NU0lYX0NQRV9RMzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JlcXE7CisKKwlmb3IgKDsgaSA8PSBCRkFfTVNJWF9STUVfUTM7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yc3BxOworCisJYmZhX2Fzc2VydChpID09IEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYS0+bXNpeC5oYW5kbGVyW0JGQV9NU0lYX0xQVV9FUlJdID0gYmZhX21zaXhfbHB1X2VycjsKK30KKwordm9pZAorYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ1RfTUFYOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX2h3Y3RfbXNpeF9kdW1teTsKK30KKworLyoqCisgKiBFbmFibGUgTVNJLVggdmVjdG9ycworICovCit2b2lkCitiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfdHJjKGJmYSwgMCk7CisJYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChiZmEsIG1zaXgsIEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYV9pb2NfaXNyX21vZGVfc2V0KCZiZmEtPmlvYywgbXNpeCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTEyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NicmVnLmg+CisjaW5jbHVkZSA8YmZhX3BvcnRfcHJpdi5oPgorI2luY2x1ZGUgPGJmYV9pbnRyX3ByaXYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU5UUik7CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9lcnJpbnQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBpbnRyKQoreworCWJmYV9pb2NfZXJyb3JfaXNyKCZiZmEtPmlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9scHUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY19tYm94X2lzcigmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfbXNpeF9hbGwoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpCit7CisJYmZhX2ludHgoYmZhKTsKK30KKworLyoqCisgKiAgaGFsX2ludHJfYXBpCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pbnR4KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50ciwgcWludHI7CisJaW50ICAgICAgICAgICAgIHF1ZXVlOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBSTUUgY29tcGxldGlvbiBxdWV1ZSBpbnRlcnJ1cHQKKwkgKi8KKwlxaW50ciA9IGludHIgJiBfX0hGTl9JTlRfUk1FX01BU0s7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLCBxaW50cik7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBCRklfSU9DX01BWF9DUVNfQVNJQzsgcXVldWUgKyspIHsKKwkJaWYgKGludHIgJiAoX19IRk5fSU5UX1JNRV9RMCA8PCBxdWV1ZSkpCisJCQliZmFfbXNpeF9yc3BxKGJmYSwgcXVldWUgJiAoQkZJX0lPQ19NQVhfQ1FTIC0gMSkpOworCX0KKwlpbnRyICY9IH5xaW50cjsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfVFJVRTsKKworCS8qKgorCSAqIENQRSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdAorCSAqLworCXFpbnRyID0gaW50ciAmIF9fSEZOX0lOVF9DUEVfTUFTSzsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIHFpbnRyKTsKKworCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEJGSV9JT0NfTUFYX0NRU19BU0lDOyBxdWV1ZSsrKSB7CisJCWlmIChpbnRyICYgKF9fSEZOX0lOVF9DUEVfUTAgPDwgcXVldWUpKQorCQkJYmZhX21zaXhfcmVxcShiZmEsIHF1ZXVlICYgKEJGSV9JT0NfTUFYX0NRUyAtIDEpKTsKKwl9CisJaW50ciAmPSB+cWludHI7CisJaWYgKCFpbnRyKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfbXNpeF9scHVfZXJyKGJmYSwgaW50cik7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50cl91bm1hc2s7CisJaW50ICAgICAgICAgICAgIHBjaV9mdW5jID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJYmZhX3RyYyhiZmEsIHBjaV9mdW5jKTsKKworCWJmYV9tc2l4X2luc3RhbGwoYmZhKTsKKwlpbnRyX3VubWFzayA9IChfX0hGTl9JTlRfRVJSX0VNQyB8IF9fSEZOX0lOVF9FUlJfTFBVMCB8CisJCSAgICAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisKKwlpZiAocGNpX2Z1bmMgPT0gMCkKKwkJaW50cl91bm1hc2sgfD0gKF9fSEZOX0lOVF9DUEVfUTAgfCBfX0hGTl9JTlRfQ1BFX1ExIHwKKwkJCQlfX0hGTl9JTlRfQ1BFX1EyIHwgX19IRk5fSU5UX0NQRV9RMyB8CisJCQkJX19IRk5fSU5UX1JNRV9RMCB8IF9fSEZOX0lOVF9STUVfUTEgfAorCQkJCV9fSEZOX0lOVF9STUVfUTIgfCBfX0hGTl9JTlRfUk1FX1EzIHwKKwkJCQlfX0hGTl9JTlRfTUJPWF9MUFUwKTsKKwllbHNlCisJCWludHJfdW5tYXNrIHw9IChfX0hGTl9JTlRfQ1BFX1E0IHwgX19IRk5fSU5UX0NQRV9RNSB8CisJCQkJX19IRk5fSU5UX0NQRV9RNiB8IF9fSEZOX0lOVF9DUEVfUTcgfAorCQkJCV9fSEZOX0lOVF9STUVfUTQgfCBfX0hGTl9JTlRfUk1FX1E1IHwKKwkJCQlfX0hGTl9JTlRfUk1FX1E2IHwgX19IRk5fSU5UX1JNRV9RNyB8CisJCQkJX19IRk5fSU5UX01CT1hfTFBVMSk7CisKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIGludHJfdW5tYXNrKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCB+aW50cl91bm1hc2spOworCWJmYV9pc3JfbW9kZV9zZXQoYmZhLCBiZmEtPm1zaXgubnZlY3MgIT0gMCk7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaXNyX21vZGVfc2V0KGJmYSwgQkZBX0ZBTFNFKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCAtMUwpOworCWJmYV9tc2l4X3VuaW5zdGFsbChiZmEpOworfQorCit2b2lkCitiZmFfbXNpeF9yZXFxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcWlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgCQkqd2FpdHEsICpxZSwgKnFlbjsKKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCSp3cWU7CisKKwlxaWQgJj0gKEJGSV9JT0NfTUFYX0NRUyAtIDEpOworCisJd2FpdHEgPSBiZmFfcmVxcShiZmEsIHFpZCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sIHdhaXRxKSB7CisJCS8qKgorCQkgKiBDYWxsYmFjayBvbmx5IGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBpbiByZXF1ZXN0IHF1ZXVlCisJCSAqLworCQlpZiAoYmZhX3JlcXFfZnVsbChiZmEsIHFpZCkpCisJCQlicmVhazsKKworCQlsaXN0X2RlbChxZSk7CisJCXdxZSA9IChzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICopIHFlOworCQl3cWUtPnFyZXN1bWUod3FlLT5jYmFyZyk7CisJfQorfQorCit2b2lkCitiZmFfaXNyX3VuaGFuZGxlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfY2xhc3MpOworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXRhZy5pMmh0b2spOworCWJmYV9hc3NlcnQoMCk7CisJYmZhX3RyY19zdG9wKGJmYS0+dHJjbW9kKTsKK30KKwordm9pZAorYmZhX21zaXhfcnNwcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcF9xaWQpCit7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptOworCXUzMiAgICAgICAgcGksIGNpOworCisJYmZhX3RyY19mcChiZmEsIHJzcF9xaWQpOworCisJcnNwX3FpZCAmPSAoQkZJX0lPQ19NQVhfQ1FTIC0gMSk7CisKKwliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2soYmZhLCByc3BfcWlkKTsKKworCWNpID0gYmZhX3JzcHFfY2koYmZhLCByc3BfcWlkKTsKKwlwaSA9IGJmYV9yc3BxX3BpKGJmYSwgcnNwX3FpZCk7CisKKwliZmFfdHJjX2ZwKGJmYSwgY2kpOworCWJmYV90cmNfZnAoYmZhLCBwaSk7CisKKwlpZiAoYmZhLT5ybWVfcHJvY2VzcykgeworCQl3aGlsZSAoY2kgIT0gcGkpIHsKKwkJCW0gPSBiZmFfcnNwcV9lbGVtKGJmYSwgcnNwX3FpZCwgY2kpOworCQkJYmZhX2Fzc2VydF9mcChtLT5taGRyLm1zZ19jbGFzcyA8IEJGSV9NQ19NQVgpOworCisJCQliZmFfaXNyc1ttLT5taGRyLm1zZ19jbGFzc10gKGJmYSwgbSk7CisKKwkJCUNRX0lOQ1IoY2ksIGJmYS0+aW9jZmMuY2ZnLmRydmNmZy5udW1fcnNwcV9lbGVtcyk7CisJCX0KKwl9CisKKwkvKioKKwkgKiB1cGRhdGUgQ0kKKwkgKi8KKwliZmFfcnNwcV9jaShiZmEsIHJzcF9xaWQpID0gcGk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2NpW3JzcF9xaWRdLCBwaSk7CisJYmZhX29zX21taW93YigpOworfQorCit2b2lkCitiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworCXUzMiBpbnRyOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKworCWlmIChpbnRyICYgKF9fSEZOX0lOVF9NQk9YX0xQVTAgfCBfX0hGTl9JTlRfTUJPWF9MUFUxKSkKKwkJYmZhX21zaXhfbHB1KGJmYSk7CisKKwlpZiAoaW50ciAmIChfX0hGTl9JTlRfRVJSX0VNQyB8CisJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTAgfCBfX0hGTl9JTlRfRVJSX0xQVTEgfAorCQkgICAgX19IRk5fSU5UX0VSUl9QU1MpKQorCQliZmFfbXNpeF9lcnJpbnQoYmZhLCBpbnRyKTsKK30KKwordm9pZAorYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpCit7CisJYmZhX2lzcnNbbWNdID0gaXNyX2Z1bmM7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U2ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9JTlRSX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0lOVFJfUFJJVl9IX18KKworLyoqCisgKiBNZXNzYWdlIGhhbmRsZXIKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lzcl9mdW5jX3QpIChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSk7Cit2b2lkIGJmYV9pc3JfdW5oYW5kbGVkKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKK3ZvaWQgYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpOworCisKKyNkZWZpbmUgYmZhX3JlcXFfcGkoX19iZmEsIF9fcmVxcSkJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0KKyNkZWZpbmUgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkJCQkJCVwKKwkqKHUzMiAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3Ffc2hhZG93X2NpW19fcmVxcV0ua3ZhKQorCisjZGVmaW5lIGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkJCQkJXAorCSgoKGJmYV9yZXFxX3BpKF9fYmZhLCBfX3JlcXEpICsgMSkgJgkJCVwKKwkgICgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSkpID09CVwKKwkgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkpCisKKyNkZWZpbmUgYmZhX3JlcXFfbmV4dChfX2JmYSwgX19yZXFxKQkJCQlcCisJKGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkgPyBOVUxMIDoJCQlcCisJICgodm9pZCAqKSgoc3RydWN0IGJmaV9tc2dfcyAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3FfYmFbX19yZXFxXS5rdmEpIFwKKwkJCSAgKyBiZmFfcmVxcV9waSgoX19iZmEpLCAoX19yZXFxKSkpKSkKKworI2RlZmluZSBiZmFfcmVxcV9wcm9kdWNlKF9fYmZhLCBfX3JlcXEpCWRvIHsJCQkJXAorCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdKys7CQkJCVwKKwkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSAmPQkJCQlcCisJCSgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSk7ICAgICAgXAorCWJmYV9yZWdfd3JpdGUoKF9fYmZhKS0+aW9jZmMuYmZhX3JlZ3MuY3BlX3FfcGlbX19yZXFxXSwJCVwKKwkJCQkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSk7ICAgICAgXAorCWJmYV9vc19tbWlvd2IoKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yc3BxX3BpKF9fYmZhLCBfX3JzcHEpCQkJCQlcCisJKih1MzIgKikoKF9fYmZhKS0+aW9jZmMucnNwX2NxX3NoYWRvd19waVtfX3JzcHFdLmt2YSkKKworI2RlZmluZSBiZmFfcnNwcV9jaShfX2JmYSwgX19yc3BxKQkoX19iZmEpLT5pb2NmYy5yc3BfY3FfY2lbX19yc3BxXQorI2RlZmluZSBiZmFfcnNwcV9lbGVtKF9fYmZhLCBfX3JzcHEsIF9fY2kpCQkJCVwKKwkmKChzdHJ1Y3QgYmZpX21zZ19zICopKChfX2JmYSktPmlvY2ZjLnJzcF9jcV9iYVtfX3JzcHFdLmt2YSkpW19fY2ldCisKKyNkZWZpbmUgQ1FfSU5DUihfX2luZGV4LCBfX3NpemUpCQkJCQlcCisJCQkoX19pbmRleCkrKzsgKF9faW5kZXgpICY9ICgoX19zaXplKSAtIDEpCisKKy8qKgorICogUXVldWUgZWxlbWVudCB0byB3YWl0IGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuIEZJRk8gb3JkZXIgaXMKKyAqIG1haW50YWluZWQgd2hlbiBmdWxsZmlsbGluZyByZXF1ZXN0cy4KKyAqLworc3RydWN0IGJmYV9yZXFxX3dhaXRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CisJdm9pZAkJKCpxcmVzdW1lKSAodm9pZCAqY2JhcmcpOworCXZvaWQJCSpjYmFyZzsKK307CisKKy8qKgorICogQ2lyY3VsYXIgcXVldWUgdXNhZ2UgYXNzaWdubWVudHMKKyAqLworZW51bSB7CisJQkZBX1JFUVFfSU9DCT0gMCwJLyogIGFsbCBsb3ctcHJpb3JpdHkgSU9DIG1zZ3MJKi8KKwlCRkFfUkVRUV9GQ1hQCT0gMCwJLyogIGFsbCBGQ1hQIG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX0xQUwk9IDAsCS8qICBhbGwgbHBvcnQgc2VydmljZSBtc2dzCSovCisJQkZBX1JFUVFfUE9SVAk9IDAsCS8qICBhbGwgcG9ydCBtZXNzYWdlcwkJKi8KKwlCRkFfUkVRUV9GTEFTSAk9IDAsCS8qICBmb3IgZmxhc2ggbW9kdWxlCQkqLworCUJGQV9SRVFRX0RJQUcJPSAwLAkvKiAgZm9yIGRpYWcgbW9kdWxlCQkqLworCUJGQV9SRVFRX1JQT1JUCT0gMCwJLyogIGFsbCBwb3J0IG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX1NCT09UCT0gMCwJLyogIGFsbCBzYW4gYm9vdCBtZXNzYWdlcwkqLworCUJGQV9SRVFRX1FPU19MTwk9IDEsCS8qICBhbGwgbG93IHByaW9yaXR5IElPCSovCisJQkZBX1JFUVFfUU9TX01ECT0gMiwJLyogIGFsbCBtZWRpdW0gcHJpb3JpdHkgSU8JKi8KKwlCRkFfUkVRUV9RT1NfSEkJPSAzLAkvKiAgYWxsIGhpZ2ggcHJpb3JpdHkgSU8JKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3JlcXFfd2luaXQoc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAqd3FlLCB2b2lkICgqcXJlc3VtZSkgKHZvaWQgKmNiYXJnKSwKKwkJCXZvaWQgKmNiYXJnKQoreworCXdxZS0+cXJlc3VtZSA9IHFyZXN1bWU7CisJd3FlLT5jYmFyZyA9IGNiYXJnOworfQorCisjZGVmaW5lIGJmYV9yZXFxKF9fYmZhLCBfX3JlcXEpCSYoX19iZmEpLT5yZXFxX3dhaXRxW19fcmVxcV0KKworLyoqCisgKiBzdGF0aWMgaW5saW5lIHZvaWQKKyAqIGJmYV9yZXFxX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCByZXFxLCBzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICp3cWUpCisgKi8KKyNkZWZpbmUgYmZhX3JlcXFfd2FpdChfX2JmYSwgX19yZXFxLCBfX3dxZSkgZG8gewkJCVwKKwkJCQkJCQkJCVwKKwkJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHEgPSBiZmFfcmVxcShfX2JmYSwgX19yZXFxKTsgICAgICBcCisJCQkJCQkJCQlcCisJCWJmYV9hc3NlcnQoKChfX3JlcXEpIDwgQkZJX0lPQ19NQVhfQ1FTKSk7ICAgICAgXAorCQliZmFfYXNzZXJ0KChfX3dxZSktPnFyZXN1bWUgJiYgKF9fd3FlKS0+Y2JhcmcpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwkJbGlzdF9hZGRfdGFpbCgmKF9fd3FlKS0+cWUsIHdhaXRxKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yZXFxX3djYW5jZWwoX193cWUpCWxpc3RfZGVsKCYoX193cWUpLT5xZSkKKworI2VuZGlmIC8qIF9fQkZBX0lOVFJfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5MzQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCkBAIC0wLDAgKzEsMjM4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGJmYV9md2ltZ19wcml2Lmg+CisjaW5jbHVkZSA8YmZhX3RyY21vZF9wcml2Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW4uaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0MpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NfVE9WCQkyMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfVE9WCQkxMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfRkFJTF9NQVgJNAorI2RlZmluZSBCRkFfSU9DX0hXSU5JVF9NQVgJMgorI2RlZmluZSBCRkFfSU9DX0ZXSU1HX01JTlNaICAgICAoMTYgKiAxMDI0KQorI2RlZmluZSBCRkFfSU9DX1RPVl9SRUNPVkVSCShCRkFfSU9DX0hCX0ZBSUxfTUFYICogQkZBX0lPQ19IQl9UT1YgXAorCQkJCSsgQkZBX0lPQ19UT1YpCisKKyNkZWZpbmUgYmZhX2lvY190aW1lcl9zdGFydChfX2lvYykJCQkJCVwKKwliZmFfdGltZXJfYmVnaW4oKF9faW9jKS0+dGltZXJfbW9kLCAmKF9faW9jKS0+aW9jX3RpbWVyLAlcCisJCQliZmFfaW9jX3RpbWVvdXQsIChfX2lvYyksIEJGQV9JT0NfVE9WKQorI2RlZmluZSBiZmFfaW9jX3RpbWVyX3N0b3AoX19pb2MpICAgYmZhX3RpbWVyX3N0b3AoJihfX2lvYyktPmlvY190aW1lcikKKworI2RlZmluZSBCRkFfREJHX0ZXVFJDX0VOVFMJKEJGSV9JT0NfVFJDX0VOVFMpCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfTEVOCQkJCQlcCisJKEJGQV9EQkdfRldUUkNfRU5UUyAqIHNpemVvZihzdHJ1Y3QgYmZhX3RyY19zKSArCVwKKwkgKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcykgLQkJCVwKKwkgIEJGQV9UUkNfTUFYICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpKSkKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19PRkYoX2ZuKQkoQkZJX0lPQ19UUkNfT0ZGICsgQkZBX0RCR19GV1RSQ19MRU4gKiAoX2ZuKSkKKyNkZWZpbmUgYmZhX2lvY19zdGF0cyhfaW9jLCBfc3RhdHMpCShfaW9jKS0+c3RhdHMuX3N0YXRzICsrCisKKyNkZWZpbmUgQkZBX0ZMQVNIX0NIVU5LX05PKG9mZikgICAgICAgICAob2ZmIC8gQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTKQorI2RlZmluZSBCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKG9mZikgIChvZmYgJSBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCisjZGVmaW5lIEJGQV9GTEFTSF9DSFVOS19BRERSKGNodW5rbm8pICAgKGNodW5rbm8gKiBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCitiZmFfYm9vbGVhbl90ICAgYmZhX2F1dG9fcmVjb3ZlciA9IEJGQV9GQUxTRTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmJmYSwKKwkJCQkgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfdGltZW91dCh2b2lkICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9nZXRhdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9tb25pdG9yKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbWJveF9wb2xsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19tYm94X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19maXJtd2FyZV9sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19maXJtd2FyZV91bmxvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Rpc2FibGVfY29tcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbHB1X3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworLyoqCisgKiAgYmZhX2lvY19zbQorICovCisKKy8qKgorICogSU9DIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gaW9jX2V2ZW50IHsKKwlJT0NfRV9FTkFCTEUgPSAxLAkvKiAgSU9DIGVuYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfRElTQUJMRSA9IDIsCS8qICBJT0MgZGlzYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfVElNRU9VVCA9IDMsCS8qICBmL3cgcmVzcG9uc2UgdGltZW91dCAqLworCUlPQ19FX0ZXUkVBRFkgPSA0LAkvKiAgZi93IGluaXRpYWxpemF0aW9uIGRvbmUgKi8KKwlJT0NfRV9GV1JTUF9HRVRBVFRSID0gNSwJLyogIElPQyBnZXQgYXR0cmlidXRlIHJlc3BvbnNlICovCisJSU9DX0VfRldSU1BfRU5BQkxFID0gNiwJLyogIGVuYWJsZSBmL3cgcmVzcG9uc2UgKi8KKwlJT0NfRV9GV1JTUF9ESVNBQkxFID0gNywJLyogIGRpc2FibGUgZi93IHJlc3BvbnNlICovCisJSU9DX0VfSEJGQUlMID0gOCwJLyogIGhlYXJ0YmVhdCBmYWlsdXJlICovCisJSU9DX0VfSFdFUlJPUiA9IDksCS8qICBoYXJkd2FyZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlJT0NfRV9TRU1MT0NLRUQgPSAxMCwJLyogIGgvdyBzZW1hcGhvcmUgaXMgbG9ja2VkICovCisJSU9DX0VfREVUQUNIID0gMTEsCS8qICBkcml2ZXIgZGV0YWNoIGNsZWFudXAgKi8KK307CisKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCByZXNldCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGZ3Y2hlY2ssIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBtaXNtYXRjaCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHNlbXdhaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBod2luaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBlbmFibGluZywgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGdldGF0dHIsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBvcCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGluaXRmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgaGJmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsZWQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBpb2Nfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9pb2Nfc21fcmVzZXQpLCBCRkFfSU9DX1JFU0VUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZndjaGVjayksIEJGQV9JT0NfRldNSVNNQVRDSH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX21pc21hdGNoKSwgQkZBX0lPQ19GV01JU01BVENIfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fc2Vtd2FpdCksIEJGQV9JT0NfU0VNV0FJVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2h3aW5pdCksIEJGQV9JT0NfSFdJTklUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZW5hYmxpbmcpLCBCRkFfSU9DX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2dldGF0dHIpLCBCRkFfSU9DX0dFVEFUVFJ9LAorCXtCRkFfU00oYmZhX2lvY19zbV9vcCksIEJGQV9JT0NfT1BFUkFUSU9OQUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9pbml0ZmFpbCksIEJGQV9JT0NfSU5JVEZBSUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9oYmZhaWwpLCBCRkFfSU9DX0hCRkFJTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2Rpc2FibGluZyksIEJGQV9JT0NfRElTQUJMSU5HfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsZWQpLCBCRkFfSU9DX0RJU0FCTEVEfSwKK307CisKKy8qKgorICogUmVzZXQgZW50cnkgYWN0aW9ucyAtLSBpbml0aWFsaXplIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+cmV0cnlfY291bnQgPSAwOworCWlvYy0+YXV0b19yZWNvdmVyID0gYmZhX2F1dG9fcmVjb3ZlcjsKK30KKworLyoqCisgKiBCZWdpbm5pbmcgc3RhdGUuIElPQyBpcyBpbiByZXNldCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogU2VtYXBob3JlIHNob3VsZCBiZSBhY3F1aXJlZCBmb3IgdmVyc2lvbiBjaGVjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZndjaGVja19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgaC93IHNlbWFwaG9yZSB0byBjb250aW51ZSB3aXRoIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Z3Y2hlY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKKwkJCWlvYy0+cmV0cnlfY291bnQgPSAwOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCX0gZWxzZSB7CisJCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIE5vdGlmeSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgZ2VuZXJhdGUgbWlzbWF0Y2ggQUVOLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9taXNtYXRjaF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJLyoqCisJICogUHJvdmlkZSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgQUVOIG5vdGlmaWNhdGlvbiBvbmx5IG9uY2UuCisJICovCisJaWYgKGlvYy0+cmV0cnlfY291bnQgPT0gMCkgeworCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gpOworCX0KKwlpb2MtPnJldHJ5X2NvdW50Kys7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIGZpcm13YXJlIHZlcnNpb24gbWF0Y2guCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBSZXF1ZXN0IGZvciBzZW1hcGhvcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIHNlbWFwaG9yZSBmb3IgaC93IGluaXRpYWx6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpb2MtPnJldHJ5X2NvdW50ID0gMDsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9od2luaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3Jlc2V0KGlvYywgQkZBX0ZBTFNFKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZC4gSW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKyAqIEhvbGRpbmcgaGFyZHdhcmUgc2VtYXBob3JlIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2VuYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwkJCWJmYV9pb2NfcmVzZXQoaW9jLCBCRkFfVFJVRSk7CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKK30KKworLyoqCisgKiBIb3N0IElPQyBmdW5jdGlvbiBpcyBiZWluZyBlbmFibGVkLCBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICogU2VtYXBob3JlIGlzIGFjcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JTUF9FTkFCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9nZXRhdHRyKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwKKwkJCQkgICAgICBCRklfSU9DX1VOSU5JVCk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faHdpbml0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHJfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3NlbmRfZ2V0YXR0cihpb2MpOworfQorCisvKioKKyAqIElPQyBjb25maWd1cmF0aW9uIGluIHByb2dyZXNzLiBUaW1lciBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRldSU1BfR0VUQVRUUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9vcCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9vcF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19PSyk7CisJYmZhX2lvY19oYl9tb25pdG9yKGlvYyk7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX29wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaGJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogSGFyZCBlcnJvciBvciBJT0MgcmVjb3ZlcnkgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqIFRyZWF0IGl0IHNhbWUgYXMgaGVhcnRiZWF0IGZhaWx1cmUuCisJCSAqLworCQliZmFfaW9jX2hiX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX0hCRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2hiZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9ESVNBQkxFKTsKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19zZW5kX2Rpc2FibGUoaW9jKTsKK30KKworLyoqCisgKiBJT0MgaXMgYmVpbmcgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsaW5nKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JTUF9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBJT0MgZGlzYWJsZSBjb21wbGV0aW9uIGVudHJ5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxlZF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQlpb2MtPmNiZm4tPmRpc2FibGVfY2Jmbihpb2MtPmJmYSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faW5pdGZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19maXJtd2FyZV91bmxvY2soaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9zZW13YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2hiZmFpbF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnk7CisKKwkvKioKKwkgKiBNYXJrIElPQyBhcyBmYWlsZWQgaW4gaGFyZHdhcmUgYW5kIHN0b3AgZmlybXdhcmUuCisJICovCisJYmZhX2lvY19scHVfc3RvcChpb2MpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwgQkZJX0lPQ19IQkZBSUwpOworCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubGxfaGFsdCwgX19GV19JTklUX0hBTFRfUCk7CisJCS8qCisJCSAqIFdhaXQgZm9yIGhhbHQgdG8gdGFrZSBlZmZlY3QKKwkJICovCisJCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxsX2hhbHQpOworCX0KKworCS8qKgorCSAqIE5vdGlmeSBkcml2ZXIgYW5kIGNvbW1vbiBtb2R1bGVzIHJlZ2lzdGVyZWQgZm9yIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlpb2MtPmNiZm4tPmhiZmFpbF9jYmZuKGlvYy0+YmZhKTsKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmaW9jLT5oYl9ub3RpZnlfcSkgeworCQlub3RpZnkgPSAoc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICopcWU7CisJCW5vdGlmeS0+Y2Jmbihub3RpZnktPmNiYXJnKTsKKwl9CisKKwkvKioKKwkgKiBGbHVzaCBhbnkgcXVldWVkIHVwIG1haWxib3ggcmVxdWVzdHMuCisJICovCisJYmZhX2lvY19tYm94X2hiZmFpbChpb2MpOworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9IQkZBSUwpOworCisJLyoqCisJICogVHJpZ2dlciBhdXRvLXJlY292ZXJ5IGFmdGVyIGEgZGVsYXkuCisJICovCisJaWYgKGlvYy0+YXV0b19yZWNvdmVyKSB7CisJCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLAorCQkJCWJmYV9pb2NfdGltZW91dCwgaW9jLCBCRkFfSU9DX1RPVl9SRUNPVkVSKTsKKwl9Cit9CisKKy8qKgorICogSU9DIGhlYXJ0YmVhdCBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJaWYgKGlvYy0+YXV0b19yZWNvdmVyKQorCQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogUmVjb3ZlcnkgaXMgYWxyZWFkeSBpbml0aWF0ZWQgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeTsKKworCWlvYy0+Y2Jmbi0+ZGlzYWJsZV9jYmZuKGlvYy0+YmZhKTsKKworCS8qKgorCSAqIE5vdGlmeSBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCisJICovCisJbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKKwkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqKXFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW1fdGltZW91dCh2b2lkICppb2NfYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvY19zICopaW9jX2FyZzsKKworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY191c2FnZV9zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKwlpbnQgICAgICAgICAgICAgY250ID0gMDsKKyNkZWZpbmUgQkZBX1NFTV9TUElOQ05UCTEwMDAKKworCWRvIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOworCQljbnQrKzsKKwkJaWYgKGNudCA+IEJGQV9TRU1fU1BJTkNOVCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHIzMiAhPSAwKTsKKwliZmFfYXNzZXJ0KGNudCA8IEJGQV9TRU1fU1BJTkNOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcsIDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZpcnN0IHJlYWQgdG8gdGhlIHNlbWFwaG9yZSByZWdpc3RlciB3aWxsIHJldHVybiAwLCBzdWJzZXF1ZW50IHJlYWRzCisJICogd2lsbCByZXR1cm4gMS4gU2VtYXBob3JlIGlzIHJlbGVhc2VkIGJ5IHdyaXRpbmcgMCB0byB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJaWYgKHIzMiA9PSAwKSB7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX1NFTUxPQ0tFRCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPnNlbV90aW1lciwgYmZhX2lvY19zZW1fdGltZW91dCwKKwkJCWlvYywgQkZBX0lPQ19UT1YpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnLCAxKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV90aW1lcl9zdG9wKCZpb2MtPnNlbV90aW1lcik7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBMUFUgbG9jYWwgbWVtb3J5IChha2Egc2Vjb25kYXJ5IG1lbW9yeSAvIFNSQU0pCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2xtZW1faW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCWludCAgICAgICAgICAgICBpOworI2RlZmluZSBQU1NfTE1FTV9JTklUX1RJTUUgIDEwMDAwCisKKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xNRU1fUkVTRVQ7CisJcHNzX2N0bCB8PSBfX1BTU19MTUVNX0lOSVRfRU47CisJcHNzX2N0bCB8PSBfX1BTU19JMkNfQ0xLX0RJVigzVUwpOyAvKiBpMmMgd29ya2Fyb3VuZCAxMi41a2h6IGNsb2NrICovCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKKworCS8qKgorCSAqIHdhaXQgZm9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiB0byBiZSBjb21wbGV0ZQorCSAqLworCWkgPSAwOworCWRvIHsKKwkJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwkJaSsrOworCX0gd2hpbGUgKCEocHNzX2N0bCAmIF9fUFNTX0xNRU1fSU5JVF9ET05FKSAmJiAoaSA8IFBTU19MTUVNX0lOSVRfVElNRSkpOworCisJLyoqCisJICogSWYgbWVtb3J5IGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdWNjZXNzZnVsLCBJT0MgdGltZW91dCB3aWxsIGNhdGNoCisJICogc3VjaCBmYWlsdXJlcy4KKwkgKi8KKwliZmFfYXNzZXJ0KHBzc19jdGwgJiBfX1BTU19MTUVNX0lOSVRfRE9ORSk7CisJYmZhX3RyYyhpb2MsIHBzc19jdGwpOworCisJcHNzX2N0bCAmPSB+KF9fUFNTX0xNRU1fSU5JVF9ET05FIHwgX19QU1NfTE1FTV9JTklUX0VOKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RhcnQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcHNzX2N0bDsKKworCS8qKgorCSAqIFRha2UgcHJvY2Vzc29yIG91dCBvZiByZXNldC4KKwkgKi8KKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xQVTBfUkVTRVQ7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCisJLyoqCisJICogUHV0IHByb2Nlc3NvcnMgaW4gcmVzZXQuCisJICovCisJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwlwc3NfY3RsIHw9IChfX1BTU19MUFUwX1JFU0VUIHwgX19QU1NfTFBVMV9SRVNFVCk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCisvKioKKyAqIEdldCBkcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19md3Zlcl9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZndoZHIpCit7CisJdTMyICAgICAgICBwZ251bSwgcGdvZmY7CisJdTMyICAgICAgICBsb2ZmID0gMDsKKwlpbnQgICAgICAgICAgICAgaTsKKwl1MzIgICAgICAgKmZ3c2lnID0gKHUzMiAqKSBmd2hkcjsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MpIC8gc2l6ZW9mKHUzMikpOworCSAgICAgaSsrKSB7CisJCWZ3c2lnW2ldID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgKgorYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgb2ZmKQoreworCWlmIChpb2MtPmN0ZGV2KQorCQlyZXR1cm4gYmZpX2ltYWdlX2N0X2dldF9jaHVuayhvZmYpOworCXJldHVybiBiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKG9mZik7Cit9CisKK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9pb2NfZndpbWdfZ2V0X3NpemUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworcmV0dXJuIChpb2MtPmN0ZGV2KSA/IGJmaV9pbWFnZV9jdF9zaXplIDogYmZpX2ltYWdlX2NiX3NpemU7Cit9CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHNhbWUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Z3dmVyX2NtcChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZHJ2X2Z3aGRyOworCWludCAgICAgICAgICAgICBpOworCisJZHJ2X2Z3aGRyID0KKwkJKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01ENVNVTV9TWjsgaSsrKSB7CisJCWlmIChmd2hkci0+bWQ1c3VtW2ldICE9IGRydl9md2hkci0+bWQ1c3VtW2ldKSB7CisJCQliZmFfdHJjKGlvYywgaSk7CisJCQliZmFfdHJjKGlvYywgZndoZHItPm1kNXN1bVtpXSk7CisJCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5tZDVzdW1baV0pOworCQkJcmV0dXJuIEJGQV9GQUxTRTsKKwkJfQorCX0KKworCWJmYV90cmMoaW9jLCBmd2hkci0+bWQ1c3VtWzBdKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgY3VycmVudCBydW5uaW5nIHZlcnNpb24gaXMgdmFsaWQuIEZpcm13YXJlIHNpZ25hdHVyZSBhbmQKKyAqIGV4ZWN1dGlvbiBjb250ZXh0IChkcml2ZXIvYmlvcykgbXVzdCBtYXRjaC4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfZnd2ZXJfdmFsaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyLCAqZHJ2X2Z3aGRyOworCisJLyoqCisJICogSWYgYmlvcy9lZmkgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIHJldHVybiB0cnVlCisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfZnd2ZXJfZ2V0KGlvYywgJmZ3aGRyKTsKKwlkcnZfZndoZHIgPQorCQkoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKiliZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIDApOworCisJaWYgKGZ3aGRyLnNpZ25hdHVyZSAhPSBkcnZfZndoZHItPnNpZ25hdHVyZSkgeworCQliZmFfdHJjKGlvYywgZndoZHIuc2lnbmF0dXJlKTsKKwkJYmZhX3RyYyhpb2MsIGRydl9md2hkci0+c2lnbmF0dXJlKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlpZiAoZndoZHIuZXhlYyAhPSBkcnZfZndoZHItPmV4ZWMpIHsKKwkJYmZhX3RyYyhpb2MsIGZ3aGRyLmV4ZWMpOworCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5leGVjKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlyZXR1cm4gYmZhX2lvY19md3Zlcl9jbXAoaW9jLCAmZndoZHIpOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGZpcm13YXJlIG9mIGN1cnJlbnQgZHJpdmVyIG1hdGNoZXMgdGhlIHJ1bm5pbmcgZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Zpcm13YXJlX2xvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwl1MzIgICAgICAgIHVzZWNudDsKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyBmd2hkcjsKKworCS8qKgorCSAqIEZpcm13YXJlIG1hdGNoIGNoZWNrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKi8KKwlpZiAoIWlvYy0+Y25hKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgaW5jcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCisJLyoqCisJICogSWYgdXNhZ2UgY291bnQgaXMgMCwgYWx3YXlzIHJldHVybiBUUlVFLgorCSAqLworCWlmICh1c2VjbnQgPT0gMCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgMSk7CisJCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisJCXJldHVybiBCRkFfVFJVRTsKKwl9CisKKwlpb2NfZndzdGF0ZSA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKwliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJLyoqCisJICogVXNlIGNvdW50IGNhbm5vdCBiZSBub24temVybyBhbmQgY2hpcCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgorCSAqLworCWJmYV9hc3NlcnQoaW9jX2Z3c3RhdGUgIT0gQkZJX0lPQ19VTklOSVQpOworCisJLyoqCisJICogQ2hlY2sgaWYgYW5vdGhlciBkcml2ZXIgd2l0aCBhIGRpZmZlcmVudCBmaXJtd2FyZSBpcyBhY3RpdmUKKwkgKi8KKwliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CisJaWYgKCFiZmFfaW9jX2Z3dmVyX2NtcChpb2MsICZmd2hkcikpIHsKKwkJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworCQliZmFfdHJjKGlvYywgdXNlY250KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwkvKioKKwkgKiBTYW1lIGZpcm13YXJlIHZlcnNpb24uIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LgorCSAqLworCXVzZWNudCsrOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnLCB1c2VjbnQpOworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Zpcm13YXJlX3VubG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICB1c2VjbnQ7CisKKwkvKioKKwkgKiBGaXJtd2FyZSBsb2NrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgZGVjcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKCFpb2MtPmNuYSB8fCAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikpCisJCXJldHVybjsKKworCS8qKgorCSAqIGRlY3JlbWVudCB1c2FnZSBjb3VudAorCSAqLworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCWJmYV9hc3NlcnQodXNlY250ID4gMCk7CisKKwl1c2VjbnQtLTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgdXNlY250KTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKK30KKworLyoqCisgKiBDb25kaXRpb25hbGx5IGZsdXNoIGFueSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSBmaXJtd2FyZSBhdCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbXNnZmx1c2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kKTsKKwlpZiAocjMyKQorCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kLCAxKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwliZmFfYm9vbGVhbl90ICAgZnd2YWxpZDsKKworCWlvY19md3N0YXRlID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCisJaWYgKGZvcmNlKQorCQlpb2NfZndzdGF0ZSA9IEJGSV9JT0NfVU5JTklUOworCisJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKworCS8qKgorCSAqIGNoZWNrIGlmIGZpcm13YXJlIGlzIHZhbGlkCisJICovCisJZnd2YWxpZCA9IChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX1VOSU5JVCkgPworCQkJQkZBX0ZBTFNFIDogYmZhX2lvY19md3Zlcl92YWxpZChpb2MpOworCisJaWYgKCFmd3ZhbGlkKSB7CisJCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSWYgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MgKGluaXRpYWxpemVkIGJ5IG90aGVyIElPQyksCisJICoganVzdCB3YWl0IGZvciBhbiBpbml0aWFsaXphdGlvbiBjb21wbGV0aW9uIGludGVycnVwdC4KKwkgKi8KKwlpZiAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19JTklUSU5HKSB7CisJCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisJCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBJT0MgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGZpcm13YXJlIHZlcnNpb24gaXMgc2FtZSwKKwkgKiBqdXN0IHJlLWVuYWJsZSBJT0MuCisJICovCisJaWYgKGlvY19md3N0YXRlID09IEJGSV9JT0NfRElTQUJMRUQgfHwgaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19PUCkgeworCQliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJCS8qKgorCQkgKiBXaGVuIHVzaW5nIE1TSS1YIGFueSBwZW5kaW5nIGZpcm13YXJlIHJlYWR5IGV2ZW50IHNob3VsZAorCQkgKiBiZSBmbHVzaGVkLiBPdGhlcndpc2UgTVNJLVggaW50ZXJydXB0cyBhcmUgbm90IGRlbGl2ZXJlZC4KKwkJICovCisJCWJmYV9pb2NfbXNnZmx1c2goaW9jKTsKKwkJaW9jLT5jYmZuLT5yZXNldF9jYmZuKGlvYy0+YmZhKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSRUFEWSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoL3cgZm9yIGFueSBvdGhlciBzdGF0ZXMuCisJICovCisJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2MgPSAoc3RydWN0IGJmYV9pb2NfcyAqKWlvY19hcmc7CisKKwliZmFfdHJjKGlvYywgMCk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfVElNRU9VVCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfbWJveF9zZW5kKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqaW9jX21zZywgaW50IGxlbikKK3sKKwl1MzIgICAgICAgKm1zZ3AgPSAodTMyICopIGlvY19tc2c7CisJdTMyICAgICAgICBpOworCisJYmZhX3RyYyhpb2MsIG1zZ3BbMF0pOworCWJmYV90cmMoaW9jLCBsZW4pOworCisJYmZhX2Fzc2VydChsZW4gPD0gQkZJX0lPQ19NU0dMRU5fTUFYKTsKKworCS8qCisJICogZmlyc3Qgd3JpdGUgbXNnIHRvIG1haWxib3ggcmVnaXN0ZXJzCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbiAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwKKwkJCSAgICAgIGJmYV9vc193dG9sZShtc2dwW2ldKSk7CisKKwlmb3IgKDsgaSA8IEJGSV9JT0NfTVNHTEVOX01BWCAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwgMCk7CisKKwkvKgorCSAqIHdyaXRlIDEgdG8gbWFpbGJveCBDTUQgdG8gdHJpZ2dlciBMUFUgZXZlbnQKKwkgKi8KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kLCAxKTsKKwkodm9pZCliZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBlbmFibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZW5hYmxlX3JlcS5taCwgQkZJX01DX0lPQywgQkZJX0lPQ19IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWVuYWJsZV9yZXEuaW9jX2NsYXNzID0gaW9jLT5pb2NfbWM7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZW5hYmxlX3JlcSwgc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGRpc2FibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZGlzYWJsZV9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZGlzYWJsZV9yZXEsIHNpemVvZihzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbmRfZ2V0YXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyBhdHRyX3JlcTsKKworCWJmaV9oMmlfc2V0KGF0dHJfcmVxLm1oLCBCRklfTUNfSU9DLCBCRklfSU9DX0gySV9HRVRBVFRSX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoYXR0cl9yZXEuYXR0cl9hZGRyLCBpb2MtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsICZhdHRyX3JlcSwgc2l6ZW9mKGF0dHJfcmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX2NoZWNrKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IGNiYXJnOworCXUzMiAgICAgICAgaGJfY291bnQ7CisKKwloYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJaWYgKGlvYy0+aGJfY291bnQgPT0gaGJfY291bnQpIHsKKwkJaW9jLT5oYl9mYWlsKys7CisJfSBlbHNlIHsKKwkJaW9jLT5oYl9jb3VudCA9IGhiX2NvdW50OworCQlpb2MtPmhiX2ZhaWwgPSAwOworCX0KKworCWlmIChpb2MtPmhiX2ZhaWwgPj0gQkZBX0lPQ19IQl9GQUlMX01BWCkgeworCQliZmFfbG9nKGlvYy0+bG9nbSwgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUsIGhiX2NvdW50KTsKKwkJaW9jLT5oYl9mYWlsID0gMDsKKwkJYmZhX2lvY19yZWNvdmVyKGlvYyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfaW9jX21ib3hfcG9sbChpb2MpOworCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLCBiZmFfaW9jX2hiX2NoZWNrLCBpb2MsCisJCQlCRkFfSU9DX0hCX1RPVik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX21vbml0b3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+aGJfZmFpbCA9IDA7CisJaW9jLT5oYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5pb2NfdGltZXIsIGJmYV9pb2NfaGJfY2hlY2ssIGlvYywKKwkJCUJGQV9JT0NfSEJfVE9WKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaGJfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3RpbWVyX3N0b3AoJmlvYy0+aW9jX3RpbWVyKTsKK30KKworLyoqCisgKiBIb3N0IHRvIExQVSBtYWlsYm94IG1lc3NhZ2UgYWRkcmVzc2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaGZuX21ib3gsIGxwdV9tYm94LCBoZm5fcGduOworfSBpb2NyZWdfZm5yZWdbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjBfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjB9LCB7CisJSE9TVEZOMV9MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjFfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjF9LCB7CisJSE9TVEZOMl9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjJfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjJ9LCB7CisJSE9TVEZOM19MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjNfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjN9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMAorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDBbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMQorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDFbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIFNoYXJlZCBJUlEgaGFuZGxpbmcgaW4gSU5UWCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaXNyLCBtc2s7Cit9IGlvY3JlZ19zaGlycV9uZXh0W10gPSB7CisJeworCUhPU1RGTjFfSU5UX1NUQVRVUywgSE9TVEZOMV9JTlRfTVNLfSwgeworCUhPU1RGTjJfSU5UX1NUQVRVUywgSE9TVEZOMl9JTlRfTVNLfSwgeworCUhPU1RGTjNfSU5UX1NUQVRVUywgSE9TVEZOM19JTlRfTVNLfSwgeworSE9TVEZOMF9JTlRfU1RBVFVTLCBIT1NURk4wX0lOVF9NU0t9LH07CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3JlZ19pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmI7CisJaW50ICAgICAgICAgICAgIHBjaWZuID0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmIgPSBiZmFfaW9jX2JhcjAoaW9jKTsKKworCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3ggPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX21ib3g7CisJaW9jLT5pb2NfcmVncy5scHVfbWJveCA9IHJiICsgaW9jcmVnX2ZucmVnW3BjaWZuXS5scHVfbWJveDsKKwlpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4gPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX3BnbjsKKworCWlmIChpb2MtPnBvcnRfaWQgPT0gMCkgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IHJiICsgQkZBX0lPQzBfSEJFQVRfUkVHOworCQlpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlID0gcmIgKyBCRkFfSU9DMF9TVEFURV9SRUc7CisJCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDBbcGNpZm5dLmhmbjsKKwkJaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMFtwY2lmbl0ubHB1OworCQlpb2MtPmlvY19yZWdzLmxsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMDsKKwl9IGVsc2UgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IChyYiArIEJGQV9JT0MxX0hCRUFUX1JFRyk7CisJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSAocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpOworCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5oZm47CisJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDFbcGNpZm5dLmxwdTsKKwkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDE7CisJfQorCisJLyoqCisJICogU2hhcmVkIElSUSBoYW5kbGluZyBpbiBJTlRYIG1vZGUKKwkgKi8KKwlpb2MtPmlvY19yZWdzLnNoaXJxX2lzcl9uZXh0ID0gcmIgKyBpb2NyZWdfc2hpcnFfbmV4dFtwY2lmbl0uaXNyOworCWlvYy0+aW9jX3JlZ3Muc2hpcnFfbXNrX25leHQgPSByYiArIGlvY3JlZ19zaGlycV9uZXh0W3BjaWZuXS5tc2s7CisKKwkvKgorCSAqIFBTUyBjb250cm9sIHJlZ2lzdGVycworCSAqLworCWlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcgPSAocmIgKyBQU1NfQ1RMX1JFRyk7CisJaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZyA9IChyYiArIEFQUF9QTExfNDI1X0NUTF9SRUcpOworCWlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcgPSAocmIgKyBBUFBfUExMXzMxMl9DVExfUkVHKTsKKworCS8qCisJICogSU9DIHNlbWFwaG9yZSByZWdpc3RlcnMgYW5kIHNlcmlhbGl6YXRpb24KKwkgKi8KKwlpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnID0gKHJiICsgSE9TVF9TRU0wX1JFRyk7CisJaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMV9SRUcpOworCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyA9IChyYiArIEJGQV9GV19VU0VfQ09VTlQpOworCisJLyoqCisJICogc3JhbSBtZW1vcnkgYWNjZXNzCisJICovCisJaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQgPSAocmIgKyBQU1NfU01FTV9QQUdFX1NUQVJUKTsKKwlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DQjsKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKQorCQlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DVDsKK30KKworLyoqCisgKiAgICAgIEluaXRpYXRlIGEgZnVsbCBmaXJtd2FyZSBkb3dubG9hZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZG93bmxvYWRfZncoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgYm9vdF90eXBlLAorCQkgICAgdTMyIGJvb3RfcGFyYW0pCit7CisJdTMyICAgICAgICpmd2ltZzsKKwl1MzIgICAgICAgIHBnbnVtLCBwZ29mZjsKKwl1MzIgICAgICAgIGxvZmYgPSAwOworCXUzMiAgICAgICAgY2h1bmtubyA9IDA7CisJdTMyICAgICAgICBpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBMTUVNIGZpcnN0IGJlZm9yZSBjb2RlIGRvd25sb2FkCisJICovCisJYmZhX2lvY19sbWVtX2luaXQoaW9jKTsKKworCS8qKgorCSAqIEZsYXNoIGJhc2VkIGZpcm13YXJlIGJvb3QKKwkgKi8KKwliZmFfdHJjKGlvYywgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpKTsKKwlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwkJYm9vdF90eXBlID0gQkZJX0JPT1RfVFlQRV9GTEFTSDsKKwlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgY2h1bmtubyk7CisJZndpbWdbQkZJX0JPT1RfVFlQRV9PRkYgLyBzaXplb2YodTMyKV0gPSBiZmFfb3Nfc3dhcDMyKGJvb3RfdHlwZSk7CisJZndpbWdbQkZJX0JPT1RfUEFSQU1fT0ZGIC8gc2l6ZW9mKHUzMildID0KKwkJYmZhX29zX3N3YXAzMihib290X3BhcmFtKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpOyBpKyspIHsKKworCQlpZiAoQkZBX0ZMQVNIX0NIVU5LX05PKGkpICE9IGNodW5rbm8pIHsKKwkJCWNodW5rbm8gPSBCRkFfRkxBU0hfQ0hVTktfTk8oaSk7CisJCQlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywKKwkJCQkJQkZBX0ZMQVNIX0NIVU5LX0FERFIoY2h1bmtubykpOworCQl9CisKKwkJLyoqCisJCSAqIHdyaXRlIHNtZW0KKwkJICovCisJCWJmYV9tZW1fd3JpdGUoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQsIGxvZmYsCisJCQkgICAgICBmd2ltZ1tCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKGkpXSk7CisKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKworCQkvKioKKwkJICogaGFuZGxlIHBhZ2Ugb2Zmc2V0IHdyYXAgYXJvdW5kCisJCSAqLworCQlsb2ZmID0gUFNTX1NNRU1fUEdPRkYobG9mZik7CisJCWlmIChsb2ZmID09IDApIHsKKwkJCXBnbnVtKys7CisJCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCQl9CisJfQorCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWJmYV9pb2NfaHdpbml0KGlvYywgZm9yY2UpOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2dldGF0dHJfcmVwbHkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqYXR0ciA9IGlvYy0+YXR0cjsKKworCWF0dHItPmFkYXB0ZXJfcHJvcCA9IGJmYV9vc19udG9obChhdHRyLT5hZGFwdGVyX3Byb3ApOworCWF0dHItPm1heGZyc2l6ZSA9IGJmYV9vc19udG9ocyhhdHRyLT5tYXhmcnNpemUpOworCisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfR0VUQVRUUik7Cit9CisKKy8qKgorICogQXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gb2YgbWJveCBsb2dpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9hdHRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCWludCAgICAgICAgICAgICBtYzsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmNtZF9xKTsKKwlmb3IgKG1jID0gMDsgbWMgPCBCRklfTUNfTUFYOyBtYysrKSB7CisJCW1vZC0+bWJoZGxyW21jXS5jYmZuID0gTlVMTDsKKwkJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gaW9jLT5iZmE7CisJfQorfQorCisvKioKKyAqIE1ib3ggcG9sbCB0aW1lciAtLSByZXN0YXJ0cyBhbnkgcGVuZGluZyBtYWlsYm94IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYm94X3BvbGwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCXUzMiAgICAgICAgc3RhdDsKKworCS8qKgorCSAqIElmIG5vIGNvbW1hbmQgcGVuZGluZywgZG8gbm90aGluZworCSAqLworCWlmIChsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJcmV0dXJuOworCisJLyoqCisJICogSWYgcHJldmlvdXMgY29tbWFuZCBpcyBub3QgeWV0IGZldGNoZWQgYnkgZmlybXdhcmUsIGRvIG5vdGhpbmcKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkKKwkJcmV0dXJuOworCisJLyoqCisJICogRW5xdWV1ZSBjb21tYW5kIHRvIGZpcm13YXJlLgorCSAqLworCWJmYV9xX2RlcSgmbW9kLT5jbWRfcSwgJmNtZCk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCBjbWQtPm1zZywgc2l6ZW9mKGNtZC0+bXNnKSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBhbnkgcGVuZGluZyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJYmZhX3FfZGVxKCZtb2QtPmNtZF9xLCAmY21kKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIElPQyB0byBwb3J0IG1hcHBpbmcuCisgKi8KKworI2RlZmluZSBGTkNfUEVSU19GTl9TSElGVChfX2ZuKQkoKF9fZm4pICogOCkKK3N0YXRpYyB2b2lkCitiZmFfaW9jX21hcF9wb3J0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZvciBjcm9zc2JvdywgcG9ydCBpZCBpcyBzYW1lIGFzIHBjaSBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkICE9IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZvciBjYXRhcHVsdCwgYmFzZSBwb3J0IGlkIG9uIHBlcnNvbmFsaXR5IHJlZ2lzdGVyIGFuZCBJT0MgdHlwZQorCSAqLworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJcjMyID4+PSBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpOworCWlvYy0+cG9ydF9pZCA9IChyMzIgJiBfX0YwX1BPUlRfTUFQX01LKSA+PiBfX0YwX1BPUlRfTUFQX1NIOworCisJYmZhX3RyYyhpb2MsIGJmYV9pb2NfcGNpZm4oaW9jKSk7CisJYmZhX3RyYyhpb2MsIGlvYy0+cG9ydF9pZCk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B1YmxpYworICovCisKKy8qKgorKiBTZXQgaW50ZXJydXB0IG1vZGUgZm9yIGEgZnVuY3Rpb246IElOVFggb3IgTVNJWAorICovCit2b2lkCitiZmFfaW9jX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMiwgbW9kZTsKKworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJYmZhX3RyYyhpb2MsIHIzMik7CisKKwltb2RlID0gKHIzMiA+PiBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKSAmCisJCV9fRjBfSU5UWF9TVEFUVVM7CisKKwkvKioKKwkgKiBJZiBhbHJlYWR5IGluIGRlc2lyZWQgbW9kZSwgZG8gbm90IGNoYW5nZSBhbnl0aGluZworCSAqLworCWlmICghbXNpeCAmJiBtb2RlKQorCQlyZXR1cm47CisKKwlpZiAobXNpeCkKKwkJbW9kZSA9IF9fRjBfSU5UWF9TVEFUVVNfTVNJWDsKKwllbHNlCisJCW1vZGUgPSBfX0YwX0lOVFhfU1RBVFVTX0lOVEE7CisKKwlyMzIgJj0gfihfX0YwX0lOVFhfU1RBVFVTIDw8IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSkpOworCXIzMiB8PSAobW9kZSA8PCBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKTsKKwliZmFfdHJjKGlvYywgcjMyKTsKKworCWJmYV9yZWdfd3JpdGUocmIgKyBGTkNfUEVSU19SRUcsIHIzMik7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY19wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJdTMyICAgICAgICBwbGxfc2NsaywgcGxsX2ZjbGssIHIzMjsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJcGxsX3NjbGsgPQorCQkJX19BUFBfUExMXzMxMl9FTkFCTEUgfCBfX0FQUF9QTExfMzEyX0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzMxMl9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzMxMl9QMF8xKDBVKSB8CisJCQlfX0FQUF9QTExfMzEyX0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoMVUpOworCQlwbGxfZmNsayA9CisJCQlfX0FQUF9QTExfNDI1X0VOQUJMRSB8IF9fQVBQX1BMTF80MjVfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgfCBfX0FQUF9QTExfNDI1X1AwXzEoMFUpIHwKKwkJCV9fQVBQX1BMTF80MjVfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0NOVExNVDBfMSgxVSk7CisKKwkJLyoqCisJCSAqIAlGb3IgY2F0YXB1bHQsIGNob29zZSBvcGVyYXRpb25hbCBtb2RlIEZDL0ZDb0UKKwkJICovCisJCWlmIChpb2MtPmZjbW9kZSkgeworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBPUF9NT0RFKSwgMCk7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIEVUSF9NQUNfU0VSX1JFRyksCisJCQkJICAgICAgX19BUFBfRU1TX0NNTENLU0VMIHwgX19BUFBfRU1TX1JFRkNLQlVGRU4yCisJCQkJICAgICAgfCBfX0FQUF9FTVNfQ0hBTk5FTF9TRUwpOworCQl9IGVsc2UgeworCQkJaW9jLT5wbGxpbml0ID0gQkZBX1RSVUU7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIE9QX01PREUpLCBfX0dMT0JBTF9GQ09FX01PREUpOworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBFVEhfTUFDX1NFUl9SRUcpLAorCQkJCSAgICAgIF9fQVBQX0VNU19SRUZDS0JVRkVOMSk7CisJCX0KKwl9IGVsc2UgeworCQlwbGxfc2NsayA9CisJCQlfX0FQUF9QTExfMzEyX0VOQUJMRSB8IF9fQVBQX1BMTF8zMTJfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfMzEyX1AwXzEoM1UpIHwgX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xKDNVKTsKKwkJcGxsX2ZjbGsgPQorCQkJX19BUFBfUExMXzQyNV9FTkFCTEUgfCBfX0FQUF9QTExfNDI1X0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzQyNV9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzQyNV9QMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoM1UpOworCX0KKworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0JZUEFTUyB8IF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9CWVBBU1MgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9vc191ZGVsYXkoMik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgcGxsX3NjbGsgfCBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgcGxsX2ZjbGsgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCisJLyoqCisJICogV2FpdCBmb3IgUExMcyB0byBsb2NrLgorCSAqLworCWJmYV9vc191ZGVsYXkoMjAwMCk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsIHBsbF9zY2xrKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsIHBsbF9mY2xrKTsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBNQklTVF9DVExfUkVHKSwgX19FRFJBTV9CSVNUUl9TVEFSVCk7CisJCWJmYV9vc191ZGVsYXkoMTAwMCk7CisJCXIzMiA9IGJmYV9yZWdfcmVhZCgocmIgKyBNQklTVF9TVEFUX1JFRykpOworCQliZmFfdHJjKGlvYywgcjMyKTsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBJbnRlcmZhY2UgdXNlZCBieSBkaWFnIG1vZHVsZSB0byBkbyBmaXJtd2FyZSBib290IHdpdGggbWVtb3J5IHRlc3QKKyAqIGFzIHRoZSBlbnRyeSB2ZWN0b3IuCisgKi8KK3ZvaWQKK2JmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKQoreworCWJmYV9vc19hZGRyX3QgICByYjsKKworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfYm9vdHMpOworCisJaWYgKGJmYV9pb2NfcGxsX2luaXQoaW9jKSAhPSBCRkFfU1RBVFVTX09LKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBJbml0aWFsaXplIElPQyBzdGF0ZSBvZiBhbGwgZnVuY3Rpb25zIG9uIGEgY2hpcCByZXNldC4KKwkgKi8KKwlyYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCWlmIChib290X3BhcmFtID09IEJGSV9CT09UX1RZUEVfTUVNVEVTVCkgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfTUVNVEVTVCk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19NRU1URVNUKTsKKwl9IGVsc2UgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfSU5JVElORyk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19JTklUSU5HKTsKKwl9CisKKwliZmFfaW9jX2Rvd25sb2FkX2Z3KGlvYywgYm9vdF90eXBlLCBib290X3BhcmFtKTsKKworCS8qKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGp1c3QgYmVmb3JlIHN0YXJ0aW5nIExQVQorCSAqLworCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJYmZhX2lvY19scHVfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBFbmFibGUvZGlzYWJsZSBJT0MgZmFpbHVyZSBhdXRvIHJlY292ZXJ5LgorICovCit2b2lkCitiZmFfaW9jX2F1dG9fcmVjb3ZlcihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKKwliZmFfYXV0b19yZWNvdmVyID0gQkZBX0ZBTFNFOworfQorCisKK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOworfQorCit2b2lkCitiZmFfaW9jX21zZ2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKm1ibXNnKQoreworCXUzMiAgICAgICAqbXNncCA9IG1ibXNnOworCXUzMiAgICAgICAgcjMyOworCWludCAgICAgICAgICAgICBpOworCisJLyoqCisJICogcmVhZCB0aGUgTUJPWCBtc2cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSkgLyBzaXplb2YodTMyKSk7CisJICAgICBpKyspIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3ggKworCQkJCSAgIGkgKiBzaXplb2YodTMyKSk7CisJCW1zZ3BbaV0gPSBiZmFfb3NfaHRvbmwocjMyKTsKKwl9CisKKwkvKioKKwkgKiB0dXJuIG9mZiBtYWlsYm94IGludGVycnVwdCBieSBjbGVhcmluZyBtYWlsYm94IHN0YXR1cworCSAqLworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQsIDEpOworCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXVuaW9uIGJmaV9pb2NfaTJoX21zZ191ICptc2c7CisKKwltc2cgPSAodW5pb24gYmZpX2lvY19pMmhfbXNnX3UgKiltOworCisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19pc3JzKTsKKworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9JT0NfSTJIX0hCRUFUOgorCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQ6CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUkVBRFkpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZOgorCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWToKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZOgorCQliZmFfaW9jX2dldGF0dHJfcmVwbHkoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGlvYywgbXNnLT5taC5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJT0MgYXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwLgorICoKKyAqIEBwYXJhbVtpbl0JaW9jCW1lbW9yeSBmb3IgSU9DCisgKiBAcGFyYW1baW5dCWJmYQlkcml2ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1baW5dCXRyY21vZAlrZXJuZWwgdHJhY2UgbW9kdWxlCisgKiBAcGFyYW1baW5dCWFlbglrZXJuZWwgYWVuIGV2ZW50IG1vZHVsZQorICogQHBhcmFtW2luXQlsb2dtCWtlcm5lbCBsb2dnaW5nIG1vZHVsZQorICovCit2b2lkCitiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwgc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLAorCSAgICAgICBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJICAgICAgIHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pCit7CisJaW9jLT5iZmEgPSBiZmE7CisJaW9jLT5jYmZuID0gY2JmbjsKKwlpb2MtPnRpbWVyX21vZCA9IHRpbWVyX21vZDsKKwlpb2MtPnRyY21vZCA9IHRyY21vZDsKKwlpb2MtPmFlbiA9IGFlbjsKKwlpb2MtPmxvZ20gPSBsb2dtOworCWlvYy0+ZmNtb2RlID0gQkZBX0ZBTFNFOworCWlvYy0+cGxsaW5pdCA9IEJGQV9GQUxTRTsKKwlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9UUlVFOworCisJYmZhX2lvY19tYm94X2F0dGFjaChpb2MpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmhiX25vdGlmeV9xKTsKKworCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIElPQyBjbGVhbnVwLgorICovCit2b2lkCitiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfREVUQUNIKTsKK30KKworLyoqCisgKiBTZXR1cCBJT0MgUENJIHByb3BlcnRpZXMuCisgKgorICogQHBhcmFtW2luXQlwY2lkZXYJUENJIGRldmljZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBJT0MKKyAqLwordm9pZAorYmZhX2lvY19wY2lfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldiwKKwkJIGVudW0gYmZpX21jbGFzcyBtYykKK3sKKwlpb2MtPmlvY19tYyA9IG1jOworCWlvYy0+cGNpZGV2ID0gKnBjaWRldjsKKwlpb2MtPmN0ZGV2ID0gKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCk7CisJaW9jLT5jbmEgPSBpb2MtPmN0ZGV2ICYmICFpb2MtPmZjbW9kZTsKKworCWJmYV9pb2NfbWFwX3BvcnQoaW9jKTsKKwliZmFfaW9jX3JlZ19pbml0KGlvYyk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBJT0MgZG1hIG1lbW9yeQorICoKKyAqIEBwYXJhbVtpbl0JZG1fa3ZhCWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgSU9DIGRtYSBtZW1vcnkKKyAqIEBwYXJhbVtpbl0JZG1fcGEJcGh5c2ljYWwgYWRkcmVzcyBvZiBJT0MgZG1hIG1lbW9yeQorICovCit2b2lkCitiZmFfaW9jX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHU4ICpkbV9rdmEsIHU2NCBkbV9wYSkKK3sKKwkvKioKKwkgKiBkbWEgbWVtb3J5IGZvciBmaXJtd2FyZSBhdHRyaWJ1dGUKKwkgKi8KKwlpb2MtPmF0dHJfZG1hLmt2YSA9IGRtX2t2YTsKKwlpb2MtPmF0dHJfZG1hLnBhID0gZG1fcGE7CisJaW9jLT5hdHRyID0gKHN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqKWRtX2t2YTsKK30KKworLyoqCisgKiBSZXR1cm4gc2l6ZSBvZiBkbWEgbWVtb3J5IHJlcXVpcmVkLgorICovCit1MzIKK2JmYV9pb2NfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2VuYWJsZXMpOworCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX1RSVUU7CisKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9FTkFCTEUpOworfQorCit2b2lkCitiZmFfaW9jX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfZGlzYWJsZXMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEUpOworfQorCisvKioKKyAqIFJldHVybnMgbWVtb3J5IHJlcXVpcmVkIGZvciBzYXZpbmcgZmlybXdhcmUgdHJhY2UgaW4gY2FzZSBvZiBjcmFzaC4KKyAqIERyaXZlciBtdXN0IGNhbGwgdGhpcyBpbnRlcmZhY2UgdG8gYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGZvcgorICogYXV0b21hdGljIHNhdmluZyBvZiBmaXJtd2FyZSB0cmFjZS4gRHJpdmVyIHNob3VsZCBjYWxsCisgKiBiZmFfaW9jX2RlYnVnX21lbWNsYWltKCkgcmlnaHQgYWZ0ZXIgYmZhX2lvY19hdHRhY2goKSB0byBzZXR1cCB0aGlzCisgKiB0cmFjZSBtZW1vcnkuCisgKi8KK2ludAorYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKK3JldHVybiAoYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIG1lbW9yeSBmb3Igc2F2aW5nIGZpcm13YXJlIHRyYWNlLiBEcml2ZXIgbXVzdCBpbml0aWFsaXplCisgKiB0cmFjZSBtZW1vcnkgYmVmb3JlIGNhbGwgYmZhX2lvY19lbmFibGUoKS4KKyAqLwordm9pZAorYmZhX2lvY19kZWJ1Z19tZW1jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRiZ19md3NhdmUpCit7CisJYmZhX2Fzc2VydChpb2MtPmF1dG9fcmVjb3Zlcik7CisJaW9jLT5kYmdfZndzYXZlID0gZGJnX2Z3c2F2ZTsKKwlpb2MtPmRiZ19md3NhdmVfbGVuID0gYmZhX2lvY19kZWJ1Z190cmNzeihpb2MtPmF1dG9fcmVjb3Zlcik7Cit9CisKK3UzMgorYmZhX2lvY19zbWVtX3BnbnVtKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcikKK3sKKwlyZXR1cm4gUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgZm1hZGRyKTsKK30KKwordTMyCitiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKQoreworCXJldHVybiBQU1NfU01FTV9QR09GRihmbWFkZHIpOworfQorCisvKioKKyAqIFJlZ2lzdGVyIG1haWxib3ggbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9ucworICoKKyAqIEBwYXJhbVtpbl0JaW9jCQlJT0MgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JbWNmdW5jcwkJbWVzc2FnZSBjbGFzcyBoYW5kbGVyIGZ1bmN0aW9ucworICovCit2b2lkCitiZmFfaW9jX21ib3hfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfaW9jX21ib3hfbWNmdW5jX3QgKm1jZnVuY3MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJaW50ICAgICAgICAgICAgIG1jOworCisJZm9yIChtYyA9IDA7IG1jIDwgQkZJX01DX01BWDsgbWMrKykKKwkJbW9kLT5tYmhkbHJbbWNdLmNiZm4gPSBtY2Z1bmNzW21jXTsKK30KKworLyoqCisgKiBSZWdpc3RlciBtYWlsYm94IG1lc3NhZ2UgaGFuZGxlciBmdW5jdGlvbiwgdG8gYmUgY2FsbGVkIGJ5IGNvbW1vbiBtb2R1bGVzCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCSAgICBiZmFfaW9jX21ib3hfbWNmdW5jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisKKwltb2QtPm1iaGRsclttY10uY2JmbiA9IGNiZm47CisJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gY2Jhcmc7Cit9CisKKy8qKgorICogUXVldWUgYSBtYWlsYm94IGNvbW1hbmQgcmVxdWVzdCB0byBmaXJtd2FyZS4gV2FpdHMgaWYgbWFpbGJveCBpcyBidXN5LgorICogUmVzcG9uc2liaWxpdHkgb2YgY2FsbGVyIHRvIHNlcmlhbGl6ZQorICoKKyAqIEBwYXJhbVtpbl0JaW9jCUlPQyBpbnN0YW5jZQorICogQHBhcmFtW2ldCWNtZAlNYWlsYm94IGNvbW1hbmQKKyAqLwordm9pZAorYmZhX2lvY19tYm94X3F1ZXVlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJdTMyICAgICAgICBzdGF0OworCisJLyoqCisJICogSWYgYSBwcmV2aW91cyBjb21tYW5kIGlzIHBlbmRpbmcsIHF1ZXVlIG5ldyBjb21tYW5kCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBtYWlsYm94IGlzIGJ1c3ksIHF1ZXVlIGNvbW1hbmQgZm9yIHBvbGwgdGltZXIKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBtYWlsYm94IGlzIGZyZWUgLS0gcXVldWUgY29tbWFuZCB0byBmaXJtd2FyZQorCSAqLworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgY21kLT5tc2csIHNpemVvZihjbWQtPm1zZykpOworfQorCisvKioKKyAqIEhhbmRsZSBtYWlsYm94IGludGVycnVwdHMKKyAqLwordm9pZAorYmZhX2lvY19tYm94X2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJc3RydWN0IGJmaV9tYm1zZ19zIG07CisJaW50ICAgICAgICAgICAgIG1jOworCisJYmZhX2lvY19tc2dnZXQoaW9jLCAmbSk7CisKKwkvKioKKwkgKiBUcmVhdCBJT0MgbWVzc2FnZSBjbGFzcyBhcyBzcGVjaWFsLgorCSAqLworCW1jID0gbS5taC5tc2dfY2xhc3M7CisJaWYgKG1jID09IEJGSV9NQ19JT0MpIHsKKwkJYmZhX2lvY19pc3IoaW9jLCAmbSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1jID4gQkZJX01DX01BWCkgfHwgKG1vZC0+bWJoZGxyW21jXS5jYmZuID09IE5VTEwpKQorCQlyZXR1cm47CisKKwltb2QtPm1iaGRsclttY10uY2Jmbihtb2QtPm1iaGRsclttY10uY2JhcmcsICZtKTsKK30KKwordm9pZAorYmZhX2lvY19lcnJvcl9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hXRVJST1IpOworfQorCisjaWZuZGVmIEJGQV9CSU9TX0JVSUxECisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGlzIGRpc2FibGVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiAoYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZykKKwkJfHwgYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKSk7Cit9CisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGZpcm13YXJlIGlzIGRpZmZlcmVudC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19md19taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIChiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpCisJCXx8IGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKQorCQl8fCBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpKTsKK30KKworI2RlZmluZSBiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKF9fc20pCQlcCisJKCgoX19zbSkgPT0gQkZJX0lPQ19VTklOSVQpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19JTklUSU5HKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfSFdJTklUKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfRElTQUJMRUQpIHx8CVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0hCRkFJTCkgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0NGR19ESVNBQkxFRCkpCisKKy8qKgorICogQ2hlY2sgaWYgYWRhcHRlciBpcyBkaXNhYmxlZCAtLSBib3RoIElPQ3Mgc2hvdWxkIGJlIGluIGEgZGlzYWJsZWQKKyAqIHN0YXRlLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2FkYXB0ZXJfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaW9jX3N0YXRlOworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCisJaWYgKCFiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJaW9jX3N0YXRlID0gYmZhX3JlZ19yZWFkKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKTsKKwlpZiAoIWJmYV9pb2Nfc3RhdGVfZGlzYWJsZWQoaW9jX3N0YXRlKSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCWlvY19zdGF0ZSA9IGJmYV9yZWdfcmVhZChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyk7CisJaWYgKCFiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKGlvY19zdGF0ZSkpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogQWRkIHRvIElPQyBoZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUuIFRvIGJlIHVzZWQgYnkgY29tbW9uCisgKiBtb2R1bGVzIHN1Y2ggYXMKKyAqLwordm9pZAorYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpCit7CisJbGlzdF9hZGRfdGFpbCgmbm90aWZ5LT5xZSwgJmlvYy0+aGJfbm90aWZ5X3EpOworfQorCisjZGVmaW5lIEJGQV9NRkdfTkFNRSAiQnJvY2FkZSIKK3ZvaWQKK2JmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQkgc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKmlvY19hdHRyOworCWNoYXIgICAgICAgICAgICBtb2RlbFtCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTl07CisKKwlpb2NfYXR0ciA9IGlvYy0+YXR0cjsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopJmFkX2F0dHItPnNlcmlhbF9udW0sCisJCSAgICAgICh2b2lkICopaW9jX2F0dHItPmJyY2Rfc2VyaWFsbnVtLAorCQkgICAgICBCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTik7CisKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5md192ZXIsIGlvY19hdHRyLT5md192ZXJzaW9uLCBCRkFfVkVSU0lPTl9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm9wdHJvbV92ZXIsIGlvY19hdHRyLT5vcHRyb21fdmVyc2lvbiwKKwkJICAgICAgQkZBX1ZFUlNJT05fTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5tYW51ZmFjdHVyZXIsIEJGQV9NRkdfTkFNRSwKKwkJICAgICAgQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT52cGQsICZpb2NfYXR0ci0+dnBkLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9tZmdfdnBkX3MpKTsKKworCWFkX2F0dHItPm5wb3J0cyA9IEJGSV9BREFQVEVSX0dFVFAoTlBPUlRTLCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwlhZF9hdHRyLT5tYXhfc3BlZWQgPSBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKworCS8qKgorCSAqIG1vZGVsIG5hbWUKKwkgKi8KKwlpZiAoQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkgPT0gMTApIHsKKwkJc3RyY3B5KG1vZGVsLCAiQlItMTA/MCIpOworCQltb2RlbFs1XSA9ICcwJyArIGFkX2F0dHItPm5wb3J0czsKKwl9IGVsc2UgeworCQlzdHJjcHkobW9kZWwsICJCcm9jYWRlLT8/NSIpOworCQltb2RlbFs4XSA9CisJCQknMCcgKyBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwkJbW9kZWxbOV0gPSAnMCcgKyBhZF9hdHRyLT5ucG9ydHM7CisJfQorCisJaWYgKEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkpCisJCWFkX2F0dHItPnByb3RvdHlwZSA9IDE7CisJZWxzZQorCQlhZF9hdHRyLT5wcm90b3R5cGUgPSAwOworCisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWwsIG1vZGVsLCBCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWxfZGVzY3IsICZhZF9hdHRyLT5tb2RlbCwKKwkJICAgICAgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4pOworCisJYWRfYXR0ci0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwlhZF9hdHRyLT5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKworCWFkX2F0dHItPnBjaWVfZ2VuID0gaW9jX2F0dHItPnBjaWVfZ2VuOworCWFkX2F0dHItPnBjaWVfbGFuZXMgPSBpb2NfYXR0ci0+cGNpZV9sYW5lczsKKwlhZF9hdHRyLT5wY2llX2xhbmVzX29yaWcgPSBpb2NfYXR0ci0+cGNpZV9sYW5lc19vcmlnOworCWFkX2F0dHItPmFzaWNfcmV2ID0gaW9jX2F0dHItPmFzaWNfcmV2OworCWFkX2F0dHItPmh3X3ZlclswXSA9ICdSJzsKKwlhZF9hdHRyLT5od192ZXJbMV0gPSAnZSc7CisJYWRfYXR0ci0+aHdfdmVyWzJdID0gJ3YnOworCWFkX2F0dHItPmh3X3ZlclszXSA9ICctJzsKKwlhZF9hdHRyLT5od192ZXJbNF0gPSBpb2NfYXR0ci0+YXNpY19yZXY7CisJYWRfYXR0ci0+aHdfdmVyWzVdID0gJ1wwJzsKKworCWFkX2F0dHItPmNuYV9jYXBhYmxlID0gaW9jLT5jbmE7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZ2V0X2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKQoreworCWJmYV9vc19tZW1zZXQoKHZvaWQgKilpb2NfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9jX2F0dHJfcykpOworCisJaW9jX2F0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGlvY19zbV90YWJsZSwgaW9jLT5mc20pOworCWlvY19hdHRyLT5wb3J0X2lkID0gaW9jLT5wb3J0X2lkOworCisJaWYgKCFpb2MtPmN0ZGV2KQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkM7CisJZWxzZSBpZiAoaW9jLT5pb2NfbWMgPT0gQkZJX01DX0lPQ0ZDKQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkNvRTsKKwllbHNlIGlmIChpb2MtPmlvY19tYyA9PSBCRklfTUNfTEwpCisJCWlvY19hdHRyLT5pb2NfdHlwZSA9IEJGQV9JT0NfVFlQRV9MTDsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihpb2MsICZpb2NfYXR0ci0+YWRhcHRlcl9hdHRyKTsKKworCWlvY19hdHRyLT5wY2lfYXR0ci5kZXZpY2VfaWQgPSBpb2MtPnBjaWRldi5kZXZpY2VfaWQ7CisJaW9jX2F0dHItPnBjaV9hdHRyLnBjaWZuID0gaW9jLT5wY2lkZXYucGNpX2Z1bmM7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzBdID0gJ1InOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlsxXSA9ICdlJzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbMl0gPSAndic7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzNdID0gJy0nOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3Jldls0XSA9IGlvY19hdHRyLT5hZGFwdGVyX2F0dHIuYXNpY19yZXY7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzVdID0gJ1wwJzsKK30KKworLyoqCisgKiAgaGFsX3d3bl9wdWJsaWMKKyAqLword3duX3QKK2JmYV9pb2NfZ2V0X3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXJldHVybiB3Lnd3bjsKK30KKword3duX3QKK2JmYV9pb2NfZ2V0X253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXcuYnl0ZVswXSA9IDB4MjA7CisKKwlyZXR1cm4gdy53d247Cit9CisKK3d3bl90CitiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3ICAgICAgICAgICAgICAsIHc1OworCisJYmZhX3RyYyhpb2MsIGluc3QpOworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisJdzUuYnl0ZVswXSA9IDB4NTAgfCB3LmJ5dGVbMl0gPj4gNDsKKwl3NS5ieXRlWzFdID0gdy5ieXRlWzJdIDw8IDQgfCB3LmJ5dGVbM10gPj4gNDsKKwl3NS5ieXRlWzJdID0gdy5ieXRlWzNdIDw8IDQgfCB3LmJ5dGVbNF0gPj4gNDsKKwl3NS5ieXRlWzNdID0gdy5ieXRlWzRdIDw8IDQgfCB3LmJ5dGVbNV0gPj4gNDsKKwl3NS5ieXRlWzRdID0gdy5ieXRlWzVdIDw8IDQgfCB3LmJ5dGVbNl0gPj4gNDsKKwl3NS5ieXRlWzVdID0gdy5ieXRlWzZdIDw8IDQgfCB3LmJ5dGVbN10gPj4gNDsKKwl3NS5ieXRlWzZdID0gdy5ieXRlWzddIDw8IDQgfCAoaW5zdCAmIDB4MGYwMCkgPj4gODsKKwl3NS5ieXRlWzddID0gKGluc3QgJiAweGZmKTsKKworCXJldHVybiB3NS53d247Cit9CisKK3U2NAorYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIGlvYy0+YXR0ci0+bWZnX3d3bjsKK30KKworbWFjX3QKK2JmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJbWFjX3QgICAgICAgICAgIG1hYzsKKworCW1hYyA9IGlvYy0+YXR0ci0+bWZnX21hYzsKKwltYWMubWFjW01BQ19BRERSTEVOIC0gMV0gKz0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmV0dXJuIG1hYzsKK30KKwordm9pZAorYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmZjbW9kZSA9IEJGQV9UUlVFOworCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19nZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gaW9jLT5mY21vZGUgfHwgKGlvYy0+cGNpZGV2LmRldmljZV9pZCAhPSBCRkFfUENJX0RFVklDRV9JRF9DVCk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaW50ZXJydXB0IHNob3VsZCBiZSBjbGFpbWVkLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2ludHhfY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaXNyLCBtc2s7CisKKwkvKioKKwkgKiBBbHdheXMgY2xhaW0gaWYgbm90IGNhdGFwdWx0LgorCSAqLworCWlmICghaW9jLT5jdGRldikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoqCisJICogRkFMU0UgaWYgbmV4dCBkZXZpY2UgaXMgY2xhaW1pbmcgaW50ZXJydXB0LgorCSAqIFRSVUUgaWYgbmV4dCBkZXZpY2UgaXMgbm90IGludGVycnVwdGluZyBvciBub3QgcHJlc2VudC4KKwkgKi8KKwltc2sgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5zaGlycV9tc2tfbmV4dCk7CisJaXNyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3Muc2hpcnFfaXNyX25leHQpOworCXJldHVybiAhKGlzciAmIH5tc2spOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IGlvYy0+bG9nbTsKKwlzMzIgICAgICAgICBpbnN0X251bSA9IDA7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPQ19BRU5fSEJHT09EOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJHT09ELCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fSEJGQUlMOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJGQUlMLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRU5BQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRU5BQkxFLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0RJU0FCTEUsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9GV01JU01BVENIOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCwgaW5zdF9udW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5wd3duLCAwLCBzaXplb2YoYWVuX2RhdGEuaW9jLnB3d24pKTsKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5tYWMsIDAsIHNpemVvZihhZW5fZGF0YS5pb2MubWFjKSk7CisJYmZhX2lvY19nZXRfYXR0cihpb2MsICZpb2NfYXR0cik7CisJc3dpdGNoIChpb2NfYXR0ci5pb2NfdHlwZSkgeworCWNhc2UgQkZBX0lPQ19UWVBFX0ZDOgorCQlhZW5fZGF0YS5pb2MucHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfRkNvRToKKwkJYWVuX2RhdGEuaW9jLnB3d24gPSBiZmFfaW9jX2dldF9wd3duKGlvYyk7CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfTEw6CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydChpb2NfYXR0ci5pb2NfdHlwZSA9PSBCRkFfSU9DX1RZUEVfRkMpOworCQlicmVhazsKKwl9CisJYWVuX2RhdGEuaW9jLmlvY190eXBlID0gaW9jX2F0dHIuaW9jX3R5cGU7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJaW50ICAgICAgICAgICAgIHRsZW47CisKKwlpZiAoaW9jLT5kYmdfZndzYXZlX2xlbiA9PSAwKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FTk9GU0FWRTsKKworCXRsZW4gPSAqdHJjbGVuOworCWlmICh0bGVuID4gaW9jLT5kYmdfZndzYXZlX2xlbikKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisKKwliZmFfb3NfbWVtY3B5KHRyY2RhdGEsIGlvYy0+ZGJnX2Z3c2F2ZSwgdGxlbik7CisJKnRyY2xlbiA9IHRsZW47CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwl1MzIgICAgICAgIHBnbnVtOworCXUzMiAgICAgICAgbG9mZiA9IEJGQV9EQkdfRldUUkNfT0ZGKGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWludCAgICAgICAgICAgICBpLCB0bGVuOworCXUzMiAgICAgICAqdGJ1ZiA9IHRyY2RhdGEsIHIzMjsKKworCWJmYV90cmMoaW9jLCAqdHJjbGVuKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJbG9mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwl0bGVuID0gKnRyY2xlbjsKKwlpZiAodGxlbiA+IEJGQV9EQkdfRldUUkNfTEVOKQorCQl0bGVuID0gQkZBX0RCR19GV1RSQ19MRU47CisJdGxlbiAvPSBzaXplb2YodTMyKTsKKworCWJmYV90cmMoaW9jLCB0bGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCB0bGVuOyBpKyspIHsKKwkJcjMyID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJdGJ1ZltpXSA9IGJmYV9vc19udG9obChyMzIpOworCQlsb2ZmICs9IHNpemVvZih1MzIpOworCisJCS8qKgorCQkgKiBoYW5kbGUgcGFnZSBvZmZzZXQgd3JhcCBhcm91bmQKKwkJICovCisJCWxvZmYgPSBQU1NfU01FTV9QR09GRihsb2ZmKTsKKwkJaWYgKGxvZmYgPT0gMCkgeworCQkJcGdudW0rKzsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisJCX0KKwl9CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKKwliZmFfdHJjKGlvYywgcGdudW0pOworCisJKnRyY2xlbiA9IHRsZW4gKiBzaXplb2YodTMyKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBTYXZlIGZpcm13YXJlIHRyYWNlIGlmIGNvbmZpZ3VyZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2RlYnVnX3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWludCAgICAgICAgICAgICB0bGVuOworCisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9sZW4pIHsKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisJCWJmYV9pb2NfZGVidWdfZnd0cmMoaW9jLCBpb2MtPmRiZ19md3NhdmUsICZ0bGVuKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgZmFpbHVyZSBkZXRlY3RlZC4gU3RhcnQgcmVjb3ZlcnkgYWN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9vbmNlKSB7CisJCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX0ZBTFNFOworCQliZmFfaW9jX2RlYnVnX3NhdmUoaW9jKTsKKwl9CisKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2hiZmFpbHMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hCRkFJTCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGVmZDRiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfSU9DX0hfXworI2RlZmluZSBfX0JGQV9JT0NfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2Jvb3QuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHJlcXVpcmVkIGJ5IElPQworICovCitzdHJ1Y3QgYmZhX3BjaWRldl9zIHsKKwlpbnQgICAgICAgICAgICAgcGNpX3Nsb3Q7CisJdTggICAgICAgICBwY2lfZnVuYzsKKwl1MTYJZGV2aWNlX2lkOworCWJmYV9vc19hZGRyX3QgICBwY2lfYmFyX2t2YTsKK307CisKKy8qKgorICogU3RydWN0dXJlIHVzZWQgdG8gcmVtZW1iZXIgdGhlIERNQS1hYmxlIG1lbW9yeSBibG9jaydzIEtWQSBhbmQgUGh5c2ljYWwKKyAqIEFkZHJlc3MKKyAqLworc3RydWN0IGJmYV9kbWFfcyB7CisJdm9pZAkJKmt2YTsJLyohIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MJKi8KKwl1NjQJcGE7CS8qISBQaHlzaWNhbCBhZGRyZXNzCQkqLworfTsKKworI2RlZmluZSBCRkFfRE1BX0FMSUdOX1NaCTI1NgorI2RlZmluZSBCRkFfUk9VTkRVUChfbCwgX3MpCSgoKF9sKSArICgoX3MpIC0gMSkpICYgfigoX3MpIC0gMSkpCisKKworCisjZGVmaW5lIGJmYV9kbWFfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfZG1hX2FkZHJfc2V0KHVuaW9uIGJmaV9hZGRyX3UgKmRtYV9hZGRyLCB1NjQgcGEpCit7CisJZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKHUzMikgcGE7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgKGJmYV9vc191MzIocGEpKTsKK30KKworCisjZGVmaW5lIGJmYV9kbWFfYmVfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9iZV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX2RtYV9iZV9hZGRyX3NldCh1bmlvbiBiZmlfYWRkcl91ICpkbWFfYWRkciwgdTY0IHBhKQoreworCWRtYV9hZGRyLT5hMzIuYWRkcl9sbyA9ICh1MzIpIGJmYV9vc19odG9ubChwYSk7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgYmZhX29zX2h0b25sKGJmYV9vc191MzIocGEpKTsKK30KKworc3RydWN0IGJmYV9pb2NfcmVnc19zIHsKKwliZmFfb3NfYWRkcl90ICAgaGZuX21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBoZm5fbWJveDsKKwliZmFfb3NfYWRkcl90ICAgbHB1X21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBscHVfbWJveDsKKwliZmFfb3NfYWRkcl90ICAgcHNzX2N0bF9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGFwcF9wbGxfZmFzdF9jdGxfcmVnOworCWJmYV9vc19hZGRyX3QgICBhcHBfcGxsX3Nsb3dfY3RsX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaW9jX3NlbV9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGlvY191c2FnZV9zZW1fcmVnOworCWJmYV9vc19hZGRyX3QgICBpb2NfdXNhZ2VfcmVnOworCWJmYV9vc19hZGRyX3QgICBob3N0X3BhZ2VfbnVtX2ZuOworCWJmYV9vc19hZGRyX3QgICBoZWFydGJlYXQ7CisJYmZhX29zX2FkZHJfdCAgIGlvY19md3N0YXRlOworCWJmYV9vc19hZGRyX3QgICBsbF9oYWx0OworCWJmYV9vc19hZGRyX3QgICBzaGlycV9pc3JfbmV4dDsKKwliZmFfb3NfYWRkcl90ICAgc2hpcnFfbXNrX25leHQ7CisJYmZhX29zX2FkZHJfdCAgIHNtZW1fcGFnZV9zdGFydDsKKwl1MzIJc21lbV9wZzA7Cit9OworCisjZGVmaW5lIGJmYV9yZWdfcmVhZChfcmFkZHIpCWJmYV9vc19yZWdfcmVhZChfcmFkZHIpCisjZGVmaW5lIGJmYV9yZWdfd3JpdGUoX3JhZGRyLCBfdmFsKQliZmFfb3NfcmVnX3dyaXRlKF9yYWRkciwgX3ZhbCkKKyNkZWZpbmUgYmZhX21lbV9yZWFkKF9yYWRkciwgX29mZikJYmZhX29zX21lbV9yZWFkKF9yYWRkciwgX29mZikKKyNkZWZpbmUgYmZhX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCVwKKwkJCQkJYmZhX29zX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCisvKioKKyAqIElPQyBNYWlsYm94IHN0cnVjdHVyZXMKKyAqLworc3RydWN0IGJmYV9tYm94X2NtZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwl1MzIJbXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJT0MgbWFpbGJveCBtb2R1bGUKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19tYm94X21jZnVuY190KSh2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKTsKK3N0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJY21kX3E7CQkvKiAgcGVuZGluZyBtYm94IHF1ZXVlCSovCisJaW50CQlubWNsYXNzOwkvKiAgbnVtYmVyIG9mIGhhbmRsZXJzICovCisJc3RydWN0IHsKKwkJYmZhX2lvY19tYm94X21jZnVuY190CWNiZm47CS8qICBtZXNzYWdlIGhhbmRsZXJzCSovCisJCXZvaWQJCQkqY2Jhcmc7CisJfSBtYmhkbHJbQkZJX01DX01BWF07Cit9OworCisvKioKKyAqIElPQyBjYWxsYmFjayBmdW5jdGlvbiBpbnRlcmZhY2VzCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZW5hYmxlX2NiZm5fdCkodm9pZCAqYmZhLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZGlzYWJsZV9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX2hiZmFpbF9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX3Jlc2V0X2NiZm5fdCkodm9pZCAqYmZhKTsKK3N0cnVjdCBiZmFfaW9jX2NiZm5fcyB7CisJYmZhX2lvY19lbmFibGVfY2Jmbl90CWVuYWJsZV9jYmZuOworCWJmYV9pb2NfZGlzYWJsZV9jYmZuX3QJZGlzYWJsZV9jYmZuOworCWJmYV9pb2NfaGJmYWlsX2NiZm5fdAloYmZhaWxfY2JmbjsKKwliZmFfaW9jX3Jlc2V0X2NiZm5fdAlyZXNldF9jYmZuOworfTsKKworLyoqCisgKiBIZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUgZWxlbWVudC4KKyAqLworc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwliZmFfaW9jX2hiZmFpbF9jYmZuX3QJY2JmbjsKKwl2b2lkCQkJKmNiYXJnOworfTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgaGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHN0cnVjdHVyZQorICovCisjZGVmaW5lIGJmYV9pb2NfaGJmYWlsX2luaXQoX19ub3RpZnksIF9fY2JmbiwgX19jYmFyZykgZG8gewlcCisJKF9fbm90aWZ5KS0+Y2JmbiA9IChfX2NiZm4pOyAgICAgIFwKKwkoX19ub3RpZnkpLT5jYmFyZyA9IChfX2NiYXJnKTsgICAgICBcCit9IHdoaWxlICgwKQorCitzdHJ1Y3QgYmZhX2lvY19zIHsKKwliZmFfZnNtX3QJCWZzbTsKKwlzdHJ1Y3QgYmZhX3MJCSpiZmE7CisJc3RydWN0IGJmYV9wY2lkZXZfcwlwY2lkZXY7CisJc3RydWN0IGJmYV90aW1lcl9tb2RfcyAJKnRpbWVyX21vZDsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCWlvY190aW1lcjsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXNlbV90aW1lcjsKKwl1MzIJCWhiX2NvdW50OworCXUzMgkJaGJfZmFpbDsKKwl1MzIJCXJldHJ5X2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJCWhiX25vdGlmeV9xOworCXZvaWQJCQkqZGJnX2Z3c2F2ZTsKKwlpbnQJCQlkYmdfZndzYXZlX2xlbjsKKwliZmFfYm9vbGVhbl90CQlkYmdfZndzYXZlX29uY2U7CisJZW51bSBiZmlfbWNsYXNzCQlpb2NfbWM7CisJc3RydWN0IGJmYV9pb2NfcmVnc19zIAlpb2NfcmVnczsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcwkqdHJjbW9kOworCXN0cnVjdCBiZmFfYWVuX3MJKmFlbjsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcwkqbG9nbTsKKwlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcwlzdGF0czsKKwliZmFfYm9vbGVhbl90CQlhdXRvX3JlY292ZXI7CisJYmZhX2Jvb2xlYW5fdAkJZmNtb2RlOworCWJmYV9ib29sZWFuX3QJCWN0ZGV2OworCWJmYV9ib29sZWFuX3QJCWNuYTsKKwliZmFfYm9vbGVhbl90CQlwbGxpbml0OworCXU4CQkJcG9ydF9pZDsKKworCXN0cnVjdCBiZmFfZG1hX3MJYXR0cl9kbWE7CisJc3RydWN0IGJmaV9pb2NfYXR0cl9zCSphdHRyOworCXN0cnVjdCBiZmFfaW9jX2NiZm5fcwkqY2JmbjsKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zIG1ib3hfbW9kOworfTsKKworI2RlZmluZSBiZmFfaW9jX3BjaWZuKF9faW9jKQkJKF9faW9jKS0+cGNpZGV2LnBjaV9mdW5jCisjZGVmaW5lIGJmYV9pb2NfZGV2aWQoX19pb2MpCQkoX19pb2MpLT5wY2lkZXYuZGV2aWNlX2lkCisjZGVmaW5lIGJmYV9pb2NfYmFyMChfX2lvYykJCShfX2lvYyktPnBjaWRldi5wY2lfYmFyX2t2YQorI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykJCSgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfaW9jX2ZldGNoX3N0YXRzKF9faW9jLCBfX3N0YXRzKSBcCisJCSgoX19zdGF0cyktPmRydl9zdGF0cykgPSAoX19pb2MpLT5zdGF0cworI2RlZmluZSBiZmFfaW9jX2Nscl9zdGF0cyhfX2lvYykJXAorCQliZmFfb3NfbWVtc2V0KCYoX19pb2MpLT5zdGF0cywgMCwgc2l6ZW9mKChfX2lvYyktPnN0YXRzKSkKKyNkZWZpbmUgYmZhX2lvY19tYXhmcnNpemUoX19pb2MpCShfX2lvYyktPmF0dHItPm1heGZyc2l6ZQorI2RlZmluZSBiZmFfaW9jX3J4X2JiY3JlZGl0KF9faW9jKQkoX19pb2MpLT5hdHRyLT5yeF9iYmNyZWRpdAorI2RlZmluZSBiZmFfaW9jX3NwZWVkX3N1cChfX2lvYykJXAorCUJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIChfX2lvYyktPmF0dHItPmFkYXB0ZXJfcHJvcCkKKworLyoqCisgKiBJT0MgbWFpbGJveCBpbnRlcmZhY2UKKyAqLwordm9pZCBiZmFfaW9jX21ib3hfcXVldWUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZCk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCAqbWNmdW5jcyk7Cit2b2lkIGJmYV9pb2NfbWJveF9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19tYm94X3NlbmQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICppb2NfbXNnLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2lvY19tc2dnZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICptYm1zZyk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKKy8qKgorICogSU9DIGludGVyZmFjZXMKKyAqLwordm9pZCBiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwKKwkJc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLCBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsCisJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCXN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pOwordm9pZCBiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX3BjaV9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2LAorCQllbnVtIGJmaV9tY2xhc3MgbWMpOwordTMyIGJmYV9pb2NfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgYmZhX2lvY19tZW1fY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCAgdTggKmRtX2t2YSwgdTY0IGRtX3BhKTsKK3ZvaWQgYmZhX2lvY19lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaW50eF9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCit2b2lkIGJmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKTsKK3ZvaWQgYmZhX2lvY19pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm1zZyk7Cit2b2lkIGJmYV9pb2NfZXJyb3JfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBpbnR4KTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jX3BsbF9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2Z3X21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfYWRhcHRlcl9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2NmZ19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cik7Cit2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOworaW50IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpOwordm9pZCBiZmFfaW9jX2RlYnVnX21lbWNsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGJnX2Z3c2F2ZSk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLAorCQlpbnQgKnRyY2xlbik7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsCisJCQkJIGludCAqdHJjbGVuKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdudW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3ZvaWQgYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfZ2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpOworCisvKgorICogYmZhIG1mZyB3d24gQVBJIGZ1bmN0aW9ucworICovCit3d25fdCBiZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KTsKK21hY190IGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordTY0IGJmYV9pb2NfZ2V0X2FkaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworI2VuZGlmIC8qIF9fQkZBX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKQEAgLTAsMCArMSw4NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9wcml2Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9ib290Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jYnJlZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgImJmYV9jYWxsYmFja19wcml2LmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkMpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NGQ19UT1YJCTUwMDAJLyogbXNlY3MgKi8KKworZW51bSB7CisJQkZBX0lPQ0ZDX0FDVF9OT05FCT0gMCwKKwlCRkFfSU9DRkNfQUNUX0lOSVQJPSAxLAorCUJGQV9JT0NGQ19BQ1RfU1RPUAk9IDIsCisJQkZBX0lPQ0ZDX0FDVF9ESVNBQkxFCT0gMywKK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZGlzYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX2hiZmFpbF9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3Jlc2V0X2NiZm4odm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2xlYXIodm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfc3dhcChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKmQsCisJCQlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKnMpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c190aW1lb3V0KHZvaWQgKmJmYV9hcmcpOworCitzdGF0aWMgc3RydWN0IGJmYV9pb2NfY2Jmbl9zIGJmYV9pb2NmY19jYmZuOworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19jcXNfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwlpbnQgICAgICAgICAgICAgaSwgcGVyX3JlcXFfc3osIHBlcl9yc3BxX3N6OworCisJcGVyX3JlcXFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisJcGVyX3JzcHFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBDUSBzaXplCisJICovCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JlcXFfc3o7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JzcHFfc3o7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgU2hhZG93IENJL1BJIHNpemUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspCisJCSpkbV9sZW4gKz0gKDIgKiBCRkFfQ0FDSEVMSU5FX1NaKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19md19jZmdfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwkqZG1fbGVuICs9CisJCUJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPQorCQlCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyksCisJCQkgICAgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7Cit9CisKKy8qKgorICogVXNlIHRoZSBNYWlsYm94IGludGVyZmFjZSB0byBzZW5kIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3NlbmRfY2ZnKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyBjZmdfcmVxOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKmNmZ19pbmZvID0gaW9jZmMtPmNmZ2luZm87CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAgKmNmZyA9ICZpb2NmYy0+Y2ZnOworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2Fzc2VydChjZmctPmZ3Y2ZnLm51bV9jcXMgPD0gQkZJX0lPQ19NQVhfQ1FTKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fY3FzKTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX0ZBTFNFOworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKworCS8qKgorCSAqIGluaXRpYWxpemUgSU9DIGNvbmZpZ3VyYXRpb24gaW5mbworCSAqLworCWNmZ19pbmZvLT5lbmRpYW5fc2lnID0gQkZJX0lPQ19FTkRJQU5fU0lHOworCWNmZ19pbmZvLT5udW1fY3FzID0gY2ZnLT5md2NmZy5udW1fY3FzOworCisJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+Y2ZncnNwX2FkZHIsIGlvY2ZjLT5jZmdyc3BfZG1hLnBhKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5zdGF0c19hZGRyLCBpb2NmYy0+c3RhdHNfcGEpOworCisJLyoqCisJICogZG1hIG1hcCBSRVEgYW5kIFJTUCBjaXJjdWxhciBxdWV1ZXMgYW5kIHNoYWRvdyBwb2ludGVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yZXFfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfc2hhZG93X2NpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cmVxX2NxX3NoYWRvd19jaVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yZXFfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zKTsKKworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3BfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yc3BfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3Bfc2hhZG93X3BpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yc3BfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zKTsKKwl9CisKKwkvKioKKwkgKiBkbWEgbWFwIElPQyBjb25maWd1cmF0aW9uIGl0c2VsZgorCSAqLworCWJmaV9oMmlfc2V0KGNmZ19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9DRkdfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX3JlcS5pb2NfY2ZnX2RtYV9hZGRyLCBpb2NmYy0+Y2ZnX2luZm8ucGEpOworCisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmY2ZnX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfbWVtKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhLT5iZmFkID0gYmZhZDsKKwlpb2NmYy0+YmZhID0gYmZhOworCWlvY2ZjLT5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX05PTkU7CisKKwliZmFfb3NfYXNzaWduKGlvY2ZjLT5jZmcsICpjZmcpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBjaGlwIHNwZWNpZmljIGhhbmRsZXJzLgorCSAqLworCWlmIChiZmFfaW9jX2RldmlkKCZiZmEtPmlvYykgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2N0X3JlZ2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y3RfcnNwcV9hY2s7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5pdCA9IGJmYV9od2N0X21zaXhfaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbnN0YWxsID0gYmZhX2h3Y3RfbXNpeF9pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19tc2l4X3VuaW5zdGFsbCA9IGJmYV9od2N0X21zaXhfdW5pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBiZmFfaHdjdF9pc3JfbW9kZV9zZXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0dmVjcyA9IGJmYV9od2N0X21zaXhfZ2V0dmVjczsKKwl9IGVsc2UgeworCQlpb2NmYy0+aHdpZi5od19yZWdpbml0ID0gYmZhX2h3Y2JfcmVnaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2FjazsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbml0ID0gYmZhX2h3Y2JfbXNpeF9pbml0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luc3RhbGwgPSBiZmFfaHdjYl9tc2l4X2luc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfdW5pbnN0YWxsID0gYmZhX2h3Y2JfbXNpeF91bmluc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X2lzcl9tb2RlX3NldCA9IGJmYV9od2NiX2lzcl9tb2RlX3NldDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9nZXR2ZWNzID0gYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzOworCX0KKworCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQoYmZhKTsKKwliZmEtPm1zaXgubnZlY3MgPSAwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbykKK3sKKwl1OCAgICAgICAgKmRtX2t2YTsKKwl1NjQgICAgICAgIGRtX3BhOworCWludCAgICAgICAgICAgICBpLCBwZXJfcmVxcV9zeiwgcGVyX3JzcHFfc3o7CisJc3RydWN0IGJmYV9pb2NmY19zICAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlpbnQJCWRiZ3N6OworCisJZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbyk7CisJZG1fcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKTsKKworCS8qCisJICogRmlyc3QgYWxsb2NhdGUgZG1hIG1lbW9yeSBmb3IgSU9DLgorCSAqLworCWJmYV9pb2NfbWVtX2NsYWltKCZiZmEtPmlvYywgZG1fa3ZhLCBkbV9wYSk7CisJZG1fa3ZhICs9IGJmYV9pb2NfbWVtaW5mbygpOworCWRtX3BhICArPSBiZmFfaW9jX21lbWluZm8oKTsKKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZSBxdWV1ZXMgYW5kIGZvciBzaGFkb3cKKwkgKiBjaS9waSByZWdpc3RlcnMKKwkgKi8KKwlwZXJfcmVxcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKwlwZXJfcnNwcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQlpb2NmYy0+cmVxX2NxX2JhW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9iYVtpXS5wYSA9IGRtX3BhOworCQliZmFfb3NfbWVtc2V0KGRtX2t2YSwgMCwgcGVyX3JlcXFfc3opOworCQlkbV9rdmEgKz0gcGVyX3JlcXFfc3o7CisJCWRtX3BhICs9IHBlcl9yZXFxX3N6OworCisJCWlvY2ZjLT5yc3BfY3FfYmFbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX2JhW2ldLnBhID0gZG1fcGE7CisJCWJmYV9vc19tZW1zZXQoZG1fa3ZhLCAwLCBwZXJfcnNwcV9zeik7CisJCWRtX2t2YSArPSBwZXJfcnNwcV9zejsKKwkJZG1fcGEgKz0gcGVyX3JzcHFfc3o7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCWlvY2ZjLT5yZXFfY3Ffc2hhZG93X2NpW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9zaGFkb3dfY2lbaV0ucGEgPSBkbV9wYTsKKwkJZG1fa3ZhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisJCWRtX3BhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisKKwkJaW9jZmMtPnJzcF9jcV9zaGFkb3dfcGlbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSA9IGRtX3BhOworCQlkbV9rdmEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwkJZG1fcGEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwl9CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyBpbmZvIHBhZ2UKKwkgKi8KKwliZmEtPmlvY2ZjLmNmZ19pbmZvLmt2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLmNmZ19pbmZvLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdpbmZvID0gKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyByZXNwb25zZQorCSAqLworCWJmYS0+aW9jZmMuY2ZncnNwX2RtYS5rdmEgPSBkbV9rdmE7CisJYmZhLT5pb2NmYy5jZmdyc3BfZG1hLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdyc3AgPSAoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqKSBkbV9rdmE7CisKKwlkbV9rdmEgKz0KKwkJQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MpLAorCQkJICAgIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zKSwKKwkJCSAgICAgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgaW9jZmMgc3RhdHMKKwkgKi8KKwliZmEtPmlvY2ZjLnN0YXRzX2t2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLnN0YXRzX3BhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5md19zdGF0cyA9IChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJZG1fcGEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKKworCWRiZ3N6ID0gYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYXV0b19yZWNvdmVyKTsKKwlpZiAoZGJnc3ogPiAwKSB7CisJCWJmYV9pb2NfZGVidWdfbWVtY2xhaW0oJmJmYS0+aW9jLCBiZmFfbWVtaW5mb19rdmEobWVtaW5mbykpOworCQliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgKz0gZGJnc3o7CisJfQorfQorCisvKioKKyAqIEJGQSBzdWJtb2R1bGVzIGluaXRpYWxpemF0aW9uIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5pbml0ZG9uZShiZmEpOworfQorCisvKioKKyAqIFN0YXJ0IEJGQSBzdWJtb2R1bGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfVFJVRTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5zdGFydChiZmEpOworfQorCisvKioKKyAqIERpc2FibGUgQkZBIHN1Ym1vZHVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+aW9jZGlzYWJsZShiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19PSyk7CisJCWVsc2UKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19GQUlMRUQpOworCX0gZWxzZQorCQliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfTk9ORTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdG9wX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGwpCit7CisJc3RydWN0IGJmYV9zICAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gYmZhLT5iZmFkOworCisJaWYgKGNvbXBsKQorCQljb21wbGV0ZSgmYmZhZC0+Y29tcCk7CisKKwllbHNlCisJCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9OT05FOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Rpc2FibGVfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbCkKK3sKKwlzdHJ1Y3QgYmZhX3MgICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBiZmEtPmJmYWQ7CisKKwlpZiAoY29tcGwpCisJCWNvbXBsZXRlKCZiZmFkLT5kaXNhYmxlX2NvbXApOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfY2ZncnNwKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwkqZndjZmcgICA9ICZjZmdyc3AtPmZ3Y2ZnOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgCQkqY2ZnaW5mbyA9IGlvY2ZjLT5jZmdpbmZvOworCisJZndjZmctPm51bV9jcXMgICAgICAgID0gZndjZmctPm51bV9jcXM7CisJZndjZmctPm51bV9pb2ltX3JlcXMgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1faW9pbV9yZXFzKTsKKwlmd2NmZy0+bnVtX3Rza2ltX3JlcXMgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV90c2tpbV9yZXFzKTsKKwlmd2NmZy0+bnVtX2ZjeHBfcmVxcyAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV9mY3hwX3JlcXMpOworCWZ3Y2ZnLT5udW1fdWZfYnVmcyAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3VmX2J1ZnMpOworCWZ3Y2ZnLT5udW1fcnBvcnRzICAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3Jwb3J0cyk7CisKKwljZmdpbmZvLT5pbnRyX2F0dHIuY29hbGVzY2UgPSBjZmdyc3AtPmludHJfYXR0ci5jb2FsZXNjZTsKKwljZmdpbmZvLT5pbnRyX2F0dHIuZGVsYXkgICAgPSBiZmFfb3NfbnRvaHMoY2ZncnNwLT5pbnRyX2F0dHIuZGVsYXkpOworCWNmZ2luZm8tPmludHJfYXR0ci5sYXRlbmN5ICA9IGJmYV9vc19udG9ocyhjZmdyc3AtPmludHJfYXR0ci5sYXRlbmN5KTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBDb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIC0gaW5pdGlhbGl6ZS9zdGFydCBzdWJtb2R1bGVzCisJICovCisJaWYgKGlvY2ZjLT5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPmluaXRfaGNiX3FlLCBiZmFfaW9jZmNfaW5pdF9jYiwgYmZhKTsKKwllbHNlCisJCWJmYV9pb2NmY19zdGFydF9zdWJtb2QoYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbGVhcih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJmlvY2ZjLT5zdGF0c190aW1lciwKKwkJCSAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX3RpbWVvdXQsIGJmYSwKKwkJCSAgICBCRkFfSU9DRkNfVE9WKTsKKworCWJmaV9oMmlfc2V0KHN0YXRzX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUSwKKwkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19zd2FwKHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqZCwgc3RydWN0IGJmYV9md19zdGF0c19zICpzKQoreworCXUzMiAgICAgICAqZGlwID0gKHUzMiAqKSBkOworCXUzMiAgICAgICAqc2lwID0gKHUzMiAqKSBzOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSAvIHNpemVvZih1MzIpKTsgaSsrKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWJmYV9pb2NfY2xyX3N0YXRzKCZiZmEtPmlvYyk7CisJCWlvY2ZjLT5zdGF0c19jYmZuKGlvY2ZjLT5zdGF0c19jYmFyZywgaW9jZmMtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhX3RyYyhiZmEsIDApOworCisJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLCBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGlvY2ZjLT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQkJYmZhX29zX21lbXNldChpb2NmYy0+c3RhdHNfcmV0LCAwLAorCQkJCXNpemVvZigqaW9jZmMtPnN0YXRzX3JldCkpOworCQkJYmZhX2lvY2ZjX3N0YXRzX3N3YXAoJmlvY2ZjLT5zdGF0c19yZXQtPmZ3X3N0YXRzLAorCQkJCWlvY2ZjLT5md19zdGF0cyk7CisJCX0KKwkJaW9jZmMtPnN0YXRzX2NiZm4oaW9jZmMtPnN0YXRzX2NiYXJnLCBpb2NmYy0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWJmYV90cmMoYmZhLCAwKTsKKworCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwgYmZhX2lvY2ZjX3N0YXRzX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZpb2NmYy0+c3RhdHNfdGltZXIsCisJCQkgICAgYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQsIGJmYSwgQkZBX0lPQ0ZDX1RPVik7CisKKwliZmlfaDJpX3NldChzdGF0c19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgcTsKKworCWZvciAocSA9IDA7IHEgPCBCRklfSU9DX01BWF9DUVM7IHErKykgeworCQliZmFfcmVxcV9jaShiZmEsIHEpID0gMDsKKwkJYmZhX3JlcXFfcGkoYmZhLCBxKSA9IDA7CisJCWJmYV9yc3BxX2NpKGJmYSwgcSkgPSAwOworCQliZmFfcnNwcV9waShiZmEsIHEpID0gMDsKKwl9Cit9CisKKy8qKgorICogSU9DIGVuYWJsZSByZXF1ZXN0IGlzIGNvbXBsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0lOSVQpCisJCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwKKwkJCQkgICAgIGJmYV9pb2NmY19pbml0X2NiLCBiZmEpOworCQlyZXR1cm47CisJfQorCisJYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChiZmEpOworCWJmYV9pb2NmY19zZW5kX2NmZyhiZmEpOworfQorCisvKioKKyAqIElPQyBkaXNhYmxlIHJlcXVlc3QgaXMgY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19kaXNhYmxlX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmFfaXNyX2Rpc2FibGUoYmZhKTsKKwliZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2QoYmZhKTsKKworCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX1NUT1ApCisJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLnN0b3BfaGNiX3FlLCBiZmFfaW9jZmNfc3RvcF9jYiwKKwkJCSAgICAgYmZhKTsKKwllbHNlIHsKKwkJYmZhX2Fzc2VydChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0RJU0FCTEUpOworCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5kaXNfaGNiX3FlLCBiZmFfaW9jZmNfZGlzYWJsZV9jYiwKKwkJCSAgICAgYmZhKTsKKwl9Cit9CisKKy8qKgorICogTm90aWZ5IHN1Yi1tb2R1bGVzIG9mIGhhcmR3YXJlIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaGJmYWlsX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCisJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJYmZhX2lvY2ZjX2Rpc2FibGVfc3VibW9kKGJmYSk7CisKKwlpZiAoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsCisJCQkgICAgIGJmYSk7Cit9CisKKy8qKgorICogQWN0aW9ucyBvbiBjaGlwLXJlc2V0IGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfcmVzZXRfY2Jmbih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKwliZmFfaXNyX2VuYWJsZShiZmEpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvY19wdWJsaWMKKyAqLworCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCS8qIGRtYSBtZW1vcnkgZm9yIElPQyAqLworCSpkbV9sZW4gKz0gYmZhX2lvY19tZW1pbmZvKCk7CisKKwliZmFfaW9jZmNfZndfY2ZnX3N6KGNmZywgZG1fbGVuKTsKKwliZmFfaW9jZmNfY3FzX3N6KGNmZywgZG1fbGVuKTsKKwkqa21fbGVuICs9IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2F1dG9fcmVjb3Zlcik7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2lvY2ZjX2NiZm4uZW5hYmxlX2NiZm4gPSBiZmFfaW9jZmNfZW5hYmxlX2NiZm47CisJYmZhX2lvY2ZjX2NiZm4uZGlzYWJsZV9jYmZuID0gYmZhX2lvY2ZjX2Rpc2FibGVfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5oYmZhaWxfY2JmbiA9IGJmYV9pb2NmY19oYmZhaWxfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5yZXNldF9jYmZuID0gYmZhX2lvY2ZjX3Jlc2V0X2NiZm47CisKKwliZmFfaW9jX2F0dGFjaCgmYmZhLT5pb2MsIGJmYSwgJmJmYV9pb2NmY19jYmZuLCAmYmZhLT50aW1lcl9tb2QsCisJCWJmYS0+dHJjbW9kLCBiZmEtPmFlbiwgYmZhLT5sb2dtKTsKKwliZmFfaW9jX3BjaV9pbml0KCZiZmEtPmlvYywgcGNpZGV2LCBCRklfTUNfSU9DRkMpOworCWJmYV9pb2NfbWJveF9yZWdpc3RlcigmYmZhLT5pb2MsIGJmYV9tYm94X2lzcnMpOworCisJLyoqCisJICogQ2hvb3NlIEZDIChzc2lkOiAweDFDKSB2L3MgRkNvRSAoc3NpZDogMHgxNCkgbW9kZS4KKwkgKi8KKwlpZiAoMCkKKwkJYmZhX2lvY19zZXRfZmNtb2RlKCZiZmEtPmlvYyk7CisKKwliZmFfaW9jZmNfaW5pdF9tZW0oYmZhLCBiZmFkLCBjZmcsIHBjaWRldik7CisJYmZhX2lvY2ZjX21lbV9jbGFpbShiZmEsIGNmZywgbWVtaW5mbyk7CisJYmZhX3RpbWVyX2luaXQoJmJmYS0+dGltZXJfbW9kKTsKKworCUlOSVRfTElTVF9IRUFEKCZiZmEtPmNvbXBfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYmZhLT5yZXFxX3dhaXRxW2ldKTsKK30KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NfZGV0YWNoKCZiZmEtPmlvYyk7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX0lOSVQ7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKKwliZmFfbXNpeF9pbnN0YWxsKGJmYSk7Cit9CisKKy8qKgorICogSU9DIHN0YXJ0IGNhbGxlZCBmcm9tIGJmYV9zdGFydCgpLiBDYWxsZWQgdG8gc3RhcnQgSU9DIG9wZXJhdGlvbnMKKyAqIGF0IGRyaXZlciBpbnN0YW50aWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLgorICovCit2b2lkCitiZmFfaW9jZmNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChiZmEpOworfQorCisvKioKKyAqIElPQyBzdG9wIGNhbGxlZCBmcm9tIGJmYV9zdG9wKCkuIENhbGxlZCBvbmx5IHdoZW4gZHJpdmVyIGlzIHVubG9hZGVkCisgKiBmb3IgdGhpcyBpbnN0YW5jZS4KKyAqLwordm9pZAorYmZhX2lvY2ZjX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX1NUT1A7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCWJmYV9pb2NfZGlzYWJsZSgmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfaW9jZmNfaXNyKHZvaWQgKmJmYWFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYWFyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJdW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdQkqbXNnOworCisJbXNnID0gKHVuaW9uIGJmaV9pb2NmY19pMmhfbXNnX3UgKikgbTsKKwliZmFfdHJjKGJmYSwgbXNnLT5taC5tc2dfaWQpOworCisJc3dpdGNoIChtc2ctPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFk6CisJCWlvY2ZjLT5jZmdfcmVwbHkgPSAmbXNnLT5jZmdfcmVwbHk7CisJCWJmYV9pb2NmY19jZmdyc3AoYmZhKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUDoKKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsIGJmYV9pb2NmY19zdGF0c19jYiwKKwkJCSAgICAgIGJmYSk7CisJCWJyZWFrOworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1A6CisJCS8qCisJCSAqIGNoZWNrIGZvciB0aW1lciBwb3AgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJzcAorCQkgKi8KKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsCisJCQkgICAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworCQlicmVhazsKKwljYXNlIEJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1A6CisJCWlvY2ZjLT51cGRhdGVxX2NiZm4oaW9jZmMtPnVwZGF0ZXFfY2JhcmcsIEJGQV9TVEFUVVNfT0spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworI2lmbmRlZiBCRkFfQklPU19CVUlMRAordm9pZAorYmZhX2FkYXB0ZXJfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZiZmEtPmlvYywgYWRfYXR0cik7Cit9CisKK3U2NAorYmZhX2FkYXB0ZXJfZ2V0X2lkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2dldF9hZGlkKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYXR0ci0+aW50cl9hdHRyID0gaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0cjsKKwlhdHRyLT5jb25maWcJPSBpb2NmYy0+Y2ZnOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NmY19pc3JhdHRyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgKm07CisKKwlpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyID0gKmF0dHI7CisJaWYgKCFiZmFfaW9jZmNfaXNfb3BlcmF0aW9uYWwoYmZhKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKKwltID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0lPQyk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisJbS0+Y29hbGVzY2UgPSBhdHRyLT5jb2FsZXNjZTsKKwltLT5kZWxheSAgICA9IGJmYV9vc19odG9ucyhhdHRyLT5kZWxheSk7CisJbS0+bGF0ZW5jeSAgPSBiZmFfb3NfaHRvbnMoYXR0ci0+bGF0ZW5jeSk7CisKKwliZmFfdHJjKGJmYSwgYXR0ci0+ZGVsYXkpOworCWJmYV90cmMoYmZhLCBhdHRyLT5sYXRlbmN5KTsKKworCWJmYV9yZXFxX3Byb2R1Y2UoYmZhLCBCRkFfUkVRUV9JT0MpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfaW9jZmNfc2V0X3Nuc2Jhc2Uoc3RydWN0IGJmYV9zICpiZmEsIHU2NCBzbnNiYXNlX3BhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcyAgICAgICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaW9jZmMtPmNmZ2luZm8tPnNlbnNlX2J1Zl9sZW4gPSAoQkZJX0lPSU1fU05TTEVOIC0gMSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChpb2NmYy0+Y2ZnaW5mby0+aW9pbV9zbnNiYXNlLCBzbnNiYXNlX3BhKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jZmNfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgKnN0YXRzLAorCQkgICAgICBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19yZXQgPSBzdGF0czsKKwlpb2NmYy0+c3RhdHNfY2JmbiA9IGNiZm47CisJaW9jZmMtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfaW9jZmNfc3RhdHNfcXVlcnkoYmZhKTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY2ZjX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19jYmZuID0gY2JmbjsKKwlpb2NmYy0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9pb2NmY19zdGF0c19jbGVhcihiZmEpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRW5hYmxlIElPQyBhZnRlciBpdCBpcyBkaXNhYmxlZC4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfcGxvZ19zdHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwgQkZBX1BMX0VJRF9NSVNDLCAwLAorCQkgICAgICJJT0MgRW5hYmxlIik7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3Bsb2dfc3RyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsIEJGQV9QTF9FSURfTUlTQywgMCwKKwkJICAgICAiSU9DIERpc2FibGUiKTsKKwliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfRElTQUJMRTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfRkFMU0U7CisJYmZhX2lvY19kaXNhYmxlKCZiZmEtPmlvYyk7Cit9CisKKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2lzX29wZXJhdGlvbmFsKCZiZmEtPmlvYykgJiYgYmZhLT5pb2NmYy5jZmdkb25lOworfQorCisvKioKKyAqIFJldHVybiBib290IHRhcmdldCBwb3J0IHd3bnMgLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKip3d25zKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCisJKm53d25zID0gY2ZncnNwLT5ib290d3ducy5ud3duczsKKwkqd3ducyA9IGNmZ3JzcC0+Ym9vdHd3bnMud3duOworfQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQxNzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGQV9JT0NGQ19IX18KKworI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2lvY2ZjLmg+CisjaW5jbHVkZSA8YmZhX2NhbGxiYWNrX3ByaXYuaD4KKworI2RlZmluZSBCRkFfUkVRUV9ORUxFTVNfTUlOCSg0KQorI2RlZmluZSBCRkFfUlNQUV9ORUxFTVNfTUlOCSg0KQorCitzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcyB7CisJYmZhX29zX2FkZHJfdCAgIGludHJfc3RhdHVzOworCWJmYV9vc19hZGRyX3QgICBpbnRyX21hc2s7CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX3BpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2NpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2RlcHRoW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2N0cmxbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfZGVwdGhbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY3RybFtCRklfSU9DX01BWF9DUVNdOworfTsKKworLyoqCisgKiBNU0lYIHZlY3RvciBoYW5kbGVycworICovCisjZGVmaW5lIEJGQV9NU0lYX01BWF9WRUNUT1JTCTIyCit0eXBlZGVmIHZvaWQgKCpiZmFfbXNpeF9oYW5kbGVyX3QpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3N0cnVjdCBiZmFfbXNpeF9zIHsKKwlpbnQJbnZlY3M7CisJYmZhX21zaXhfaGFuZGxlcl90IGhhbmRsZXJbQkZBX01TSVhfTUFYX1ZFQ1RPUlNdOworfTsKKworLyoqCisgKiBDaGlwIHNwZWNpZmljIGludGVyZmFjZXMKKyAqLworc3RydWN0IGJmYV9od2lmX3MgeworCXZvaWQgKCpod19yZWdpbml0KShzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmh3X3JzcHFfYWNrKShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOworCXZvaWQgKCpod19tc2l4X2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOworCXZvaWQgKCpod19tc2l4X2luc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfbXNpeF91bmluc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfaXNyX21vZGVfc2V0KShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKKwl2b2lkICgqaHdfbXNpeF9nZXR2ZWNzKShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7Cit9OwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY2ZjX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfaW9jZmNfcyB7CisJc3RydWN0IGJmYV9zIAkJKmJmYTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIAljZmc7CisJaW50CQkJYWN0aW9uOworCisJdTMyICAgICAgICAJcmVxX2NxX3BpW0JGSV9JT0NfTUFYX0NRU107CisJdTMyICAgICAgICAJcnNwX2NxX2NpW0JGSV9JT0NfTUFYX0NRU107CisKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJaW5pdF9oY2JfcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zCXN0b3BfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlkaXNfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlzdGF0c19oY2JfcWU7CisJYmZhX2Jvb2xlYW5fdAkJY2ZnZG9uZTsKKworCXN0cnVjdCBiZmFfZG1hX3MJY2ZnX2luZm87CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcyAqY2ZnaW5mbzsKKwlzdHJ1Y3QgYmZhX2RtYV9zCWNmZ3JzcF9kbWE7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqY2ZncnNwOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgKmNmZ19yZXBseTsKKworCXU4CQkJKnN0YXRzX2t2YTsKKwl1NjQJCXN0YXRzX3BhOworCXN0cnVjdCBiZmFfZndfc3RhdHNfcyAJKmZ3X3N0YXRzOworCXN0cnVjdCBiZmFfdGltZXJfcyAJc3RhdHNfdGltZXI7CS8qICB0aW1lciAqLworCXN0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyAqc3RhdHNfcmV0OwkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CS8qICBvdXRzdGFuZGluZyBzdGF0cyAqLworCWJmYV9jYl9pb2NfdAkJc3RhdHNfY2JmbjsJLyogIGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbiAqLworCXZvaWQgICAgICAgICAgIAkJKnN0YXRzX2NiYXJnOwkvKiAgdXNlciBjYWxsYmFjayBhcmcgKi8KKworCXN0cnVjdCBiZmFfZG1hX3MgICAJcmVxX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyZXFfY3Ffc2hhZG93X2NpW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyc3BfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJzcF9jcV9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwliZmFfcmVnczsJLyogIEJGQSBkZXZpY2UgcmVnaXN0ZXJzICovCisJc3RydWN0IGJmYV9od2lmX3MJaHdpZjsKKworCWJmYV9jYl9pb2NmY190CQl1cGRhdGVxX2NiZm47IC8qICBiaW9zIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCQkqdXBkYXRlcV9jYmFyZzsJLyogIGJpb3MgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIGJmYV9scHVpZChfX2JmYSkJCWJmYV9pb2NfcG9ydGlkKCYoX19iZmEpLT5pb2MpCisjZGVmaW5lIGJmYV9tc2l4X2luaXQoX19iZmEsIF9fbnZlY3MpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfaW5pdChfX2JmYSwgX19udmVjcykKKyNkZWZpbmUgYmZhX21zaXhfaW5zdGFsbChfX2JmYSkJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfbXNpeF91bmluc3RhbGwoX19iZmEpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfdW5pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfaXNyX21vZGVfc2V0KF9fYmZhLCBfX21zaXgpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X2lzcl9tb2RlX3NldChfX2JmYSwgX19tc2l4KQorI2RlZmluZSBiZmFfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwgX19udmVjcywgX19tYXh2ZWMpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfZ2V0dmVjcyhfX2JmYSwgX192ZWNtYXAsIF9fbnZlY3MsIF9fbWF4dmVjKQorCisvKgorICogRkMgc3BlY2lmaWMgSU9DIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBiZmFfaW9jZmNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9pb2NmY19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Cit2b2lkIGJmYV9pb2NmY19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2lzcih2b2lkICpiZmEsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbXNnKTsKK3ZvaWQgYmZhX2lvY2ZjX3NldF9zbnNiYXNlKHN0cnVjdCBiZmFfcyAqYmZhLCB1NjQgc25zYmFzZV9wYSk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NmY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19yZXNldF9xdWV1ZXMoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfdXBkYXRlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcXFfYmEsIHUzMiByc3BxX2JhLAorCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksCisJCQliZmFfY2JfaW9jZmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKK3ZvaWQgYmZhX21zaXhfYWxsKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3ZvaWQgYmZhX21zaXhfcmVxcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7Cit2b2lkIGJmYV9tc2l4X3JzcHEoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOwordm9pZCBiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKKwordm9pZCBiZmFfaHdjYl9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOwordm9pZCBiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjYl9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKKwkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKK3ZvaWQgYmZhX2h3Y3RfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSk7Cit2b2lkIGJmYV9od2N0X21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCk7Cit2b2lkIGJmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7CisKK3ZvaWQgYmZhX2NvbV9tZW1pbmZvKGJmYV9ib29sZWFuX3QgbWluY2ZnLCB1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9jb21fYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWksCisJCWJmYV9ib29sZWFuX3QgbWluY2ZnKTsKK3ZvaWQgYmZhX2lvY2ZjX2dldF9ib290d3ducyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKm53d25zLCB3d25fdCAqKnd3bnMpOworCisjZW5kaWYgLyogX19CRkFfSU9DRkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBhMTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmNfcS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkNfUSk7CisKK3ZvaWQKK2JmYV9pb2NmY191cGRhdGVxKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxcV9iYSwgdTMyIHJzcHFfYmEsCisJCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksIGJmYV9jYl9pb2NmY190IGNiZm4sCisJCQkJdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB1cGRhdGVxX3JlcTsKKworCWlvY2ZjLT51cGRhdGVxX2NiZm4gPSBjYmZuOworCWlvY2ZjLT51cGRhdGVxX2NiYXJnID0gY2Jhcmc7CisKKwliZmlfaDJpX3NldCh1cGRhdGVxX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCisJdXBkYXRlcV9yZXEucmVxcV9iYSA9IGJmYV9vc19odG9ubChyZXFxX2JhKTsKKwl1cGRhdGVxX3JlcS5yc3BxX2JhID0gYmZhX29zX2h0b25sKHJzcHFfYmEpOworCXVwZGF0ZXFfcmVxLnJlcXFfc2NpID0gYmZhX29zX2h0b25sKHJlcXFfc2NpKTsKKwl1cGRhdGVxX3JlcS5yc3BxX3NwaSA9IGJmYV9vc19odG9ubChyc3BxX3NwaSk7CisKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZ1cGRhdGVxX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUyNTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jCkBAIC0wLDAgKzEsMTMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2NiX2lvaW1fbWFjcm9zLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElPSU0pOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfaW9yZXEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QJYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkCQliZmFfaW9pbV9zZ3BnX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fcGF0aHRvdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9pb2ltX3NtCisgKi8KKworLyoqCisgKiBJTyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9pb2ltX2V2ZW50IHsKKwlCRkFfSU9JTV9TTV9TVEFSVCA9IDEsCQkvKiAgaW8gc3RhcnQgcmVxdWVzdCBmcm9tIGhvc3QgKi8KKwlCRkFfSU9JTV9TTV9DT01QX0dPT0QgPSAyLAkvKiAgaW8gZ29vZCBjb21wLCByZXNvdXJjZSBmcmVlICovCisJQkZBX0lPSU1fU01fQ09NUCA9IDMsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2UgaXMgZnJlZSAqLworCUJGQV9JT0lNX1NNX0NPTVBfVVRBRyA9IDQsCS8qICBpbyBjb21wLCByZXNvdXJjZSBpcyBmcmVlICovCisJQkZBX0lPSU1fU01fRE9ORSA9IDUsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2Ugbm90IGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9GUkVFID0gNiwJCS8qICBpbyByZXNvdXJjZSBpcyBmcmVlZCAqLworCUJGQV9JT0lNX1NNX0FCT1JUID0gNywJCS8qICBhYm9ydCByZXF1ZXN0IGZyb20gc2NzaSBzdGFjayAqLworCUJGQV9JT0lNX1NNX0FCT1JUX0NPTVAgPSA4LAkvKiAgYWJvcnQgZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9BQk9SVF9ET05FID0gOSwJLyogIGFib3J0IGNvbXBsZXRpb24gZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9RUkVTVU1FID0gMTAsCS8qICBDUSBzcGFjZSBhdmFpbGFibGUgdG8gcXVldWUgSU8gKi8KKwlCRkFfSU9JTV9TTV9TR0FMTE9DRUQgPSAxMSwJLyogIFNHIHBhZ2UgYWxsb2NhdGlvbiBzdWNjZXNzZnVsICovCisJQkZBX0lPSU1fU01fU1FSRVRSWSA9IDEyLAkvKiAgc2VxdWVuY2UgcmVjb3ZlcnkgcmV0cnkgKi8KKwlCRkFfSU9JTV9TTV9IQ0IJPSAxMywJCS8qICBiZmEgY2FsbGJhY2sgY29tcGxldGUgKi8KKwlCRkFfSU9JTV9TTV9DTEVBTlVQID0gMTQsCS8qICBJTyBjbGVhbnVwIGZyb20gaXRuaW0gKi8KKwlCRkFfSU9JTV9TTV9UTVNUQVJUID0gMTUsCS8qICBJTyBjbGVhbnVwIGZyb20gdHNraW0gKi8KKwlCRkFfSU9JTV9TTV9UTURPTkUgPSAxNiwJLyogIElPIGNsZWFudXAgZnJvbSB0c2tpbSAqLworCUJGQV9JT0lNX1NNX0hXRkFJTCA9IDE3LAkvKiAgSU9DIGgvdyBmYWlsdXJlIGV2ZW50ICovCisJQkZBX0lPSU1fU01fSU9UT1YgPSAxOCwJCS8qICBJVE4gb2ZmbGluZSBUT1YgICAgICAgKi8KK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIElPIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2hjYihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAJCUlPIGlzIG5vdCBzdGFydGVkICh1bmFsbG9jYXRlZCkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fU1RBUlQ6CisJCWlmICghYmZhX2l0bmltX2lzX29ubGluZShpb2ltLT5pdG5pbSkpIHsKKwkJCWlmICghYmZhX2l0bmltX2hvbGRfaW8oaW9pbS0+aXRuaW0pKSB7CisJCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsCisJCQkJCSZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQkJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQkJfSBlbHNlIHsKKwkJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLAorCQkJCQkmaW9pbS0+aXRuaW0tPnBlbmRpbmdfcSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlpZiAoIWJmYV9pb2ltX3NnZV9zZXR1cChpb2ltKSkgeworCQkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fc2dhbGxvYyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJaWYgKCFiZmFfaW9pbV9zZW5kX2lvcmVxKGlvaW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3FmdWxsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSU9UT1Y6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCS8qKgorCQkgKiBJTyBpbiBwZW5kaW5nIHF1ZXVlIGNhbiBnZXQgYWJvcnQgcmVxdWVzdHMuIENvbXBsZXRlIGFib3J0CisJCSAqIHJlcXVlc3RzIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJmlvaW0tPml0bmltLT5wZW5kaW5nX3EsIGlvaW0pKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCQlpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIHdhaXRpbmcgZm9yIFNHIHBhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9TR0FMTE9DRUQ6CisJCWlmICghYmZhX2lvaW1fc2VuZF9pb3JlcShpb2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9xZnVsbCk7CisJCQlicmVhazsKKwkJfQorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9hY3RpdmUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkgICAgICBfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCwgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX1RSVUU7CisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OworCisJCWlmIChiZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9mYWlsZWQ7CisKKwkJaWYgKGJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXApOworCQllbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9VVEFHOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9hc3NlcnQoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPT0gQkZBX1RSVUUpOworCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKKworCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gaXMgYmVpbmcgY2xlYW5lZCB1cCAoaW1wbGljaXQgYWJvcnQpLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGZyb20KKyAqIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmVhZHkgYmVpbmcgYWJvcnRlZCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfVVRBRzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCS8qKgorCQkgKiBJTyBjYW4gYmUgaW4gY2xlYW51cCBzdGF0ZSBhbHJlYWR5IGR1ZSB0byBUTSBjb21tYW5kLiAybmQgY2xlYW51cAorCQkgKiByZXF1ZXN0IGNvbWVzIGZyb20gSVROIG9mZmxpbmUgZXZlbnQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBY3RpdmUgSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfYXNzZXJ0KGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID09IEJGQV9UUlVFKTsKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfRkFMU0U7CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFjdGl2ZSBJTyBpcyBiZWluZyBjbGVhbmVkIHVwLCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmFlZHkgYmVpbmcgY2xlYW5lZCB1cCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGJmYSBjYWxsYmFjayBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCQliZmFfaW9pbV9mcmVlKGlvaW0pOworCQliZmFfY2JfaW9pbV9yZXNmcmVlKGlvaW0tPmJmYS0+YmZhZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBiZmEgY2FsbGJhY2sgaXMgcGVuZGluZy4gSU8gcmVzb3VyY2UgY2Fubm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fSENCOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3Jlc2ZyZWUpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGlzIGNvbXBsZXRlZCwgd2FpdGluZyByZXNvdXJjZSBmcmVlIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKKwkJYmZhX2lvaW1fZnJlZShpb2ltKTsKKwkJYmZhX2NiX2lvaW1fcmVzZnJlZShpb2ltLT5iZmEtPmJmYWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9nb29kX2NvbXAoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zCSppb2ltID0gY2Jhcmc7CisJc3RydWN0IGJmaV9pb2ltX3JzcF9zICptOworCXU4CQkqc25zaW5mbyA9IE5VTEw7CisJdTggICAgICAgICBzbnNfbGVuID0gMDsKKwlzMzIgICAgICAgICByZXNpZHVlID0gMDsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopICZpb2ltLT5pb3NwLT5jb21wX3JzcG1zZzsKKwlpZiAobS0+aW9fc3RhdHVzID09IEJGSV9JT0lNX1NUU19PSykgeworCQkvKioKKwkJICogc2V0dXAgc2Vuc2UgaW5mb3JtYXRpb24sIGlmIHByZXNlbnQKKwkJICovCisJCWlmIChtLT5zY3NpX3N0YXR1cyA9PSBTQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT04KKwkJCQkJJiYgbS0+c25zX2xlbikgeworCQkJc25zX2xlbiA9IG0tPnNuc19sZW47CisJCQlzbnNpbmZvID0gaW9pbS0+aW9zcC0+c25zaW5mbzsKKwkJfQorCisJCS8qKgorCQkgKiBzZXR1cCByZXNpZHVlIHZhbHVlIGNvcnJlY3RseSBmb3Igbm9ybWFsIGNvbXBsZXRpb25zCisJCSAqLworCQlpZiAobS0+cmVzaWRfZmxhZ3MgPT0gRkNQX1JFU0lEX1VOREVSKQorCQkJcmVzaWR1ZSA9IGJmYV9vc19udG9obChtLT5yZXNpZHVlKTsKKwkJaWYgKG0tPnJlc2lkX2ZsYWdzID09IEZDUF9SRVNJRF9PVkVSKSB7CisJCQlyZXNpZHVlID0gYmZhX29zX250b2hsKG0tPnJlc2lkdWUpOworCQkJcmVzaWR1ZSA9IC1yZXNpZHVlOworCQl9CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgbS0+aW9fc3RhdHVzLAorCQkJICBtLT5zY3NpX3N0YXR1cywgc25zX2xlbiwgc25zaW5mbywgcmVzaWR1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX0FCT1JURUQsCisJCQkgIDAsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9wYXRodG92KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBCRklfSU9JTV9TVFNfUEFUSFRPViwKKwkJCSAgMCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9hYm9ydChpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zZ3BnX2FsbG9jZWQodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlvaW0tPm5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmlvaW0tPmlvc3AtPnNncGdfd3FlLnNncGdfcSwgJmlvaW0tPnNncGdfcSk7CisJYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TR0FMTE9DRUQpOworfQorCisvKioKKyAqIFNlbmQgSS9PIHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9pbV9zZW5kX2lvcmVxKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpb2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgKm07CisJc3RhdGljIHN0cnVjdCBmY3BfY21uZF9zIGNtbmRfejAgPSB7IDAgfTsKKwlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwl1MzIgICAgICAgIHBnZGxlbiA9IDA7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCW0tPmlvX3RhZyA9IGJmYV9vc19odG9ucyhpb2ltLT5pb3RhZyk7CisJbS0+cnBvcnRfaGRsID0gaW9pbS0+aXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisJbS0+aW9fdGltZW91dCA9IGJmYV9jYl9pb2ltX2dldF90aW1lb3V0KGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBidWlsZCBpbmxpbmUgSU8gU0cgZWxlbWVudCBoZXJlCisJICovCisJc2dlID0gJm0tPnNnZXNbMF07CisJaWYgKGlvaW0tPm5zZ2VzKSB7CisJCXNnZS0+c2dhID0gYmZhX2NiX2lvaW1fZ2V0X3NnYWRkcihpb2ltLT5kaW8sIDApOworCQlwZ2RsZW4gPSBiZmFfY2JfaW9pbV9nZXRfc2dsZW4oaW9pbS0+ZGlvLCAwKTsKKwkJc2dlLT5zZ19sZW4gPSBwZ2RsZW47CisJCXNnZS0+ZmxhZ3MgPSAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgPworCQkJCQlCRklfU0dFX0RBVEFfQ1BMIDogQkZJX1NHRV9EQVRBX0xBU1Q7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwkJc2dlKys7CisJfQorCisJaWYgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJc2dlLT5zZ2EgPSBpb2ltLT5zZ3BnLT5zZ3BnX3BhOworCX0gZWxzZSB7CisJCXNnZS0+c2dhLmEzMi5hZGRyX2xvID0gMDsKKwkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCX0KKwlzZ2UtPnNnX2xlbiA9IHBnZGxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJYmZhX3NnZV90b19iZShzZ2UpOworCisJLyoqCisJICogc2V0IHVwIEkvTyBjb21tYW5kIHBhcmFtZXRlcnMKKwkgKi8KKwliZmFfb3NfYXNzaWduKG0tPmNtbmQsIGNtbmRfejApOworCW0tPmNtbmQubHVuID0gYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pOworCW0tPmNtbmQuaW9kaXIgPSBiZmFfY2JfaW9pbV9nZXRfaW9kaXIoaW9pbS0+ZGlvKTsKKwliZmFfb3NfYXNzaWduKG0tPmNtbmQuY2RiLAorCQkJKihzdHJ1Y3Qgc2NzaV9jZGJfcyAqKWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKSk7CisJbS0+Y21uZC5mY3BfZGwgPSBiZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisKKwkvKioKKwkgKiBzZXQgdXAgSS9PIG1lc3NhZ2UgaGVhZGVyCisJICovCisJc3dpdGNoIChtLT5jbW5kLmlvZGlyKSB7CisJY2FzZSBGQ1BfSU9ESVJfUkVBRDoKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX1JFQUQsIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBpbnB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfV1JJVEU6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9XUklURSwgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCQliZmFfc3RhdHMoaXRuaW0sIG91dHB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfUlc6CisJCWJmYV9zdGF0cyhpdG5pbSwgaW5wdXRfcmVxcyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgb3V0cHV0X3JlcXMpOworCWRlZmF1bHQ6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCX0KKwlpZiAoaXRuaW0tPnNlcV9yZWMgfHwKKwkgICAgKGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbykgJiAoc2l6ZW9mKHUzMikgLSAxKSkpCisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCisjaWZkZWYgSU9JTV9BRFZBTkNFRAorCW0tPmNtbmQuY3JuID0gYmZhX2NiX2lvaW1fZ2V0X2Nybihpb2ltLT5kaW8pOworCW0tPmNtbmQucHJpb3JpdHkgPSBiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoaW9pbS0+ZGlvKTsKKwltLT5jbW5kLnRhc2thdHRyID0gYmZhX2NiX2lvaW1fZ2V0X3Rhc2thdHRyKGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBIYW5kbGUgbGFyZ2UgQ0RCICg+MTYgYnl0ZXMpLgorCSAqLworCW0tPmNtbmQuYWRkbF9jZGJfbGVuID0gKGJmYV9jYl9pb2ltX2dldF9jZGJsZW4oaW9pbS0+ZGlvKSAtCisJCQkJCUZDUF9DTU5EX0NEQl9MRU4pIC8gc2l6ZW9mKHUzMik7CisJaWYgKG0tPmNtbmQuYWRkbF9jZGJfbGVuKSB7CisJCWJmYV9vc19tZW1jcHkoJm0tPmNtbmQuY2RiICsgMSwgKHN0cnVjdCBzY3NpX2NkYl9zICopCisJCQkJYmZhX2NiX2lvaW1fZ2V0X2NkYihpb2ltLT5kaW8pICsgMSwKKwkJCQltLT5jbW5kLmFkZGxfY2RiX2xlbiAqIHNpemVvZih1MzIpKTsKKwkJZmNwX2NtbmRfZmNwZGwoJm0tPmNtbmQpID0KKwkJCQliZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisJfQorI2VuZGlmCisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNldHVwIGFueSBhZGRpdGlvbmFsIFNHIHBhZ2VzIG5lZWRlZC5JbmxpbmUgU0cgZWxlbWVudCBpcyBzZXR1cAorICogYXQgcXVldWluZyB0aW1lLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXUxNiAgICAgICAgbnNncGdzOworCisJYmZhX2Fzc2VydChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKTsKKworCS8qKgorCSAqIGFsbG9jYXRlIFNHIHBhZ2VzIG5lZWRlZAorCSAqLworCW5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlpZiAoIW5zZ3BncykKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJaWYgKGJmYV9zZ3BnX21hbGxvYyhpb2ltLT5iZmEsICZpb2ltLT5zZ3BnX3EsIG5zZ3BncykKKwkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfc2dwZ193YWl0KGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlLCBuc2dwZ3MpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWlvaW0tPm5zZ3BncyA9IG5zZ3BnczsKKwliZmFfaW9pbV9zZ3BnX3NldHVwKGlvaW0pOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc2dwZ19zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlpbnQgICAgICAgICAgICAgc2dlaWQsIG5zZ2VzLCBpOworCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOworCXUzMiAgICAgICAgcGdjdW1zejsKKworCXNnZWlkID0gQkZJX1NHRV9JTkxJTkU7CisJaW9pbS0+c2dwZyA9IHNncGcgPSBiZmFfcV9maXJzdCgmaW9pbS0+c2dwZ19xKTsKKworCWRvIHsKKwkJc2dlID0gc2dwZy0+c2dwZy0+c2dlczsKKwkJbnNnZXMgPSBpb2ltLT5uc2dlcyAtIHNnZWlkOworCQlpZiAobnNnZXMgPiBCRklfU0dQR19EQVRBX1NHRVMpCisJCQluc2dlcyA9IEJGSV9TR1BHX0RBVEFfU0dFUzsKKworCQlwZ2N1bXN6ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5zZ2VzOyBpKyssIHNnZSsrLCBzZ2VpZCsrKSB7CisJCQlzZ2UtPnNnYSA9IGJmYV9jYl9pb2ltX2dldF9zZ2FkZHIoaW9pbS0+ZGlvLCBzZ2VpZCk7CisJCQlzZ2UtPnNnX2xlbiA9IGJmYV9jYl9pb2ltX2dldF9zZ2xlbihpb2ltLT5kaW8sIHNnZWlkKTsKKwkJCXBnY3Vtc3ogKz0gc2dlLT5zZ19sZW47CisKKwkJCS8qKgorCQkJICogc2V0IGZsYWdzCisJCQkgKi8KKwkJCWlmIChpIDwgKG5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQTsKKwkJCWVsc2UgaWYgKHNnZWlkIDwgKGlvaW0tPm5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9DUEw7CisJCQllbHNlCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQl9CisKKwkJc2dwZyA9IChzdHJ1Y3QgYmZhX3NncGdfcyAqKSBiZmFfcV9uZXh0KHNncGcpOworCisJCS8qKgorCQkgKiBzZXQgdGhlIGxpbmsgZWxlbWVudCBvZiBlYWNoIHBhZ2UKKwkJICovCisJCWlmIChzZ2VpZCA9PSBpb2ltLT5uc2dlcykgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfbG8gPSAwOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCQl9IGVsc2UgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfTElOSzsKKwkJCXNnZS0+c2dhID0gc2dwZy0+c2dwZ19wYTsKKwkJfQorCQlzZ2UtPnNnX2xlbiA9IHBnY3Vtc3o7CisJfSB3aGlsZSAoc2dlaWQgPCBpb2ltLT5uc2dlcyk7Cit9CisKKy8qKgorICogU2VuZCBJL08gYWJvcnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICppdG5pbSA9IGlvaW0tPml0bmltOworCXN0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyAqbTsKKwllbnVtIGJmaV9pb2ltX2gyaSAgICAgICBtc2dvcDsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwlpZiAoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQpCisJCW1zZ29wID0gQkZJX0lPSU1fSDJJX0lPQUJPUlRfUkVROworCWVsc2UKKwkJbXNnb3AgPSBCRklfSU9JTV9IMklfSU9DTEVBTlVQX1JFUTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTSwgbXNnb3AsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwltLT5pb190YWcgICAgPSBiZmFfb3NfaHRvbnMoaW9pbS0+aW90YWcpOworCW0tPmFib3J0X3RhZyA9ICsraW9pbS0+YWJvcnRfdGFnOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBDYWxsIHRvIHJlc3VtZSBhbnkgSS9PIHJlcXVlc3RzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1FSRVNVTUUpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9ub3RpZnlfY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwkvKioKKwkgKiBNb3ZlIElPIGZyb20gaXRuaW0gcXVldWUgdG8gZmNwaW0gZ2xvYmFsIHF1ZXVlIHNpbmNlIGl0bmltIHdpbGwgYmUKKwkgKiBmcmVlZC4KKwkgKi8KKwlsaXN0X2RlbCgmaW9pbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKworCWlmICghaW9pbS0+aW9zcC0+dHNraW0pIHsKKwkJaWYgKGlvaW0tPmZjcGltLT5kZWxheV9jb21wICYmIGlvaW0tPml0bmltLT5pb3Rvdl9hY3RpdmUpIHsKKwkJCWJmYV9jYl9kZXF1ZXVlKCZpb2ltLT5oY2JfcWUpOworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+aXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCX0KKwkJYmZhX2l0bmltX2lvZG9uZShpb2ltLT5pdG5pbSk7CisJfSBlbHNlCisJCWJmYV90c2tpbV9pb2RvbmUoaW9pbS0+aW9zcC0+dHNraW0pOworfQorCisvKioKKyAqIAkJICBvciBhZnRlciB0aGUgbGluayBjb21lcyBiYWNrLgorICovCit2b2lkCitiZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGJmYV9ib29sZWFuX3QgaW90b3YpCit7CisJLyoqCisJICogSWYgcGF0aCB0b3YgdGltZXIgZXhwaXJlZCwgZmFpbGJhY2sgd2l0aCBQQVRIVE9WIHN0YXR1cyAtIHRoZXNlCisJICogSU8gcmVxdWVzdHMgYXJlIG5vdCBub3JtYWxseSByZXRyaWVkIGJ5IElPIHN0YWNrLgorCSAqCisJICogT3RoZXJ3aXNlIGRldmljZSBjYW1lYmFjayBvbmxpbmUgYW5kIGZhaWwgaXQgd2l0aCBub3JtYWwgZmFpbGVkCisJICogc3RhdHVzIHNvIHRoYXQgSU8gc3RhY2sgcmV0cmllcyB0aGVzZSBmYWlsZWQgSU8gcmVxdWVzdHMuCisJICovCisJaWYgKGlvdG92KQorCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9wYXRodG92OworCWVsc2UKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fZmFpbGVkOworCisJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIElPIHRvIGZjcGltIGdsb2JhbCBxdWV1ZSBzaW5jZSBpdG5pbSB3aWxsIGJlCisgICAgICogZnJlZWQuCisgICAgICovCisgICAgbGlzdF9kZWwoJmlvaW0tPnFlKTsKKyAgICBsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9mcmllbmQKKyAqLworCisvKioKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pCit7CisJc3RydWN0IGJmYV9pb2ltX3MJCSppb2ltOworCXN0cnVjdCBiZmFfaW9pbV9zcF9zCSppb3NwOworCXUxNgkJaTsKKwl1OAkJCSpzbnNpbmZvOworCXUzMgkJc25zYnVmc3o7CisKKwkvKioKKwkgKiBjbGFpbSBtZW1vcnkgZmlyc3QKKwkgKi8KKwlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPmlvaW1fYXJyID0gaW9pbTsKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIChpb2ltICsgZmNwaW0tPm51bV9pb2ltX3JlcXMpOworCisJaW9zcCA9IChzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pb2ltX3NwX2FyciA9IGlvc3A7CisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSAoaW9zcCArIGZjcGltLT5udW1faW9pbV9yZXFzKTsKKworCS8qKgorCSAqIENsYWltIERNQSBtZW1vcnkgZm9yIHBlciBJTyBzZW5zZSBkYXRhLgorCSAqLworCXNuc2J1ZnN6ID0gZmNwaW0tPm51bV9pb2ltX3JlcXMgKiBCRklfSU9JTV9TTlNMRU47CisJZmNwaW0tPnNuc2Jhc2UucGEgID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKSArPSBzbnNidWZzejsKKworCWZjcGltLT5zbnNiYXNlLmt2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKTsKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbykgKz0gc25zYnVmc3o7CisJc25zaW5mbyA9IGZjcGltLT5zbnNiYXNlLmt2YTsKKwliZmFfaW9jZmNfc2V0X3Nuc2Jhc2UoZmNwaW0tPmJmYSwgZmNwaW0tPnNuc2Jhc2UucGEpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBpb2ltIGZyZWUgcXVldWVzCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2NvbXBfcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmNwaW0tPm51bV9pb2ltX3JlcXM7CisJICAgICBpKyssIGlvaW0rKywgaW9zcCsrLCBzbnNpbmZvICs9IEJGSV9JT0lNX1NOU0xFTikgeworCQkvKgorCQkgKiBpbml0aWFsaXplIElPSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQoaW9pbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zKSk7CisJCWlvaW0tPmlvdGFnICAgPSBpOworCQlpb2ltLT5iZmEgICAgID0gZmNwaW0tPmJmYTsKKwkJaW9pbS0+ZmNwaW0gICA9IGZjcGltOworCQlpb2ltLT5pb3NwICAgID0gaW9zcDsKKwkJaW9zcC0+c25zaW5mbyA9IHNuc2luZm87CisJCUlOSVRfTElTVF9IRUFEKCZpb2ltLT5zZ3BnX3EpOworCQliZmFfcmVxcV93aW5pdCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0LAorCQkJCSAgIGJmYV9pb2ltX3FyZXN1bWUsIGlvaW0pOworCQliZmFfc2dwZ193aW5pdCgmaW9pbS0+aW9zcC0+c2dwZ193cWUsCisJCQkJICAgYmZhX2lvaW1fc2dwZ19hbGxvY2VkLCBpb2ltKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmZmNwaW0tPmlvaW1fZnJlZV9xKTsKKwl9Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIGNhbGwuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSkKK3sKK30KKwordm9pZAorYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqKSBtOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXUxNiAgICAgICAgaW90YWc7CisJZW51bSBiZmFfaW9pbV9ldmVudCBldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCByc3AtPmlvX3N0YXR1cyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+cmV1c2VfaW9fdGFnKTsKKworCWlmIChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSkpCisJCWJmYV9vc19hc3NpZ24oaW9pbS0+aW9zcC0+Y29tcF9yc3Btc2csICptKTsKKworCXN3aXRjaCAocnNwLT5pb19zdGF0dXMpIHsKKwljYXNlIEJGSV9JT0lNX1NUU19PSzoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfb2spOworCQlpZiAocnNwLT5yZXVzZV9pb190YWcgPT0gMCkKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0RPTkU7CisJCWVsc2UKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfQUJPUlRFRDoKKwkJcnNwLT5pb19zdGF0dXMgPSBCRklfSU9JTV9TVFNfQUJPUlRFRDsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfYWJvcnRlZCk7CisJCWlmIChyc3AtPnJldXNlX2lvX3RhZyA9PSAwKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fRE9ORTsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19QUk9UT19FUlI6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fcHJvdG9fZXJyKTsKKwkJYmZhX2Fzc2VydChyc3AtPnJldXNlX2lvX3RhZyk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fc3Flcl9uZWVkZWQpOworCQliZmFfYXNzZXJ0KHJzcC0+cmV1c2VfaW9fdGFnID09IDApOworCQlldnQgPSBCRkFfSU9JTV9TTV9TUVJFVFJZOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1JFU19GUkVFOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3Jlc19mcmVlKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fRlJFRTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21faG9zdGFicnRzKTsKKwkJaWYgKHJzcC0+YWJvcnRfdGFnICE9IGlvaW0tPmFib3J0X3RhZykgeworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+YWJvcnRfdGFnKTsKKwkJCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5hYm9ydF90YWcpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHJzcC0+cmV1c2VfaW9fdGFnKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfQ09NUDsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfRE9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19VVEFHOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3V0YWdzKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUF9VVEFHOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgZXZ0KTsKK30KKwordm9pZAorYmZhX2lvaW1fZ29vZF9jb21wX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKnJzcCA9IChzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwl1MTYgICAgICAgIGlvdGFnOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NPTVBfR09PRCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGl0bmltIHRvIGNsZWFuIHVwIElPIHdoaWxlIGdvaW5nIG9mZmxpbmUuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIGlvX2NsZWFudXBzKTsKKworCWlvaW0tPmlvc3AtPnRza2ltID0gTlVMTDsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKwordm9pZAorYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgaW9fdG1hYm9ydHMpOworCisJaW9pbS0+aW9zcC0+dHNraW0gPSB0c2tpbTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiBJT0MgZmFpbHVyZSBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIElPIG9mZmxpbmUgVE9WIHBvcHBlZC4gRmFpbCB0aGUgcGVuZGluZyBJTy4KKyAqLwordm9pZAorYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0lPVE9WKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2ltX2FwaQorICovCisKKy8qKgorICogQWxsb2NhdGUgSU9JTSByZXNvdXJjZSBmb3IgaW5pdGlhdG9yIG1vZGUgSS9PIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zICoKK2JmYV9pb2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgdTE2IG5zZ2VzKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCisJLyoqCisJICogYWxvY2F0ZSBJT0lNIHJlc291cmNlCisJICovCisJYmZhX3FfZGVxKCZmY3BpbS0+aW9pbV9mcmVlX3EsICZpb2ltKTsKKwlpZiAoIWlvaW0pIHsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBub19pb3RhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpb2ltLT5kaW8gPSBkaW87CisJaW9pbS0+aXRuaW0gPSBpdG5pbTsKKwlpb2ltLT5uc2dlcyA9IG5zZ2VzOworCWlvaW0tPm5zZ3BncyA9IDA7CisKKwliZmFfc3RhdHMoZmNwaW0sIHRvdGFsX2lvcyk7CisJYmZhX3N0YXRzKGl0bmltLCBpb3MpOworCWZjcGltLT5pb3NfYWN0aXZlKys7CisKKwlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJml0bmltLT5pb19xKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCisJcmV0dXJuIGlvaW07Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBpb2ltLT5mY3BpbTsKKworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2Fzc2VydF9mcChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCkpOworCisJYmZhX2Fzc2VydF9mcChsaXN0X2VtcHR5KCZpb2ltLT5zZ3BnX3EpCisJCSAgIHx8IChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSk7CisKKwlpZiAoaW9pbS0+bnNncGdzID4gMCkKKwkJYmZhX3NncGdfbWZyZWUoaW9pbS0+YmZhLCAmaW9pbS0+c2dwZ19xLCBpb2ltLT5uc2dwZ3MpOworCisJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBpb19jb21wcyk7CisJZmNwaW0tPmlvc19hY3RpdmUtLTsKKworCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZmY3BpbS0+aW9pbV9mcmVlX3EpOworfQorCit2b2lkCitiZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBEcml2ZXIgSS9PIGFib3J0IHJlcXVlc3QuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBpb19hYm9ydHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0FCT1JUKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pdG5pbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVjNjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9mY3BpbS5oPgorI2luY2x1ZGUgImJmYV9mY3BpbV9wcml2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIElUTklNKTsKKworI2RlZmluZSBCRkFfSVROSU1fRlJPTV9UQUcoX2ZjcGltLCBfdGFnKQkJCQlcCisJKChfZmNwaW0pLT5pdG5pbV9hcnIgKyAoKF90YWcpICYgKChfZmNwaW0pLT5udW1faXRuaW1zIC0gMSkpKQorCisjZGVmaW5lIGJmYV9mY3BpbV9hZGRpdG4oX19pdG5pbSkJCQkJCVwKKwlsaXN0X2FkZF90YWlsKCYoX19pdG5pbSktPnFlLCAmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSkKKyNkZWZpbmUgYmZhX2ZjcGltX2RlbGl0bihfX2l0bmltKQlkbyB7CQkJCVwKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJihfX2l0bmltKS0+ZmNwaW0tPml0bmltX3EsIF9faXRuaW0pKTsgICAgICBcCisJbGlzdF9kZWwoJihfX2l0bmltKS0+cWUpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fcSkpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fY2xlYW51cF9xKSk7ICAgICAgXAorCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmKF9faXRuaW0pLT5wZW5kaW5nX3EpKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9pdG5pbV9vbmxpbmVfY2IoX19pdG5pbSkgZG8gewkJCQlcCisJaWYgKChfX2l0bmltKS0+YmZhLT5mY3MpCQkJCQlcCisJCWJmYV9jYl9pdG5pbV9vbmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29ubGluZSwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfaXRuaW1fb2ZmbGluZV9jYihfX2l0bmltKSBkbyB7CQkJCVwKKwlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKKwkJYmZhX2NiX2l0bmltX29mZmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29mZmxpbmUsIChfX2l0bmltKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2l0bmltX3NsZXJfY2IoX19pdG5pbSkgZG8gewkJCQkJXAorCWlmICgoX19pdG5pbSktPmJmYS0+ZmNzKQkJCQkJXAorCQliZmFfY2JfaXRuaW1fc2xlcigoX19pdG5pbSktPmRpdG4pOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX2l0bmltKS0+YmZhLCAmKF9faXRuaW0pLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfaXRuaW1fc2xlciwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX2l0bmltX29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fc2xlcih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3ZfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Yodm9pZCAqaXRuaW1fYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Zfc3RhcnQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworLyoqCisgKiAgYmZhX2l0bmltX3NtIEJGQSBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworCitlbnVtIGJmYV9pdG5pbV9ldmVudCB7CisJQkZBX0lUTklNX1NNX0NSRUFURSA9IDEsCS8qICBpdG5pbSBpcyBjcmVhdGVkICovCisJQkZBX0lUTklNX1NNX09OTElORSA9IDIsCS8qICBpdG5pbSBpcyBvbmxpbmUgKi8KKwlCRkFfSVROSU1fU01fT0ZGTElORSA9IDMsCS8qICBpdG5pbSBpcyBvZmZsaW5lICovCisJQkZBX0lUTklNX1NNX0ZXUlNQID0gNCwJCS8qICBmaXJtd2FyZSByZXNwb25zZSAqLworCUJGQV9JVE5JTV9TTV9ERUxFVEUgPSA1LAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgaXRuaW0gKi8KKwlCRkFfSVROSU1fU01fQ0xFQU5VUCA9IDYsCS8qICBJTyBjbGVhbnVwIGNvbXBsZXRpb24gKi8KKwlCRkFfSVROSU1fU01fU0xFUiA9IDcsCQkvKiAgc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5ICovCisJQkZBX0lUTklNX1NNX0hXRkFJTCA9IDgsCS8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgKi8KKwlCRkFfSVROSU1fU01fUVJFU1VNRSA9IDksCS8qICBxdWV1ZSBzcGFjZSBhdmFpbGFibGUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJQmVnaW5uaW5nL3VuYWxsb2NhdGVkIHN0YXRlIC0gbm8gZXZlbnRzIGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jcmVhdGVkKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2ZjcGltX2FkZGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlCZWdpbm5pbmcgc3RhdGUsIG9ubHkgb25saW5lIGV2ZW50IGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb25saW5lKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9UUlVFOworCQliZmFfaXRuaW1faW90b3Zfb25saW5lKGl0bmltKTsKKwkJYmZhX2l0bmltX29ubGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQliZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLCBhIGRlbGV0ZSBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT25saW5lIHN0YXRlIC0gbm9ybWFsIHBhcmtpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fU0xFUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3NsZXIpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fc2xlcl9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9pb3Rvdl9zdGFydChpdG5pbSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJU2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5IG5lZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlHb2luZyBvZmZsaW5lLiBXYWl0aW5nIGZvciBhY3RpdmUgSU8gY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9TTEVSOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJRGVsZXRpbmcgaXRuaW0uIFdhaXRpbmcgZm9yIGFjdGl2ZSBJTyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IG9mZmxpbmUuIEZpbXJ3YXJlIGl0bmltIGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBmL3cgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQliZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT2ZmbGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PTkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU9DIGgvdyBmYWlsZWQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJdG5pbSBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHJpdmF0ZQorICovCisKKy8qKgorICogCQlJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3Mgb24gYW4gSU9DIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT50c2tfcSkgeworCQl0c2tpbSA9IChzdHJ1Y3QgYmZhX3Rza2ltX3MgKikgcWU7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlKHRza2ltKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorCisJLyoqCisJICogRm9yIElPIHJlcXVlc3QgaW4gcGVuZGluZyBxdWV1ZSwgd2UgcHJldGVuZCBhbiBlYXJseSB0aW1lb3V0LgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnBlbmRpbmdfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fY2xlYW51cF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorfQorCisvKioKKyAqIAkJSU8gY2xlYW51cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2NiYXJnOworCisJYmZhX3N0YXRzKGl0bmltLCBjbGVhbnVwX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0NMRUFOVVApOworfQorCisvKioKKyAqIAkJSW5pdGlhdGUgY2xlYW51cCBvZiBhbGwgSU9zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAgKmlvaW07CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJml0bmltLT53YywgYmZhX2l0bmltX2NsZWFucF9jb21wLCBpdG5pbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisKKwkJLyoqCisJCSAqIE1vdmUgSU8gdG8gYSBjbGVhbnVwIHF1ZXVlIGZyb20gYWN0aXZlIHF1ZXVlIHNvIHRoYXQgYSBsYXRlcgorCQkgKiBUTSB3aWxsIG5vdCBwaWNrdXAgdGhpcyBJTy4KKwkJICovCisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX2NsZWFudXBfcSk7CisKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfaW9pbV9jbGVhbnVwKGlvaW0pOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnRza19xKSB7CisJCXRza2ltID0gKHN0cnVjdCBiZmFfdHNraW1fcyAqKSBxZTsKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfdHNraW1fY2xlYW51cCh0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJml0bmltLT53Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb25saW5lKGl0bmltLT5kaXRuKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb2ZmbGluZShpdG5pbS0+ZGl0bik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX2l0bmltX3NsZXIoaXRuaW0tPmRpdG4pOworfQorCisvKioKKyAqIENhbGwgdG8gcmVzdW1lIGFueSBJL08gcmVxdWVzdHMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9RUkVTVU1FKTsKK30KKworCisKKworLyoqCisgKiAgYmZhX2l0bmltX3B1YmxpYworICovCisKK3ZvaWQKK2JmYV9pdG5pbV9pb2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX3Rza2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJLyoqCisJICogSVROIG1lbW9yeQorCSAqLworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fcyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKK3sKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhID0gZmNwaW0tPmJmYTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCWludCAgICAgICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pdG5pbV9xKTsKKworCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pdG5pbV9hcnIgPSBpdG5pbTsKKworCWZvciAoaSA9IDA7IGkgPCBmY3BpbS0+bnVtX2l0bmltczsgaSsrLCBpdG5pbSsrKSB7CisJCWJmYV9vc19tZW1zZXQoaXRuaW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3MpKTsKKwkJaXRuaW0tPmJmYSA9IGJmYTsKKwkJaXRuaW0tPmZjcGltID0gZmNwaW07CisJCWl0bmltLT5yZXFxID0gQkZBX1JFUVFfUU9TX0xPOworCQlpdG5pbS0+cnBvcnQgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBpKTsKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKwkJYmZhX3JlcXFfd2luaXQoJml0bmltLT5yZXFxX3dhaXQsIGJmYV9pdG5pbV9xcmVzdW1lLCBpdG5pbSk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19jbGVhbnVwX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPnBlbmRpbmdfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+dHNrX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaXRuaW07Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3N0YXRzKGl0bmltLCBpb2NfZGlzYWJsZWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fSFdGQUlMKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgKm07CisKKwlpdG5pbS0+bXNnX25vKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKwltLT5jbGFzcyA9IEZDX0NMQVNTXzM7CisJbS0+c2VxX3JlYyA9IGl0bmltLT5zZXFfcmVjOworCW0tPm1zZ19ubyA9IGl0bmltLT5tc2dfbm87CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9ERUxFVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIENsZWFudXAgYWxsIHBlbmRpbmcgZmFpbGVkIGluZmxpZ2h0IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2RlbGF5ZWRfY29tcChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IGlvdG92KQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+ZGVsYXlfY29tcF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKilxZTsKKwkJYmZhX2lvaW1fZGVsYXllZF9jb21wKGlvaW0sIGlvdG92KTsKKwl9Cit9CisKKy8qKgorICogU3RhcnQgYWxsIHBlbmRpbmcgSU8gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Zfb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisKKwliZmFfaXRuaW1faW90b3Zfc3RvcChpdG5pbSk7CisKKwkvKioKKwkgKiBBYm9ydCBhbGwgaW5mbGlnaHQgSU8gcmVxdWVzdHMgaW4gdGhlIHF1ZXVlCisJICovCisJYmZhX2l0bmltX2RlbGF5ZWRfY29tcChpdG5pbSwgQkZBX0ZBTFNFKTsKKworCS8qKgorCSAqIFN0YXJ0IGFsbCBwZW5kaW5nIElPIHJlcXVlc3RzLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmaXRuaW0tPnBlbmRpbmdfcSkpIHsKKwkJYmZhX3FfZGVxKCZpdG5pbS0+cGVuZGluZ19xLCAmaW9pbSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX3EpOworCQliZmFfaW9pbV9zdGFydChpb2ltKTsKKwl9Cit9CisKKy8qKgorICogRmFpbCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cworICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKworCS8qKgorCSAqIEZhaWwgYWxsIGluZmxpZ2h0IElPIHJlcXVlc3RzIGluIHRoZSBxdWV1ZQorCSAqLworCWJmYV9pdG5pbV9kZWxheWVkX2NvbXAoaXRuaW0sIEJGQV9UUlVFKTsKKworCS8qKgorCSAqIEZhaWwgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdG5pbS0+cGVuZGluZ19xKSkgeworCQliZmFfcV9kZXEoJml0bmltLT5wZW5kaW5nX3EsICZpb2ltKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorfQorCisvKioKKyAqIElPIFRPViB0aW1lciBjYWxsYmFjay4gRmFpbCBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdih2b2lkICppdG5pbV9hcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2FyZzsKKworCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisKKwliZmFfY2JfaXRuaW1fdG92X2JlZ2luKGl0bmltLT5kaXRuKTsKKwliZmFfaXRuaW1faW90b3ZfY2xlYW51cChpdG5pbSk7CisJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKy8qKgorICogU3RhcnQgSU8gVE9WIHRpbWVyIGZvciBmYWlsaW5nIGJhY2sgcGVuZGluZyBJTyByZXF1ZXN0cyBpbiBvZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0YXJ0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJaWYgKGl0bmltLT5mY3BpbS0+cGF0aF90b3YgPiAwKSB7CisKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCQliZmFfYXNzZXJ0KGJmYV9pdG5pbV9ob2xkX2lvKGl0bmltKSk7CisJCWJmYV90aW1lcl9zdGFydChpdG5pbS0+YmZhLCAmaXRuaW0tPnRpbWVyLAorCQkJYmZhX2l0bmltX2lvdG92LCBpdG5pbSwgaXRuaW0tPmZjcGltLT5wYXRoX3Rvdik7CisJfQorfQorCisvKioKKyAqIFN0b3AgSU8gVE9WIHRpbWVyLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlpZiAoaXRuaW0tPmlvdG92X2FjdGl2ZSkgeworCQlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCQliZmFfdGltZXJfc3RvcCgmaXRuaW0tPnRpbWVyKTsKKwl9Cit9CisKKy8qKgorICogU3RvcCBJTyBUT1YgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3ZfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisgICAgYmZhX2Jvb2xlYW5fdCBwYXRodG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKworICAgIGlmIChpdG5pbS0+aW90b3ZfYWN0aXZlKQorCQlwYXRodG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCisJYmZhX2l0bmltX2lvdG92X3N0b3AoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3Rvdl9iZWdpbihpdG5pbS0+ZGl0bik7CisJYmZhX2l0bmltX2lvdG92X2NsZWFudXAoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHVibGljCisgKi8KKworLyoqCisgKiAJCUl0bmltIGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfaXRuaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXVuaW9uIGJmaV9pdG5pbV9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfSVROSU1fSTJIX0NSRUFURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX0RFTEVURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmRlbGV0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5kZWxldGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgZGVsZXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX1NMRVJfRVZFTlQ6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLnNsZXJfZXZlbnQtPmJmYV9oYW5kbGUpOworCQliZmFfc3RhdHMoaXRuaW0sIHNsZXJfZXZlbnRzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9TTEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pdG5pbV9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdm9pZCAqZGl0bikKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCisJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sIHJwb3J0LT5ycG9ydF90YWcpOworCWJmYV9hc3NlcnQoaXRuaW0tPnJwb3J0ID09IHJwb3J0KTsKKworCWl0bmltLT5kaXRuID0gZGl0bjsKKworCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9DUkVBVEUpOworCisJcmV0dXJuIChpdG5pbSk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfc3RhdHMoaXRuaW0sIGRlbGV0ZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fREVMRVRFKTsKK30KKwordm9pZAorYmZhX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IHNlcV9yZWMpCit7CisJaXRuaW0tPnNlcV9yZWMgPSBzZXFfcmVjOworCWJmYV9zdGF0cyhpdG5pbSwgb25saW5lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9PTkxJTkUpOworfQorCit2b2lkCitiZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9zdGF0cyhpdG5pbSwgb2ZmbGluZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaXRuaW0gaXMgY29uc2lkZXJlZCBvZmZsaW5lIGZvciBob2xkaW5nIG9mZiBJTyByZXF1ZXN0LgorICogSU8gaXMgbm90IGhlbGQgaWYgaXRuaW0gaXMgYmVpbmcgZGVsZXRlZC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2l0bmltX2hvbGRfaW8oc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gKAorCQlpdG5pbS0+ZmNwaW0tPnBhdGhfdG92ICYmIGl0bmltLT5pb3Rvdl9hY3RpdmUgJiYKKwkJKGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9zbGVyKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpKQorKTsKK30KKwordm9pZAorYmZhX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IGl0bmltLT5zdGF0czsKK30KKwordm9pZAorYmZhX2l0bmltX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX29zX21lbXNldCgmaXRuaW0tPnN0YXRzLCAwLCBzaXplb2YoaXRuaW0tPnN0YXRzKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjczNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2xvZy5jIEJGQSBsb2cgbGlicmFyeQorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCisvKgorICogZ2xvYmFsIGxvZyBpbmZvIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX2xvZ19pbmZvX3MgeworCXUzMiAgICAgICAgc3RhcnRfaWR4OwkvKiAgc3RhcnQgaW5kZXggZm9yIGEgbW9kdWxlICovCisJdTMyICAgICAgICB0b3RhbF9jb3VudDsJLyogIHRvdGFsIGNvdW50IGZvciBhIG1vZHVsZSAqLworCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsZXZlbDsJLyogIGdsb2JhbCBsb2cgbGV2ZWwgKi8KKwliZmFfbG9nX2NiX3QJY2JmbjsJCS8qICBjYWxsYmFjayBmdW5jdGlvbiAqLworfTsKKworc3RhdGljIHN0cnVjdCBiZmFfbG9nX2luZm9fcyBiZmFfbG9nX2luZm9bQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMV07CitzdGF0aWMgdTMyIGJmYV9sb2dfbXNnX3RvdGFsX2NvdW50Oworc3RhdGljIGludCAgICAgIGJmYV9sb2dfaW5pdGlhbGl6ZWQ7CisKK3N0YXRpYyBjaGFyICAgICpiZmFfbG9nX3NldmVyaXR5W10gPQorCXsgIltub25lXSIsICJbY3JpdGljYWxdIiwgIltlcnJvcl0iLCAiW3dhcm5dIiwgIltpbmZvXSIsICIiIH07CisKKy8qKgorICogQkZBIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uCisgKgorICogVGhlIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcsCisgKiAgICAtIHNldCBsb2cgaW5zdGFuY2UgbmFtZSBhbmQgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgIC0gcmVhZCB0aGUgbWVzc2FnZSBhcnJheSBnZW5lcmF0ZWQgZnJvbSB4bWwgZmlsZXMKKyAqICAgIC0gY2FsY3VsYXRlIHN0YXJ0IGluZGV4IGZvciBlYWNoIG1vZHVsZQorICogICAgLSBjYWxjdWxhdGUgbWVzc2FnZSBjb3VudCBmb3IgZWFjaCBtb2R1bGUKKyAqICAgIC0gcGVyZm9ybSBlcnJvciBjaGVja2luZworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBpbnN0YW5jZV9uYW1lIC0gaW5zdGFuY2UgbmFtZQorICogQHBhcmFtW2luXSBjYmZuIC0gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBJdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlCisgKi8KK2ludAorYmZhX2xvZ19pbml0KHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBjaGFyICppbnN0YW5jZV9uYW1lLAorCQkJYmZhX2xvZ19jYl90IGNiZm4pCit7CisJc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgKm1zZzsKKwl1MzIgICAgICAgIHByZV9tb2RfaWQgPSAwOworCXUzMiAgICAgICAgY3VyX21vZF9pZCA9IDA7CisJdTMyICAgICAgICBpLCBwcmVfaWR4LCBpZHgsIG1zZ19pZDsKKworCS8qCisJICogc2V0IGluc3RhbmNlIG5hbWUKKwkgKi8KKwlpZiAobG9nX21vZCkgeworCQlzdHJuY3B5KGxvZ19tb2QtPmluc3RhbmNlX2luZm8sIGluc3RhbmNlX25hbWUsCisJCQlzaXplb2YobG9nX21vZC0+aW5zdGFuY2VfaW5mbykpOworCQlsb2dfbW9kLT5jYmZuID0gY2JmbjsKKwkJZm9yIChpID0gMDsgaSA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IGkrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFtpXSA9IEJGQV9MT0dfV0FSTklORzsKKwl9CisKKwlpZiAoYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgaSsrKSB7CisJCWJmYV9sb2dfaW5mb1tpXS5zdGFydF9pZHggPSAwOworCQliZmFfbG9nX2luZm9baV0udG90YWxfY291bnQgPSAwOworCQliZmFfbG9nX2luZm9baV0ubGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CisJCWJmYV9sb2dfaW5mb1tpXS5jYmZuID0gY2JmbjsKKwl9CisKKwlwcmVfaWR4ID0gMDsKKwlpZHggPSAwOworCW1zZyA9IGJmYV9sb2dfbXNnX2FycmF5OworCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCXByZV9tb2RfaWQgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl3aGlsZSAobXNnX2lkICE9IDApIHsKKwkJY3VyX21vZF9pZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCisJCWlmIChjdXJfbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKSB7CisJCQljYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCQkiJXMlcyBsb2c6IG1vZHVsZSBpZCAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJCWN1cl9tb2RfaWQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHByZV9tb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpIHsKKwkJCWNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJCSIlcyVzIGxvZzogbW9kdWxlIGlkICV1IG91dCBvZiByYW5nZVxuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQkJcHJlX21vZF9pZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoY3VyX21vZF9pZCAhPSBwcmVfbW9kX2lkKSB7CisJCQliZmFfbG9nX2luZm9bcHJlX21vZF9pZF0uc3RhcnRfaWR4ID0gcHJlX2lkeDsKKwkJCWJmYV9sb2dfaW5mb1twcmVfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJCQlwcmVfbW9kX2lkID0gY3VyX21vZF9pZDsKKwkJCXByZV9pZHggPSBpZHg7CisJCX0KKworCQlpZHgrKzsKKwkJbXNnKys7CisJCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCX0KKworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS5zdGFydF9pZHggPSBwcmVfaWR4OworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJYmZhX2xvZ19tc2dfdG90YWxfY291bnQgPSBpZHg7CisKKwljYmZuKGxvZ19tb2QsIG1zZ19pZCwgIiVzJXMgbG9nOiBpbml0IE9LLCBtc2cgdG90YWwgY291bnQgJXVcbiIsCisJCUJGQV9MT0dfQ0FUX05BTUUsCisJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19JTkZPXSwgYmZhX2xvZ19tc2dfdG90YWxfY291bnQpOworCisJYmZhX2xvZ19pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBCRkEgbG9nIHNldCBsb2cgbGV2ZWwgZm9yIGEgbW9kdWxlCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIG1vZF9pZCAtIG1vZHVsZSBpZAorICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkLAorCQkgIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpCit7CisJaWYgKG1vZF9pZCA8PSBCRkFfTE9HX1VOVVNFRF9JRCB8fCBtb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbGV2ZWwgPD0gQkZBX0xPR19JTlZBTElEIHx8IGxvZ19sZXZlbCA+IEJGQV9MT0dfTEVWRUxfTUFYKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJZWxzZQorCQliZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCA9IGxvZ19sZXZlbDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIG1vZHVsZXMKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbG9nX2xldmVsIC0gbG9nIHNldmVyaXR5IGxldmVsCisgKgorICogSXQgcmV0dXJuIEJGQV9TVEFUVVNfT0sgb24gc3VjY2Vzcywgb3IgPiAwIG9uIGZhaWx1cmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfbG9nX3NldF9sZXZlbF9hbGwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCSAgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCkKK3sKKwlpbnQgbW9kX2lkID0gQkZBX0xPR19VTlVTRURfSUQgKyAxOworCisJaWYgKGxvZ19sZXZlbCA8PSBCRkFfTE9HX0lOVkFMSUQgfHwgbG9nX2xldmVsID4gQkZBX0xPR19MRVZFTF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbW9kKSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdID0gbG9nX2xldmVsOworCX0gZWxzZSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsID0gbG9nX2xldmVsOworCX0KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIGFlbiBzdWItbW9kdWxlcworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsX2FlbihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJICBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKQoreworCWludCBtb2RfaWQgPSBCRkFfTE9HX0FFTl9NSU4gKyAxOworCisJaWYgKGxvZ19tb2QpIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJfSBlbHNlIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwgPSBsb2dfbGV2ZWw7CisJfQorCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQkZBIGxvZyBnZXQgbG9nIGxldmVsIGZvciBhIG1vZHVsZQorICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBtb2RfaWQgLSBtb2R1bGUgaWQKKyAqCisgKiBJdCByZXR1cm5zIGxvZyBsZXZlbCBvciAtMSBvbiBlcnJvcgorICovCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkKK2JmYV9sb2dfZ2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkKQoreworCWlmIChtb2RfaWQgPD0gQkZBX0xPR19VTlVTRURfSUQgfHwgbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGxvZ19tb2QpCisJCXJldHVybiAobG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0pOworCWVsc2UKKwkJcmV0dXJuIChiZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCk7Cit9CisKK2VudW0gYmZhX2xvZ19zZXZlcml0eQorYmZhX2xvZ19nZXRfbXNnX2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkKQoreworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJdTMyICAgICAgICBtb2QgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl1MzIgICAgICAgIGlkeCA9IEJGQV9MT0dfR0VUX01TR19JRFgobXNnX2lkKSAtIDE7CisKKwlpZiAoIWJmYV9sb2dfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisKKwlpZiAobW9kID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IGlkeCAldSB2cy4gdG90YWwgY291bnQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLCBpZHgsCisJCQliZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IG1zZyBpZCAldSBhcnJheSBtc2cgaWQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJbXNnX2lkLCBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJcmV0dXJuIEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZyk7Cit9CisKKy8qKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nCisgKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nIGZpbmRzIHRoZSBtZXNzYWdlIGJhc2VkIG9uIG1lc3NhZ2UgaWQgYW5kIHByaW50cworICogb3V0IHRoZSBtZXNzYWdlIGJhc2VkIG9uIGl0cyBmb3JtYXQgYW5kIGFyZ3VtZW50cy4gSXQgYWxzbyBkb2VzIHByZWZpeAorICogdGhlIHNldmVyaXR5IGV0Yy4KKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbXNnX2lkIC0gbWVzc2FnZSBpZAorICogQHBhcmFtW2luXSAuLi4gLSBtZXNzYWdlIGFyZ3VtZW50cworICoKKyAqIEl0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9ycworICovCitpbnQKK2JmYV9sb2coc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsIC4uLikKK3sKKwl2YV9saXN0ICAgICAgICAgYXA7CisJY2hhciAgICAgICAgICAgIGJ1ZlsyNTZdOworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJaW50ICAgICAgICAgICAgIGxvZ19sZXZlbDsKKwl1MzIgICAgICAgIG1vZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCXUzMiAgICAgICAgaWR4ID0gQkZBX0xPR19HRVRfTVNHX0lEWChtc2dfaWQpIC0gMTsKKworCWlmICghYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1vZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBpZHggJXUgdnMuIHRvdGFsIGNvdW50ICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwgaWR4LAorCQkJYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBtc2cgaWQgJXUgYXJyYXkgbXNnIGlkICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCW1zZ19pZCwgQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpOworCQlyZXR1cm4gLTE7CisJfQorCisJbG9nX2xldmVsID0gbG9nX21vZCA/IGxvZ19tb2QtPmxvZ19sZXZlbFttb2RdIDogYmZhX2xvZ19pbmZvW21vZF0ubGV2ZWw7CisJaWYgKChCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpID4gbG9nX2xldmVsKSAmJgorCQkJKG1zZy0+YXR0cmlidXRlcyAhPSBCRkFfTE9HX0FUVFJfTk9ORSkpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIG1zZ19pZCk7CisJYmZhX29zX3ZzcHJpbnRmKGJ1ZiwgQkZBX0xPR19HRVRfTVNHX0ZNVF9TVFJJTkcobXNnKSwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+Y2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlc1slc10lcyVzICVzOiAlc1xuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLCBsb2dfbW9kLT5pbnN0YW5jZV9pbmZvLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKV0sCisJCQkJKG1zZy0+YXR0cmlidXRlcyAmIEJGQV9MT0dfQVRUUl9BVURJVCkKKwkJCQk/ICIgKGF1ZGl0KSAiIDogIiIsIG1zZy0+bXNnX3ZhbHVlLCBidWYpOworCWVsc2UKKwkJYmZhX2xvZ19pbmZvW21vZF0uY2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlcyVzJXMgJXM6ICVzXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpXSwKKwkJCQkobXNnLT5hdHRyaWJ1dGVzICYgQkZBX0xPR19BVFRSX0FVRElUKSA/CisJCQkJIiAoYXVkaXQpICIgOiAiIiwgbXNnLT5tc2dfdmFsdWUsIGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9hZGFwdGVyLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fYXVkaXQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ldGhwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faXRuaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9scG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ycG9ydC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2xpbnV4Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfd2Rydi5oPgorCitzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyBiZmFfbG9nX21zZ19hcnJheVtdID0geworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfQURBUFRFUiBNb2R1bGUgKi8KK3tCRkFfQUVOX0FEQVBURVJfQURELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9BREFQVEVSX0FERCIsCisgIk5ldyBhZGFwdGVyIGZvdW5kOiBTTiA9ICVzLCBiYXNlIHBvcnQgV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9BREFQVEVSX1JFTU9WRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fQURBUFRFUl9SRU1PVkUiLAorICJBZGFwdGVyIHJlbW92ZWQ6IFNOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FVRElUIE1vZHVsZSAqLwore0JGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0FVRElUX0FVVEhfRU5BQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZW5hYmxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fQVVESVRfQVVUSF9ESVNBQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZGlzYWJsZWQgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCit7QkZBX0FFTl9FVEhQT1JUX0xJTktVUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9MSU5LVVAiLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua3VwOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04iLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua2Rvd246IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fRVRIUE9SVF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfRU5BQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBlbmFibGVkOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBkaXNhYmxlZDogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lPQyBNb2R1bGUgKi8KK3tCRkFfQUVOX0lPQ19IQkdPT0QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19IQkdPT0QiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBpcyBnb29kLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0hCRkFJTCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0NSSVRJQ0FMLAorICJCRkFfQUVOX0lPQ19IQkZBSUwiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBoYXMgZmFpbGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSU9DX0VOQUJMRSIsCisgIklPQyAlZCBpcyBlbmFibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19ESVNBQkxFIiwKKyAiSU9DICVkIGlzIGRpc2FibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0ZXTUlTTUFUQ0gsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0NSSVRJQ0FMLCAiQkZBX0FFTl9JT0NfRldNSVNNQVRDSCIsCisgIlJ1bm5pbmcgZmlybXdhcmUgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyIHZlcnNpb24uIiwKKyAoMCksIDB9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLwore0JGQV9BRU5fSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JVE5JTV9PTkxJTkUiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBpcyBvbmxpbmUgZm9yIGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSVROSU1fT0ZGTElORSIsCisgIlRhcmdldCAoV1dOID0gJXMpIG9mZmxpbmVkIGJ5IGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBjb25uZWN0aXZpdHkgbG9zdCBmb3IgaW5pdGlhdG9yIChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0xQT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fTFBPUlRfTkVXLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9ORVciLAorICJOZXcgbG9naWNhbCBwb3J0IGNyZWF0ZWQ6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ERUxFVEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX0RFTEVURSIsCisgIkxvZ2ljYWwgcG9ydCBkZWxldGVkOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9PTkxJTkUiLAorICJMb2dpY2FsIHBvcnQgb25saW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfT0ZGTElORSIsCisgIkxvZ2ljYWwgcG9ydCB0YWtlbiBvZmZsaW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QiLAorICJMb2dpY2FsIHBvcnQgbG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5OiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTkVXX1BST1AsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX05FV19QUk9QIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9QUk9QLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9MUE9SVF9ERUxFVEVfUFJPUCIsCisgIlZpcnR1YWwgcG9ydCBkZWxldGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfTkVXX1NUQU5EQVJEIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHN0YW5kYXJkIGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfREVMRVRFX1NUQU5EQVJEIiwKKyAiVmlydHVhbCBwb3J0IGRlbGV0ZWQgdXNpbmcgc3RhbmRhcmQgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04iLAorICJWaXJ0dWFsIHBvcnQgbG9naW4gZmFpbGVkLiBEdXBsaWNhdGUgV1dOID0gJXMgcmVwb3J0ZWQgYnkgZmFicmljLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgiLAorICJWaXJ0dWFsIHBvcnQgKFdXTiA9ICVzKSBsb2dpbiBmYWlsZWQuIE1heCBOUElWIHBvcnRzIGFscmVhZHkgZXhpc3QgaW4iCisgIiBmYWJyaWMvZnBvcnQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiIsCisgIlZpcnR1YWwgcG9ydCAoV1dOID0gJXMpIGxvZ2luIGZhaWxlZC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1BPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSwgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9QT1JUX09OTElORSIsCisgIkJhc2UgcG9ydCBvbmxpbmU6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX09GRkxJTkUiLAorICJCYXNlIHBvcnQgb2ZmbGluZTogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1JMSVIsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfUkxJUiIsCisgIlJMSVIgZXZlbnQgbm90IHN1cHBvcnRlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX0lOU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIiwKKyAiTmV3IFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUkVNT1ZFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUiLAorICJTRlAgcmVtb3ZlZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUE9NLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX1NGUF9QT00iLAorICJTRlAgUE9NIGxldmVsIHRvICVzOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9QT1JUX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9FTkFCTEUiLAorICJCYXNlIHBvcnQgZW5hYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfRElTQUJMRSIsCisgIkJhc2UgcG9ydCBkaXNhYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfQVVUSF9PTiIsCisgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT0ZGLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkJGQV9BRU5fUE9SVF9BVVRIX09GRiIsCisgIkF1dGhlbnRpY2F0aW9uIHVuc3VjY2Vzc2Z1bCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCIsCisgIkJhc2UgcG9ydCAoV1dOID0gJXMpIGxvc3QgZmFicmljIGNvbm5lY3Rpdml0eS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfUU9TX05FRywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX1dBUk5JTkcsCisgIkJGQV9BRU5fUE9SVF9RT1NfTkVHIiwKKyAiUU9TIG5lZ290aWF0aW9uIGZhaWxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX0ZBQlJJQ19OQU1FX0NIQU5HRSIsCisgIkJhc2UgcG9ydCBXV04gPSAlcywgRmFicmljIFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9BQ0NFU1NfRVJST1IiLAorICJTRlAgYWNjZXNzIGVycm9yOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfU0ZQX1VOU1VQUE9SVCIsCisgIlVuc3VwcG9ydGVkIFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9SUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1JQT1JUX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT05MSU5FIiwKKyAiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBvbmxpbmUgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT0ZGTElORSIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgb2ZmbGluZWQgYnkgbG9naWNhbCBwb3J0IChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9SUE9SVF9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfUU9TX1BSSU8sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX1FPU19QUklPIiwKKyAiUU9TIHByaW9yaXR5IGNoYW5nZWQgdG8gJXM6IFJQV1dOID0gJXMgYW5kIExQV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lEIiwKKyAiUU9TIGZsb3cgSUQgY2hhbmdlZCB0byAlZDogUlBXV04gPSAlcyBhbmQgTFBXV04gPSAlcy4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgRkNTIE1vZHVsZSAqLwore0JGQV9MT0dfRkNTX0ZBQlJJQ19OT1NXSVRDSCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkZDU19GQUJSSUNfTk9TV0lUQ0giLAorICJObyBzd2l0Y2hlZCBmYWJyaWMgcHJlc2VuY2UgaXMgZGV0ZWN0ZWQuIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiRkNTX0ZBQlJJQ19JU09MQVRFRCIsCisgIlBvcnQgaXMgaXNvbGF0ZWQgZHVlIHRvIFZGX0lEIG1pc21hdGNoLiBQV1dOOiAlcywgUG9ydCBWRl9JRDogJTA0eCBhbmQiCisgIiBzd2l0Y2ggcG9ydCBWRl9JRDogJTA0eC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgSEFMIE1vZHVsZSAqLwore0JGQV9MT0dfSEFMX0FTU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJIQUxfQVNTRVJUIiwKKyAiQXNzZXJ0aW9uIGZhaWx1cmU6ICVzOiVkOiAlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfSEFMX0hFQVJUQkVBVF9GQUlMVVJFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19DUklUSUNBTCwgIkhBTF9IRUFSVEJFQVRfRkFJTFVSRSIsCisgIkZpcm13YXJlIGhlYXJ0YmVhdCBmYWlsdXJlIGF0ICVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiSEFMX0ZDUElNX1BBUk1fSU5WQUxJRCIsCisgIkRyaXZlciBjb25maWd1cmF0aW9uICVzIHZhbHVlICVkIGlzIGludmFsaWQuIFZhbHVlIHNob3VsZCBiZSB3aXRoaW4iCisgIiAlZCBhbmQgJWQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19IQUxfU01fQVNTRVJULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkhBTF9TTV9BU1NFUlQiLAorICJTTSBBc3NlcnRpb24gZmFpbHVyZTogJXM6JWQ6IGV2ZW50ID0gJWQiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCit7QkZBX0xPR19MSU5VWF9ERVZJQ0VfQ0xBSU1FRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0RFVklDRV9DTEFJTUVEIiwKKyAiYmZhIGRldmljZSBhdCAlcyBjbGFpbWVkLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfSEFTSF9JTklUX0ZBSUxFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0hBU0hfSU5JVF9GQUlMRUQiLAorICJIYXNoIHRhYmxlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUgZm9yIHRoZSBwb3J0ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfU1lTRlNfRkFJTEVEIiwKKyAic3lzZnMgZmlsZSBjcmVhdGlvbiBmYWlsdXJlIGZvciB0aGUgcG9ydCAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX01FTV9BTExPQ19GQUlMRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9NRU1fQUxMT0NfRkFJTEVEIiwKKyAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkOiAlcy4gICIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfRFJJVkVSX1JFR0lTVFJBVElPTl9GQUlMRUQsCisgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkxJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIiwKKyAiJXMuICAiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0lUTklNX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9JVE5JTV9GUkVFIiwKKyAic2NzaSVkOiBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfTElOVVhfSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT05MSU5FIiwKKyAiVGFyZ2V0OiAlZDowOiVkIEZDSUQ6ICVzIFdXUE46ICVzIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT0ZGTElORSIsCisgIlRhcmdldDogJWQ6MDolZCBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkczKSB8IDApLCA0fSwKKwore0JGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9TQ1NJX0hPU1RfRlJFRSIsCisgIkZyZWUgc2NzaSVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfU0NTSV9BQk9SVCIsCisgInNjc2klZDogYWJvcnQgY21uZCAlcCwgaW90YWcgJXgiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19QIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX1NDU0lfQUJPUlRfQ09NUCIsCisgInNjc2klZDogY29tcGxldGUgYWJvcnQgMHglcCwgaW90YWcgMHgleCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1AgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBXRFJWIE1vZHVsZSAqLwore0JGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX0lOSVRfRVJST1IiLAorICJJT0MgaW5pdGlhbGl6YXRpb24gaGFzIGZhaWxlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX0lOVEVSTkFMX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfSU5URVJOQUxfRVJST1IiLAorICJJT0MgaW50ZXJuYWwgZXJyb3IuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUQVJUX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfU1RBUlRfRVJST1IiLAorICJJT0MgY291bGQgbm90IGJlIHN0YXJ0ZWQuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19TVE9QX0VSUk9SIiwKKyAiSU9DIGNvdWxkIG5vdCBiZSBzdG9wcGVkLiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMiLAorICJJbnN1ZmZpY2llbnQgbWVtb3J5LiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IiLAorICJVbmFibGUgdG8gbWFwIHRoZSBJT0Mgb250byB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UuICAiLAorICgwKSwgMH0sCisKKworezAsIDAsIDAsICIiLCAiIiwgMCwgMH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQ0YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfbHBzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIExQUyk7CitCRkFfTU9EVUxFKGxwcyk7CisKKyNkZWZpbmUgQkZBX0xQU19NSU5fTFBPUlRTCSgxKQorI2RlZmluZSBCRkFfTFBTX01BWF9MUE9SVFMJKDI1NikKKworLyoqCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfbHBzX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCQkgICAgdTMyICpkbV9sZW4pOworc3RhdGljIHZvaWQgYmZhX2xwc19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQkgICBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCSAgIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ2luX3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dvdXRfcnNwKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJICAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2ZyZWUoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ291dF9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CisKKworLyoqCisgKiAgbHBzX3B2dCBCRkEgTFBTIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworZW51bSBiZmFfbHBzX2V2ZW50IHsKKwlCRkFfTFBTX1NNX0xPR0lOCT0gMSwJLyogbG9naW4gcmVxdWVzdCBmcm9tIHVzZXIJKi8KKwlCRkFfTFBTX1NNX0xPR09VVAk9IDIsCS8qIGxvZ291dCByZXF1ZXN0IGZyb20gdXNlcgkqLworCUJGQV9MUFNfU01fRldSU1AJPSAzLAkvKiBmL3cgcmVzcG9uc2UgdG8gbG9naW4vbG9nb3V0CSovCisJQkZBX0xQU19TTV9SRVNVTUUJPSA0LAkvKiBzcGFjZSBwcmVzZW50IGluIHJlcXEgcXVldWUJKi8KKwlCRkFfTFBTX1NNX0RFTEVURQk9IDUsCS8qIGxwcyBkZWxldGUgZnJvbSB1c2VyCQkqLworCUJGQV9MUFNfU01fT0ZGTElORQk9IDYsCS8qIExpbmsgaXMgb2ZmbGluZQkJKi8KK307CisKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21faW5pdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9naW53YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX29ubGluZShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ293YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CisKKy8qKgorICogSW5pdCBzdGF0ZSAtLSBubyBsb2dpbgorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9pbml0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR0lOOgorCQlpZiAoYmZhX3JlcXFfZnVsbChscHMtPmJmYSwgbHBzLT5yZXFxKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9naW53YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ2luKTsKKwkJCWJmYV9scHNfc2VuZF9sb2dpbihscHMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJYmZhX2xwc19sb2dvdXRfY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9ERUxFVEU6CisJCWJmYV9scHNfZnJlZShscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9GV1JTUDoKKwkJLyogQ291bGQgaGFwcGVuIHdoZW4gZmFicmljIGRldGVjdHMgbG9vcGJhY2sgYW5kIGRpc2NhcmRzCisJCSAqIHRoZSBscHMgcmVxdWVzdC4gRncgd2lsbCBldmVudHVhbGx5IHNlbnQgb3V0IHRoZSB0aW1lb3V0CisJCSAqIEp1c3QgaWdub3JlCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ2luIGlzIGluIHByb2dyZXNzIC0tIGF3YWl0aW5nIHJlc3BvbnNlIGZyb20gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWlmIChscHMtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fb25saW5lKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9scHNfbG9naW5fY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dpbiBwZW5kaW5nIC0gYXdhaXRpbmcgc3BhY2UgaW4gcmVxdWVzdCBxdWV1ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dpbndhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dpbik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9naW4gY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fb25saW5lKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJaWYgKGJmYV9yZXFxX2Z1bGwobHBzLT5iZmEsIGxwcy0+cmVxcSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ293YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ291dCk7CisJCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwljYXNlIEJGQV9MUFNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dvdXQgaW4gcHJvZ3Jlc3MgLSBhd2FpdGluZyBmaXJtd2FyZSByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfbHBzX2xvZ291dF9jb21wKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ291dCBwZW5kaW5nIC0tIGF3YWl0aW5nIHNwYWNlIGluIHJlcXVlc3QgcXVldWUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9nb3dhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dvdXQpOworCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBscHNfcHZ0IEJGQSBMUFMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIHJldHVybiBtZW1vcnkgcmVxdWlyZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwgdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUlOX0xQT1JUUzsKKwllbHNlCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUFYX0xQT1JUUzsKK30KKworLyoqCisgKiBiZmEgbW9kdWxlIGF0dGFjaCBhdCBpbml0aWFsaXphdGlvbiB0aW1lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwlpbnQJCQlpOworCisJYmZhX29zX21lbXNldChtb2QsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2xwc19tb2RfcykpOworCW1vZC0+bnVtX2xwcyA9IEJGQV9MUFNfTUFYX0xQT1JUUzsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NSU5fTFBPUlRTOworCWVsc2UKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NQVhfTFBPUlRTOworCW1vZC0+bHBzX2FyciA9IGxwcyA9IChzdHJ1Y3QgYmZhX2xwc19zICopIGJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKTsKKworCWJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSArPSBtb2QtPm51bV9scHMgKiBzaXplb2Yoc3RydWN0IGJmYV9scHNfcyk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfYWN0aXZlX3EpOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX2xwczsgaSsrLCBscHMrKykgeworCQlscHMtPmJmYQk9IGJmYTsKKwkJbHBzLT5scF90YWcJPSAodTgpIGk7CisJCWxwcy0+cmVxcQk9IEJGQV9SRVFRX0xQUzsKKwkJYmZhX3JlcXFfd2luaXQoJmxwcy0+d3FlLCBiZmFfbHBzX3JlcXFfcmVzdW1lLCBscHMpOworCQlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIElPQyBpbiBkaXNhYmxlZCBzdGF0ZSAtLSBjb25zaWRlciBhbGwgbHBzIG9mZmxpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisJc3RydWN0IGxpc3RfaGVhZAkJKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZtb2QtPmxwc19hY3RpdmVfcSkgeworCQlscHMgPSAoc3RydWN0IGJmYV9scHNfcyAqKSBxZTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOworCX0KK30KKworLyoqCisgKiBGaXJtd2FyZSBsb2dpbiByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCisJYmZhX2Fzc2VydChyc3AtPmxwX3RhZyA8IG1vZC0+bnVtX2xwcyk7CisJbHBzID0gQkZBX0xQU19GUk9NX1RBRyhtb2QsIHJzcC0+bHBfdGFnKTsKKworCWxwcy0+c3RhdHVzID0gcnNwLT5zdGF0dXM7CisJc3dpdGNoIChyc3AtPnN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJbHBzLT5mcG9ydAk9IHJzcC0+Zl9wb3J0OworCQlscHMtPm5waXZfZW4JPSByc3AtPm5waXZfZW47CisJCWxwcy0+bHBfcGlkCT0gcnNwLT5scF9waWQ7CisJCWxwcy0+cHJfYmJjcmVkCT0gYmZhX29zX250b2hzKHJzcC0+YmJfY3JlZGl0KTsKKwkJbHBzLT5wcl9wd3duCT0gcnNwLT5wb3J0X25hbWU7CisJCWxwcy0+cHJfbnd3bgk9IHJzcC0+bm9kZV9uYW1lOworCQlscHMtPmF1dGhfcmVxCT0gcnNwLT5hdXRoX3JlcTsKKwkJbHBzLT5scF9tYWMJPSByc3AtPmxwX21hYzsKKwkJbHBzLT5icmNkX3N3aXRjaCA9IHJzcC0+YnJjZF9zd2l0Y2g7CisJCWxwcy0+ZmNmX21hYwk9IHJzcC0+ZmNmX21hYzsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlscHMtPmxzcmp0X3JzbiA9IHJzcC0+bHNyanRfcnNuOworCQlscHMtPmxzcmp0X2V4cGwgPSByc3AtPmxzcmp0X2V4cGw7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlscHMtPmV4dF9zdGF0dXMgPSByc3AtPmV4dF9zdGF0dXM7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOb3RoaW5nIHRvIGRvIHdpdGggb3RoZXIgc3RhdHVzICovCisJCWJyZWFrOworCX0KKworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9GV1JTUCk7Cit9CisKKy8qKgorICogRmlybXdhcmUgbG9nb3V0IHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ291dF9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKworCWJmYV9hc3NlcnQocnNwLT5scF90YWcgPCBtb2QtPm51bV9scHMpOworCWxwcyA9IEJGQV9MUFNfRlJPTV9UQUcobW9kLCByc3AtPmxwX3RhZyk7CisKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fRldSU1ApOworfQorCisvKioKKyAqIFNwYWNlIGlzIGF2YWlsYWJsZSBpbiByZXF1ZXN0IHF1ZXVlLCByZXN1bWUgcXVldWVpbmcgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHMgPSBscHNfYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX1JFU1VNRSk7Cit9CisKKy8qKgorICogbHBzIGlzIGZyZWVkIC0tIHRyaWdnZXJlZCBieSB2cG9ydCBkZWxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfZnJlZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGxwcy0+YmZhKTsKKworCWxpc3RfZGVsKCZscHMtPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKK30KKworLyoqCisgKiBzZW5kIGxvZ2luIHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKm07CisKKwltID0gYmZhX3JlcXFfbmV4dChscHMtPmJmYSwgbHBzLT5yZXFxKTsKKwliZmFfYXNzZXJ0KG0pOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19MUFMsIEJGSV9MUFNfSDJJX0xPR0lOX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnCT0gbHBzLT5scF90YWc7CisJbS0+YWxwYQkJPSBscHMtPmFscGE7CisJbS0+cGR1X3NpemUJPSBiZmFfb3NfaHRvbnMobHBzLT5wZHVzeik7CisJbS0+cHd3bgkJPSBscHMtPnB3d247CisJbS0+bnd3bgkJPSBscHMtPm53d247CisJbS0+ZmRpc2MJPSBscHMtPmZkaXNjOworCW0tPmF1dGhfZW4JPSBscHMtPmF1dGhfZW47CisKKwliZmFfcmVxcV9wcm9kdWNlKGxwcy0+YmZhLCBscHMtPnJlcXEpOworfQorCisvKioKKyAqIHNlbmQgbG9nb3V0IHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcyAqbTsKKworCW0gPSBiZmFfcmVxcV9uZXh0KGxwcy0+YmZhLCBscHMtPnJlcXEpOworCWJmYV9hc3NlcnQobSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTE9HT1VUX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnICAgID0gbHBzLT5scF90YWc7CisJbS0+cG9ydF9uYW1lID0gbHBzLT5wd3duOworCWJmYV9yZXFxX3Byb2R1Y2UobHBzLT5iZmEsIGxwcy0+cmVxcSk7Cit9CisKKy8qKgorICogSW5kaXJlY3QgbG9naW4gY29tcGxldGlvbiBoYW5kbGVyIGZvciBub24tZmNzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ2luX2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9naV9jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKK30KKworLyoqCisgKiBMb2dpbiBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlpZiAoIWxwcy0+YmZhLT5mY3MpIHsKKwkJYmZhX2NiX3F1ZXVlKGxwcy0+YmZhLCAmbHBzLT5oY2JfcWUsCisJCQkJYmZhX2xwc19sb2dpbl9jb21wX2NiLCBscHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2NfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dpX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworfQorCisvKioKKyAqIEluZGlyZWN0IGxvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIG5vbi1mY3MKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9nb3V0X2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworfQorCisvKioKKyAqIExvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dvdXRfY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJaWYgKCFscHMtPmJmYS0+ZmNzKSB7CisJCWJmYV9jYl9xdWV1ZShscHMtPmJmYSwgJmxwcy0+aGNiX3FlLAorCQkJCWJmYV9scHNfbG9nb3V0X2NvbXBfY2IsIGxwcyk7CisJCXJldHVybjsKKwl9CisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7Cit9CisKKworCisvKioKKyAqICBscHNfcHVibGljIEJGQSBMUFMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogQWxsb2NhdGUgYSBscG9ydCBzcnZpY2UgdGFnLgorICovCitzdHJ1Y3QgYmZhX2xwc19zICAqCitiZmFfbHBzX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwcyA9IE5VTEw7CisKKwliZmFfcV9kZXEoJm1vZC0+bHBzX2ZyZWVfcSwgJmxwcyk7CisKKwlpZiAobHBzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9hZGRfdGFpbCgmbHBzLT5xZSwgJm1vZC0+bHBzX2FjdGl2ZV9xKTsKKworCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCXJldHVybiBscHM7Cit9CisKKy8qKgorICogRnJlZSBscG9ydCBzZXJ2aWNlIHRhZy4gVGhpcyBjYW4gYmUgY2FsbGVkIGFueXRpbWUgYWZ0ZXIgYW4gYWxsb2MuCisgKiBObyBuZWVkIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nIGxvZ2luL2xvZ291dCBjb21wbGV0aW9ucy4KKyAqLwordm9pZAorYmZhX2xwc19kZWxldGUoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9ERUxFVEUpOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmxvZ2koc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1OCBhbHBhLCB1MTYgcGR1c3osCisJd3duX3QgcHd3biwgd3duX3Qgbnd3biwgYmZhX2Jvb2xlYW5fdCBhdXRoX2VuKQoreworCWxwcy0+dWFyZwk9IHVhcmc7CisJbHBzLT5hbHBhCT0gYWxwYTsKKwlscHMtPnBkdXN6CT0gcGR1c3o7CisJbHBzLT5wd3duCT0gcHd3bjsKKwlscHMtPm53d24JPSBud3duOworCWxwcy0+ZmRpc2MJPSBCRkFfRkFMU0U7CisJbHBzLT5hdXRoX2VuCT0gYXV0aF9lbjsKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HSU4pOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgZmRpc2MgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Moc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1MTYgcGR1c3osIHd3bl90IHB3d24sCisJd3duX3Qgbnd3bikKK3sKKwlscHMtPnVhcmcJPSB1YXJnOworCWxwcy0+YWxwYQk9IDA7CisJbHBzLT5wZHVzegk9IHBkdXN6OworCWxwcy0+cHd3bgk9IHB3d247CisJbHBzLT5ud3duCT0gbnd3bjsKKwlscHMtPmZkaXNjCT0gQkZBX1RSVUU7CisJbHBzLT5hdXRoX2VuCT0gQkZBX0ZBTFNFOworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dJTik7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBsb2dvdXQgKGZsb2dpKS4KKyAqLwordm9pZAorYmZhX2xwc19mbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR09VVCk7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBGRFNJQyBsb2dvdXQuCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Nsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HT1VUKTsKK30KKworLyoqCisgKiBEaXNjYXJkIGEgcGVuZGluZyBsb2dpbiByZXF1ZXN0IC0tIHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3IKKyAqIGxpbmsgZG93biBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2xwc19kaXNjYXJkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZworICovCit1OAorYmZhX2xwc19nZXRfdGFnKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5scF90YWc7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZyBnaXZlbiB0aGUgcGlkCisgKi8KK3U4CitiZmFfbHBzX2dldF90YWdfZnJvbV9waWQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBwaWQpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwLCBscHMgPSBtb2QtPmxwc19hcnI7IGkgPCBtb2QtPm51bV9scHM7IGkrKywgbHBzKyspIHsKKwkJaWYgKGxwcy0+bHBfcGlkID09IHBpZCkKKwkJCXJldHVybiBscHMtPmxwX3RhZzsKKwl9CisKKwkvKiBSZXR1cm4gYmFzZSBwb3J0IHRhZyBhbnl3YXkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByZXR1cm4gaWYgZmFicmljIGxvZ2luIGluZGljYXRlcyBzdXBwb3J0IGZvciBOUElWCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfbnBpdl9lbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bnBpdl9lbjsKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBhdHRhY2hlZCB0byBGLVBvcnQsIGVsc2UgcmV0dXJuIEZBTFNFCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfZnBvcnQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmZwb3J0OworfQorCisvKioKKyAqIFJldHVybiBUUlVFIGlmIGF0dGFjaGVkIHRvIGEgQnJvY2FkZSBGYWJyaWMKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19icmNkX2ZhYnJpYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YnJjZF9zd2l0Y2g7Cit9CisvKioKKyAqIHJldHVybiBUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfYXV0aHJlcShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YXV0aF9yZXE7Cit9CisKK2JmYV9lcHJvdG9fc3RhdHVzX3QKK2JmYV9scHNfZ2V0X2V4dHN0YXR1cyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+ZXh0X3N0YXR1czsKK30KKworLyoqCisgKiByZXR1cm4gcG9ydCBpZCBhc3NpZ25lZCB0byB0aGUgbHBvcnQKKyAqLwordTMyCitiZmFfbHBzX2dldF9waWQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxwX3BpZDsKK30KKworLyoqCisgKiBSZXR1cm4gYmJfY3JlZGl0IGFzc2lnbmVkIGluIEZMT0dJIHJlc3BvbnNlCisgKi8KK3UxNgorYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+cHJfYmJjcmVkOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIHBvcnQgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9wd3duOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIG5vZGUgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9ud3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9ud3duOworfQorCisvKioKKyAqIHJldHVybiByZWFzb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9yc24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxzcmp0X3JzbjsKK30KKworLyoqCisgKiByZXR1cm4gZXhwbGFuYXRpb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9leHBsKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5sc3JqdF9leHBsOworfQorCisKKy8qKgorICogTFBTIGZpcm13YXJlIG1lc3NhZ2UgY2xhc3MgaGFuZGxlci4KKyAqLwordm9pZAorYmZhX2xwc19pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2xwc19pMmhfbXNnX3UJbXNnOworCisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwltc2cubXNnID0gbTsKKworCXN3aXRjaCAobS0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9MUFNfSDJJX0xPR0lOX1JTUDoKKwkJYmZhX2xwc19sb2dpbl9yc3AoYmZhLCBtc2cubG9naW5fcnNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9MUFNfSDJJX0xPR09VVF9SU1A6CisJCWJmYV9scHNfbG9nb3V0X3JzcChiZmEsIG1zZy5sb2dvdXRfcnNwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHNfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZjNmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfTFBTX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0xQU19QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCitzdHJ1Y3QgYmZhX2xwc19tb2RfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJbHBzX2ZyZWVfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlscHNfYWN0aXZlX3E7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzX2FycjsKKwlpbnQJCQludW1fbHBzOworfTsKKworI2RlZmluZSBCRkFfTFBTX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5scHNfbW9kKQorI2RlZmluZSBCRkFfTFBTX0ZST01fVEFHKF9fbW9kLCBfX3RhZykJKCYoX19tb2QpLT5scHNfYXJyW19fdGFnXSkKKworLyoKKyAqIGV4dGVybmFsIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9scHNfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworCisjZW5kaWYgLyogX19CRkFfTFBTX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfaW9jZmMuaD4KKworLyoqCisgKiBCRkEgbW9kdWxlIGxpc3QgdGVybWluYXRlZCBieSBOVUxMCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW10gPSB7CisJJmhhbF9tb2Rfc2dwZywKKwkmaGFsX21vZF9wcG9ydCwKKwkmaGFsX21vZF9mY3hwLAorCSZoYWxfbW9kX2xwcywKKwkmaGFsX21vZF91ZiwKKwkmaGFsX21vZF9ycG9ydCwKKwkmaGFsX21vZF9mY3BpbSwKKyNpZmRlZiBCRkFfQ0ZHX1BCSU5ECisJJmhhbF9tb2RfcGJpbmQsCisjZW5kaWYKKwlOVUxMCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIHZhcmlvdXMgbW9kdWxlcy4KKyAqLworYmZhX2lzcl9mdW5jX3QgIGJmYV9pc3JzW0JGSV9NQ19NQVhdID0geworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBOT05FICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0MgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0RJQUcgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0ZMQVNIICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19DRUUgKi8KKwliZmFfcHBvcnRfaXNyLAkJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPQ0ZDICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19MTCAqLworCWJmYV91Zl9pc3IsCQkvKiBCRklfTUNfVUYgKi8KKwliZmFfZmN4cF9pc3IsCQkvKiBCRklfTUNfRkNYUCAqLworCWJmYV9scHNfaXNyLAkJLyogQkZJX01DX0xQUyAqLworCWJmYV9ycG9ydF9pc3IsCQkvKiBCRklfTUNfUlBPUlQgKi8KKwliZmFfaXRuaW1faXNyLAkJLyogQkZJX01DX0lUTklNICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1JFQUQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fV1JJVEUgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fSU8gKi8KKwliZmFfaW9pbV9pc3IsCQkvKiBCRklfTUNfSU9JTSAqLworCWJmYV9pb2ltX2dvb2RfY29tcF9pc3IsCS8qIEJGSV9NQ19JT0lNX0lPQ09NICovCisJYmZhX3Rza2ltX2lzciwJCS8qIEJGSV9NQ19UU0tJTSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfU0JPT1QgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lQRkMgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIG1haWxib3ggY29tbWFuZCBjbGFzc2VzCisgKi8KK2JmYV9pb2NfbWJveF9tY2Z1bmNfdCAgYmZhX21ib3hfaXNyc1tCRklfTUNfTUFYXSA9IHsKKwlOVUxMLAorCU5VTEwsCQkJLyogQkZJX01DX0lPQwkqLworCU5VTEwsCQkJLyogQkZJX01DX0RJQUcJKi8KKwlOVUxMLAkJLyogQkZJX01DX0ZMQVNIICovCisJTlVMTCwJCQkvKiBCRklfTUNfQ0VFCSovCisJTlVMTCwJCQkvKiBCRklfTUNfUE9SVAkqLworCWJmYV9pb2NmY19pc3IsCQkvKiBCRklfTUNfSU9DRkMgKi8KKwlOVUxMLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY3MDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX01PRFVMRVNfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfTU9EVUxFU19QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX3VmX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfcG9ydF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX3Jwb3J0X3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZmN4cF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX2xwc19wcml2LmgiCisjaW5jbHVkZSAiYmZhX2ZjcGltX3ByaXYuaCIKKyNpbmNsdWRlIDxjZWUvYmZhX2NlZS5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKworCitzdHJ1Y3QgYmZhX21vZHVsZXNfcyB7CisJc3RydWN0IGJmYV9wcG9ydF9zCXBwb3J0OwkvKiAgcGh5c2ljYWwgcG9ydCBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgZmN4cF9tb2Q7IC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcyBscHNfbW9kOyAgIC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX3VmX21vZF9zIHVmX21vZDsJLyogIHVuc29saWNpdGVkIGZyYW1lIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgcnBvcnRfbW9kOyAvKiAgcmVtb3RlIHBvcnQgbW9kdWxlCSovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyBmY3BpbV9tb2Q7IC8qICBGQ1AgaW5pdGlhdG9yIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyBzZ3BnX21vZDsgLyogIFNHIHBhZ2UgbW9kdWxlCQkqLworCXN0cnVjdCBiZmFfY2VlX3MgY2VlOyAgIAkvKiAgQ0VFIE1vZHVsZSAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfcyBwb3J0OwkJLyogIFBoeXNpY2FsIHBvcnQgbW9kdWxlCSovCit9OworCisjZW5kaWYgLyogX19CRkFfTU9EVUxFU19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE4OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBDb250YWlucyBkZWNsYXJhdGlvbnMgYWxsIE9TIFNwZWNpZmljIGZpbGVzIG5lZWRlZCBmb3IgQkZBIGxheWVyCisgKi8KKworI2lmbmRlZiBfX0JGQV9PU19JTkNfSF9fCisjZGVmaW5lIF9fQkZBX09TX0lOQ19IX18KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2RlZmluZSBTRVRfTU9EVUxFX1ZFUlNJT04oVkVSKQorCisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorCisjZGVmaW5lIEJGQV9FUlIJCQlLRVJOX0VSUgorI2RlZmluZSBCRkFfV0FSTklORwkJS0VSTl9XQVJOSU5HCisjZGVmaW5lIEJGQV9OT1RJQ0UJCUtFUk5fTk9USUNFCisjZGVmaW5lIEJGQV9JTkZPCQlLRVJOX0lORk8KKyNkZWZpbmUgQkZBX0RFQlVHCQlLRVJOX0RFQlVHCisKKyNkZWZpbmUgTE9HX0JGQURfSU5JVAkJMHgwMDAwMDAwMQorI2RlZmluZSBMT0dfRkNQX0lPCQkweDAwMDAwMDAyCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBCRkFfTE9HX1RSQUNFKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsIGFyZy4uLikJCQlcCisJCUJGQV9MT0coYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgIyMgYXJnKQorI2RlZmluZSBCRkFfREVWX1RSQUNFKGJmYWQsIGxldmVsLCBmbXQsIGFyZy4uLikJCQkJXAorCQlCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCAjIyBhcmcpCisjZGVmaW5lIEJGQV9UUkFDRShsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCisJCUJGQV9QUklOVEYobGV2ZWwsIGZtdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgQkZBX0xPR19UUkFDRShiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCisjZGVmaW5lIEJGQV9ERVZfVFJBQ0UoYmZhZCwgbGV2ZWwsIGZtdCwgYXJnLi4uKQorI2RlZmluZSBCRkFfVFJBQ0UobGV2ZWwsIGZtdCwgYXJnLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgQkZBX0FTU0VSVChwKSBkbyB7CQkJCQkJXAorCWlmICghKHApKSB7ICAgICAgXAorCQlwcmludGsoS0VSTl9FUlIgImFzc2VydCglcykgZmFpbGVkIGF0ICVzOiVkXG4iLAkJXAorCQkjcCwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICBcCisJCUJVRygpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgQkZBX0xPRyhiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCQkJCVwKK2RvIHsgCQkJCQkJCQkJXAorCWlmICgoKG1hc2spICYgKCgoc3RydWN0IGJmYWRfcyAqKShiZmFkKSktPgkJCVwKKwkJY2ZnX2RhdGFbY2ZnX2xvZ19tYXNrXSkpIHx8IChsZXZlbFsxXSA8PSAnMycpKQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBCRkFfREVWX1BSSU5URgorI2RlZmluZSBCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7CisjZW5kaWYKKworI2RlZmluZSBCRkFfUFJJTlRGKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJcHJpbnRrKGxldmVsIGZtdCwgIyNhcmcpOworCitpbnQgYmZhX29zX01XQih2b2lkICopOworCisjZGVmaW5lIGJmYV9vc19tbWlvd2IoKQkJbW1pb3diKCkKKworI2RlZmluZSBiZmFfc3dhcF8zYihfeCkJCQkJXAorCSgoKChfeCkgJiAweGZmKSA8PCAxNikgfAkJXAorCSgoX3gpICYgMHgwMGZmMDApIHwJCQlcCisJKCgoX3gpICYgMHhmZjAwMDApID4+IDE2KSkKKworI2RlZmluZSBiZmFfc3dhcF84YihfeCkgCQkJCVwKKyAgICAgKCgoKF94KSAmIDB4ZmYwMDAwMDAwMDAwMDAwMHVsbCkgPj4gNTYpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDBmZjAwMDAwMDAwMDAwMHVsbCkgPj4gNDApCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMGZmMDAwMDAwMDAwMHVsbCkgPj4gMjQpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwZmYwMDAwMDAwMHVsbCkgPj4gOCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMGZmMDAwMDAwdWxsKSA8PCA4KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDBmZjAwMDB1bGwpIDw8IDI0KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMGZmMDB1bGwpIDw8IDQwKQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMDAwZmZ1bGwpIDw8IDU2KSkKKworI2RlZmluZSBiZmFfb3Nfc3dhcDMyKF94KSAJCQlcCisJKCgoKF94KSAmIDB4ZmYpIDw8IDI0KSAJCXwJXAorCSgoKF94KSAmIDB4MDAwMGZmMDApIDw8IDgpCXwJXAorCSgoKF94KSAmIDB4MDBmZjAwMDApID4+IDgpCXwJXAorCSgoKF94KSAmIDB4ZmYwMDAwMDApID4+IDI0KSkKKworCisjaWZuZGVmIF9fQklHRU5ESUFOCisjZGVmaW5lIGJmYV9vc19odG9ucyhfeCkgKCh1MTYpKCgoKF94KSAmIDB4ZmYwMCkgPj4gOCkgfCBcCisJCQkJICgoKF94KSAmIDB4MDBmZikgPDwgOCkpKQorCisjZGVmaW5lIGJmYV9vc19odG9ubChfeCkJYmZhX29zX3N3YXAzMihfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkJYmZhX3N3YXBfOGIoX3gpCisjZGVmaW5lIGJmYV9vc19odG9uM2IoX3gpCWJmYV9zd2FwXzNiKF94KQorCisjZGVmaW5lIGJmYV9vc193dG9sZShfeCkgICAoX3gpCisKKyNlbHNlCisKKyNkZWZpbmUgYmZhX29zX2h0b25zKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b24zYihfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX3d0b2xlKF94KSAgIGJmYV9vc19zd2FwMzIoX3gpCisKKyNlbmRpZgorCisjZGVmaW5lIGJmYV9vc19udG9ocyhfeCkgICBiZmFfb3NfaHRvbnMoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obChfeCkgICBiZmFfb3NfaHRvbmwoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obGwoX3gpICBiZmFfb3NfaHRvbmxsKF94KQorI2RlZmluZSBiZmFfb3NfbnRvaDNiKF94KSAgYmZhX29zX2h0b24zYihfeCkKKworI2RlZmluZSBiZmFfb3NfdTMyKF9fcGE2NCkgKChfX3BhNjQpID4+IDMyKQorCisjZGVmaW5lIGJmYV9vc19tZW1zZXQJbWVtc2V0CisjZGVmaW5lIGJmYV9vc19tZW1jcHkJbWVtY3B5CisjZGVmaW5lIGJmYV9vc191ZGVsYXkJdWRlbGF5CisjZGVmaW5lIGJmYV9vc192c3ByaW50ZiB2c3ByaW50ZgorCisjZGVmaW5lIGJmYV9vc19hc3NpZ24oX190LCBfX3MpIF9fdCA9IF9fcworCisjZGVmaW5lIGJmYV9vc19hZGRyX3QgY2hhciBfX2lvbWVtICoKKyNkZWZpbmUgYmZhX29zX3BhbmljKCkKKworI2RlZmluZSBiZmFfb3NfcmVnX3JlYWQoX3JhZGRyKSBiZmFfb3Nfd3RvbGUocmVhZGwoX3JhZGRyKSkKKyNkZWZpbmUgYmZhX29zX3JlZ193cml0ZShfcmFkZHIsIF92YWwpIHdyaXRlbChiZmFfb3Nfd3RvbGUoKF92YWwpKSwgKF9yYWRkcikpCisjZGVmaW5lIGJmYV9vc19tZW1fcmVhZChfcmFkZHIsIF9vZmYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYmZhX29zX250b2hsKHJlYWRsKCgoX3JhZGRyKSArIChfb2ZmKSkpKQorI2RlZmluZSBiZmFfb3NfbWVtX3dyaXRlKF9yYWRkciwgX29mZiwgX3ZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbChiZmFfb3NfaHRvbmwoKF92YWwpKSwgKChfcmFkZHIpICsgKF9vZmYpKSkKKworI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKQkJCQkJCVwKKwkJCSh7CQkJCQkJXAorCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwkJCVwKKwkJCQkJCQkJCVwKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsgICAgICBcCisJCQkJKHR2LnR2X3NlYyoxMDAwMDAwK3R2LnR2X3VzZWMpOyAgICAgIFwKKwkJCSB9KQorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKK3ZvaWQgYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNlbmRpZgorCisjZGVmaW5lIGJvb2xlYW5fdCBpbnQKKworLyoqCisgKiBGb3IgY3VycmVudCB0aW1lIHN0YW1wLCBPUyBBUEkgd2lsbCBmaWxsLWluCisgKi8KK3N0cnVjdCBiZmFfdGltZXZhbF9zIHsKKwl1MzIJdHZfc2VjOwkJLyogIHNlY29uZHMgICAgICAgICovCisJdTMyCXR2X3VzZWM7CS8qICBtaWNyb3NlY29uZHMgICAqLworfTsKKwordm9pZCBiZmFfb3NfZ2V0dGltZW9mZGF5KHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3duMnN0cihjaGFyICp3d25fc3RyLCB1NjQgd3duKQoreworCXVuaW9uIHsKKwkJdTY0IHd3bjsKKwkJdTggYnl0ZVs4XTsKKwl9IHc7CisKKwl3Lnd3biA9IHd3bjsKKwlzcHJpbnRmKHd3bl9zdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB3LmJ5dGVbMF0sCisJCXcuYnl0ZVsxXSwgdy5ieXRlWzJdLCB3LmJ5dGVbM10sIHcuYnl0ZVs0XSwgdy5ieXRlWzVdLAorCQl3LmJ5dGVbNl0sIHcuYnl0ZVs3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmNpZDJzdHIoY2hhciAqZmNpZF9zdHIsIHUzMiBmY2lkKQoreworCXVuaW9uIHsKKwkJdTMyIGZjaWQ7CisJCXU4IGJ5dGVbNF07CisJfSBmOworCisJZi5mY2lkID0gZmNpZDsKKwlzcHJpbnRmKGZjaWRfc3RyLCAiJTAyeDolMDJ4OiUwMngiLCBmLmJ5dGVbMV0sIGYuYnl0ZVsyXSwgZi5ieXRlWzNdKTsKK30KKworI2VuZGlmIC8qIF9fQkZBX09TX0lOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIxOTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNuYS9iZmFfY25hX3RyY21vZC5oPgorCitCRkFfVFJDX0ZJTEUoQ05BLCBQT1JUKTsKKworI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykgKChfX2lvYyktPnBvcnRfaWQpCisjZGVmaW5lIGJmYV9scHVpZChfX2FyZykgYmZhX2lvY19wb3J0aWQoJihfX2FyZyktPmlvYykKKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3N3YXAoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cykKK3sKKwl1MzIgICAgICAgKmRpcCA9ICh1MzIgKikgc3RhdHM7CisJdTMyICAgICAgICB0MCwgdDE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpOworCSAgICAgaSArPSAyKSB7CisJCXQwID0gZGlwW2ldOworCQl0MSA9IGRpcFtpICsgMV07CisjaWZkZWYgX19CSUdFTkRJQU4KKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHQwKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obCh0MSk7CisjZWxzZQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwodDEpOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHQwKTsKKyNlbmRpZgorCX0KKworICAgIC8qKiB0b2RvCisgICAgICogUW9TIHN0YXRzIHIgYWxzbyBzd2FwcGVkIGFzIDY0Yml0OyB0aGF0IHN0cnVjdHVyZSBhbHNvCisgICAgICogaGFzIHRvIHVzZSA2NCBiaXQgY291bnRlcnMKKyAgICAgKi8KK30KKworLyoqCisgKiBiZmFfcG9ydF9lbmFibGVfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgcG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2VuYWJsZV9pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIHBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9kaXNhYmxlX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2dldF9zdGF0c19pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfZ2V0X3N0YXRzX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQltZW1jcHkocG9ydC0+c3RhdHMsIHBvcnQtPnN0YXRzX2RtYS5rdmEsCisJCSAgICAgICBzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpKTsKKwkJYmZhX3BvcnRfc3RhdHNfc3dhcChwb3J0LCBwb3J0LT5zdGF0cyk7CisJfQorCisJaWYgKHBvcnQtPnN0YXRzX2NiZm4pIHsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9jbGVhcl9zdGF0c19pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJcG9ydC0+c3RhdHNfc3RhdHVzID0gc3RhdHVzOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisKKwlpZiAocG9ydC0+c3RhdHNfY2JmbikgeworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBzdGF0dXMpOworCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2lzcih2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcG9ydF9zICopY2Jhcmc7CisJdW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICppMmhtc2c7CisKKwlpMmhtc2cgPSAodW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICopbTsKKwliZmFfdHJjKHBvcnQsIG0tPm1oLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG0tPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1A6CisJCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9lbmFibGVfaXNyKHBvcnQsIGkyaG1zZy0+ZW5hYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZyA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfZGlzYWJsZV9pc3IocG9ydCwgaTJobXNnLT5kaXNhYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1A6CisJCS8qCisJCSAqIFN0YXRzIGJ1c3kgZmxhZyBpcyBzdGlsbCBzZXQ/IChtYXkgYmUgY21kIHRpbWVkIG91dCkKKwkJICovCisJCWlmIChwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9nZXRfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Z2V0c3RhdHNfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCQlpZiAocG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Y2xlYXJzdGF0c19yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfcG9ydF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9wb3J0X21lbV9jbGFpbSgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCBQb3J0IG1vZHVsZSBwb2ludGVyCisgKiAJICAgICAgZG1hX2t2YSBLZXJuZWwgVmlydHVhbCBBZGRyZXNzIG9mIFBvcnQgRE1BIE1lbW9yeQorICogCSAgICAgIGRtYV9wYSAgUGh5c2ljYWwgQWRkcmVzcyBvZiBQb3J0IERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwlwb3J0LT5zdGF0c19kbWEua3ZhID0gZG1hX2t2YTsKKwlwb3J0LT5zdGF0c19kbWEucGEgPSBkbWFfcGE7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZW5hYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZW5hYmxlIHJlcXVlc3QgdG8gdGhlIGYvdworICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9lbmFibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLAorCQl2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5lbmRpc19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZGlzYWJsZSByZXF1ZXN0IHRvIHRoZSBmL3cKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sCisJCSB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRElTQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+ZW5kaXNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBQb3J0IHN0YXRpc3RpY3MuCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgKilwb3J0LT5zdGF0c19tYi5tc2c7CisKKwlwb3J0LT5zdGF0cyA9IHN0YXRzOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWJmYV9kbWFfYmVfYWRkcl9zZXQobS0+ZG1hX2FkZHIsIHBvcnQtPnN0YXRzX2RtYS5wYSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPnN0YXRzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgICB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICopcG9ydC0+c3RhdHNfbWIubXNnOworCisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+c3RhdHNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfaGJmYWlsKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3BvcnRfcyAqKWFyZzsKKworCS8qCisJICogRmFpbCBhbnkgcGVuZGluZyBnZXRfc3RhdHMvY2xlYXJfc3RhdHMgcmVxdWVzdHMKKwkgKi8KKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQlpZiAocG9ydC0+c3RhdHNfY2JmbikKKwkJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPnN0YXRzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCX0KKworCS8qCisJICogQ2xlYXIgYW55IGVuYWJsZS9kaXNhYmxlIGlzIHBlbmRpbmcKKwkgKi8KKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQlpZiAocG9ydC0+ZW5kaXNfY2JmbikKKwkJCXBvcnQtPmVuZGlzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPmVuZGlzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX0ZBTFNFOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9hdHRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBpb2MgIC0gUG9pbnRlciB0byB0aGUgaW9jIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBkZXYgIC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgIFRoZSBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIG1ib3ggSVNSIGZ1bmN0aW9ucyBoYXZlCisgKiAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50ZXIgYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICB0cmNtb2QgLQorICogICAgICAgICAgICBsb2dtb2QgLQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9hdHRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LAorCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWJmYV9hc3NlcnQocG9ydCk7CisKKwlwb3J0LT5kZXYgPSBkZXY7CisJcG9ydC0+aW9jID0gaW9jOworCXBvcnQtPnRyY21vZCA9IHRyY21vZDsKKwlwb3J0LT5sb2dtb2QgPSBsb2dtb2Q7CisKKwlwb3J0LT5zdGF0c19idXN5ID0gcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gcG9ydC0+ZW5kaXNfY2JmbiA9IE5VTEw7CisKKwliZmFfaW9jX21ib3hfcmVnaXNyKHBvcnQtPmlvYywgQkZJX01DX1BPUlQsIGJmYV9wb3J0X2lzciwgcG9ydCk7CisJYmZhX2lvY19oYmZhaWxfaW5pdCgmcG9ydC0+aGJmYWlsLCBiZmFfcG9ydF9oYmZhaWwsIHBvcnQpOworCWJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHBvcnQtPmlvYywgJnBvcnQtPmhiZmFpbCk7CisKKwliZmFfdHJjKHBvcnQsIDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2RldGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk3ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1BPUlRfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisKKy8qKgorICogQkZBIHBoeXNpY2FsIHBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9wcG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCQkqYmZhOwkvKiAgcGFyZW50IEJGQSBpbnN0YW5jZSAqLworCWJmYV9zbV90CQlzbTsJLyogIHBvcnQgc3RhdGUgbWFjaGluZSAqLworCXd3bl90CQkJbnd3bjsJLyogIG5vZGUgd3duIG9mIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdAkJCXB3d247CS8qICBwb3J0IHd3biBvZiBwaHlzaWNhbCBvcHJ0ICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWRfc3VwOworCQkJCQkvKiAgc3VwcG9ydGVkIHNwZWVkcyAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkOwkvKiAgY3VycmVudCBzcGVlZCAqLworCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHRvcG9sb2d5OwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXU4CQkJbXlhbHBhOwkvKiAgbXkgQUxQQSBpbiBMT09QIHRvcG9sb2d5ICovCisJdTgJCQlyc3ZkWzNdOworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MJY2ZnOwkvKiAgY3VycmVudCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgIHFvc19hdHRyOyAgIC8qIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHFvc192Y19hdHRyOyAgLyogIFZDIGluZm8gZnJvbSBFTFAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXJlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJc3ZjcmVxX3dhaXQ7CisJCQkJCS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXN0YXRzX3JlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAoc3RhdHMpICovCisJdm9pZAkJCSpldmVudF9jYmFyZzsKKwl2b2lkCQkJKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCisJCQkJCQliZmFfcHBvcnRfZXZlbnRfdCBldmVudCk7CisJdW5pb24geworCQl1bmlvbiBiZmlfcHBvcnRfaTJoX21zZ191IGkyaG1zZzsKKwl9IGV2ZW50X2FyZzsKKwl2b2lkCQkJKmJmYWQ7CS8qICBCRkEgZHJpdmVyIGhhbmRsZSAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwkJaGNiX3FlOwkvKiAgQkZBIGNhbGxiYWNrIHF1ZXVlIGVsZW0gKi8KKwllbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUJaGNiX2V2ZW50OworCQkJCQkvKiAgbGluayBldmVudCBmb3IgY2FsbGJhY2sgKi8KKwl1MzIJCW1zZ3RhZzsJLyogIGZpbXJ3YXJlIG1zZyB0YWcgZm9yIHJlcGx5ICovCisJdTgJCQkqc3RhdHNfa3ZhOworCXU2NAkJc3RhdHNfcGE7CisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzOwkvKiAgcHBvcnQgc3RhdHMgKi8KKwl1MzIJCW15cGlkIDogMjQ7CisJdTMyCQlyc3ZkX2IgOiA4OworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICB0aW1lciAqLworCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191IAkqc3RhdHNfcmV0OworCQkJCQkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CisJCQkJCS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CisJCQkJCS8qICBvdXRzdGFuZGluZyBzdGF0cy9zdGF0c2NsciAqLworCWJmYV9ib29sZWFuX3QgICAJc3RhdHNfcWZ1bGw7CisJYmZhX2Jvb2xlYW5fdCAgIAlkaWFnX2J1c3k7CisJCQkJCS8qICBkaWFnIGJ1c3kgc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAliZWFjb247CisJCQkJCS8qICBwb3J0IGJlYWNvbiBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWxpbmtfZTJlX2JlYWNvbjsKKwkJCQkJLyogIGxpbmsgYmVhY29uIHN0YXR1cyAqLworCWJmYV9jYl9wcG9ydF90CQlzdGF0c19jYmZuOworCQkJCQkvKiAgZHJpdmVyIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCSpzdGF0c19jYmFyZzsKKwkJCQkJLyogKiE8IHVzZXIgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIEJGQV9QT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnBwb3J0KQorCisvKgorICogcHVibGljIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9wcG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisjZW5kaWYgLyogX19CRkFfUE9SVF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDdhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX2lvY2ZjLmgiCisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorI2luY2x1ZGUgImJmYV90cmNtb2RfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9tb2R1bGVzX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZndpbWdfcHJpdi5oIgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgYSBuZXcgQkZBIG1vZHVsZQorICovCisjZGVmaW5lIEJGQV9NT0RVTEUoX19tb2QpIAkJCQkJCVwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9tZW1pbmZvKAkJCQlcCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwJXAorCQkJdTMyICpkbV9sZW4pOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsCQlcCisJCQl2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIAlcCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywJCQlcCisJCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwlleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZDsJCQlcCisJc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZCA9IHsJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX21lbWluZm8sCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfYXR0YWNoLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2luaXRkb25lLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2RldGFjaCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdGFydCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdG9wLAkJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9pb2NkaXNhYmxlLAkJCQlcCisJfQorCisjZGVmaW5lIEJGQV9DQUNIRUxJTkVfU1oJKDI1NikKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBpbnRlcmFjdCBiZXR3ZWVuIGRpZmZlcmVudCBCRkEgc3ViIG1vZHVsZXMKKyAqCisgKiBFYWNoIHN1YiBtb2R1bGUgbmVlZHMgdG8gaW1wbGVtZW50IG9ubHkgdGhlIGVudHJ5IHBvaW50cyByZWxldmFudCB0byBpdCAoYW5kCisgKiBjYW4gbGVhdmUgZW50cnkgcG9pbnRzIGFzIE5VTEwpCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgeworCXZvaWQgKCptZW1pbmZvKSAoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJCXUzMiAqZG1fbGVuKTsKKwl2b2lkICgqYXR0YWNoKSAoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CisJdm9pZCAoKmluaXRkb25lKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpkZXRhY2gpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKnN0YXJ0KSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpzdG9wKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCppb2NkaXNhYmxlKSAoc3RydWN0IGJmYV9zICpiZmEpOworfTsKKworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW107CisKK3N0cnVjdCBiZmFfcyB7CisJdm9pZAkJCSpiZmFkOwkJLyogIEJGQSBkcml2ZXIgaW5zdGFuY2UgICAgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zCSphZW47CQkvKiAgQUVOIG1vZHVsZQkJICAgICovCisJc3RydWN0IGJmYV9wbG9nX3MJKnBsb2c7CQkvKiAgcG9ydGxvZyBidWZmZXIJICAgICovCisJc3RydWN0IGJmYV9sb2dfbW9kX3MJKmxvZ207CQkvKiAgZHJpdmVyIGxvZ2dpbmcgbW9kdWxlbiAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zCSp0cmNtb2Q7CS8qICBkcml2ZXIgdHJhY2luZwkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY19zCWlvYzsJCS8qICBJT0MgbW9kdWxlCQkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJaW9jZmM7CQkvKiAgSU9DRkMgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfdGltZXJfbW9kX3MJdGltZXJfbW9kOwkvKiAgdGltZXIgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfbW9kdWxlc19zCW1vZHVsZXM7CS8qICBCRkEgbW9kdWxlcwkgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBfcTsJCS8qICBwZW5kaW5nIGNvbXBsZXRpb25zICAgICovCisJYmZhX2Jvb2xlYW5fdAkJcm1lX3Byb2Nlc3M7CS8qICBSTUUgcHJvY2Vzc2luZyBlbmFibGVkICovCisJc3RydWN0IGxpc3RfaGVhZAkJcmVxcV93YWl0cVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9ib29sZWFuX3QJCWZjczsJCS8qICBGQ1MgaXMgYXR0YWNoZWQgdG8gQkZBICovCisJc3RydWN0IGJmYV9tc2l4X3MJbXNpeDsKK307CisKK2V4dGVybiBiZmFfaXNyX2Z1bmNfdCBiZmFfaXNyc1tCRklfTUNfTUFYXTsKK2V4dGVybiBiZmFfaW9jX21ib3hfbWNmdW5jX3QgIGJmYV9tYm94X2lzcnNbXTsKK2V4dGVybiBiZmFfYm9vbGVhbl90IGJmYV9hdXRvX3JlY292ZXI7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZsYXNoOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY2RpYWc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3NncGc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3Bwb3J0OworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY3hwOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9scHM7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3VmOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9ycG9ydDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmNwaW07CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3BiaW5kOworCisjZW5kaWYgLyogX19CRkFfUFJJVl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkYTc3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKQEAgLTAsMCArMSw5MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3Jwb3J0Lmg+CisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBSUE9SVCk7CitCRkFfTU9EVUxFKHJwb3J0KTsKKworI2RlZmluZSBiZmFfcnBvcnRfb2ZmbGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vZmZsaW5lKChfX3JwKS0+cnBvcnRfZHJ2KTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19ycCktPmJmYSwgJihfX3JwKS0+aGNiX3FlLAkJXAorCQkJCV9fYmZhX2NiX3Jwb3J0X29mZmxpbmUsIChfX3JwKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3Jwb3J0X29ubGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vbmxpbmUoKF9fcnApLT5ycG9ydF9kcnYpOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX3JwKS0+YmZhLCAmKF9fcnApLT5oY2JfcWUsCQlcCisJCQkJICBfX2JmYV9jYl9ycG9ydF9vbmxpbmUsIChfX3JwKSk7ICAgICAgXAorCQl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqcnBfbW9kKTsKK3N0YXRpYyB2b2lkIGJmYV9ycG9ydF9mcmVlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9ycG9ydF9zbSBCRkEgcnBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKworZW51bSBiZmFfcnBvcnRfZXZlbnQgeworCUJGQV9SUE9SVF9TTV9DUkVBVEUJPSAxLAkvKiAgcnBvcnQgY3JlYXRlIGV2ZW50CQkqLworCUJGQV9SUE9SVF9TTV9ERUxFVEUJPSAyLAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgcnBvcnQgKi8KKwlCRkFfUlBPUlRfU01fT05MSU5FCT0gMywJLyogIHJwb3J0IGlzIG9ubGluZQkJKi8KKwlCRkFfUlBPUlRfU01fT0ZGTElORQk9IDQsCS8qICBycG9ydCBpcyBvZmZsaW5lCQkqLworCUJGQV9SUE9SVF9TTV9GV1JTUAk9IDUsCS8qICBmaXJtd2FyZSByZXNwb25zZQkJKi8KKwlCRkFfUlBPUlRfU01fSFdGQUlMCT0gNiwJLyogIElPQyBoL3cgZmFpbHVyZQkJKi8KKwlCRkFfUlBPUlRfU01fUU9TX1NDTgk9IDcsCS8qICBRb1MgU0NOIGZyb20gZmlybXdhcmUJKi8KKwlCRkFfUlBPUlRfU01fU0VUX1NQRUVECT0gOCwJLyogIFNldCBScG9ydCBTcGVlZCAJCSovCisJQkZBX1JQT1JUX1NNX1FSRVNVTUUJPSA5LAkvKiAgc3BhY2UgaW4gcmVxdWV1ZSBxdWV1ZQkqLworfTsKKworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29mZmxpbmVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLCBvbmx5IG9ubGluZSBldmVudCBleHBlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zdGF0cyhycCwgc21fdW5fY3IpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fY3JlYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV91bl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fY3Jfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBXYWl0aW5nIGZvciBycG9ydCBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX3Jwb3J0X29ubGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUmVxdWVzdCBxdWV1ZSBpcyBmdWxsLCBhd2FpdGluZyBxdWV1ZSByZXN1bWUgdG8gc2VuZCBjcmVhdGUgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPbmxpbmUgc3RhdGUgLSBub3JtYWwgcGFya2luZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgKnFvc19zY247CisKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb25fb2ZmKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX29uX2RlbCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fU0VUX1NQRUVEOgorCQliZmFfcnBvcnRfc2VuZF9md3NwZWVkKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9RT1NfU0NOOgorCQlxb3Nfc2NuID0gKHN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zICopIHJwLT5ldmVudF9hcmcuZndfbXNnOworCQlycC0+cW9zX2F0dHIgPSBxb3Nfc2NuLT5uZXdfcW9zX2F0dHI7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5ID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKworCQlpZiAocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkICE9CisJCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQocnAtPnJwb3J0X2RydiwKKwkJCQkJCSAgICBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIsCisJCQkJCQkgICAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJaWYgKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgIT0KKwkJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHJwLT5ycG9ydF9kcnYsCisJCQkJCQkgIHFvc19zY24tPm9sZF9xb3NfYXR0ciwKKwkJCQkJCSAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX29uX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgcnBvcnQgaXMgYmVpbmcgZGVsZXRlZCAtIGF3YWl0aW5nIGYvdyByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9mZmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX29uKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfZndyc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2Z3cnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogV2FpdGluZyBmb3IgcnBvcnQgY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuIEEgZGVsZXRlIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbHBfZndyc3ApOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFdhaXRpbmcgZm9yIHJwb3J0IGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLiBScG9ydCBvZmZsaW5lIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF9md3JzcCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPQyBoL3cgZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb2ZmKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT05MSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHJpdmF0ZSBCRkEgcnBvcnQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnAgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX3Jwb3J0X29ubGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfcnBvcnRfb2ZmbGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcwkqcnAgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fUVJFU1VNRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwlpZiAoY2ZnLT5md2NmZy5udW1fcnBvcnRzIDwgQkZBX1JQT1JUX01JTikKKwkJY2ZnLT5md2NmZy5udW1fcnBvcnRzID0gQkZBX1JQT1JUX01JTjsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycDsKKwl1MTYgICAgICAgIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5ycF9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJwID0gKHN0cnVjdCBiZmFfcnBvcnRfcyAqKSBiZmFfbWVtaW5mb19rdmEobWVtaW5mbyk7CisJbW9kLT5ycHNfbGlzdCA9IHJwOworCW1vZC0+bnVtX3Jwb3J0cyA9IGNmZy0+ZndjZmcubnVtX3Jwb3J0czsKKworCWJmYV9hc3NlcnQobW9kLT5udW1fcnBvcnRzCisJCSAgICYmICEobW9kLT5udW1fcnBvcnRzICYgKG1vZC0+bnVtX3Jwb3J0cyAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fcnBvcnRzOyBpKyssIHJwKyspIHsKKwkJYmZhX29zX21lbXNldChycCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcykpOworCQlycC0+YmZhID0gYmZhOworCQlycC0+cnBvcnRfdGFnID0gaTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisKKwkJLyoqCisJCSAqICAtIGlzIHVudXNlZAorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZycC0+cWUsICZtb2QtPnJwX2ZyZWVfcSk7CisKKwkJYmZhX3JlcXFfd2luaXQoJnJwLT5yZXFxX3dhaXQsIGJmYV9ycG9ydF9xcmVzdW1lLCBycCk7CisJfQorCisJLyoqCisJICogY29uc3VtZSBtZW1vcnkKKwkgKi8KKwliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgPSAodTggKikgcnA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJm1vZC0+cnBfYWN0aXZlX3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9ycG9ydF9zICopIHFlOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX0hXRkFJTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKworCWJmYV9xX2RlcSgmbW9kLT5ycF9mcmVlX3EsICZycG9ydCk7CisJaWYgKHJwb3J0KQorCQlsaXN0X2FkZF90YWlsKCZycG9ydC0+cWUsICZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJldHVybiAocnBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKHJwb3J0LT5iZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnJwX2FjdGl2ZV9xLCBycG9ydCkpOworCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJm1vZC0+cnBfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApCit7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JULCAmcnAtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5iZmFfaGFuZGxlID0gcnAtPnJwb3J0X3RhZzsKKwltLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnAtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwltLT5waWQgPSBycC0+cnBvcnRfaW5mby5waWQ7CisJbS0+bHBfdGFnID0gcnAtPnJwb3J0X2luZm8ubHBfdGFnOworCW0tPmxvY2FsX3BpZCA9IHJwLT5ycG9ydF9pbmZvLmxvY2FsX3BpZDsKKwltLT5mY19jbGFzcyA9IHJwLT5ycG9ydF9pbmZvLmZjX2NsYXNzOworCW0tPnZmX2VuID0gcnAtPnJwb3J0X2luZm8udmZfZW47CisJbS0+dmZfaWQgPSBycC0+cnBvcnRfaW5mby52Zl9pZDsKKwltLT5jaXNjID0gcnAtPnJwb3J0X2luZm8uY2lzYzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQsICZycC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1JQT1JULCBCRklfUlBPUlRfSDJJX0RFTEVURV9SRVEsCisJCQliZmFfbHB1aWQocnAtPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IHJwLT5md19oYW5kbGU7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3NwZWVkX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfaW5mby5zcGVlZCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9TRVRfU1BFRURfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBycC0+ZndfaGFuZGxlOworCW0tPnNwZWVkID0gKHU4KXJwLT5ycG9ydF9pbmZvLnNwZWVkOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHVibGljCisgKi8KKworLyoqCisgKiAJCVJwb3J0IGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXVuaW9uIGJmaV9ycG9ydF9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfUlBPUlRfSTJIX0NSRUFURV9SU1A6CisJCXJwID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQlycC0+ZndfaGFuZGxlID0gbXNnLmNyZWF0ZV9yc3AtPmZ3X2hhbmRsZTsKKwkJcnAtPnFvc19hdHRyID0gbXNnLmNyZWF0ZV9yc3AtPnFvc19hdHRyOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQOgorCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5kZWxldGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJYmZhX2Fzc2VydChtc2cuZGVsZXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9SUE9SVF9JMkhfUU9TX1NDTjoKKwkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cucW9zX3Njbl9ldnQtPmJmYV9oYW5kbGUpOworCQlycC0+ZXZlbnRfYXJnLmZ3X21zZyA9IG1zZy5xb3Nfc2NuX2V2dDsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9RT1NfU0NOKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9ycG9ydF9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgKgorYmZhX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqcnBvcnRfZHJ2KQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwlycCA9IGJmYV9ycG9ydF9hbGxvYyhCRkFfUlBPUlRfTU9EKGJmYSkpOworCisJaWYgKHJwID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwlycC0+YmZhID0gYmZhOworCXJwLT5ycG9ydF9kcnYgPSBycG9ydF9kcnY7CisJYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHJwKTsKKworCWJmYV9hc3NlcnQoYmZhX3NtX2NtcF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCkpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fQ1JFQVRFKTsKKworCXJldHVybiAocnApOworfQorCit2b2lkCitiZmFfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9ERUxFVEUpOworfQorCit2b2lkCitiZmFfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBiZmFfcnBvcnRfaW5mb19zICpycG9ydF9pbmZvKQoreworCWJmYV9hc3NlcnQocnBvcnRfaW5mby0+bWF4X2ZybXN6ICE9IDApOworCisJLyoqCisJICogU29tZSBKQk9EcyBhcmUgc2VlbiB0byBiZSBub3Qgc2V0dGluZyBQRFUgc2l6ZSBjb3JyZWN0bHkgaW4gUExPR0kKKwkgKiByZXNwb25zZXMuIERlZmF1bHQgdG8gbWluaW11bSBzaXplLgorCSAqLworCWlmIChycG9ydF9pbmZvLT5tYXhfZnJtc3ogPT0gMCkgeworCQliZmFfdHJjKHJwb3J0LT5iZmEsIHJwb3J0LT5ycG9ydF90YWcpOworCQlycG9ydF9pbmZvLT5tYXhfZnJtc3ogPSBGQ19NSU5fUERVU1o7CisJfQorCisJYmZhX29zX2Fzc2lnbihycG9ydC0+cnBvcnRfaW5mbywgKnJwb3J0X2luZm8pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fT05MSU5FKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfcnBvcnRfc3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJYmZhX2Fzc2VydChzcGVlZCAhPSAwKTsKKwliZmFfYXNzZXJ0KHNwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9BVVRPKTsKKworCXJwb3J0LT5ycG9ydF9pbmZvLnNwZWVkID0gc3BlZWQ7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9TRVRfU1BFRUQpOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gcnBvcnQtPnN0YXRzOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCit7CisJcW9zX2F0dHItPnFvc19wcmlvcml0eSAgPSBiZmFfb3NfbnRvaGwocnBvcnQtPnFvc19hdHRyLnFvc19wcmlvcml0eSk7CisJcW9zX2F0dHItPnFvc19mbG93X2lkICA9IGJmYV9vc19udG9obChycG9ydC0+cW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCit9CisKK3ZvaWQKK2JmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9vc19tZW1zZXQoJnJwb3J0LT5zdGF0cywgMCwgc2l6ZW9mKHJwb3J0LT5zdGF0cykpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkwY2UyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnRfcHJpdi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9SUE9SVF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9SUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCisjZGVmaW5lIEJGQV9SUE9SVF9NSU4JNAorCitzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwc19saXN0OwkvKiAgbGlzdCBvZiBycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9mcmVlX3E7CS8qICBmcmVlIGJmYV9ycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9hY3RpdmVfcTsJLyogIGZyZWUgYmZhX3Jwb3J0cyAJKi8KKwl1MTYJbnVtX3Jwb3J0czsJLyogIG51bWJlciBvZiBycG9ydHMJKi8KK307CisKKyNkZWZpbmUgQkZBX1JQT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnJwb3J0X21vZCkKKworLyoqCisgKiBDb252ZXJ0IHJwb3J0IHRhZyB0byBSUE9SVAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9GUk9NX1RBRyhfX2JmYSwgX3RhZykJCQkJXAorCShCRkFfUlBPUlRfTU9EKF9fYmZhKS0+cnBzX2xpc3QgKwkJCQlcCisJICgoX3RhZykgJiAoQkZBX1JQT1JUX01PRChfX2JmYSktPm51bV9ycG9ydHMgLSAxKSkpCisKKy8qCisgKiBleHRlcm5hbCBmdW5jdGlvbnMKKyAqLwordm9pZAliZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX1JQT1JUX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5ZDhmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFNHUEcpOworQkZBX01PRFVMRShzZ3BnKTsKKworLyoqCisgKiAgYmZhX3NncGdfbW9kIEJGQSBTR1BHIE1vZGUgbW9kdWxlCisgKi8KKworLyoqCisgKiBDb21wdXRlIGFuZCByZXR1cm4gbWVtb3J5IG5lZWRlZCBieSBGQ1AoaW0pIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA8IEJGQV9TR1BHX01JTikKKwkJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gQkZBX1NHUEdfTUlOOworCisJKmttX2xlbiArPSAoY2ZnLT5kcnZjZmcubnVtX3NncGdzICsgMSkgKiBzaXplb2Yoc3RydWN0IGJmYV9zZ3BnX3MpOworCSpkbV9sZW4gKz0gKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyArIDEpICogc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX3NncGdfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MJKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCWludAkJCQlpOworCXN0cnVjdCBiZmFfc2dwZ19zCQkqaHNncGc7CisJc3RydWN0IGJmaV9zZ3BnX3MgCSpzZ3BnOworCXU2NAkJYWxpZ25fbGVuOworCisJdW5pb24geworCQl1NjQgICAgICAgIHBhOworCQl1bmlvbiBiZmlfYWRkcl91ICAgICAgYWRkcjsKKwl9IHNncGdfcGE7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5zZ3BnX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnNncGdfd2FpdF9xKTsKKworCWJmYV90cmMoYmZhLCBjZmctPmRydmNmZy5udW1fc2dwZ3MpOworCisJbW9kLT5udW1fc2dwZ3MgPSBjZmctPmRydmNmZy5udW1fc2dwZ3M7CisJbW9kLT5zZ3BnX2Fycl9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKTsKKwlhbGlnbl9sZW4gPSAoQkZBX1NHUEdfUk9VTkRVUChtb2QtPnNncGdfYXJyX3BhKSAtIG1vZC0+c2dwZ19hcnJfcGEpOworCW1vZC0+c2dwZ19hcnJfcGEgKz0gYWxpZ25fbGVuOworCW1vZC0+aHNncGdfYXJyID0gKHN0cnVjdCBiZmFfc2dwZ19zICopIChiZmFfbWVtaW5mb19rdmEobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisJbW9kLT5zZ3BnX2FyciA9IChzdHJ1Y3QgYmZpX3NncGdfcyAqKSAoYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisKKwloc2dwZyA9IG1vZC0+aHNncGdfYXJyOworCXNncGcgPSBtb2QtPnNncGdfYXJyOworCXNncGdfcGEucGEgPSBtb2QtPnNncGdfYXJyX3BhOworCW1vZC0+ZnJlZV9zZ3BncyA9IG1vZC0+bnVtX3NncGdzOworCisJYmZhX2Fzc2VydCghKHNncGdfcGEucGEgJiAoc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fc2dwZ3M7IGkrKykgeworCQliZmFfb3NfbWVtc2V0KGhzZ3BnLCAwLCBzaXplb2YoKmhzZ3BnKSk7CisJCWJmYV9vc19tZW1zZXQoc2dwZywgMCwgc2l6ZW9mKCpzZ3BnKSk7CisKKwkJaHNncGctPnNncGcgPSBzZ3BnOworCQloc2dwZy0+c2dwZ19wYSA9IHNncGdfcGEuYWRkcjsKKwkJbGlzdF9hZGRfdGFpbCgmaHNncGctPnFlLCAmbW9kLT5zZ3BnX3EpOworCisJCWhzZ3BnKys7CisJCXNncGcrKzsKKwkJc2dwZ19wYS5wYSArPSBzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaHNncGc7CisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pID0gKHU4ICopIHNncGc7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pID0gc2dwZ19wYS5wYTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworCisKKy8qKgorICogIGJmYV9zZ3BnX3B1YmxpYyBCRkEgU0dQRyBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfc2dwZ19tYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BncykKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCXN0cnVjdCBiZmFfc2dwZ19zICpoc2dwZzsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV90cmNfZnAoYmZhLCBuc2dwZ3MpOworCisJaWYgKG1vZC0+ZnJlZV9zZ3BncyA8IG5zZ3BncykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG5zZ3BnczsgaSsrKSB7CisJCWJmYV9xX2RlcSgmbW9kLT5zZ3BnX3EsICZoc2dwZyk7CisJCWJmYV9hc3NlcnQoaHNncGcpOworCQlsaXN0X2FkZF90YWlsKCZoc2dwZy0+cWUsIHNncGdfcSk7CisJfQorCisJbW9kLT5mcmVlX3NncGdzIC09IG5zZ3BnczsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWU7CisKKwliZmFfdHJjX2ZwKGJmYSwgbnNncGcpOworCisJbW9kLT5mcmVlX3NncGdzICs9IG5zZ3BnOworCWJmYV9hc3NlcnQobW9kLT5mcmVlX3NncGdzIDw9IG1vZC0+bnVtX3NncGdzKTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChzZ3BnX3EsICZtb2QtPnNncGdfcSk7CisKKwlpZiAobGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpCisJCXJldHVybjsKKworCS8qKgorCSAqIHNhdGlzZnkgYXMgbWFueSB3YWl0aW5nIHJlcXVlc3RzIGFzIHBvc3NpYmxlCisJICovCisJZG8geworCQl3cWUgPSBiZmFfcV9maXJzdCgmbW9kLT5zZ3BnX3dhaXRfcSk7CisJCWlmIChtb2QtPmZyZWVfc2dwZ3MgPCB3cWUtPm5zZ3BnKQorCQkJbnNncGcgPSBtb2QtPmZyZWVfc2dwZ3M7CisJCWVsc2UKKwkJCW5zZ3BnID0gd3FlLT5uc2dwZzsKKwkJYmZhX3NncGdfbWFsbG9jKGJmYSwgJndxZS0+c2dwZ19xLCBuc2dwZyk7CisJCXdxZS0+bnNncGcgLT0gbnNncGc7CisJCWlmICh3cWUtPm5zZ3BnID09IDApIHsKKwkJCWxpc3RfZGVsKCZ3cWUtPnFlKTsKKwkJCXdxZS0+Y2Jmbih3cWUtPmNiYXJnKTsKKwkJfQorCX0gd2hpbGUgKG1vZC0+ZnJlZV9zZ3BncyAmJiAhbGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpOworfQorCit2b2lkCitiZmFfc2dwZ193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KG5zZ3BnID4gMCk7CisJYmZhX2Fzc2VydChuc2dwZyA+IG1vZC0+ZnJlZV9zZ3Bncyk7CisKKwl3cWUtPm5zZ3BnX3RvdGFsID0gd3FlLT5uc2dwZyA9IG5zZ3BnOworCisJLyoqCisJICogYWxsb2NhdGUgYW55IGxlZnQgdG8gdGhpcyBvbmUgZmlyc3QKKwkgKi8KKwlpZiAobW9kLT5mcmVlX3NncGdzKSB7CisJCS8qKgorCQkgKiBubyBvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBTR1BHCisJCSAqLworCQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKTsKKwkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtb2QtPnNncGdfcSwgJndxZS0+c2dwZ19xKTsKKwkJd3FlLT5uc2dwZyAtPSBtb2QtPmZyZWVfc2dwZ3M7CisJCW1vZC0+ZnJlZV9zZ3BncyA9IDA7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+c2dwZ193YWl0X3EpOworfQorCit2b2lkCitiZmFfc2dwZ193Y2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSkKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnNncGdfd2FpdF9xLCB3cWUpKTsKKwlsaXN0X2RlbCgmd3FlLT5xZSk7CisKKwlpZiAod3FlLT5uc2dwZ190b3RhbCAhPSB3cWUtPm5zZ3BnKQorCQliZmFfc2dwZ19tZnJlZShiZmEsICZ3cWUtPnNncGdfcSwKKwkJCQkgICB3cWUtPm5zZ3BnX3RvdGFsIC0gd3FlLT5uc2dwZyk7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX3dpbml0KHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLCB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwKKwkJICAgdm9pZCAqY2JhcmcpCit7CisJSU5JVF9MSVNUX0hFQUQoJndxZS0+c2dwZ19xKTsKKwl3cWUtPmNiZm4gPSBjYmZuOworCXdxZS0+Y2JhcmcgPSBjYmFyZzsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGhhbF9zZ3BnLmggQkZBIFNHIHBhZ2UgbW9kdWxlCisgKi8KKworI2lmbmRlZiBfX0JGQV9TR1BHX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1NHUEdfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisKKyNkZWZpbmUgQkZBX1NHUEdfTUlOCSgxNikKKworLyoqCisgKiBBbGlnbm1lbnQgbWFjcm8gZm9yIFNHIHBhZ2UgYWxsb2NhdGlvbgorICovCisjZGVmaW5lIEJGQV9TR1BHX1JPVU5EVVAoX2wpICgoKF9sKSArIChzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpIFwKKwkJCSYgfihzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpCisKK3N0cnVjdCBiZmFfc2dwZ193cWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBxZTsJLyogIHF1ZXVlIHNnIHBhZ2UgZWxlbWVudAkqLworCWludAluc2dwZzsJCS8qICBwYWdlcyB0byBiZSBhbGxvY2F0ZWQJKi8KKwlpbnQJbnNncGdfdG90YWw7CS8qICB0b3RhbCBwYWdlcyByZXF1aXJlZAkqLworCXZvaWQJKCpjYmZuKSAodm9pZCAqY2JhcmcpOworCQkJCS8qICBjYWxsYmFjayBmdW5jdGlvbgkJKi8KKwl2b2lkCSpjYmFyZzsJCS8qICBjYWxsYmFjayBhcmcJCSovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CS8qICBxdWV1ZSBvZiBhbGxvY2VkIHNncGdzCSovCit9OworCitzdHJ1Y3QgYmZhX3NncGdfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CS8qICBxdWV1ZSBzZyBwYWdlIGVsZW1lbnQJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZzsgLyogIHZhIG9mIFNHIHBhZ2UJCSovCisJdW5pb24gYmZpX2FkZHJfdSBzZ3BnX3BhOy8qICBwYSBvZiBTRyBwYWdlCQkqLworfTsKKworLyoqCisgKiBHaXZlbiBudW1iZXIgb2YgU0cgZWxlbWVudHMsIEJGQV9TR1BHX05QQUdFKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBTRyBwYWdlcyByZXF1aXJlZC4KKyAqLworI2RlZmluZSBCRkFfU0dQR19OUEFHRShfbnNnZXMpICAoKChfbnNnZXMpIC8gQkZJX1NHUEdfREFUQV9TR0VTKSArIDEpCisKK3N0cnVjdCBiZmFfc2dwZ19tb2RfcyB7CisJc3RydWN0IGJmYV9zICpiZmE7CisJaW50CQludW1fc2dwZ3M7CS8qICBudW1iZXIgb2YgU0cgcGFnZXMJCSovCisJaW50CQlmcmVlX3NncGdzOwkvKiAgbnVtYmVyIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgYmZhX3NncGdfcyAqaHNncGdfYXJyOwkvKiAgQkZBIFNHIHBhZ2UgYXJyYXkJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZ19hcnI7CS8qICBhY3R1YWwgU0cgcGFnZSBhcnJheQkqLworCXU2NAlzZ3BnX2Fycl9wYTsJLyogIFNHIHBhZ2UgYXJyYXkgRE1BIGFkZHIJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfcTsJLyogIHF1ZXVlIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfd2FpdF9xOyAvKiAgd2FpdCBxdWV1ZSBmb3IgU0cgcGFnZXMJKi8KK307CisjZGVmaW5lIEJGQV9TR1BHX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnNncGdfbW9kKQorCitiZmFfc3RhdHVzX3QJYmZhX3NncGdfbWFsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwKKwkJCQkJCQkJaW50IG5zZ3Bncyk7Cit2b2lkCQliZmFfc2dwZ193aW5pdChzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwKKwkJCQkgICB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwgdm9pZCAqY2JhcmcpOwordm9pZAkJYmZhX3NncGdfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfd2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUpOworCisjZW5kaWYgLyogX19CRkFfU0dQR19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc20uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMGY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFzbS5jIEJGQSBTdGF0ZSBtYWNoaW5lIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorCisvKioKKyAqICBjc19zbV9hcGkKKyAqLworCitpbnQKK2JmYV9zbV90b19zdGF0ZShzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgKnNtdCwgYmZhX3NtX3Qgc20pCit7CisJaW50ICAgICAgICAgICAgIGkgPSAwOworCisJd2hpbGUgKHNtdFtpXS5zbSAmJiBzbXRbaV0uc20gIT0gc20pCisJCWkrKzsKKwlyZXR1cm4gc210W2ldLnN0YXRlOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RpbWVyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV90aW1lci5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCit2b2lkCitiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpCit7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+dGltZXJfcSk7Cit9CisKK3ZvaWQKK2JmYV90aW1lcl9iZWF0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWggPSAmbW9kLT50aW1lcl9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlX25leHQ7CisJc3RydWN0IGJmYV90aW1lcl9zICplbGVtOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB0aW1lZG91dF9xOworCisJSU5JVF9MSVNUX0hFQUQoJnRpbWVkb3V0X3EpOworCisJcWUgPSBiZmFfcV9uZXh0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlxZV9uZXh0ID0gYmZhX3FfbmV4dChxZSk7CisKKwkJZWxlbSA9IChzdHJ1Y3QgYmZhX3RpbWVyX3MgKikgcWU7CisJCWlmIChlbGVtLT50aW1lb3V0IDw9IEJGQV9USU1FUl9GUkVRKSB7CisJCQllbGVtLT50aW1lb3V0ID0gMDsKKwkJCWxpc3RfZGVsKCZlbGVtLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZlbGVtLT5xZSwgJnRpbWVkb3V0X3EpOworCQl9IGVsc2UgeworCQkJZWxlbS0+dGltZW91dCAtPSBCRkFfVElNRVJfRlJFUTsKKwkJfQorCisJCXFlID0gcWVfbmV4dDsJLyogZ28gdG8gbmV4dCBlbGVtICovCisJfQorCisJLyoKKwkgKiBQb3AgYWxsIHRoZSB0aW1lb3V0IGVudHJpZXMKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpbWVkb3V0X3EpKSB7CisJCWJmYV9xX2RlcSgmdGltZWRvdXRfcSwgJmVsZW0pOworCQllbGVtLT50aW1lcmNiKGVsZW0tPmFyZyk7CisJfQorfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX2JlZ2luKHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV90aW1lcl9zICp0aW1lciwKKwkJICAgIHZvaWQgKCp0aW1lcmNiKSAodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKworCWJmYV9hc3NlcnQodGltZXJjYiAhPSBOVUxMKTsKKwliZmFfYXNzZXJ0KCFiZmFfcV9pc19vbl9xKCZtb2QtPnRpbWVyX3EsIHRpbWVyKSk7CisKKwl0aW1lci0+dGltZW91dCA9IHRpbWVvdXQ7CisJdGltZXItPnRpbWVyY2IgPSB0aW1lcmNiOworCXRpbWVyLT5hcmcgPSBhcmc7CisKKwlsaXN0X2FkZF90YWlsKCZ0aW1lci0+cWUsICZtb2QtPnRpbWVyX3EpOworfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX3N0b3Aoc3RydWN0IGJmYV90aW1lcl9zICp0aW1lcikKK3sKKwliZmFfYXNzZXJ0KCFsaXN0X2VtcHR5KCZ0aW1lci0+cWUpKTsKKworCWxpc3RfZGVsKCZ0aW1lci0+cWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHJjbW9kX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NjJkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBoYWxfdHJjbW9kLmggQkZBIHRyYWNlIG1vZHVsZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX1RSQ01PRF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9UUkNNT0RfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19IQUxfSU9DCQk9IDEsCisJQkZBX1RSQ19IQUxfSU5UUgk9IDIsCisJQkZBX1RSQ19IQUxfRkNYUAk9IDMsCisJQkZBX1RSQ19IQUxfVUYJCT0gNCwKKwlCRkFfVFJDX0hBTF9ESUFHCT0gNSwKKwlCRkFfVFJDX0hBTF9SUE9SVAk9IDYsCisJQkZBX1RSQ19IQUxfRkNQSU0JPSA3LAorCUJGQV9UUkNfSEFMX0lPSU0JPSA4LAorCUJGQV9UUkNfSEFMX1RTS0lNCT0gOSwKKwlCRkFfVFJDX0hBTF9JVE5JTQk9IDEwLAorCUJGQV9UUkNfSEFMX1BQT1JUCT0gMTEsCisJQkZBX1RSQ19IQUxfU0dQRwk9IDEyLAorCUJGQV9UUkNfSEFMX0ZMQVNICT0gMTMsCisJQkZBX1RSQ19IQUxfREVCVUcJPSAxNCwKKwlCRkFfVFJDX0hBTF9XV04JCT0gMTUsCisJQkZBX1RSQ19IQUxfRkxBU0hfUkFXCT0gMTYsCisJQkZBX1RSQ19IQUxfU0JPT1QJPSAxNywKKwlCRkFfVFJDX0hBTF9TQk9PVF9JTwk9IDE4LAorCUJGQV9UUkNfSEFMX1NCT09UX0lOVFIJPSAxOSwKKwlCRkFfVFJDX0hBTF9TQlRFU1QJPSAyMCwKKwlCRkFfVFJDX0hBTF9JUEZDCT0gMjEsCisJQkZBX1RSQ19IQUxfSU9DRkMJPSAyMiwKKwlCRkFfVFJDX0hBTF9GQ1BUTQk9IDIzLAorCUJGQV9UUkNfSEFMX0lPVE0JPSAyNCwKKwlCRkFfVFJDX0hBTF9UU0tUTQk9IDI1LAorCUJGQV9UUkNfSEFMX1RJTgkJPSAyNiwKKwlCRkFfVFJDX0hBTF9MUFMJCT0gMjcsCisJQkZBX1RSQ19IQUxfRkNESUFHCT0gMjgsCisJQkZBX1RSQ19IQUxfUEJJTkQJPSAyOSwKKwlCRkFfVFJDX0hBTF9JT0NGQ19DVAk9IDMwLAorCUJGQV9UUkNfSEFMX0lPQ0ZDX0NCCT0gMzEsCisJQkZBX1RSQ19IQUxfSU9DRkNfUQk9IDMyLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX1RSQ01PRF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHNraW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9jYl9pb2ltX21hY3Jvcy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBUU0tJTSk7CisKKy8qKgorICogdGFzayBtYW5hZ2VtZW50IGNvbXBsZXRpb24gaGFuZGxpbmcKKyAqLworI2RlZmluZSBiZmFfdHNraW1fcWNvbXAoX190c2tpbSwgX19jYmZuKSBkbyB7CQkJICAgICBcCisJYmZhX2NiX3F1ZXVlKChfX3Rza2ltKS0+YmZhLCAmKF9fdHNraW0pLT5oY2JfcWUsIF9fY2JmbiwgKF9fdHNraW0pKTsgXAorCWJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKSBkbyB7CQkJCSAgICAgXAorCWlmICgoX190c2tpbSktPm5vdGlmeSkJCQkJCSAgICAgCSAgICAgXAorCQliZmFfaXRuaW1fdHNrZG9uZSgoX190c2tpbSktPml0bmltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJICAgICAgIGx1bl90IGx1bik7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fc2VuZChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKworLyoqCisgKiAgYmZhX3Rza2ltX3NtCisgKi8KKworZW51bSBiZmFfdHNraW1fZXZlbnQgeworCUJGQV9UU0tJTV9TTV9TVEFSVCAgICAgICAgPSAxLCAgLyogIFRNIGNvbW1hbmQgc3RhcnQgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9ET05FICAgICAgICAgPSAyLCAgLyogIFRNIGNvbXBsZXRpb24gICAgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9RUkVTVU1FICAgICAgPSAzLCAgLyogIHJlc3VtZSBhZnRlciBxZnVsbCAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IV0ZBSUwgICAgICAgPSA1LCAgLyogIElPQyBoL3cgZmFpbHVyZSBldmVudCAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IQ0IgICAgICAgICAgPSA2LCAgLyogIEJGQSBjYWxsYmFjayBjb21wbGV0aW9uICAgICAqLworCUJGQV9UU0tJTV9TTV9JT1NfRE9ORSAgICAgPSA3LCAgLyogIElPIGFuZCBzdWIgVE0gY29tcGxldGlvbnMgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQICAgICAgPSA4LCAgLyogIFRNIGNsZWFudXAgb24gSVROIG9mZmxpbmUgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUgPSA5LCAgLyogIFRNIGFib3J0IGNvbXBsZXRpb24gICAgICAgICAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCSBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQkgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgICAgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9oY2Ioc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9hY3RpdmUpOworCQliZmFfdHNraW1fZ2F0aGVyX2lvcyh0c2tpbSk7CisKKwkJLyoqCisJCSAqIElmIGRldmljZSBpcyBvZmZsaW5lLCBkbyBub3Qgc2VuZCBUTSBvbiB3aXJlLiBKdXN0IGNsZWFudXAKKwkJICogYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgYW5kIGNvbXBsZXRlIFRNIHJlcXVlc3QuCisJCSAqLworCQlpZiAoIWJmYV9pdG5pbV9pc19vbmxpbmUodHNraW0tPml0bmltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCQl0c2tpbS0+dHNrX3N0YXR1cyA9IEJGSV9UU0tJTV9TVFNfT0s7CisJCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCFiZmFfdHNraW1fc2VuZCh0c2tpbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KHRza2ltLT5iZmEsIHRza2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmdHNraW0tPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBicmllZgorICoJVE0gY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZSB0bworICoJY2xlYW51cCBJTyByZXF1ZXN0cyBpbiBUTSBzY29wZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQlpZiAoIWJmYV90c2tpbV9zZW5kX2Fib3J0KHRza2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdCh0c2tpbS0+YmZhLCB0c2tpbS0+aXRuaW0tPnJlcXEsCisJCQkJJnRza2ltLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqCUFuIGFjdGl2ZSBUTSBpcyBiZWluZyBjbGVhbmVkIHVwIHNpbmNlIElUTiBpcyBvZmZsaW5lLiBBd2FpdGluZyBjbGVhbnVwCisgKgljb21wbGV0aW9uIGV2ZW50IGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9ET05FOgorCQkvKioKKwkJICogSWdub3JlIGFuZCB3YWl0IGZvciBBQk9SVCBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVBfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9JT1NfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZG9uZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJLyoqCisJCSAqIElnbm9yZSwgVE0gY29tbWFuZCBjb21wbGV0ZWQgb24gd2lyZS4KKwkJICogTm90aWZ5IFRNIGNvbm1wbGV0aW9uIG9uIElPIGNsZWFudXAgY29tcGxldGlvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2FjdGl2ZSk7CisJCWJmYV90c2tpbV9zZW5kKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQkvKioKKwkJICogTm8gbmVlZCB0byBzZW5kIFRNIG9uIHdpcmUgc2luY2UgSVROIGlzIG9mZmxpbmUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGlzIGFjdGl2ZSwgYXdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICoJdG8gc2VuZCBjbGVhbiB1cCByZXF1ZXN0LgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCS8qKgorCQkgKgorCQkgKiBGYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQliZmFfdHNraW1fc2VuZF9hYm9ydCh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIEJGQSBjYWxsYmFjayBpcyBwZW5kaW5nCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21faGNiKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX3VuaW5pdCk7CisJCWJmYV90c2tpbV9mcmVlKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQliZmFfdHNraW1fbm90aWZ5X2NvbXAodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9zdWNjZXNzKTsKKwliZmFfY2JfdHNraW1fZG9uZSh0c2tpbS0+YmZhLT5iZmFkLCB0c2tpbS0+ZHRzaywgdHNraW0tPnRza19zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfdHNraW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fZmFpbHVyZXMpOworCWJmYV9jYl90c2tpbV9kb25lKHRza2ltLT5iZmEtPmJmYWQsIHRza2ltLT5kdHNrLAorCQkJICAgQkZJX1RTS0lNX1NUU19GQUlMRUQpOworfQorCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX21hdGNoX3Njb3BlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGx1bl90IGx1bikKK3sKKwlzd2l0Y2ggKHRza2ltLT50bV9jbW5kKSB7CisJY2FzZSBGQ1BfVE1fVEFSR0VUX1JFU0VUOgorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwljYXNlIEZDUF9UTV9BQk9SVF9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9DTEVBUl9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9MVU5fUkVTRVQ6CisJY2FzZSBGQ1BfVE1fQ0xFQVJfQUNBOgorCQlyZXR1cm4gKHRza2ltLT5sdW4gPT0gbHVuKTsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJcmV0dXJuIEJGQV9GQUxTRTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCUlOSVRfTElTVF9IRUFEKCZ0c2tpbS0+aW9fcSk7CisKKwkvKioKKwkgKiBHYXRoZXIgYW55IGFjdGl2ZSBJTyByZXF1ZXN0cyBmaXJzdC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmdHNraW0tPmlvX3EpOworCQl9CisJfQorCisJLyoqCisJICogRmFpbGJhY2sgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgaW1tZWRpYXRlbHkuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+cGVuZGluZ19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKwkJCWJmYV9pb2ltX3Rvdihpb2ltKTsKKwkJfQorCX0KK30KKworLyoqCisgKiAJCUlPIGNsZWFudXAgY29tcGxldGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSB0c2tpbV9jYmFyZzsKKworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2lvX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0lPU19ET05FKTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFudXBfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJnRza2ltLT53YywgYmZhX3Rza2ltX2NsZWFucF9jb21wLCB0c2tpbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnRza2ltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV93Y191cCgmdHNraW0tPndjKTsKKwkJYmZhX2lvaW1fY2xlYW51cF90bShpb2ltLCB0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJnRza2ltLT53Yyk7Cit9CisKKy8qKgorICogICAgICBTZW5kIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX3NlbmQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmlfdHNraW1fcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfVE1fUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgPSBiZmFfb3NfaHRvbnModHNraW0tPnRza190YWcpOworCW0tPml0bl9maGRsID0gdHNraW0tPml0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCW0tPnRfc2VjcyA9IHRza2ltLT50c2VjczsKKwltLT5sdW4gPSB0c2tpbS0+bHVuOworCW0tPnRtX2ZsYWdzID0gdHNraW0tPnRtX2NtbmQ7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiAgICAgIFNlbmQgYWJvcnQgcmVxdWVzdCB0byBjbGVhbnVwIGFuIGFjdGl2ZSBUTSB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICAgICppdG5pbSA9IHRza2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX3Rza2ltX2Fib3J0cmVxX3MgICAgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfQUJPUlRfUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgID0gYmZhX29zX2h0b25zKHRza2ltLT50c2tfdGFnKTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZSh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqICAgICAgQ2FsbCB0byByZXN1bWUgdGFzayBtYW5hZ2VtZW50IGNtbmQgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJYmZhX2ZjcGltX3N0YXRzKHRza2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX3FyZXN1bWVzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX1FSRVNVTUUpOworfQorCisvKioKKyAqIENsZWFudXAgSU9zIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2sgbWFuZ2VtZW50IGNvbW1hbmQgb24gSU9DIGZhaWx1cmVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ0c2tpbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV9pb2NkaXNhYmxlKGlvaW0pOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9mcmllbmQKKyAqLworCisvKioKKyAqIE5vdGlmaWNhdGlvbiBvbiBjb21wbGV0aW9ucyBmcm9tIHJlbGF0ZWQgaW9pbS4KKyAqLwordm9pZAorYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCWJmYV93Y19kb3duKCZ0c2tpbS0+d2MpOworfQorCisvKioKKyAqIEhhbmRsZSBJT0MgaC93IGZhaWx1cmUgbm90aWZpY2F0aW9uIGZyb20gaXRuaW0uCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJdHNraW0tPm5vdGlmeSA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9pb2Nkb3ducyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIENsZWFudXAgVE0gY29tbWFuZCBhbmQgYXNzb2NpYXRlZCBJT3MgYXMgcGFydCBvZiBJVE5JTSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXRza2ltLT5ub3RpZnkgPSBCRkFfVFJVRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX3Rza2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJdTE2ICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT50c2tpbV9mcmVlX3EpOworCisJdHNraW0gPSAoc3RydWN0IGJmYV90c2tpbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPnRza2ltX2FyciA9IHRza2ltOworCisJZm9yIChpID0gMDsgaSA8IGZjcGltLT5udW1fdHNraW1fcmVxczsgaSsrLCB0c2tpbSsrKSB7CisJCS8qCisJCSAqIGluaXRpYWxpemUgVFNLSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQodHNraW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Rza2ltX3MpKTsKKwkJdHNraW0tPnRza190YWcgPSBpOworCQl0c2tpbS0+YmZhICAgICA9IGZjcGltLT5iZmE7CisJCXRza2ltLT5mY3BpbSAgID0gZmNwaW07CisJCXRza2ltLT5ub3RpZnkgID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93aW5pdCgmdHNraW0tPnJlcXFfd2FpdCwgYmZhX3Rza2ltX3FyZXN1bWUsCisJCQkJICAgdHNraW0pOworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fdW5pbml0KTsKKworCQlsaXN0X2FkZF90YWlsKCZ0c2tpbS0+cWUsICZmY3BpbS0+dHNraW1fZnJlZV9xKTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIHRza2ltOworfQorCit2b2lkCitiZmFfdHNraW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKQoreworICAgIC8qKgorICAgICAqIEB0b2RvCisgICAgICovCit9CisKK3ZvaWQKK2JmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmaV90c2tpbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfdHNraW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXUxNiAgICAgICAgdHNrX3RhZyA9IGJmYV9vc19udG9ocyhyc3AtPnRza190YWcpOworCisJdHNraW0gPSBCRkFfVFNLSU1fRlJPTV9UQUcoZmNwaW0sIHRza190YWcpOworCWJmYV9hc3NlcnQodHNraW0tPnRza190YWcgPT0gdHNrX3RhZyk7CisKKwl0c2tpbS0+dHNrX3N0YXR1cyA9IHJzcC0+dHNrX3N0YXR1czsKKworCS8qKgorCSAqIEZpcm13YXJlIHNlbmRzIEJGSV9UU0tJTV9TVFNfQUJPUlRFRCBzdGF0dXMgZm9yIGFib3J0CisJICogcmVxdWVzdHMuIEFsbCBvdGhlciBzdGF0dXNlcyBhcmUgZm9yIG5vcm1hbCBjb21wbGV0aW9ucy4KKwkgKi8KKwlpZiAocnNwLT50c2tfc3RhdHVzID09IEJGSV9UU0tJTV9TVFNfQUJPUlRFRCkgeworCQliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUpOworCX0gZWxzZSB7CisJCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2Z3X3JzcHMpOworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0RPTkUpOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9hcGkKKyAqLworCisKK3N0cnVjdCBiZmFfdHNraW1fcyAqCitiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2spCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKworCWJmYV9xX2RlcSgmZmNwaW0tPnRza2ltX2ZyZWVfcSwgJnRza2ltKTsKKworCWlmICghdHNraW0pCisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgbm9fdHNraW1zKTsKKwllbHNlCisJCXRza2ltLT5kdHNrID0gZHRzazsKKworCXJldHVybiB0c2tpbTsKK30KKwordm9pZAorYmZhX3Rza2ltX2ZyZWUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3FfZnVuYygmdHNraW0tPml0bmltLT50c2tfcSwgJnRza2ltLT5xZSkpOworCWxpc3RfZGVsKCZ0c2tpbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJnRza2ltLT5mY3BpbS0+dHNraW1fZnJlZV9xKTsKK30KKworLyoqCisgKiAgICAgIFN0YXJ0IGEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQuCisgKgorICogQHBhcmFtW2luXSAgICAgICB0c2tpbSAgICAgICBCRkEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gICAgICAgaXRuaW0gICAgICAgaS10IG5leHVzIGZvciB0aGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQKKyAqIEBwYXJhbVtpbl0gICAgICAgbHVuICAgICAgICAgbHVuLCBpZiBhcHBsaWNhYmxlCisgKiBAcGFyYW1baW5dICAgICAgIHRtX2NtbmQgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGNvZGUuCisgKiBAcGFyYW1baW5dICAgICAgIHRfc2VjcyAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcworICoKKyAqIEByZXR1cm4gTm9uZS4KKyAqLwordm9pZAorYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGx1bl90IGx1biwKKwkJICAgIGVudW0gZmNwX3RtX2NtbmQgdG1fY21uZCwgdTggdHNlY3MpCit7CisJdHNraW0tPml0bmltICAgPSBpdG5pbTsKKwl0c2tpbS0+bHVuICAgICA9IGx1bjsKKwl0c2tpbS0+dG1fY21uZCA9IHRtX2NtbmQ7CisJdHNraW0tPnRzZWNzICAgPSB0c2VjczsKKwl0c2tpbS0+bm90aWZ5ICA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHMoaXRuaW0sIHRtX2NtbmRzKTsKKworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJml0bmltLT50c2tfcSk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9TVEFSVCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3VmLmMgQkZBIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgVUYpOworQkZBX01PRFVMRSh1Zik7CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludGVybmFsIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0YXRpYyB2b2lkCitfX2JmYV9jYl91Zl9yZWN2KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZiA9IGNiYXJnOworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QodWYtPmJmYSk7CisKKwlpZiAoY29tcGxldGUpCisJCXVmbS0+dWZyZWN2KHVmbS0+Y2JhcmcsIHVmKTsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX3VmX3BicyhzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1MzIgICAgICAgIHVmX3BiX3RvdF9zejsKKworCXVmbS0+dWZfcGJzX2t2YSA9IChzdHJ1Y3QgYmZhX3VmX2J1Zl9zICopIGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwl1Zm0tPnVmX3Bic19wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKwl1Zl9wYl90b3Rfc3ogPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogdWZtLT5udW1fdWZzKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKSArPSB1Zl9wYl90b3Rfc3o7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWkpICs9IHVmX3BiX3RvdF9zejsKKworCWJmYV9vc19tZW1zZXQoKHZvaWQgKil1Zm0tPnVmX3Bic19rdmEsIDAsIHVmX3BiX3RvdF9zeik7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV91Zl9wb3N0X21zZ3Moc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9icF9tc2c7CisJc3RydWN0IGJmaV9zZ2VfcyAgICAgICpzZ2U7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIHNnYV96ZXJvID0geyB7MH0gfTsKKwl1MTYgICAgICAgIGk7CisJdTE2ICAgICAgICBidWZfbGVuOworCisJdWZtLT51Zl9idWZfcG9zdHMgPSAoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICopIGJmYV9tZW1pbmZvX2t2YShtaSk7CisJdWZfYnBfbXNnID0gdWZtLT51Zl9idWZfcG9zdHM7CisKKwlmb3IgKGkgPSAwLCB1Zl9icF9tc2cgPSB1Zm0tPnVmX2J1Zl9wb3N0czsgaSA8IHVmbS0+bnVtX3VmczsKKwkgICAgIGkrKywgdWZfYnBfbXNnKyspIHsKKwkJYmZhX29zX21lbXNldCh1Zl9icF9tc2csIDAsIHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpKTsKKworCQl1Zl9icF9tc2ctPmJ1Zl90YWcgPSBpOworCQlidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpOworCQl1Zl9icF9tc2ctPmJ1Zl9sZW4gPSBiZmFfb3NfaHRvbnMoYnVmX2xlbik7CisJCWJmaV9oMmlfc2V0KHVmX2JwX21zZy0+bWgsIEJGSV9NQ19VRiwgQkZJX1VGX0gySV9CVUZfUE9TVCwKKwkJCSAgICBiZmFfbHB1aWQodWZtLT5iZmEpKTsKKworCQlzZ2UgPSB1Zl9icF9tc2ctPnNnZTsKKwkJc2dlWzBdLnNnX2xlbiA9IGJ1Zl9sZW47CisJCXNnZVswXS5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQliZmFfZG1hX2FkZHJfc2V0KHNnZVswXS5zZ2EsIHVmbV9wYnNfcGEodWZtLCBpKSk7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKworCQlzZ2VbMV0uc2dfbGVuID0gYnVmX2xlbjsKKwkJc2dlWzFdLmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJCXNnZVsxXS5zZ2EgPSBzZ2FfemVybzsKKwkJYmZhX3NnZV90b19iZSgmc2dlWzFdKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIHBvaW50ZXIgYmV5b25kIGNvbnN1bWVkIG1lbW9yeQorCSAqLworCWJmYV9tZW1pbmZvX2t2YShtaSkgPSAodTggKikgdWZfYnBfbXNnOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fdWZzKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXUxNiAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisKKwkvKgorCSAqIENsYWltIGJsb2NrIG9mIG1lbW9yeSBmb3IgVUYgbGlzdAorCSAqLworCXVmbS0+dWZfbGlzdCA9IChzdHJ1Y3QgYmZhX3VmX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBVRnMgYW5kIHF1ZXVlIGl0IGluIFVGIGZyZWUgcXVldWUKKwkgKi8KKwlmb3IgKGkgPSAwLCB1ZiA9IHVmbS0+dWZfbGlzdDsgaSA8IHVmbS0+bnVtX3VmczsgaSsrLCB1ZisrKSB7CisJCWJmYV9vc19tZW1zZXQodWYsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3VmX3MpKTsKKwkJdWYtPmJmYSA9IHVmbS0+YmZhOworCQl1Zi0+dWZfdGFnID0gaTsKKwkJdWYtPnBiX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKTsKKwkJdWYtPmJ1Zl9rdmEgPSAodm9pZCAqKSZ1Zm0tPnVmX3Bic19rdmFbaV07CisJCXVmLT5idWZfcGEgPSB1Zm1fcGJzX3BhKHVmbSwgaSk7CisJCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmbS0+dWZfZnJlZV9xKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIG1lbW9yeSBwb2ludGVyCisJICovCisJYmZhX21lbWluZm9fa3ZhKG1pKSA9ICh1OCAqKSB1ZjsKK30KKworc3RhdGljIHZvaWQKK3VmX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwljbGFpbV91Zl9wYnModWZtLCBtaSk7CisJY2xhaW1fdWZzKHVmbSwgbWkpOworCWNsYWltX3VmX3Bvc3RfbXNncyh1Zm0sIG1pKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLCB1MzIgKmRtX2xlbikKK3sKKwl1MzIgICAgICAgIG51bV91ZnMgPSBjZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCisJLyoKKwkgKiBkbWEtYWJsZSBtZW1vcnkgZm9yIFVGIHBvc3RlZCBidWZzCisJICovCisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogbnVtX3VmcyksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIGtlcm5lbCBWaXJ0dWFsIG1lbW9yeSBmb3IgVUZzIGFuZCBVRiBidWYgcG9zdCBtc2cgY29waWVzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfcykgKiBudW1fdWZzOworCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpICogbnVtX3VmczsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQodWZtLCAwLCBzaXplb2Yoc3RydWN0IGJmYV91Zl9tb2RfcykpOworCXVmbS0+YmZhID0gYmZhOworCXVmbS0+bnVtX3VmcyA9IGNmZy0+ZndjZmcubnVtX3VmX2J1ZnM7CisJSU5JVF9MSVNUX0hFQUQoJnVmbS0+dWZfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmdWZtLT51Zl9wb3N0ZWRfcSk7CisKKwl1Zl9tZW1fY2xhaW0odWZtLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3VmX3MgKgorYmZhX3VmX2dldChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJYmZhX3FfZGVxKCZ1Zl9tb2QtPnVmX2ZyZWVfcSwgJnVmKTsKKwlyZXR1cm4gKHVmKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wdXQoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZfbW9kLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmX21vZC0+dWZfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhX3VmX3Bvc3Qoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqdWZfcG9zdF9tc2c7CisKKwl1Zl9wb3N0X21zZyA9IGJmYV9yZXFxX25leHQodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCWlmICghdWZfcG9zdF9tc2cpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWJmYV9vc19tZW1jcHkodWZfcG9zdF9tc2csICZ1Zm0tPnVmX2J1Zl9wb3N0c1t1Zi0+dWZfdGFnXSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcykpOworCWJmYV9yZXFxX3Byb2R1Y2UodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyh1Zm0tPmJmYSwgdWYtPnVmX3RhZyk7CisKKwlsaXN0X2FkZF90YWlsKCZ1Zi0+cWUsICZ1Zm0tPnVmX3Bvc3RlZF9xKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wb3N0X2FsbChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJd2hpbGUgKCh1ZiA9IGJmYV91Zl9nZXQodWZfbW9kKSkgIT0gTlVMTCkgeworCQlpZiAoYmZhX3VmX3Bvc3QodWZfbW9kLCB1ZikgIT0gQkZBX1NUQVRVU19PSykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VmX3JlY3Yoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisJdTE2ICAgICAgICB1Zl90YWcgPSBtLT5idWZfdGFnOworCXN0cnVjdCBiZmFfdWZfYnVmX3MgKnVmX2J1ZiA9ICZ1Zm0tPnVmX3Bic19rdmFbdWZfdGFnXTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWYgPSAmdWZtLT51Zl9saXN0W3VmX3RhZ107CisJdTggICAgICAgICpidWYgPSAmdWZfYnVmLT5kWzBdOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAqZmNoczsKKworCW0tPmZybV9sZW4gPSBiZmFfb3NfbnRvaHMobS0+ZnJtX2xlbik7CisJbS0+eGZyX2xlbiA9IGJmYV9vc19udG9ocyhtLT54ZnJfbGVuKTsKKworCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSB1Zl9idWY7CisKKwlsaXN0X2RlbCgmdWYtPnFlKTsJLyogZGVxdWV1ZSBmcm9tIHBvc3RlZCBxdWV1ZSAqLworCisJdWYtPmRhdGFfcHRyID0gYnVmOworCXVmLT5kYXRhX2xlbiA9IG0tPnhmcl9sZW47CisKKwliZmFfYXNzZXJ0KHVmLT5kYXRhX2xlbiA+PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCisJaWYgKHVmLT5kYXRhX2xlbiA9PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpIHsKKwkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICB1Zi0+ZGF0YV9sZW4sIChzdHJ1Y3QgZmNoc19zICopIGJ1Zik7CisJfSBlbHNlIHsKKwkJdTMyICAgICAgICBwbGRfdzAgPSAqKCh1MzIgKikgKGJ1ZiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSkpOworCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwKKwkJCQkgICAgICBCRkFfUExfRUlEX1JYLCB1Zi0+ZGF0YV9sZW4sCisJCQkJICAgICAgKHN0cnVjdCBmY2hzX3MgKikgYnVmLCBwbGRfdzApOworCX0KKworCWJmYV9jYl9xdWV1ZShiZmEsICZ1Zi0+aGNiX3FlLCBfX2JmYV9jYl91Zl9yZWN2LCB1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ1Zm0tPnVmX3Bvc3RlZF9xKSB7CisJCXVmID0gKHN0cnVjdCBiZmFfdWZfcyAqKSBxZTsKKwkJbGlzdF9kZWwoJnVmLT5xZSk7CisJCWJmYV91Zl9wdXQodWZtLCB1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV91Zl9wb3N0X2FsbChCRkFfVUZfTU9EKGJmYSkpOworfQorCisKKworLyoqCisgKiAgYmZhX3VmX2FwaQorICovCisKKy8qKgorICogCQlSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNpZXZlIGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCXVmcmVjdglyZWNlaXZlIGhhbmRsZXIgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0JY2JhcmcJcmVjZWl2ZSBoYW5kbGVyIGFyZworICovCit2b2lkCitiZmFfdWZfcmVjdl9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3YsIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCXVmbS0+dWZyZWN2ID0gdWZyZWN2OworCXVmbS0+Y2JhcmcgPSBjYmFyZzsKK30KKworLyoqCisgKiAJCUZyZWUgYW4gdW5zb2xpY2l0ZWQgZnJhbWUgYmFjayB0byBCRkEuCisgKgorICogQHBhcmFtW2luXQkJdWYJCXVuc29saWNpdGVkIGZyYW1lIHRvIGJlIGZyZWVkCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV91Zl9mcmVlKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJYmZhX3VmX3B1dChCRkFfVUZfTU9EKHVmLT5iZmEpLCB1Zik7CisJYmZhX3VmX3Bvc3RfYWxsKEJGQV9VRl9NT0QodWYtPmJmYSkpOworfQorCisKKworLyoqCisgKiAgdWZfcHViIEJGQSB1ZiBtb2R1bGUgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKK3sKKwliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG1zZy0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9VRl9JMkhfRlJNX1JDVkQ6CisJCXVmX3JlY3YoYmZhLCAoc3RydWN0IGJmaV91Zl9mcm1fcmN2ZF9zICopIG1zZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNDkwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmX3ByaXYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1VGX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1VGX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV91Zi5oPgorCisjZGVmaW5lIEJGQV9VRl9NSU4JKDQpCisKK3N0cnVjdCBiZmFfdWZfbW9kX3MgeworCXN0cnVjdCBiZmFfcyAqYmZhOwkJLyogIGJhY2sgcG9pbnRlciB0byBCRkEgKi8KKwlzdHJ1Y3QgYmZhX3VmX3MgKnVmX2xpc3Q7CS8qICBhcnJheSBvZiBVRnMgKi8KKwl1MTYJbnVtX3VmczsJLyogIG51bSB1bnNvbGljaXRlZCByeCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAl1Zl9mcmVlX3E7CS8qICBmcmVlIFVGcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXVmX3Bvc3RlZF9xOwkvKiAgVUZzIHBvc3RlZCB0byBJT0MgKi8KKwlzdHJ1Y3QgYmZhX3VmX2J1Zl9zICp1Zl9wYnNfa3ZhOwkvKiAgbGlzdCBVRiBidWZzIHJlcXVlc3QgcGxkICovCisJdTY0CXVmX3Bic19wYTsJLyogIHBoeSBhZGRyIGZvciBVRiBidWZzICovCisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9idWZfcG9zdHM7CisJCQkJCS8qICBwcmUtYnVpbHQgVUYgcG9zdCBtc2dzICovCisJYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3Y7CS8qICB1ZiByZWN2IGhhbmRsZXIgZnVuY3Rpb24gKi8KKwl2b2lkCQkqY2Jhcmc7CQkvKiAgdWYgcmVjZWl2ZSBoYW5kbGVyIGFyZyAqLworfTsKKworI2RlZmluZSBCRkFfVUZfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMudWZfbW9kKQorCisjZGVmaW5lIHVmbV9wYnNfcGEoX3VmbW9kLCBfdWZ0YWcpCVwKKwkoKF91Zm1vZCktPnVmX3Bic19wYSArIHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKSAqIChfdWZ0YWcpKQorCit2b2lkCWJmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9VRl9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTAsMCArMSwxMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWQuYyBMaW51eCBkcml2ZXIgUENJIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdG0uaCIKKyNpbmNsdWRlICJiZmFkX2lwZmMuaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3ZmLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9wb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2IuaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIEJGQUQpOworc3RhdGljIERFRklORV9NVVRFWChiZmFkX211dGV4KTsKK0xJU1RfSEVBRChiZmFkX2xpc3QpOworc3RhdGljIGludCAgICAgIGJmYWRfaW5zdDsKK2ludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworCitzdGF0aWMgY2hhciAgICAgKmhvc3RfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfcGF0Y2g7CitzdGF0aWMgaW50ICAgICAgbnVtX3Jwb3J0czsKK3N0YXRpYyBpbnQgICAgICBudW1faW9zOworc3RhdGljIGludCAgICAgIG51bV90bXM7CitzdGF0aWMgaW50ICAgICAgbnVtX2ZjeHBzOworc3RhdGljIGludCAgICAgIG51bV91ZmJ1ZnM7CitzdGF0aWMgaW50ICAgICAgcmVxcV9zaXplOworc3RhdGljIGludCAgICAgIHJzcHFfc2l6ZTsKK3N0YXRpYyBpbnQgICAgICBudW1fc2dwZ3M7CitzdGF0aWMgaW50ICAgICAgcnBvcnRfZGVsX3RpbWVvdXQgPSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVDsKK3N0YXRpYyBpbnQgICAgICBiZmFfaW9fbWF4X3NnZSA9IEJGQURfSU9fTUFYX1NHRTsKK3N0YXRpYyBpbnQgICAgICBsb2dfbGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CitzdGF0aWMgaW50ICAgICAgaW9jX2F1dG9fcmVjb3ZlciA9IEJGQV9UUlVFOworc3RhdGljIGludCAgICAgIGlwZmNfZW5hYmxlID0gQkZBX0ZBTFNFOworc3RhdGljIGludCAgICAgIGlwZmNfbXR1ID0gLTE7CitpbnQgCQliZmFfbHVuX3F1ZXVlX2RlcHRoID0gQkZBRF9MVU5fUVVFVUVfREVQVEg7CitpbnQgICAgICAJYmZhX2xpbmt1cF9kZWxheSA9IC0xOworCittb2R1bGVfcGFyYW0ob3NfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShvc19wYXRjaCwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShob3N0X25hbWUsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3Jwb3J0cywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2lvcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3RtcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2ZjeHBzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fdWZidWZzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShyZXFxX3NpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKHJzcHFfc2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3NncGdzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShycG9ydF9kZWxfdGltZW91dCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2x1bl9xdWV1ZV9kZXB0aCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2lvX21heF9zZ2UsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGxvZ19sZXZlbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaW9jX2F1dG9fcmVjb3ZlciwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaXBmY19lbmFibGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGlwZmNfbXR1LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShiZmFfbGlua3VwX2RlbGF5LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworLyoKKyAqIFN0b3JlcyB0aGUgbW9kdWxlIHBhcm0gbnVtX3NncGdzIHZhbHVlOworICogdXNlZCB0byByZXNldCBmb3IgYmZhZCBuZXh0IGluc3RhbmNlLgorICovCitzdGF0aWMgaW50IG51bV9zZ3Bnc19wYXJtOworCitzdGF0aWMgYmZhX3N0YXR1c190CitiZmFkX2ZjNF9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICByYzsKKworCXJjID0gYmZhZF9pbV9wcm9iZShiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX3Byb2JlKGJmYWQpOworCisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmUoYmZhZCk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcHJvYmVfdW5kbyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWJmYWRfaW1fcHJvYmVfdW5kbyhiZmFkKTsKKwliZmFkX3RtX3Byb2JlX3VuZG8oYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfdW5kbyhiZmFkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYWRfZmM0X3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pCisJCWJmYWRfaW1fcHJvYmVfcG9zdChiZmFkLT5pbSk7CisKKwliZmFkX3RtX3Byb2JlX3Bvc3QoYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfcG9zdChiZmFkKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9mYzRfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJcmMgPSBiZmFkX2ltX3BvcnRfbmV3KGJmYWQsIHBvcnQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlyYyA9IGJmYWRfdG1fcG9ydF9uZXcoYmZhZCwgcG9ydCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQlyYyA9IGJmYWRfaXBmY19wb3J0X25ldyhiZmFkLCBwb3J0LCBwb3J0LT5wdmJfdHlwZSk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9kZWxldGUoYmZhZCwgcG9ydCk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0KTsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsIHBvcnQpOworfQorCisvKioKKyAqICBCRkEgY2FsbGJhY2tzCisgKi8KK3ZvaWQKK2JmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFkX2hhbF9jb21wICpmY29tcCA9IChzdHJ1Y3QgYmZhZF9oYWxfY29tcCAqKWFyZzsKKworCWZjb21wLT5zdGF0dXMgPSBzdGF0dXM7CisJY29tcGxldGUoJmZjb21wLT5jb21wKTsKK30KKworLyoqCisgKiBiZmFfaW5pdCBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfaW5pdCh2b2lkICpkcnYsIGJmYV9zdGF0dXNfdCBpbml0X3N0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IGRydjsKKworCWlmIChpbml0X3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfSEFMX0lOSVRfRE9ORTsKKworCWNvbXBsZXRlKCZiZmFkLT5jb21wKTsKK30KKworCisKKy8qKgorICogIEJGQV9GQ1MgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhZF9nZXRfZHJ2X3BvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LAorCQkgIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlyZXR1cm4gKCh2cF9kcnYpID8gKCYodnBfZHJ2KS0+ZHJ2X3BvcnQpCisJCTogKCh2Zl9kcnYpID8gKCYodmZfZHJ2KS0+YmFzZV9wb3J0KSA6ICgmKGJmYWQpLT5wcG9ydCkpKTsKK30KKworc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYV9mY2JfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCSBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnY7CisKKwlpZiAoIXZwX2RydiAmJiAhdmZfZHJ2KSB7CisJCXBvcnRfZHJ2ID0gJmJmYWQtPnBwb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfUEhZU19CQVNFOworCX0gZWxzZSBpZiAoIXZwX2RydiAmJiB2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdmZfZHJ2LT5iYXNlX3BvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9WRl9CQVNFOworCX0gZWxzZSBpZiAodnBfZHJ2ICYmICF2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1BIWVNfVlBPUlQ7CisJfSBlbHNlIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1ZGX1ZQT1JUOworCX0KKworCXBvcnRfZHJ2LT5mY3NfcG9ydCA9IHBvcnQ7CisJcG9ydF9kcnYtPnJvbGVzID0gcm9sZXM7CisJcmMgPSBiZmFkX2ZjNF9wb3J0X25ldyhiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYWRfZmM0X3BvcnRfZGVsZXRlKGJmYWQsIHBvcnRfZHJ2LCByb2xlcyk7CisJCXBvcnRfZHJ2ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9ydF9kcnY7Cit9CisKK3ZvaWQKK2JmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydjsKKworCS8qCisJICogdGhpcyB3aWxsIGJlIG9ubHkgY2FsbGVkIGZyb20gcm1tb2QgY29udGV4dAorCSAqLworCWlmICh2cF9kcnYgJiYgIXZwX2Rydi0+Y29tcF9kZWwpIHsKKwkJcG9ydF9kcnYgPSBiZmFkX2dldF9kcnZfcG9ydChiZmFkLCB2Zl9kcnYsIHZwX2Rydik7CisJCWJmYV90cmMoYmZhZCwgcm9sZXMpOworCQliZmFkX2ZjNF9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCX0KK30KKwordm9pZAorYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2ID0gYmZhZF9nZXRfZHJ2X3BvcnQoYmZhZCwgdmZfZHJ2LCB2cF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCWJmYWRfdG1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1BPUlRfT05MSU5FOworfQorCit2b2lkCitiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydiA9IGJmYWRfZ2V0X2Rydl9wb3J0KGJmYWQsIHZmX2RydiwgdnBfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQliZmFkX2ltX3BvcnRfb2ZmbGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X29mZmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vZmZsaW5lKGJmYWQsIHBvcnRfZHJ2KTsKK30KKwordm9pZAorYmZhX2ZjYl92cG9ydF9kZWxldGUoc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KQoreworCWlmICh2cG9ydF9kcnYtPmNvbXBfZGVsKSB7CisJCWNvbXBsZXRlKHZwb3J0X2Rydi0+Y29tcF9kZWwpOworCQlyZXR1cm47CisJfQorCisJa2ZyZWUodnBvcnRfZHJ2KTsKK30KKworLyoqCisgKiBGQ1MgUlBPUlQgYWxsb2MgY2FsbGJhY2ssIGFmdGVyIHN1Y2Nlc3NmdWwgUExPR0kgYnkgRkNTCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoqcnBvcnQsCisJCSAgICBzdHJ1Y3QgYmZhZF9ycG9ydF9zICoqcnBvcnRfZHJ2KQoreworCWJmYV9zdGF0dXNfdCAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkqcnBvcnRfZHJ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfcnBvcnRfcyksIEdGUF9BVE9NSUMpOworCWlmICgqcnBvcnRfZHJ2ID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJKnJwb3J0ID0gJigqcnBvcnRfZHJ2KS0+ZmNzX3Jwb3J0OworCitleHQ6CisJcmV0dXJuIHJjOworfQorCisKKwordm9pZAorYmZhZF9oYWxfbWVtX3JlbGVhc2Uoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlpZiAobWVtaW5mb19lbGVtLT5rdmEgIT0gTlVMTCkgeworCQkJc3dpdGNoIChtZW1pbmZvX2VsZW0tPm1lbV90eXBlKSB7CisJCQljYXNlIEJGQV9NRU1fVFlQRV9LVkE6CisJCQkJdmZyZWUobWVtaW5mb19lbGVtLT5rdmEpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRkFfTUVNX1RZUEVfRE1BOgorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZiZmFkLT5wY2lkZXYtPmRldiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+bWVtX2xlbiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+a3ZhLAorCQkJCQkJKGRtYV9hZGRyX3QpIG1lbWluZm9fZWxlbS0+ZG1hKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYmZhX2Fzc2VydCgwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW1lbXNldChoYWxfbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7Cit9CisKK3ZvaWQKK2JmYWRfdXBkYXRlX2hhbF9jZmcoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqYmZhX2NmZykKK3sKKwlpZiAobnVtX3Jwb3J0cyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPSBudW1fcnBvcnRzOworCWlmIChudW1faW9zID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IG51bV9pb3M7CisJaWYgKG51bV90bXMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IG51bV90bXM7CisJaWYgKG51bV9mY3hwcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgPSBudW1fZmN4cHM7CisJaWYgKG51bV91ZmJ1ZnMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdWZfYnVmcyA9IG51bV91ZmJ1ZnM7CisJaWYgKHJlcXFfc2l6ZSA+IDApCisJCWJmYV9jZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyA9IHJlcXFfc2l6ZTsKKwlpZiAocnNwcV9zaXplID4gMCkKKwkJYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gcnNwcV9zaXplOworCWlmIChudW1fc2dwZ3MgPiAwKQorCQliZmFfY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gbnVtX3NncGdzOworCisJLyoKKwkgKiBwb3B1bGF0ZSB0aGUgaGFsIHZhbHVlcyBiYWNrIHRvIHRoZSBkcml2ZXIgZm9yIHN5c2ZzIHVzZS4KKwkgKiBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHNob3duIGFzIDAgaW4gc3lzZnMKKwkgKi8KKwludW1fcnBvcnRzID0gYmZhX2NmZy0+ZndjZmcubnVtX3Jwb3J0czsKKwludW1faW9zICAgID0gYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwludW1fdG1zCSAgID0gYmZhX2NmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXM7CisJbnVtX2ZjeHBzICA9IGJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisJbnVtX3VmYnVmcyA9IGJmYV9jZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCXJlcXFfc2l6ZSAgPSBiZmFfY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXM7CisJcnNwcV9zaXplICA9IGJmYV9jZmctPmRydmNmZy5udW1fcnNwcV9lbGVtczsKKwludW1fc2dwZ3MgID0gYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9zZ3BnczsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2hhbF9tZW1fYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCWRtYV9hZGRyX3QgICAgICBwaHlzX2FkZHI7CisJaW50ICAgICAgICAgICAgIHJldHJ5X2NvdW50ID0gMDsKKwlpbnQgICAgICAgICAgICAgcmVzZXRfdmFsdWUgPSAxOworCWludCAgICAgICAgICAgICBtaW5fbnVtX3NncGdzID0gNTEyOworCXZvaWQgICAgICAgICAgICprdmE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfY2ZnX2dldF9kZWZhdWx0KCZiZmFkLT5pb2NfY2ZnKTsKKworcmV0cnk6CisJYmZhZF91cGRhdGVfaGFsX2NmZygmYmZhZC0+aW9jX2NmZyk7CisJYmZhZC0+Y2ZnX2RhdGEuaW9jX3F1ZXVlX2RlcHRoID0gYmZhZC0+aW9jX2NmZy5md2NmZy5udW1faW9pbV9yZXFzOworCWJmYV9jZmdfZ2V0X21lbWluZm8oJmJmYWQtPmlvY19jZmcsIGhhbF9tZW1pbmZvKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlzd2l0Y2ggKG1lbWluZm9fZWxlbS0+bWVtX3R5cGUpIHsKKwkJY2FzZSBCRkFfTUVNX1RZUEVfS1ZBOgorCQkJa3ZhID0gdm1hbGxvYyhtZW1pbmZvX2VsZW0tPm1lbV9sZW4pOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJCQlnb3RvIGV4dDsKKwkJCX0KKwkJCW1lbXNldChrdmEsIDAsIG1lbWluZm9fZWxlbS0+bWVtX2xlbik7CisJCQltZW1pbmZvX2VsZW0tPmt2YSA9IGt2YTsKKwkJCWJyZWFrOworCQljYXNlIEJGQV9NRU1fVFlQRV9ETUE6CisJCQlrdmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJmYWQtPnBjaWRldi0+ZGV2LAorCQkJCQltZW1pbmZvX2VsZW0tPm1lbV9sZW4sCisJCQkJCSZwaHlzX2FkZHIsIEdGUF9LRVJORUwpOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgd2l0aCBkZWZhdWx0CisJCQkJICogbnVtX3NncGFnZXMgdHJ5IHdpdGggaGFsZiB0aGUgdmFsdWUuCisJCQkJICovCisJCQkJaWYgKG51bV9zZ3BncyA+IG1pbl9udW1fc2dwZ3MpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IG1lbW9yeSIKKwkJCQkJCSIgYWxsb2NhdGlvbiBmYWlsZWQgd2l0aCIKKwkJCQkJCSIgbnVtX3NncGdzOiAlZFxuIiwKKwkJCQkJCWJmYWQtPmluc3Rfbm8sIG51bV9zZ3Bncyk7CisJCQkJCW5leHRMb3dlckludCgmbnVtX3NncGdzKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IHRyeWluZyB0byIKKwkJCQkJCSIgYWxsb2NhdGUgbWVtb3J5IHdpdGgiCisJCQkJCQkiIG51bV9zZ3BnczogJWRcbiIsCisJCQkJCQliZmFkLT5pbnN0X25vLCBudW1fc2dwZ3MpOworCQkJCQlyZXRyeV9jb3VudCsrOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChudW1fc2dwZ3NfcGFybSA+IDApCisJCQkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCQkJZWxzZSB7CisJCQkJCQlyZXNldF92YWx1ZSA9CisJCQkJCQkJKDEgPDwgcmV0cnlfY291bnQpOworCQkJCQkJbnVtX3NncGdzICo9IHJlc2V0X3ZhbHVlOworCQkJCQl9CisJCQkJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCQkJCWdvdG8gZXh0OworCQkJCX0KKwkJCX0KKworCQkJaWYgKG51bV9zZ3Bnc19wYXJtID4gMCkKKwkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3ZhbHVlID0gKDEgPDwgcmV0cnlfY291bnQpOworCQkJCW51bV9zZ3BncyAqPSByZXNldF92YWx1ZTsKKwkJCX0KKworCQkJbWVtc2V0KGt2YSwgMCwgbWVtaW5mb19lbGVtLT5tZW1fbGVuKTsKKwkJCW1lbWluZm9fZWxlbS0+a3ZhID0ga3ZhOworCQkJbWVtaW5mb19lbGVtLT5kbWEgPSBwaHlzX2FkZHI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwl9CitleHQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIENyZWF0ZSBhIHZwb3J0IHVuZGVyIGEgdmYuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7CisJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnQ7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGNvbXBsZXRpb24gZmNvbXA7CisKKwl2cG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3Zwb3J0X3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwb3J0KSB7CisJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCWdvdG8gZXh0OworCX0KKworCXZwb3J0LT5kcnZfcG9ydC5iZmFkID0gYmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfZmNzX3Zwb3J0X2NyZWF0ZSgmdnBvcnQtPmZjc192cG9ydCwgJmJmYWQtPmJmYV9mY3MsIHZmX2lkLAorCQkJCSAgcG9ydF9jZmcsIHZwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dF9mcmVlX3Zwb3J0OworCisJaWYgKHBvcnRfY2ZnLT5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKSB7CisJCXJjID0gYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2MoYmZhZCwgdnBvcnQtPmRydl9wb3J0LmltX3BvcnQpOworCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJCWdvdG8gZXh0X2ZyZWVfZmNzX3Zwb3J0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3Zwb3J0X3N0YXJ0KCZ2cG9ydC0+ZmNzX3Zwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitleHRfZnJlZV9mY3NfdnBvcnQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXZwb3J0LT5jb21wX2RlbCA9ICZmY29tcDsKKwlpbml0X2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKKwliZmFfZmNzX3Zwb3J0X2RlbGV0ZSgmdnBvcnQtPmZjc192cG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbih2cG9ydC0+Y29tcF9kZWwpOworZXh0X2ZyZWVfdnBvcnQ6CisJa2ZyZWUodnBvcnQpOworZXh0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBDcmVhdGUgYSB2ZiBhbmQgaXRzIGJhc2UgdnBvcnQgaW1wbGljaXRlbHkuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCSAgICAgICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKQoreworCXN0cnVjdCBiZmFkX3ZmX3MgKnZmOworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwl2ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3ZmX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZmKSB7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWdvdG8gZXh0OworCX0KKworCXJjID0gYmZhX2Zjc192Zl9jcmVhdGUoJnZmLT5mY3NfdmYsICZiZmFkLT5iZmFfZmNzLCB2Zl9pZCwgcG9ydF9jZmcsCisJCQkgICAgICAgdmYpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlrZnJlZSh2Zik7CitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2JmYV90bW8odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBkb25lcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYV90aW1lcl90aWNrKCZiZmFkLT5iZmEpOworCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX2NvbXBfZnJlZSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl9CisKKwltb2RfdGltZXIoJmJmYWQtPmhhbF90bW8sIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJGQV9USU1FUl9GUkVRKSk7Cit9CisKK3ZvaWQKK2JmYWRfaW5pdF90aW1lcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWluaXRfdGltZXIoJmJmYWQtPmhhbF90bW8pOworCWJmYWQtPmhhbF90bW8uZnVuY3Rpb24gPSBiZmFkX2JmYV90bW87CisJYmZhZC0+aGFsX3Rtby5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYmZhZDsKKworCW1vZF90aW1lcigmYmZhZC0+aGFsX3RtbywgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkZBX1RJTUVSX0ZSRVEpKTsKK30KKworaW50CitiZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXVuc2lnbmVkIGxvbmcgICBiYXIwX2xlbjsKKwlpbnQgICAgICAgICAgICAgcmMgPSAtRU5PREVWOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCUJGQV9QUklOVEYoQkZBX0VSUiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWwgJXBcbiIsIHBkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBCRkFEX0RSSVZFUl9OQU1FKSkKKwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgeworCQkJQkZBX1BSSU5URihCRkFfRVJSLCAicGNpX3NldF9kbWFfbWFzayBmYWlsICVwXG4iLCBwZGV2KTsKKwkJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCQl9CisKKwliZmFkLT5wY2lfYmFyMF9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJYmFyMF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWJmYWQtPnBjaV9iYXIwX2t2YSA9IGlvcmVtYXAoYmZhZC0+cGNpX2JhcjBfbWFwLCBiYXIwX2xlbik7CisKKwlpZiAoYmZhZC0+cGNpX2JhcjBfa3ZhID09IE5VTEwpIHsKKwkJQkZBX1BSSU5URihCRkFfRVJSLCAiRmFpbCB0byBtYXAgYmFyMFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCX0KKworCWJmYWQtPmhhbF9wY2lkZXYucGNpX3Nsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisJYmZhZC0+aGFsX3BjaWRldi5wY2lfZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKwliZmFkLT5oYWxfcGNpZGV2LnBjaV9iYXJfa3ZhID0gYmZhZC0+cGNpX2JhcjBfa3ZhOworCWJmYWQtPmhhbF9wY2lkZXYuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9uYW1lID0gcGNpX25hbWUocGRldik7CisKKwliZmFkLT5wY2lfYXR0ci52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CisJYmZhZC0+cGNpX2F0dHIuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzdmlkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwliZmFkLT5wY2lfYXR0ci5wY2lmbiA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCWJmYWQtPnBjaWRldiA9IHBkZXY7CisJcmV0dXJuIDA7CisKK291dF9yZWxlYXNlX3JlZ2lvbjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworb3V0X2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyNpZiBkZWZpbmVkKF9faWE2NF9fKQorCXBjaV9pb3VubWFwKHBkZXYsIGJmYWQtPnBjaV9iYXIwX2t2YSk7CisjZWxzZQorCWlvdW5tYXAoYmZhZC0+cGNpX2JhcjBfa3ZhKTsKKyNlbmRpZgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKwordm9pZAorYmZhZF9mY3NfcG9ydF9jZmcoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfU1lNTkFNRV9NQVhMRU5dOworCisJc3ByaW50ZihzeW1uYW1lLCAiJXMtJWQiLCBCRkFEX0RSSVZFUl9OQU1FLCBiZmFkLT5pbnN0X25vKTsKKwltZW1jcHkocG9ydF9jZmcuc3ltX25hbWUuc3ltbmFtZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpKTsKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCXBvcnRfY2ZnLm53d24gPSBhdHRyLm53d247CisJcG9ydF9jZmcucHd3biA9IGF0dHIucHd3bjsKKworCWJmYV9mY3NfY2ZnX2Jhc2VfcG9ydCgmYmZhZC0+YmZhX2ZjcywgJnBvcnRfY2ZnKTsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zIGRyaXZlcl9pbmZvOworCWludCAgICAgICAgICAgICBpOworCisJYmZhZC0+Y2ZnX2RhdGEucnBvcnRfZGVsX3RpbWVvdXQgPSBycG9ydF9kZWxfdGltZW91dDsKKwliZmFkLT5jZmdfZGF0YS5sdW5fcXVldWVfZGVwdGggPSBiZmFfbHVuX3F1ZXVlX2RlcHRoOworCWJmYWQtPmNmZ19kYXRhLmlvX21heF9zZ2UgPSBiZmFfaW9fbWF4X3NnZTsKKwliZmFkLT5jZmdfZGF0YS5iaW5kaW5nX21ldGhvZCA9IEZDUF9QV1dOX0JJTkRJTkc7CisKKwlyYyA9IGJmYWRfaGFsX21lbV9hbGxvYyhiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQgYmZhZF9oYWxfbWVtX2FsbG9jIGZhaWx1cmVcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGF0dGFjaCBhbGwgQnJvY2FkZSBIQkEgcG9ydHMsIgorCQkJIiBTeXN0ZW0gbWF5IG5lZWQgbW9yZSBtZW1vcnkuXG4iKTsKKwkJZ290byBvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOworCX0KKworCWJmYV9pbml0X2xvZygmYmZhZC0+YmZhLCBiZmFkLT5sb2dtb2QpOworCWJmYV9pbml0X3RyYygmYmZhZC0+YmZhLCBiZmFkLT50cmNtb2QpOworCWJmYV9pbml0X2FlbigmYmZhZC0+YmZhLCBiZmFkLT5hZW4pOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX3EpOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX2ZyZWVfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGQURfQUVOX01BWF9BUFBTOyBpKyspIHsKKwkJYmZhX3FfcWVfaW5pdCgmYmZhZC0+ZmlsZV9idWZbaV0ucWUpOworCQlsaXN0X2FkZF90YWlsKCZiZmFkLT5maWxlX2J1ZltpXS5xZSwgJmJmYWQtPmZpbGVfZnJlZV9xKTsKKwl9CisJYmZhX2luaXRfcGxvZygmYmZhZC0+YmZhLCAmYmZhZC0+cGxvZ19idWYpOworCWJmYV9wbG9nX2luaXQoJmJmYWQtPnBsb2dfYnVmKTsKKwliZmFfcGxvZ19zdHIoJmJmYWQtPnBsb2dfYnVmLCBCRkFfUExfTUlEX0RSVlIsIEJGQV9QTF9FSURfRFJJVkVSX1NUQVJULAorCQkgICAgIDAsICJEcml2ZXIgQXR0YWNoIik7CisKKwliZmFfYXR0YWNoKCZiZmFkLT5iZmEsIGJmYWQsICZiZmFkLT5pb2NfY2ZnLCAmYmZhZC0+bWVtaW5mbywKKwkJICAgJmJmYWQtPmhhbF9wY2lkZXYpOworCisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCS8qCisJICogRW5hYmxlIEludGVycnVwdCBhbmQgd2FpdCBiZmFfaW5pdCBjb21wbGV0aW9uCisJICovCisJaWYgKGJmYWRfc2V0dXBfaW50cihiZmFkKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6IGJmYWRfc2V0dXBfaW50ciBmYWlsZWRcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJZ290byBvdXRfc2V0dXBfaW50cl9mYWlsdXJlOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfaW5pdCgmYmZhZC0+YmZhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU2V0IHVwIGludGVycnVwdCBoYW5kbGVyIGZvciBlYWNoIHZlY3RvcnMKKwkgKi8KKwlpZiAoKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pCisJICAgICYmIGJmYWRfaW5zdGFsbF9tc2l4X2hhbmRsZXIoYmZhZCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGluc3RhbGxfbXNpeCBmYWlsZWQsIGJmYWQlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgYmZhZC0+aW5zdF9ubyk7CisJfQorCisJYmZhZF9pbml0X3RpbWVyKGJmYWQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwltZW1zZXQoJmRyaXZlcl9pbmZvLCAwLCBzaXplb2YoZHJpdmVyX2luZm8pKTsKKwlzdHJuY3B5KGRyaXZlcl9pbmZvLnZlcnNpb24sIEJGQURfRFJJVkVSX1ZFUlNJT04sCisJCXNpemVvZihkcml2ZXJfaW5mby52ZXJzaW9uKSAtIDEpOworCWlmIChob3N0X25hbWUpCisJCXN0cm5jcHkoZHJpdmVyX2luZm8uaG9zdF9tYWNoaW5lX25hbWUsIGhvc3RfbmFtZSwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X21hY2hpbmVfbmFtZSkgLSAxKTsKKwlpZiAob3NfbmFtZSkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX25hbWUsIG9zX25hbWUsCisJCQlzaXplb2YoZHJpdmVyX2luZm8uaG9zdF9vc19uYW1lKSAtIDEpOworCWlmIChvc19wYXRjaCkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoLCBvc19wYXRjaCwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoKSAtIDEpOworCisJc3RybmNweShkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSwgYmZhZC0+cGNpX25hbWUsCisJCXNpemVvZihkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSAtIDEpKTsKKworCS8qCisJICogRkNTIElOSVQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2Zjc19sb2dfaW5pdCgmYmZhZC0+YmZhX2ZjcywgYmZhZC0+bG9nbW9kKTsKKwliZmFfZmNzX3RyY19pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT50cmNtb2QpOworCWJmYV9mY3NfYWVuX2luaXQoJmJmYWQtPmJmYV9mY3MsIGJmYWQtPmFlbik7CisJYmZhX2Zjc19pbml0KCZiZmFkLT5iZmFfZmNzLCAmYmZhZC0+YmZhLCBiZmFkLCBCRkFfRkFMU0UpOworCWJmYV9mY3NfZHJpdmVyX2luZm9faW5pdCgmYmZhZC0+YmZhX2ZjcywgJmRyaXZlcl9pbmZvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9EUlZfSU5JVF9ET05FOworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitvdXRfc2V0dXBfaW50cl9mYWlsdXJlOgorCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CitvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOgorCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKK30KKwordm9pZAorYmZhZF9kcnZfdW5pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYV9pc3JfZGlzYWJsZSgmYmZhZC0+YmZhKTsKKwliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOworCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZiZmFkLT5maWxlX3EpKTsKKwliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKK30KKwordm9pZAorYmZhZF9kcnZfc3RhcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX3N0YXJ0KCZiZmFkLT5iZmEpOworCWJmYV9mY3Nfc3RhcnQoJmJmYWQtPmJmYV9mY3MpOworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9IQUxfU1RBUlRfRE9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWRfZmM0X3Byb2JlX3Bvc3QoYmZhZCk7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X3N0b3Aoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFkLT5wcG9ydC5mbGFncyB8PSBCRkFEX1BPUlRfREVMRVRFOworCWJmYV9mY3NfZXhpdCgmYmZhZC0+YmZhX2Zjcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwliZmFkLT5iZmFkX2ZsYWdzICY9IH5CRkFEX0hBTF9TVEFSVF9ET05FOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKQoreworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNjc2lfaG9zdCBmb3IgdGhlIHBoeXNpY2FsIHBvcnQKKwkgKi8KKwlpZiAoKGJmYWRfc3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkgICAgJiYgKHJvbGUgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJaWYgKGJmYWQtPnBwb3J0LmltX3BvcnQgPT0gTlVMTCkgeworCQkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmMgPSBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCQlnb3RvIG91dDsKKworCQliZmFkLT5wcG9ydC5yb2xlcyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwl9CisKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfQ0ZHX1BQT1JUX0RPTkU7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpIHsKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsICZiZmFkLT5wcG9ydCk7CisJCWJmYWQtPnBwb3J0LnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCX0KKworCWlmICgoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCSAgICAmJiAoYmZhZC0+cHBvcnQucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZF9pbV9wb3J0X2NsZWFuKGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQlrZnJlZShiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZC0+cHBvcnQucm9sZXMgJj0gfkJGQV9QT1JUX1JPTEVfRkNQX0lNOworCX0KKworCWJmYWQtPmJmYWRfZmxhZ3MgJj0gfkJGQURfQ0ZHX1BQT1JUX0RPTkU7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAobG9nX2xldmVsID4gQkZBX0xPR19JTlZBTElEICYmIGxvZ19sZXZlbCA8PSBCRkFfTE9HX0xFVkVMX01BWCkKKwkJYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKCZiZmFkLT5sb2dfZGF0YSwgbG9nX2xldmVsKTsKK30KKworIC8qCisgICogIFBDSV9lbnRyeSBQQ0kgZHJpdmVyIGVudHJpZXMgKiB7CisgICovCisKKy8qKgorICogUENJIHByb2JlIGVudHJ5LgorICovCitpbnQKK2JmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkOworCWludCAgICAgICAgICAgICBlcnJvciA9IC1FTk9ERVYsIHJldHZhbDsKKwljaGFyICAgICAgICAgICAgYnVmWzE2XTsKKworCS8qCisJICogRm9yIHNpbmdsZSBwb3J0IGNhcmRzIC0gb25seSBjbGFpbSBmdW5jdGlvbiAwCisJICovCisJaWYgKChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCkKKwkgICAgJiYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlCRkFfVFJBQ0UoQkZBX0lORk8sICJiZmFkX3BjaV9wcm9iZSBlbnRyeSIpOworCisJYmZhZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJmYWQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliZmFkLT50cmNtb2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcyksIEdGUF9LRVJORUwpOworCWlmICghYmZhZC0+dHJjbW9kKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIGFsbG9jIHRyYWNlIGJ1ZmZlciFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU7CisJfQorCisJLyoKKwkgKiBMT0cvVFJBQ0UgSU5JVAorCSAqLworCWJmYV90cmNfaW5pdChiZmFkLT50cmNtb2QpOworCWJmYV90cmMoYmZhZCwgYmZhZF9pbnN0KTsKKworCWJmYWQtPmxvZ21vZCA9ICZiZmFkLT5sb2dfZGF0YTsKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgYmZhZF9pbnN0KTsKKwliZmFfbG9nX2luaXQoYmZhZC0+bG9nbW9kLCBidWYsIGJmYV9vc19wcmludGYpOworCisJYmZhZF9kcnZfbG9nX2xldmVsX3NldChiZmFkKTsKKworCWJmYWQtPmFlbiA9ICZiZmFkLT5hZW5fYnVmOworCisJaWYgKCEoYmZhZF9sb2FkX2Z3aW1nKHBkZXYpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX2xvYWRfZndpbWcgZmFpbHVyZSFcbiIpOworCQlrZnJlZShiZmFkLT50cmNtb2QpOworCQlnb3RvIG91dF9hbGxvY190cmFjZV9mYWlsdXJlOworCX0KKworCXJldHZhbCA9IGJmYWRfcGNpX2luaXQocGRldiwgYmZhZCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX3BjaV9pbml0IGZhaWx1cmUhXG4iKTsKKwkJZXJyb3IgPSByZXR2YWw7CisJCWdvdG8gb3V0X3BjaV9pbml0X2ZhaWx1cmU7CisJfQorCisJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CisJYmZhZC0+aW5zdF9ubyA9IGJmYWRfaW5zdCsrOworCWxpc3RfYWRkX3RhaWwoJmJmYWQtPmxpc3RfZW50cnksICZiZmFkX2xpc3QpOworCW11dGV4X3VubG9jaygmYmZhZF9tdXRleCk7CisKKwlzcGluX2xvY2tfaW5pdCgmYmZhZC0+YmZhZF9sb2NrKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYmZhZCk7CisKKwliZmFkLT5yZWZfY291bnQgPSAwOworCWJmYWQtPnBwb3J0LmJmYWQgPSBiZmFkOworCisJcmV0dmFsID0gYmZhZF9kcnZfaW5pdChiZmFkKTsKKwlpZiAocmV0dmFsICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gb3V0X2Rydl9pbml0X2ZhaWx1cmU7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX0lOSVRfRE9ORSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkOiBoYWwgaW5pdCBmYWlsZWRcbiIsIGJmYWQtPmluc3Rfbm8pOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogUFBPUlQgRkNTIGNvbmZpZworCSAqLworCWJmYWRfZmNzX3BvcnRfY2ZnKGJmYWQpOworCisJcmV0dmFsID0gYmZhZF9jZmdfcHBvcnQoYmZhZCwgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pOworCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBvdXRfY2ZnX3Bwb3J0X2ZhaWx1cmU7CisKKwkvKgorCSAqIEJGQUQgbGV2ZWwgRkM0IChJTS9UTS9JUEZDKSBzcGVjaWZpYyByZXNvdXJjZSBhbGxvY2F0aW9uCisJICovCisJcmV0dmFsID0gYmZhZF9mYzRfcHJvYmUoYmZhZCk7CisJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfZmM0X3Byb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOworCX0KKworCWJmYWRfZHJ2X3N0YXJ0KGJmYWQpOworCisJLyoKKwkgKiBJZiBiZmFfbGlua3VwX2RlbGF5IGlzIHNldCB0byAtMSBkZWZhdWx0OyB0cnkgdG8gcmV0cml2ZSB0aGUKKwkgKiB2YWx1ZSB1c2luZyB0aGUgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KCk7IGVsc2UgdXNlIHRoZQorCSAqIHBhc3NlZCBpbiBtb2R1bGUgcGFyYW0gdmFsdWUgYXMgdGhlIGJmYV9saW5rdXBfZGVsYXkuCisJICovCisJaWYgKGJmYV9saW5rdXBfZGVsYXkgPCAwKSB7CisJCWJmYV9saW5rdXBfZGVsYXkgPSBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoYmZhZCk7CisJCWJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoYmZhZCk7CisJCWJmYV9saW5rdXBfZGVsYXkgPSAtMTsKKwl9IGVsc2UgeworCQliZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOworCX0KKworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX0RFVklDRV9DTEFJTUVELCBiZmFkLT5wY2lfbmFtZSk7CitvazoKKwlyZXR1cm4gMDsKKworb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOgorCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisJYmZhZF91bmNmZ19wcG9ydChiZmFkKTsKK291dF9jZmdfcHBvcnRfZmFpbHVyZToKKwliZmFkX2Rydl91bmluaXQoYmZhZCk7CitvdXRfZHJ2X2luaXRfZmFpbHVyZToKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CitvdXRfcGNpX2luaXRfZmFpbHVyZToKKwlrZnJlZShiZmFkLT50cmNtb2QpOworb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU6CisJa2ZyZWUoYmZhZCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIFBDSSByZW1vdmUgZW50cnkuCisgKi8KK3ZvaWQKK2JmYWRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwliZmFfdHJjKGJmYWQsIGJmYWQtPmluc3Rfbm8pOworCisJaWYgKChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKQorCSAgICAmJiAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9JTklUX0RPTkUpKSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCQliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJCWRlbF90aW1lcl9zeW5jKCZiZmFkLT5oYWxfdG1vKTsKKwkJZ290byBoYWxfZGV0YWNoOworCX0gZWxzZSBpZiAoIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKSkgeworCQlnb3RvIHJlbW92ZV9zeXNmczsKKwl9CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpCisJCWJmYWRfZHJ2X3N0b3AoYmZhZCk7CisKKwliZmFkX3JlbW92ZV9pbnRyKGJmYWQpOworCisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfQ0ZHX1BQT1JUX0RPTkUpCisJCWJmYWRfdW5jZmdfcHBvcnQoYmZhZCk7CisKK2hhbF9kZXRhY2g6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CityZW1vdmVfc3lzZnM6CisKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CisKKwlrZnJlZShiZmFkLT50cmNtb2QpOworCWtmcmVlKGJmYWQpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiZmFkX2lkX3RhYmxlW10gPSB7CisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCSAuZGV2aWNlID0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJIC5kZXZpY2UgPSBCRkFfUENJX0RFVklDRV9JRF9DVCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSAuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9GSUJFUiA8PCA4KSwKKwkgLmNsYXNzX21hc2sgPSB+MCwKKwkgfSwKKworCXswLCAwfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZmFkX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJmYWRfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IEJGQURfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gYmZhZF9pZF90YWJsZSwKKwkucHJvYmUgPSBiZmFkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYmZhZF9wY2lfcmVtb3ZlKSwKK307CisKKy8qKgorICogIExpbnV4IGRyaXZlciBtb2R1bGUgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmM7CisKKwlyYyA9IGJmYWRfaW1fbW9kdWxlX2luaXQoKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX21vZHVsZV9pbml0KCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2luaXQoKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfZmM0X21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2V4aXQoKTsKKwliZmFkX3RtX21vZHVsZV9leGl0KCk7CisJYmZhZF9pbV9tb2R1bGVfZXhpdCgpOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgaW5pdC4KKyAqLworc3RhdGljIGludCAgICAgIF9faW5pdAorYmZhZF9pbml0KHZvaWQpCit7CisJaW50ICAgICAgICAgICAgIGVycm9yID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIkJyb2NhZGUgQkZBIEZDL0ZDT0UgU0NTSSBkcml2ZXIgLSB2ZXJzaW9uOiAlc1xuIiwKKwkgICAgICAgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlpZiAobnVtX3NncGdzID4gMCkKKwkJbnVtX3NncGdzX3Bhcm0gPSBudW1fc2dwZ3M7CisKKwllcnJvciA9IGJmYWRfZmM0X21vZHVsZV9pbml0KCk7CisJaWYgKGVycm9yKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9mYzRfbW9kdWxlX2luaXQgZmFpbHVyZVxuIik7CisJCWdvdG8gZXh0OworCX0KKworCWlmICghc3RyY21wKEZDUElfTkFNRSwgIiBmY3BpbSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCWlmICghc3RyY21wKEZDUFRfTkFNRSwgIiBmY3B0bSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX1RNOworCWlmICghc3RyY21wKElQRkNfTkFNRSwgIiBpcGZjIikpCisJCWJmYWRfc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKworCWJmYV9pb2NfYXV0b19yZWNvdmVyKGlvY19hdXRvX3JlY292ZXIpOworCWJmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHJwb3J0X2RlbF90aW1lb3V0KTsKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJmYWRfcGNpX2RyaXZlcik7CisKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCBwY2lfcmVnaXN0ZXJfZHJpdmVyIGZhaWx1cmVcbiIpOworCQlnb3RvIGV4dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXh0OgorCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgZXhpdC4KKyAqLworc3RhdGljIHZvaWQgICAgIF9fZXhpdAorYmZhZF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiZmFkX3BjaV9kcml2ZXIpOworCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJYmZhZF9mcmVlX2Z3aW1nKCk7Cit9CisKKyNkZWZpbmUgQkZBRF9QUk9UT19OQU1FIEZDUElfTkFNRSBGQ1BUX05BTUUgSVBGQ19OQU1FCisKK21vZHVsZV9pbml0KGJmYWRfaW5pdCk7Cittb2R1bGVfZXhpdChiZmFkX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlciIgQkZBRF9QUk9UT19OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLiIpOworTU9EVUxFX1ZFUlNJT04oQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyOWFlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKQEAgLTAsMCArMSw2NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2F0dHIuYyBMaW51eCBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgImJmYWRfYXR0ci5oIgorCisvKioKKyAqICBGQ190cmFuc3BvcnRfdGVtcGxhdGUgRkMgdHJhbnNwb3J0IHRlbXBsYXRlCisgKi8KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisJdTMyICAgICAgICBmY19pZCA9IC0xOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCWZjX2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlmY19zdGFyZ2V0X3BvcnRfaWQoc3RhcmdldCkgPSBmY19pZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKwl1NjQgICAgICAgICAgICAgbm9kZV9uYW1lID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzaG9zdCA9IGJmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdGFyZ2V0KTsKKwlpbV9wb3J0ID0gKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaWYgKGl0bmltKQorCQlub2RlX25hbWUgPSBiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKTsKKworCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0gYmZhX29zX2h0b25sbChub2RlX25hbWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBOVUxMOworCXU2NCAgICAgICAgICAgICBwb3J0X25hbWUgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCXBvcnRfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOworCisJZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSBiZmFfb3NfaHRvbmxsKHBvcnRfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPQorCQkJYmZhX29zX2h0b24zYihiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydC0+ZmNzX3BvcnQpKTsKK30KKworCisKKworCitzdHJ1Y3QgU2NzaV9Ib3N0ICoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcmV0dXJuIGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF90eXBlKSB7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9OUE9SVDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTlBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTkxQT1JUOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9OTFBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfUDJQOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9QVFA7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTFBPUlQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX0xQT1JUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF9zdGF0ZSkgeworCWNhc2UgQkZBX1BQT1JUX1NUX0xJTktET1dOOgorCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX0xJTktET1dOOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9MSU5LVVA6CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfT05MSU5FOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9VTklOSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkdfUVdBSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkc6CisJY2FzZSBCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUOgorCWNhc2UgQkZBX1BQT1JUX1NUX0RJU0FCTElORzoKKwljYXNlIEJGQV9QUE9SVF9TVF9ESVNBQkxFRDoKKwljYXNlIEJGQV9QUE9SVF9TVF9TVE9QUEVEOgorCWNhc2UgQkZBX1BQT1JUX1NUX0lPQ0RPV046CisJZGVmYXVsdDoKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IGFjdGl2ZSBmYzRzLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCW1lbXNldChmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgMCwKKwkgICAgICAgc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7CisKKwlpZiAocG9ydC0+c3VwcG9ydGVkX2ZjNHMgJgorCQkoQkZBX1BPUlRfUk9MRV9GQ1BfSU0gfCBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsKKworCWlmIChwb3J0LT5zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzNdID0gMHgyMDsKKworCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzddID0gMTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgbGluayBzcGVlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3Rfc3BlZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisJc3dpdGNoIChhdHRyLnNwZWVkKSB7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfOEdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzhHQklUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF80R0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfNEdCSVQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8yR0JJVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfMUdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzFHQklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJd3duX3QgICAgICAgICAgIGZhYnJpY19ud3duID0gMDsKKworCWZhYnJpY19ud3duID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0LT5mY3NfcG9ydCk7CisKKwlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IGJmYV9vc19odG9ubGwoZmFicmljX253d24pOworCit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgQkZBRCBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqCitiZmFkX2ltX2dldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCBmY29tcDsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpoc3RhdHM7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWhzdGF0cyA9ICZiZmFkLT5saW5rX3N0YXRzOworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCW1lbXNldChoc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzKSk7CisJcmMgPSBiZmFfcHBvcnRfZ2V0X3N0YXRzKCZiZmFkLT5iZmEsCisJCQkJICAgICAodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKikgaHN0YXRzLAorCQkJCSAgICAgYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJcmV0dXJuIE5VTEw7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKworCXJldHVybiBoc3RhdHM7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCByZXNldCBCRkFEIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3Jlc2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwliZmFfc3RhdHVzX3QgICAgcmM7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyYyA9IGJmYV9wcG9ydF9jbGVhcl9zdGF0cygmYmZhZC0+YmZhLCBiZmFkX2hjYl9jb21wLCAmZmNvbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCXJldHVybjsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCisJcmV0dXJuOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IHJwb3J0IGxvc3MgdGltZW91dC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcnBvcnQtPmRldl9sb3NzX3RtbyA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBzZXQgcnBvcnQgbG9zcyB0aW1lb3V0LgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgdTMyIHRpbWVvdXQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlpZiAodGltZW91dCA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfZmNwaW1fcGF0aF90b3Zfc2V0KCZiZmFkLT5iZmEsIHRpbWVvdXQpOworCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCit9CisKK3N0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlID0geworCisJLyogVGFyZ2V0IGR5bmFtaWMgYXR0cmlidXRlcyAqLworCS5nZXRfc3RhcmdldF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X2lkLAorCS5zaG93X3N0YXJnZXRfcG9ydF9pZCA9IDEsCisJLmdldF9zdGFyZ2V0X25vZGVfbmFtZSA9IGJmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lLAorCS5zaG93X3N0YXJnZXRfbm9kZV9uYW1lID0gMSwKKwkuZ2V0X3N0YXJnZXRfcG9ydF9uYW1lID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X25hbWUsCisJLnNob3dfc3RhcmdldF9wb3J0X25hbWUgPSAxLAorCisJLyogSG9zdCBkeW5hbWljIGF0dHJpYnV0ZSAqLworCS5nZXRfaG9zdF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfaG9zdF9wb3J0X2lkLAorCS5zaG93X2hvc3RfcG9ydF9pZCA9IDEsCisKKwkvKiBIb3N0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X25vZGVfbmFtZSA9IDEsCisJLnNob3dfaG9zdF9wb3J0X25hbWUgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2ZjNHMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyA9IDEsCisJLnNob3dfaG9zdF9tYXhmcmFtZV9zaXplID0gMSwKKworCS8qIE1vcmUgaG9zdCBkeW5hbWljIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X3BvcnRfdHlwZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfdHlwZSA9IGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF90eXBlLAorCS5zaG93X2hvc3RfcG9ydF9zdGF0ZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfc3RhdGUgPSBiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUsCisJLnNob3dfaG9zdF9hY3RpdmVfZmM0cyA9IDEsCisJLmdldF9ob3N0X2FjdGl2ZV9mYzRzID0gYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cywKKwkuc2hvd19ob3N0X3NwZWVkID0gMSwKKwkuZ2V0X2hvc3Rfc3BlZWQgPSBiZmFkX2ltX2dldF9ob3N0X3NwZWVkLAorCS5zaG93X2hvc3RfZmFicmljX25hbWUgPSAxLAorCS5nZXRfaG9zdF9mYWJyaWNfbmFtZSA9IGJmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUsCisKKwkuc2hvd19ob3N0X3N5bWJvbGljX25hbWUgPSAxLAorCisJLyogU3RhdGlzdGljcyAqLworCS5nZXRfZmNfaG9zdF9zdGF0cyA9IGJmYWRfaW1fZ2V0X3N0YXRzLAorCS5yZXNldF9mY19ob3N0X3N0YXRzID0gYmZhZF9pbV9yZXNldF9zdGF0cywKKworCS8qIEFsbG9jYXRpb24gbGVuZ3RoIGZvciBob3N0IHNwZWNpZmljIGRhdGEgKi8KKwkuZGRfZmNycG9ydF9zaXplID0gc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKSwKKworCS8qIFJlbW90ZSBwb3J0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ycG9ydF9tYXhmcmFtZV9zaXplID0gMSwKKwkuc2hvd19ycG9ydF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfcnBvcnRfZGV2X2xvc3NfdG1vID0gMSwKKwkuZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGJmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vLAorCS5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vID0gYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8sCit9OworCisvKioKKyAqICBTY3NpX0hvc3RfYXR0cnMgU0NTSSBob3N0IGF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fc2VyaWFsX251bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIuc2VyaWFsX251bSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX21vZGVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9tb2RlbF9kZXNjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9ub2RlX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXU2NCAgICAgICAgbnd3bjsKKworCW53d24gPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JWxseFxuIiwgYmZhX29zX2h0b25sbChud3duKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX3N5bWJvbGljX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2h3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuaHdfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX29wdGlvbnJvbV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuZndfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm5wb3J0cyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2Rydl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIEJGQURfRFJJVkVSX05BTUUpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9udW1fb2ZfZGlzY292ZXJlZF9wb3J0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJaW50ICAgICAgICBucnBvcnRzID0gMjA0ODsKKwl3d25fdCAgICAgICAgICAqcnBvcnRzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlycG9ydHMgPSBremFsbG9jKHNpemVvZih3d25fdCkgKiBucnBvcnRzICwgR0ZQX0FUT01JQyk7CisJaWYgKHJwb3J0cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0cyhwb3J0LT5mY3NfcG9ydCwgcnBvcnRzLCAmbnJwb3J0cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJa2ZyZWUocnBvcnRzKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBucnBvcnRzKTsKK30KKworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHNlcmlhbF9udW1iZXIsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zZXJpYWxfbnVtX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBiZmFkX2ltX21vZGVsX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsX2Rlc2NyaXB0aW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbW9kZWxfZGVzY19zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihub2RlX25hbWUsIFNfSVJVR08sIGJmYWRfaW1fbm9kZV9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHN5bWJvbGljX25hbWUsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zeW1ib2xpY19uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGhhcmR3YXJlX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9od192ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fb3B0aW9ucm9tX3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX2Z3X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobnVtYmVyX29mX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl9uYW1lLCBTX0lSVUdPLCBiZmFkX2ltX2Rydl9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG51bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdywgTlVMTCk7CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VyaWFsX251bWJlciwKKwkmZGV2X2F0dHJfbW9kZWwsCisJJmRldl9hdHRyX21vZGVsX2Rlc2NyaXB0aW9uLAorCSZkZXZfYXR0cl9ub2RlX25hbWUsCisJJmRldl9hdHRyX3N5bWJvbGljX25hbWUsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX2RyaXZlcl92ZXJzaW9uLAorCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCisJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX251bWJlcl9vZl9wb3J0cywKKwkmZGV2X2F0dHJfZHJpdmVyX25hbWUsCisJJmRldl9hdHRyX251bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLAorCU5VTEwsCit9OworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdID0geworICAgICZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyLAorICAgICZkZXZfYXR0cl9tb2RlbCwKKyAgICAmZGV2X2F0dHJfbW9kZWxfZGVzY3JpcHRpb24sCisgICAgJmRldl9hdHRyX25vZGVfbmFtZSwKKyAgICAmZGV2X2F0dHJfc3ltYm9saWNfbmFtZSwKKyAgICAmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZHJpdmVyX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX29wdGlvbl9yb21fdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX3BvcnRzLAorICAgICZkZXZfYXR0cl9kcml2ZXJfbmFtZSwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX2Rpc2NvdmVyZWRfcG9ydHMsCisgICAgTlVMTCwKK307CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9BVFRSX0hfXworI2RlZmluZSBfX0JGQURfQVRUUl9IX18KKy8qKgorICogIGJmYWRfYXR0ci5oIFZNd2FyZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKy8qKgorICogIEZDX3RyYW5zcG9ydF90ZW1wbGF0ZSBGQyB0cmFuc3BvcnQgdGVtcGxhdGUKKyAqLworCitzdHJ1Y3QgU2NzaV9Ib3N0KgorYmZhZF9vc19kZXZfdG9fc2hvc3Qoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBpc3N1ZSBhIExJUC4KKyAqLworaW50CitiZmFkX2ltX2lzc3VlX2ZjX2hvc3RfbGlwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKKworc3RydWN0IFNjc2lfSG9zdCoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisKKyNlbmRpZiAvKiAgX19CRkFEX0FUVFJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIENvbnRhaW5zIGJhc2UgZHJpdmVyIGRlZmluaXRpb25zLgorICovCisKKy8qKgorICogIGJmYV9kcnYuaCBMaW51eCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0RSVl9IX18KKyNkZWZpbmUgX19CRkFEX0RSVl9IX18KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgImFlbi9iZmFfYWVuLmgiCisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfbGludXguaD4KKworI2RlZmluZSBCRkFEX0RSSVZFUl9OQU1FICAgICAgICAiYmZhIgorI2lmZGVmIEJGQV9EUklWRVJfVkVSU0lPTgorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgIEJGQV9EUklWRVJfVkVSU0lPTgorI2Vsc2UKKyNkZWZpbmUgQkZBRF9EUklWRVJfVkVSU0lPTiAgICAiMi4wLjAuMCIKKyNlbmRpZgorCisKKyNkZWZpbmUgQkZBRF9JUlFfRkxBR1MgSVJRRl9TSEFSRUQKKworLyoKKyAqIEJGQUQgZmxhZ3MKKyAqLworI2RlZmluZSBCRkFEX01TSVhfT04JCQkJMHgwMDAwMDAwMQorI2RlZmluZSBCRkFEX0hBTF9JTklUX0RPTkUJCQkweDAwMDAwMDAyCisjZGVmaW5lIEJGQURfRFJWX0lOSVRfRE9ORQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQkZBRF9DRkdfUFBPUlRfRE9ORQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQkZBRF9IQUxfU1RBUlRfRE9ORQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQkZBRF9QT1JUX09OTElORQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQkZBRF9SUE9SVF9PTkxJTkUJCQkweDAwMDAwMDQwCisKKyNkZWZpbmUgQkZBRF9QT1JUX0RFTEVURQkJCTB4MDAwMDAwMDEKKworLyoKKyAqIEJGQUQgcmVsYXRlZCBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9TQ0FOX0RFTEFZCQlIWgorI2RlZmluZSBCRkFEX1NUT1BfVElNRU9VVAkzMAorI2RlZmluZSBCRkFEX1NVU1BFTkRfVElNRU9VVAlCRkFEX1NUT1BfVElNRU9VVAorCisvKgorICogQkZBRCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcworICovCisjZGVmaW5lIEJGQURfTFVOX1FVRVVFX0RFUFRIIAkJMzIKKyNkZWZpbmUgQkZBRF9JT19NQVhfU0dFIAkJU0dfQUxMCisKKyNkZWZpbmUgYmZhZF9pc3JfdCBpcnFfaGFuZGxlcl90CisKKyNkZWZpbmUgTUFYX01TSVhfRU5UUlkgMjIKKworc3RydWN0IGJmYWRfbXNpeF9zIHsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXg7Cit9OworCitlbnVtIGJmYWRfcG9ydF9wdmJfdHlwZSB7CisJQkZBRF9QT1JUX1BIWVNfQkFTRSA9IDAsCisJQkZBRF9QT1JUX1BIWVNfVlBPUlQgPSAxLAorCUJGQURfUE9SVF9WRl9CQVNFID0gMiwKKwlCRkFEX1BPUlRfVkZfVlBPUlQgPSAzLAorfTsKKworLyoKKyAqIFBPUlQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQ7CisJdTMyICAgICAgICByb2xlczsKKwlzMzIgICAgICAgICBmbGFnczsKKwl1MzIgICAgICAgIHN1cHBvcnRlZF9mYzRzOworCXU4CQlpcGZjX2ZsYWdzOworCWVudW0gYmZhZF9wb3J0X3B2Yl90eXBlIHB2Yl90eXBlOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsJLyogSU0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX3RtX3BvcnRfcyAqdG1fcG9ydDsJLyogVE0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX2lwZmNfcG9ydF9zICppcGZjX3BvcnQ7CS8qIElQRkMgc3BlY2lmaWMgZGF0YSAqLworfTsKKworLyoKKyAqIFZQT1JUIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3Zwb3J0X3MgeworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgZHJ2X3BvcnQ7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyBmY3NfdnBvcnQ7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBfZGVsOworfTsKKworLyoKKyAqIFZGIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3MgeworCWJmYV9mY3NfdmZfdCAgICBmY3NfdmY7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgIGJhc2VfcG9ydDsJLyogYmFzZSBwb3J0IGZvciB2ZiAqLworCXN0cnVjdCBiZmFkX3MgICAqYmZhZDsKK307CisKK3N0cnVjdCBiZmFkX2NmZ19wYXJhbV9zIHsKKwl1MzIgICAgICAgIHJwb3J0X2RlbF90aW1lb3V0OworCXUzMiAgICAgICAgaW9jX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgbHVuX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgaW9fbWF4X3NnZTsKKwl1MzIgICAgICAgIGJpbmRpbmdfbWV0aG9kOworfTsKKworI2RlZmluZSBCRkFEX0FFTl9NQVhfQVBQUyA4CitzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBxZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXMzMiByaTsKKwlzMzIgYXBwX2lkOworfTsKKworLyoKKyAqIEJGQUQgKFBDSSBmdW5jdGlvbikgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfcyAgICAgICBiZmE7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICBiZmFfZmNzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJY29uc3QgY2hhciAqcGNpX25hbWU7CisJc3RydWN0IGJmYV9wY2lkZXZfcyBoYWxfcGNpZGV2OworCXN0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MgcGNpX2F0dHI7CisJdW5zaWduZWQgbG9uZyAgIHBjaV9iYXIwX21hcDsKKwl2b2lkIF9faW9tZW0gICAqcGNpX2JhcjBfa3ZhOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisJc3RydWN0IGNvbXBsZXRpb24gc3VzcGVuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkaXNhYmxlX2NvbXA7CisJYmZhX2Jvb2xlYW5fdCAgIGRpc2FibGVfYWN0aXZlOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgcHBvcnQ7CS8qIHBoeXNpY2FsIHBvcnQgb2YgdGhlIEJGQUQgKi8KKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyBtZW1pbmZvOworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgICBpb2NfY2ZnOworCXUzMiAgICAgICAgaW5zdF9ubzsJLyogQkZBRCBpbnN0YW5jZSBudW1iZXIgKi8KKwl1MzIgICAgICAgIGJmYWRfZmxhZ3M7CisJc3BpbmxvY2tfdCAgICAgIGJmYWRfbG9jazsKKwlzdHJ1Y3QgYmZhZF9jZmdfcGFyYW1fcyBjZmdfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgbXNpeF90YWJbTUFYX01TSVhfRU5UUlldOworCWludCAgICAgICAgICAgICBudmVjOworCWNoYXIgICAgICAgICAgICBhZGFwdGVyX25hbWVbQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgcG9ydF9uYW1lW0JGQV9BREFQVEVSX1NZTV9OQU1FX0xFTl07CisJc3RydWN0IHRpbWVyX2xpc3QgaGFsX3RtbzsKKwl1bnNpZ25lZCBsb25nICAgaHNfc3RhcnQ7CisJc3RydWN0IGJmYWRfaW1fcyAqaW07CQkvKiBJTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfdG1fcyAqdG07CQkvKiBUTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfaXBmY19zICppcGZjOwkvKiBJUEZDIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAgIGxvZ19kYXRhOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbW9kOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAqYWVuOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAgYWVuX2J1ZjsKKwlzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIGZpbGVfYnVmW0JGQURfQUVOX01BWF9BUFBTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZmlsZV9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBmaWxlX2ZyZWVfcTsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcyAgICAgIHBsb2dfYnVmOworCWludCAgICAgICAgICAgICByZWZfY291bnQ7CisJYmZhX2Jvb2xlYW5fdAlpcGZjX2VuYWJsZWQ7CisJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOworCisJc3RydWN0IGtvYmplY3QgKmJmYV9rb2JqOworCXN0cnVjdCBrb2JqZWN0ICppb2Nfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqcHBvcnRfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqbHBvcnRfa29iajsKK307CisKKy8qCisgKiBSUE9SVCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zIGZjc19ycG9ydDsKK307CisKK3N0cnVjdCBiZmFkX2J1Zl9pbmZvIHsKKwl2b2lkICAgICAgICAgICAqdmlydDsKKwlkbWFfYWRkcl90ICAgICAgcGh5czsKKwl1MzIgICAgICAgIHNpemU7Cit9OworCitzdHJ1Y3QgYmZhZF9mY3hwIHsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQ7CisJYmZhX3N0YXR1c190ICAgIHJlcV9zdGF0dXM7CisJdTE2ICAgICAgICB0YWc7CisJdTE2ICAgICAgICByc3BfbGVuOworCXUxNiAgICAgICAgcnNwX21heGxlbjsKKwl1OCAgICAgICAgIHVzZV9pcmVxYnVmOworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CisJdTMyICAgICAgICBudW1fcmVxX3NnbGVzOworCXUzMiAgICAgICAgbnVtX3JzcF9zZ2xlczsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJdm9pZCAgICAgICAgICAgKnJlcWJ1Zl9pbmZvOworCXZvaWQgICAgICAgICAgICpyc3BidWZfaW5mbzsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcmVxX3NnZTsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcnNwX3NnZTsKKwlmY3hwX3NlbmRfY2JfdCAgc2VuZF9jYmZuOworCXZvaWQgICAgICAgICAgICpzZW5kX2NiYXJnOworCXZvaWQgICAgICAgICAgICpiZmFfZmN4cDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworfTsKKworc3RydWN0IGJmYWRfaGFsX2NvbXAgeworCWJmYV9zdGF0dXNfdCAgICBzdGF0dXM7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKK307CisKKy8qCisgKiBNYWNybyB0byBvYnRhaW4gdGhlIGltbWVkaWF0ZSBsb3dlciBwb3dlcgorICogb2YgdHdvIGZvciB0aGUgaW50ZWdlci4KKyAqLworI2RlZmluZSBuZXh0TG93ZXJJbnQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJaW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJKCp4KS0tOyAgICAJCSAgICAgICAgICAgICAgICAJXAorCWZvciAoaiA9IDE7IGogPCAoc2l6ZW9mKGludCkgKiA4KTsgaiA8PD0gMSkgICAgIFwKKwkJKCp4KSA9ICgqeCkgfCAoKngpID4+IGo7ICAgICAgICAJXAorCSgqeCkrKzsgICAgICAgICAgICAgICAgICAJICAgICAgICAJXAorCSgqeCkgPSAoKngpID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAJXAorfSB3aGlsZSAoMCkKKworCitiZmFfc3RhdHVzX3QgICAgYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworYmZhX3N0YXR1c190ICAgIGJmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfZHJ2X3N0YXJ0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9kcnZfc3RvcChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGFsX21lbV9yZWxlYXNlKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworaW50ICAgICAgICAgICAgIGJmYWRfc2V0dXBfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCit2b2lkCQliZmFkX3VwZGF0ZV9oYWxfY2ZnKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmJmYV9jZmcpOworYmZhX3N0YXR1c190CWJmYWRfaGFsX21lbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfYmZhX3Rtbyh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZAkJYmZhZF9pbml0X3RpbWVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50CQliZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2Zjc19wb3J0X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X3VuaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitiZmFfc3RhdHVzX3QJYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkCQliZmFkX2ZjNF9tb2R1bGVfZXhpdCh2b2lkKTsKKwordm9pZCBiZmFkX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGJmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKTsKK3ZvaWQgYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2ludCBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitpbnQgYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKworZXh0ZXJuIHN0cnVjdCBpZHIgYmZhZF9pbV9wb3J0X2luZGV4OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmZhZF9saXN0OworZXh0ZXJuIGludCBiZmFfbHVuX3F1ZXVlX2RlcHRoOworZXh0ZXJuIGludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworZXh0ZXJuIGludCBiZmFfbGlua3VwX2RlbGF5OworCisjZW5kaWYgLyogX19CRkFEX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzNGIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9md2ltZy5jIExpbnV4IGRyaXZlciBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxiZmFkX2Rydi5oPgorI2luY2x1ZGUgPGJmYWRfaW1fY29tcGF0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxiZmFfZndpbWdfcHJpdi5oPgorI2luY2x1ZGUgPGJmYS5oPgorCit1MzIgYmZpX2ltYWdlX2N0X3NpemU7Cit1MzIgYmZpX2ltYWdlX2NiX3NpemU7Cit1MzIgKmJmaV9pbWFnZV9jdDsKK3UzMiAqYmZpX2ltYWdlX2NiOworCisKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NUCSJjdGZ3LmJpbiIKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NCCSJjYmZ3LmJpbiIKK01PRFVMRV9GSVJNV0FSRShCRkFEX0ZXX0ZJTEVfQ1QpOworTU9EVUxFX0ZJUk1XQVJFKEJGQURfRldfRklMRV9DQik7CisKK3UzMiAqCitiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKKwkJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnBkZXYtPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkNhbid0IGxvY2F0ZSBmaXJtd2FyZSAlc1xuIiwgZndfbmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJKmJmaV9pbWFnZSA9IHZtYWxsb2MoZnctPnNpemUpOworCWlmIChOVUxMID09ICpiZmlfaW1hZ2UpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWwgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmdyBpbWFnZSAiCisJCQkic2l6ZT0leCFcbiIsICh1MzIpIGZ3LT5zaXplKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltZW1jcHkoKmJmaV9pbWFnZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwkqYmZpX2ltYWdlX3NpemUgPSBmdy0+c2l6ZS9zaXplb2YodTMyKTsKKworCXJldHVybigqYmZpX2ltYWdlKTsKKworZXJyb3I6CisJcmV0dXJuKE5VTEwpOworfQorCit1MzIgKgorYmZhZF9nZXRfZmlybXdhcmVfYnVmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaWYgKGJmaV9pbWFnZV9jdF9zaXplID09IDApCisJCQliZmFkX3JlYWRfZmlybXdhcmUocGRldiwgJmJmaV9pbWFnZV9jdCwKKwkJCQkmYmZpX2ltYWdlX2N0X3NpemUsIEJGQURfRldfRklMRV9DVCk7CisJCXJldHVybihiZmlfaW1hZ2VfY3QpOworCX0gZWxzZSB7CisJCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSA9PSAwKQorCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY2IsCisJCQkJJmJmaV9pbWFnZV9jYl9zaXplLCBCRkFEX0ZXX0ZJTEVfQ0IpOworCQlyZXR1cm4oYmZpX2ltYWdlX2NiKTsKKwl9Cit9CisKK3UzMiAqCitiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpCit7IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jdCArIG9mZik7IH0KKwordTMyICoKK2JmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZikKK3sgcmV0dXJuICh1MzIgKikoYmZpX2ltYWdlX2NiICsgb2ZmKTsgfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDAxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtMCwwICsxLDEyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9pbS5jIExpbnV4IGRyaXZlciBJTSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisjaW5jbHVkZSAiYmZhX2NiX2lvaW1fbWFjcm9zLmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIElNKTsKKworREVGSU5FX0lEUihiZmFkX2ltX3BvcnRfaW5kZXgpOworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworc3RhdGljIHZvaWQgYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgYmZhZF9pbV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21uZCwKKwkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIGludCBiZmFkX2ltX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2RvbmUodm9pZCAqZHJ2LCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCWVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywgdTggc2NzaV9zdGF0dXMsCisJCQlpbnQgc25zX2xlbiwgdTggKnNuc19pbmZvLCBzMzIgcmVzaWR1ZSkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gZHJ2OworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbTsKKworCXN3aXRjaCAoaW9fc3RhdHVzKSB7CisJY2FzZSBCRklfSU9JTV9TVFNfT0s6CisJCWJmYV90cmMoYmZhZCwgc2NzaV9zdGF0dXMpOworCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgc2NzaV9zdGF0dXMpOworCQlzY3NpX3NldF9yZXNpZChjbW5kLCAwKTsKKworCQlpZiAoc25zX2xlbiA+IDApIHsKKwkJCWJmYV90cmMoYmZhZCwgc25zX2xlbik7CisJCQlpZiAoc25zX2xlbiA+IFNDU0lfU0VOU0VfQlVGRkVSU0laRSkKKwkJCQlzbnNfbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCQkJbWVtY3B5KGNtbmQtPnNlbnNlX2J1ZmZlciwgc25zX2luZm8sIHNuc19sZW4pOworCQl9CisJCWlmIChyZXNpZHVlID4gMCkKKwkJCXNjc2lfc2V0X3Jlc2lkKGNtbmQsIHJlc2lkdWUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX0FCT1JURUQ6CisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfUEFUSFRPVjoKKwlkZWZhdWx0OgorCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9FUlJPUiwgMCk7CisJfQorCisJLyogVW5tYXAgRE1BLCBpZiBob3N0IGlzIE5VTEwsIGl0IG1lYW5zIGEgc2NzaSBwYXNzdGhydSBjbWQgKi8KKwlpZiAoY21uZC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpCisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisJYmZhX3RyYyhiZmFkLCBjbW5kLT5yZXN1bHQpOworCisJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKGl0bmltX2RhdGEpIHsKKwkJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwkJaWYgKCFjbW5kLT5yZXN1bHQgJiYgaXRuaW0gJiYKKwkJCSAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpKSB7CisJCQkvKiBRdWV1ZSBkZXB0aCBhZGp1c3RtZW50IGZvciBnb29kIHN0YXR1cyBjb21wbGV0aW9uICovCisJCQliZmFkX29zX3JhbXBfdXBfcWRlcHRoKGl0bmltLCBjbW5kLT5kZXZpY2UpOworCQl9IGVsc2UgaWYgKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIGl0bmltKSB7CisJCQkvKiBxZnVsbCBoYW5kbGluZyAqLworCQkJYmZhZF9vc19oYW5kbGVfcWZ1bGwoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpkcnYsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07CisKKwljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgU0NTSV9TVEFUVVNfR09PRCk7CisKKwkvKiBVbm1hcCBETUEsIGlmIGhvc3QgaXMgTlVMTCwgaXQgbWVhbnMgYSBzY3NpIHBhc3N0aHJ1IGNtZCAqLworCWlmIChjbW5kLT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkKKwkJc2NzaV9kbWFfdW5tYXAoY21uZCk7CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKworCS8qIFF1ZXVlIGRlcHRoIGFkanVzdG1lbnQgKi8KKwlpZiAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpIHsKKwkJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJCWlmIChpdG5pbV9kYXRhKSB7CisJCQlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCQkJaWYgKGl0bmltKQorCQkJCWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmRydiwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRydjsKKworCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0VSUk9SLCAwKTsKKworCS8qIFVubWFwIERNQSwgaWYgaG9zdCBpcyBOVUxMLCBpdCBtZWFucyBhIHNjc2kgcGFzc3RocnUgY21kICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCAhPSBOVUxMKQorCQlzY3NpX2RtYV91bm1hcChjbW5kKTsKKworCWJmYV90cmMoYmZhZCwgY21uZC0+cmVzdWx0KTsKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKK30KKwordm9pZAorYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzaywKKwkJICAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZHRzazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisKKwljbW5kLT5TQ3AuU3RhdHVzIHw9IHRza19zdGF0dXMgPDwgMTsKKwlzZXRfYml0KElPX0RPTkVfQklULCAodW5zaWduZWQgbG9uZyAqKSZjbW5kLT5TQ3AuU3RhdHVzKTsKKwl3cSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBjbW5kLT5TQ3AucHRyOworCWNtbmQtPlNDcC5wdHIgPSBOVUxMOworCisJaWYgKHdxKQorCQl3YWtlX3VwKHdxKTsKK30KKwordm9pZAorYmZhX2NiX2lvaW1fcmVzZnJlZSh2b2lkICpkcnYpCit7Cit9CisKKy8qKgorICogIFNjc2lfSG9zdF90ZW1wbGF0ZSBTQ1NJIGhvc3QgdGVtcGxhdGUKKyAqLworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJldHVybnMgQkZBRCBQQ0kgaW5mby4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorYmZhZF9pbV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0YXRpYyBjaGFyICAgICBiZmFfYnVmWzI1Nl07CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCisJbWVtc2V0KGJmYV9idWYsIDAsIHNpemVvZihiZmFfYnVmKSk7CisJc25wcmludGYoYmZhX2J1Ziwgc2l6ZW9mKGJmYV9idWYpLAorCQkgIkJyb2NhZGUgRkMvRkNPRSBBZGFwdGVyLCAiICJtb2RlbDogJXMgaHdwYXRoOiAlcyBkcml2ZXI6ICVzIiwKKwkJIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbCwgYmZhZC0+cGNpX25hbWUsCisJCSBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gYmZhX2J1ZjsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIGFib3J0cyB0aGUgc3BlY2lmaWVkIFNDU0kgY29tbWFuZC4KKyAqCisgKiBSZXR1cm5zOiBTVUNDRVNTIG9yIEZBSUxFRC4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2ltX3MgKmhhbF9pbzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICB0aW1lb3V0OworCWludCAgICAgICAgICAgICByYyA9IEZBSUxFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwloYWxfaW8gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgY21uZC0+aG9zdF9zY3JpYmJsZTsKKwlpZiAoIWhhbF9pbykgeworCQkvKiBJTyBoYXMgYmVlbiBjb21wbGV0ZWQsIHJldHJ1biBzdWNjZXNzICovCisJCXJjID0gU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCWlmIChoYWxfaW8tPmRpbyAhPSAoc3RydWN0IGJmYWRfaW9pbV9zICopIGNtbmQpIHsKKwkJcmMgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCWJmYV90cmMoYmZhZCwgaGFsX2lvLT5pb3RhZyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCWJmYV9pb2ltX2Fib3J0KGhhbF9pbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkvKiBOZWVkIHRvIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgZ2V0IGFib3J0ZWQgKi8KKwl0aW1lb3V0ID0gMTA7CisJd2hpbGUgKChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBjbW5kLT5ob3N0X3NjcmliYmxlID09IGhhbF9pbykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWlmICh0aW1lb3V0IDwgNCAqIEhaKQorCQkJdGltZW91dCAqPSAyOworCX0KKworCWNtbmQtPnNjc2lfZG9uZShjbW5kKTsKKwliZmFfdHJjKGJmYWQsIGhhbF9pby0+aW90YWcpOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCXJldHVybiBTVUNDRVNTOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLAorCQkgICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGJmYV9pdG5pbV9zICpiZmFfaXRuaW07CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJICAgICAgICJ0YXJnZXQgcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW1cbiIpOworCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFNldCBob3N0X3NjcmliYmxlIHRvIE5VTEwgdG8gYXZvaWQgYWJvcnRpbmcgYSB0YXNrIGNvbW1hbmQgaWYKKwkgKiBoYXBwZW5zLgorCSAqLworCWNtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCWNtbmQtPlNDcC5TdGF0dXMgPSAwOworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJYmZhX3Rza2ltX3N0YXJ0KHRza2ltLCBiZmFfaXRuaW0sIChsdW5fdCkwLAorCQkJICAgIEZDUF9UTV9UQVJHRVRfUkVTRVQsIEJGQURfVEFSR0VUX1JFU0VUX1RNTyk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSwgcmVzZXRzIGEgTFVOIGFuZCBhYm9ydCBpdHMgYWxsIGNvbW1hbmRzLgorICoKKyAqIFJldHVybnM6IFNVQ0NFU1Mgb3IgRkFJTEVELgorICoKKyAqLworc3RhdGljIGludAorYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwlpbnQgICAgICAgICAgICAgcmMgPSBTVUNDRVNTOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwllbnVtIGJmaV90c2tpbV9zdGF0dXMgdGFza19zdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlpZiAoIWl0bmltKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyYyA9IEZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJCSJMVU4gcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW0iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXJjID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKioKKwkgKiBTZXQgaG9zdF9zY3JpYmJsZSB0byBOVUxMIHRvIGF2b2lkIGFib3J0aW5nIGEgdGFzayBjb21tYW5kCisJICogaWYgaGFwcGVucy4KKwkgKi8KKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKwljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CisJY21uZC0+U0NwLlN0YXR1cyA9IDA7CisJYmZhX2l0bmltID0gYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKCZpdG5pbS0+ZmNzX2l0bmltKTsKKwliZmFfdHNraW1fc3RhcnQodHNraW0sIGJmYV9pdG5pbSwKKwkJCSAgICBiZmFkX2ludF90b19sdW4oY21uZC0+ZGV2aWNlLT5sdW4pLAorCQkJICAgIEZDUF9UTV9MVU5fUkVTRVQsIEJGQURfTFVOX1JFU0VUX1RNTyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwl3YWl0X2V2ZW50KHdxLCB0ZXN0X2JpdChJT19ET05FX0JJVCwKKwkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKworCXRhc2tfc3RhdHVzID0gY21uZC0+U0NwLlN0YXR1cyA+PiAxOworCWlmICh0YXNrX3N0YXR1cyAhPSBCRklfVFNLSU1fU1RTX09LKSB7CisJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsICJMVU4gcmVzZXQgZmFpbHVyZSwgc3RhdHVzOiAlZFxuIiwKKwkJCSAgICAgICB0YXNrX3N0YXR1cyk7CisJCXJjID0gRkFJTEVEOworCX0KKworb3V0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJlc2V0cyB0aGUgYnVzIGFuZCBhYm9ydCBhbGwgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICBpLCByYywgZXJyX2NudCA9IDA7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyB0YXNrX3N0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZDUF9UQVJHRVQ7IGkrKykgeworCQlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIGkpOworCQlpZiAoaXRuaW0pIHsKKwkJCWNtbmQtPlNDcC5wdHIgPSAoY2hhciAqKSZ3cTsKKwkJCXJjID0gYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChiZmFkLCBjbW5kLCBpdG5pbSk7CisJCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCWVycl9jbnQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogd2FpdCB0YXJnZXQgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJd2FpdF9ldmVudCh3cSwgdGVzdF9iaXQoSU9fRE9ORV9CSVQsCisJCQkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCQkJdGFza19zdGF0dXMgPSBjbW5kLT5TQ3AuU3RhdHVzID4+IDE7CisJCQlpZiAodGFza19zdGF0dXMgIT0gQkZJX1RTS0lNX1NUU19PSykgeworCQkJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsCisJCQkJCSJ0YXJnZXQgcmVzZXQgZmFpbHVyZSwiCisJCQkJCSIgc3RhdHVzOiAlZFxuIiwgdGFza19zdGF0dXMpOworCQkJCWVycl9jbnQrKzsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChlcnJfY250KQorCQlyZXR1cm4gRkFJTEVEOworCisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2Rlc3Ryb3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIEJGQSBGQ1MgaXRuaW0gY2FsbGJhY2tzCisgKi8KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGFsbG9jIGNhbGxiYWNrLCBhZnRlciBzdWNjZXNzZnVsIFBSTEkKKyAqIENvbnRleHQ6IEludGVycnVwdAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKippdG5pbSwKKwkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpCit7CisJKml0bmltX2RydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoKml0bmltX2RydiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkoKml0bmltX2RydiktPmltID0gYmZhZC0+aW07CisJKml0bmltID0gJigqaXRuaW1fZHJ2KS0+ZmNzX2l0bmltOworCSgqaXRuaW1fZHJ2KS0+c3RhdGUgPSBJVE5JTV9TVEFURV9OT05FOworCisJLyoKKwkgKiBJbml0aWF6ZSB0aGUgaXRuaW1fd29yaworCSAqLworCUlOSVRfV09SSygmKCppdG5pbV9kcnYpLT5pdG5pbV93b3JrLCBiZmFkX2ltX2l0bmltX3dvcmtfaGFuZGxlcik7CisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1JQT1JUX09OTElORTsKK30KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGZyZWUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCXd3bl90IHd3cG47CisJdTMyIGZjaWQ7CisJY2hhciB3d3BuX3N0clszMl0sIGZjaWRfc3RyWzE2XTsKKworCS8qIG9ubGluZSB0byBmcmVlIHN0YXRlIHRyYW5zdGlvbiBzaG91bGQgbm90IGhhcHBlbiAqLworCWJmYV9hc3NlcnQoaXRuaW1fZHJ2LT5zdGF0ZSAhPSBJVE5JTV9TVEFURV9PTkxJTkUpOworCisJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMTsKKwkvKiBvZmZsaW5lIHJlcXVlc3QgaXMgbm90IHlldCBkb25lLCB1c2UgdGhlIHNhbWUgcmVxdWVzdCB0byBmcmVlICovCisJaWYgKGl0bmltX2Rydi0+c3RhdGUgPT0gSVROSU1fU1RBVEVfT0ZGTElORV9QRU5ESU5HKQorCQlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAwOworCisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX0ZSRUU7CisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwlpdG5pbV9kcnYtPmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OworCXd3cG4gPSBiZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJZmNpZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwlmY2lkMnN0cihmY2lkX3N0ciwgZmNpZCk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSwKKwkJcG9ydC0+aW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvbmxpbmUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisKKwlpdG5pbV9kcnYtPmJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW1fZHJ2LT5mY3NfaXRuaW0pOworCXBvcnQgPSBiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09OTElORTsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvZmZsaW5lIGNhbGxiYWNrLgorICogQ29udGV4dDogSW50ZXJydXB0LiBiZmFkX2xvY2sgaXMgaGVsZAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwliZmFkID0gcG9ydC0+YmZhZDsKKwlpZiAoKGJmYWQtPnBwb3J0LmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkgfHwKKwkJIChwb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKSB7CisJCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9PRkZMSU5FOworCQlyZXR1cm47CisJfQorCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWJmYWRfb3NfaXRuaW1fcHJvY2VzcyhpdG5pbV9kcnYpOworfQorCisvKioKKyAqIEJGQSBGQ1MgaXRuaW0gdGltZW91dCBjYWxsYmFjay4KKyAqIENvbnRleHQ6IEludGVycnVwdC4gYmZhZF9sb2NrIGlzIGhlbGQKKyAqLwordm9pZCBiZmFfZmNiX2l0bmltX3RvdihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdGUgPSBJVE5JTV9TVEFURV9USU1FT1VUOworfQorCisvKioKKyAqIFBhdGggVE9WIHByb2Nlc3NpbmcgYmVnaW4gbm90aWZpY2F0aW9uIC0tIGR1bW15IGZvciBsaW51eAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX3Rvdl9iZWdpbihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKK30KKworCisKKy8qKgorICogQWxsb2NhdGUgYSBTY3NpX0hvc3QgZm9yIGEgcG9ydC4KKyAqLworaW50CitiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJaW50IGVycm9yID0gMTsKKworCWlmICghaWRyX3ByZV9nZXQoJmJmYWRfaW1fcG9ydF9pbmRleCwgR0ZQX0tFUk5FTCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyX3ByZV9nZXQgZmFpbHVyZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gaWRyX2dldF9uZXcoJmJmYWRfaW1fcG9ydF9pbmRleCwgaW1fcG9ydCwKKwkJCQkJICZpbV9wb3J0LT5pZHJfaWQpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZHJfZ2V0X25ldyBmYWlsdXJlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaW1fcG9ydC0+c2hvc3QgPSBiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhpbV9wb3J0LCBiZmFkKTsKKwlpZiAoIWltX3BvcnQtPnNob3N0KSB7CisJCWVycm9yID0gMTsKKwkJZ290byBvdXRfZnJlZV9pZHI7CisJfQorCisJaW1fcG9ydC0+c2hvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpaW1fcG9ydDsKKwlpbV9wb3J0LT5zaG9zdC0+dW5pcXVlX2lkID0gaW1fcG9ydC0+aWRyX2lkOworCWltX3BvcnQtPnNob3N0LT50aGlzX2lkID0gLTE7CisJaW1fcG9ydC0+c2hvc3QtPm1heF9pZCA9IE1BWF9GQ1BfVEFSR0VUOworCWltX3BvcnQtPnNob3N0LT5tYXhfbHVuID0gTUFYX0ZDUF9MVU47CisJaW1fcG9ydC0+c2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CisJaW1fcG9ydC0+c2hvc3QtPmNhbl9xdWV1ZSA9IGJmYWQtPmNmZ19kYXRhLmlvY19xdWV1ZV9kZXB0aDsKKwlpbV9wb3J0LT5zaG9zdC0+dHJhbnNwb3J0dCA9IGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKKwllcnJvciA9IGJmYWRfb3Nfc2NzaV9hZGRfaG9zdChpbV9wb3J0LT5zaG9zdCwgaW1fcG9ydCwgYmZhZCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfb3Nfc2NzaV9hZGRfaG9zdCBmYWlsdXJlICVkXG4iLAorCQkJCQkJCWVycm9yKTsKKwkJZ290byBvdXRfZmNfcmVsOworCX0KKworCS8qIHNldHVwIGhvc3QgZml4ZWQgYXR0cmlidXRlIGlmIHRoZSBsayBzdXBwb3J0cyAqLworCWJmYWRfb3NfZmNfaG9zdF9pbml0KGltX3BvcnQpOworCisJcmV0dXJuIDA7CisKK291dF9mY19yZWw6CisJc2NzaV9ob3N0X3B1dChpbV9wb3J0LT5zaG9zdCk7CitvdXRfZnJlZV9pZHI6CisJaWRyX3JlbW92ZSgmYmZhZF9pbV9wb3J0X2luZGV4LCBpbV9wb3J0LT5pZHJfaWQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJmYV90cmMoYmZhZCwgYmZhZC0+aW5zdF9ubyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsCisJCQlpbV9wb3J0LT5zaG9zdC0+aG9zdF9ubyk7CisKKwlmY19yZW1vdmVfaG9zdChpbV9wb3J0LT5zaG9zdCk7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGltX3BvcnQtPnNob3N0KTsKKwlzY3NpX2hvc3RfcHV0KGltX3BvcnQtPnNob3N0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZHJfcmVtb3ZlKCZiZmFkX2ltX3BvcnRfaW5kZXgsIGltX3BvcnQtPmlkcl9pZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX3BvcnRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MsIHBvcnRfZGVsZXRlX3dvcmspOworCisJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShpbV9wb3J0LT5iZmFkLCBpbV9wb3J0KTsKKwliZmFkX2ltX3BvcnRfY2xlYW4oaW1fcG9ydCk7CisJa2ZyZWUoaW1fcG9ydCk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisKKwlpbV9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfaW1fcG9ydF9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKGltX3BvcnQgPT0gTlVMTCkgeworCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQlnb3RvIGV4dDsKKwl9CisJcG9ydC0+aW1fcG9ydCA9IGltX3BvcnQ7CisJaW1fcG9ydC0+cG9ydCA9IHBvcnQ7CisJaW1fcG9ydC0+YmZhZCA9IGJmYWQ7CisKKwlJTklUX1dPUksoJmltX3BvcnQtPnBvcnRfZGVsZXRlX3dvcmssIGJmYWRfaW1fcG9ydF9kZWxldGVfaGFuZGxlcik7CisJSU5JVF9MSVNUX0hFQUQoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW1fcG9ydC0+YmluZGluZ19saXN0KTsKKworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0gcG9ydC0+aW1fcG9ydDsKKworCXF1ZXVlX3dvcmsoYmZhZC0+aW0tPmRydl93b3JrcSwKKwkJCQkmaW1fcG9ydC0+cG9ydF9kZWxldGVfd29yayk7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IGJmYWRfZmNwX2JpbmRpbmcgKmJwLCAqYnBfbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9ICBpbV9wb3J0LT5iZmFkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgYnBfbmV3LCAmaW1fcG9ydC0+YmluZGluZ19saXN0LAorCQkJCQlsaXN0X2VudHJ5KSB7CisJCWxpc3RfZGVsKCZicC0+bGlzdF9lbnRyeSk7CisJCWtmcmVlKGJwKTsKKwl9CisKKwkvKiB0aGUgaXRuaW1fbWFwcGVkX2xpc3QgbXVzdCBiZSBlbXB0eSBhdCB0aGlzIHRpbWUgKi8KKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCkKK3sKK30KKworYmZhX3N0YXR1c190CitiZmFkX2ltX3Byb2JlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYWRfaW1fcyAgICAgICppbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJaW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9pbV9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGltID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJYmZhZC0+aW0gPSBpbTsKKwlpbS0+YmZhZCA9IGJmYWQ7CisKKwlpZiAoYmZhZF9vc190aHJlYWRfd29ya3EoYmZhZCkgIT0gQkZBX1NUQVRVU19PSykgeworCQlrZnJlZShpbSk7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJfQorCitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2ltX3Byb2JlX3VuZG8oc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pIHsKKwkJYmZhZF9vc19kZXN0cm95X3dvcmtxKGJmYWQtPmltKTsKKwkJa2ZyZWUoYmZhZC0+aW0pOworCQliZmFkLT5pbSA9IE5VTEw7CisJfQorfQorCisKKworCitpbnQKK2JmYWRfb3Nfc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAorCQkJc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKyAgICBpZiAoaW1fcG9ydC0+cG9ydC0+cHZiX3R5cGUgPT0gQkZBRF9QT1JUX1BIWVNfQkFTRSkKKwkJZGV2ID0gJmJmYWQtPnBjaWRldi0+ZGV2OworICAgIGVsc2UKKwkJZGV2ID0gJmJmYWQtPnBwb3J0LmltX3BvcnQtPnNob3N0LT5zaG9zdF9nZW5kZXY7CisKKyAgICByZXR1cm4gc2NzaV9hZGRfaG9zdChzaG9zdCwgZGV2KTsKK30KKworc3RydWN0IFNjc2lfSG9zdCAqCitiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OworCisJaWYgKGltX3BvcnQtPnBvcnQtPnB2Yl90eXBlID09IEJGQURfUE9SVF9QSFlTX0JBU0UpCisJCXNodCA9ICZiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKKwllbHNlCisJCXNodCA9ICZiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlOworCisJc2h0LT5zZ190YWJsZXNpemUgPSBiZmFkLT5jZmdfZGF0YS5pb19tYXhfc2dlOworCisJcmV0dXJuIHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cit9CisKK3ZvaWQKK2JmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCWZsdXNoX3dvcmtxdWV1ZShiZmFkLT5pbS0+ZHJ2X3dvcmtxKTsKKwliZmFkX2ltX3Njc2lfaG9zdF9mcmVlKGltX3BvcnQtPmJmYWQsIGltX3BvcnQpOworCWJmYWRfaW1fcG9ydF9jbGVhbihpbV9wb3J0KTsKKwlrZnJlZShpbV9wb3J0KTsKK30KKwordm9pZAorYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKQoreworCWlmIChpbSAmJiBpbS0+ZHJ2X3dvcmtxKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGltLT5kcnZfd29ya3EpOworCQlpbS0+ZHJ2X3dvcmtxID0gTlVMTDsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9vc190aHJlYWRfd29ya3Eoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gYmZhZC0+aW07CisKKwliZmFfdHJjKGJmYWQsIDApOworCXNucHJpbnRmKGltLT5kcnZfd29ya3FfbmFtZSwgQkZBRF9LT0JKX05BTUVfTEVOLCAiYmZhZF93cV8lZCIsCisJCSBiZmFkLT5pbnN0X25vKTsKKwlpbS0+ZHJ2X3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaW0tPmRydl93b3JrcV9uYW1lKTsKKwlpZiAoIWltLT5kcnZfd29ya3EpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE9TIGVudHJ5IHBvaW50IHRvIGFkanVzdCB0aGUgcXVldWVfZGVwdGhzIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KKyAqIENhbGxlZCBvbmNlIHBlciBkZXZpY2UgZHVyaW5nIHRoZSBidXMgc2Nhbi4KKyAqIFJldHVybiBub24temVybyBpZiBmYWlscy4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKKwllbHNlCisJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBCRkFEX0RSSVZFUl9OQU1FLAorCS5pbmZvID0gYmZhZF9pbV9pbmZvLAorCS5xdWV1ZWNvbW1hbmQgPSBiZmFkX2ltX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGJmYWRfaW1fYWJvcnRfaGFuZGxlciwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2x1bl9oYW5kbGVyLAorCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IGJmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIsCisKKwkuc2xhdmVfYWxsb2MgPSBiZmFkX2ltX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPSBiZmFkX2ltX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfZGVzdHJveSA9IGJmYWRfaW1fc2xhdmVfZGVzdHJveSwKKworCS50aGlzX2lkID0gLTEsCisJLnNnX3RhYmxlc2l6ZSA9IEJGQURfSU9fTUFYX1NHRSwKKwkuY21kX3Blcl9sdW4gPSAzLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycyA9IGJmYWRfaW1faG9zdF9hdHRycywKKwkubWF4X3NlY3RvcnMgPSAweEZGRkYsCit9OworCitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGUgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gQkZBRF9EUklWRVJfTkFNRSwKKwkuaW5mbyA9IGJmYWRfaW1faW5mbywKKwkucXVldWVjb21tYW5kID0gYmZhZF9pbV9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBiZmFkX2ltX2Fib3J0X2hhbmRsZXIsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2J1c19oYW5kbGVyLAorCisJLnNsYXZlX2FsbG9jID0gYmZhZF9pbV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0gYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPSBiZmFkX2ltX3NsYXZlX2Rlc3Ryb3ksCisKKwkudGhpc19pZCA9IC0xLAorCS5zZ190YWJsZXNpemUgPSBCRkFEX0lPX01BWF9TR0UsCisJLmNtZF9wZXJfbHVuID0gMywKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX3Zwb3J0X2F0dHJzLAorCS5tYXhfc2VjdG9ycyA9IDB4RkZGRiwKK307CisKK3ZvaWQKK2JmYWRfaW1fcHJvYmVfcG9zdChzdHJ1Y3QgYmZhZF9pbV9zICppbSkKK3sKKwlmbHVzaF93b3JrcXVldWUoaW0tPmRydl93b3JrcSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPQorCQlmY19hdHRhY2hfdHJhbnNwb3J0KCZiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlKTsKKwlpZiAoIWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCXJldHVybiBCRkFfU1RBVFVTX0VOT01FTTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFkX2ltX21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpOworfQorCit2b2lkCitiZmFkX29zX2l0bmltX3Byb2Nlc3Moc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX2ltX3MgICAgICAqaW0gPSBpdG5pbV9kcnYtPmltOworCisJaWYgKGl0bmltX2Rydi0+cXVldWVfd29yaykKKwkJcXVldWVfd29yayhpbS0+ZHJ2X3dvcmtxLCAmaXRuaW1fZHJ2LT5pdG5pbV93b3JrKTsKK30KKwordm9pZAorYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CisKKwlpZiAoKChqaWZmaWVzIC0gaXRuaW0tPmxhc3RfcmFtcF91cF90aW1lKSA+CisJCUJGQV9RVUVVRV9GVUxMX1JBTVBfVVBfVElNRSAqIEhaKSAmJgorCQkoKGppZmZpZXMgLSBpdG5pbS0+bGFzdF9xdWV1ZV9mdWxsX3RpbWUpID4KKwkJQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FICogSFopKSB7CisJCXNob3N0X2Zvcl9lYWNoX2RldmljZSh0bXBfc2Rldiwgc2Rldi0+aG9zdCkgeworCQkJaWYgKGJmYV9sdW5fcXVldWVfZGVwdGggPiB0bXBfc2Rldi0+cXVldWVfZGVwdGgpIHsKKwkJCQlpZiAodG1wX3NkZXYtPmlkICE9IHNkZXYtPmlkKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAodG1wX3NkZXYtPm9yZGVyZWRfdGFncykKKwkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCQlNU0dfT1JERVJFRF9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKwkJCQllbHNlCisJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQkJTVNHX1NJTVBMRV9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKworCQkJCWl0bmltLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQKK2JmYWRfb3NfaGFuZGxlX3FmdWxsKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKKworCWl0bmltLT5sYXN0X3F1ZXVlX2Z1bGxfdGltZSA9IGppZmZpZXM7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKKwkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKKwkJCWNvbnRpbnVlOworCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEpOworCX0KK30KKworCisKKworc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKworCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdG5pbSwgJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0LCBsaXN0X2VudHJ5KSB7CisJCWlmIChpZCA9PSBpdG5pbS0+c2NzaV90Z3RfaWQpCisJCQlyZXR1cm4gaXRuaW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2FsbG9jCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNkZXYpKTsKKworCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQorCQlyZXR1cm4gLUVOWElPOworCisJc2Rldi0+aG9zdGRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX2ZjX2hvc3RfaW5pdChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGltX3BvcnQtPnNob3N0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwl1bmlvbiBhdHRyIHsKKwkJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcGF0dHI7CisJCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJfSBhdHRyOworCisJZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisJZmNfaG9zdF9wb3J0X25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKGhvc3QpID0gRkNfQ09TX0NMQVNTMzsKKworCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpLCAwLAorCSAgICAgICBzaXplb2YoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KSkpOworCWlmIChiZmFkX3N1cHBvcnRlZF9mYzRzICYgKEJGQV9QT1JUX1JPTEVfRkNQX0lNIHwgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pKQorCQkvKiBGb3IgRkNQIHR5cGUgMHgwOCAqLworCQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpWzJdID0gMTsKKwlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCS8qIEZvciBMTEMvU05BUCB0eXBlIDB4MDUgKi8KKwkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVszXSA9IDB4MjA7CisJLyogRm9yIGZpYnJlIGNoYW5uZWwgc2VydmljZXMgdHlwZSAweDIwICovCisJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVs3XSA9IDE7CisKKwltZW1zZXQoJmF0dHIuaW9jX2F0dHIsIDAsIHNpemVvZihhdHRyLmlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLmlvY19hdHRyKTsKKwlzcHJpbnRmKGZjX2hvc3Rfc3ltYm9saWNfbmFtZShob3N0KSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzIiwKKwkJYXR0ci5pb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwsCisJCWF0dHIuaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgPSAwOworCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhob3N0KSB8PQorCQlGQ19QT1JUU1BFRURfOEdCSVQgfCBGQ19QT1JUU1BFRURfNEdCSVQgfCBGQ19QT1JUU1BFRURfMkdCSVQgfAorCQlGQ19QT1JUU1BFRURfMUdCSVQ7CisKKwltZW1zZXQoJmF0dHIucGF0dHIsIDAsIHNpemVvZihhdHRyLnBhdHRyKSk7CisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLnBhdHRyKTsKKwlmY19ob3N0X21heGZyYW1lX3NpemUoaG9zdCkgPSBhdHRyLnBhdHRyLnBwb3J0X2NmZy5tYXhmcnNpemU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX2ZjX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBycG9ydF9pZHM7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisKKwlycG9ydF9pZHMubm9kZV9uYW1lID0KKwkJYmZhX29zX2h0b25sbChiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnBvcnRfbmFtZSA9CisJCWJmYV9vc19odG9ubGwoYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSkpOworCXJwb3J0X2lkcy5wb3J0X2lkID0KKwkJYmZhX29zX2h0b24zYihiZmFfZmNzX2l0bmltX2dldF9mY2lkKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCisJaXRuaW0tPmZjX3Jwb3J0ID0gZmNfcnBvcnQgPQorCQlmY19yZW1vdGVfcG9ydF9hZGQoaW1fcG9ydC0+c2hvc3QsIDAsICZycG9ydF9pZHMpOworCisJaWYgKCFmY19ycG9ydCkKKwkJcmV0dXJuOworCisJZmNfcnBvcnQtPm1heGZyYW1lX3NpemUgPQorCQliZmFfZmNzX2l0bmltX2dldF9tYXhmcnNpemUoJml0bmltLT5mY3NfaXRuaW0pOworCWZjX3Jwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGJmYV9mY3NfaXRuaW1fZ2V0X2NvcygmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlpdG5pbV9kYXRhID0gZmNfcnBvcnQtPmRkX2RhdGE7CisJaXRuaW1fZGF0YS0+aXRuaW0gPSBpdG5pbTsKKworCXJwb3J0X2lkcy5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CisKKwlpZiAocnBvcnRfaWRzLnJvbGVzICE9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTikKKwkJZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyhmY19ycG9ydCwgcnBvcnRfaWRzLnJvbGVzKTsKKworCWlmICgoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKQorCSAgICAmJiAoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkIDwgTUFYX0ZDUF9UQVJHRVQpKQorCQlpdG5pbS0+c2NzaV90Z3RfaWQgPSBmY19ycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogV29yayBxdWV1ZSBoYW5kbGVyIHVzaW5nIEZDIHRyYW5zcG9ydCBzZXJ2aWNlCisqIENvbnRleHQ6IGtlcm5lbAorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJmYWRfaXRuaW1fcywKKwkJCQkJCQlpdG5pbV93b3JrKTsKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gaXRuaW0tPmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltLT5iZmFkOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwl3d25fdCB3d3BuOworCXUzMiBmY2lkOworCWNoYXIgd3dwbl9zdHJbMzJdLCBmY2lkX3N0clsxNl07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW1fcG9ydCA9IGl0bmltLT5pbV9wb3J0OworCWJmYV90cmMoYmZhZCwgaXRuaW0tPnN0YXRlKTsKKwlzd2l0Y2ggKGl0bmltLT5zdGF0ZSkgeworCWNhc2UgSVROSU1fU1RBVEVfT05MSU5FOgorCQlpZiAoIWl0bmltLT5mY19ycG9ydCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQliZmFkX2ltX2ZjX3Jwb3J0X2FkZChpbV9wb3J0LCBpdG5pbSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfYWRkX3RhaWwoJml0bmltLT5saXN0X2VudHJ5LAorCQkJCSZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PTkxJTkUsCisJCQkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCQkJaXRuaW0tPnNjc2lfdGd0X2lkLAorCQkJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBpdG5pbSAlbGx4IGlzIGFscmVhZHkgaW4gb25saW5lIHN0YXRlXG4iLAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQliZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJCX0KKworCQlicmVhazsKKwljYXNlIElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzoKKwkJaXRuaW0tPnN0YXRlID0gSVROSU1fU1RBVEVfT0ZGTElORTsKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfZGVsKCZpdG5pbS0+bGlzdF9lbnRyeSk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLAorCQkJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLAorCQkJCWl0bmltLT5zY3NpX3RndF9pZCwKKwkJCQlmY2lkX3N0ciwgd3dwbl9zdHIpOworCQl9CisJCWJyZWFrOworCWNhc2UgSVROSU1fU1RBVEVfRlJFRToKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlsaXN0X2RlbCgmaXRuaW0tPmxpc3RfZW50cnkpOworCQl9CisKKwkJa2ZyZWUoaXRuaW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHF1ZXVlIGEgU0NTSSBjb21tYW5kIHRvIHRoZSBCRkFELgorICovCitzdGF0aWMgaW50CitiZmFkX2ltX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICpoYWxfaW87CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWludCAgICAgICAgICAgICByYzsKKwlzMTYgICAgICAgIHNnX2NudCA9IDA7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoY21uZC0+ZGV2aWNlKSk7CisKKwlyYyA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKKwlpZiAocmMpIHsKKwkJY21uZC0+cmVzdWx0ID0gcmM7CisJCWRvbmUoY21uZCk7CisJCXJldHVybiAwOworCX0KKworCXNnX2NudCA9IHNjc2lfZG1hX21hcChjbW5kKTsKKworCWlmIChzZ19jbnQgPCAwKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJiZmFkJWQsIHF1ZXVlY29tbWFuZCAlcCAleCBmYWlsZWQsIEJGQSBzdG9wcGVkXG4iLAorCQkgICAgICAgYmZhZC0+aW5zdF9ubywgY21uZCwgY21uZC0+Y21uZFswXSk7CisJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX05PX0NPTk5FQ1QsIDApOworCQlnb3RvIG91dF9mYWlsX2NtZDsKKwl9CisKKwlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCWlmICghaXRuaW0pIHsKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfSU1NX1JFVFJZLCAwKTsKKwkJZ290byBvdXRfZmFpbF9jbWQ7CisJfQorCisJaGFsX2lvID0gYmZhX2lvaW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX2lvaW1fcyAqKSBjbW5kLAorCQkJCSAgICBpdG5pbS0+YmZhX2l0bmltLCBzZ19jbnQpOworCWlmICghaGFsX2lvKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhhbF9pbyBmYWlsdXJlXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKiloYWxfaW87CisJYmZhX3RyY19mcChiZmFkLCBoYWxfaW8tPmlvdGFnKTsKKwliZmFfaW9pbV9zdGFydChoYWxfaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK291dF9mYWlsX2NtZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlzY3NpX2RtYV91bm1hcChjbW5kKTsKKwlpZiAoZG9uZSkKKwkJZG9uZShjbW5kKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50IGk7CisJaW50IHJwb3J0X2RlbGF5ID0gMTA7CisKKwlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKQorCQkgJiYgaSA8IGJmYV9saW5rdXBfZGVsYXk7IGkrKykKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKSB7CisJCXJwb3J0X2RlbGF5ID0gcnBvcnRfZGVsYXkgPCBiZmFfbGlua3VwX2RlbGF5ID8KKwkJCQkgcnBvcnRfZGVsYXkgOiBiZmFfbGlua3VwX2RlbGF5OworCQlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1JQT1JUX09OTElORSkKKwkJCSAmJiBpIDwgcnBvcnRfZGVsYXk7IGkrKykKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKKworCQlpZiAocnBvcnRfZGVsYXkgPiAwICYmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9SUE9SVF9PTkxJTkUpKQorCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUocnBvcnRfZGVsYXkgKiBIWik7CisJfQorfQorCitpbnQKK2JmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCisJdTggICAgICAgICBud3ducyA9IDA7CisJd3duX3QgICAgICAgICAgICp3d25zOworCWludCAgICAgICAgICAgICBsZGVsYXk7CisKKwkvKgorCSAqIFF1ZXJ5aW5nIGZvciB0aGUgYm9vdCB0YXJnZXQgcG9ydCB3d25zCisJICogLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisJICogSWYgbnd3bnMgPiAwID0+IGJvb3Qgb3ZlciBTQU4gYW5kIHNldCBiZmFfbGlua3VwX2RlbGF5ID0gMzAKKwkgKiBlbHNlID0+IGxvY2FsIGJvb3QgbWFjaGluZSBzZXQgYmZhX2xpbmt1cF9kZWxheSA9IDEwCisJICovCisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKCZiZmFkLT5iZmEsICZud3ducywgJnd3bnMpOworCisJaWYgKG53d25zID4gMCkgeworCQkvKiBJZiBib290IG92ZXIgU0FOOyBsaW5rdXBfZGVsYXkgPSAzMHNlYyAqLworCQlsZGVsYXkgPSAzMDsKKwl9IGVsc2UgeworCQkvKiBJZiBsb2NhbCBib290OyBsaW5rdXBfZGVsYXkgPSAxMHNlYyAqLworCQlsZGVsYXkgPSAwOworCX0KKworCXJldHVybiBsZGVsYXk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlhNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9JTV9IX18KKworI2luY2x1ZGUgImZjcy9iZmFfZmNzX2ZjcGltLmgiCisjaW5jbHVkZSAiYmZhZF9pbV9jb21wYXQuaCIKKworI2RlZmluZSBGQ1BJX05BTUUgIiBmY3BpbSIKKwordm9pZCBiZmFkX2ZsYWdzX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MzIgZmxhZ3MpOworYmZhX3N0YXR1c190IGJmYWRfaW1fbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkIGJmYWRfaW1fbW9kdWxlX2V4aXQodm9pZCk7CitiZmFfc3RhdHVzX3QgYmZhZF9pbV9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9pbV9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCBiZmFkX2ltX3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfaW1fcyAqaW0pOworYmZhX3N0YXR1c190IGJmYWRfaW1fcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFkX2ltX3BvcnRfb25saW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworaW50ICBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworCisjZGVmaW5lIE1BWF9GQ1BfVEFSR0VUIDEwMjQKKyNkZWZpbmUgTUFYX0ZDUF9MVU4gMTYzODQKKyNkZWZpbmUgQkZBRF9UQVJHRVRfUkVTRVRfVE1PIDYwCisjZGVmaW5lIEJGQURfTFVOX1JFU0VUX1RNTyA2MAorI2RlZmluZSBTY3NpUmVzdWx0KGhvc3RfY29kZSwgc2NzaV9jb2RlKSAoKChob3N0X2NvZGUpIDw8IDE2KSB8IHNjc2lfY29kZSkKKyNkZWZpbmUgQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FIDEyMAorI2RlZmluZSBCRkFEX0tPQkpfTkFNRV9MRU4gMjAKKworLyoKKyAqIGl0bmltIGZsYWdzCisgKi8KKyNkZWZpbmUgSVROSU1fTUFQUEVECQkweDAwMDAwMDAxCisKKyNkZWZpbmUgU0NTSV9UQVNLX01HTVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSU9fRE9ORV9CSVQJCQkwCisKK3N0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyB7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07Cit9OworCitzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgeworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHBvcnRfZGVsZXRlX3dvcms7CisJaW50ICAgICAgICAgICAgIGlkcl9pZDsKKwl1MTYgICAgICAgIGN1cl9zY3NpX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgYmluZGluZ19saXN0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBsaXN0X2hlYWQgaXRuaW1fbWFwcGVkX2xpc3Q7Cit9OworCitlbnVtIGJmYWRfaXRuaW1fc3RhdGUgeworCUlUTklNX1NUQVRFX05PTkUsCisJSVROSU1fU1RBVEVfT05MSU5FLAorCUlUTklNX1NUQVRFX09GRkxJTkVfUEVORElORywKKwlJVE5JTV9TVEFURV9PRkZMSU5FLAorCUlUTklNX1NUQVRFX1RJTUVPVVQsCisJSVROSU1fU1RBVEVfRlJFRSwKK307CisKKy8qCisgKiBQZXIgaXRuaW0gZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgZmNzX2l0bmltOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpdG5pbV93b3JrOworCXUzMiAgICAgICAgZmxhZ3M7CisJZW51bSBiZmFkX2l0bmltX3N0YXRlIHN0YXRlOworCXN0cnVjdCBiZmFkX2ltX3MgKmltOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpkcnZfcnBvcnQ7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKKwl1MTYgICAgICAgIHNjc2lfdGd0X2lkOworCXUxNiAgICAgICAgcXVldWVfd29yazsKKwl1bnNpZ25lZCBsb25nCWxhc3RfcmFtcF91cF90aW1lOworCXVuc2lnbmVkIGxvbmcJbGFzdF9xdWV1ZV9mdWxsX3RpbWU7Cit9OworCitlbnVtIGJmYWRfYmluZGluZ190eXBlIHsKKwlGQ1BfUFdXTl9CSU5ESU5HID0gMHgxLAorCUZDUF9OV1dOX0JJTkRJTkcgPSAweDIsCisJRkNQX0ZDSURfQklORElORyA9IDB4MywKK307CisKK3N0cnVjdCBiZmFkX2ZjcF9iaW5kaW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJZW51bSBiZmFkX2JpbmRpbmdfdHlwZSBiaW5kaW5nX3R5cGU7CisJdTE2ICAgICAgICBzY3NpX3RhcmdldF9pZDsKKwl1MzIgICAgICAgIGZjX2lkOworCXd3bl90ICAgICAgICAgICBud3duOworCXd3bl90ICAgICAgICAgICBwd3duOworfTsKKworc3RydWN0IGJmYWRfaW1fcyB7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcnZfd29ya3E7CisJY2hhciAgIGRydl93b3JrcV9uYW1lW0JGQURfS09CSl9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgU2NzaV9Ib3N0ICpiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsCisJCQkJc3RydWN0IGJmYWRfcyAqKTsKK2JmYV9zdGF0dXNfdCBiZmFkX29zX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKTsKK3ZvaWQgYmZhZF9vc19pdG5pbV9wcm9jZXNzKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkIGJmYWRfb3NfZmNfaG9zdF9pbml0KHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3NfaW5pdF93b3JrKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQkgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKK3ZvaWQgYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwKKwkJCQkgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK3ZvaWQgYmZhZF9vc19oYW5kbGVfcWZ1bGwoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdHJ1Y3QgYmZhZF9pdG5pbV9zICpiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCk7CitpbnQgYmZhZF9vc19zY3NpX2FkZF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisvKgorICogc2NzaV9ob3N0X3RlbXBsYXRlIGVudHJpZXMKKyAqLwordm9pZCBiZmFkX2ltX2l0bmltX3VubWFwKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAgKmltX3BvcnQsCisJCQkgc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0pOworCitleHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIGJmYWRfaW1fZmNfZnVuY3Rpb25fdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDNlNzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltX2NvbXBhdC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fQ09NUEFUX0hfXworI2RlZmluZSBfX0JGQURfSU1fQ09NUEFUX0hfXworCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfYnVmOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2Vfc2l6ZTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdOworCit1MzIgKmJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit1MzIgKmJmYWRfcmVhZF9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICoqYmZpX2ltYWdlLAorCQkJdTMyICpiZmlfaW1hZ2Vfc2l6ZSwgY2hhciAqZndfbmFtZSk7CisKK3N0YXRpYyBpbmxpbmUgdTMyICoKK2JmYWRfbG9hZF9md2ltZyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4oYmZhZF9nZXRfZmlybXdhcmVfYnVmKHBkZXYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiZmFkX2ZyZWVfZndpbWcodm9pZCkKK3sKKwlpZiAoYmZpX2ltYWdlX2N0X3NpemUgJiYgYmZpX2ltYWdlX2N0KQorCQl2ZnJlZShiZmlfaW1hZ2VfY3QpOworCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSAmJiBiZmlfaW1hZ2VfY2IpCisJCXZmcmVlKGJmaV9pbWFnZV9jYik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNGUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF90cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKExEUlYsIElOVFIpOworCisvKioKKyAqICBiZmFfaXNyIEJGQSBkcml2ZXIgaW50ZXJydXB0IGZ1bmN0aW9ucworICovCitpcnFyZXR1cm5fdCBiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpbnQgbXNpeF9kaXNhYmxlOworbW9kdWxlX3BhcmFtKG1zaXhfZGlzYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisvKioKKyAqIExpbmUgYmFzZWQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK2lycXJldHVybl90CitiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRldl9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWJmYV9ib29sZWFuX3QgcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfaW50eCgmYmZhZC0+YmZhKTsKKwlpZiAoIXJjKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfY29tcF9mcmVlKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfdHJjX2ZwKGJmYWQsIGlycSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworCit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYmZhZF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgKnZlYyA9IGRldl9pZDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gdmVjLT5iZmFkOworCXN0cnVjdCBsaXN0X2hlYWQgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhX21zaXgoJmJmYWQtPmJmYSwgdmVjLT5tc2l4LmVudHJ5KTsKKwliZmFfY29tcF9kZXEoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmZG9uZXEpKSB7CisJCWJmYV9jb21wX3Byb2Nlc3MoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWJmYV9jb21wX2ZyZWUoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIE1TSVggZW50cnkgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2luaXRfbXNpeF9lbnRyeShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzLAorCQkJIGludCBtYXNrLCBpbnQgbWF4X2JpdCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlpbnQgICAgICAgICAgICAgbWF0Y2ggPSAweDAwMDAwMDAxOworCisJZm9yIChpID0gMCwgYmZhZC0+bnZlYyA9IDA7IGkgPCBNQVhfTVNJWF9FTlRSWTsgaSsrKSB7CisJCWlmIChtYXNrICYgbWF0Y2gpIHsKKwkJCWJmYWQtPm1zaXhfdGFiW2JmYWQtPm52ZWNdLm1zaXguZW50cnkgPSBpOworCQkJYmZhZC0+bXNpeF90YWJbYmZhZC0+bnZlY10uYmZhZCA9IGJmYWQ7CisJCQltc2l4X2VudHJpZXNbYmZhZC0+bnZlY10uZW50cnkgPSBpOworCQkJYmZhZC0+bnZlYysrOworCQl9CisKKwkJbWF0Y2ggPDw9IDE7CisJfQorCit9CisKK2ludAorYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpLCBlcnJvciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhZC0+bnZlYzsgaSsrKSB7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IsCisJCQkJICAgIChpcnFfaGFuZGxlcl90KSBiZmFkX21zaXgsIDAsCisJCQkJICAgIEJGQURfRFJJVkVSX05BTUUsICZiZmFkLT5tc2l4X3RhYltpXSk7CisJCWJmYV90cmMoYmZhZCwgaSk7CisJCWJmYV90cmMoYmZhZCwgYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IpOworCQlpZiAoZXJyb3IpIHsKKwkJCWludCAgICAgICAgICAgICBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2pdLm1zaXgudmVjdG9yLAorCQkJCQkJJmJmYWQtPm1zaXhfdGFiW2pdKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXR1cCBNU0lYIGJhc2VkIGludGVycnVwdC4KKyAqLworaW50CitiZmFkX3NldHVwX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCXUzMiBtYXNrID0gMCwgaSwgbnVtX2JpdCA9IDAsIG1heF9iaXQgPSAwOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNQVhfTVNJWF9FTlRSWV07CisKKwkvKiBDYWxsIEJGQSB0byBnZXQgdGhlIG1zaXggbWFwIGZvciB0aGlzIFBDSSBmdW5jdGlvbi4gICovCisJYmZhX21zaXhfZ2V0dmVjcygmYmZhZC0+YmZhLCAmbWFzaywgJm51bV9iaXQsICZtYXhfYml0KTsKKworCS8qIFNldCB1cCB0aGUgbXNpeCBlbnRyeSB0YWJsZSAqLworCWJmYWRfaW5pdF9tc2l4X2VudHJ5KGJmYWQsIG1zaXhfZW50cmllcywgbWFzaywgbWF4X2JpdCk7CisKKwlpZiAoIW1zaXhfZGlzYWJsZSkgeworCQllcnJvciA9IHBjaV9lbmFibGVfbXNpeChiZmFkLT5wY2lkZXYsIG1zaXhfZW50cmllcywgYmZhZC0+bnZlYyk7CisJCWlmIChlcnJvcikgeworCQkJLyoKKwkJCSAqIE9ubHkgZXJyb3IgbnVtYmVyIG9mIHZlY3RvciBpcyBhdmFpbGFibGUuCisJCQkgKiBXZSBkb24ndCBoYXZlIGEgbWVjaGFuaXNtIHRvIG1hcCBtdWx0aXBsZQorCQkJICogaW50ZXJydXB0cyBpbnRvIG9uZSB2ZWN0b3IsIHNvIGV2ZW4gaWYgd2UKKwkJCSAqIGNhbiB0cnkgdG8gcmVxdWVzdCBsZXNzIHZlY3RvcnMsIHdlIGRvbid0CisJCQkgKiBrbm93IGhvdyB0byBhc3NvY2lhdGUgaW50ZXJydXB0IGV2ZW50cyB0bworCQkJICogIHZlY3RvcnMuIExpbnV4IGRvZXNuJ3QgZHVwaWNhdGUgdmVjdG9ycworCQkJICogaW4gdGhlIE1TSVggdGFibGUgZm9yIHRoaXMgY2FzZS4KKwkJCSAqLworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6ICIKKwkJCQkicGNpX2VuYWJsZV9tc2l4IGZhaWxlZCAoJWQpLCIKKwkJCQkiIHVzZSBsaW5lIGJhc2VkLlxuIiwgYmZhZC0+aW5zdF9ubywgZXJyb3IpOworCisJCQlnb3RvIGxpbmVfYmFzZWQ7CisJCX0KKworCQkvKiBTYXZlIHRoZSB2ZWN0b3JzICovCisJCWZvciAoaSA9IDA7IGkgPCBiZmFkLT5udmVjOyBpKyspIHsKKwkJCWJmYV90cmMoYmZhZCwgbXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJCQliZmFkLT5tc2l4X3RhYltpXS5tc2l4LnZlY3RvciA9IG1zaXhfZW50cmllc1tpXS52ZWN0b3I7CisJCX0KKworCQliZmFfbXNpeF9pbml0KCZiZmFkLT5iZmEsIGJmYWQtPm52ZWMpOworCisJCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9NU0lYX09OOworCisJCXJldHVybiBlcnJvcjsKKwl9CisKK2xpbmVfYmFzZWQ6CisJZXJyb3IgPSAwOworCWlmIChyZXF1ZXN0X2lycQorCSAgICAoYmZhZC0+cGNpZGV2LT5pcnEsIChpcnFfaGFuZGxlcl90KSBiZmFkX2ludHgsIEJGQURfSVJRX0ZMQUdTLAorCSAgICAgQkZBRF9EUklWRVJfTkFNRSwgYmZhZCkgIT0gMCkgeworCQkvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsZXIgZmFpbGVkICovCisJCXJldHVybiAxOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9yZW1vdmVfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pIHsKKwkJZm9yIChpID0gMDsgaSA8IGJmYWQtPm52ZWM7IGkrKykKKwkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2ldLm1zaXgudmVjdG9yLAorCQkJCQkmYmZhZC0+bXNpeF90YWJbaV0pOworCisJCXBjaV9kaXNhYmxlX21zaXgoYmZhZC0+cGNpZGV2KTsKKwkJYmZhZC0+YmZhZF9mbGFncyAmPSB+QkZBRF9NU0lYX09OOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKGJmYWQtPnBjaWRldi0+aXJxLCBiZmFkKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2lwZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4YmM1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9EUlZfSVBGQ19IX18KKyNkZWZpbmUgX19CRkFfRFJWX0lQRkNfSF9fCisKKworI2RlZmluZSBJUEZDX05BTUUgIiIKKworI2RlZmluZSBiZmFkX2lwZmNfbW9kdWxlX2luaXQoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19tb2R1bGVfZXhpdCh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcHJvYmVfdW5kbyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfY29uZmlnKHgsIHkpIEJGQV9TVEFUVVNfT0sKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfdW5jb25maWcoeCwgeSkgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlX3Bvc3QoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X25ldyh4LCB5LCB6KSBCRkFfU1RBVFVTX09LCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X2RlbGV0ZSh4LCB5KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfb25saW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcG9ydF9vZmZsaW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfaXBfZ2V0X2F0dHIoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9yZXNldF9kcnZfc3RhdHMoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9nZXRfZHJ2X3N0YXRzKHgsIHkpIEJGQV9TVEFUVVNfRkFJTEVECisjZGVmaW5lIGJmYWRfaXBfZW5hYmxlX2lwZmMoeCwgeSwgeikgQkZBX1NUQVRVU19GQUlMRUQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX29zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNDdiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9vcy5jIExpbnV4IGRyaXZlciBPUyBzcGVjaWZpYyBjYWxscy4KKyAqLworCisjaW5jbHVkZSAiYmZhX29zX2luYy5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisKK3ZvaWQKK2JmYV9vc19nZXR0aW1lb2ZkYXkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KQoreworCXN0cnVjdCB0aW1ldmFsICB0bXBfdHY7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRtcF90dik7CisJdHYtPnR2X3NlYyA9ICh1MzIpIHRtcF90di50dl9zZWM7CisJdHYtPnR2X3VzZWMgPSAodTMyKSB0bXBfdHYudHZfdXNlYzsKK30KKwordm9pZAorYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJI2RlZmluZSBCRkFfU1RSSU5HXzI1NgkyNTYKKwljaGFyIHRtcFtCRkFfU1RSSU5HXzI1Nl07CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c3ByaW50Zih0bXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlwcmludGsodG1wKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDFiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIExpbnV4IFRhcmdldCBNb2RlIERyaXZlcgorICovCisKKy8qKgorICogIHRtL2R1bW15L2JmYWRfdG0uaCBCRkEgY2FsbGJhY2sgZHVtbXkgaGVhZGVyIGZpbGUgZm9yIEJGQSBMaW51eCB0YXJnZXQgbW9kZSBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9UTV9IX18KKyNkZWZpbmUgX19CRkFEX1RNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKworI2RlZmluZSBGQ1BUX05BTUUgCQkiIgorCisvKgorICogQ2FsbGVkIGZyb20gYmFzZSBMaW51eCBkcml2ZXIgb24gKERlKUluaXQgZXZlbnRzCisgKi8KKworLyogYXR0YWNoIHRndCB0ZW1wbGF0ZSB3aXRoIHNjc3QgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorCisvKiBkZXRhY2gvcmVsZWFzZSB0Z3QgdGVtcGxhdGUgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfZXhpdCgpCWRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfdG1fcHJvYmUoeCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcHJvYmVfdW5kbyh4KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF90bV9wcm9iZV9wb3N0KHgpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBjb25maWcgZXZlbnRzCisgKi8KKyNkZWZpbmUgYmZhZF90bV9wb3J0X25ldyh4LCB5KQkJQkZBX1NUQVRVU19PSworI2RlZmluZSBiZmFkX3RtX3BvcnRfZGVsZXRlKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBQTE9HSS9PIGV2ZW50cworICovCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vbmxpbmUoeCwgeSkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vZmZsaW5lKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI3YjJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX3RyY21vZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF90cmNtb2QuaCBMaW51eCBkcml2ZXIgdHJhY2UgbW9kdWxlcworICovCisKKworI2lmbmRlZiBfX0JGQURfVFJDTU9EX0hfXworI2RlZmluZSBfX0JGQURfVFJDTU9EX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwkvKiAyLjYgRHJpdmVyICovCisJQkZBX1RSQ19MRFJWX0JGQUQJCT0gMSwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzYJCT0gMiwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzZfOQkJPSAzLAorCUJGQV9UUkNfTERSVl9CRkFEXzJfNl8xMAk9IDQsCisJQkZBX1RSQ19MRFJWX0lOVFIJCT0gNSwKKwlCRkFfVFJDX0xEUlZfSU9DVEwJCT0gNiwKKwlCRkFfVFJDX0xEUlZfT1MJCQk9IDcsCisJQkZBX1RSQ19MRFJWX0lNCQkJPSA4LAorCUJGQV9UUkNfTERSVl9JTV8yXzYJCT0gOSwKKwlCRkFfVFJDX0xEUlZfSU1fMl82XzkJCT0gMTAsCisJQkZBX1RSQ19MRFJWX0lNXzJfNl8xMAkJPSAxMSwKKwlCRkFfVFJDX0xEUlZfVE0JCQk9IDEyLAorCUJGQV9UUkNfTERSVl9JUEZDCQk9IDEzLAorCUJGQV9UUkNfTERSVl9JTV8yXzQJCT0gMTQsCisJQkZBX1RSQ19MRFJWX0lNX1ZNVwkJPSAxNSwKKwlCRkFfVFJDX0xEUlZfSU1fTFRfMl82XzEwCT0gMTYsCit9OworCisjZW5kaWYgLyogX19CRkFEX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmFiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2E0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKKy8qKgorICogIGZhYi5jIHBvcnQgZmFiIGltcGxlbWVudGF0aW9uLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcG9ydF9mYWJfcHVibGljIHBvcnQgZmFiIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gaW5pdGlhbGl6ZSBmYWJyaWMgc2VydmljZXMgb2YgdGhlIGJhc2UgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfaW5pdChwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX2luaXQocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX2luaXQocG9ydCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9mYWJfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb25saW5lKHBvcnQpOworCWJmYV9mY3NfcG9ydF9zY25fb25saW5lKHBvcnQpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX29mZmxpbmUocG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZhYnJpYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIxNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpAQCAtMCwwICsxLDEyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmFicmljLmMgRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc19hdXRoLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIEZBQlJJQyk7CisKKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkJKDIwMDApCS8qIE1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBCRkFfRkNTX0ZBQlJJQ19DTEVBTlVQX0RFTEFZCSgxMDAwMCkJLyogTWlsbGlzZWNvbmRzICovCisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKF9fZmFicmljKSBkbyB7ICAgICAgICAgIFwKKyAgICBpZiAoYmZhX3Bwb3J0X2dldF90b3BvbG9neSgoX19mYWJyaWMpLT5mY3MtPmJmYSkgICAgXAorCQkJCT09IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlApICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OUE9SVDsgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OTFBPUlQ7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfZGVsYXkodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19kZWxldGVfY29tcCh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3Byb2Nlc3NfZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19mbG9naWFjY19jb21wKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHN0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcGZjaHMpOworLyoqCisgKiAgZmNzX2ZhYnJpY19zbSBmYWJyaWMgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEZhYnJpYyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IHsKKwlCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEUgPSAxLAkvKiAgZmFicmljIGNyZWF0ZSBmcm9tIGRyaXZlciAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURSA9IDIsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCisJQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOID0gMywJLyogIGxpbmsgZG93biBmcm9tIHBvcnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQID0gNCwJLyogIGxpbmsgdXAgZnJvbSBwb3J0ICovCisJQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUCA9IDUsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCA9IDYsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMgPSA3LAkvKiAgbm8gZmFicmljIGZyb20gZmxvZ2kvYXV0aAorCQkJCQkJICovCisJQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQID0gOCwJLyogIHBlcmZvcm0gRVZGUCBmcm9tCisJCQkJCQkgKmZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9JU09MQVRFID0gOSwJLyogIGlzb2xhdGUgZnJvbSBFVkZQIHByb2Nlc3NpbmcgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19UQUdHSU5HID0gMTAsLyogIG5vIFZGVCB0YWdnaW5nIGZyb20gRVZGUCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQgPSAxMSwJLyogIHRpbWVvdXQgZGVsYXkgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9BVVRIX0ZBSUxFRCA9IDEyLAkvKiAgYXV0aGVudGljYXRpb24gZmFpbGVkICovCisJQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTID0gMTMsCS8qICBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCisJCQkJCQkgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxDT01QID0gMTQsCS8qICBhbGwgdnBvcnRzIGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSyA9IDE1LAkvKiAgUmVjZWl2ZWQgb3VyIG93biBGTE9HSSAqLworCUJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUID0gMTYsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoX2ZhaWxlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKKy8qKgorICogICBCZWdpbm5pbmcgc3RhdGUgYmVmb3JlIGZhYnJpYyBjcmVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKTsKKwkJYmZhX2Zjc19mYWJyaWNfaW5pdChmYWJyaWMpOworCQliZmFfZmNzX2xwb3J0X2luaXQoJmZhYnJpYy0+YnBvcnQsIGZhYnJpYy0+ZmNzLCBGQ19WRl9JRF9OVUxMLAorCQkJCSAgICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVA6CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgQmVnaW5uaW5nIHN0YXRlIGJlZm9yZSBmYWJyaWMgY3JlYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9pc19saW5rdXAoZmFicmljLT5mY3MtPmJmYSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9mbG9naSk7CisJCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQl9IGVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmFicmljLT5mY3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIExpbmsgaXMgZG93biwgYXdhaXRpbmcgTElOSyBVUCBldmVudCBmcm9tIHBvcnQuIFRoaXMgaXMgYWxzbyB0aGUKKyAqICAgZmlyc3Qgc3RhdGUgYXQgZmFicmljIGNyZWF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2kpOworCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1A6CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEZMT0dJIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBGTE9HSSByZXBseS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUDoKKworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJZmFicmljLT5mYWJfdHlwZSA9IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEOworCisJCWlmIChmYWJyaWMtPmF1dGhfcmVxZCAmJiBmYWJyaWMtPmlzX2F1dGgpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoKTsKKwkJCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpOworCQkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGZhYnJpYy0+ZmNzLT5iZmEsICZmYWJyaWMtPmRlbGF5X3RpbWVyLAorCQkJCWJmYV9mY3NfZmFicmljX2RlbGF5LCBmYWJyaWMsCisJCQkJQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayk7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9mY3NfZmFicmljX3NldF9vcGVydHlwZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDOgorCQlmYWJyaWMtPmZhYl90eXBlID0gQkZBX0ZDU19GQUJSSUNfTjJOOworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbm9mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMQVlFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpKTsKKwkJYmZhX2Zjc19mYWJyaWNfbG9naW4oZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZhYnJpYy0+ZGVsYXlfdGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmZmFicmljLT5kZWxheV90aW1lcik7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBhdXRoZW50aWNhdGlvbiByZXN1bHRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGZhaWxlZAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIFBvcnQgaXMgaW4gbG9vcGJhY2sgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBUaGVyZSBpcyBubyBhdHRhY2hlZCBmYWJyaWMgLSBwcml2YXRlIGxvb3Agb3IgTlBvcnQtdG8tTlBvcnQgdG9wb2xvZ3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUM6CisJCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChmYWJyaWMtPmZjcy0+YmZhLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRmFicmljIGlzIG9ubGluZSAtIG5vcm1hbCBvcGVyYXRpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEV4Y2hhbmdpbmcgdmlydHVhbCBmYWJyaWMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0lTT0xBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRVZGUCBleGNoYW5nZSBjb21wbGV0ZSBhbmQgVkZUIHRhZ2dpbmcgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnBfZG9uZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7Cit9CisKKy8qKgorICogICBQb3J0IGlzIGlzb2xhdGVkIGFmdGVyIEVWRlAgZXhjaGFuZ2UgZHVlIHRvIFZGX0lEIG1pc21hdGNoIChOIGFuZCBGKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2lzb2xhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJYmZhX2xvZyhmYWJyaWMtPmZjcy0+bG9nbSwgQkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELAorCQlmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24sIGZhYnJpYy0+ZmNzLT5wb3J0X3ZmaWQsCisJCWZhYnJpYy0+ZXZlbnRfYXJnLnN3cF92ZmlkKTsKK30KKworLyoqCisgKiAgIEZhYnJpYyBpcyBiZWluZyBkZWxldGVkLCBhd2FpdGluZyB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCQliZmFfZmNzX21vZGV4aXRfY29tcChmYWJyaWMtPmZjcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19mYWJyaWNfcHJpdmF0ZSBmYWJyaWMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcgPSAmZmFicmljLT5icG9ydC5wb3J0X2NmZzsKKworCXBvcnRfY2ZnLT5yb2xlcyA9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCXBvcnRfY2ZnLT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmZmFicmljLT5mY3MtPmJmYS0+aW9jKTsKKwlwb3J0X2NmZy0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJmZhYnJpYy0+ZmNzLT5iZmEtPmlvYyk7Cit9CisKKy8qKgorICogUG9ydCBTeW1ib2xpYyBOYW1lIENyZWF0aW9uIGZvciBiYXNlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX3BzeW1iX2luaXQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyBhZGFwdGVyX2F0dHI7CisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8gPSAmZmFicmljLT5mY3MtPmRyaXZlcl9pbmZvOworCisJYmZhX29zX21lbXNldCgodm9pZCAqKSZhZGFwdGVyX2F0dHIsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zKSk7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZmYWJyaWMtPmZjcy0+YmZhLT5pb2MsICZhZGFwdGVyX2F0dHIpOworCisJLyoKKwkgKiBNb2RlbCBuYW1lL251bWJlcgorCSAqLworCXN0cm5jcHkoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCBhZGFwdGVyX2F0dHIubW9kZWwsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NT0RFTF9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIERyaXZlciBWZXJzaW9uCisJICovCisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPnZlcnNpb24sCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9WRVJTSU9OX1NaKTsKKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKworCS8qCisJICogSG9zdCBtYWNoaW5lIG5hbWUKKwkgKi8KKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9tYWNoaW5lX25hbWUsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NQUNISU5FTkFNRV9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIEhvc3QgT1MgSW5mbyA6CisJICogSWYgT1MgUGF0Y2ggSW5mbyBpcyBub3QgdGhlcmUsIGRvIG5vdCB0cnVuY2F0ZSBhbnkgYnl0ZXMgZnJvbSB0aGUKKwkgKiBPUyBuYW1lIHN0cmluZyBhbmQgaW5zdGVhZCBjb3B5IHRoZSBlbnRpcmUgT1MgaW5mbyBzdHJpbmcgKDY0IGJ5dGVzKS4KKwkgKi8KKwlpZiAoZHJpdmVyX2luZm8tPmhvc3Rfb3NfcGF0Y2hbMF0gPT0gJ1wwJykgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwgQkZBX0ZDU19PU19TVFJfTEVOKTsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKwl9IGVsc2UgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1opOworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCisJCS8qCisJCSAqIEFwcGVuZCBob3N0IE9TIFBhdGNoIEluZm8KKwkJICovCisJCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLAorCQkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaCwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU1BBVENIX1NaKTsKKwl9CisKKwkvKgorCSAqIG51bGwgdGVybWluYXRlCisJICovCisJcG9ydF9jZmctPnN5bV9uYW1lLnN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOIC0gMV0gPSAwOworfQorCisvKioKKyAqIGJmYSBscHMgbG9naW4gY29tcGxldGlvbiBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dpX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gdWFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgc3RhdHVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX2FjY2VwdHMrKzsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfSU5WQUxJRF9NQUM6CisJCS8qCisJCSAqIE9ubHkgZm9yIENOQQorCQkgKi8KKwkJZmFicmljLT5zdGF0cy5mbG9naV9hY2NfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKGZhYnJpYy0+bHBzKSkgeworCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKKwkJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfYWNjX2VycisrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCRkFfRVBST1RPX1VOS05PV05fUlNQOgorCQkJZmFicmljLT5zdGF0cy5mbG9naV91bmtub3duX3JzcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCk7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QKTsKKwkJcmV0dXJuOworCX0KKworCWZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChmYWJyaWMtPmxwcyk7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5iYl9jcmVkaXQpOworCisJaWYgKCFiZmFfbHBzX2lzX2JyY2RfZmFicmljKGZhYnJpYy0+bHBzKSkKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGJmYV9scHNfZ2V0X3BlZXJfbnd3bihmYWJyaWMtPmxwcyk7CisKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDEgPSBGLXBvcnQuCisJICovCisJaWYgKGJmYV9scHNfaXNfZnBvcnQoZmFicmljLT5scHMpKSB7CisJCWZhYnJpYy0+YnBvcnQucGlkID0gYmZhX2xwc19nZXRfcGlkKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19ucGl2ID0gYmZhX2xwc19pc19ucGl2X2VuKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19hdXRoID0gYmZhX2xwc19pc19hdXRocmVxKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOcG9ydC0yLU5wb3J0IGRpcmVjdCBhdHRhY2hlZAorCQkgKi8KKwkJZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPQorCQkJYmZhX2xwc19nZXRfcGVlcl9wd3duKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMpOworCX0KKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucGlkKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmlzX25waXYpOworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+aXNfYXV0aCk7Cit9CisKKy8qKgorICogCQlBbGxvY2F0ZSBhbmQgc2VuZCBGTE9HSS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9zICAgKmJmYSA9IGZhYnJpYy0+ZmNzLT5iZmE7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJdTggICAgICAgICBhbHBhID0gMDsKKworCWlmIChiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KGJmYSkgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCWFscGEgPSBiZmFfcHBvcnRfZ2V0X215YWxwYShiZmEpOworCisJYmZhX2xwc19mbG9naShmYWJyaWMtPmxwcywgZmFicmljLCBhbHBhLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkgICAgICBwY2ZnLT5wd3duLCBwY2ZnLT5ud3duLCBmYWJyaWMtPmF1dGhfcmVxZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3NlbnQrKzsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+ZmFicmljX25hbWUpOworCisJYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKGZhYnJpYyk7CisJZmFicmljLT5zdGF0cy5mYWJyaWNfb25saW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9ubGluZSBldmVudCB0byBiYXNlIGFuZCB0aGVuIHZpcnR1YWwgcG9ydHMKKwkgKi8KKwliZmFfZmNzX3BvcnRfb25saW5lKCZmYWJyaWMtPmJwb3J0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9vbmxpbmUodnBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmZhYnJpY19uYW1lKTsKKwlmYWJyaWMtPnN0YXRzLmZhYnJpY19vZmZsaW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9mZmxpbmUgZXZlbnQgZmlyc3QgdG8gdnBvcnRzIGFuZCB0aGVuIGJhc2UgcG9ydC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWJmYV9mY3NfdnBvcnRfb2ZmbGluZSh2cG9ydCk7CisJfQorCisJYmZhX2Zjc19wb3J0X29mZmxpbmUoJmZhYnJpYy0+YnBvcnQpOworCisJZmFicmljLT5mYWJyaWNfbmFtZSA9IDA7CisJZmFicmljLT5mYWJyaWNfaXBfYWRkclswXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxheSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQpOworfQorCisvKioKKyAqIERlbGV0ZSBhbGwgdnBvcnRzIGFuZCB3YWl0IGZvciB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxldGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGUodnBvcnQpOworCX0KKworCWJmYV9mY3NfcG9ydF9kZWxldGUoJmZhYnJpYy0+YnBvcnQpOworCWJmYV93Y193YWl0KCZmYWJyaWMtPndjKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2RlbGV0ZV9jb21wKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMQ09NUCk7Cit9CisKKworCisvKioKKyAqICBmY3NfZmFicmljX3B1YmxpYyBmYWJyaWMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfb3NfbWVtc2V0KGZhYnJpYywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zKSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGJhc2UgZmFicmljLgorCSAqLworCWZhYnJpYy0+ZmNzID0gZmNzOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZwb3J0X3EpOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZmX3EpOworCWZhYnJpYy0+bHBzID0gYmZhX2xwc19hbGxvYyhmY3MtPmJmYSk7CisJYmZhX2Fzc2VydChmYWJyaWMtPmxwcyk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGZhYnJpYyBkZWxldGUgY29tcGxldGlvbiBoYW5kbGVyLiBGYWJyaWMgZGVsZXRpb24gaXMgY29tcGxldGUKKwkgKiB3aGVuIHRoZSBsYXN0IHZwb3J0IGRlbGV0ZSBpcyBjb21wbGV0ZS4KKwkgKi8KKwliZmFfd2NfaW5pdCgmZmFicmljLT53YywgYmZhX2Zjc19mYWJyaWNfZGVsZXRlX2NvbXAsIGZhYnJpYyk7CisJYmZhX3djX3VwKCZmYWJyaWMtPndjKTsJLyogRm9yIHRoZSBiYXNlIHBvcnQgKi8KKworCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFKTsKKwliZmFfdHJjKGZjcywgMCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCisJLyoqCisJICogQ2xlYW51cCBiYXNlIGZhYnJpYy4KKwkgKi8KKwlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJYmZhX2xwc19kZWxldGUoZmFicmljLT5scHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFKTsKK30KKworLyoqCisgKiBGYWJyaWMgbW9kdWxlIHN0YXJ0IC0tIGtpY2sgc3RhcnRzIEZDUyBhY3Rpb25zCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiAgIFN1c3BlbmQgZmFicmljIGFjdGl2aXR5IGFzIHBhcnQgb2YgZHJpdmVyIHN1c3BlbmQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN1c3Aoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCitiZmFfYm9vbGVhbl90CitiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKSk7Cit9CisKK2VudW0gYmZhX3Bwb3J0X3R5cGUKK2JmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiBmYWJyaWMtPm9wZXJfdHlwZTsKK30KKworLyoqCisgKiAgIExpbmsgdXAgbm90aWZpY2F0aW9uIGZyb20gQkZBIHBoeXNpY2FsIHBvcnQgbW9kdWxlLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19saW5rX3VwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVApOworfQorCisvKioKKyAqICAgTGluayBkb3duIG5vdGlmaWNhdGlvbiBmcm9tIEJGQSBwaHlzaWNhbCBwb3J0IG1vZHVsZS4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTik7Cit9CisKKy8qKgorICogICBBIGNoaWxkIHZwb3J0IGlzIGJlaW5nIGNyZWF0ZWQgaW4gdGhlIGZhYnJpYy4KKyAqCisgKiAgIENhbGwgZnJvbSB2cG9ydCBtb2R1bGUgYXQgdnBvcnQgY3JlYXRpb24uIEEgbGlzdCBvZiBiYXNlIHBvcnQgYW5kIHZwb3J0cworICogICBiZWxvbmdpbmcgdG8gYSBmYWJyaWMgaXMgbWFpbnRhaW5lZCB0byBwcm9wYWdhdGUgbGluayBldmVudHMuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICogICBwYXJhbVtpbl0gdnBvcnQgIC0gVnBvcnQgYmVpbmcgY3JlYXRlZC4KKyAqCisgKiAgIEByZXR1cm4gTm9uZSAoYWx3YXlzIHN1Y2NlZWRzKQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJLyoqCisJICogLSBhZGQgdnBvcnQgdG8gZmFicmljJ3MgdnBvcnRfcQorCSAqLworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+dmZfaWQpOworCisJbGlzdF9hZGRfdGFpbCgmdnBvcnQtPnFlLCAmZmFicmljLT52cG9ydF9xKTsKKwlmYWJyaWMtPm51bV92cG9ydHMrKzsKKwliZmFfd2NfdXAoJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgQSBjaGlsZCB2cG9ydCBpcyBiZWluZyBkZWxldGVkIGZyb20gZmFicmljLgorICoKKyAqICAgVnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWxpc3RfZGVsKCZ2cG9ydC0+cWUpOworCWZhYnJpYy0+bnVtX3Zwb3J0cy0tOworCWJmYV93Y19kb3duKCZmYWJyaWMtPndjKTsKK30KKworLyoqCisgKiAgIEJhc2UgcG9ydCBpcyBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3djX2Rvd24oJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgIENoZWNrIGlmIGZhYnJpYyBpcyBvbmxpbmUuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICoKKyAqICAgQHJldHVybiAgVFJVRS9GQUxTRQorICovCitpbnQKK2JmYV9mY3NfZmFicmljX2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX29ubGluZSkpOworfQorCisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgICAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpCit7CisJYmZhX3NtX3NldF9zdGF0ZSh2ZiwgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBMb29rdXAgZm9yIGEgdnBvcnQgd2l0aGluZyBhIGZhYnJpYyBnaXZlbiBpdHMgcHd3bgorICovCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICoKK2JmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCB3d25fdCBwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWlmIChiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJnZwb3J0LT5scG9ydCkgPT0gcHd3bikKKwkJCXJldHVybiB2cG9ydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiAgICBJbiBhIGdpdmVuIGZhYnJpYywgcmV0dXJuIHRoZSBudW1iZXIgb2YgbHBvcnRzLgorICoKKyAqICAgcGFyYW1baW5dIGZhYnJpYyAtIEZhYnJpYyBpbnN0YW5jZS4gVGhpcyBjYW4gYmUgYSBiYXNlIGZhYnJpYyBvciB2Zi4KKyAqCisqICAgIEByZXR1cm4gOiAxIG9yIG1vcmUuCisgKi8KK3UxNgorYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gKGZhYnJpYy0+bnVtX3Zwb3J0cyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgICB1MTYgbGVuKQoreworCXUzMiAgICAgICAgcGlkID0gZmNocy0+ZF9pZDsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIGVsc19jbWQ7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBsZW4pOworCWJmYV90cmMoZmFicmljLT5mY3MsIHBpZCk7CisKKwkvKioKKwkgKiBMb29rIGZvciBvdXIgb3duIEZMT0dJIGZyYW1lcyBiZWluZyBsb29wZWQgYmFjay4gVGhpcyBtZWFucyBhbgorCSAqIGV4dGVybmFsIGxvb3BiYWNrIGNhYmxlIGlzIGluIHBsYWNlLiBPdXIgb3duIEZMT0dJIGZyYW1lcyBhcmUKKwkgKiBzb21ldGltZXMgbG9vcGVkIGJhY2sgd2hlbiBzd2l0Y2ggcG9ydCBnZXRzIHRlbXBvcmFyaWx5IGJ5cGFzc2VkLgorCSAqLworCWlmICgocGlkID09IGJmYV9vc19udG9oM2IoRkNfRkFCUklDX1BPUlQpKQorCSAgICAmJiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0ZMT0dJKQorCSAgICAmJiAoZmxvZ2ktPnBvcnRfbmFtZSA9PSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJmZhYnJpYy0+YnBvcnQpKSkgeworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xPT1BCQUNLKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZMT0dJL0VWRlAgZXhjaGFuZ2VzIHNob3VsZCBiZSBjb25zdW1lZCBieSBiYXNlIGZhYnJpYy4KKwkgKi8KKwlpZiAoZmNocy0+ZF9pZCA9PSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKSkgeworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBwaWQpOworCQliZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKGZhYnJpYywgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmYWJyaWMtPmJwb3J0LnBpZCA9PSBwaWQpIHsKKwkJLyoqCisJCSAqIEFsbCBhdXRoZW50aWNhdGlvbiBmcmFtZXMgc2hvdWxkIGJlIHJvdXRlZCB0byBhdXRoCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQVVUSCkgeworCQkJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQkJZmFicmljLT5hdXRoLnJlc3BvbnNlID0gKHU4ICopIGVsc19jbWQ7CisJCQlyZXR1cm47CisJCX0KKworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCAqKHU4ICopICgodTggKikgZmNocykpOworCQliZmFfZmNzX3BvcnRfdWZfcmVjdigmZmFicmljLT5icG9ydCwgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIGxvb2sgZm9yIGEgbWF0Y2hpbmcgbG9jYWwgcG9ydCBJRAorCSAqLworCWxpc3RfZm9yX2VhY2gocWUsICZmYWJyaWMtPnZwb3J0X3EpIHsKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXFlOworCQlpZiAodnBvcnQtPmxwb3J0LnBpZCA9PSBwaWQpIHsKKwkJCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZ2cG9ydC0+bHBvcnQsIGZjaHMsIGxlbik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZmYWJyaWMtPmJwb3J0LCBmY2hzLCBsZW4pOworfQorCisvKioKKyAqIAkJVW5zb2xpY2l0ZWQgZnJhbWVzIHRvIGJlIHByb2Nlc3NlZCBieSBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19GTE9HSToKKwkJYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc19mbG9naShmYWJyaWMsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoKKwkJICogbmVlZCB0byBnZW5lcmF0ZSBhIExTX1JKVAorCQkgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIAlQcm9jZXNzCWluY29taW5nIEZMT0dJCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpicG9ydCA9ICZmYWJyaWMtPmJwb3J0OworCisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmNocy0+c19pZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3JjdmQrKzsKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDAgPSBuLXBvcnQuCisJICovCisJaWYgKGZsb2dpLT5jc3AucG9ydF90eXBlKSB7CisJCS8qCisJCSAqIEB0b2RvOiBtYXkgbmVlZCB0byBzZW5kIGEgTFNfUkpUCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmbG9naS0+cG9ydF9uYW1lKTsKKwkJZmFicmljLT5zdGF0cy5mbG9naV9yZWplY3RlZCsrOworCQlyZXR1cm47CisJfQorCisJZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfb3NfbnRvaHMoZmxvZ2ktPmNzcC5iYmNyZWQpOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPSBmbG9naS0+cG9ydF9uYW1lOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisKKwkvKgorCSAqIFNlbmQgYSBGbG9naSBBY2MKKwkgKi8KKwliZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhmYWJyaWMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NlbmRfZmxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybjsKKwlzdHJ1Y3QgYmZhX3MgICAqYmZhID0gZmFicmljLT5mY3MtPmJmYTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIHJlcWxlbjsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKGZhYnJpYy0+ZmNzKTsKKwkvKioKKwkgKiBEbyBub3QgZXhwZWN0IHRoaXMgZmFpbHVyZSAtLSBleHBlY3QgcmVtb3RlIG5vZGUgdG8gcmV0cnkKKwkgKi8KKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCXJlcWxlbiA9IGZjX2Zsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkgICAgYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCksCisJCQkJICAgIG4ybl9wb3J0LT5yZXBseV9veGlkLCBwY2ZnLT5wd3duLAorCQkJCSAgICBwY2ZnLT5ud3duLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkJCSAgICBiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KGJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBmYWJyaWMtPnZmX2lkLCBiZmFfbHBzX2dldF90YWcoZmFicmljLT5scHMpLAorCQkJQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCByZXFsZW4sICZmY2hzLAorCQkJYmZhX2Zjc19mYWJyaWNfZmxvZ2lhY2NfY29tcCwgZmFicmljLAorCQkJRkNfTUFYX1BEVVNaLCAwKTsgLyogVGltZW91dCAwIGluZGljYXRlcyBubworCQkJCQkgICAqIHJlc3BvbnNlIGV4cGVjdGVkCisJCQkJCSAgICovCit9CisKKy8qKgorICogICBGbG9naSBBY2MgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2Zsb2dpYWNjX2NvbXAodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCBzdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BmY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIHN0YXR1cyk7Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gcmVzdWx0IC0gMQorICoKKyAqIEByZXR1cm4gLSBub25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfYXV0aF9maW5pc2hlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBlbnVtIGF1dGhfc3RhdHVzIHN0YXR1cykKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyA9PSBGQ19BVVRIX1NUQVRFX1NVQ0NFU1MpCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTKTsKKwllbHNlCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQpOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgcHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwl3d25fdCAgICAgICAgICAgZnd3biA9IGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydCk7CisJY2hhciAgICAgICAgICAgIHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBmd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKworCXd3bjJzdHIocHd3bl9wdHIsIHB3d24pOworCXd3bjJzdHIoZnd3bl9wdHIsIGZ3d24pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UsIHB3d25fcHRyLAorCQkJZnd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworCWFlbl9kYXRhLnBvcnQuZnd3biA9IGZ3d247Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gd3duX3QgLSBuZXcgZmFicmljIG5hbWUKKyAqCisgKiBAcmV0dXJuIC0gbm9uZQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgICB3d25fdCBmYWJyaWNfbmFtZSkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWNfbmFtZSk7CisKKwlpZiAoZmFicmljLT5mYWJyaWNfbmFtZSA9PSAwKSB7CisJCS8qCisJCSAqIFdpdGggQlJDRCBzd2l0Y2hlcywgd2UgZG9uJ3QgZ2V0IEZhYnJpYyBOYW1lIGluIEZMT0dJLgorCQkgKiBEb24ndCBnZW5lcmF0ZSBhIGZhYnJpYyBuYW1lIGNoYW5nZSBldmVudCBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlmYWJyaWMtPmZhYnJpY19uYW1lID0gZmFicmljX25hbWU7CisJfSBlbHNlIHsKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGZhYnJpY19uYW1lOworCQkvKgorCQkgKiBHZW5lcmF0ZSBhIEV2ZW50CisJCSAqLworCQliZmFfZmNzX2ZhYnJpY19hZW5fcG9zdCgmZmFicmljLT5icG9ydCwKKwkJCQkJQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRSk7CisJfQorCit9CisKKy8qKgorICogTm90IHVzZWQgYnkgRkNTLgorICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZykKK3sKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYwpAQCAtMCwwICsxLDE0NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qCisgKiBmY2J1aWxkLmMgLSBGQyBsaW5rIHNlcnZpY2UgZnJhbWUgYnVpbGRpbmcgYW5kIHBhcnNpbmcgcm91dGluZXMKKyAqLworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKworLyoKKyAqIHN0YXRpYyBidWlsZCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgZmNfZWxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHZvaWQgZmNfYmxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19lbHNfcmVxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjX2Vsc19yc3BfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNoc19zICAgZmNfYmxzX3JlcV90bXBsOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19ibHNfcnNwX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjX2JhX2FjY19zIGJhX2FjY190bXBsOworc3RhdGljIHN0cnVjdCBmY19sb2dpX3MgcGxvZ2lfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcHJsaV9zIHBybGlfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcnJxX3MgcnJxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjcF9mY2hzX3RtcGw7CisKK3ZvaWQKK2ZjYnVpbGRfaW5pdCh2b2lkKQoreworCS8qCisJICogZmNfZWxzX3JlcV90bXBsCisJICovCisJZmNfZWxzX3JlcV90bXBsLnJvdXRpbmcgPSBGQ19SVEdfRVhUX0xJTks7CisJZmNfZWxzX3JlcV90bXBsLmNhdF9pbmZvID0gRkNfQ0FUX0xEX1JFUVVFU1Q7CisJZmNfZWxzX3JlcV90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcmVxX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfU0VRX0lOSSB8IEZDVExfRlNfRVhDSCB8IEZDVExfRU5EX1NFUSB8CisJCQkgICAgICBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19lbHNfcnNwX3RtcGwKKwkgKi8KKwlmY19lbHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19FWFRfTElOSzsKKwlmY19lbHNfcnNwX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfTERfUkVQTFk7CisJZmNfZWxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcmVxX3RtcGwKKwkgKi8KKwlmY19ibHNfcmVxX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yZXFfdG1wbC50eXBlID0gRkNfVFlQRV9CTFM7CisJZmNfYmxzX3JlcV90bXBsLmZfY3RsID0gYmZhX29zX2h0b24zYihGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcnNwX3RtcGwKKwkgKi8KKwlmY19ibHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yc3BfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9CQV9BQ0M7CisJZmNfYmxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0JMUzsKKwlmY19ibHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBiYV9hY2NfdG1wbAorCSAqLworCWJhX2FjY190bXBsLnNlcV9pZF92YWxpZCA9IDA7CisJYmFfYWNjX3RtcGwubG93X3NlcV9jbnQgPSAwOworCWJhX2FjY190bXBsLmhpZ2hfc2VxX2NudCA9IDB4RkZGRjsKKworCS8qCisJICogcGxvZ2lfdG1wbAorCSAqLworCXBsb2dpX3RtcGwuY3NwLnZlcmhpID0gRkNfUEhfVkVSX1BIXzM7CisJcGxvZ2lfdG1wbC5jc3AudmVybG8gPSBGQ19QSF9WRVJfNF8zOworCXBsb2dpX3RtcGwuY3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucygweDAwMDQpOworCXBsb2dpX3RtcGwuY3NwLmNpcm8gPSAweDE7CisJcGxvZ2lfdG1wbC5jc3AuY2lzYyA9IDB4MDsKKwlwbG9naV90bXBsLmNzcC5hbHRiYmNyZWQgPSAweDA7CisJcGxvZ2lfdG1wbC5jc3AuY29uc2VxID0gYmZhX29zX2h0b25zKDB4MDBGRik7CisJcGxvZ2lfdG1wbC5jc3Aucm9fYml0bWFwID0gYmZhX29zX2h0b25zKDB4MDAwMik7CisJcGxvZ2lfdG1wbC5jc3AuZV9kX3RvdiA9IGJmYV9vc19odG9ubCgyMDAwKTsKKworCXBsb2dpX3RtcGwuY2xhc3MzLmNsYXNzX3ZhbGlkID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5zZXF1ZW50aWFsID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5jb25zZXEgPSAweEZGOworCXBsb2dpX3RtcGwuY2xhc3MzLm9zcHggPSAxOworCisJLyoKKwkgKiBwcmxpX3RtcGwKKwkgKi8KKwlwcmxpX3RtcGwuY29tbWFuZCA9IEZDX0VMU19QUkxJOworCXBybGlfdG1wbC5wZ2xlbiA9IDB4MTA7CisJcHJsaV90bXBsLnBhZ2VieXRlcyA9IGJmYV9vc19odG9ucygweDAwMTQpOworCXBybGlfdG1wbC5wYXJhbXBhZ2UudHlwZSA9IEZDX1RZUEVfRkNQOworCXBybGlfdG1wbC5wYXJhbXBhZ2UuaW1hZ2VwYWlyID0gMTsKKwlwcmxpX3RtcGwucGFyYW1wYWdlLnNlcnZwYXJhbXMucnhyZGlzYWIgPSAxOworCisJLyoKKwkgKiBycnFfdG1wbAorCSAqLworCXJycV90bXBsLmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlJROworCisJLyoKKwkgKiBmY3BfZmNoc190bXBsCisJICovCisJZmNwX2ZjaHNfdG1wbC5yb3V0aW5nID0gRkNfUlRHX0ZDNF9ERVZfREFUQTsKKwlmY3BfZmNoc190bXBsLmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DTUQ7CisJZmNwX2ZjaHNfdG1wbC50eXBlID0gRkNfVFlQRV9GQ1A7CisJZmNwX2ZjaHNfdG1wbC5mX2N0bCA9CisJCWJmYV9vc19odG9uM2IoRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY3BfZmNoc190bXBsLnNlcV9pZCA9IDE7CisJZmNwX2ZjaHNfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfZmNoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTMyIG94X2lkKQoreworCWJmYV9vc19tZW1zZXQoZmNocywgMCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKworCWZjaHMtPnJvdXRpbmcgPSBGQ19SVEdfRkM0X0RFVl9EQVRBOworCWZjaHMtPmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DVFJMOworCWZjaHMtPnR5cGUgPSBGQ19UWVBFX1NFUlZJQ0VTOworCWZjaHMtPmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAorCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKKwlmY2hzLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCWZjaHMtPmRfaWQgPSAoZF9pZCk7CisJZmNocy0+c19pZCA9IChzX2lkKTsKKwlmY2hzLT5veF9pZCA9IGJmYV9vc19odG9ucyhveF9pZCk7CisKKwkvKioKKwkgKiBAdG9kbyBubyBuZWVkIHRvIHNldCBveF9pZCBmb3IgcmVxdWVzdAorCSAqICAgICAgIG5vIG5lZWQgdG8gc2V0IHJ4X2lkIGZvciByZXNwb25zZQorCSAqLworfQorCit2b2lkCitmY19lbHNfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19lbHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+ZF9pZCA9IChkX2lkKTsKKwlmY2hzLT5zX2lkID0gKHNfaWQpOworCWZjaHMtPm94X2lkID0gYmZhX29zX2h0b25zKG94X2lkKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Vsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Vsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIGVsc19jbWQ7CisKKwlsZW4gPSBsZW47CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCX0KKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Jsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Jsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitmY19wbG9naV94X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJIHUxNiBwZHVfc2l6ZSwgdTggZWxzX2NvZGUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKHBsZCk7CisKKwliZmFfb3NfbWVtY3B5KHBsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCXBsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gZWxzX2NvZGU7CisJaWYgKGVsc19jb2RlID09IEZDX0VMU19QTE9HSSkKKwkJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZWxzZQorCQlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBsb2dpLT5jc3AucnhzeiA9IHBsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+cG9ydF9uYW1lLCAmcG9ydF9uYW1lLCBzaXplb2Yod3duX3QpKTsKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+bm9kZV9uYW1lLCAmbm9kZV9uYW1lLCBzaXplb2Yod3duX3QpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKK30KKwordTE2CitmY19mbG9naV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCXUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsIHU4IHNldF9hdXRoLAorCQl1MTYgbG9jYWxfYmJfY3JlZGl0cykKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKKwl1MzIgCSp2dmxfaW5mbzsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfRkxPR0k7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlmbG9naS0+Y3NwLnJ4c3ogPSBmbG9naS0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCWZsb2dpLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJZmxvZ2ktPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCS8qCisJICogU2V0IHRoZSBOUElWIENhcGFiaWxpdHkgQml0ICggd29yZCAxLCBiaXQgMzEpIG9mIENvbW1vbgorCSAqIFNlcnZpY2UgUGFyYW1ldGVycy4KKwkgKi8KKwlmbG9naS0+Y3NwLmNpcm8gPSBzZXRfbnBpdjsKKworCS8qIHNldCBBVVRIIGNhcGFiaWxpdHkgKi8KKwlmbG9naS0+Y3NwLnNlY3VyaXR5ID0gc2V0X2F1dGg7CisKKwlmbG9naS0+Y3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucyhsb2NhbF9iYl9jcmVkaXRzKTsKKworCS8qIFNldCBicmNkIHRva2VuIGluIFZWTCAqLworCXZ2bF9pbmZvID0gKHUzMiAqKSZmbG9naS0+dnZsWzBdOworCisJLyogc2V0IHRoZSBmbGFnIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBWVkwgKi8KKwlmbG9naS0+Y3NwLm5waXZfc3VwcCAgICA9IDE7IC8qIEB0b2RvLiBmaWVsZCBuYW1lIGlzIG5vdCBjb3JyZWN0ICovCisJdnZsX2luZm9bMF0JPSBiZmFfb3NfaHRvbmwoRkxPR0lfVlZMX0JSQ0QpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX2Zsb2dpX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpCit7CisJdTMyICAgICAgICBkX2lkID0gMDsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCWZsb2dpLT5jc3AucnhzeiA9IGZsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJZmxvZ2ktPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlmbG9naS0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJZmxvZ2ktPmNzcC5iYmNyZWQgPSBiZmFfb3NfaHRvbnMobG9jYWxfYmJfY3JlZGl0cyk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfZmRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksIHUzMiBzX2lkLAorCQl1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQl1MTYgcGR1X3NpemUpCit7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCk7CisKKwliZmFfb3NfbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCWZsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0ZESVNDOworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmNzcC5yeHN6ID0gZmxvZ2ktPmNsYXNzMy5yeHN6ID0gYmZhX29zX2h0b25zKHBkdV9zaXplKTsKKwlmbG9naS0+cG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWZsb2dpLT5ub2RlX25hbWUgPSBub2RlX25hbWU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJICAgICAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJICAgICAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX1BMT0dJKTsKK30KKwordTE2CitmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX0FDQyk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wbG9naV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbiwgd3duX3QgcG9ydF9uYW1lKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSAoZmNocyArIDEpOworCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJY2FzZSBGQ19FTFNfQUNDOgorCQlwbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghd3duX2lzX2VxdWFsKHBsb2dpLT5wb3J0X25hbWUsIHBvcnRfbmFtZSkpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghcGxvZ2ktPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwkJaWYgKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgKEZDX01JTl9QRFVTWikpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCWRlZmF1bHQ6CisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJfQorfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcGxvZ2lfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBsb2dpLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgRkNfTUlOX1BEVVNaKQorCSAgICB8fCAoYmZhX29zX250b2hzKHBsb2dpLT5jbGFzczMucnhzeikgPiBGQ19NQVhfUERVU1opCisJICAgIHx8IChwbG9naS0+Y2xhc3MzLnJ4c3ogPT0gMCkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkgICAgICB1MTYgb3hfaWQpCit7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHBsZCk7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwliZmFfb3NfbWVtY3B5KHBybGksICZwcmxpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7CisKKwlwcmxpLT5jb21tYW5kID0gRkNfRUxTX1BSTEk7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmV0cnkgICAgICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmVjX3N1cHBvcnQgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMudGFza19yZXRyeV9pZCA9IDA7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuY29uZmlybSAgICAgICA9IDE7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7Cit9CisKK3UxNgorZmNfcHJsaV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSkKK3sKKwlzdHJ1Y3QgZmNfcHJsaV9zICAgICAgKnBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocGxkKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWJmYV9vc19tZW1jcHkocHJsaSwgJnBybGlfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKKworCXBybGktPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCisJaWYgKChyb2xlICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pID09IEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgPSAxOworCWVsc2UKKwkJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yID0gMTsKKworCXBybGktPnBhcmFtcGFnZS5yc3Bjb2RlID0gRkNfUFJMSV9BQ0NfWFFURDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3BybGlfcnNwX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGksIGludCBsZW4pCit7CisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoKHBybGktPnBhcmFtcGFnZS5yc3Bjb2RlICE9IEZDX1BSTElfQUNDX1hRVEQpCisJICAgICYmIChwcmxpLT5wYXJhbXBhZ2UucnNwY29kZSAhPSBGQ19QUkxJX0FDQ19QUkVERUZfSU1HKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgIT0gMSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcHJsaV9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpKQoreworCWlmIChwcmxpLT5wYXJhbXBhZ2UudHlwZSAhPSBGQ19UWVBFX0ZDUCkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLmltYWdlcGFpcikKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJcmV0dXJuIChGQ19QQVJTRV9PSyk7Cit9CisKK3UxNgorZmNfbG9nb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9nb19zICpsb2dvLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChsb2dvLCAnXDAnLCBzaXplb2Yoc3RydWN0IGZjX2xvZ29fcykpOworCWxvZ28tPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfTE9HTzsKKwlsb2dvLT5ucG9ydF9pZCA9IChzX2lkKTsKKwlsb2dvLT5vcmlnX3BvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dvX3MpKTsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorZmNfYWRpc2NfeF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAorCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgd3duX3Qgbm9kZV9uYW1lLCB1OCBlbHNfY29kZSkKK3sKKwltZW1zZXQoYWRpc2MsICdcMCcsIHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworCisJYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBlbHNfY29kZTsKKworCWlmIChlbHNfY29kZSA9PSBGQ19FTFNfQURJU0MpCisJCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWVsc2UKKwkJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlhZGlzYy0+b3JpZ19IQSA9IDA7CisJYWRpc2MtPm9yaWdfcG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWFkaXNjLT5vcmlnX25vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKwlhZGlzYy0+bnBvcnRfaWQgPSAoc19pZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworfQorCit1MTYKK2ZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJd3duX3Qgbm9kZV9uYW1lKQoreworCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgRkNfRUxTX0FESVNDKTsKK30KKwordTE2CitmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCB1MzIgZF9pZCwKKwkJICAgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgICB3d25fdCBub2RlX25hbWUpCit7CisJcmV0dXJuIGZjX2FkaXNjX3hfYnVpbGQoZmNocywgYWRpc2MsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBGQ19FTFNfQUNDKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2FkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSwKKwkJCQkgd3duX3Qgbm9kZV9uYW1lKQoreworCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgaG9zdF9kYXAsCisJCSB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgKmFkaXNjID0gKHN0cnVjdCBmY19hZGlzY19zICopIHBsZDsKKworCWlmIChhZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKChhZGlzYy0+bnBvcnRfaWQgPT0gKGhvc3RfZGFwKSkKKwkgICAgJiYgd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKQorCSAgICAmJiB3d25faXNfZXF1YWwoYWRpc2MtPm9yaWdfbm9kZV9uYW1lLCBub2RlX25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX09LKTsKKworCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wZGlzY19wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBkaXNjLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwZGlzYy0+Y2xhc3MzLnJ4c3opIDwKKwkJIChGQ19NSU5fUERVU1ogLSBzaXplb2Yoc3RydWN0IGZjaHNfcykpKQorCSAgICB8fCAocGRpc2MtPmNsYXNzMy5yeHN6ID09IDApKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKCF3d25faXNfZXF1YWwocGRpc2MtPnBvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKHBkaXNjLT5ub2RlX25hbWUsIG5vZGVfbmFtZSkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfYWJ0c19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19ibHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQUJUUzsKKwlmY2hzLT5kX2lkID0gKGRfaWQpOworCWZjaHMtPnNfaWQgPSAoc19pZCk7CisJZmNocy0+b3hfaWQgPSBiZmFfb3NfaHRvbnMob3hfaWQpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjaHNfcykpOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlpZiAoKGZjaHMtPmNhdF9pbmZvID09IEZDX0NBVF9CQV9BQ0MpCisJICAgIHx8IChmY2hzLT5jYXRfaW5mbyA9PSBGQ19DQVRfQkFfUkpUKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworfQorCit1MTYKK2ZjX3JycV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgdTE2IHJycV9veGlkKQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJLyoKKwkgKiBidWlsZCBycnEgcGF5bG9hZAorCSAqLworCWJmYV9vc19tZW1jcHkocnJxLCAmcnJxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcnJxX3MpKTsKKwlycnEtPnNfaWQgPSAoc19pZCk7CisJcnJxLT5veF9pZCA9IGJmYV9vc19odG9ucyhycnFfb3hpZCk7CisJcnJxLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JycV9zKSk7Cit9CisKK3UxNgorZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqYWNjID0gcGxkOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQoYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworCWFjYy0+ZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworfQorCit1MTYKK2ZjX2xzX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbHNfcmp0X3MgKmxzX3JqdCwgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHU4IHJlYXNvbl9jb2RlLAorCQl1OCByZWFzb25fY29kZV9leHBsKQoreworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCW1lbXNldChsc19yanQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfbHNfcmp0X3MpKTsKKworCWxzX3JqdC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19MU19SSlQ7CisJbHNfcmp0LT5yZWFzb25fY29kZSA9IHJlYXNvbl9jb2RlOworCWxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCA9IHJlYXNvbl9jb2RlX2V4cGw7CisJbHNfcmp0LT52ZW5kb3JfdW5pcXVlID0gMHgwMDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sc19yanRfcykpOworfQorCit1MTYKK2ZjX2JhX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYmFfYWNjX3MgKmJhX2FjYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHUxNiByeF9pZCkKK3sKKwlmY19ibHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWJmYV9vc19tZW1jcHkoYmFfYWNjLCAmYmFfYWNjX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfYmFfYWNjX3MpKTsKKworCWZjaHMtPnJ4X2lkID0gcnhfaWQ7CisKKwliYV9hY2MtPm94X2lkID0gZmNocy0+b3hfaWQ7CisJYmFfYWNjLT5yeF9pZCA9IGZjaHMtPnJ4X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX2FjY19zKSk7Cit9CisKK3UxNgorZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQoZWxzX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfY21kX3MpKTsKKwllbHNfY21kLT5lbHNfY29kZSA9IEZDX0VMU19BQ0M7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfZWxzX2NtZF9zKSk7Cit9CisKK2ludAorZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpCit7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJc3RydWN0IGZjX3BybG9fcyAgICAgICpwcmxvOworCXN0cnVjdCBmY190cHJsb19zICAgICAqdHBybG87CisKKwlpZiAoZWxzX2NvZGUgPT0gRkNfRUxTX1BSTE8pIHsKKwkJcHJsbyA9IChzdHJ1Y3QgZmNfcHJsb19zICopIChmY19mcmFtZSArIDEpOworCQludW1fcGFnZXMgPSAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfSBlbHNlIHsKKwkJdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX3MgKikgKGZjX2ZyYW1lICsgMSk7CisJCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfQorCXJldHVybiBudW1fcGFnZXM7Cit9CisKK3UxNgorZmNfdHBybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG9fYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlpbnQgbnVtX3BhZ2VzKQoreworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQodHBybG9fYWNjLCAwLCAobnVtX3BhZ2VzICogMTYpICsgNCk7CisJdHBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKworCXRwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvX2FjYy0+cGF5bG9hZF9sZW4gPSBiZmFfb3NfaHRvbnMoKG51bV9wYWdlcyAqIDE2KSArIDQpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkID0gMDsKKwkJdHBybG9fYWNjLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLmZjNHR5cGVfY3NwID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJfQorCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvX2FjYy0+cGF5bG9hZF9sZW4pKTsKK30KKwordTE2CitmY19wcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcHJsb19hY2NfcyAqcHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpCit7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChwcmxvX2FjYywgMCwgKG51bV9wYWdlcyAqIDE2KSArIDQpOworCXBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKwlwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXBybG9fYWNjLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQlwcmxvX2FjYy0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0uZmM0dHlwZV9jc3AgPSBGQ19UWVBFX0ZDUDsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG9fYWNjLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgdTMyIGRhdGFfZm9ybWF0KQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJbWVtc2V0KHJuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9jbWRfcykpOworCisJcm5pZC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19STklEOworCXJuaWQtPm5vZGVfaWRfZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NtZF9zKSk7Cit9CisKK3UxNgorZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKQoreworCW1lbXNldChybmlkX2FjYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXJuaWRfYWNjLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0FDQzsKKwlybmlkX2FjYy0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9IGRhdGFfZm9ybWF0OworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YV9sZW5ndGggPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3MpOworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YSA9ICpjb21tb25faWRfZGF0YTsKKworCWlmIChkYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJcm5pZF9hY2MtPnNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyk7CisJCWJmYV9vc19hc3NpZ24ocm5pZF9hY2MtPmdlbl90b3BvbG9neV9kYXRhLCAqZ2VuX3RvcG9fZGF0YSk7CisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JuaWRfYWNjX3MpIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCX0KKworfQorCit1MTYKK2ZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChycHNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfY21kX3MpKTsKKworCXJwc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlBTQzsKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19jbWRfcykpOworfQorCit1MTYKK2ZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzYzIsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUzMiAqcGlkX2xpc3QsCisJCQl1MTYgbnBpZHMpCit7CisJdTMyIGRjdGxyX2lkID0gRkNfRE9NQUlOX0NUUkxSKGJmYV9vc19odG9uM2IoZF9pZCkpOworCWludCBpID0gMDsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgYmZhX29zX2h0b24zYihkY3Rscl9pZCksIHNfaWQsIDApOworCisJbWVtc2V0KHJwc2MyLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSk7CisKKwlycHNjMi0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19SUFNDOworCXJwc2MyLT50b2tlbiA9IGJmYV9vc19odG9ubChGQ19CUkNEX1RPS0VOKTsKKwlycHNjMi0+bnVtX3BpZHMgID0gYmZhX29zX2h0b25zKG5waWRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKKwkJcnBzYzItPnBpZF9saXN0W2ldLnBpZCA9IHBpZF9saXN0W2ldOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSArICgobnBpZHMgLSAxKSAqCisJCQkoc2l6ZW9mKHUzMikpKSk7Cit9CisKK3UxNgorZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpCit7CisJbWVtc2V0KHJwc2NfYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfYWNjX3MpKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJcnBzY19hY2MtPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCXJwc2NfYWNjLT5udW1fZW50cmllcyA9IGJmYV9vc19odG9ucygxKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfc3BlZWRfY2FwID0KKwkJYmZhX29zX2h0b25zKG9wZXJfc3BlZWQtPnBvcnRfc3BlZWRfY2FwKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfb3Bfc3BlZWQgPQorCQliZmFfb3NfaHRvbnMob3Blcl9zcGVlZC0+cG9ydF9vcF9zcGVlZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19hY2NfcykpOworCit9CisKKy8qCisgKiBUQkQgLQorICogLiBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1lbXNldHMKKyAqLworCit1MTYKK2ZjX2xvZ29fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWxlbiA9IGxlbjsKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJYmZhX29zX21lbWNweShwZGlzYywgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CisKKwlwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19QRElTQzsKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBkaXNjLT5jc3AucnhzeiA9IHBkaXNjLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJcGRpc2MtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlwZGlzYy0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX3BkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLCB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBkaXNjID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCXJldHVybiAoRkNfUEFSU0VfTEVOX0lOVkFMKTsKKworCWlmIChwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0FDQ19JTlZBTCk7CisKKwlpZiAoIXd3bl9pc19lcXVhbChwZGlzYy0+cG9ydF9uYW1lLCBwb3J0X25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX1BXV05fTk9UX0VRVUFMKTsKKworCWlmICghcGRpc2MtPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJcmV0dXJuIChGQ19QQVJTRV9OV1dOX05PVF9FUVVBTCk7CisKKwlpZiAoYmZhX29zX250b2hzKHBkaXNjLT5jbGFzczMucnhzeikgPCAoRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9SWFNaX0lOVkFMKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCit1MTYKK2ZjX3BybG9fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgaW50IG51bV9wYWdlcykKK3sKKwlzdHJ1Y3QgZmNfcHJsb19zICAgICAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJbWVtc2V0KHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwlwcmxvLT5jb21tYW5kID0gRkNfRUxTX1BSTE87CisJcHJsby0+cGFnZV9sZW4gPSAweDEwOworCXBybG8tPnBheWxvYWRfbGVuID0gYmZhX29zX2h0b25zKChudW1fcGFnZXMgKiAxNikgKyA0KTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBudW1fcGFnZXM7IHBhZ2UrKykgeworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9wYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJcHJsby0+cHJsb19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSk7Cit9CisKK3UxNgorZmNfcHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcyAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fYWNjX3MgKikgKGZjaHMgKyAxKTsKKwlpbnQgICAgICAgICAgICAgbnVtX3BhZ2VzID0gMDsKKwlpbnQgICAgICAgICAgICAgcGFnZSA9IDA7CisKKwlsZW4gPSBsZW47CisKKwlpZiAocHJsby0+Y29tbWFuZCAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJbnVtX3BhZ2VzID0gKChiZmFfb3NfbnRvaHMocHJsby0+cGF5bG9hZF9sZW4pKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS50eXBlICE9IEZDX1RZUEVfRkNQKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgIT0gMCkKKwkJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJCWlmIChwcmxvLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKK30KKwordTE2CitmY190cHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMsCisJCQllbnVtIGZjX3RwcmxvX3R5cGUgdHBybG9fdHlwZSwgdTMyIHRwcl9pZCkKK3sKKwlzdHJ1Y3QgZmNfdHBybG9fcyAgICAgKnRwcmxvID0gKHN0cnVjdCBmY190cHJsb19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQodHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwl0cHJsby0+Y29tbWFuZCA9IEZDX0VMU19UUFJMTzsKKwl0cHJsby0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5ycGFfdmFsaWQgPSAwOworCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJCWlmICh0cHJsb190eXBlID09IEZDX0dMT0JBTF9MT0dPKSB7CisJCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLmdsb2JhbF9wcm9jZXNzX2xvZ291dCA9IDE7CisJCX0gZWxzZSBpZiAodHBybG9fdHlwZSA9PSBGQ19UUFJfTE9HTykgeworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfdmFsaWQgPSAxOworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfaWQgPSAodHByX2lkKTsKKwkJfQorCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3RwcmxvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX2FjY19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJaW50ICAgICAgICAgICAgIHBhZ2UgPSAwOworCisJbGVuID0gbGVuOworCisJaWYgKHRwcmxvLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfQUNDX0lOVkFMKTsKKworCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnR5cGUgIT0gRkNfVFlQRV9GQ1ApCisJCQlyZXR1cm4gKEZDX1BBUlNFX05PVF9GQ1ApOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX09QQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3JpZ19wcm9jZXNzX2Fzc2MgIT0gMCkKKwkJCXJldHVybiAoRkNfUEFSU0VfT1BBX0lOVkFMKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQV9JTlZBTCk7CisJfQorCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwlsZW4gPSBsZW47CisJaWYgKGVsc19jbWQtPmVsc19jb2RlICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX2JhX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiByZWFzb25fY29kZSwKKwkJCXUzMiByZWFzb25fZXhwbCkKK3sKKwlzdHJ1Y3QgZmNfYmFfcmp0X3MgICAgKmJhX3JqdCA9IChzdHJ1Y3QgZmNfYmFfcmp0X3MgKikgKGZjaHMgKyAxKTsKKworCWZjX2Jsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQkFfUkpUOworCWJhX3JqdC0+cmVhc29uX2NvZGUgPSByZWFzb25fY29kZTsKKwliYV9yanQtPnJlYXNvbl9leHBsID0gcmVhc29uX2V4cGw7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX3JqdF9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19jdGhkcl9idWlsZChzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyLCB1MzIgc19pZCwgdTE2IGNtZF9jb2RlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX0RJUlNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX05BTUVTRVJWRVI7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19odG9ucyhjbWRfY29kZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19mZG1pX2N0aGRyX2J1aWxkKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIsIHUzMiBzX2lkLCB1MTYgY21kX2NvZGUpCit7CisJYmZhX29zX21lbXNldChjdGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworCWN0aGRyLT5yZXZfaWQgPSBDVF9HUzNfUkVWSVNJT047CisJY3RoZHItPmdzX3R5cGUgPSBDVF9HU1RZUEVfTUdNVFNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfbXNfY3RoZHJfYnVpbGQoc3RydWN0IGN0X2hkcl9zICpjdGhkciwgdTMyIHNfaWQsIHUxNiBjbWRfY29kZSwKKwkJCQkJIHU4IHN1Yl90eXBlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX01HTVRTRVJWSUNFOworCWN0aGRyLT5nc19zdWJfdHlwZSA9IHN1Yl90eXBlOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCit1MTYKK2ZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHd3bl90IHBvcnRfbmFtZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MgKmdpZHBuID0KKwkJCShzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR0lEX1BOKTsKKworCWJmYV9vc19tZW1zZXQoZ2lkcG4sIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcykpOworCWdpZHBuLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHUzMiBwb3J0X2lkKQoreworCisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dwbmlkX3JlcV90ICpncG5pZCA9IChmY2dzX2dwbmlkX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HUE5fSUQpOworCisJYmZhX29zX21lbXNldChncG5pZCwgMCwgc2l6ZW9mKGZjZ3NfZ3BuaWRfcmVxX3QpKTsKKwlncG5pZC0+ZGFwID0gcG9ydF9pZDsKKwlyZXR1cm4gKHNpemVvZihmY2dzX2dwbmlkX3JlcV90KSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1MzIgcG9ydF9pZCkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19nbm5pZF9yZXFfdCAqZ25uaWQgPSAoZmNnc19nbm5pZF9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR05OX0lEKTsKKworCWJmYV9vc19tZW1zZXQoZ25uaWQsIDAsIHNpemVvZihmY2dzX2dubmlkX3JlcV90KSk7CisJZ25uaWQtPmRhcCA9IHBvcnRfaWQ7CisJcmV0dXJuIChzaXplb2YoZmNnc19nbm5pZF9yZXFfdCkgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfY3RfcnNwX3BhcnNlKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIpCit7CisJaWYgKGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKSAhPSBDVF9SU1BfQUNDRVBUKSB7CisJCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiBGQ19QQVJTRV9CVVNZOworCQllbHNlCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfc2NyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19zY3JfcyAqc2NyLCB1OCBzZXRfYnJfcmVnLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19DT05UUk9MTEVSKTsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJYmZhX29zX21lbXNldChzY3IsIDAsIHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKKwlzY3ItPmNvbW1hbmQgPSBGQ19FTFNfU0NSOworCXNjci0+cmVnX2Z1bmMgPSBGQ19TQ1JfUkVHX0ZVTkNfRlVMTDsKKwlpZiAoc2V0X2JyX3JlZykKKwkJc2NyLT52dV9yZWdfZnVuYyA9IEZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0U7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKK30KKwordTE2CitmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX0NPTlRST0xMRVIpOworCXUxNiAgICAgICAgcGF5bGRsZW47CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlyc2NuLT5jb21tYW5kID0gRkNfRUxTX1JTQ047CisJcnNjbi0+cGFnZWxlbiA9IHNpemVvZihyc2NuLT5ldmVudFswXSk7CisKKwlwYXlsZGxlbiA9IHNpemVvZih1MzIpICsgcnNjbi0+cGFnZWxlbjsKKwlyc2NuLT5wYXlsZGxlbiA9IGJmYV9vc19odG9ucyhwYXlsZGxlbik7CisKKwlyc2NuLT5ldmVudFswXS5mb3JtYXQgPSBGQ19SU0NOX0ZPUk1BVF9QT1JUSUQ7CisJcnNjbi0+ZXZlbnRbMF0ucG9ydGlkID0gc19pZDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19yc2NuX3BsX3MpKTsKK30KKwordTE2CitmY19yZnRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgdHlwZV92YWx1ZSwgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXU4ICAgICAgICAgaW5kZXg7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JGVF9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJmdGlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpKTsKKworCXJmdGlkLT5kYXAgPSBzX2lkOworCisJLyogQnkgZGVmYXVsdCwgRkNQIEZDNCBUeXBlIGlzIHJlZ2lzdGVyZWQgKi8KKwlpbmRleCA9IEZDX1RZUEVfRkNQID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKEZDX1RZUEVfRkNQICUgMzIpOworCXJmdGlkLT5mYzRfdHlwZVtpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSB7CisJCWluZGV4ID0gRkNfVFlQRV9JUCA+PiA1OworCQl0eXBlX3ZhbHVlID0gMSA8PCAoRkNfVFlQRV9JUCAlIDMyKTsKKwkJcmZ0aWQtPmZjNF90eXBlW2luZGV4XSB8PSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisJfQorCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRlRfSUQpOworCisJYmZhX29zX21lbXNldChyZnRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSk7CisKKwlyZnRpZC0+ZGFwID0gc19pZDsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopcmZ0aWQtPmZjNF90eXBlLCAodm9pZCAqKWZjNF9iaXRtYXAsCisJCQkoYml0bWFwX3NpemUgPCAzMiA/IGJpdG1hcF9zaXplIDogMzIpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yZmZpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zICpyZmZpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmZmaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRkZfSUQpOworCisJYmZhX29zX21lbXNldChyZmZpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSk7CisKKwlyZmZpZC0+ZGFwIAkJIAk9IHNfaWQ7CisJcmZmaWQtPmZjNGZ0cl9iaXRzICA9IGZjNF9mdHJzOworCXJmZmlkLT5mYzRfdHlwZQkJPSBmYzRfdHlwZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yc3BuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJdTggKm5hbWUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JzcG5pZF9yZXFfcyAqcnNwbmlkID0KKwkJCShzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JTUE5fSUQpOworCisJYmZhX29zX21lbXNldChyc3BuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MpKTsKKworCXJzcG5pZC0+ZGFwID0gc19pZDsKKwlyc3BuaWQtPnNwbl9sZW4gPSAodTgpIHN0cmxlbigoY2hhciAqKW5hbWUpOworCXN0cm5jcHkoKGNoYXIgKilyc3BuaWQtPnNwbiwgKGNoYXIgKiluYW1lLCByc3BuaWQtPnNwbl9sZW4pOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19naWRfZnRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1OCBmYzRfdHlwZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MgKmdpZGZ0ID0KKwkJCShzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dJRF9GVCk7CisKKwliZmFfb3NfbWVtc2V0KGdpZGZ0LCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MpKTsKKwlnaWRmdC0+ZmM0X3R5cGUgPSBmYzRfdHlwZTsKKwlnaWRmdC0+ZG9tYWluX2lkID0gMDsKKwlnaWRmdC0+YXJlYV9pZCA9IDA7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcnBuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkLAorCSAgICAgICB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcyAqcnBuaWQgPQorCQkJKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JQTl9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJwbmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3MpKTsKKwlycG5pZC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisJcnBuaWQtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19ybm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTMyIHBvcnRfaWQsCisJICAgICAgIHd3bl90IG5vZGVfbmFtZSkKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JubmlkX3JlcV9zICpybm5pZCA9CisJCQkoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUk5OX0lEKTsKKworCWJmYV9vc19tZW1zZXQocm5uaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfcykpOworCXJubmlkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlybm5pZC0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3Jjc2lkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTMyIGNvcykKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zICpyY3NpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkNTX0lEKTsKKworCWJmYV9vc19tZW1zZXQocmNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfcykpOworCXJjc2lkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlyY3NpZC0+Y29zID0gY29zOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JwdGlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTggcG9ydF90eXBlKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MgKnJwdGlkID0KKwkJCShzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SUFRfSUQpOworCisJYmZhX29zX21lbXNldChycHRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JwdGlkX3JlcV9zKSk7CisJcnB0aWQtPnBvcnRfaWQgPSBwb3J0X2lkOworCXJwdGlkLT5wb3J0X3R5cGUgPSBwb3J0X3R5cGU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfZ2FueHRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MgKmdhbnh0ID0KKwkJCShzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HQV9OWFQpOworCisJYmZhX29zX21lbXNldChnYW54dCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX2dhbnh0X3JlcV9zKSk7CisJZ2FueHQtPnBvcnRfaWQgPSBwb3J0X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSArIHNpemVvZihzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcykpOworfQorCisvKgorICogQnVpbGRzIGZjIGhkciBhbmQgY3QgaGRyIGZvciBGRE1JIHJlcXVlc3RzLgorICovCit1MTYKK2ZjX2ZkbWlfcmVxaGRyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkgICAgIHUxNiBjbWRfY29kZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19mZG1pX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBjbWRfY29kZSk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKworLyoKKyAqIEdpdmVuIGEgRkM0IFR5cGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZjNCB0eXBlIGJpdG1hc2sKKyAqLwordm9pZAorZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKQoreworCXU4ICAgICAgICAgaW5kZXg7CisJdTMyICAgICAgICpwdHIgPSAodTMyICopIGJpdF9tYXNrOworCXUzMiAgICAgICAgdHlwZV92YWx1ZTsKKworCS8qCisJICogQHRvZG8gOiBDaGVjayBmb3IgYml0bWFzayBzaXplCisJICovCisKKwlpbmRleCA9IGZjNF90eXBlID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKGZjNF90eXBlICUgMzIpOworCXB0cltpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKK30KKworLyoKKyAqIEdNQUwgUmVxdWVzdAorICovCit1MTYKK2ZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dtYWxfcmVxX3QgKmdtYWwgPSAoZmNnc19nbWFsX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dNQUxfQ01ELAorCQkJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUik7CisKKwliZmFfb3NfbWVtc2V0KGdtYWwsIDAsIHNpemVvZihmY2dzX2dtYWxfcmVxX3QpKTsKKwlnbWFsLT53d24gPSB3d247CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpICsgc2l6ZW9mKGZjZ3NfZ21hbF9yZXFfdCkpOworfQorCisvKgorICogR0ZOIChHZXQgRmFicmljIE5hbWUpIFJlcXVlc3QKKyAqLwordTE2CitmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dmbl9yZXFfdCAqZ2ZuID0gKGZjZ3NfZ2ZuX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dGTl9DTUQsCisJCQlDVF9HU1NVQlRZUEVfQ0ZHU0VSVkVSKTsKKworCWJmYV9vc19tZW1zZXQoZ2ZuLCAwLCBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKKwlnZm4tPnd3biA9IHd3bjsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykgKyBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY2J1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyNDg0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogZmNidWlsZC5oIC0gRkMgbGluayBzZXJ2aWNlIGZyYW1lIGJ1aWxkaW5nIGFuZCBwYXJzaW5nIHJvdXRpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDQlVJTERfSF9fCisjZGVmaW5lIF9fRkNCVUlMRF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjcC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2N0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisvKgorICogVXRpbGl0eSBNYWNyb3MvZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBmY2lmX3NvZl9zZXQoX2lmaGRyLCBfc29mKQkoX2lmaGRyKS0+c29mID0gRkNfICMjIF9zb2YKKyNkZWZpbmUgZmNpZl9lb2Zfc2V0KF9pZmhkciwgX2VvZikJKF9pZmhkciktPmVvZiA9IEZDXyAjIyBfZW9mCisKKyNkZWZpbmUgd3duX2lzX2VxdWFsKF93d24xLCBfd3duMikJCVwKKwkobWVtY21wKCYoX3d3bjEpLCAmKF93d24yKSwgc2l6ZW9mKHd3bl90KSkgPT0gMCkKKworI2RlZmluZSBmY19yb3VuZHVwKF9sLCBfcykgKCgoX2wpICsgKChfcykgLSAxKSkgJiB+KChfcykgLSAxKSkKKworLyoKKyAqIEdpdmVuIHRoZSBmYyByZXNwb25zZSBsZW5ndGgsIHRoaXMgcm91dGluZSB3aWxsIHJldHVybgorICogdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsIHBheWxvYWQgYnl0ZXMgZm9sbG93aW5nIHRoZSBDVCBoZWFkZXIuCisgKgorICogQXNzdW1lcyB0aGUgaW5wdXQgcmVzcG9uc2UgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNyYywgZW9mLCBldGMuCisgKi8KK3N0YXRpYyBpbmxpbmUgICB1MzIKK2ZjX2dldF9jdHJlc3BfcHlsZF9sZW4odTMyIHJlc3BfbGVuKQoreworCXJldHVybiAocmVzcF9sZW4gLSBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGJmYSBzcGVlZCB0byBycHNjIHNwZWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gYmZhX3Bwb3J0X3NwZWVkCitmY19ycHNjX29wZXJzcGVlZF90b19iZmFfc3BlZWQoZW51bSBmY19ycHNjX29wX3NwZWVkX3Mgc3BlZWQpCit7CisJc3dpdGNoIChzcGVlZCkgeworCisJY2FzZSBSUFNDX09QX1NQRUVEXzFHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzFHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzJHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzJHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzRHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzRHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzhHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzhHQlBTOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOOworCX0KK30KKworLyoKKyAqIENvbnZlcnQgUlBTQyBzcGVlZCB0byBiZmEgc3BlZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgICBlbnVtIGZjX3Jwc2Nfb3Bfc3BlZWRfcworZmNfYmZhX3NwZWVkX3RvX3Jwc2Nfb3BlcnNwZWVkKGVudW0gYmZhX3Bwb3J0X3NwZWVkIG9wX3NwZWVkKQoreworCXN3aXRjaCAob3Bfc3BlZWQpIHsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzFHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8xRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8yRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzRHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF80RzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzhHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF84RzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBSUFNDX09QX1NQRUVEX05PVF9FU1Q7CisJfQorfQorZW51bSBmY19wYXJzZV9zdGF0dXMgeworCUZDX1BBUlNFX09LID0gMCwKKwlGQ19QQVJTRV9GQUlMVVJFID0gMSwKKwlGQ19QQVJTRV9CVVNZID0gMiwKKwlGQ19QQVJTRV9MRU5fSU5WQUwsCisJRkNfUEFSU0VfQUNDX0lOVkFMLAorCUZDX1BBUlNFX1BXV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX05XV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX1JYU1pfSU5WQUwsCisJRkNfUEFSU0VfTk9UX0ZDUCwKKwlGQ19QQVJTRV9PUEFGTEFHX0lOVkFMLAorCUZDX1BBUlNFX1JQQUZMQUdfSU5WQUwsCisJRkNfUEFSU0VfT1BBX0lOVkFMLAorCUZDX1BBUlNFX1JQQV9JTlZBTCwKKworfTsKKworc3RydWN0IGZjX3RlbXBsYXRlc19zIHsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjX2Vsc19yZXE7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY19ibHNfcmVxOworCXN0cnVjdCBmY19sb2dpX3MgICAgICBwbG9naTsKKwlzdHJ1Y3QgZmNfcnJxX3MgICAgICAgIHJycTsKK307CisKK3ZvaWQgZmNidWlsZF9pbml0KHZvaWQpOworCit1MTYgZmNfZmxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsCisJCQl1OCBzZXRfYXV0aCwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpOwordTE2IGZjX2ZkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmJ1Ziwgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfZmxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUsCisJCQl1MTYgbG9jYWxfYmJfY3JlZGl0cyk7Cit1MTYgZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJCXd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMpOwordTE2IGZjX2FidHNfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqYnVmLCBpbnQgbGVuKTsKK3UxNiBmY19ycnFfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB1MTYgcnJxX294aWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpidWYsIGludCBsZW4pOwordTE2IGZjX3JzcG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCAqbmFtZSk7Cit1MTYgZmNfcmZ0aWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpOwordTE2IGZjX3JmZmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpOwordTE2IGZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUpOwordTE2IGZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiBwb3J0X2lkKTsKK3UxNiBmY19zY3JfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Njcl9zICpzY3IsCisJCQl1OCBzZXRfYnJfcmVnLCB1MzIgc19pZCwgdTE2IG94X2lkKTsKK3UxNiBmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKKwordTE2IGZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLAorCQkJdTMyIGhvc3RfZGFwLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB3d25fdCBwb3J0X25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgaW50IGxlbiwKKwkJCXd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSk7Cit1MTYgZmNfbHNfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sc19yanRfcyAqbHNfcmp0LAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCk7Cit1MTYgZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3JzcF9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpLCBpbnQgbGVuKTsKKwordTE2IGZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUzMiBkYXRhX2Zvcm1hdCk7Cit1MTYgZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICoKKwkJCWdlbl90b3BvX2RhdGEpOwordTE2IGZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzMmMsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MzIgKnBpZF9saXN0LCB1MTYgbnBpZHMpOwordTE2IGZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpOwordTE2IGZjX2dpZF9mdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTggZmM0X3R5cGUpOwordTE2IGZjX3JwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQsIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcm5uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MzIgcG9ydF9pZCwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19yY3NpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1MzIgY29zKTsKK3UxNiBmY19ycHRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1OCBwb3J0X3R5cGUpOwordTE2IGZjX2dhbnh0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQpOwordTE2IGZjX2xvZ29fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ29fcyAqbG9nbywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19sb2dvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfZmRtaV9yZXFoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgY21kX2NvZGUpOwordTE2IGZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3UxNiBmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3ZvaWQgZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKTsKK3ZvaWQgZmNfZWxzX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLAorCQkJIHd3bl90IHBvcnRfbmFtZSk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGkpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcGRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgd3duX3Qgbm9kZV9uYW1lLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19iYV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2JhX2FjY19zICpiYV9hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUxNiByeF9pZCk7CitpbnQgZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpOwordTE2IGZjX3RwcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJc3RydWN0IGZjX3RwcmxvX2FjY19zICp0cHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19wcmxvX2FjY19zICpwcmxvX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJaW50IG51bV9wYWdlcyk7Cit1MTYgZmNfbG9nb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfcGRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwordTE2IGZjX3RwcmxvX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgaW50IG51bV9wYWdlcywKKwkJCWVudW0gZmNfdHBybG9fdHlwZSB0cHJsb190eXBlLCB1MzIgdHByX2lkKTsKK3UxNiBmY190cHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfYmFfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHJlYXNvbl9jb2RlLAorCQkJdTMyIHJlYXNvbl9leHBsKTsKK3UxNiBmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHBvcnRfaWQpOwordTE2IGZjX2N0X3JzcF9wYXJzZShzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyKTsKK3UxNiBmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sCisJCQl1MzIgc19pZCwgdTE2IG94X2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTVkODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjcGltLmMgLSBGQ1AgaW5pdGlhdG9yIG1vZGUgaS10IG5leHVzIHN0YXRlIG1hY2hpbmUKKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZjcGltLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pdG5pbS5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBGQ1BJTSk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9mcmVlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NlbmRfcHJsaSh2b2lkICppdG5pbV9jYmFyZywKKwkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpOworCisvKioKKyAqICBmY3NfaXRuaW1fc20gRkNTIGl0bmltIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IHsKKwlCRkFfRkNTX0lUTklNX1NNX09OTElORSA9IDEsCS8qICBycG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX09GRkxJTkUgPSAyLAkvKiAgcnBvcnQgb2ZmbGluZSAqLworCUJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCA9IDMsCS8qICBwcmxpIGZyYW1lIGlzIHNlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyA9IDQsCS8qICBnb29kIHJlc3BvbnNlICovCisJQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1IgPSA1LAkvKiAgZXJyb3IgcmVzcG9uc2UgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1RJTUVPVVQgPSA2LAkvKiAgZGVsYXkgdGltZW91dCAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkUgPSA3LAkvKiAgQkZBIG9ubGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORSA9IDgsCS8qICBCRkEgb2ZmbGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SID0gOSwJLyogIHJwb3J0IGlzIGluaXRpYXRvciAqLworCUJGQV9GQ1NfSVROSU1fU01fREVMRVRFID0gMTAsCS8qICBkZWxldGUgZXZlbnQgZnJvbSBycG9ydCAqLworCUJGQV9GQ1NfSVROSU1fU01fUFJMTyA9IDExLAkvKiAgZGVsZXRlIGV2ZW50IGZyb20gcnBvcnQgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgaXRuaW1fc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSksIEJGQV9JVE5JTV9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKSwgQkZBX0lUTklNX1BSTElfU0VORH0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX3BybGkpLCBCRkFfSVROSU1fUFJMSV9TRU5UfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeSksIEJGQV9JVE5JTV9QUkxJX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSksIEJGQV9JVE5JTV9IQ0JfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb25saW5lKSwgQkZBX0lUTklNX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKSwgQkZBX0lUTklNX0hDQl9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKSwgQkZBX0lUTklNX0lOSVRJQVRJT1J9LAorfTsKKworLyoqCisgKiAgZmNzX2l0bmltX3NtIEZDUyBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKTsKKwkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0ZSTVNFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3IpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoaXRuaW0tPmZjcy0+YmZhLCAmaXRuaW0tPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKTsKKwkJYmZhX2l0bmltX29ubGluZShpdG5pbS0+YmZhX2l0bmltLCBpdG5pbS0+c2VxX3JlYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT50aW1lciwKKwkJCQliZmFfZmNzX2l0bmltX3RpbWVvdXQsIGl0bmltLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoaXRuaW0tPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJLyoKKwkJICogZG9udCBkaXNjYXJkIGZjeHAuIGFjY2VwdCB3aWxsIHJlYWNoIHNhbWUgc3RhdGUKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChpdG5pbS0+ZmN4cCk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfcmV0cnkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3NlbmQpOworCQliZmFfZmNzX2l0bmltX3NlbmRfcHJsaShpdG5pbSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX2hjYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUpOworCQliZmFfZmNiX2l0bmltX29ubGluZShpdG5pbS0+aXRuaW1fZHJ2KTsKKwkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9PTkxJTkUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX2ZjYl9pdG5pbV9vZmZsaW5lKGl0bmltLT5pdG5pbV9kcnYpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUoaXRuaW0tPnJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkgeworCQkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9mY3NfaXRuaW1fYWVuX3Bvc3QoaXRuaW0sIEJGQV9JVE5JTV9BRU5fT0ZGTElORSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyAqIFRoaXMgc3RhdGUgaXMgc2V0IHdoZW4gYSBkaXNjb3ZlcmVkIHJwb3J0IGlzIGFsc28gaW4gaW50aWF0b3IgbW9kZS4KKyAqIFRoaXMgSVROIGlzIG1hcmtlZCBhcyBub19vcCBhbmQgaXMgbm90IGFjdGl2ZSBhbmQgd2lsbCBub3QgYmUgdHJ1bmVkIGludG8KKyAqIG9ubGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fUlNQX0VSUk9SOgorCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgaXRuaW1fcHJpdmF0ZSBGQ1MgSVROSU0gcHJpdmF0ZSBpbnRlcmZhY2VzCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHJwb3J0LT5mY3MtPmxvZ207CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHJwb3J0LT5wb3J0KTsKKwl3d25fdCAgICAgICAgICAgcnB3d24gPSBycG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBycHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCXJldHVybjsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisJd3duMnN0cihycHd3bl9wdHIsIHJwd3duKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JVE5JTV9PTkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX09GRkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEuaXRuaW0udmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5pdG5pbS5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQoaXRuaW0tPmZjcykpOworCWFlbl9kYXRhLml0bmltLmxwd3duID0gbHB3d247CisJYWVuX2RhdGEuaXRuaW0ucnB3d24gPSBycHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc2VuZF9wcmxpKHZvaWQgKml0bmltX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gaXRuaW1fY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWl0bmltLT5zdGF0cy5mY3hwX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19pdG5pbV9zZW5kX3BybGksIGl0bmltKTsKKwkJcmV0dXJuOworCX0KKwlpdG5pbS0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wcmxpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBpdG5pbS0+cnBvcnQtPnBpZCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDApOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBycG9ydC0+YmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlLCAodm9pZCAqKWl0bmltLCBGQ19NQVhfUERVU1osCisJCSAgICAgIEZDX1JBX1RPVik7CisKKwlpdG5pbS0+c3RhdHMucHJsaV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3BybGlfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYmFyZzsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpX3Jlc3A7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3MgKnNwYXJhbXM7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCXBybGlfcmVzcCA9IChzdHJ1Y3QgZmNfcHJsaV9zICopIGVsc19jbWQ7CisKKwkJaWYgKGZjX3BybGlfcnNwX3BhcnNlKHBybGlfcmVzcCwgcnNwX2xlbikgIT0gRkNfUEFSU0VfT0spIHsKKwkJCWJmYV90cmMoaXRuaW0tPmZjcywgcnNwX2xlbik7CisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhpcyAgci1wb3J0IGlzIGFsc28gaW4gSW5pdGlhdG9yIG1vZGUuCisJCQkgKiBJZiBzbywgd2UgbmVlZCB0byBzZXQgdGhpcyBJVE4gYXMgYSBuby1vcC4KKwkJCSAqLworCQkJaWYgKHBybGlfcmVzcC0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKSB7CisJCQkJYmZhX3RyYyhpdG5pbS0+ZmNzLCBwcmxpX3Jlc3AtPnBhcmFtcGFnZS50eXBlKTsKKwkJCQlpdG5pbS0+cnBvcnQtPnNjc2lfZnVuY3Rpb24gPQorCQkJCQlCRkFfUlBPUlRfSU5JVElBVE9SOworCQkJCWl0bmltLT5zdGF0cy5wcmxpX3JzcF9hY2MrKzsKKwkJCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwKKwkJCQkJCSAgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX3BhcnNlX2VycisrOworCQkJcmV0dXJuOworCQl9CisJCWl0bmltLT5ycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9UQVJHRVQ7CisKKwkJc3BhcmFtcyA9ICZwcmxpX3Jlc3AtPnBhcmFtcGFnZS5zZXJ2cGFyYW1zOworCQlpdG5pbS0+c2VxX3JlYyA9IHNwYXJhbXMtPnJldHJ5OworCQlpdG5pbS0+cmVjX3N1cHBvcnQgPSBzcGFyYW1zLT5yZWNfc3VwcG9ydDsKKwkJaXRuaW0tPnRhc2tfcmV0cnlfaWQgPSBzcGFyYW1zLT50YXNrX3JldHJ5X2lkOworCQlpdG5pbS0+Y29uZl9jb21wID0gc3BhcmFtcy0+Y29uZmlybTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfYWNjKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyk7CisJfSBlbHNlIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3Bfcmp0Kys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopYXJnOworCisJaXRuaW0tPnN0YXRzLnRpbWVvdXQrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfaXRuaW1fZGVsZXRlKGl0bmltLT5iZmFfaXRuaW0pOworCWJmYV9mY2JfaXRuaW1fZnJlZShpdG5pbS0+ZmNzLT5iZmFkLCBpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworCisKKy8qKgorICogIGl0bmltX3B1YmxpYyBGQ1MgSVROSU0gcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIAlDYWxsZWQgYnkgcnBvcnQgd2hlbiBhIG5ldyBycG9ydCBpcyBjcmVhdGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnQJLSAgcmVtb3RlIHBvcnQuCisgKi8KK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2OworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCisJLyoKKwkgKiBjYWxsIGJmYWQgdG8gYWxsb2NhdGUgdGhlIGl0bmltCisJICovCisJYmZhX2ZjYl9pdG5pbV9hbGxvYyhwb3J0LT5mY3MtPmJmYWQsICZpdG5pbSwgJml0bmltX2Rydik7CisJaWYgKGl0bmltID09IE5VTEwpIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIGl0bmltCisJICovCisJaXRuaW0tPnJwb3J0ID0gcnBvcnQ7CisJaXRuaW0tPmZjcyA9IHJwb3J0LT5mY3M7CisJaXRuaW0tPml0bmltX2RydiA9IGl0bmltX2RydjsKKworCS8qCisJICogY2FsbCBCRkEgdG8gY3JlYXRlIHRoZSBpdG5pbQorCSAqLworCWJmYV9pdG5pbSA9IGJmYV9pdG5pbV9jcmVhdGUocG9ydC0+ZmNzLT5iZmEsIHJwb3J0LT5iZmFfcnBvcnQsIGl0bmltKTsKKworCWlmIChiZmFfaXRuaW0gPT0gTlVMTCkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQliZmFfZmNiX2l0bmltX2ZyZWUocG9ydC0+ZmNzLT5iZmFkLCBpdG5pbV9kcnYpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpdG5pbS0+YmZhX2l0bmltID0gYmZhX2l0bmltOworCWl0bmltLT5zZXFfcmVjID0gQkZBX0ZBTFNFOworCWl0bmltLT5yZWNfc3VwcG9ydCA9IEJGQV9GQUxTRTsKKwlpdG5pbS0+Y29uZl9jb21wID0gQkZBX0ZBTFNFOworCWl0bmltLT50YXNrX3JldHJ5X2lkID0gQkZBX0ZBTFNFOworCisJLyoKKwkgKiBTZXQgU3RhdGUgbWFjaGluZQorCSAqLworCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisKKwlyZXR1cm4gaXRuaW07Cit9CisKKy8qKgorICogCUNhbGxlZCBieSBycG9ydCB0byBkZWxldGUgIHRoZSBpbnN0YW5jZSBvZiBGQ1BJTS4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0CS0gIHJlbW90ZSBwb3J0LgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIE5vdGlmaWNhdGlvbiBmcm9tIHJwb3J0IHRoYXQgUExPR0kgaXMgY29tcGxldGUgdG8gaW5pdGlhdGUgRkMtNCBzZXNzaW9uLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdHMub25saW5lcysrOworCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EoaXRuaW0tPnJwb3J0LT5waWQpKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX09OTElORSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIHdlbGwga25vd24gYWRkcmVzc2VzLCB3ZSBzZXQgdGhlIGl0bmltIHRvIGluaXRpYXRvcgorCQkgKiBzdGF0ZQorCQkgKi8KKwkJaXRuaW0tPnN0YXRzLmluaXRpYXRvcisrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCX0KK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgdG8gaGFuZGxlIGEgcmVtb3RlIGRldmljZSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJaXRuaW0tPnN0YXRzLm9mZmxpbmVzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IHdoZW4gcmVtb3RlIHBvcnQgaXMga25vd24gdG8gYmUgYW4gaW5pdGlhdG9yIGZyb20KKyAqIFBSTEkgcmVjZWl2ZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfaXRuaW1faXNfaW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5waWQpOworCWl0bmltLT5zdGF0cy5pbml0aWF0b3IrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCB0byBjaGVjayBpZiB0aGUgaXRuaW0gaXMgb25saW5lLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwlzd2l0Y2ggKGJmYV9zbV90b19zdGF0ZShpdG5pbV9zbV90YWJsZSwgaXRuaW0tPnNtKSkgeworCWNhc2UgQkZBX0lUTklNX09OTElORToKKwljYXNlIEJGQV9JVE5JTV9JTklUSUFUSU9SOgorCQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBCRkFfU1RBVFVTX05PX0ZDUElNX05FWFVTOworCisJfQorfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb25saW5lKCkuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiYXJnOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX0hDQl9PTkxJTkUpOworfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9IQ0JfT0ZGTElORSk7Cit9CisKKy8qKgorICogTWFyayB0aGUgYmVnaW5uaW5nIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBJTyBjb21wbGV0aW9uIGNhbGxiYWNrcworICogYXJlIHN0aWxsIHBlbmRpbmcuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV90b3ZfYmVnaW4odm9pZCAqY2JfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYl9hcmc7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2ZjYl9pdG5pbV90b3ZfYmVnaW4oaXRuaW0tPml0bmltX2Rydik7Cit9CisKKy8qKgorICogTWFyayB0aGUgZW5kIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBBbGwgcGVuZGluZyBJT3MgYXJlIGFscmVhZHkgY2xlYW5lZCB1cC4KKyAqLwordm9pZAorYmZhX2NiX2l0bmltX3Rvdih2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfZmNiX2l0bmltX3RvdihpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworLyoqCisgKiAJCUJGQSBub3RpZmljYXRpb24gdG8gRkNTL2RyaXZlciBmb3Igc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5LgorICoKKyAqIEF0bGVhc3Qgb25lIEkvTyByZXF1ZXN0IGhhcyB0aW1lZG91dCBhbmQgdGFyZ2V0IGlzIHVucmVzcG9uc2l2ZSB0bworICogcmVwZWF0ZWQgYWJvcnQgcmVxdWVzdHMuIFNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBzaG91bGQgYmUgaW5pdGlhdGVkCisgKiBieSBzdGFydGluZyBpbXBsaWNpdCBsb2dvdXQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopY2JfYXJnOworCisJaXRuaW0tPnN0YXRzLnNsZXIrKzsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChpdG5pbS0+cnBvcnQpOworfQorCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9hc3NlcnQocnBvcnQtPml0bmltICE9IE5VTEwpOworCXJldHVybiAocnBvcnQtPml0bmltKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX2F0dHJfZ2V0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24sCisJCSAgICAgICBzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWF0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGl0bmltX3NtX3RhYmxlLCBpdG5pbS0+c20pOworCWF0dHItPnJldHJ5ID0gaXRuaW0tPnNlcV9yZWM7CisJYXR0ci0+cmVjX3N1cHBvcnQgPSBpdG5pbS0+cmVjX3N1cHBvcnQ7CisJYXR0ci0+Y29uZl9jb21wID0gaXRuaW0tPmNvbmZfY29tcDsKKwlhdHRyLT50YXNrX3JldHJ5X2lkID0gaXRuaW0tPnRhc2tfcmV0cnlfaWQ7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1jcHkoc3RhdHMsICZpdG5pbS0+c3RhdHMsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fc3RhdHNfY2xlYXIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1zZXQoJml0bmltLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcykpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBmY2hzLT50eXBlKTsKKworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKQorCQlyZXR1cm47CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX1BSTE86CisJCS8qIGJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1BSTE8pOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX2ZjcGltX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19mY3BpbV9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhiMDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3B0bS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZHVtbXkgRkNQVE0gcm91dGluZXMgdG8gYWlkIGluIEluaXRpYXRvciBNb2RlIG9ubHkKKyAqIGNvbXBpbGF0aW9uIG9mIE9TIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY3MvYmZhX2Zjc19ycG9ydC5oIgorCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqCitiZmFfZmNzX3Rpbl9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yeF9wcmxpKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfZmNwdG1fdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yZXN1bWUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZWU2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzLmggRkNTIG1vZHVsZSBmdW5jdGlvbnMKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfSF9fCisjZGVmaW5lIF9fRkNTX0hfXworCisjZGVmaW5lIF9fZmNzX21pbl9jZmcoX19mY3MpICAgICAgIChfX2ZjcyktPm1pbl9jZmcKKwordm9pZCBiZmFfZmNzX21vZGV4aXRfY29tcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2F1dGguaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc191Zi5oIEZDUyB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCisgKi8KKworCisjaWZuZGVmIF9fRkNTX0FVVEhfSF9fCisjZGVmaW5lIF9fRkNTX0FVVEhfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKworLyoKKyAqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCBiZmFfZmNzX2F1dGhfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2Zjc19hdXRoX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2F1dGhfc3RvcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU5NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfbHBvcnQuaCBGQ1MgbG9naWNhbCBwb3J0IGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fRkNTX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19GQ1NfRkFCUklDX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisKKy8qCisqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3VzcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2xpbmtfdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2FkZHZwb3J0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19kZWx2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitpbnQgICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKAorCQkJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bik7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3UxNiAgICAgICAgYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitiZmFfYm9vbGVhbl90ICAgYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitlbnVtIGJmYV9wcG9ydF90eXBlIGJmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgICAgIAliZmFfZmNzX2ZhYnJpY19wc3ltYl9pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLAorCQkJc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKK3ZvaWQgYmZhX2Zjc19hdXRoX2ZpbmlzaGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGF1dGhfc3RhdHVzIHN0YXR1cyk7CisKK3ZvaWQgYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQl3d25fdCBmYWJyaWNfbmFtZSk7CisjZW5kaWYgLyogX19GQ1NfRkFCUklDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlOWUyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0ZDU19GQ1BJTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQSU0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICpiZmFfZmNzX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7CisKK3ZvaWQgYmZhX2Zjc19pdG5pbV9pc19pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOwordm9pZCBiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9yZXN1bWUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3BpbV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwaW1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKKyNlbmRpZiAvKiBfX0ZDU19GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcHRtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmYwODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDU19GQ1BUTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQVE1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQVE0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqYmZhX2Zjc190aW5fY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOwordm9pZCBiZmFfZmNzX3Rpbl9kZWxldGUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbik7Cit2b2lkIGJmYV9mY3NfdGluX3J4X3BybGkoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOwordm9pZCBiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3B0bV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwdG1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcHRtX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisjZW5kaWYgLyogX19GQ1NfRkNQVE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3N2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjeHAuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19mY3hwLmggRkNYUCBoZWxwZXIgbWFjcm9zIGZvciBGQ1MKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfRkNYUF9IX18KKyNkZWZpbmUgX19GQ1NfRkNYUF9IX18KKworI2RlZmluZSBiZmFfZmNzX2ZjeHBfYWxsb2MoX19mY3MpCVwKKwliZmFfZmN4cF9hbGxvYyhOVUxMLCAoX19mY3MpLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisKKyNlbmRpZiAvKiBfX0ZDU19GQ1hQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3NDRiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX2xwb3J0LmggRkNTIGxvZ2ljYWwgcG9ydCBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0ZDU19MUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfTFBPUlRfSF9fCisKKyNkZWZpbmUgX19WUE9SVF9IX18KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzX2ZhYnJpYy5oPgorI2luY2x1ZGUgPGZjc19tcy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8ZmNidWlsZC5oPgorCisvKgorICogUElEIHVzZWQgaW4gUDJQL04yTiAoIEluIEJpZyBFbmRpYW4pCisgKi8KKyNkZWZpbmUgTjJOX0xPQ0FMX1BJRAkgICAgMHgwMTAwMDAKKyNkZWZpbmUgTjJOX1JFTU9URV9QSUQJCTB4MDIwMDAwCisKKy8qCisgKiBNaXNjIFRpbWVvdXRzCisgKi8KKy8qCisgKiBUbyBiZSB1c2VkIHdoZW4gc3Bhd25pbmcgYSB0aW1lciBiZWZvcmUgcmV0cnlpbmcgYSBmYWlsZWQgY29tbWFuZC4gTWlsbGkKKyAqIFNlY3MuCisgKi8KKyNkZWZpbmUJQkZBX0ZDU19SRVRSWV9USU1FT1VUIDIwMDAKKworLyoKKyAqIENoZWNrIGZvciBQb3J0L1Zwb3J0IE1vZGUvUm9sZQorICovCisjZGVmaW5lCUJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKworI2RlZmluZQlCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKHBvcnQpIFwKKwkJKHBvcnQtPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisKKyNkZWZpbmUJQkZBX0ZDU19WUE9SVF9JU19JUEZDX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCisvKgorICogSXMgdGhpcyBhIFdlbGwgS25vd24gQWRkcmVzcworICovCisjZGVmaW5lIEJGQV9GQ1NfUElEX0lTX1dLQShwaWQpICAoKGJmYV9vc19udG9oM2IocGlkKSA+IDB4RkZGMDAwKSA/ICAxIDogMCkKKworLyoKKyAqIFBvaW50ZXIgdG8gZWxlbWVudHMgd2l0aGluIFBvcnQKKyAqLworI2RlZmluZSBCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpICAocG9ydC0+ZmNzLT5iZmEpCisjZGVmaW5lIEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5ucykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5zY24pCisjZGVmaW5lIEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5tcykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfRkRNSV9GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIubXMuZmRtaSkKKworLyoKKyAqIGhhbmRsZXIgZm9yIHVuc29saWNpZWQgZnJhbWVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisvKgorICogRm9sbG93aW5nIHJvdXRpbmVzIHdpbGwgYmUgY2FsbGVkIGJ5IEZhYnJpYyB0byBpbmRpY2F0ZSBwb3J0CisgKiBvbmxpbmUvb2ZmbGluZSB0byB2cG9ydC4KKyAqLwordm9pZCBiZmFfZmNzX2xwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK2JmYV9ib29sZWFuX3QgICBiZmFfZmNzX3BvcnRfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qCisgKiBMb29rdXAgcnBvcnQgYmFzZWQgb24gUElECisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcGlkKTsKKworLyoKKyAqIExvb2t1cCBycG9ydCBiYXNlZCBvbiBQV1dOCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3bik7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24oCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pOwordm9pZCBiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CisKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisjZW5kaWYgLyogX19GQ1NfTFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19tcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19tcy5oIEZDUyBtcyBpbnRlcmZhY2VzCisgKi8KKyNpZm5kZWYgX19GQ1NfTVNfSF9fCisjZGVmaW5lIF9fRkNTX01TX0hfXworCisvKiBNUyBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X21zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworLyogRkRNSSBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcG9ydC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3Bwb3J0LmggRkNTIHBoeXNpY2FsIHBvcnQgaW50ZXJmYWNlcworICovCisKKworI2lmbmRlZiBfX0ZDU19QUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUFBPUlRfSF9fCisKKy8qCisgKiBmY3MgZnJpZW5kIGZ1bmN0aW9uczogb25seSBiZXR3ZWVuIGZjcyBtb2R1bGVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfUFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAxZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19ycG9ydC5oIEZDUyBycG9ydCBpbnRlcmZhY2VzIGFuZCBkZWZpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19SUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorCit2b2lkIGJmYV9mY3NfcnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3Jwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKwordm9pZCBiZmFfZmNzX3Jwb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9zY24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl1MzIgcGlkKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2lfcnNwKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9pdG50bV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X3Rpbl9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2ZjcHRtX29mZmxpbmVfZG9uZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitpbnQgIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfY3JlYXRlX2J5X3d3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCB3d24pOworCisKKy8qIFJwb3J0IEZlYXR1cmVzICovCit2b2lkICBiZmFfZmNzX3JwZl9pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKKworI2VuZGlmIC8qIF9fRkNTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc190cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWI1YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfdHJjbW9kLmggQkZBIEZDUyB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19UUkNNT0RfSF9fCisjZGVmaW5lIF9fRkNTX1RSQ01PRF9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19GQ1NfRkFCUklDCQk9IDEsCisJQkZBX1RSQ19GQ1NfVkZBUEkJCT0gMiwKKwlCRkFfVFJDX0ZDU19QT1JUCQk9IDMsCisJQkZBX1RSQ19GQ1NfVlBPUlQJCT0gNCwKKwlCRkFfVFJDX0ZDU19WUF9BUEkJCT0gNSwKKwlCRkFfVFJDX0ZDU19WUFMJCQk9IDYsCisJQkZBX1RSQ19GQ1NfUlBPUlQJCT0gNywKKwlCRkFfVFJDX0ZDU19GQ1BJTQkJPSA4LAorCUJGQV9UUkNfRkNTX0ZDUFRNCQk9IDksCisJQkZBX1RSQ19GQ1NfTlMJCQk9IDEwLAorCUJGQV9UUkNfRkNTX1NDTgkJCT0gMTEsCisJQkZBX1RSQ19GQ1NfTE9PUAkJPSAxMiwKKwlCRkFfVFJDX0ZDU19VRgkJCT0gMTMsCisJQkZBX1RSQ19GQ1NfUFBPUlQJCT0gMTQsCisJQkZBX1RSQ19GQ1NfRkNQSVAJCT0gMTUsCisJQkZBX1RSQ19GQ1NfUE9SVF9BUEkJPSAxNiwKKwlCRkFfVFJDX0ZDU19SUE9SVF9BUEkJPSAxNywKKwlCRkFfVFJDX0ZDU19BVVRICQk9IDE4LAorCUJGQV9UUkNfRkNTX04yTgkJCT0gMTksCisJQkZBX1RSQ19GQ1NfTVMJCQk9IDIwLAorCUJGQV9UUkNfRkNTX0ZETUkJCT0gMjEsCisJQkZBX1RSQ19GQ1NfUlBPUlRfRlRSUwk9IDIyLAorfTsKKworI2VuZGlmIC8qIF9fRkNTX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3VmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjFiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3VmLmggRkNTIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfVUZfSF9fCisjZGVmaW5lIF9fRkNTX1VGX0hfXworCisvKgorICogZmNzIGZyaWVuZCBmdW5jdGlvbnM6IG9ubHkgYmV0d2VlbiBmY3MgbW9kdWxlcworICovCit2b2lkIGJmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3VmX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MGI2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNTX1ZQT1JUX0hfXworI2RlZmluZSBfX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KKwordm9pZCBiZmFfZmNzX3Zwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKK3ZvaWQgYmZhX2Zjc192cG9ydF9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3UzMiBiZmFfZmNzX3Zwb3J0X2dldF9tYXgoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1ZQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDVlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYwpAQCAtMCwwICsxLDEyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9hcGkuYyBCRkEgRkNTIHBvcnQKKyAqLworCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZkbWkuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgRkRNSSk7CisKKyNkZWZpbmUgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUyAyCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycHJ0X3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLCB1OCAqcHlsZCk7CitzdGF0aWMgdTE2IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksIHU4ICpweWxkKTsKK3ZvaWQgYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cik7Cit2b2lkIGJmYV9mY3NfZmRtaV9nZXRfcG9ydGF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpOworLyoqCisgKiAgZmNzX2ZkbWlfc20gRkNTIEZETUkgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIEZETUkgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBwb3J0X2ZkbWlfZXZlbnQgeworCUZETUlTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJRkRNSVNNX0VWRU5UX1JTUF9PSyA9IDQsCisJRkRNSVNNX0VWRU5UX1JTUF9FUlJPUiA9IDUsCisJRkRNSVNNX0VWRU5UX1RJTUVPVVQgPSA2LAorCUZETUlTTV9FVkVOVF9SSEJBX1NFTlQgPSA3LAorCUZETUlTTV9FVkVOVF9SUFJUX1NFTlQgPSA4LAorCUZETUlTTV9FVkVOVF9SUEFfU0VOVCA9IDksCit9OworCitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworLyoqCisgKiAJCVN0YXJ0IGluIG9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBNUyB0byBzZW5kIHN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCWZkbWktPnJldHJ5X2NudCA9IDA7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWlmIChwb3J0LT52cG9ydCkgeworCQkJLyoKKwkJCSAqIEZvciBWcG9ydHMsIHJlZ2lzdGVyIGEgbmV3IHBvcnQuCisJCQkgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwKKwkJCQkJIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQoZmRtaSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRm9yIGEgYmFzZSBwb3J0LCB3ZSBzaG91bGQgZmlyc3QgcmVnaXN0ZXIgdGhlIEhCQQorCQkJICogYXRyaWJ1dGUuIFRoZSBIQkEgYXR0cmlidXRlIGFsc28gY29udGFpbnMgdGhlIGJhc2UKKwkJCSAqICBwb3J0IHJlZ2lzdHJhdGlvbi4KKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLAorCQkJCQkgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYShmZG1pLCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUkhCQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmEpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9yaGJhX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2V0IHN0YXRlIHRvIG9mZmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJLyoKKwkJICogSW5pdGlhdGUgUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKTsKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycGEoZmRtaSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfZmN4cF9kaXNjYXJkKGZkbWktPmZjeHApOworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKGZkbWksIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZkbWktPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyogUlBSVCA6IFJlZ2lzdGVyIFBvcnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlBSVF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnQpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0X3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBydChmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qCisgKiBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1JQQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYSk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJICAgICAgICZmZG1pLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkpOworCQkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJCSZmZG1pLT50aW1lciwgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCwKKwkJCQkJZmRtaSwgQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlmZG1pLT5yZXRyeV9jbnQgPSAwOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgICBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19ycGEpOworCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYShmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworLyoqCisqICAgUkhCQSA6IFJlZ2lzdGVyIEhCQSBBdHRyaWJ1dGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SSEJBKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcmhiYV9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIChsZW4gKyBhdHRyX2xlbiksICZmY2hzLAorCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9yaGJhX3Jlc3BvbnNlLCAodm9pZCAqKWZkbWksCisJCSAgICAgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SSEJBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX2hiYV9hdHRyX3MgaGJhX2F0dHI7CS8qIEB0b2RvICovCisJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpmY3NfaGJhX2F0dHIgPSAmaGJhX2F0dHI7IC8qIEB0b2RvICovCisJc3RydWN0IGZkbWlfcmhiYV9zICAgICpyaGJhID0gKHN0cnVjdCBmZG1pX3JoYmFfcyAqKSBweWxkOworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAqYXR0cjsKKwl1OCAgICAgICAgKmN1cnJfcHRyOworCXUxNiAgICAgICAgbGVuLCBjb3VudDsKKworCS8qCisJICogZ2V0IGhiYSBhdHRyaWJ1dGVzCisJICovCisJYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKGZkbWksIGZjc19oYmFfYXR0cik7CisKKwlyaGJhLT5oYmFfaWQgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJcmhiYS0+cG9ydF9saXN0Lm51bV9wb3J0cyA9IGJmYV9vc19odG9ubCgxKTsKKwlyaGJhLT5wb3J0X2xpc3QucG9ydF9lbnRyeSA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKworCWxlbiA9IHNpemVvZihyaGJhLT5oYmFfaWQpICsgc2l6ZW9mKHJoYmEtPnBvcnRfbGlzdCk7CisKKwljb3VudCA9IDA7CisJbGVuICs9IHNpemVvZihyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMgb2YgdGhlIEhCQSBhdHRyaWIgQmxvY2sKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcmhiYS0+aGJhX2F0dHJfYmxrLmhiYV9hdHRyOworCisJLyoKKwkgKiBOb2RlIE5hbWUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9OT0RFTkFNRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKHd3bl90KTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCksIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE1hbnVmYWN0dXJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BTlVGQUNUVVJFUik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU2VyaWFsIE51bWJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1NFUklBTE5VTSk7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+c2VyaWFsX251bSk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPnNlcmlhbF9udW0sIGF0dHItPmxlbik7CisJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBNb2RlbAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5tb2RlbCk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1vZGVsLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogTW9kZWwgRGVzYworCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMX0RFU0MpOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm1vZGVsX2Rlc2MpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbF9kZXNjLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogSC9XIFZlcnNpb24KKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04pOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmh3X3ZlcnNpb24sIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBEcml2ZXIgVmVyc2lvbgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0RSSVZFUl9WRVJTSU9OKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbik7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOzsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9wdGlvbiBSb20gVmVyc2lvbgorCSAqLworCWlmIChmY3NfaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBmL3cgVmVyc2lvbiA9IGRyaXZlciB2ZXJzaW9uCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9TIE5hbWUKKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5vc19uYW1lWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX09TX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5vc19uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm9zX25hbWUsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBNQVhfQ1RfUEFZTE9BRAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BWF9DVCk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQsIGF0dHItPmxlbik7CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIFVwZGF0ZSBzaXplIG9mIHBheWxvYWQKKwkgKi8KKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisKKwlyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCA9IGJmYV9vc19odG9ubChjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQUlQgOiBSZWdpc3RlciBQb3J0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IGZkbWlfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXUxNiAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0LCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUFJUKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiArIGF0dHJfbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfcnBydF9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBSVF9TRU5UKTsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIFBvcnQgQXR0cmlidXRlIEJsb2NrIHRoYXQgdXNlZCBpbiBSUEEsIFJQUlQgY29tbWFuZHMuCisgKi8KK3N0YXRpYyAgICAgICAgICB1MTYKK2JmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgICAgICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIGZjc19wb3J0X2F0dHI7CisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cmliID0gKHN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zICopIHB5bGQ7CisJc3RydWN0IGZkbWlfYXR0cl9zICAgICphdHRyOworCXU4ICAgICAgICAqY3Vycl9wdHI7CisJdTE2ICAgICAgICBsZW47CisJdTggICAgICAgICBjb3VudCA9IDA7CisKKwkvKgorCSAqIGdldCBwb3J0IGF0dHJpYnV0ZXMKKwkgKi8KKwliZmFfZmNzX2ZkbWlfZ2V0X3BvcnRhdHRyKGZkbWksICZmY3NfcG9ydF9hdHRyKTsKKworCWxlbiA9IHNpemVvZihwb3J0X2F0dHJpYi0+YXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcG9ydF9hdHRyaWItPnBvcnRfYXR0cjsKKworCS8qCisJICogRkM0IFR5cGVzCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0ZDNF9UWVBFUyk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIuc3VwcF9mYzRfdHlwZXMpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5zdXBwX2ZjNF90eXBlcywgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU3VwcG9ydGVkIFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1NVUFBfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLnN1cHBfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuc3VwcF9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogY3VycmVudCBQb3J0IFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLmN1cnJfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuY3Vycl9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogbWF4IGZyYW1lIHNpemUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIubWF4X2ZybV9zaXplKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLm1heF9mcm1fc2l6ZSwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogT1MgRGV2aWNlIE5hbWUKKwkgKi8KKwlpZiAoZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfREVWX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKwkvKgorCSAqIEhvc3QgTmFtZQorCSAqLworCWlmIChmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfSE9TVF9OQU1FKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19wb3J0X2F0dHIuaG9zdF9uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKworCS8qCisJICogVXBkYXRlIHNpemUgb2YgcGF5bG9hZAorCSAqLworCXBvcnRfYXR0cmliLT5hdHRyX2NvdW50ID0gYmZhX29zX2h0b25sKGNvdW50KTsKKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBydF9zICAgICpycHJ0ID0gKHN0cnVjdCBmZG1pX3JwcnRfcyAqKSBweWxkOworCXUxNiAgICAgICAgbGVuOworCisJcnBydC0+aGJhX2lkID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlycHJ0LT5wb3J0X25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisKKwlsZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9wb3J0YXR0cl9ibG9jayhmZG1pLAorCQkJKHU4ICopICZycHJ0LT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBydC0+aGJhX2lkKSArIHNpemVvZihycHJ0LT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQQSA6IFJlZ2lzdGVyIFBvcnQgQXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwl1MTYgICAgICAgIGxlbiwgYXR0cl9sZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICpweWxkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmZmRtaS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUEEpOworCisJYXR0cl9sZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChmZG1pLAorCQkJKHU4ICopICgoc3RydWN0IGN0X2hkcl9zICopIHB5bGQgKyAxKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4gKyBhdHRyX2xlbiwgJmZjaHMsCisJCSAgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBhX3MgICAgICpycGEgPSAoc3RydWN0IGZkbWlfcnBhX3MgKikgcHlsZDsKKwl1MTYgICAgICAgIGxlbjsKKworCXJwYS0+cG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCisJbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcG9ydGF0dHJfYmxvY2soZmRtaSwKKwkJCSh1OCAqKSAmcnBhLT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBhLT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICopYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1RJTUVPVVQpOworfQorCit2b2lkCitiZmFfZmNzX2ZkbWlfZ2V0X2hiYWF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbyA9ICZwb3J0LT5mY3MtPmRyaXZlcl9pbmZvOworCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgYWRhcHRlcl9hdHRyOworCisJYmZhX29zX21lbXNldChoYmFfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcykpOworCWJmYV9vc19tZW1zZXQoJmFkYXB0ZXJfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MpKTsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cigmcG9ydC0+ZmNzLT5iZmEtPmlvYywgJmFkYXB0ZXJfYXR0cik7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tYW51ZmFjdHVyZXIsIGFkYXB0ZXJfYXR0ci5tYW51ZmFjdHVyZXIsCisJCXNpemVvZihhZGFwdGVyX2F0dHIubWFudWZhY3R1cmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5zZXJpYWxfbnVtLCBhZGFwdGVyX2F0dHIuc2VyaWFsX251bSwKKwkJc2l6ZW9mKGFkYXB0ZXJfYXR0ci5zZXJpYWxfbnVtKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbCwgYWRhcHRlcl9hdHRyLm1vZGVsLCBzaXplb2YoaGJhX2F0dHItPm1vZGVsKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbF9kZXNjLCBhZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IsCisJCXNpemVvZihoYmFfYXR0ci0+bW9kZWxfZGVzYykpOworCisJc3RybmNweShoYmFfYXR0ci0+aHdfdmVyc2lvbiwgYWRhcHRlcl9hdHRyLmh3X3ZlciwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5od192ZXJzaW9uKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgKGNoYXIgKilkcml2ZXJfaW5mby0+dmVyc2lvbiwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbikpOworCisJc3RybmNweShoYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5md192ZXJzaW9uLCBhZGFwdGVyX2F0dHIuZndfdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPmZ3X3ZlcnNpb24pKTsKKworCXN0cm5jcHkoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX25hbWUsCisJCXNpemVvZihoYmFfYXR0ci0+b3NfbmFtZSkpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIHBhdGNoIGxldmVsLCBhcHBlbmQgaXQgdG8gdGhlIG9zIG5hbWUgYWxvbmcgd2l0aCBhCisJICogc2VwYXJhdG9yCisJICovCisJaWYgKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoWzBdICE9ICdcMCcpIHsKKwkJc3RybmNhdChoYmFfYXR0ci0+b3NfbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisJCXN0cm5jYXQoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoKSk7CisJfQorCisJaGJhX2F0dHItPm1heF9jdF9weWxkID0gYmZhX29zX2h0b25sKEZDX01BWF9QRFVTWik7CisKK30KKwordm9pZAorYmZhX2Zjc19mZG1pX2dldF9wb3J0YXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvID0gJnBvcnQtPmZjcy0+ZHJpdmVyX2luZm87CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcHBvcnRfYXR0cjsKKworCWJmYV9vc19tZW1zZXQocG9ydF9hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcykpOworCisJLyoKKwkgKiBnZXQgcHBvcnQgYXR0cmlidXRlcyBmcm9tIGhhbAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCisJLyoKKwkgKiBnZXQgRkM0IHR5cGUgQml0bWFzaworCSAqLworCWZjX2dldF9mYzR0eXBlX2JpdG1hc2soRkNfVFlQRV9GQ1AsIHBvcnRfYXR0ci0+c3VwcF9mYzRfdHlwZXMpOworCisJLyoKKwkgKiBTdXBwb3J0ZWQgU3BlZWRzCisJICovCisJcG9ydF9hdHRyLT5zdXBwX3NwZWVkID0gYmZhX29zX2h0b25sKEJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMpOworCisJLyoKKwkgKiBDdXJyZW50IFNwZWVkCisJICovCisJcG9ydF9hdHRyLT5jdXJyX3NwZWVkID0gYmZhX29zX2h0b25sKHBwb3J0X2F0dHIuc3BlZWQpOworCisJLyoKKwkgKiBNYXggUERVIFNpemUuCisJICovCisJcG9ydF9hdHRyLT5tYXhfZnJtX3NpemUgPSBiZmFfb3NfaHRvbmwoRkNfTUFYX1BEVVNaKTsKKworCS8qCisJICogT1MgZGV2aWNlIE5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+b3NfZGV2aWNlX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPm9zX2RldmljZV9uYW1lLAorCQlzaXplb2YocG9ydF9hdHRyLT5vc19kZXZpY2VfbmFtZSkpOworCisJLyoKKwkgKiBIb3N0IG5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+aG9zdF9uYW1lLCAoY2hhciAqKWRyaXZlcl9pbmZvLT5ob3N0X21hY2hpbmVfbmFtZSwKKwkJc2l6ZW9mKHBvcnRfYXR0ci0+aG9zdF9uYW1lKSk7CisKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAmbXMtPmZkbWk7CisKKwlmZG1pLT5tcyA9IG1zOworCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9ICZtcy0+ZmRtaTsKKworCWZkbWktPm1zID0gbXM7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gJm1zLT5mZG1pOworCisJZmRtaS0+bXMgPSBtczsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThjYWMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9BRU5fSF9fCisjZGVmaW5lIF9fQkZBX0FFTl9IX18KKworI2luY2x1ZGUgImRlZnMvYmZhX2RlZnNfYWVuLmgiCisKKyNkZWZpbmUgQkZBX0FFTl9NQVhfRU5UUlkgICA1MTIKKworZXh0ZXJuIHMzMiBiZmFfYWVuX21heF9jZmdfZW50cnk7CitzdHJ1Y3QgYmZhX2Flbl9zIHsKKwl2b2lkCQkqYmZhZDsKKwlzMzIJCW1heF9lbnRyeTsKKwlzMzIJCXdyaXRlX2luZGV4OworCXMzMgkJcmVhZF9pbmRleDsKKwl1MzIJYmZhZF9udW07CisJdTMyCXNlcV9udW07CisJdm9pZAkJKCphZW5fY2Jfbm90aWZ5KSh2b2lkICpiZmFkKTsKKwl2b2lkCQkoKmdldHRpbWVvZmRheSkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KTsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAJKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zCWxpc3RbQkZBX0FFTl9NQVhfRU5UUlldOyAvKiBNdXN0IGJlIHRoZSBsYXN0ICovCit9OworCisKKy8qKgorICogUHVibGljIEFQSXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiZmFfYWVuX3NldF9tYXhfY2ZnX2VudHJ5KGludCBtYXhfZW50cnkpCit7CisJYmZhX2Flbl9tYXhfY2ZnX2VudHJ5ID0gbWF4X2VudHJ5OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfbWF4X2NmZ19lbnRyeSh2b2lkKQoreworCXJldHVybiBiZmFfYWVuX21heF9jZmdfZW50cnk7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2dldF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGJmYV9hZW5fZW50cnlfcykgKiBiZmFfYWVuX2dldF9tYXhfY2ZnX2VudHJ5KCkpOworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfd2koc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPndyaXRlX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfcmkoc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPnJlYWRfaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2ZldGNoX2NvdW50KHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgczMyIHJlYWRfaW5kZXgpCit7CisJcmV0dXJuICgoYWVuLT53cml0ZV9pbmRleCArIGFlbi0+bWF4X2VudHJ5KSAtIHJlYWRfaW5kZXgpCisJCSUgYWVuLT5tYXhfZW50cnk7Cit9CisKK3MzMiBiZmFfYWVuX2luaXQoc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQl2b2lkICpiZmFkLCB1MzIgaW5zdF9pZCwgdm9pZCAoKmFlbl9jYl9ub3RpZnkpKHZvaWQgKiksCisJCXZvaWQgKCpnZXR0aW1lb2ZkYXkpKHN0cnVjdCBiZmFfdGltZXZhbF9zICopKTsKKworczMyIGJmYV9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIGVudW0gYmZhX2Flbl9jYXRlZ29yeSBhZW5fY2F0ZWdvcnksCisJCSAgICAgaW50IGFlbl90eXBlLCB1bmlvbiBiZmFfYWVuX2RhdGFfdSAqYWVuX2RhdGEpOworCitzMzIgYmZhX2Flbl9mZXRjaChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgKmFlbl9lbnRyeSwKKwkJICAgICAgczMyIGVudHJ5X3NwYWNlLCBzMzIgcmlpLCBzMzIgKnJpX2FyciwKKwkJICAgICAgczMyIHJpX2Fycl9jbnQpOworCitzMzIgYmZhX2Flbl9nZXRfaW5zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4pOworCisjZW5kaWYgLyogX19CRkFfQUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2FkYXB0ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZDNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FEQVBURVIgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9hZGFwdGVyX2hfXworI2RlZmluZQlfX2JmYV9hZW5fYWRhcHRlcl9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX0FERCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX0FERCkKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX1JFTU9WRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX1JFTU9WRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjZDdhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BVURJVCBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX2F1ZGl0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fYXVkaXRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FVRElULCBCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQVVESVQsIEJGQV9BVURJVF9BRU5fQVVUSF9ESVNBQkxFKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2V0aHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3ZDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9ldGhwb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fZXRocG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktVUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfRVRIUE9SVCwgQkZBX0VUSFBPUlRfQUVOX0xJTktVUCkKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktET1dOIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fTElOS0RPV04pCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0VUSFBPUlQsIEJGQV9FVEhQT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fRElTQUJMRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2lvYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JT0MgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9pb2NfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pb2NfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCR09PRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkdPT0QpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCRkFJTCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkZBSUwpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0VOQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0RJU0FCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9GV01JU01BVENIKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faXRuaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Q4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5faXRuaW1faF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pdG5pbV9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JVE5JTSwgQkZBX0lUTklNX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGViYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfTFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9scG9ydF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2xwb3J0X2hfXworCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlICA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FVyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX09GRkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ORVdfUFJPUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1BST1ApCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfREVMRVRFX1BST1AgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZDkwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1BPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9wb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fcG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUkxJUiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1JMSVIpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVCkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfU0ZQX1BPTSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1NGUF9QT00pCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0FVVEhfT04gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09OKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfQVVUSF9PRkYgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09GRikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUU9TX05FRyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1FPU19ORUcpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfVU5TVVBQT1JUKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRiZTFmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ycG9ydC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9SUE9SVCBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX3Jwb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fcnBvcnRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfT05MSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9PTkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfT0ZGTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUlBPUlQsIEJGQV9SUE9SVF9BRU5fT0ZGTElORSkKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9ESVNDT05ORUNUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX1FPU19QUklPIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTykKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lEIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzE0MTJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0hfXworI2RlZmluZSBfX0JGQV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2NmYy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuLmg+CisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCitzdHJ1Y3QgYmZhX3M7CisjaW5jbHVkZSA8YmZhX2ludHJfcHJpdi5oPgorCitzdHJ1Y3QgYmZhX3BjaWRldl9zOworCisvKioKKyAqIFBDSSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBCRkEKKyAqLworc3RydWN0IGJmYV9wY2lpZF9zIHsKKwl1MTYgICAgICAgIGRldmljZV9pZDsKKwl1MTYgICAgICAgIHZlbmRvcl9pZDsKK307CisKK2V4dGVybiBjaGFyICAgICBiZmFfdmVyc2lvbltdOworCisvKioKKyAqIEJGQSBQb3dlciBNZ210IENvbW1hbmRzCisgKi8KK2VudW0gYmZhX3BtX2NtZCB7CisJQkZBX1BNX0NUTF9EMCA9IDAsCisJQkZBX1BNX0NUTF9EMSA9IDEsCisJQkZBX1BNX0NUTF9EMiA9IDIsCisJQkZBX1BNX0NUTF9EMyA9IDMsCit9OworCisvKioKKyAqIEJGQSBtZW1vcnkgcmVzb3VyY2VzCisgKi8KK2VudW0gYmZhX21lbV90eXBlIHsKKwlCRkFfTUVNX1RZUEVfS1ZBID0gMSwJLyohIEtlcm5lbCBWaXJ0dWFsIE1lbW9yeSAqKG5vbi1kbWEtYWJsZSkgKi8KKwlCRkFfTUVNX1RZUEVfRE1BID0gMiwJLyohIERNQS1hYmxlIG1lbW9yeSAqLworCUJGQV9NRU1fVFlQRV9NQVggPSBCRkFfTUVNX1RZUEVfRE1BLAorfTsKKworc3RydWN0IGJmYV9tZW1fZWxlbV9zIHsKKwllbnVtIGJmYV9tZW1fdHlwZSBtZW1fdHlwZTsJLyogIHNlZSBlbnVtIGJmYV9tZW1fdHlwZSAJKi8KKwl1MzIgICAgICAgIG1lbV9sZW47CS8qICBUb3RhbCBMZW5ndGggaW4gQnl0ZXMJKi8KKwl1OCAgICAgICAJKmt2YTsJCS8qICBrZXJuZWwgdmlydHVhbCBhZGRyZXNzCSovCisJdTY0ICAgICAgICBkbWE7CQkvKiAgZG1hIGFkZHJlc3MgaWYgRE1BIG1lbW9yeQkqLworCXU4ICAgICAgIAkqa3ZhX2N1cnA7CS8qICBrdmEgYWxsb2NhdGlvbiBjdXJzb3IJKi8KKwl1NjQgICAgICAgIGRtYV9jdXJwOwkvKiAgZG1hIGFsbG9jYXRpb24gY3Vyc29yCSovCit9OworCitzdHJ1Y3QgYmZhX21lbWluZm9fcyB7CisJc3RydWN0IGJmYV9tZW1fZWxlbV9zIG1lbWluZm9bQkZBX01FTV9UWVBFX01BWF07Cit9OworI2RlZmluZSBiZmFfbWVtaW5mb19rdmEoX20pCVwKKwkoX20pLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9LVkEgLSAxXS5rdmFfY3VycAorI2RlZmluZSBiZmFfbWVtaW5mb19kbWFfdmlydChfbSkJXAorCShfbSktPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLmt2YV9jdXJwCisjZGVmaW5lIGJmYV9tZW1pbmZvX2RtYV9waHlzKF9tKQlcCisJKF9tKS0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfRE1BIC0gMV0uZG1hX2N1cnAKKworLyoqCisgKiBHZW5lcmljIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnQgdXNlZCBieSBkcml2ZXIKKyAqLworc3RydWN0IGJmYV9zZ2VfcyB7CisJdTMyICAgICAgICBzZ19sZW47CisJdm9pZCAgICAgICAgICAgKnNnX2FkZHI7Cit9OworCisjZGVmaW5lIGJmYV9zZ2VfdG9fYmUoX19zZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKCh1MzIgKikoX19zZ2UpKVswXSA9IGJmYV9vc19odG9ubCgoKHUzMiAqKShfX3NnZSkpWzBdKTsgICAgICBcCisJKCh1MzIgKikoX19zZ2UpKVsxXSA9IGJmYV9vc19odG9ubCgoKHUzMiAqKShfX3NnZSkpWzFdKTsgICAgICBcCisJKCh1MzIgKikoX19zZ2UpKVsyXSA9IGJmYV9vc19odG9ubCgoKHUzMiAqKShfX3NnZSkpWzJdKTsgICAgICBcCit9IHdoaWxlICgwKQorCisKKy8qCisgKiBiZmEgc3RhdHMgaW50ZXJmYWNlcworICovCisjZGVmaW5lIGJmYV9zdGF0cyhfbW9kLCBfc3RhdHMpCShfbW9kKS0+c3RhdHMuX3N0YXRzICsrCisKKyNkZWZpbmUgYmZhX2lvY19nZXRfc3RhdHMoX19iZmEsIF9faW9jX3N0YXRzKQlcCisJYmZhX2lvY19mZXRjaF9zdGF0cygmKF9fYmZhKS0+aW9jLCBfX2lvY19zdGF0cykKKyNkZWZpbmUgYmZhX2lvY19jbGVhcl9zdGF0cyhfX2JmYSkJXAorCWJmYV9pb2NfY2xyX3N0YXRzKCYoX19iZmEpLT5pb2MpCisKKy8qCisgKiBiZmEgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9nZXRfcGNpaWRzKHN0cnVjdCBiZmFfcGNpaWRfcyAqKnBjaWlkcywgaW50ICpucGNpaWRzKTsKK3ZvaWQgYmZhX2NmZ19nZXRfZGVmYXVsdChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpOwordm9pZCBiZmFfY2ZnX2dldF9taW4oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKTsKK3ZvaWQgYmZhX2NmZ19nZXRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbyk7Cit2b2lkIGJmYV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAorCQkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsKK3ZvaWQgYmZhX2luaXRfdHJjKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKTsKK3ZvaWQgYmZhX2luaXRfbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgYmZhX2luaXRfYWVuKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2Flbl9zICphZW4pOwordm9pZCBiZmFfaW5pdF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2F0dGFjaF9mY3Moc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfY2JfaW5pdCh2b2lkICpiZmFkLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3ZvaWQgYmZhX2NiX3N0b3Aodm9pZCAqYmZhZCwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl91cGRhdGVxKHZvaWQgKmJmYWQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOworCitiZmFfYm9vbGVhbl90IGJmYV9pbnR4KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lzcl9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaXNyX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKm1zaXhfdmVjc19ibWFwLAorCQkJdTMyICpudW1fdmVjcywgdTMyICptYXhfdmVjX2JpdCk7CisjZGVmaW5lIGJmYV9tc2l4KF9fYmZhLCBfX3ZlYykgKF9fYmZhKS0+bXNpeC5oYW5kbGVyW19fdmVjXShfX2JmYSwgX192ZWMpCisKK3ZvaWQgYmZhX2NvbXBfZGVxKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpOwordm9pZCBiZmFfY29tcF9wcm9jZXNzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpOwordm9pZCBiZmFfY29tcF9mcmVlKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpOworCit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfaW9jX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7Cit2b2lkIGJmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpOworYmZhX3N0YXR1c190IGJmYV9pb2NmY19nZXRfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgKnN0YXRzLAorCQkJYmZhX2NiX2lvY190IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jZmNfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQliZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwordm9pZCBiZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpOworCit2b2lkIGJmYV9hZGFwdGVyX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cik7Cit1NjQgYmZhX2FkYXB0ZXJfZ2V0X2lkKHN0cnVjdCBiZmFfcyAqYmZhKTsKKworYmZhX3N0YXR1c190IGJmYV9pb2NmY19pc3JhdHRyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MgKmF0dHIpOworCit2b2lkIGJmYV9pb2NmY19lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NfYXV0b19yZWNvdmVyKGJmYV9ib29sZWFuX3QgYXV0b19yZWNvdmVyKTsKK3ZvaWQgYmZhX2NiX2lvY19kaXNhYmxlKHZvaWQgKmJmYWQpOwordm9pZCBiZmFfdGltZXJfdGljayhzdHJ1Y3QgYmZhX3MgKmJmYSk7CisjZGVmaW5lIGJmYV90aW1lcl9zdGFydChfYmZhLCBfdGltZXIsIF90aW1lcmNiLCBfYXJnLCBfdGltZW91dCkJXAorCWJmYV90aW1lcl9iZWdpbigmKF9iZmEpLT50aW1lcl9tb2QsIF90aW1lciwgX3RpbWVyY2IsIF9hcmcsIF90aW1lb3V0KQorCisvKgorICogQkZBIGRlYnVnIEFQSSBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pOworYmZhX3N0YXR1c190IGJmYV9kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKTsKKworI2luY2x1ZGUgImJmYV9wcml2LmgiCisKKyNlbmRpZiAvKiBfX0JGQV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc4OTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3BpbS5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBX0ZDUElNX0hfXworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfZmNwaW0uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2ZjcGltLmg+CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhX2l0bmltX3M7CitzdHJ1Y3QgYmZhX2lvaW1fczsKK3N0cnVjdCBiZmFfdHNraW1fczsKK3N0cnVjdCBiZmFkX2lvaW1fczsKK3N0cnVjdCBiZmFkX3Rza2ltX3M7CisKKy8qCisgKiBiZmEgZmNwaW0gbW9kdWxlIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZAkJYmZhX2ZjcGltX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KTsKK3UxNgliZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQJCWJmYV9mY3BpbV9xZGVwdGhfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcV9kZXB0aCk7Cit1MTYJYmZhX2ZjcGltX3FkZXB0aF9nZXQoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MgKm1vZHN0YXRzKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNwaW1fY2xyX21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhKTsKKworLyoKKyAqIGJmYSBpdG5pbSBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCQkJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdm9pZCAqaXRuaW0pOwordm9pZAkJYmZhX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQJCWJmYV9pdG5pbV9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkgYmZhX2Jvb2xlYW5fdCBzZXFfcmVjKTsKK3ZvaWQJCWJmYV9pdG5pbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZAkJYmZhX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcyAqc3RhdHMpOwordm9pZAkJYmZhX2l0bmltX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworCisKKy8qKgorICogCQlCRkEgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2l0bmltX29ubGluZSgpLgorICoKKyAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCisgKgorICogcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqaXRuaW0pOworCisvKioKKyAqIAkJQkZBIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9pdG5pbV9vZmZsaW5lKCkuCisgKgorICogQHBhcmFtW2luXQkJaXRuaW0JCUZDUyBvciBkcml2ZXIgaXRuaW0gaW5zdGFuY2UKKyAqCisgKiByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV90b3ZfYmVnaW4odm9pZCAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV90b3Yodm9pZCAqaXRuaW0pOworCisvKioKKyAqIAkJQkZBIG5vdGlmaWNhdGlvbiB0byBGQ1MvZHJpdmVyIGZvciBzZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkuCisgKgorICogQXRsZWFzdCBvbmUgSS9PIHJlcXVlc3QgaGFzIHRpbWVkb3V0IGFuZCB0YXJnZXQgaXMgdW5yZXNwb25zaXZlIHRvCisgKiByZXBlYXRlZCBhYm9ydCByZXF1ZXN0cy4gU2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5IHNob3VsZCBiZSBpbml0aWF0ZWQKKyAqIGJ5IHN0YXJ0aW5nIGltcGxpY2l0IGxvZ291dCBhbmQgcmVjb3ZlcnkgcHJvY2VkdXJlcy4KKyAqCisgKiBAcGFyYW1baW5dCQlpdG5pbQkJRkNTIG9yIGRyaXZlciBpdG5pbSBpbnN0YW5jZQorICoKKyAqIHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fc2xlcih2b2lkICppdG5pbSk7CisKKy8qCisgKiBiZmEgaW9pbSBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zCSpiZmFfaW9pbV9hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCQkJc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sCisJCQkJCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCXUxNiBuc2dsZXMpOworCit2b2lkCQliZmFfaW9pbV9mcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3ZvaWQJCWJmYV9pb2ltX3N0YXJ0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3ZvaWQJCWJmYV9pb2ltX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3ZvaWQgCQliZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgICAgYmZhX2Jvb2xlYW5fdCBpb3Rvdik7CisKKworLyoqCisgKiAJCUkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dCQlkaW8JCQlkcml2ZXIgSU8gc3RydWN0dXJlCisgKiBAcGFyYW1baW5dCQlpb19zdGF0dXMJCUlPIGNvbXBsZXRpb24gc3RhdHVzCisgKiBAcGFyYW1baW5dCQlzY3NpX3N0YXR1cwkJU0NTSSBzdGF0dXMgcmV0dXJuZWQgYnkgdGFyZ2V0CisgKiBAcGFyYW1baW5dCQlzbnNfbGVuCQkJU0NTSSBzZW5zZSBsZW5ndGgsIDAgaWYgbm9uZQorICogQHBhcmFtW2luXQkJc25zX2luZm8JCVNDU0kgc2Vuc2UgZGF0YSwgaWYgYW55CisgKiBAcGFyYW1baW5dCQlyZXNpZHVlCQkJUmVzaWR1YWwgbGVuZ3RoCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaW9pbV9kb25lKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLAorCQkJCSAgZW51bSBiZmlfaW9pbV9zdGF0dXMgaW9fc3RhdHVzLAorCQkJCSAgdTggc2NzaV9zdGF0dXMsIGludCBzbnNfbGVuLAorCQkJCSAgdTggKnNuc19pbmZvLCBzMzIgcmVzaWR1ZSk7CisKKy8qKgorICogCQlJL08gZ29vZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dCQlkaW8JCQlkcml2ZXIgSU8gc3RydWN0dXJlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaW9pbV9nb29kX2NvbXAodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pOworCisvKioKKyAqIAkJSS9PIGFib3J0IGNvbXBsZXRpb24gbm90aWZpY2F0aW9uCisgKgorICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHRoYXQgd2FzIGFib3J0ZWQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKK3ZvaWQJCWJmYV9jYl9pb2ltX3Jlc2ZyZWUodm9pZCAqaGNiX2JmYWQpOworCit2b2lkIAkJCWJmYV9jYl9pb2ltX3Jlc2ZyZWUodm9pZCAqaGNiX2JmYWQpOworCisvKgorICogYmZhIHRza2ltIEFQSSBmdW5jdGlvbnMKKyAqLworc3RydWN0IGJmYV90c2tpbV9zCSpiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2spOwordm9pZAkJYmZhX3Rza2ltX2ZyZWUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkCQliZmFfdHNraW1fc3RhcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBsdW5fdCBsdW4sCisJCQkJZW51bSBmY3BfdG1fY21uZCB0bSwgdTggdF9zZWNzKTsKK3ZvaWQJCWJmYV9jYl90c2tpbV9kb25lKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2ssCisJCQkJICBlbnVtIGJmaV90c2tpbV9zdGF0dXMgdHNrX3N0YXR1cyk7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1BJTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3B0bS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3B0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcHRtLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDUFRNX0hfXworI2RlZmluZSBfX0JGQV9GQ1BUTV9IX18KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2ZjcHRtLmg+CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhX3Rpbl9zOworc3RydWN0IGJmYV9pb3RtX3M7CitzdHJ1Y3QgYmZhX3Rza3RtX3M7CisKKy8qCisgKiBiZmEgZmNwdG0gbW9kdWxlIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNwdG1fcGF0aF90b3Zfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcGF0aF90b3YpOwordTE2IGJmYV9mY3B0bV9wYXRoX3Rvdl9nZXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfZmNwdG1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpOwordTE2IGJmYV9mY3B0bV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKKworLyoKKyAqIGJmYSB0aW4gQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV90aW5fZ2V0X3N0YXRzKHN0cnVjdCBiZmFfdGluX3MgKnRpbiwgc3RydWN0IGJmYV90aW5fc3RhdHNfcyAqc3RhdHMpOwordm9pZCBiZmFfdGluX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfdGluX3MgKnRpbik7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1BUTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4MGI3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfc3ZjLmgKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfU1ZDX0hfXworI2RlZmluZSBfX0JGQV9TVkNfSF9fCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhX2ZjeHBfczsKKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Fvcy5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGJmYS5oPgorCisvKioKKyAqIAkJQkZBIHJwb3J0IGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyB7CisJdTE2ICAgICAgICBtYXhfZnJtc3o7CS8qICBtYXggcmN2IHBkdSBzaXplICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBpZCA6IDI0LAkvKiAgcmVtb3RlIHBvcnQgSUQgICAgICAgICAgICAgICAgICovCisJCQlscF90YWcgOiA4OworCXUzMiAgICAgICAgbG9jYWxfcGlkIDogMjQsCS8qICBsb2NhbCBwb3J0IElECQkgICAgKi8KKwkJCWNpc2MgOiA4OwkvKiAgQ0lSTyBzdXBwb3J0ZWQJCSAgICAqLworCXU4ICAgICAgICAgZmNfY2xhc3M7CS8qICBzdXBwb3J0ZWQgRkMgY2xhc3Nlcy4gZW51bSBmY19jb3MgKi8KKwl1OCAgICAgICAgIHZmX2VuOwkJLyogIHZpcnR1YWwgZmFicmljIGVuYWJsZSAgICAgICAgICAqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQgICAgICAgICAgICAgICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQ7CS8qICBScG9ydCdzIGN1cnJlbnQgc3BlZWQJICAgICovCit9OworCisvKioKKyAqIEJGQSBycG9ydCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHFlOwkgIC8qICBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QJICAgICAgc207IAkgIC8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9zICAgICAgICAgICpiZmE7CSAgLyogIGJhY2twb2ludGVyIHRvIEJGQSAqLworCXZvaWQgICAgICAgICAgICAgICAgICAqcnBvcnRfZHJ2OyAvKiAgZmNzL2RyaXZlciBycG9ydCBvYmplY3QgKi8KKwl1MTYgICAgICAgICAgICAgIGZ3X2hhbmRsZTsgLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZSAqLworCXUxNiAgICAgICAgICAgICAgcnBvcnRfdGFnOyAvKiAgQkZBIHJwb3J0IHRhZyAqLworCXN0cnVjdCBiZmFfcnBvcnRfaW5mb19zIHJwb3J0X2luZm87IC8qICBycG9ydCBpbmZvIGZyb20gKmZjcy9kcml2ZXIgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zIHJlcXFfd2FpdDsgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CSAvKiAgQkZBIGNhbGxiYWNrIHFlbGVtICovCisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyBzdGF0czsgLyogIEJGQSBycG9ydCBzdGF0aXN0aWNzICAqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAgcW9zX2F0dHI7CisJdW5pb24gYSB7CisJCWJmYV9zdGF0dXNfdCAgICBzdGF0dXM7CSAvKiAgZi93IHN0YXR1cyAqLworCQl2b2lkICAgICAgICAgICAgKmZ3X21zZzsgLyogIFFvUyBzY24gZXZlbnQgKi8KKwl9IGV2ZW50X2FyZzsKK307CisjZGVmaW5lIEJGQV9SUE9SVF9GQ19DT1MoX3Jwb3J0KQkoKF9ycG9ydCktPnJwb3J0X2luZm8uZmNfY2xhc3MpCisKKy8qKgorICogU2VuZCBjb21wbGV0aW9uIGNhbGxiYWNrLgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfZmN4cF9zZW5kX3QpICh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJdm9pZCAqY2JhcmcsIGVudW0gYmZhX3N0YXR1cyByZXFfc3RhdHVzLAorCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKKy8qKgorICogQkZBIGZjeHAgYWxsb2NhdGlvbiAoYXN5bmNocm9ub3VzKQorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfZmN4cF9hbGxvY19jYmZuX3QpICh2b2lkICpjYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOworCitzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsKKwliZmFfZmN4cF9hbGxvY19jYmZuX3QgIGFsbG9jX2NiZm47CisJdm9pZCAgICAgICAgICAgKmFsbG9jX2NiYXJnOworfTsKKwordHlwZWRlZiB1NjQgKCpiZmFfZmN4cF9nZXRfc2dhZGRyX3QpICh2b2lkICpiZmFkX2ZjeHAsIGludCBzZ2VpZCk7Cit0eXBlZGVmIHUzMiAoKmJmYV9mY3hwX2dldF9zZ2xlbl90KSAodm9pZCAqYmZhZF9mY3hwLCBpbnQgc2dlaWQpOworCisjZGVmaW5lIEJGQV9VRl9CVUZTWgkoMiAqIDEwMjQgKyAyNTYpCisKKy8qKgorICogQHRvZG8gcHJpdmF0ZQorICovCitzdHJ1Y3QgYmZhX3VmX2J1Zl9zIHsKKwl1OCAgICAgICAgIGRbQkZBX1VGX0JVRlNaXTsKK307CisKKworc3RydWN0IGJmYV91Zl9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwkJLyogIHF1ZXVlIGVsZW1lbnQJICAqLworCXN0cnVjdCBiZmFfcwkqYmZhOwkJLyogIGJmYSBpbnN0YW5jZQkgICovCisJdTE2ICAgICAgICB1Zl90YWc7CQkvKiAgaWRlbnRpZnlpbmcgdGFnIGYvdyBtZXNzYWdlcyAqLworCXUxNiAgICAgICAgdmZfaWQ7CisJdTE2ICAgICAgICBzcmNfcnBvcnRfaGFuZGxlOworCXUxNiAgICAgICAgcnN2ZDsKKwl1OCAgICAgICAgCSpkYXRhX3B0cjsKKwl1MTYgICAgICAgIGRhdGFfbGVuOwkvKiAgYWN0dWFsIHJlY2VpdmUgbGVuZ3RoCSAgKi8KKwl1MTYgICAgICAgIHBiX2xlbjsJCS8qICBwb3N0ZWQgYnVmZmVyIGxlbmd0aAkgICovCisJdm9pZCAgICAgICAgICAgCSpidWZfa3ZhOwkvKiAgYnVmZmVyIHZpcnR1YWwgYWRkcmVzcwkgICovCisJdTY0ICAgICAgICBidWZfcGE7CQkvKiAgYnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MJICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CS8qICBjb21wOiBCRkEgY29tcCBxZWxlbQkgICovCisJc3RydWN0IGJmYV9zZ2VfcyAgIAlzZ2VzW0JGSV9TR0VfSU5MSU5FX01BWF07Cit9OworCit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfcHBvcnRfdCkgKHZvaWQgKmNiYXJnLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKKworLyoqCisgKiBiZmEgbHBvcnQgbG9naW4vbG9nb3V0IHNlcnZpY2UgaW50ZXJmYWNlCisgKi8KK3N0cnVjdCBiZmFfbHBzX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJcWU7CQkvKiAgcXVldWUgZWxlbWVudCAqLworCXN0cnVjdCBiZmFfcwkqYmZhOwkJLyogIHBhcmVudCBiZmEgaW5zdGFuY2UJKi8KKwliZmFfc21fdAlzbTsJCS8qICBmaW5pdGUgc3RhdGUgbWFjaGluZQkqLworCXU4CQlscF90YWc7CQkvKiAgbHBvcnQgdGFnCQkJKi8KKwl1OAkJcmVxcTsJCS8qICBscG9ydCByZXF1ZXN0IHF1ZXVlCSovCisJdTgJCWFscGE7CQkvKiAgQUxQQSBmb3IgbG9vcCB0b3BvbG9naWVzCSovCisJdTMyCWxwX3BpZDsJCS8qICBscG9ydCBwb3J0IElECQkqLworCWJmYV9ib29sZWFuX3QJZmRpc2M7CQkvKiAgc2VuZCBGRElTQyBpbnN0ZWFkIG9mIEZMT0dJKi8KKwliZmFfYm9vbGVhbl90CWF1dGhfZW47CS8qICBlbmFibGUgYXV0aGVudGljYXRpb24JKi8KKwliZmFfYm9vbGVhbl90CWF1dGhfcmVxOwkvKiAgYXV0aGVudGljYXRpb24gcmVxdWlyZWQJKi8KKwliZmFfYm9vbGVhbl90CW5waXZfZW47CS8qICBOUElWIGlzIGFsbG93ZWQgYnkgcGVlcgkqLworCWJmYV9ib29sZWFuX3QJZnBvcnQ7CQkvKiAgYXR0YWNoZWQgcGVlciBpcyBGX1BPUlQJKi8KKwliZmFfYm9vbGVhbl90CWJyY2Rfc3dpdGNoOy8qICBhdHRhY2hlZCBwZWVyIGlzIGJyY2Qgc3dpdGNoCSovCisJYmZhX3N0YXR1c190CXN0YXR1czsJCS8qICBsb2dpbiBzdGF0dXMJCSovCisJdTE2CXBkdXN6OwkJLyogIG1heCByZWNlaXZlIFBEVSBzaXplIAkqLworCXUxNglwcl9iYmNyZWQ7CS8qICBCQl9DUkVESVQgZnJvbSBwZWVyIAkqLworCXU4CQlsc3JqdF9yc247CS8qICBMU1JKVCByZWFzb24JCSovCisJdTgJCWxzcmp0X2V4cGw7CS8qICBMU1JKVCBleHBsYW5hdGlvbgkJKi8KKwl3d25fdAkJcHd3bjsJCS8qICBwb3J0IHd3biBvZiBscG9ydAkJKi8KKwl3d25fdAkJbnd3bjsJCS8qICBub2RlIHd3biBvZiBscG9ydAkJKi8KKwl3d25fdAkJcHJfcHd3bjsJLyogIHBvcnQgd3duIG9mIGxwb3J0IHBlZXIJKi8KKwl3d25fdAkJcHJfbnd3bjsJLyogIG5vZGUgd3duIG9mIGxwb3J0IHBlZXIJKi8KKwltYWNfdAkJbHBfbWFjOwkJLyogIGZwbWEvc3BtYSBNQUMgZm9yIGxwb3J0CSovCisJbWFjX3QJCWZjZl9tYWM7CS8qICBGQ0YgTUFDIG9mIGxwb3J0CQkqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJd3FlOwkvKiAgcmVxdWVzdCB3YWl0IHF1ZXVlIGVsZW1lbnQJKi8KKwl2b2lkCQkqdWFyZzsJCS8qICB1c2VyIGNhbGxiYWNrIGFyZwkJKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgaGNiX3FlOwkvKiAgY29tcDogY2FsbGJhY2sgcWVsZW0JKi8KKwlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcyAqbG9naW5yc3A7CisJYmZhX2Vwcm90b19zdGF0dXNfdAlleHRfc3RhdHVzOworfTsKKworLyoKKyAqIGJmYSBwcG9ydCBBUEkgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ19zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKK2VudW0gYmZhX3Bwb3J0X3NwZWVkIGJmYV9wcG9ydF9nZXRfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfdG9wb2xvZ3koc3RydWN0IGJmYV9zICpiZmEsCisJCQllbnVtIGJmYV9wcG9ydF90b3BvbG9neSB0b3BvKTsKK2VudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IGJmYV9wcG9ydF9nZXRfdG9wb2xvZ3koc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4IGFscGEpOworYmZhX2Jvb2xlYW5fdCBiZmFfcHBvcnRfZ2V0X2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqYWxwYSk7Cit1OCBiZmFfcHBvcnRfZ2V0X215YWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2Nscl9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ19tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBtYXhzaXplKTsKK3UxNiBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit1MzIgYmZhX3Bwb3J0X215cGlkKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3U4IGJmYV9wcG9ydF9nZXRfcnhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF90cnVua19lbmFibGUoc3RydWN0IGJmYV9zICpiZmEsIHU4IGJpdG1hcCk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X3RydW5rX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX2Jvb2xlYW5fdCBiZmFfcHBvcnRfdHJ1bmtfcXVlcnkoc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqYml0bWFwKTsKK3ZvaWQgYmZhX3Bwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyAqYXR0cik7Cit3d25fdCBiZmFfcHBvcnRfZ2V0X3d3bihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBub2RlKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkJYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2JmbiwKKwkJCXZvaWQgKmNiYXJnKTsKK3ZvaWQgYmZhX3Bwb3J0X2V2ZW50X3JlZ2lzdGVyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJdm9pZCAoKmV2ZW50X2NiZm4pICh2b2lkICpjYmFyZywKKwkJCWJmYV9wcG9ydF9ldmVudF90IGV2ZW50KSwgdm9pZCAqZXZlbnRfY2JhcmcpOworYmZhX2Jvb2xlYW5fdCBiZmFfcHBvcnRfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfcHBvcnRfY2ZnX3FvcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpOwordm9pZCBiZmFfcHBvcnRfY2ZnX3JhdGVsaW0oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfcHBvcnRfZ2V0X3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpOworCit2b2lkIGJmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB0eF9iYmNyZWRpdCk7Cit2b2lkIGJmYV9wcG9ydF9idXN5KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IHN0YXR1cyk7Cit2b2lkIGJmYV9wcG9ydF9iZWFjb24oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgYmVhY29uLAorCQkJYmZhX2Jvb2xlYW5fdCBsaW5rX2UyZV9iZWFjb24pOwordm9pZCBiZmFfY2JfcHBvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9wcG9ydF9ldmVudF90IGV2ZW50KTsKK3ZvaWQgYmZhX3Bwb3J0X3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9xb3NfYXR0cl9zICpxb3NfYXR0cik7Cit2b2lkIGJmYV9wcG9ydF9xb3NfZ2V0X3ZjX2F0dHIoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgKnFvc192Y19hdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfZ2V0X3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCWJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2xlYXJfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcHBvcnRfdCBjYmZuLAorCQkJdm9pZCAqY2JhcmcpOworYmZhX2Jvb2xlYW5fdCAgICAgYmZhX3Bwb3J0X2lzX3JhdGVsaW0oc3RydWN0IGJmYV9zICpiZmEpOworYmZhX2Jvb2xlYW5fdAliZmFfcHBvcnRfaXNfbGlua3VwKHN0cnVjdCBiZmFfcyAqYmZhKTsKKworLyoKKyAqIGJmYSBycG9ydCBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqcnBvcnRfZHJ2KTsKK3ZvaWQgYmZhX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgKnJwb3J0X2luZm8pOwordm9pZCBiZmFfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX3Jwb3J0X3NwZWVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKK3ZvaWQgYmZhX3Jwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyAqc3RhdHMpOwordm9pZCBiZmFfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqcnBvcnQpOwordm9pZCBiZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpycG9ydCk7Cit2b2lkIGJmYV9jYl9ycG9ydF9xb3Nfc2NuX2Zsb3dpZCh2b2lkICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHIsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKTsKK3ZvaWQgYmZhX2NiX3Jwb3J0X3Fvc19zY25fcHJpbyh2b2lkICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHIsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKTsKK3ZvaWQgYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zICpxb3NfYXR0cik7CisKKy8qCisgKiBiZmEgZmN4cCBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfZmN4cF9zICpiZmFfZmN4cF9hbGxvYyh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJaW50IG5yZXFfc2dsZXMsIGludCBucnNwX3NnbGVzLAorCQkJYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IGdldF9yZXFfc2dhLAorCQkJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgZ2V0X3JlcV9zZ2xlbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCBnZXRfcnNwX3NnYSwKKwkJCWJmYV9mY3hwX2dldF9zZ2xlbl90IGdldF9yc3Bfc2dsZW4pOwordm9pZCBiZmFfZmN4cF9hbGxvY193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZSwKKwkJCWJmYV9mY3hwX2FsbG9jX2NiZm5fdCBhbGxvY19jYmZuLCB2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV9mY3hwX3dhbGxvY19jYW5jZWwoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZSk7Cit2b2lkIGJmYV9mY3hwX2Rpc2NhcmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOworCit2b2lkICpiZmFfZmN4cF9nZXRfcmVxYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKK3ZvaWQgKmJmYV9mY3hwX2dldF9yc3BidWYoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOworCit2b2lkIGJmYV9mY3hwX2ZyZWUoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOworCit2b2lkIGJmYV9mY3hwX3NlbmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCB1MTYgdmZfaWQsIHU4IGxwX3RhZywKKwkJCWJmYV9ib29sZWFuX3QgY3RzLCBlbnVtIGZjX2NvcyBjb3MsCisJCQl1MzIgcmVxbGVuLCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJYmZhX2NiX2ZjeHBfc2VuZF90IGNiZm4sCisJCQl2b2lkICpjYmFyZywKKwkJCXUzMiByc3BfbWF4bGVuLCB1OCByc3BfdGltZW91dCk7CitiZmFfc3RhdHVzX3QgYmZhX2ZjeHBfYWJvcnQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOwordTMyICAgICAgICBiZmFfZmN4cF9nZXRfcmVxYnVmc3ooc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOwordTMyCWJmYV9mY3hwX2dldF9tYXhyc3Aoc3RydWN0IGJmYV9zICpiZmEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYmZhX3VmX2dldF9mcm1idWYoc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlyZXR1cm4gdWYtPmRhdGFfcHRyOworfQorCitzdGF0aWMgaW5saW5lICAgdTE2CitiZmFfdWZfZ2V0X2ZybWxlbihzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXJldHVybiB1Zi0+ZGF0YV9sZW47Cit9CisKKy8qKgorICogICAgICBDYWxsYmFjayBwcm90b3R5cGUgZm9yIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgICAgICBjYmFyZyAgICAgICAgICAgY2FsbGJhY2sgYXJnIGZvciByZWNlaXZlIGhhbmRsZXIKKyAqIEBwYXJhbVtpbl0gICAgICAgICAgIHVmICAgICAgICAgICAgICB1bnNvbGljaXRlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl91Zl9yZWN2X3QpICh2b2lkICpjYmFyZywgc3RydWN0IGJmYV91Zl9zICp1Zik7CisKKy8qCisgKiBiZmEgdWYgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV91Zl9yZWN2X3JlZ2lzdGVyKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfdWZfcmVjdl90IHVmcmVjdiwKKwkJCXZvaWQgKmNiYXJnKTsKK3ZvaWQgYmZhX3VmX2ZyZWUoc3RydWN0IGJmYV91Zl9zICp1Zik7CisKKy8qKgorICogYmZhIGxwb3J0IHNlcnZpY2UgYXBpCisgKi8KKworc3RydWN0IGJmYV9scHNfcyAqYmZhX2xwc19hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9scHNfZGVsZXRlKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit2b2lkIGJmYV9scHNfZGlzY2FyZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfbHBzX2Zsb2dpKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTggYWxwYSwgdTE2IHBkdXN6LAorCQkgICB3d25fdCBwd3duLCB3d25fdCBud3duLCBiZmFfYm9vbGVhbl90IGF1dGhfZW4pOwordm9pZCBiZmFfbHBzX2ZkaXNjKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTE2IHBkdXN6LCB3d25fdCBwd3duLAorCQkgICB3d25fdCBud3duKTsKK3ZvaWQgYmZhX2xwc19mbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfbHBzX2ZkaXNjbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTggYmZhX2xwc19nZXRfdGFnKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfbnBpdl9lbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX2Zwb3J0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfYnJjZF9mYWJyaWMoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9ib29sZWFuX3QgYmZhX2xwc19pc19hdXRocmVxKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfZXByb3RvX3N0YXR1c190IGJmYV9scHNfZ2V0X2V4dHN0YXR1cyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTMyIGJmYV9scHNfZ2V0X3BpZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTggYmZhX2xwc19nZXRfdGFnX2Zyb21fcGlkKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcGlkKTsKK3UxNiBiZmFfbHBzX2dldF9wZWVyX2JiY3JlZGl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit3d25fdCBiZmFfbHBzX2dldF9wZWVyX3B3d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3d3bl90IGJmYV9scHNfZ2V0X3BlZXJfbnd3bihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTggYmZhX2xwc19nZXRfbHNyanRfcnNuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit1OCBiZmFfbHBzX2dldF9sc3JqdF9leHBsKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit2b2lkIGJmYV9jYl9scHNfZmxvZ2lfY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3ZvaWQgYmZhX2NiX2xwc19mbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpOwordm9pZCBiZmFfY2JfbHBzX2ZkaXNjX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9TVkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfdGltZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA3MTAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV90aW1lci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfVElNRVJfSF9fCisjZGVmaW5lIF9fQkZBX1RJTUVSX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisKK3N0cnVjdCBiZmFfczsKKwordHlwZWRlZiB2b2lkICgqYmZhX3RpbWVyX2NiZm5fdCkodm9pZCAqKTsKKworLyoqCisgKiBCRkEgdGltZXIgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV90aW1lcl9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFlOworCWJmYV90aW1lcl9jYmZuX3QgdGltZXJjYjsKKwl2b2lkICAgICAgICAgICAgKmFyZzsKKwlpbnQgICAgICAgICAgICAgdGltZW91dDsJLyoqPCBpbiBtaWxsaXNlY3MuICovCit9OworCisvKioKKyAqIFRpbWVyIG1vZHVsZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV90aW1lcl9tb2RfcyB7CisJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9xOworfTsKKworI2RlZmluZSBCRkFfVElNRVJfRlJFUSA1MDAgLyoqPCBzcGVjaWZpZWQgaW4gbWlsbGlzZWNzICovCisKK3ZvaWQgYmZhX3RpbWVyX2JlYXQoc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kKTsKK3ZvaWQgYmZhX3RpbWVyX2luaXQoc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kKTsKK3ZvaWQgYmZhX3RpbWVyX2JlZ2luKHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV90aW1lcl9zICp0aW1lciwKKwkJCWJmYV90aW1lcl9jYmZuX3QgdGltZXJjYiwgdm9pZCAqYXJnLAorCQkJdW5zaWduZWQgaW50IHRpbWVvdXQpOwordm9pZCBiZmFfdGltZXJfc3RvcChzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyKTsKKworI2VuZGlmIC8qIF9fQkZBX1RJTUVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmkuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhZGZlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9IX18KKyNkZWZpbmUgX19CRklfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qKgorICogTXNnIGhlYWRlciBjb21tb24gdG8gYWxsIG1zZ3MKKyAqLworc3RydWN0IGJmaV9taGRyX3MgeworCXU4ICAgICAgICAgbXNnX2NsYXNzOwkvKiAgQHJlZiBiZmlfbWNsYXNzX3QJICAgICovCisJdTggICAgICAgICBtc2dfaWQ7CQkvKiAgbXNnIG9wY29kZSB3aXRoIGluIHRoZSBjbGFzcyAgICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggICAgICAgICByc3ZkOworCQkJdTggICAgICAgICBscHVfaWQ7CS8qICBtc2cgZGVzdGluYXRpb24JICAgICovCisJCX0gaDJpOworCQl1MTYgICAgICAgIGkyaHRvazsJLyogIHRva2VuIGluIG1zZ3MgdG8gaG9zdAkgICAgKi8KKwl9IG10YWc7Cit9OworCisjZGVmaW5lIGJmaV9oMmlfc2V0KF9taCwgX21jLCBfb3AsIF9scHVpZCkgZG8gewkJXAorCShfbWgpLm1zZ19jbGFzcyAJCT0gKF9tYyk7ICAgICAgXAorCShfbWgpLm1zZ19pZAkJCT0gKF9vcCk7ICAgICAgXAorCShfbWgpLm10YWcuaDJpLmxwdV9pZAk9IChfbHB1aWQpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZpX2kyaF9zZXQoX21oLCBfbWMsIF9vcCwgX2kyaHRvaykgZG8gewkJXAorCShfbWgpLm1zZ19jbGFzcyAJCT0gKF9tYyk7ICAgICAgXAorCShfbWgpLm1zZ19pZAkJCT0gKF9vcCk7ICAgICAgXAorCShfbWgpLm10YWcuaTJodG9rCQk9IChfaTJodG9rKTsgICAgICBcCit9IHdoaWxlICgwKQorCisvKgorICogTWVzc2FnZSBvcGNvZGVzOiAwLTEyNyB0byBmaXJtd2FyZSwgMTI4LTI1NSB0byBob3N0CisgKi8KKyNkZWZpbmUgQkZJX0kySF9PUENPREVfQkFTRQkxMjgKKyNkZWZpbmUgQkZBX0kySE0oX3gpIAkJCSgoX3gpICsgQkZJX0kySF9PUENPREVfQkFTRSkKKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnQgYW5kIFBhZ2UgZGVmaW5pdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZSBCRklfU0dFX0lOTElORQkxCisjZGVmaW5lIEJGSV9TR0VfSU5MSU5FX01BWAkoQkZJX1NHRV9JTkxJTkUgKyAxKQorCisvKioKKyAqIFNHIEZsYWdzCisgKi8KK2VudW0geworCUJGSV9TR0VfREFUQQk9IDAsCS8qICBkYXRhIGFkZHJlc3MsIG5vdCBsYXN0CSAgICAgKi8KKwlCRklfU0dFX0RBVEFfQ1BMCT0gMSwJLyogIGRhdGEgYWRkciwgbGFzdCBpbiBjdXJyZW50IHBhZ2UgKi8KKwlCRklfU0dFX0RBVEFfTEFTVAk9IDMsCS8qICBkYXRhIGFkZHJlc3MsIGxhc3QJCSAgICAgKi8KKwlCRklfU0dFX0xJTksJPSAyLAkvKiAgbGluayBhZGRyZXNzCQkgICAgICovCisJQkZJX1NHRV9QR0RMRU4JPSAyLAkvKiAgY3VtdWxhdGl2ZSBkYXRhIGxlbmd0aCBmb3IgcGFnZSAqLworfTsKKworLyoqCisgKiBETUEgYWRkcmVzc2VzCisgKi8KK3VuaW9uIGJmaV9hZGRyX3UgeworCXN0cnVjdCB7CisJCXUzMiAgICAgICAgYWRkcl9sbzsKKwkJdTMyICAgICAgICBhZGRyX2hpOworCX0gYTMyOworfTsKKworLyoqCisgKiBTY2F0dGVyIEdhdGhlciBFbGVtZW50CisgKi8KK3N0cnVjdCBiZmlfc2dlX3MgeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBmbGFncwk6IDIsCisJCQlyc3ZkCTogMiwKKwkJCXNnX2xlbgk6IDI4OworI2Vsc2UKKwl1MzIgICAgICAgIHNnX2xlbgk6IDI4LAorCQkJcnN2ZAk6IDIsCisJCQlmbGFncwk6IDI7CisjZW5kaWYKKwl1bmlvbiBiZmlfYWRkcl91IHNnYTsKK307CisKKy8qKgorICogU2NhdHRlciBHYXRoZXIgUGFnZQorICovCisjZGVmaW5lIEJGSV9TR1BHX0RBVEFfU0dFUwkJNworI2RlZmluZSBCRklfU0dQR19TR0VTX01BWAkJKEJGSV9TR1BHX0RBVEFfU0dFUyArIDEpCisjZGVmaW5lIEJGSV9TR1BHX1JTVkRfV0RfTEVOCTgKK3N0cnVjdCBiZmlfc2dwZ19zIHsKKwlzdHJ1Y3QgYmZpX3NnZV9zIHNnZXNbQkZJX1NHUEdfU0dFU19NQVhdOworCXUzMglyc3ZkW0JGSV9TR1BHX1JTVkRfV0RfTEVOXTsKK307CisKKy8qCisgKiBMYXJnZSBNZXNzYWdlIHN0cnVjdHVyZSAtIDEyOCBCeXRlcyBzaXplIE1zZ3MKKyAqLworI2RlZmluZSBCRklfTE1TR19TWgkJMTI4CisjZGVmaW5lIEJGSV9MTVNHX1BMX1dTWglcCisJCQkoKEJGSV9MTVNHX1NaIC0gc2l6ZW9mKHN0cnVjdCBiZmlfbWhkcl9zKSkgLyA0KQorCitzdHJ1Y3QgYmZpX21zZ19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaGRyOworCXUzMglwbFtCRklfTE1TR19QTF9XU1pdOworfTsKKworLyoqCisgKiBNYWlsYm94IG1lc3NhZ2Ugc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgQkZJX01CTVNHX1NaCQk3CitzdHJ1Y3QgYmZpX21ibXNnX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zCW1oOworCXUzMgkJcGxbQkZJX01CTVNHX1NaXTsKK307CisKKy8qKgorICogTWVzc2FnZSBDbGFzc2VzCisgKi8KK2VudW0gYmZpX21jbGFzcyB7CisJQkZJX01DX0lPQwkJPSAxLAkvKiAgSU8gQ29udHJvbGxlciAoSU9DKQkgICAgKi8KKwlCRklfTUNfRElBRwkJPSAyLAkvKiAgRGlhZ25vc3RpYyBNc2dzCQkgICAgKi8KKwlCRklfTUNfRkxBU0gJCT0gMywJLyogIEZsYXNoIG1lc3NhZ2UgY2xhc3MJICAgICovCisJQkZJX01DX0NFRQkJPSA0LAorCUJGSV9NQ19GQ19QT1JUCQk9IDUsCS8qICBGQyBwb3J0CQkgICAJICAgICovCisJQkZJX01DX0lPQ0ZDCQk9IDYsCS8qICBGQyAtIElPIENvbnRyb2xsZXIgKElPQykJICAgICovCisJQkZJX01DX0xMCQk9IDcsCS8qICBMaW5rIExheWVyCQkgCSAgICAqLworCUJGSV9NQ19VRgkJPSA4LAkvKiAgVW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZQkgICAgKi8KKwlCRklfTUNfRkNYUAkJPSA5LAkvKiAgRkMgVHJhbnNwb3J0CQkgICAgKi8KKwlCRklfTUNfTFBTCQk9IDEwLAkvKiAgbHBvcnQgZmMgbG9naW4gc2VydmljZXMJICAgICovCisJQkZJX01DX1JQT1JUCQk9IDExLAkvKiAgUmVtb3RlIHBvcnQJCSAgICAqLworCUJGSV9NQ19JVE5JTQkJPSAxMiwJLyogIEktVCBuZXh1cyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX1JFQUQJPSAxMywJLyogIHJlYWQgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9XUklURQk9IDE0LAkvKiAgd3JpdGUgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9JTwkJPSAxNSwJLyogIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU0JCT0gMTYsCS8qICBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX0lPQ09NCT0gMTcsCS8qICBnb29kIElPIGNvbXBsZXRpb24JCSAgICAqLworCUJGSV9NQ19UU0tJTQkJPSAxOCwJLyogIEluaXRpYXRvciBUYXNrIG1hbmFnZW1lbnQJICAgICovCisJQkZJX01DX1NCT09UCQk9IDE5LAkvKiAgU0FOIGJvb3Qgc2VydmljZXMJCSAgICAqLworCUJGSV9NQ19JUEZDCQk9IDIwLAkvKiAgSVAgb3ZlciBGQyBNc2dzCQkgICAgKi8KKwlCRklfTUNfUE9SVAkJPSAyMSwJLyogIFBoeXNpY2FsIHBvcnQJCSAgICAqLworCUJGSV9NQ19NQVgJCT0gMzIKK307CisKKyNkZWZpbmUgQkZJX0lPQ19NQVhfQ1FTCQk0CisjZGVmaW5lIEJGSV9JT0NfTUFYX0NRU19BU0lDCTgKKyNkZWZpbmUgQkZJX0lPQ19NU0dMRU5fTUFYCTMyCS8qIDMyIGJ5dGVzICovCisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfYm9vdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTVhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ib290LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworLyoKKyAqIGJmaV9ib290LmgKKyAqLworCisjaWZuZGVmIF9fQkZJX0JPT1RfSF9fCisjZGVmaW5lIF9fQkZJX0JPT1RfSF9fCisKKyNkZWZpbmUgQkZJX0JPT1RfVFlQRV9PRkYJCTgKKyNkZWZpbmUgQkZJX0JPT1RfUEFSQU1fT0ZGCQkxMgorCisjZGVmaW5lIEJGSV9CT09UX1RZUEVfTk9STUFMIAkJMAkvKiBwYXJhbSBpcyBkZXZpY2UgaWQgKi8KKyNkZWZpbmUJQkZJX0JPT1RfVFlQRV9GTEFTSAkJMQorI2RlZmluZQlCRklfQk9PVF9UWVBFX01FTVRFU1QJCTIKKworI2RlZmluZSBCRklfQk9PVF9NRU1URVNUX1JFU19BRERSICAgMHg5MDAKKyNkZWZpbmUgQkZJX0JPT1RfTUVNVEVTVF9SRVNfU0lHICAgIDB4QTBBMUEyQTMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jYnJlZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2JyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JiNTJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2JyZWcuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogYmZpX2NicmVnLmggY3Jvc3Nib3cgaG9zdCBibG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICEhISBEbyBub3QgZWRpdC4gQXV0byBnZW5lcmF0ZWQuICEhIQorICovCisKKyNpZm5kZWYgX19CRklfQ0JSRUdfSF9fCisjZGVmaW5lIF9fQkZJX0NCUkVHX0hfXworCisKKyNkZWZpbmUgSE9TVEZOMF9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUCAgICAgICAgICAgMHgwMDBmZmZmZgorI2RlZmluZSBIT1NURk4wX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MDA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4wICAgICAgICAgICAgICAgIDB4MDAwMTQwMDgKKyNkZWZpbmUgX19IT1NUX1BBR0VfTlVNX0ZOICAgICAgICAgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIT1NURk4xX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MTAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9MVkxfTUsgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUX0xWTF9TSCAgICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUX0xWTChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4xX0lOVF9TVEFUX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUX1AgICAgICAgICAgICAgMHgwMDBmZmZmZgorI2RlZmluZSBIT1NURk4xX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MTA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4xICAgICAgICAgICAgICAgIDB4MDAwMTQxMDgKKyNkZWZpbmUgQVBQX1BMTF80MDBfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwNAorI2RlZmluZSBfX1BfNDAwX1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfU1JBTV9VU0VfMTAwTUhaICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfNDAwX1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVBQX1BMTF8yMTJfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwOAorI2RlZmluZSBfX1BfMjEyX1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVJfTUsgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9SRVNFVF9USU1FUl9TSCAgICAgMTcKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9SRVNFVF9USU1FUihfdikgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9SRVNFVF9USU1FUl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9MT0dJQ19TT0ZUX1JFU0VUICAgMHgwMDAxMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0NOVExNVDBfMV9NSyAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfQ05UTE1UMF8xX1NIICAgICAgIDE0CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfQ05UTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfQ05UTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX0pJVExNVDBfMV9NSyAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSklUTE1UMF8xX1NIICAgICAgIDEyCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSklUTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfSklUTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX0hSRUYgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSERJViAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9QMF8xX01LICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1AwXzFfU0ggICAgICAgICAgICA4CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUDBfMShfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfUDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9aMF8yX01LICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1owXzJfU0ggICAgICAgICAgICA1CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfWjBfMihfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfWjBfMl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9SU0VMMjAwNTAwICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0VOQVJTVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfQllQQVNTICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9MUkVTRVROICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9QTExfMjEyX0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMF9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzAKKyNkZWZpbmUgX19IT1NUX1NFTUFQSE9SRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTFfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM0CisjZGVmaW5lIEhPU1RfU0VNMl9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzgKKyNkZWZpbmUgSE9TVF9TRU0zX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzYworI2RlZmluZSBIT1NUX1NFTTBfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQwCisjZGVmaW5lIEhPU1RfU0VNMV9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDQKKyNkZWZpbmUgSE9TVF9TRU0yX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0OAorI2RlZmluZSBIT1NUX1NFTTNfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjRjCisjZGVmaW5lIEhPU1RGTjBfTFBVMF9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMDAKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjBfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDA4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMV9MUFUxX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAxNAorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMV9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMWMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4xX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUEVfUTBfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDE0CisjZGVmaW5lIENQRV9RMF9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMWMKKyNkZWZpbmUgQ1BFX1EwX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAyMAorI2RlZmluZSBDUEVfUTFfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDM0CisjZGVmaW5lIENQRV9RMV9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwM2MKKyNkZWZpbmUgQ1BFX1ExX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA0MAorI2RlZmluZSBDUEVfUTJfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDU0CisjZGVmaW5lIENQRV9RMl9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNWMKKyNkZWZpbmUgQ1BFX1EyX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA2MAorI2RlZmluZSBDUEVfUTNfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDc0CisjZGVmaW5lIENQRV9RM19QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwN2MKKyNkZWZpbmUgQ1BFX1EzX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA4MAorI2RlZmluZSBDUEVfUTRfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDk0CisjZGVmaW5lIENQRV9RNF9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwOWMKKyNkZWZpbmUgQ1BFX1E0X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBhMAorI2RlZmluZSBDUEVfUTVfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGI0CisjZGVmaW5lIENQRV9RNV9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYmMKKyNkZWZpbmUgQ1BFX1E1X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBjMAorI2RlZmluZSBDUEVfUTZfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGQ0CisjZGVmaW5lIENQRV9RNl9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZGMKKyNkZWZpbmUgQ1BFX1E2X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBlMAorI2RlZmluZSBDUEVfUTdfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGY0CisjZGVmaW5lIENQRV9RN19QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZmMKKyNkZWZpbmUgQ1BFX1E3X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDEwMAorI2RlZmluZSBSTUVfUTBfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMDE0CisjZGVmaW5lIFJNRV9RMF9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMWMKKyNkZWZpbmUgUk1FX1EwX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAyMAorI2RlZmluZSBSTUVfUTFfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMDM0CisjZGVmaW5lIFJNRV9RMV9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwM2MKKyNkZWZpbmUgUk1FX1ExX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA0MAorI2RlZmluZSBSTUVfUTJfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMDU0CisjZGVmaW5lIFJNRV9RMl9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNWMKKyNkZWZpbmUgUk1FX1EyX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA2MAorI2RlZmluZSBSTUVfUTNfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMDc0CisjZGVmaW5lIFJNRV9RM19QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwN2MKKyNkZWZpbmUgUk1FX1EzX0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA4MAorI2RlZmluZSBSTUVfUTRfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMDk0CisjZGVmaW5lIFJNRV9RNF9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwOWMKKyNkZWZpbmUgUk1FX1E0X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBhMAorI2RlZmluZSBSTUVfUTVfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMGI0CisjZGVmaW5lIFJNRV9RNV9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYmMKKyNkZWZpbmUgUk1FX1E1X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBjMAorI2RlZmluZSBSTUVfUTZfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMGQ0CisjZGVmaW5lIFJNRV9RNl9QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZGMKKyNkZWZpbmUgUk1FX1E2X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBlMAorI2RlZmluZSBSTUVfUTdfREVQVEggICAgICAgICAgICAgICAgICAgICAweDAwMDExMGY0CisjZGVmaW5lIFJNRV9RN19QSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZmMKKyNkZWZpbmUgUk1FX1E3X0NJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTEwMAorI2RlZmluZSBQU1NfQ1RMX1JFRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDE4ODAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX01LICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfU0ggICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVYoX3YpICAgICAgICAgICAgKChfdikgPDwgX19QU1NfSTJDX0NMS19ESVZfU0gpCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9ET05FICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRU4gICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fUFNTX0xQVTFfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19QU1NfTFBVMF9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZWl0aGVyIGluIGVycm9yL21pc3NpbmcgaW4gc3BlYy4gSXRzIGF1dG8tZ2VuZXJhdGVkCisgKiBmcm9tIGhhcmQgY29kZWQgdmFsdWVzIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfTUtfRklYICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19TSF9GSVggICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0VNUEhQUkVfQVRfNEdfRklYICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIF9fU0ZQX1RYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19TRlBfUlhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBoYXJkIGNvZGVkIHZhbHVlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgSE9TVEZOMF9MUFVfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTIwMAorI2RlZmluZSBIT1NURk4xX0xQVV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MjYwCisjZGVmaW5lIExQVV9IT1NURk4wX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyODAKKyNkZWZpbmUgTFBVX0hPU1RGTjFfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTJlMAorCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBtYXBwaW5nIGRlZmluaXRpb25zIGFyZSBhdXRvLWdlbmVyYXRlZCBmcm9tIG1hcHBpbmcgdGFibGVzCisgKiBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBCRkFfSU9DMF9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTBfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzBfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0xX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMl9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTNfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0ZXX1VTRV9DT1VOVCAgICAgICAgICAgICAgICAgSE9TVF9TRU00X0lORk9fUkVHCisKKyNkZWZpbmUgQ1BFX1FfREVQVEgoX19uKSBcCisJKENQRV9RMF9ERVBUSCArIChfX24pICogKENQRV9RMV9ERVBUSCAtIENQRV9RMF9ERVBUSCkpCisjZGVmaW5lIENQRV9RX1BJKF9fbikgXAorCShDUEVfUTBfUEkgKyAoX19uKSAqIChDUEVfUTFfUEkgLSBDUEVfUTBfUEkpKQorI2RlZmluZSBDUEVfUV9DSShfX24pIFwKKwkoQ1BFX1EwX0NJICsgKF9fbikgKiAoQ1BFX1ExX0NJIC0gQ1BFX1EwX0NJKSkKKyNkZWZpbmUgUk1FX1FfREVQVEgoX19uKSBcCisJKFJNRV9RMF9ERVBUSCArIChfX24pICogKFJNRV9RMV9ERVBUSCAtIFJNRV9RMF9ERVBUSCkpCisjZGVmaW5lIFJNRV9RX1BJKF9fbikgXAorCShSTUVfUTBfUEkgKyAoX19uKSAqIChSTUVfUTFfUEkgLSBSTUVfUTBfUEkpKQorI2RlZmluZSBSTUVfUV9DSShfX24pIFwKKwkoUk1FX1EwX0NJICsgKF9fbikgKiAoUk1FX1ExX0NJIC0gUk1FX1EwX0NJKSkKKworI2RlZmluZSBDUEVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgUk1FX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIENQRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorI2RlZmluZSBSTUVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKworCisvKgorICogUENJIE1TSS1YIHZlY3RvciBkZWZpbmVzCisgKi8KK2VudW0geworICAgIEJGQV9NU0lYX0NQRV9RMCA9IDAsCisgICAgQkZBX01TSVhfQ1BFX1ExID0gMSwKKyAgICBCRkFfTVNJWF9DUEVfUTIgPSAyLAorICAgIEJGQV9NU0lYX0NQRV9RMyA9IDMsCisgICAgQkZBX01TSVhfQ1BFX1E0ID0gNCwKKyAgICBCRkFfTVNJWF9DUEVfUTUgPSA1LAorICAgIEJGQV9NU0lYX0NQRV9RNiA9IDYsCisgICAgQkZBX01TSVhfQ1BFX1E3ID0gNywKKyAgICBCRkFfTVNJWF9STUVfUTAgPSA4LAorICAgIEJGQV9NU0lYX1JNRV9RMSA9IDksCisgICAgQkZBX01TSVhfUk1FX1EyID0gMTAsCisgICAgQkZBX01TSVhfUk1FX1EzID0gMTEsCisgICAgQkZBX01TSVhfUk1FX1E0ID0gMTIsCisgICAgQkZBX01TSVhfUk1FX1E1ID0gMTMsCisgICAgQkZBX01TSVhfUk1FX1E2ID0gMTQsCisgICAgQkZBX01TSVhfUk1FX1E3ID0gMTUsCisgICAgQkZBX01TSVhfRVJSX0VNQyA9IDE2LAorICAgIEJGQV9NU0lYX0VSUl9MUFUwID0gMTcsCisgICAgQkZBX01TSVhfRVJSX0xQVTEgPSAxOCwKKyAgICBCRkFfTVNJWF9FUlJfUFNTID0gMTksCisgICAgQkZBX01TSVhfTUJPWF9MUFUwID0gMjAsCisgICAgQkZBX01TSVhfTUJPWF9MUFUxID0gMjEsCisgICAgQkZBX01TSVhfQ0JfTUFYID0gMjIsCit9OworCisvKgorICogQW5kIGNvcnJlc3BvbmRpbmcgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBmaWVsZCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0VNQyAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMCAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUxICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX1BTUyAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMSAgICAgICAgICAgICAgICAweDAwMjAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMCAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUxICAgICAgICAgICAgICAgMHgwMDgwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMGZmVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDBVCisKKworLyoKKyAqIGNyb3NzYm93IG1lbW9yeSBtYXAuCisgKi8KKyNkZWZpbmUgUFNTX1NNRU1fUEFHRV9TVEFSVAkweDgwMDAKKyNkZWZpbmUgUFNTX1NNRU1fUEdOVU0oX3BnMCwgX21hKQkoKF9wZzApICsgKChfbWEpID4+IDE1KSkKKyNkZWZpbmUgUFNTX1NNRU1fUEdPRkYoX21hKQkoKF9tYSkgJiAweDdmZmYpCisKKy8qCisgKiBFbmQgb2YgY3Jvc3Nib3cgbWVtb3J5IG1hcAorICovCisKKworI2VuZGlmIC8qIF9fQkZJX0NCUkVHX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jZWUuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzA1OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qKgorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIGJmaV9kY2J4LmggQkZJIEludGVyZmFjZSAoTWFpbGJveCBjb21tYW5kcyBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmVzKQorICogYmV0d2VlbiBob3N0IGRyaXZlciBhbmQgRENCWC9MTERQIGZpcm13YXJlIG1vZHVsZS4KKyAqCisqKi8KKworI2lmbmRlZiBfX0JGSV9DRUVfSF9fCisjZGVmaW5lIF9fQkZJX0NFRV9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKworZW51bSBiZmlfY2VlX2gyaV9tc2dzX2UgeworCUJGSV9DRUVfSDJJX0dFVF9DRkdfUkVRID0gMSwKKwlCRklfQ0VFX0gySV9SRVNFVF9TVEFUUyA9IDIsCisJQkZJX0NFRV9IMklfR0VUX1NUQVRTX1JFUSA9IDMsCit9OworCisKK2VudW0gYmZpX2NlZV9pMmhfbXNnc19lIHsKKwlCRklfQ0VFX0kySF9HRVRfQ0ZHX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9DRUVfSTJIX1JFU0VUX1NUQVRTX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9DRUVfSTJIX0dFVF9TVEFUU19SU1AgPSBCRkFfSTJITSgzKSwKK307CisKKworLyogRGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qCisgKiBCRklfQ0VFX0gySV9SRVNFVF9TVEFUUworICovCitzdHJ1Y3QgYmZpX2xsZHBfcmVzZXRfc3RhdHNfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworfTsKKworLyoKKyAqIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTCisgKi8KK3N0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUQorICovCitzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1bmlvbiBiZmlfYWRkcl91ICAgZG1hX2FkZHI7Cit9OworCisKKy8qCisgKiBCRklfQ0VFX0kySF9HRVRfQ0ZHX1JTUAorICovCitzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1OCAgICAgICAgICAgIGNtZF9zdGF0dXM7CisJdTggICAgICAgICAgICByc3ZkWzNdOworfTsKKworLyoKKyAqIEJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEKKyAqLworc3RydWN0IGJmaV9jZWVfc3RhdHNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1bmlvbiBiZmlfYWRkcl91ICAgZG1hX2FkZHI7Cit9OworCisKKy8qCisgKiBCRklfQ0VFX0kySF9HRVRfU1RBVFNfUlNQCisgKi8KK3N0cnVjdCBiZmlfY2VlX3N0YXRzX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdTggCQkgICBjbWRfc3RhdHVzOworCXU4IAkJICAgcnN2ZFszXTsKK307CisKKworCit1bmlvbiBiZmlfY2VlX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAgICAgIG1oOworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAgIGdldF9yZXE7CisJc3RydWN0IGJmaV9jZWVfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworfTsKKworCit1bmlvbiBiZmlfY2VlX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAgICBtaDsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgIGdldF9yc3A7CisJc3RydWN0IGJmaV9jZWVfc3RhdHNfcnNwX3Mgc3RhdHNfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworCisjZW5kaWYgLyogX19CRklfQ0VFX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jdHJlZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NhYTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaApAQCAtMCwwICsxLDYxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogYmZpX2N0cmVnLmggY2F0YXB1bHQgaG9zdCBibG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICEhISBEbyBub3QgZWRpdC4gQXV0byBnZW5lcmF0ZWQuICEhIQorICovCisKKyNpZm5kZWYgX19CRklfQ1RSRUdfSF9fCisjZGVmaW5lIF9fQkZJX0NUUkVHX0hfXworCisKKyNkZWZpbmUgSE9TVEZOMF9MUFVfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTIwMAorI2RlZmluZSBIT1NURk4xX0xQVV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MjYwCisjZGVmaW5lIExQVV9IT1NURk4wX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyODAKKyNkZWZpbmUgTFBVX0hPU1RGTjFfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTJlMAorI2RlZmluZSBIT1NURk4yX0xQVV9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5NDAwCisjZGVmaW5lIEhPU1RGTjNfTFBVX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTk0NjAKKyNkZWZpbmUgTFBVX0hPU1RGTjJfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTQ4MAorI2RlZmluZSBMUFVfSE9TVEZOM19NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5NGUwCisjZGVmaW5lIEhPU1RGTjBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQwMDAKKyNkZWZpbmUgX19IT1NURk4wX0hBTFRfT0NDVVJSRUQgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjBfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQwMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjAgICAgICAgICAgICAgICAgMHgwMDAxNDAwOAorI2RlZmluZSBfX0hPU1RfUEFHRV9OVU1fRk4gICAgICAgICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4wICAgICAgICAgIDB4MDAwMTQwMGMKKyNkZWZpbmUgX19NU0lYX0VSUl9JTkRFWF9GTiAgICAgICAgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIT1NURk4xX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MTAwCisjZGVmaW5lIF9fSE9TVEZOMV9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4xX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4xX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MTA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4xICAgICAgICAgICAgICAgIDB4MDAwMTQxMDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjEgICAgICAgICAgMHgwMDAxNDEwYworI2RlZmluZSBBUFBfUExMXzQyNV9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA0CisjZGVmaW5lIF9fUF80MjVfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9TUkFNX1VTRV8xMDBNSFogICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfNDI1X0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUFBfUExMXzMxMl9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA4CisjZGVmaW5lIF9fUF8zMTJfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDX0FIQl8xICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfQUhCXzAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ18xICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDXzAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfMzEyX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQklTVF9DVExfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjIwCisjZGVmaW5lIF9fRURSQU1fQklTVFJfU1RBUlQgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19NQklTVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX01CSVNUX1NUQVJUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1CSVNUX1NUQVRfUkVHICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMjQKKyNkZWZpbmUgX19FRFJBTV9CSVNUUl9TVEFUVVMgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0VEUkFNX0JJU1RSX0RPTkUgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fTUVNX0JJVF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19NQklTVF9ET05FICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTBfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjMwCisjZGVmaW5lIF9fSE9TVF9TRU1BUEhPUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0xX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzNAorI2RlZmluZSBIT1NUX1NFTTJfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM4CisjZGVmaW5lIEhPU1RfU0VNM19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyM2MKKyNkZWZpbmUgSE9TVF9TRU0wX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0MAorI2RlZmluZSBIT1NUX1NFTTFfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ0CisjZGVmaW5lIEhPU1RfU0VNMl9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDgKKyNkZWZpbmUgSE9TVF9TRU0zX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0YworI2RlZmluZSBFVEhfTUFDX1NFUl9SRUcgICAgICAgICAgICAgICAgICAweDAwMDE0Mjg4CisjZGVmaW5lIF9fQVBQX0VNU19DS0JVRkFNUElOICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgX19BUFBfRU1TX1JFRkNMS1NFTCAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9FTVNfQ01MQ0tTRUwgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX0VNU19SRUZDS0JVRkVOMiAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfRU1TX1JFRkNLQlVGRU4xICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9FTVNfQ0hBTk5FTF9TRUwgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQzMDAKKyNkZWZpbmUgX19IT1NURk4yX0hBTFRfT0NDVVJSRUQgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjJfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjJfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQzMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjIgICAgICAgICAgICAgICAgMHgwMDAxNDMwOAorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMiAgICAgICAgICAweDAwMDE0MzBjCisjZGVmaW5lIEhPU1RGTjNfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQ0MDAKKyNkZWZpbmUgX19IQUxUX09DQ1VSUkVEICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjNfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjNfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQ0MDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjMgICAgICAgICAgICAgICAgMHgwMDAxNDQwOAorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMyAgICAgICAgICAweDAwMDE0NDBjCisjZGVmaW5lIEZOQ19JRF9SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MDAKKyNkZWZpbmUgX19GVU5DVElPTl9OVU1CRVIgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBGTkNfUEVSU19SRUcgICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjA0CisjZGVmaW5lIF9fRjNfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19GM19GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0YzX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIF9fRjNfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIF9fRjNfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjNfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjNfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVU19NSyAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBfX0YzX0lOVFhfU1RBVFVTX1NIICAgICAgICAgICAgICAyNAorI2RlZmluZSBfX0YzX0lOVFhfU1RBVFVTKF92KSAgICAgICAgICAgICAoKF92KSA8PCBfX0YzX0lOVFhfU1RBVFVTX1NIKQorI2RlZmluZSBfX0YyX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIF9fRjJfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgX19GMl9QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBfX0YyX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBfX0YyX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YyX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YyX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVNfTUsgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgX19GMl9JTlRYX1NUQVRVU19TSCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19GMl9JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GMl9JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMV9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBfX0YxX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIF9fRjFfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19GMV9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgX19GMV9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMV9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMV9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0YxX0lOVFhfU1RBVFVTX01LICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIF9fRjFfSU5UWF9TVEFUVVNfU0ggICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19GMV9JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GMV9JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMF9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBfX0YwX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIF9fRjBfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgX19GMF9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBfX0YwX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YwX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YwX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fRjBfSU5UWF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKK2VudW0geworICAgIF9fRjBfSU5UWF9TVEFUVVNfTVNJWCAgICAgICAgICAgID0gMHgwLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQSAgICAgICAgICAgID0gMHgxLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQiAgICAgICAgICAgID0gMHgyLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5UQyAgICAgICAgICAgID0gMHgzLAorICAgIF9fRjBfSU5UWF9TVEFUVVNfSU5URCAgICAgICAgICAgID0gMHg0LAorfTsKKyNkZWZpbmUgT1BfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYwYworI2RlZmluZSBfX0FQUF9FVEhfQ0xLX0xPV1NQRUVEICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fR0xPQkFMX0NPUkVDTEtfSEFMRlNQRUVEICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19HTE9CQUxfRkNPRV9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTRfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjEwCisjZGVmaW5lIEhPU1RfU0VNNV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MTQKKyNkZWZpbmUgSE9TVF9TRU02X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxOAorI2RlZmluZSBIT1NUX1NFTTdfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjFjCisjZGVmaW5lIEhPU1RfU0VNNF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MjAKKyNkZWZpbmUgSE9TVF9TRU01X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyNAorI2RlZmluZSBIT1NUX1NFTTZfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjI4CisjZGVmaW5lIEhPU1RfU0VNN19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MmMKKyNkZWZpbmUgSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwMAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4wX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDA0CisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMDgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4wX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDEwCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjFfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMTQKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4xX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxOAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDFjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNTAKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMl9MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1NAorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBCT1gwX0NNRF9TVEFUVVMgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTU4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMl9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNWMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2MAorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4zX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTY0CisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOM19NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNjgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4zX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2YworI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBGV19JTklUX0hBTFRfUDAgICAgICAgICAgICAgICAgICAweDAwMDE5MWFjCisjZGVmaW5lIF9fRldfSU5JVF9IQUxUX1AgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRldfSU5JVF9IQUxUX1AxICAgICAgICAgICAgICAgICAgMHgwMDAxOTFiYworI2RlZmluZSBDUEVfUElfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRF9NSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19DUEVfUElfVU5VU0VEX1NIICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfUElfVU5VU0VEKF92KSAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfUElfVU5VU0VEX1NIKQorI2RlZmluZSBfX0NQRV9QSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIENQRV9QSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNDAKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwNAorI2RlZmluZSBfX0NQRV9DSV9VTlVTRURfTUsgICAgICAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fQ1BFX0NJX1VOVVNFRF9TSCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX0NJX1VOVVNFRChfdikgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NJX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19DUEVfQ0lfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBDUEVfQ0lfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDQ0CisjZGVmaW5lIENQRV9ERVBUSF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDgKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEX01LICAgICAgICAgICAgMHhmODAwMDAwMAorI2RlZmluZSBfX0NQRV9ERVBUSF9VTlVTRURfU0ggICAgICAgICAgICAyNworI2RlZmluZSBfX0NQRV9ERVBUSF9VTlVTRUQoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9ERVBUSF9VTlVTRURfU0gpCisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYX01LICAgICAgICAgIDB4MDdmZjAwMDAKKyNkZWZpbmUgX19DUEVfTVNJWF9WRUNfSU5ERVhfU0ggICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfTVNJWF9WRUNfSU5ERVgoX3YpICAgICAgICAgKChfdikgPDwgX19DUEVfTVNJWF9WRUNfSU5ERVhfU0gpCisjZGVmaW5lIF9fQ1BFX0RFUFRIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1BFX0RFUFRIX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0OAorI2RlZmluZSBDUEVfUUNUUkxfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDBjCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzBfTUsgICAgICAgICAgIDB4ZmMwMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMF9TSCAgICAgICAgICAgMjYKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQzMF9TSCkKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTF9NSyAgICAgICAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBfX0NQRV9GVU5DX0lOVF9DVFJMX1NIICAgICAgICAgICAyNAorI2RlZmluZSBfX0NQRV9GVU5DX0lOVF9DVFJMKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9GVU5DX0lOVF9DVFJMX1NIKQorZW51bSB7CisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9ESVNBQkxFICAgICAgPSAweDAsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9GMk5GICAgICAgICAgPSAweDEsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF8zUVVBUlQgICAgICAgPSAweDIsCisgICAgX19DUEVfRlVOQ19JTlRfQ1RSTF9IQUxGICAgICAgICAgPSAweDMsCit9OworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwX01LICAgICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjBfU0ggICAgICAgICAgIDIwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMjBfU0gpCisjZGVmaW5lIF9fQ1BFX1NDSV9USF9NSyAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19DUEVfU0NJX1RIX1NIICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfU0NJX1RIKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfU0NJX1RIX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwX01LICAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTBfU0ggICAgICAgICAgIDE0CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMTBfU0gpCisjZGVmaW5lIF9fQ1BFX0FDS19QRU5ESU5HICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MF9NSyAgICAgICAgICAgMHgwMDAwMWMwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQwX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDQwX1NIKQorI2RlZmluZSBfX0NQRV9QQ0lFSURfTUsgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQ1BFX1BDSUVJRF9TSCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19DUEVfUENJRUlEKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfUENJRUlEX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAwX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDBfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQwMF9TSCkKKyNkZWZpbmUgX19DUEVfRVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUEVfUUNUUkxfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDRjCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzFfTUsgICAgICAgICAgIDB4ZmMwMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMV9TSCAgICAgICAgICAgMjYKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQzMV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMV9NSyAgICAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIxX1NIICAgICAgICAgICAyMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDIxX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExX01LICAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTFfU0ggICAgICAgICAgIDE0CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMTFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDFfTUsgICAgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MV9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQ0MV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMV9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAxX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMDFfU0gpCisjZGVmaW5lIFJNRV9QSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMjAKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVBfTUsgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0xBVEVOQ1lfVElNRV9TVEFNUF9TSCAgICAgICAgICAxNgorI2RlZmluZSBfX0xBVEVOQ1lfVElNRV9TVEFNUChfdikgICAgICAgICAoKF92KSA8PCBfX0xBVEVOQ1lfVElNRV9TVEFNUF9TSCkKKyNkZWZpbmUgX19STUVfUElfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSTUVfUElfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDYwCisjZGVmaW5lIFJNRV9DSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMjQKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QX01LICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0RFTEFZX1RJTUVfU1RBTVBfU0ggICAgICAgICAgICAxNgorI2RlZmluZSBfX0RFTEFZX1RJTUVfU1RBTVAoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0RFTEFZX1RJTUVfU1RBTVBfU0gpCisjZGVmaW5lIF9fUk1FX0NJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUk1FX0NJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2NAorI2RlZmluZSBSTUVfREVQVEhfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDI4CisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRF9NSyAgICAgICAgICAgIDB4ZjgwMDAwMDAKKyNkZWZpbmUgX19STUVfREVQVEhfVU5VU0VEX1NIICAgICAgICAgICAgMjcKKyNkZWZpbmUgX19STUVfREVQVEhfVU5VU0VEKF92KSAgICAgICAgICAgKChfdikgPDwgX19STUVfREVQVEhfVU5VU0VEX1NIKQorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9NSyAgICAgICAgICAweDA3ZmYwMDAwCisjZGVmaW5lIF9fUk1FX01TSVhfVkVDX0lOREVYX1NIICAgICAgICAgIDE2CisjZGVmaW5lIF9fUk1FX01TSVhfVkVDX0lOREVYKF92KSAgICAgICAgICgoX3YpIDw8IF9fUk1FX01TSVhfVkVDX0lOREVYX1NIKQorI2RlZmluZSBfX1JNRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIFJNRV9ERVBUSF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNjgKKyNkZWZpbmUgUk1FX1FDVFJMX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyYworI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9NSyAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSX1NIICAgICAgIDI0CisjZGVmaW5lIF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSKF92KSAgICAgICgoX3YpIDw8IF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSX1NIKQorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVJfTUsgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9USU1FUl9TSCAgICAgICAgIDE2CisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9USU1FUihfdikgICAgICAgICgoX3YpIDw8IF9fUk1FX0lOVF9ERUxBWV9USU1FUl9TSCkKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX0RJU0FCTEUgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBfX1JNRV9ETFlfREVMQVlfRElTQUJMRSAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIF9fUk1FX0FDS19QRU5ESU5HICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgX19STUVfRlVMTF9JTlRFUlJVUFRfRElTQUJMRSAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwX01LICAgICAgICAgICAweDAwMDAwYzAwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTBfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMTBfU0gpCisjZGVmaW5lIF9fUk1FX1BDSUVJRF9NSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19STUVfUENJRUlEX1NIICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBfX1JNRV9QQ0lFSUQoX3YpICAgICAgICAgICAgICAgICAoKF92KSA8PCBfX1JNRV9QQ0lFSURfU0gpCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDBfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMF9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAwKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDAwX1NIKQorI2RlZmluZSBfX1JNRV9FU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJNRV9RQ1RSTF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNmMKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMV9NSyAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDExX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDExKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDExX1NIKQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAxX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDFfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMShfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQwMV9TSCkKKyNkZWZpbmUgUFNTX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxODgwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9NSyAgICAgICAgICAgICAweDAwN2YwMDAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX1NIICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWKF92KSAgICAgICAgICAgICgoX3YpIDw8IF9fUFNTX0kyQ19DTEtfRElWX1NIKQorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRE9ORSAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIF9fUFNTX0xNRU1fUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0VOICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1BTU19MUFUxX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fUFNTX0xQVTBfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFFNX1FTRVQwX1JYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODAwMAorI2RlZmluZSBfX1JYUTBfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fUlhRMF9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19SWFEwX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfUlhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDgwCisjZGVmaW5lIF9fUlhRMV9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19SWFExX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1JYUTFfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9SWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwMDAKKyNkZWZpbmUgSFFNX1FTRVQxX1JYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzA4MAorI2RlZmluZSBIUU1fUVNFVDBfVFhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDIwCisjZGVmaW5lIF9fVFhRMF9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19UWFEwX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1RYUTBfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwYTAKKyNkZWZpbmUgX19UWFExX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1RYUTFfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fVFhRMV9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX1RYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzAyMAorI2RlZmluZSBIUU1fUVNFVDFfVFhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMGEwCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzFfUDAgICAgICAgICAgIDB4MDAwMzgwNDAKKyNkZWZpbmUgX19JQjFfMF9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMV8wX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzBfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMV9QMCAgICAgICAgICAgMHgwMDAzODBjMAorI2RlZmluZSBfX0lCMV8xX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzFfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMV9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AxICAgICAgICAgICAweDAwMDNjMDQwCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzFfUDEgICAgICAgICAgIDB4MDAwM2MwYzAKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCAgICAgICAgICAgMHgwMDAzODA2MAorI2RlZmluZSBfX0lCMl8wX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzBfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMF9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8yX1AwICAgICAgICAgICAweDAwMDM4MGUwCisjZGVmaW5lIF9fSUIyXzFfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMV9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMl8xX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgICAgICAgICAgIDB4MDAwM2MwNjAKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAgICAgICAgICAgMHgwMDAzYzBlMAorCisKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZWl0aGVyIGluIGVycm9yL21pc3NpbmcgaW4gc3BlYy4gSXRzIGF1dG8tZ2VuZXJhdGVkCisgKiBmcm9tIGhhcmQgY29kZWQgdmFsdWVzIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfTUtfRklYICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19TSF9GSVggICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0VNUEhQUkVfQVRfNEdfRklYICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIF9fU0ZQX1RYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19TRlBfUlhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBoYXJkIGNvZGVkIHZhbHVlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgbWFwcGluZyBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBtYXBwaW5nIHRhYmxlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgQkZBX0lPQzBfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0wX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MwX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMV9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTJfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0zX0lORk9fUkVHCisjZGVmaW5lIEJGQV9GV19VU0VfQ09VTlQgICAgICAgICAgICAgICAgIEhPU1RfU0VNNF9JTkZPX1JFRworCisjZGVmaW5lIENQRV9ERVBUSF9RKF9fbikgXAorCShDUEVfREVQVEhfUTAgKyAoX19uKSAqIChDUEVfREVQVEhfUTEgLSBDUEVfREVQVEhfUTApKQorI2RlZmluZSBDUEVfUUNUUkxfUShfX24pIFwKKwkoQ1BFX1FDVFJMX1EwICsgKF9fbikgKiAoQ1BFX1FDVFJMX1ExIC0gQ1BFX1FDVFJMX1EwKSkKKyNkZWZpbmUgQ1BFX1BJX1BUUl9RKF9fbikgXAorCShDUEVfUElfUFRSX1EwICsgKF9fbikgKiAoQ1BFX1BJX1BUUl9RMSAtIENQRV9QSV9QVFJfUTApKQorI2RlZmluZSBDUEVfQ0lfUFRSX1EoX19uKSBcCisJKENQRV9DSV9QVFJfUTAgKyAoX19uKSAqIChDUEVfQ0lfUFRSX1ExIC0gQ1BFX0NJX1BUUl9RMCkpCisjZGVmaW5lIFJNRV9ERVBUSF9RKF9fbikgXAorCShSTUVfREVQVEhfUTAgKyAoX19uKSAqIChSTUVfREVQVEhfUTEgLSBSTUVfREVQVEhfUTApKQorI2RlZmluZSBSTUVfUUNUUkxfUShfX24pIFwKKwkoUk1FX1FDVFJMX1EwICsgKF9fbikgKiAoUk1FX1FDVFJMX1ExIC0gUk1FX1FDVFJMX1EwKSkKKyNkZWZpbmUgUk1FX1BJX1BUUl9RKF9fbikgXAorCShSTUVfUElfUFRSX1EwICsgKF9fbikgKiAoUk1FX1BJX1BUUl9RMSAtIFJNRV9QSV9QVFJfUTApKQorI2RlZmluZSBSTUVfQ0lfUFRSX1EoX19uKSBcCisJKFJNRV9DSV9QVFJfUTAgKyAoX19uKSAqIChSTUVfQ0lfUFRSX1ExIC0gUk1FX0NJX1BUUl9RMCkpCisjZGVmaW5lIEhRTV9RU0VUX1JYUV9EUkJMX1AwKF9fbikgXAorCShIUU1fUVNFVDBfUlhRX0RSQkxfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfUlhRX0RSQkxfUDAgLSBcCisJSFFNX1FTRVQwX1JYUV9EUkJMX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9UWFFfRFJCTF9QMCArIChfX24pICogKEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAtIFwKKwlIUU1fUVNFVDBfVFhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzFfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8xX1AwIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzFfUDApKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzJfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8yX1AwIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzJfUDApKQorI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMShfX24pIFwKKwkoSFFNX1FTRVQwX1JYUV9EUkJMX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AxIC0gXAorCUhRTV9RU0VUMF9SWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfVFhRX0RSQkxfUDEgKyAoX19uKSAqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDEgLSBcCisJSFFNX1FTRVQwX1RYUV9EUkJMX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8xX1AxKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8xX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMSAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8xX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AxKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8yX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8yX1AxKSkKKworI2RlZmluZSBDUEVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgUk1FX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIENQRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorI2RlZmluZSBSTUVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKworCisvKgorICogUENJIE1TSS1YIHZlY3RvciBkZWZpbmVzCisgKi8KK2VudW0geworICAgIEJGQV9NU0lYX0NQRV9RMCA9IDAsCisgICAgQkZBX01TSVhfQ1BFX1ExID0gMSwKKyAgICBCRkFfTVNJWF9DUEVfUTIgPSAyLAorICAgIEJGQV9NU0lYX0NQRV9RMyA9IDMsCisgICAgQkZBX01TSVhfUk1FX1EwID0gNCwKKyAgICBCRkFfTVNJWF9STUVfUTEgPSA1LAorICAgIEJGQV9NU0lYX1JNRV9RMiA9IDYsCisgICAgQkZBX01TSVhfUk1FX1EzID0gNywKKyAgICBCRkFfTVNJWF9MUFVfRVJSID0gOCwKKyAgICBCRkFfTVNJWF9DVF9NQVggPSA5LAorfTsKKworLyoKKyAqIEFuZCBjb3JyZXNwb25kaW5nIGhvc3QgaW50ZXJydXB0IHN0YXR1cyBiaXQgZmllbGQgZGVmaW5lcworICovCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9FTUMgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMSAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9QU1MgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUwICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTEgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTAgICAgICAgICAgICAgICAweDAwNDAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZlUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDBmZjAwVQorCisKKy8qCisgKiBjYXRhcHVsdCBtZW1vcnkgbWFwLgorICovCisjZGVmaW5lIExMX1BHTl9IUU0wICAgICAgICAgICAgICAgICAgICAgIDB4MDA5NgorI2RlZmluZSBMTF9QR05fSFFNMSAgICAgICAgICAgICAgICAgICAgICAweDAwOTcKKyNkZWZpbmUgUFNTX1NNRU1fUEFHRV9TVEFSVAkweDgwMDAKKyNkZWZpbmUgUFNTX1NNRU1fUEdOVU0oX3BnMCwgX21hKQkoKF9wZzApICsgKChfbWEpID4+IDE1KSkKKyNkZWZpbmUgUFNTX1NNRU1fUEdPRkYoX21hKQkoKF9tYSkgJiAweDdmZmYpCisKKy8qCisgKiBFbmQgb2YgY2F0YXB1bHQgbWVtb3J5IG1hcAorICovCisKKworI2VuZGlmIC8qIF9fQkZJX0NUUkVHX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZhYnJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjY5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfRkFCUklDX0hfXworI2RlZmluZSBfX0JGSV9GQUJSSUNfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9mYWJyaWNfaDJpX21zZ3MgeworCUJGSV9GQUJSSUNfSDJJX0NSRUFURV9SRVEJPSAxLAorCUJGSV9GQUJSSUNfSDJJX0RFTEVURV9SRVEJPSAyLAorCUJGSV9GQUJSSUNfSDJJX1NFVEFVVEgJCT0gMywKK307CisKK2VudW0gYmZpX2ZhYnJpY19pMmhfbXNncyB7CisJQkZJX0ZBQlJJQ19JMkhfQ1JFQVRFX1JTUAk9IEJGQV9JMkhNKDEpLAorCUJGSV9GQUJSSUNfSTJIX0RFTEVURV9SU1AJPSBCRkFfSTJITSgyKSwKKwlCRklfRkFCUklDX0kySF9TRVRBVVRIX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9GQUJSSUNfSTJIX09OTElORQkJPSBCRkFfSTJITSg0KSwKKwlCRklfRkFCUklDX0kySF9PRkZMSU5FCQk9IEJGQV9JMkhNKDUpLAorfTsKKworc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4ICAgICAgICAgdmZfZW47CQkvKiAgdmlydHVhbCBmYWJyaWMgZW5hYmxlCSovCisJdTggICAgICAgICByc3ZkOworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQJCSovCisJd3duX3QJCXB3d247CQkvKiAgcG9ydCBuYW1lCQkJKi8KKwl3d25fdAkJbnd3bjsJCS8qICBub2RlIG5hbWUJCQkqLworfTsKKworc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgZmFicmljIGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmYWJyaWMgY3JlYXRlIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfZmFicmljX2RlbGV0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIGZhYnJpYyBoYW5kbGUJKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBmYWJyaWMgaGFuZGxlCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZhYnJpYyBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCisjZGVmaW5lIEJGSV9GQUJSSUNfQVVUSFNFQ1JFVF9MRU4JNjQKK3N0cnVjdCBiZmlfZmFicmljX3NldGF1dGhfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmL3cgaGFuZGxlIG9mIGZhYnJpYwkqLworCXU4CQlhbGdvcml0aG07CisJdTgJCWdyb3VwOworCXU4CQlzZWNyZXRbQkZJX0ZBQlJJQ19BVVRIU0VDUkVUX0xFTl07Cit9OworCit1bmlvbiBiZmlfZmFicmljX2gyaV9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yZXFfcwkqY3JlYXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7Cit9OworCit1bmlvbiBiZmlfZmFicmljX2kyaF9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yc3BfcwkqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfRkFCUklDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMwNTlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZDUElNX0hfXworI2RlZmluZSBfX0JGSV9GQ1BJTV9IX18KKworI2luY2x1ZGUgImJmaS5oIgorI2luY2x1ZGUgPHByb3RvY29sL2ZjcC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoKKyAqIEluaXRpYXRvciBtb2RlIEktVCBuZXh1cyBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV9pdG5pbV9oMmkgeworCUJGSV9JVE5JTV9IMklfQ1JFQVRFX1JFUSA9IDEsCS8qICBpLXQgbmV4dXMgY3JlYXRpb24gKi8KKwlCRklfSVROSU1fSDJJX0RFTEVURV9SRVEgPSAyLAkvKiAgaS10IG5leHVzIGRlbGV0aW9uICovCit9OworCitlbnVtIGJmaV9pdG5pbV9pMmggeworCUJGSV9JVE5JTV9JMkhfQ1JFQVRFX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9JVE5JTV9JMkhfREVMRVRFX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9JVE5JTV9JMkhfU0xFUl9FVkVOVCA9IEJGQV9JMkhNKDMpLAorfTsKKworc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmL3cgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIGNsYXNzOwkJLyogIEZDIGNsYXNzIGZvciBJTwkJICovCisJdTggICAgICAgICBzZXFfcmVjOwkvKiAgc2VxdWVuY2UgcmVjb3Zlcnkgc3VwcG9ydAkgKi8KKwl1OCAgICAgICAgIG1zZ19ubzsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBiZmEgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmY3AgcmVxdWVzdCBzdGF0dXMJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KK307CisKK3N0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGl0bmltIGhhbmRsZQkJICovCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGJmYSBoYW5kbGUgZm9yIGl0bmltCSAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZjcCByZXF1ZXN0IHN0YXR1cwkJICovCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworfTsKKworc3RydWN0IGJmaV9pdG5pbV9zbGVyX2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgYmZhIGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTE2ICAgICAgICByc3ZkOworfTsKKwordW5pb24gYmZpX2l0bmltX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgKmRlbGV0ZV9yZXE7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptc2c7Cit9OworCit1bmlvbiBiZmlfaXRuaW1faTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yc3BfcyAqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yc3BfcyAqZGVsZXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2l0bmltX3NsZXJfZXZlbnRfcyAqc2xlcl9ldmVudDsKKwlzdHJ1Y3QgYmZpX21zZ19zICAgICAgKm1zZzsKK307CisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSBJTyBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV9pb2ltX2gyaSB7CisJQkZJX0lPSU1fSDJJX0lPQUJPUlRfUkVRID0gMSwJLyogIElPIGFib3J0IHJlcXVlc3QJICovCisJQkZJX0lPSU1fSDJJX0lPQ0xFQU5VUF9SRVEgPSAyLAkvKiAgSU8gY2xlYW51cCByZXF1ZXN0CSAqLworfTsKKworZW51bSBiZmlfaW9pbV9pMmggeworCUJGSV9JT0lNX0kySF9JT19SU1AgPSBCRkFfSTJITSgxKSwJLyogIG5vbi1mcCBJTyByZXNwb25zZQkgKi8KKwlCRklfSU9JTV9JMkhfSU9BQk9SVF9SU1AgPSBCRkFfSTJITSgyKSwvKiAgQUJPUlQgcnNwCSAqLworfTsKKworLyoqCisgKiBJTyBjb21tYW5kIERJRiBpbmZvCisgKi8KK3N0cnVjdCBiZmlfaW9pbV9kaWZfcyB7CisJdTMyCWRpZl9pbmZvWzRdOworfTsKKworLyoqCisgKiBGQ1AgSU8gbWVzc2FnZXMgb3ZlcnZpZXcKKyAqCisgKiBAbm90ZQorICogLSBNYXggQ0RCIGxlbmd0aCBzdXBwb3J0ZWQgaXMgNjQgYnl0ZXMuCisgKiAtIFNDU0kgTGlua2VkIGNvbW1hbmRzIGFuZCBTQ1NJIGJpLWRpcmVjdGlvbmFsIENvbW1hbmRzIG5vdAorICogCSBzdXBwb3J0ZWQuCisgKgorICovCitzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBpb190YWc7CQkvKiAgSS9PIHRhZwkJCSAqLworCXUxNiAgICAgICAgcnBvcnRfaGRsOwkvKiAgaXRuaW0vcnBvcnQgZmlybXdhcmUgaGFuZGxlICovCisJc3RydWN0IGZjcF9jbW5kX3MgY21uZDsJCS8qICBJTyByZXF1ZXN0IGluZm8JCSAqLworCisJLyoqCisJICogU0cgZWxlbWVudHMgYXJyYXkgd2l0aGluIHRoZSBJTyByZXF1ZXN0IG11c3QgYmUgZG91YmxlIHdvcmQKKwkgKiBhbGlnbmVkLiBUaGlzIGFsaWdtZW50IGlzIHJlcXVpcmVkIHRvIG9wdGltaXplIFNHTSBzZXR1cCBmb3IgdGhlIElPLgorCSAqLworCXN0cnVjdCBiZmlfc2dlX3MgICBzZ2VzW0JGSV9TR0VfSU5MSU5FX01BWF07CisJdTggICAgICAgICBpb190aW1lb3V0OworCXU4ICAgICAgICAgZGlmX2VuOworCXU4ICAgICAgICAgcnN2ZF9hWzJdOworCXN0cnVjdCBiZmlfaW9pbV9kaWZfcyAgZGlmOworfTsKKworLyoqCisgKiAJVGhpcyB0YWJsZSBzaG93cyB2YXJpb3VzIElPIHN0YXR1cyBjb2RlcyBmcm9tIGZpcm13YXJlIGFuZCB0aGVpcgorICoJbWVhbmluZy4gSG9zdCBkcml2ZXIgY2FuIHVzZSB0aGVzZSBzdGF0dXMgY29kZXMgdG8gZnVydGhlciBwcm9jZXNzCisgKglJTyBjb21wbGV0aW9ucy4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX09LCQk6IElPIGNvbXBsZXRlZCB3aXRoIGVycm9yIGZyZWUgU0NTSSAmCisgKgkJCQkJICAgdHJhbnNwb3J0IHN0YXR1cy4KKyAqIAkJCQkJICAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZBX0lPSU1fU1RTX1NDU0lfRVJSCQk6IElPIGNvbXBsZXRlZCB3aXRoIHNjc2kgZXJyb3IuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0hPU1RfQUJPUlRFRAk6IElPIHdhcyBhYm9ydGVkIHN1Y2Nlc3NmdWxseSBkdWUgdG8KKyAqCQkJCQkgICBob3N0IHJlcXVlc3QuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfQUJPUlRFRAkJOiBJTyB3YXMgYWJvcnRlZCBzdWNjZXNzZnVsbHkKKyAqCQkJCQkgICBpbnRlcm5hbGx5IGJ5IGYvdy4KKyAqIAkJCQkJICAgLSBpby10YWcgY2Fubm90IGJlIHJldXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19USU1FRE9VVAk6IElPIHRpbWVkb3V0IGFuZCBBQlRTL1JSUSBpcyBoYXBwZW5pbmcKKyAqCQkJCQkgICBpbiB0aGUgZmlybXdhcmUgYW5kCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQJOiBGaXJtd2FyZSBjb3VsZCBub3QgcmVjb3ZlciB0aGUgSU8KKyAqCQkJCQkgIHdpdGggc2VxdWVuY2UgbGV2ZWwgZXJyb3IKKyAqIAkJCQkJICBsb2dpYyBhbmQgaGVuY2UgaG9zdCBuZWVkcyB0byByZXRyeQorICoJCQkJCSAgdGhpcyBJTyB3aXRoIGEgZGlmZmVyZW50IElPIHRhZworICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX05FWFVTX0FCT1JUCTogU2Vjb25kIExldmVsIEVycm9yIFJlY292ZXJ5IGZyb20gaG9zdAorICoJCQkJCSAgaXMgcmVxdWlyZWQgYmVjYXVzZSAyIGNvbnNlY3V0aXZlIEFCVFMKKyAqCQkJCQkgIHRpbWVkb3V0IGFuZCBob3N0IG5lZWRzIGxvZ291dCBhbmQKKyAqCQkJCQkgIHJlLWxvZ2luIHdpdGggdGhlIHRhcmdldAorICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1VOREVSUlVOCTogSU8gY29tcGxldGVkIHdpdGggU0NTSSBzdGF0dXMgZ29vZCwKKyAqCQkJCQkgIGJ1dCB0aGUgZGF0YSB0cmFuZmVycmVkIGlzIGxlc3MgdGhhbgorICoJCQkJCSAgdGhlIGZjcCBkYXRhIGxlbmd0aCBpbiB0aGUgY29tbWFuZC4KKyAqCQkJCQkgIGV4LiBTQ1NJIElOUVVJUlkgd2hlcmUgdHJhbnNmZXJyZWQKKyAqCQkJCQkgIGRhdGEgbGVuZ3RoIGFuZCByZXNpZHVlIGNvdW50IGluIEZDUAorICoJCQkJCSAgcmVzcG9uc2UgYWNjb3VudHMgZm9yIHRvdGFsIGZjcC1kbAorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19PVkVSUlVOCTogSU8gY29tcGxldGVkIHdpdGggU0NTSSBzdGF0dXMgZ29vZCwKKyAqCQkJCQkgIGJ1dCB0aGUgZGF0YSB0cmFuc2VycmVkIGlzIG1vcmUgdGhhbgorICoJCQkJCSAgZmNwIGRhdGEgbGVuZ3RoIGluIHRoZSBjb21tYW5kLiBleC4KKyAqCQkJCQkgIFRBUEUgSU9zIHdoZXJlIGJsb2NrcyBjYW4gb2YgdW5lcXVhbAorICoJCQkJCSAgbGVuZ3Rocy4KKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfUkVTX0ZSRUUJOiBGaXJtd2FyZSBoYXMgY29tcGxldGVkIHVzaW5nIGlvLXRhZworICoJCQkJCSAgZHVyaW5nIGFib3J0IHByb2Nlc3MKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfUFJPVE9fRVJSCTogRmlybXdhcmUgZGV0ZWN0ZWQgYSBwcm90b2NvbCBlcnJvci4KKyAqCQkJCQkgIGV4IHRhcmdldCBzZW50IG1vcmUgZGF0YSB0aGFuCisgKgkJCQkJICByZXF1ZXN0ZWQsIG9yIHRoZXJlIHdhcyBkYXRhIGZyYW1lCisgKgkJCQkJICBsb3NzIGFuZCBvdGhlciByZWFzb25zCisgKiAJCQkJCSAgLSBpby10YWcgY2Fubm90IGJlIHVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfRElGX0VSUgk6IEZpcndtYXJlIGRldGVjdGVkIERJRiBlcnJvci4gZXg6IERJRgorICogCQkJCQkgIENSQyBlcnIgb3IgUmVmIFRhZyBlcnIgb3IgQXBwIHRhZyBlcnIuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZBX0lPSU1fU1RTX1RTS19NR1RfQUJPUlQJOiBJTyB3YXMgYWJvcnRlZCBiZWNhdXNlIG9mIFRhc2sKKyAqCQkJCQkgIE1hbmFnZW1lbnQgY29tbWFuZCBmcm9tIHRoZSBob3N0CisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1VUQUcJCTogRmlybXdhcmUgZG9lcyBub3Qga25vdyBhYm91dCB0aGlzCisgKgkJCQkJICBpb190YWcuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqLworZW51bSBiZmlfaW9pbV9zdGF0dXMgeworCUJGSV9JT0lNX1NUU19PSyA9IDAsCisJQkZJX0lPSU1fU1RTX0hPU1RfQUJPUlRFRCA9IDEsCisJQkZJX0lPSU1fU1RTX0FCT1JURUQgPSAyLAorCUJGSV9JT0lNX1NUU19USU1FRE9VVCA9IDMsCisJQkZJX0lPSU1fU1RTX1JFU19GUkVFID0gNCwKKwlCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQgPSA1LAorCUJGSV9JT0lNX1NUU19QUk9UT19FUlIgPSA2LAorCUJGSV9JT0lNX1NUU19VVEFHID0gNywKKwlCRklfSU9JTV9TVFNfUEFUSFRPViA9IDgsCit9OworCisjZGVmaW5lIEJGSV9JT0lNX1NOU0xFTgkoMjU2KQorLyoqCisgKiBJL08gcmVzcG9uc2UgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkgCSAqLworCXUxNiAgICAgICAgaW9fdGFnOwkJLyogIGNvbXBsZXRlZCBJTyB0YWcJCSAqLworCXUxNiAgICAgICAgYmZhX3Jwb3J0X2huZGw7CS8qICByZWxlYXRlZCBycG9ydCBoYW5kbGUJICovCisJdTggICAgICAgICBpb19zdGF0dXM7CS8qICBJTyBjb21wbGV0aW9uIHN0YXR1cwkgKi8KKwl1OCAgICAgICAgIHJldXNlX2lvX3RhZzsJLyogIElPIHRhZyBjYW4gYmUgcmV1c2VkICAgICAgICAqLworCXUxNglhYm9ydF90YWc7CS8qICBob3N0IGFib3J0IHJlcXVlc3QgdGFnICAgICAgKi8KKwl1OAkJc2NzaV9zdGF0dXM7CS8qICBzY3NpIHN0YXR1cyBmcm9tIHRhcmdldAkgKi8KKwl1OAkJc25zX2xlbjsJLyogIHNjc2kgc2Vuc2UgbGVuZ3RoCQkgKi8KKwl1OAkJcmVzaWRfZmxhZ3M7CS8qICBJTyByZXNpZHVlIGZsYWdzCQkgKi8KKwl1OAkJcnN2ZF9hOworCXUzMglyZXNpZHVlOwkvKiAgSU8gcmVzaWR1YWwgbGVuZ3RoIGluIGJ5dGVzICovCisJdTMyCXJzdmRfYlszXTsKK307CisKK3N0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICovCisJdTE2ICAgICAgICBpb190YWc7ICAgICAgICAgLyogIEkvTyB0YWcgICAgICAgICAgICAqLworCXUxNiAgICAgICAgYWJvcnRfdGFnOyAgICAgIC8qICB1bmlxdWUgcmVxdWVzdCB0YWcgKi8KK307CisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpbnRlcmZhY2UgZGVmaW5lcy4KKyAqLworCitlbnVtIGJmaV90c2tpbV9oMmkgeworCUJGSV9UU0tJTV9IMklfVE1fUkVRICAgID0gMSwgLyogIHRhc2stbWdtdCBjb21tYW5kICAgICAgICAgKi8KKwlCRklfVFNLSU1fSDJJX0FCT1JUX1JFUSA9IDIsIC8qICB0YXNrLW1nbXQgY29tbWFuZCAgICAgICAgICovCit9OworCitlbnVtIGJmaV90c2tpbV9pMmggeworCUJGSV9UU0tJTV9JMkhfVE1fUlNQID0gQkZBX0kySE0oMSksCit9OworCitzdHJ1Y3QgYmZpX3Rza2ltX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7ICAgICAgICAgICAgIC8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXUxNiAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgdGFnICAgICAgICAqLworCXUxNiAgICAgICAgaXRuX2ZoZGw7ICAgICAgIC8qICBpdG4gZmlybXdhcmUgaGFuZGxlICAgICAgICAqLworCWx1bl90ICAgICAgICAgICBsdW47ICAgICAgICAgICAgLyogIExVIG51bWJlciAgICAgICAgICAgICAgICAgICovCisJdTggICAgICAgICB0bV9mbGFnczsgICAgICAgLyogIHNlZSBmY3BfdG1fY21uZF90ICAgICAgICAgICovCisJdTggICAgICAgICB0X3NlY3M7ICAgICAgICAgLyogIFRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcyAgICovCisJdTggICAgICAgICByc3ZkWzJdOworfTsKKworc3RydWN0IGJmaV90c2tpbV9hYm9ydHJlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7ICAgICAgICAgICAgIC8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXUxNiAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgdGFnICAgICAgICAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK2VudW0gYmZpX3Rza2ltX3N0YXR1cyB7CisJLyoKKwkgKiBGb2xsb3dpbmcgYXJlIEZDUC00IHNwZWMgZGVmaW5lZCBzdGF0dXMgY29kZXMsCisJICogKipETyBOT1QgQ0hBTkdFIFRIRU0gKioKKwkgKi8KKwlCRklfVFNLSU1fU1RTX09LICAgICAgID0gMCwKKwlCRklfVFNLSU1fU1RTX05PVF9TVVBQID0gNCwKKwlCRklfVFNLSU1fU1RTX0ZBSUxFRCAgID0gNSwKKworCS8qKgorCSAqIERlZmluZWQgYnkgQkZBCisJICovCisJQkZJX1RTS0lNX1NUU19USU1FT1VUICA9IDEwLCAgICAvKiAgVE0gcmVxdWVzdCB0aW1lZG91dCAgICAgKi8KKwlCRklfVFNLSU1fU1RTX0FCT1JURUQgID0gMTEsICAgIC8qICBBYm9ydGVkIG9uIGhvc3QgcmVxdWVzdCAqLworfTsKKworc3RydWN0IGJmaV90c2tpbV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIHRza190YWc7CS8qICB0YXNrIG1nbXQgY21uZCB0YWcJCSAqLworCXU4ICAgICAgICAgdHNrX3N0YXR1czsJLyogIEByZWYgYmZpX3Rza2ltX3N0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9GQ1BJTV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTk5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3hwLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZDWFBfSF9fCisjZGVmaW5lIF9fQkZJX0ZDWFBfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2ZjeHBfaDJpIHsKKwlCRklfRkNYUF9IMklfU0VORF9SRVEgPSAxLAorfTsKKworZW51bSBiZmlfZmN4cF9pMmggeworCUJGSV9GQ1hQX0kySF9TRU5EX1JTUCA9IEJGQV9JMkhNKDEpLAorfTsKKworI2RlZmluZSBCRkFfRkNYUF9NQVhfU0dFUwkyCisKKy8qKgorICogRkNYUCBzZW5kIHJlcXVlc3Qgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXUxNiAgICAgICAgZmN4cF90YWc7CS8qICBkcml2ZXIgcmVxdWVzdCB0YWcJCSAgICAqLworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHNlbmQgZnJhbWUgc2l6ZQkgICAgKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUJICAgICovCisJdTE2ICAgICAgICBycG9ydF9md19obmRsOwkvKiAgRlcgSGFuZGxlIGZvciB0aGUgcmVtb3RlIHBvcnQgICovCisJdTggICAgICAgICBjbGFzczsJCS8qICBGQyBjbGFzcyB1c2VkIGZvciByZXEvcnNwCSAgICAqLworCXU4ICAgICAgICAgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY3MsIDAtbm8gcmVzcG9uc2UgKi8KKwl1OCAgICAgICAgIGN0czsJCS8qICBjb250aW51ZSBzZXF1ZW5jZQkJICAgICovCisJdTggICAgICAgICBscF90YWc7CQkvKiAgbHBvcnQgdGFnCQkJICAgICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CQkvKiAgcmVxdWVzdCBGQyBoZWFkZXIgc3RydWN0dXJlICAgICovCisJdTMyICAgICAgICByZXFfbGVuOwkvKiAgcmVxdWVzdCBwYXlsb2FkIGxlbmd0aAkgICAgKi8KKwl1MzIgICAgICAgIHJzcF9tYXhsZW47CS8qICBtYXggcmVzcG9uc2UgbGVuZ3RoIGV4cGVjdGVkICAgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgcmVxX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CS8qICByZXF1ZXN0IGJ1ZiAgICAqLworCXN0cnVjdCBiZmlfc2dlX3MgICByc3Bfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsJLyogIHJlc3BvbnNlIGJ1ZiAgICovCit9OworCisvKioKKyAqIEZDWFAgc2VuZCByZXNwb25zZSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTE2ICAgICAgICBmY3hwX3RhZzsJLyogIHNlbmQgcmVxdWVzdCB0YWcJCSAgICAqLworCXU4ICAgICAgICAgcmVxX3N0YXR1czsJLyogIHJlcXVlc3Qgc3RhdHVzCQkgICAgKi8KKwl1OCAgICAgICAgIHJzdmQ7CisJdTMyICAgICAgICByc3BfbGVuOwkvKiAgYWN0dWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KKwl1MzIgICAgICAgIHJlc2lkdWVfbGVuOwkvKiAgcmVzaWR1YWwgcmVzcG9uc2UgbGVuZ3RoCSAgICAqLworCXN0cnVjdCBmY2hzX3MgICBmY2hzOwkJLyogIHJlc3BvbnNlIEZDIGhlYWRlciBzdHJ1Y3R1cmUgICAqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0ZDWFBfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2ZTljMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSU9DX0hfXworI2RlZmluZSBfX0JGSV9JT0NfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfaW9jX2gyaV9tc2dzIHsKKwlCRklfSU9DX0gySV9FTkFCTEVfUkVRIAkJPSAxLAorCUJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRIAk9IDIsCisJQkZJX0lPQ19IMklfR0VUQVRUUl9SRVEgCT0gMywKKwlCRklfSU9DX0gySV9EQkdfU1lOQwkgCT0gNCwKKwlCRklfSU9DX0gySV9EQkdfRFVNUAkgCT0gNSwKK307CisKK2VudW0gYmZpX2lvY19pMmhfbXNncyB7CisJQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZCT0gQkZBX0kySE0oMSksCisJQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWSAJPSBCRkFfSTJITSgyKSwKKwlCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZIAk9IEJGQV9JMkhNKDMpLAorCUJGSV9JT0NfSTJIX1JFQURZX0VWRU5UIAk9IEJGQV9JMkhNKDQpLAorCUJGSV9JT0NfSTJIX0hCRUFUCQk9IEJGQV9JMkhNKDUpLAorfTsKKworLyoqCisgKiBCRklfSU9DX0gySV9HRVRBVFRSX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zCW1oOworCXVuaW9uIGJmaV9hZGRyX3UJYXR0cl9hZGRyOworfTsKKworc3RydWN0IGJmaV9pb2NfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgbWZnX3d3bjsKKwltYWNfdAkJbWZnX21hYzsKKwl1MTYJcnN2ZF9hOworCWNoYXIgICAgICAgICAgICBicmNkX3NlcmlhbG51bVtTVFJTWihCRkFfTUZHX1NFUklBTE5VTV9TSVpFKV07CisJdTggICAgICAgICBwY2llX2dlbjsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXNfb3JpZzsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXM7CisJdTggICAgICAgICByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMgKi8KKwl1MzIgICAgICAgIGFkYXB0ZXJfcHJvcDsJLyogIGFkYXB0ZXIgcHJvcGVydGllcyAgICAgKi8KKwl1MTYgICAgICAgIG1heGZyc2l6ZTsJLyogIG1heCByZWNlaXZlIGZyYW1lIHNpemUgKi8KKwljaGFyICAgICAgICAgCWFzaWNfcmV2OworCXU4ICAgICAgICAgcnN2ZF9iOworCWNoYXIgICAgICAgICAgICBmd192ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIG9wdHJvbV92ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CisJc3RydWN0IGJmYV9tZmdfdnBkX3MJdnBkOworfTsKKworLyoqCisgKiBCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXBseV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1OAkJc3RhdHVzOwkvKiAgY2ZnIHJlcGx5IHN0YXR1cyAgICAgICAgICAgKi8KKwl1OAkJcnN2ZFszXTsKK307CisKKy8qKgorICogRmlybXdhcmUgbWVtb3J5IHBhZ2Ugb2Zmc2V0cworICovCisjZGVmaW5lIEJGSV9JT0NfU01FTV9QRzBfQ0IJKDB4NDApCisjZGVmaW5lIEJGSV9JT0NfU01FTV9QRzBfQ1QJKDB4MTgwKQorCisvKioKKyAqIEZpcm13YXJlIHRyYWNlIG9mZnNldAorICovCisjZGVmaW5lIEJGSV9JT0NfVFJDX09GRgkJKDB4NGIwMCkKKyNkZWZpbmUgQkZJX0lPQ19UUkNfRU5UUwkyNTYKKworI2RlZmluZSBCRklfSU9DX0ZXX1NJR05BVFVSRQkoMHhiZmFkYmZhZCkKKyNkZWZpbmUgQkZJX0lPQ19NRDVTVU1fU1oJNAorc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgeworCXUzMiAgICAgICAgc2lnbmF0dXJlOwkvKiAgY29uc3RhbnQgc2lnbmF0dXJlICovCisJdTMyICAgICAgICByc3ZkX2E7CisJdTMyICAgICAgICBleGVjOwkJLyogIGV4ZWMgdmVjdG9yICAgICAgICAqLworCXUzMiAgICAgICAgcGFyYW07CQkvKiAgcGFyYW1ldGVycyAgICAgICAgICovCisJdTMyICAgICAgICByc3ZkX2JbNF07CisJdTMyICAgICAgICBtZDVzdW1bQkZJX0lPQ19NRDVTVU1fU1pdOworfTsKKworLyoqCisgKiAgQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY19yZHlfZXZlbnRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJCS8qICBjb21tb24gbXNnIGhlYWRlciAqLworCXU4ICAgICAgICAgaW5pdF9zdGF0dXM7CS8qICBpbml0IGV2ZW50IHN0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKK3N0cnVjdCBiZmlfaW9jX2hiZWF0X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MzIJICAgaGJfY291bnQ7CS8qICBjdXJyZW50IGhlYXJ0IGJlYXQgY291bnQJKi8KK307CisKKy8qKgorICogSU9DIGhhcmR3YXJlL2Zpcm13YXJlIHN0YXRlCisgKi8KK2VudW0gYmZpX2lvY19zdGF0ZSB7CisJQkZJX0lPQ19VTklOSVQgCSA9IDAsCQkvKiAgbm90IGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAqLworCUJGSV9JT0NfSU5JVElORyAJID0gMSwJLyogIGgvdyBpcyBiZWluZyBpbml0aWFsaXplZCAgICAgICAgKi8KKwlCRklfSU9DX0hXSU5JVCAJID0gMiwJCS8qICBoL3cgaXMgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICovCisJQkZJX0lPQ19DRkcgCSA9IDMsCQkvKiAgSU9DIGNvbmZpZ3VyYXRpb24gaW4gcHJvZ3Jlc3MgICAqLworCUJGSV9JT0NfT1AgCQkgPSA0LAkvKiAgSU9DIGlzIG9wZXJhdGlvbmFsICAgICAgICAgICAgICAqLworCUJGSV9JT0NfRElTQUJMSU5HIAkgPSA1LAkvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkICAgICAgICAgICAqLworCUJGSV9JT0NfRElTQUJMRUQgCSA9IDYsCS8qICBJT0MgaXMgZGlzYWJsZWQgICAgICAgICAgICAgICAgICovCisJQkZJX0lPQ19DRkdfRElTQUJMRUQgPSA3LAkvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkO3RyYW5zaWVudCAqLworCUJGSV9JT0NfSEJGQUlMICAgICAgID0gOCwJLyogIElPQyBoZWFydC1iZWF0IGZhaWx1cmUgICAgICAgICAgKi8KKwlCRklfSU9DX01FTVRFU1QgICAgICA9IDksCS8qICBJT0MgaXMgZG9pbmcgbWVtdGVzdCAgICAgICAgICAgICovCit9OworCisjZGVmaW5lIEJGSV9JT0NfRU5ESUFOX1NJRyAgMHgxMjM0NTY3OAorCitlbnVtIHsKKwlCRklfQURBUFRFUl9UWVBFX0ZDICAgPSAweDAxLAkJLyogIEZDIGFkYXB0ZXJzICAgICAgICAgICAqLworCUJGSV9BREFQVEVSX1RZUEVfTUsgICA9IDB4MGYwMDAwLAkvKiAgYWRhcHRlciB0eXBlIG1hc2sgICAgICovCisJQkZJX0FEQVBURVJfVFlQRV9TSCAgID0gMTYsCSAgICAgICAgLyogIGFkYXB0ZXIgdHlwZSBzaGlmdCAgICAqLworCUJGSV9BREFQVEVSX05QT1JUU19NSyA9IDB4ZmYwMCwJCS8qICBudW1iZXIgb2YgcG9ydHMgbWFzayAgKi8KKwlCRklfQURBUFRFUl9OUE9SVFNfU0ggPSA4LAkgICAgICAgIC8qICBudW1iZXIgb2YgcG9ydHMgc2hpZnQgKi8KKwlCRklfQURBUFRFUl9TUEVFRF9NSyAgPSAweGZmLAkJLyogIGFkYXB0ZXIgc3BlZWQgbWFzayAgICAqLworCUJGSV9BREFQVEVSX1NQRUVEX1NIICA9IDAsCSAgICAgICAgLyogIGFkYXB0ZXIgc3BlZWQgc2hpZnQgICAqLworCUJGSV9BREFQVEVSX1BST1RPICAgICA9IDB4MTAwMDAwLAkvKiAgcHJvdG90eXBlIGFkYXBhdGVycyAgICovCisJQkZJX0FEQVBURVJfVFRWICAgICAgID0gMHgyMDAwMDAsCS8qICBUVFYgZGVidWcgY2FwYWJsZSAgICAgKi8KKwlCRklfQURBUFRFUl9VTlNVUFAgICAgPSAweDQwMDAwMCwJLyogIHVua25vd24gYWRhcHRlciB0eXBlICAqLworfTsKKworI2RlZmluZSBCRklfQURBUFRFUl9HRVRQKF9fcHJvcCxfX2FkYXBfcHJvcCkgICAgICAgICAgCQlcCisgICAgKCgoX19hZGFwX3Byb3ApICYgQkZJX0FEQVBURVJfICMjIF9fcHJvcCAjIyBfTUspID4+ICAgICAgICAgXAorICAgICBCRklfQURBUFRFUl8gIyMgX19wcm9wICMjIF9TSCkKKyNkZWZpbmUgQkZJX0FEQVBURVJfU0VUUChfX3Byb3AsIF9fdmFsKSAgICAgICAgIAkJXAorICAgICgoX192YWwpIDw8IEJGSV9BREFQVEVSXyAjIyBfX3Byb3AgIyMgX1NIKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19QUk9UTyhfX2FkYXBfdHlwZSkgICAJCQlcCisgICAgKChfX2FkYXBfdHlwZSkgJiBCRklfQURBUFRFUl9QUk9UTykKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfVFRWKF9fYWRhcF90eXBlKSAgICAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfVFRWKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19VTlNVUFAoX19hZGFwX3R5cGUpICAJCQlcCisgICAgKChfX2FkYXBfdHlwZSkgJiBCRklfQURBUFRFUl9VTlNVUFApCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoX19hZGFwX3R5cGUpICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX19hZGFwX3R5cGUpICYgKEJGSV9BREFQVEVSX1RUViB8IEJGSV9BREFQVEVSX1BST1RPIHwgICAgIFwKKwkJCUJGSV9BREFQVEVSX1VOU1VQUCkpCisKKy8qKgorICogQkZJX0lPQ19IMklfRU5BQkxFX1JFUSAmIEJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zCW1oOworCXU4CQkJaW9jX2NsYXNzOworCXU4ICAgICAgICAgCXJzdmRbM107Cit9OworCisvKioKKyAqIEJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWSAmIEJGSV9JT0NfSTJIX0RJU0FCTEVfUkVQTFkgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NfY3RybF9yZXBseV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZW5hYmxlL2Rpc2FibGUgc3RhdHVzICovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworI2RlZmluZSBCRklfSU9DX01TR1NaICAgOAorLyoqCisgKiBIMkkgTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zIAltaDsKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGVuYWJsZV9yZXE7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBkaXNhYmxlX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcV9zIGdldGF0dHJfcmVxOworCXUzMiAgICAgICAJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisvKioKKyAqIEkySCBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAJbWg7CisJc3RydWN0IGJmaV9pb2NfcmR5X2V2ZW50X3MgCXJkeV9ldmVudDsKKwl1MzIgICAgICAgCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3NjBkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9JT0NGQ19IX18KKyNkZWZpbmUgX19CRklfSU9DRkNfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2Jvb3QuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2lvY2ZjX2gyaV9tc2dzIHsKKwlCRklfSU9DRkNfSDJJX0NGR19SRVEgCQk9IDEsCisJQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRIAk9IDIsCisJQkZJX0lPQ0ZDX0gySV9DTEVBUl9TVEFUU19SRVEJPSAzLAorCUJGSV9JT0NGQ19IMklfU0VUX0lOVFJfUkVRIAk9IDQsCisJQkZJX0lPQ0ZDX0gySV9VUERBVEVRX1JFUSA9IDUsCit9OworCitlbnVtIGJmaV9pb2NmY19pMmhfbXNncyB7CisJQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFkJCT0gQkZBX0kySE0oMSksCisJQkZJX0lPQ0ZDX0kySF9HRVRfU1RBVFNfUlNQIAk9IEJGQV9JMkhNKDIpLAorCUJGSV9JT0NGQ19JMkhfQ0xFQVJfU1RBVFNfUlNQCT0gQkZBX0kySE0oMyksCisJQkZJX0lPQ0ZDX0kySF9VUERBVEVRX1JTUCA9IEJGQV9JMkhNKDUpLAorfTsKKworc3RydWN0IGJmaV9pb2NmY19jZmdfcyB7CisJdTggICAgICAgICBudW1fY3FzOyAJLyogIE51bWJlciBvZiBDUXMgdG8gYmUgdXNlZCAgICAgKi8KKwl1OCAgICAgICAgIHNlbnNlX2J1Zl9sZW47CS8qICBTQ1NJIHNlbnNlIGxlbmd0aCAgICAgICAgICAgICovCisJdTggICAgICAgICB0cnVua19lbmFibGVkOwkvKiAgcG9ydCB0cnVua2luZyBlbmFibGVkICAgICAgICAqLworCXU4ICAgICAgICAgdHJ1bmtfcG9ydHM7CS8qICB0cnVuayBwb3J0cyBiaXQgbWFwICAgICAgICAgICovCisJdTMyICAgICAgICBlbmRpYW5fc2lnOwkvKiAgZW5kaWFuIHNpZ25hdHVyZSBvZiBob3N0ICAgICAqLworCisJLyoqCisJICogUmVxdWVzdCBhbmQgcmVzcG9uc2UgY2lyY3VsYXIgcXVldWUgYmFzZSBhZGRyZXNzZXMsIHNpemUgYW5kCisJICogc2hhZG93IGluZGV4IHBvaW50ZXJzLgorCSAqLworCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9zaGFkb3dfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1MTYgICAgcmVxX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisJdW5pb24gYmZpX2FkZHJfdSAgcnNwX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJdW5pb24gYmZpX2FkZHJfdSAgcnNwX3NoYWRvd19waVtCRklfSU9DX01BWF9DUVNdOworCXUxNiAgICByc3BfY3FfZWxlbXNbQkZJX0lPQ19NQVhfQ1FTXTsKKworCXVuaW9uIGJmaV9hZGRyX3UgIHN0YXRzX2FkZHI7CS8qICBETUEtYWJsZSBhZGRyZXNzIGZvciBzdGF0cwkgICovCisJdW5pb24gYmZpX2FkZHJfdSAgY2ZncnNwX2FkZHI7CS8qICBjb25maWcgcmVzcG9uc2UgZG1hIGFkZHJlc3MgICovCisJdW5pb24gYmZpX2FkZHJfdSAgaW9pbV9zbnNiYXNlOyAgLyogIElPIHNlbnNlIGJ1ZmZlciBiYXNlIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zIGludHJfYXR0cjsgLyogIElPQyBpbnRlcnJ1cHQgYXR0cmlidXRlcyAqLworfTsKKworLyoqCisgKiBCb290IHRhcmdldCB3d24gaW5mb3JtYXRpb24gZm9yIHRoaXMgcG9ydC4gVGhpcyBjb250YWlucyBlaXRoZXIgdGhlIHN0b3JlZAorICogb3IgZGlzY292ZXJlZCBib290IHRhcmdldCBwb3J0IHd3bnMgZm9yIHRoZSBwb3J0LgorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX2Jvb3R3d25zIHsKKwl3d25fdAkJd3duW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKKwl1OAkJbnd3bnM7CisJdTgJCXJzdmRbN107Cit9OworCitzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zIHsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJZndjZmc7CisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcwlpbnRyX2F0dHI7CisJc3RydWN0IGJmaV9pb2NmY19ib290d3ducwlib290d3duczsKK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9DRkdfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIGlvY19jZmdfZG1hX2FkZHI7Cit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfQ0ZHX1JFUExZIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY19jZmdfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTggICAgICAgICBjZmdfc3VjY2VzczsJLyogIGNmZyByZXBseSBzdGF0dXMgICAgICAgICAgICovCisJdTggICAgICAgICBscHVfYm07CQkvKiAgTFBVcyBhc3NpZ25lZCBmb3IgdGhpcyBJT0MgKi8KKwl1OCAgICAgICAgIHJzdmRbMl07Cit9OworCisvKioKKyAqICBCRklfSU9DRkNfSDJJX0dFVF9TVEFUU19SRVEgJiBCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUSBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBtc2cgaGVhZGVyICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5ICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0kySF9HRVRfU1RBVFNfUlNQICYgQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1AgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcmVwbHkgc3RhdHVzICAgICAgICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkgICAgICAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4CQljb2FsZXNjZTsJLyogIGVuYWJsZSBpbnRyIGNvYWxlc2NpbmcqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MTYJZGVsYXk7CQkvKiAgZGVsYXkgdGltZXIgMC4uMTEyNXVzICAqLworCXUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSB0aW1lciAwLi4yMjV1cyAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1MzIgcmVxcV9iYTsJCQkvKiAgcmVxcSBiYXNlIGFkZHIgICAgICAgICovCisJdTMyIHJzcHFfYmE7CQkJLyogIHJzcHEgYmFzZSBhZGRyICAgICAgICAqLworCXUzMiByZXFxX3NjaTsJCQkvKiAgcmVxcSBzaGFkb3cgY2kgICAgICAgICovCisJdTMyIHJzcHFfc3BpOwkJCS8qICByc3BxIHNoYWRvdyBwaSAgICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0kySF9VUERBVEVRX1JTUCBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgdXBkYXRlcSAgc3RhdHVzICAgICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworLyoqCisgKiBIMkkgTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY2ZjX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgCQltaDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyAJY2ZnX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX2dldDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX2NscjsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MgdXBkYXRlcV9yZXE7CisJdTMyICAgICAgIAkJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisvKioKKyAqIEkySCBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jZmNfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIAkJbWg7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVwbHlfcyAJCWNmZ19yZXBseTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JzcF9zIHN0YXRzX2dldF9yc3A7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyBzdGF0c19jbHJfcnNwOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yc3BfcyB1cGRhdGVxX3JzcDsKKwl1MzIgICAgICAgCQkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9JT0NGQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwMTA2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0xQT1JUX0hfXworI2RlZmluZSBfX0JGSV9MUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2xwb3J0X2gyaV9tc2dzIHsKKwlCRklfTFBPUlRfSDJJX0NSRUFURV9SRVEgPSAxLAorCUJGSV9MUE9SVF9IMklfREVMRVRFX1JFUSA9IDIsCit9OworCitlbnVtIGJmaV9scG9ydF9pMmhfbXNncyB7CisJQkZJX0xQT1JUX0kySF9DUkVBVEVfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX0xQT1JUX0kySF9ERUxFVEVfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX0xQT1JUX0kySF9PTkxJTkUJICA9IEJGQV9JMkhNKDMpLAorCUJGSV9MUE9SVF9JMkhfT0ZGTElORQkgID0gQkZBX0kySE0oNCksCit9OworCisjZGVmaW5lIEJGSV9MUE9SVF9NQVhfU1lOTkFNRQk2NAorCitlbnVtIGJmaV9scG9ydF9yb2xlX2UgeworCUJGSV9MUE9SVF9ST0xFX0ZDUElNCT0gMSwKKwlCRklfTFBPUlRfUk9MRV9GQ1BUTQk9IDIsCisJQkZJX0xQT1JUX1JPTEVfSVBGQwk9IDQsCit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2NyZWF0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYJZmFicmljX2Z3aGRsOwkvKiAgcGFyZW50IGZhYnJpYyBpbnN0YW5jZQkqLworCXU4CQlyb2xlczsJCS8qICBscG9ydCBGQy00IHJvbGVzCQkqLworCXU4CQlyc3ZkOworCXd3bl90CQlwd3duOwkJLyogIHBvcnQgbmFtZQkJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSBuYW1lCQkJKi8KKwl1OAkJc3ltbmFtZVtCRklfTFBPUlRfTUFYX1NZTk5BTUVdOworfTsKKworc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgbHBvcnQgY3JlYXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBscG9ydCBoYW5kbGUJKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2RlbGV0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IGxwb3J0IGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBscG9ydCBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCit1bmlvbiBiZmlfbHBvcnRfaDJpX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7Cit9OworCit1bmlvbiBiZmlfbHBvcnRfaTJoX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfTFBPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0YjBlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9MUFNfSF9fCisjZGVmaW5lIF9fQkZJX0xQU19IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2xwc19oMmlfbXNncyB7CisJQkZJX0xQU19IMklfTE9HSU5fUkVRCT0gMSwKKwlCRklfTFBTX0gySV9MT0dPVVRfUkVRCT0gMiwKK307CisKK2VudW0gYmZpX2xwc19pMmhfbXNncyB7CisJQkZJX0xQU19IMklfTE9HSU5fUlNQCT0gQkZBX0kySE0oMSksCisJQkZJX0xQU19IMklfTE9HT1VUX1JTUAk9IEJGQV9JMkhNKDIpLAorfTsKKworc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlhbHBhOworCXUxNglwZHVfc2l6ZTsKKwl3d25fdAkJcHd3bjsKKwl3d25fdAkJbnd3bjsKKwl1OAkJZmRpc2M7CisJdTgJCWF1dGhfZW47CisJdTgJCXJzdmRbMl07Cit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4CQlscF90YWc7CisJdTgJCXN0YXR1czsKKwl1OAkJbHNyanRfcnNuOworCXU4CQlsc3JqdF9leHBsOworCXd3bl90CQlwb3J0X25hbWU7CisJd3duX3QJCW5vZGVfbmFtZTsKKwl1MTYJYmJfY3JlZGl0OworCXU4CQlmX3BvcnQ7CisJdTgJCW5waXZfZW47CisJdTMyCWxwX3BpZCA6IDI0OworCXUzMglhdXRoX3JlcSA6IDg7CisJbWFjX3QJCWxwX21hYzsKKwltYWNfdAkJZmNmX21hYzsKKwl1OAkJZXh0X3N0YXR1czsKKwl1OCAgCWJyY2Rfc3dpdGNoOy8qICBhdHRhY2hlZCBwZWVyIGlzIGJyY2Qgc3dpdGNoCSovCit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlyc3ZkWzNdOworCXd3bl90CQlwb3J0X25hbWU7Cit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlzdGF0dXM7CisJdTgJCXJzdmRbMl07Cit9OworCit1bmlvbiBiZmlfbHBzX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MJCSptc2c7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKmxvZ2luX3JlcTsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcmVxX3MJKmxvZ291dF9yZXE7Cit9OworCit1bmlvbiBiZmlfbHBzX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcwkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcwkqbG9naW5fcnNwOworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcwkqbG9nb3V0X3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9MUFNfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wb3J0LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRklfUE9SVF9IX18KKyNkZWZpbmUgX19CRklfUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9wb3J0X2gyaSB7CisJQkZJX1BPUlRfSDJJX0VOQUJMRV9SRVEJCT0gKDEpLAorCUJGSV9QT1JUX0gySV9ESVNBQkxFX1JFUQk9ICgyKSwKKwlCRklfUE9SVF9IMklfR0VUX1NUQVRTX1JFUQk9ICgzKSwKKwlCRklfUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRCT0gKDQpLAorfTsKKworZW51bSBiZmlfcG9ydF9pMmggeworCUJGSV9QT1JUX0kySF9FTkFCTEVfUlNQCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9QT1JUX0kySF9ESVNBQkxFX1JTUAk9IEJGQV9JMkhNKDIpLAorCUJGSV9QT1JUX0kySF9HRVRfU1RBVFNfUlNQCT0gQkZBX0kySE0oMyksCisJQkZJX1BPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDQpLAorfTsKKworLyoqCisgKiBHZW5lcmljIFJFUSB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworCXUzMglyc3ZkOworfTsKKworLyoqCisgKiBHZW5lcmljIFJTUCB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHBvcnQgZW5hYmxlIHN0YXR1cwkJICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworfTsKKworLyoqCisgKiBAdG9kbworICogQkZJX1BPUlRfSDJJX0VOQUJMRV9SRVEKKyAqLworCisvKioKKyAqIEB0b2RvCisgKiBCRklfUE9SVF9JMkhfRU5BQkxFX1JTUAorICovCisKKy8qKgorICogQkZJX1BPUlRfSDJJX0RJU0FCTEVfUkVRCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9JMkhfRElTQUJMRV9SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRCisgKi8KK3N0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworLyoqCisgKiBCRklfUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAorICovCisKKy8qKgorICogQkZJX1BPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQorICovCisKKy8qKgorICogQkZJX1BPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAorICovCisKK3VuaW9uIGJmaV9wb3J0X2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MJCW1oOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWVuYWJsZV9yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MJZGlzYWJsZV9yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcwlnZXRzdGF0c19yZXE7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MJY2xlYXJzdGF0c19yZXE7Cit9OworCit1bmlvbiBiZmlfcG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgCW1oOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWVuYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJZGlzYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJZ2V0c3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWNsZWFyc3RhdHNfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1BPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Bwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmQyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZJX1BQT1JUX0hfXworI2RlZmluZSBfX0JGSV9QUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9wcG9ydF9oMmkgeworCUJGSV9QUE9SVF9IMklfRU5BQkxFX1JFUQkJPSAoMSksCisJQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUQkJPSAoMiksCisJQkZJX1BQT1JUX0gySV9HRVRfU1RBVFNfUkVRCQk9ICgzKSwKKwlCRklfUFBPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQk9ICg0KSwKKwlCRklfUFBPUlRfSDJJX1NFVF9TVkNfUEFSQU1TX1JFUQk9ICg1KSwKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9SWF9WRl9UQUdfUkVRCT0gKDYpLAorCUJGSV9QUE9SVF9IMklfRU5BQkxFX1RYX1ZGX1RBR19SRVEJPSAoNyksCisJQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JFUQkJPSAoOCksCisJQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRCT0gKDkpLAorfTsKKworZW51bSBiZmlfcHBvcnRfaTJoIHsKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9SU1AJCT0gQkZBX0kySE0oMSksCisJQkZJX1BQT1JUX0kySF9ESVNBQkxFX1JTUAkJPSBCRkFfSTJITSgyKSwKKwlCRklfUFBPUlRfSTJIX0dFVF9TVEFUU19SU1AJCT0gQkZBX0kySE0oMyksCisJQkZJX1BQT1JUX0kySF9DTEVBUl9TVEFUU19SU1AJPSBCRkFfSTJITSg0KSwKKwlCRklfUFBPUlRfSTJIX1NFVF9TVkNfUEFSQU1TX1JTUAk9IEJGQV9JMkhNKDUpLAorCUJGSV9QUE9SVF9JMkhfRU5BQkxFX1JYX1ZGX1RBR19SU1AJPSBCRkFfSTJITSg2KSwKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9UWF9WRl9UQUdfUlNQCT0gQkZBX0kySE0oNyksCisJQkZJX1BQT1JUX0kySF9FVkVOVAkJCT0gQkZBX0kySE0oOCksCisJQkZJX1BQT1JUX0kySF9HRVRfUU9TX1NUQVRTX1JTUAkJPSBCRkFfSTJITSg5KSwKKwlCRklfUFBPUlRfSTJIX0NMRUFSX1FPU19TVEFUU19SU1AJPSBCRkFfSTJITSgxMCksCit9OworCisvKioKKyAqIEdlbmVyaWMgUkVRIHR5cGUKKyAqLworc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworfTsKKworLyoqCisgKiBHZW5lcmljIFJTUCB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBwb3J0IGVuYWJsZSBzdGF0dXMJCSAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogQkZJX1BQT1JUX0gySV9FTkFCTEVfUkVRCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlcgkJCSAgICAqLworCXUzMiAgICAgICAgcnN2ZDE7CisJd3duX3QgICAgICAgICAgIG53d247CQkvKiAgbm9kZSB3d24gb2YgcGh5c2ljYWwgcG9ydAkgICAgKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJCS8qICBwb3J0IHd3biBvZiBwaHlzaWNhbCBwb3J0CSAgICAqLworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgcG9ydF9jZmc7CS8qICBwb3J0IGNvbmZpZ3VyYXRpb24JICAgICovCisJdW5pb24gYmZpX2FkZHJfdSAgc3RhdHNfZG1hX2FkZHI7CS8qICBETUEgYWRkcmVzcyBmb3Igc3RhdHMgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCisJdTMyICAgICAgICByc3ZkMjsKK307CisKKy8qKgorICogQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2VuYWJsZV9yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0RJU0FCTEVfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2Rpc2FibGVfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9ESVNBQkxFX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9kaXNhYmxlX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0dFVF9RT1NfU1RBVFNfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX1NFVF9TVkNfUEFSQU1TX1JFUQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlciAqLworCXUxNiAgICAgICAgdHhfYmJjcmVkaXQ7CS8qICBUeCBjcmVkaXRzICovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX1NFVF9TVkNfUEFSQU1TX1JTUAorICovCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9FVkVOVAorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIAltaDsJLyogIGNvbW1vbiBtc2cgaGVhZGVyICovCisJc3RydWN0IGJmYV9wcG9ydF9saW5rX3MJbGlua19zdGF0ZTsKK307CisKK3VuaW9uIGJmaV9wcG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQkJKm1oZHI7CisJc3RydWN0IGJmaV9wcG9ydF9lbmFibGVfcmVxX3MJCSpwZW5hYmxlOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBkaXNhYmxlOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBnZXRzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwY2xlYXJzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zCSpwc2V0c3ZjcGFyYW1zOworCXN0cnVjdCBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yZXFfcwkqcGdldHFvc3N0YXRzOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBjbGVhcnFvc3N0YXRzOworfTsKKwordW5pb24gYmZpX3Bwb3J0X2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcwkJCSptc2c7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCQkqZW5hYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2Rpc2FibGVfcnNwX3MJCSpkaXNhYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MJCSpnZXRzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yc3BfcwkqY2xlYXJzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yc3Bfcwkqc2V0c3ZjcGFyYXNtX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcnNwX3MJKmdldHFvc3N0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yc3BfcwkqY2xlYXJxb3NzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9ldmVudF9zCQkqZXZlbnQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfUFBPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjBmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZJX1JQT1JUX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcnBvcnRfaDJpX21zZ3MgeworCUJGSV9SUE9SVF9IMklfQ1JFQVRFX1JFUSA9IDEsCisJQkZJX1JQT1JUX0gySV9ERUxFVEVfUkVRID0gMiwKKwlCRklfUlBPUlRfSDJJX1NFVF9TUEVFRF9SRVEgID0gMywKK307CisKK2VudW0gYmZpX3Jwb3J0X2kyaF9tc2dzIHsKKwlCRklfUlBPUlRfSTJIX0NSRUFURV9SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfUlBPUlRfSTJIX0RFTEVURV9SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfUlBPUlRfSTJIX1FPU19TQ04gICAgPSBCRkFfSTJITSgzKSwKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTE2ICAgICAgICBtYXhfZnJtc3o7CS8qICBtYXggcmN2IHBkdSBzaXplCQkqLworCXUzMiAgICAgICAgcGlkICAgICAgIDogMjQsCS8qICByZW1vdGUgcG9ydCBJRAkJKi8KKwkJCWxwX3RhZyAgICA6IDg7CS8qICBsb2NhbCBwb3J0IHRhZwkJKi8KKwl1MzIgICAgICAgIGxvY2FsX3BpZCA6IDI0LAkvKiAgbG9jYWwgcG9ydCBJRAkJKi8KKwkJCWNpc2MgICAgICA6IDg7CisJdTggICAgICAgICBmY19jbGFzczsJLyogIHN1cHBvcnRlZCBGQyBjbGFzc2VzCSovCisJdTggICAgICAgICB2Zl9lbjsJCS8qICB2aXJ0dWFsIGZhYnJpYyBlbmFibGUJKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElECQkqLworfTsKKworc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBycG9ydCBjcmVhdGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUJKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zX2F0dHI7ICAvKiBRb1MgQXR0cmlidXRlcyAqLworfTsKKworc3RydWN0IGJmYV9ycG9ydF9zcGVlZF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJdTgJCXNwZWVkOwkJLyohIHJwb3J0J3Mgc3BlZWQgdmlhIFJQU0MgICovCisJdTgJCXJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBycG9ydCBkZWxldGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X3Fvc19zY25fcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgcnN2ZDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyOyAgLyogT2xkIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cjsgIC8qIE5ldyBRb1MgQXR0cmlidXRlcyAqLworfTsKKwordW5pb24gYmZpX3Jwb3J0X2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcyAJCSptc2c7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcmVxX3MJKmRlbGV0ZV9yZXE7CisJc3RydWN0IGJmaV9ycG9ydF9zcGVlZF9yZXFfcwkqc3BlZWRfcmVxOworfTsKKwordW5pb24gYmZpX3Jwb3J0X2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9tc2dfcyAJCSptc2c7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcnNwX3MJKmRlbGV0ZV9yc3A7CisJc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MJKnFvc19zY25fZXZ0OworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1JQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV91Zi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI4YTllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfVUZfSF9fCisjZGVmaW5lIF9fQkZJX1VGX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV91Zl9oMmkgeworCUJGSV9VRl9IMklfQlVGX1BPU1QgPSAxLAorfTsKKworZW51bSBiZmlfdWZfaTJoIHsKKwlCRklfVUZfSTJIX0ZSTV9SQ1ZEID0gQkZBX0kySE0oMSksCit9OworCisjZGVmaW5lIEJGQV9VRl9NQVhfU0dFUwkyCisKK3N0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYnVmX3RhZzsJLyogIGJ1ZmZlciB0YWcJCQkqLworCXUxNiAgICAgICAgYnVmX2xlbjsJLyogIHRvdGFsIGJ1ZmZlciBsZW5ndGgJKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgc2dlW0JGQV9VRl9NQVhfU0dFU107IC8qICBidWZmZXIgRE1BIFNHRXMJKi8KK307CisKK3N0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYnVmX3RhZzsJLyogIGJ1ZmZlciB0YWcJCQkqLworCXUxNiAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIGZybV9sZW47CS8qICByZWNlaXZlZCBmcmFtZSBsZW5ndGggCSovCisJdTE2ICAgICAgICB4ZnJfbGVuOwkvKiAgdHJhbmZlcnJlZCBsZW5ndGgJCSovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfVUZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiYTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvYmZhX2NuYV90cmNtb2QuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9jbmFfdHJjbW9kLmggQ05BIHRyYWNlIG1vZHVsZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0NOQV9UUkNNT0RfSF9fCisjZGVmaW5lIF9fQkZBX0NOQV9UUkNNT0RfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisKKy8qCisgKiAhISEgT25seSBhcHBlbmQgdG8gdGhlIGVudW1zIGRlZmluZWQgaGVyZSB0byBhdm9pZCBhbnkgdmVyc2lvbmluZworICogISEhIG5lZWRlZCBiZXR3ZWVuIHRyYWNlIHV0aWxpdHkgYW5kIGRyaXZlciB2ZXJzaW9uCisgKi8KK2VudW0geworCUJGQV9UUkNfQ05BX0NFRQkJPSAxLAorCUJGQV9UUkNfQ05BX1BPUlQJPSAyLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX0NOQV9UUkNNT0RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmMjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvY2VlL2JmYV9jZWUuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfQ0VFX0hfXworI2RlZmluZSBfX0JGQV9DRUVfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2NlZS5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX2dldF9hdHRyX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX2dldF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9oYmZhaWxfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworc3RydWN0IGJmYV9jZWVfY2Jmbl9zIHsKKwliZmFfY2VlX2dldF9hdHRyX2NiZm5fdCAgICBnZXRfYXR0cl9jYmZuOworCXZvaWQgKmdldF9hdHRyX2NiYXJnOworCWJmYV9jZWVfZ2V0X3N0YXRzX2NiZm5fdCAgIGdldF9zdGF0c19jYmZuOworCXZvaWQgKmdldF9zdGF0c19jYmFyZzsKKwliZmFfY2VlX3Jlc2V0X3N0YXRzX2NiZm5fdCByZXNldF9zdGF0c19jYmZuOworCXZvaWQgKnJlc2V0X3N0YXRzX2NiYXJnOworfTsKKworc3RydWN0IGJmYV9jZWVfcyB7CisJdm9pZCAqZGV2OworCWJmYV9ib29sZWFuX3QgZ2V0X2F0dHJfcGVuZGluZzsKKwliZmFfYm9vbGVhbl90IGdldF9zdGF0c19wZW5kaW5nOworCWJmYV9ib29sZWFuX3QgcmVzZXRfc3RhdHNfcGVuZGluZzsKKwliZmFfc3RhdHVzX3QgZ2V0X2F0dHJfc3RhdHVzOworCWJmYV9zdGF0dXNfdCBnZXRfc3RhdHNfc3RhdHVzOworCWJmYV9zdGF0dXNfdCByZXNldF9zdGF0c19zdGF0dXM7CisJc3RydWN0IGJmYV9jZWVfY2Jmbl9zIGNiZm47CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIGhiZmFpbDsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2Q7CisJc3RydWN0IGJmYV9jZWVfYXR0cl9zICphdHRyOworCXN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKnN0YXRzOworCXN0cnVjdCBiZmFfZG1hX3MgYXR0cl9kbWE7CisJc3RydWN0IGJmYV9kbWFfcyBzdGF0c19kbWE7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBnZXRfY2ZnX21iOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBnZXRfc3RhdHNfbWI7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIHJlc2V0X3N0YXRzX21iOworfTsKKwordTMyIGJmYV9jZWVfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgYmZhX2NlZV9tZW1fY2xhaW0oc3RydWN0IGJmYV9jZWVfcyAqY2VlLCB1OCAqZG1hX2t2YSwKKwkJCSB1NjQgZG1hX3BhKTsKK3ZvaWQgYmZhX2NlZV9hdHRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgYmZhX2NlZV9kZXRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlKTsKK2JmYV9zdGF0dXNfdCBiZmFfY2VlX2dldF9hdHRyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCSBzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHIsCisJCQliZmFfY2VlX2dldF9hdHRyX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX2NlZV9nZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLAorCQkJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHMsCisJCQliZmFfY2VlX2dldF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9jZWVfcmVzZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLAorCQkJYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworI2VuZGlmIC8qIF9fQkZBX0NFRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wb3J0L2JmYV9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QT1JUX0hfXworI2RlZmluZSBfX0JGQV9QT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisKK3R5cGVkZWYgdm9pZCAgICAoKmJmYV9wb3J0X3N0YXRzX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgICAgKCpiZmFfcG9ydF9lbmRpc19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOworCitzdHJ1Y3QgYmZhX3BvcnRfcyB7CisJdm9pZCAgICAgICAgICAgKmRldjsKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2M7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kOworCXUzMiAgICAgICAgbXNndGFnOworCWJmYV9ib29sZWFuX3QgICBzdGF0c19idXN5OworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBzdGF0c19tYjsKKwliZmFfcG9ydF9zdGF0c19jYmZuX3Qgc3RhdHNfY2JmbjsKKwl2b2lkICAgICAgICAgICAqc3RhdHNfY2Jhcmc7CisJYmZhX3N0YXR1c190ICAgIHN0YXRzX3N0YXR1czsKKwl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHM7CisJc3RydWN0IGJmYV9kbWFfcyBzdGF0c19kbWE7CisJYmZhX2Jvb2xlYW5fdCAgIGVuZGlzX3BlbmRpbmc7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIGVuZGlzX21iOworCWJmYV9wb3J0X2VuZGlzX2NiZm5fdCBlbmRpc19jYmZuOworCXZvaWQgICAgICAgICAgICplbmRpc19jYmFyZzsKKwliZmFfc3RhdHVzX3QgICAgZW5kaXNfc3RhdHVzOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyBoYmZhaWw7Cit9OworCit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQkJdm9pZCAqZGV2LCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQkJCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJICAgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkJCSAgIGJmYV9wb3J0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJICAgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwKKwkJCQliZmFfcG9ydF9lbmRpc19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7Cit1MzIgICAgICAgIGJmYV9wb3J0X21lbWluZm8odm9pZCk7Cit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1OCAqZG1hX2t2YSwKKwkJCQkgICB1NjQgZG1hX3BhKTsKKworI2VuZGlmIC8qIF9fQkZBX1BPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjNlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0VUSFBPUlRfREVGU19IX18KKyNkZWZpbmUgX19FVEhQT1JUX0RFRlNfSF9fCisKK3N0cnVjdCBibmFkX2Rydl9zdGF0cyB7CisJdTY0IG5ldGlmX3F1ZXVlX3N0b3A7CisJdTY0IG5ldGlmX3F1ZXVlX3dha2V1cDsKKwl1NjQgdHNvNDsKKwl1NjQgdHNvNjsKKwl1NjQgdHNvX2VycjsKKwl1NjQgdGNwY3N1bV9vZmZsb2FkOworCXU2NCB1ZHBjc3VtX29mZmxvYWQ7CisJdTY0IGNzdW1faGVscDsKKwl1NjQgY3N1bV9oZWxwX2VycjsKKworCXU2NCBod19zdGF0c191cGRhdGVzOworCXU2NCBuZXRpZl9yeF9zY2hlZHVsZTsKKwl1NjQgbmV0aWZfcnhfY29tcGxldGU7CisJdTY0IG5ldGlmX3J4X2Ryb3BwZWQ7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzU0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19QSFlQT1JUX0RFRlNfSF9fCisjZGVmaW5lIF9fUEhZUE9SVF9ERUZTX0hfXworCisjZGVmaW5lIEJOQV9UWEZfSURfTUFYICAJNjQKKyNkZWZpbmUgQk5BX1JYRl9JRF9NQVggIAk2NAorCisvKgorICogU3RhdGlzdGljcworICovCisKKy8qCisgKiBUeEYgRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzX3R4ZiB7CisJdTY0ICAgICAgICB1Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB1Y2FzdDsKKwl1NjQgICAgICAgIHVjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIG1jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIG1jYXN0OworCXU2NCAgICAgICAgbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgYmNhc3Q7CisJdTY0ICAgICAgICBiY2FzdF92bGFuOworCisJdTY0ICAgICAgICBlcnJvcnM7CisJdTY0ICAgICAgICBmaWx0ZXJfdmxhbjsJLyogZnJhbWVzIGZpbHRlcmVkIGR1ZSB0byBWTEFOICovCisJdTY0ICAgICAgICBmaWx0ZXJfbWFjX3NhOwkvKiBmcmFtZXMgZmlsdGVyZWQgZHVlIHRvIFNBIGNoZWNrICovCit9OworCisvKgorICogUnhGIEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19yeGYgeworCXU2NCAgICAgICAgdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdWNhc3Q7CisJdTY0ICAgICAgICB1Y2FzdF92bGFuOworCisJdTY0ICAgICAgICBtY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBtY2FzdDsKKwl1NjQgICAgICAgIG1jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIGJjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIGJjYXN0OworCXU2NCAgICAgICAgYmNhc3RfdmxhbjsKKwl1NjQgICAgICAgIGZyYW1lX2Ryb3BzOworfTsKKworLyoKKyAqIEZDIFR4IEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19mY190eCB7CisJdTY0ICAgICAgICB0eGZfdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdHhmX3VjYXN0OworCXU2NCAgICAgICAgdHhmX3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHR4Zl9tY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB0eGZfbWNhc3Q7CisJdTY0ICAgICAgICB0eGZfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgdHhmX2JjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHR4Zl9iY2FzdDsKKwl1NjQgICAgICAgIHR4Zl9iY2FzdF92bGFuOworCisJdTY0ICAgICAgICB0eGZfcGFyaXR5X2Vycm9yczsKKwl1NjQgICAgICAgIHR4Zl90aW1lb3V0OworCXU2NCAgICAgICAgdHhmX2ZpZF9wYXJpdHlfZXJyb3JzOworfTsKKworLyoKKyAqIEZDIFJ4IEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c19mY19yeCB7CisJdTY0ICAgICAgICByeGZfdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhmX3VjYXN0OworCXU2NCAgICAgICAgcnhmX3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4Zl9tY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeGZfbWNhc3Q7CisJdTY0ICAgICAgICByeGZfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhmX2JjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdDsKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdF92bGFuOworfTsKKworLyoKKyAqIFJBRCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfcmFkIHsKKwl1NjQgICAgICAgIHJ4X2ZyYW1lczsKKwl1NjQgICAgICAgIHJ4X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X3ZsYW5fZnJhbWVzOworCisJdTY0ICAgICAgICByeF91Y2FzdDsKKwl1NjQgICAgICAgIHJ4X3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X3VjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4X21jYXN0OworCXU2NCAgICAgICAgcnhfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhfYmNhc3Q7CisJdTY0ICAgICAgICByeF9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeF9iY2FzdF92bGFuOworCisJdTY0ICAgICAgICByeF9kcm9wczsKK307CisKKy8qCisgKiBCUEMgVHggUmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfYnBjX3R4IHsKKwl1NjQgICAgICAgIHR4X3BhdXNlWzhdOworCXU2NCAgICAgICAgdHhfemVyb19wYXVzZVs4XTsJLyogIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NCAgICAgICAgdHhfZmlyc3RfcGF1c2VbOF07CS8qICBQYXVzZSBpbml0aWF0aW9uIHJhdGhlcgorCQkJCQkJICp0aGFuIHJldGVudGlvbiAqLworfTsKKworLyoKKyAqIEJQQyBSeCBSZWdpc3RlcnMKKyAqLworc3RydWN0IGNuYV9zdGF0c19icGNfcnggeworCXU2NCAgICAgICAgcnhfcGF1c2VbOF07CisJdTY0ICAgICAgICByeF96ZXJvX3BhdXNlWzhdOwkvKiAgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0ICAgICAgICByeF9maXJzdF9wYXVzZVs4XTsJLyogIFBhdXNlIGluaXRpYXRpb24gcmF0aGVyCisJCQkJCQkgKnRoYW4gcmV0ZW50aW9uICovCit9OworCisvKgorICogTUFDIFJ4IFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGNuYV9zdGF0c19tYWNfcnggeworCXU2NCAgICAgICAgZnJhbWVfNjQ7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzY1XzEyNzsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMTI4XzI1NTsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMjU2XzUxMTsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfNTEyXzEwMjM7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzEwMjRfMTUxODsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMTUxOF8xNTIyOwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICByeF9ieXRlczsKKwl1NjQgICAgICAgIHJ4X3BhY2tldHM7CisJdTY0ICAgICAgICByeF9mY3NfZXJyb3I7CisJdTY0ICAgICAgICByeF9tdWx0aWNhc3Q7CisJdTY0ICAgICAgICByeF9icm9hZGNhc3Q7CisJdTY0ICAgICAgICByeF9jb250cm9sX2ZyYW1lczsKKwl1NjQgICAgICAgIHJ4X3BhdXNlOworCXU2NCAgICAgICAgcnhfdW5rbm93bl9vcGNvZGU7CisJdTY0ICAgICAgICByeF9hbGlnbm1lbnRfZXJyb3I7CisJdTY0ICAgICAgICByeF9mcmFtZV9sZW5ndGhfZXJyb3I7CisJdTY0ICAgICAgICByeF9jb2RlX2Vycm9yOworCXU2NCAgICAgICAgcnhfY2Fycmllcl9zZW5zZV9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X3VuZGVyc2l6ZTsKKwl1NjQgICAgICAgIHJ4X292ZXJzaXplOworCXU2NCAgICAgICAgcnhfZnJhZ21lbnRzOworCXU2NCAgICAgICAgcnhfamFiYmVyOworCXU2NCAgICAgICAgcnhfZHJvcDsKK307CisKKy8qCisgKiBNQUMgVHggU3RhdGlzdGljcworICovCitzdHJ1Y3QgY25hX3N0YXRzX21hY190eCB7CisJdTY0ICAgICAgICB0eF9ieXRlczsKKwl1NjQgICAgICAgIHR4X3BhY2tldHM7CisJdTY0ICAgICAgICB0eF9tdWx0aWNhc3Q7CisJdTY0ICAgICAgICB0eF9icm9hZGNhc3Q7CisJdTY0ICAgICAgICB0eF9wYXVzZTsKKwl1NjQgICAgICAgIHR4X2RlZmVycmFsOworCXU2NCAgICAgICAgdHhfZXhjZXNzaXZlX2RlZmVycmFsOworCXU2NCAgICAgICAgdHhfc2luZ2xlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X211bGlwbGVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfbGF0ZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9leGNlc3NpdmVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfdG90YWxfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfcGF1c2VfaG9ub3JlZDsKKwl1NjQgICAgICAgIHR4X2Ryb3A7CisJdTY0ICAgICAgICB0eF9qYWJiZXI7CisJdTY0ICAgICAgICB0eF9mY3NfZXJyb3I7CisJdTY0ICAgICAgICB0eF9jb250cm9sX2ZyYW1lOworCXU2NCAgICAgICAgdHhfb3ZlcnNpemU7CisJdTY0ICAgICAgICB0eF91bmRlcnNpemU7CisJdTY0ICAgICAgICB0eF9mcmFnbWVudHM7Cit9OworCisvKgorICogQ29tcGxldGUgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzIHsKKwlzdHJ1Y3QgY25hX3N0YXRzX21hY19yeCBtYWNfcnhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19icGNfcnggYnBjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfcmFkIHJhZF9zdGF0czsKKwlzdHJ1Y3QgYm5hX3N0YXRzX2ZjX3J4IGZjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfbWFjX3R4IG1hY190eF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX2JwY190eCBicGNfdHhfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19mY190eCBmY190eF9zdGF0czsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3J4ZiByeGZfc3RhdHNbQk5BX1RYRl9JRF9NQVhdOworCXN0cnVjdCBibmFfc3RhdHNfdHhmIHR4Zl9zdGF0c1tCTkFfUlhGX0lEX01BWF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhjMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9jaGVja3N1bS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2NoZWNrc3VtLmggQkZBIGNoZWNrc3VtIHV0aWxpdGllcworICovCisKKyNpZm5kZWYgX19CRkFfQ0hFQ0tTVU1fSF9fCisjZGVmaW5lIF9fQkZBX0NIRUNLU1VNX0hfXworCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NoZWNrc3VtX3UzMih1MzIgKmJ1ZiwgaW50IHN6KQoreworCWludAkJaSwgbSA9IHN6ID4+IDI7CisJdTMyCXN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorCitzdGF0aWMgaW5saW5lIHUxNgorYmZhX2NoZWNrc3VtX3UxNih1MTYgKmJ1ZiwgaW50IHN6KQoreworCWludCAgICAgICAgICAgICBpLCBtID0gc3ogPj4gMTsKKwl1MTYgICAgICAgIHN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2hlY2tzdW1fdTgodTggKmJ1ZiwgaW50IHN6KQoreworCWludCAgICAgICAgICAgICBpOworCXU4ICAgICAgICAgc3VtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQorCQlzdW0gXj0gYnVmW2ldOworCisJcmV0dXJuIChzdW0pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxYmU4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9kZWJ1Zy5oIEJGQSBkZWJ1ZyBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUJVR19IX18KKyNkZWZpbmUgX19CRkFfREVCVUdfSF9fCisKKyNkZWZpbmUgYmZhX2Fzc2VydChfX2NvbmQpCWRvIHsJCQkJCVwKKwlpZiAoIShfX2NvbmQpKSAJCQkJCQkJXAorCQliZmFfcGFuaWMoX19MSU5FX18sIF9fRklMRV9fLCAjX19jb25kKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9zbV9mYXVsdChfX21vZCwgX19ldmVudCkJZG8gewkJCQlcCisJYmZhX3NtX3BhbmljKChfX21vZCktPmxvZ20sIF9fTElORV9fLCBfX0ZJTEVfXywgX19ldmVudCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBiZmFfYXNzZXJ0X2ZwKF9fY29uZCkJYmZhX2Fzc2VydChfX2NvbmQpCisjZWxzZQorI2RlZmluZSBiZmFfYXNzZXJ0X2ZwKF9fY29uZCkKKyNlbmRpZgorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKK3ZvaWQgYmZhX3BhbmljKGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpwYW5pY3N0cik7Cit2b2lkIGJmYV9zbV9wYW5pYyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbSwgaW50IGxpbmUsIGNoYXIgKmZpbGUsIGludCBldmVudCk7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUJVR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfbG9nLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MWNiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9sb2cuaCBCRkEgbG9nIGxpYnJhcnkgZGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAqLworCisjaWZuZGVmIF9fQkZBX0xPR19IX18KKyNkZWZpbmUgX19CRkFfTE9HX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworLyoKKyAqIEJGQSBsb2cgbW9kdWxlIGRlZmluaXRpb24KKyAqCisgKiBUbyBjcmVhdGUgYSBuZXcgbW9kdWxlIGlkOgorICogQWRkIGEgI2RlZmluZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGJlbG93LiBTZWxlY3QgYSB2YWx1ZSBmb3IgeW91cgorICogZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG9uZSAoMSkgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cworICogZGVmaW5pdGlvbi4gTW9kaWZ5IHRoZSBkZWZpbml0aW9uIG9mIEJGQV9MT0dfTU9EVUxFX0lEX01BWCB0byBiZWNvbWUKKyAqIHlvdXIgbmV3IGRlZmluaXRpb24uCisgKiBTaG91bGQgaGF2ZSBubyBnYXBzIGluIGJldHdlZW4gdGhlIHZhbHVlcyBiZWNhdXNlIHRoaXMgaXMgdXNlZCBpbiBhcnJheXMuCisgKiBJTVBPUlRBTlQ6IEFFTl9JRHMgbXVzdCBiZSBhdCB0aGUgYmVnaW5pbmcsIG90aGVyd2lzZSB1cGRhdGUgYmZhX2RlZnNfYWVuLmgKKyAqLworCitlbnVtIGJmYV9sb2dfbW9kdWxlX2lkIHsKKwlCRkFfTE9HX1VOVVNFRF9JRAk9IDAsCisKKwkvKiBBRU4gZGVmcyBiZWdpbiAqLworCUJGQV9MT0dfQUVOX01JTgkJPSBCRkFfTE9HX1VOVVNFRF9JRCwKKworCUJGQV9MT0dfQUVOX0lEX0FEQVBURVIgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfQURBUFRFUiwvKiAxICovCisJQkZBX0xPR19BRU5fSURfUE9SVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9QT1JULAkvKiAyICovCisJQkZBX0xPR19BRU5fSURfTFBPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfTFBPUlQsCS8qIDMgKi8KKwlCRkFfTE9HX0FFTl9JRF9SUE9SVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9SUE9SVCwJLyogNCAqLworCUJGQV9MT0dfQUVOX0lEX0lUTklNIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lUTklNLAkvKiA1ICovCisJQkZBX0xPR19BRU5fSURfVElOIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX1RJTiwJLyogNiAqLworCUJGQV9MT0dfQUVOX0lEX0lQRkMgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfSVBGQywJLyogNyAqLworCUJGQV9MT0dfQUVOX0lEX0FVRElUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0FVRElULAkvKiA4ICovCisJQkZBX0xPR19BRU5fSURfSU9DCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfSU9DLAkvKiA5ICovCisJQkZBX0xPR19BRU5fSURfRVRIUE9SVAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0VUSFBPUlQsLyogMTAgKi8KKworCUJGQV9MT0dfQUVOX01BWAkJPSBCRkFfTE9HX0FFTl9JRF9FVEhQT1JULAorCS8qIEFFTiBkZWZzIGVuZCAqLworCisJQkZBX0xPR19NT0RVTEVfSURfTUlOCT0gQkZBX0xPR19BRU5fTUFYLAorCisJQkZBX0xPR19GV19JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyAxLAorCUJGQV9MT0dfSEFMX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDIsCisJQkZBX0xPR19GQ1NfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgMywKKwlCRkFfTE9HX1dEUlZfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNCwKKwlCRkFfTE9HX0xJTlVYX0lECT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNSwKKwlCRkFfTE9HX1NPTEFSSVNfSUQJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyA2LAorCisJQkZBX0xPR19NT0RVTEVfSURfTUFYIAk9IEJGQV9MT0dfU09MQVJJU19JRCwKKworCS8qIE5vdCBwYXJ0IG9mIGFueSBhcnJheXMgKi8KKwlCRkFfTE9HX01PRFVMRV9JRF9BTEwgCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMSwKKwlCRkFfTE9HX0FFTl9BTEwgCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMiwKKwlCRkFfTE9HX0RSVl9BTEwJCT0gQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMywKK307CisKKy8qCisgKiBCRkEgbG9nIGNhdGFsb2cgbmFtZQorICovCisjZGVmaW5lIEJGQV9MT0dfQ0FUX05BTUUJIkJGQSIKKworLyoKKyAqIGJmYSBsb2cgc2V2ZXJpdHkgdmFsdWVzCisgKi8KK2VudW0gYmZhX2xvZ19zZXZlcml0eSB7CisJQkZBX0xPR19JTlZBTElEID0gMCwKKwlCRkFfTE9HX0NSSVRJQ0FMID0gMSwKKwlCRkFfTE9HX0VSUk9SID0gMiwKKwlCRkFfTE9HX1dBUk5JTkcgPSAzLAorCUJGQV9MT0dfSU5GTyA9IDQsCisJQkZBX0xPR19OT05FID0gNSwKKwlCRkFfTE9HX0xFVkVMX01BWCA9IEJGQV9MT0dfTk9ORQorfTsKKworI2RlZmluZSBCRkFfTE9HX01PRElEX09GRlNFVAkJMTYKKworCitzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyB7CisJdTMyCW1zZ19pZDsJCS8qICBtZXNzYWdlIGlkICovCisJaW50CQlhdHRyaWJ1dGVzOwkvKiAgYXR0cmlidXRlcyAqLworCWludAkJc2V2ZXJpdHk7CS8qICBzZXZlcml0eSBsZXZlbCAqLworCWNoYXIJCSptc2dfdmFsdWU7CisJCQkJCS8qICBtc2cgc3RyaW5nICovCisJY2hhcgkJKm1lc3NhZ2U7CisJCQkJCS8qICBtc2cgZm9ybWF0IHN0cmluZyAqLworCWludAkJYXJnX3R5cGU7CS8qICBhcmd1bWVudCB0eXBlICovCisJaW50CQlhcmdfbnVtOwkvKiAgbnVtYmVyIG9mIGFyZ3VtZW50ICovCit9OworCisvKgorICogc3VwcG9ydGVkIGFyZ3VtZW50IHR5cGUKKyAqLworZW51bSBiZmFfbG9nX2FyZ190eXBlIHsKKwlCRkFfTE9HX1MgPSAwLAkJLyogIHN0cmluZyAqLworCUJGQV9MT0dfRCwJCS8qICBkZWNpbWFsICovCisJQkZBX0xPR19JLAkJLyogIGludGVnZXIgKi8KKwlCRkFfTE9HX08sCQkvKiAgb2N0IG51bWJlciAqLworCUJGQV9MT0dfVSwJCS8qICB1bnNpZ25lZCBpbnRlZ2VyICovCisJQkZBX0xPR19YLAkJLyogIGhleCBudW1iZXIgKi8KKwlCRkFfTE9HX0YsCQkvKiAgZmxvYXRpbmcgKi8KKwlCRkFfTE9HX0MsCQkvKiAgY2hhcmFjdGVyICovCisJQkZBX0xPR19MLAkJLyogIGRvdWJsZSAqLworCUJGQV9MT0dfUAkJLyogIHBvaW50ZXIgKi8KK307CisKKyNkZWZpbmUgQkZBX0xPR19BUkdfVFlQRQkyCisjZGVmaW5lIEJGQV9MT0dfQVJHMAkJKDAgKiBCRkFfTE9HX0FSR19UWVBFKQorI2RlZmluZSBCRkFfTE9HX0FSRzEJCSgxICogQkZBX0xPR19BUkdfVFlQRSkKKyNkZWZpbmUgQkZBX0xPR19BUkcyCQkoMiAqIEJGQV9MT0dfQVJHX1RZUEUpCisjZGVmaW5lIEJGQV9MT0dfQVJHMwkJKDMgKiBCRkFfTE9HX0FSR19UWVBFKQorCisjZGVmaW5lIEJGQV9MT0dfR0VUX01PRF9JRChtc2dpZCkgKChtc2dpZCA+PiBCRkFfTE9HX01PRElEX09GRlNFVCkgJiAweGZmKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfSURYKG1zZ2lkKSAobXNnaWQgJiAweGZmZmYpCisjZGVmaW5lIEJGQV9MT0dfR0VUX01TR19JRChtc2dkZWYpICgobXNnZGVmKS0+bXNnX2lkKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfRk1UX1NUUklORyhtc2dkZWYpICgobXNnZGVmKS0+bWVzc2FnZSkKKyNkZWZpbmUgQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnZGVmKSAoKG1zZ2RlZiktPnNldmVyaXR5KQorCisvKgorICogRXZlbnQgYXR0cmlidXRlcworICovCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9OT05FCTAKKyNkZWZpbmUgQkZBX0xPR19BVFRSX0FVRElUCTEKKyNkZWZpbmUgQkZBX0xPR19BVFRSX0xPRwkyCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9GRkRDCTQKKworI2RlZmluZSBCRkFfTE9HX0NSRUFURV9JRChtc3csIGxzdykgXAorCSgoKHUzMiltc3cgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgbHN3KQorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKKworLyoqCisgKiBjYWxsYmFjayBmdW5jdGlvbgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfbG9nX2NiX3QpKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkLAorCQkJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCisKK3N0cnVjdCBiZmFfbG9nX21vZF9zIHsKKwljaGFyCQlpbnN0YW5jZV9pbmZvWzE2XTsJLyogIGluc3RhbmNlIGluZm8gKi8KKwlpbnQJCWxvZ19sZXZlbFtCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAxXTsKKwkJCQkJCS8qICBsb2cgbGV2ZWwgZm9yIG1vZHVsZXMgKi8KKwliZmFfbG9nX2NiX3QJY2JmbjsgCQkJLyogIGNhbGxiYWNrIGZ1bmN0aW9uICovCit9OworCitleHRlcm4gaW50IGJmYV9sb2dfaW5pdChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWNoYXIgKmluc3RhbmNlX25hbWUsIGJmYV9sb2dfY2JfdCBjYmZuKTsKK2V4dGVybiBpbnQgYmZhX2xvZyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwgLi4uKTsKK2V4dGVybiBiZmFfc3RhdHVzX3QgYmZhX2xvZ19zZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQlpbnQgbW9kX2lkLCBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKTsKK2V4dGVybiBiZmFfc3RhdHVzX3QgYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCk7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsX2FlbihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpOworZXh0ZXJuIGVudW0gYmZhX2xvZ19zZXZlcml0eSBiZmFfbG9nX2dldF9sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWludCBtb2RfaWQpOworZXh0ZXJuIGVudW0gYmZhX2xvZ19zZXZlcml0eSBiZmFfbG9nX2dldF9tc2dfbGV2ZWwoCisJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCk7CisvKgorICogYXJyYXkgb2YgbWVzc2FnZXMgZ2VuZXJhdGVkIGZyb20geG1sIGZpbGVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyBiZmFfbG9nX21zZ19hcnJheVtdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wZXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhYTVmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFEX1BFUkZfSF9fCisjZGVmaW5lIF9fQkZBRF9QRVJGX0hfXworCisjaWZkZWYgQkZBRF9QRVJGX0JVSUxECisKKyN1bmRlZiBiZmFfdHJjCisjdW5kZWYgYmZhX3RyYzMyCisjdW5kZWYgYmZhX2Fzc2VydAorI3VuZGVmIEJGQV9UUkNfRklMRQorCisjZGVmaW5lIGJmYV90cmMoX3RyY3AsIF9kYXRhKQorI2RlZmluZSBiZmFfdHJjMzIoX3RyY3AsIF9kYXRhKQorI2RlZmluZSBiZmFfYXNzZXJ0KF9fY29uZCkKKyNkZWZpbmUgQkZBX1RSQ19GSUxFKF9fbW9kLCBfX3N1Ym1vZCkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JGQURfUEVSRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwZjg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1BPUlRMT0dfSF9fCisjZGVmaW5lIF9fQkZBX1BPUlRMT0dfSF9fCisKKyNpbmNsdWRlICJwcm90b2NvbC9mYy5oIgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworI2RlZmluZSBCRkFfUExfTkxPR19FTlRTIDI1NgorI2RlZmluZSBCRkFfUExfTE9HX1JFQ19JTkNSKF94KSAoKF94KSsrLCAoX3gpICU9IEJGQV9QTF9OTE9HX0VOVFMpCisKKyNkZWZpbmUgQkZBX1BMX1NUUklOR19MT0dfU1ogICAzMiAgIC8qIG51bWJlciBvZiBjaGFycyBpbiBzdHJpbmcgbG9nICovCisjZGVmaW5lIEJGQV9QTF9JTlRfTE9HX1NaICAgICAgOCAgICAvKiBudW1iZXIgb2YgaW50ZWdlcnMgaW4gdGhlIGludGVnZXIgbG9nICovCisKK2VudW0gYmZhX3Bsb2dfbG9nX3R5cGUgeworCUJGQV9QTF9MT0dfVFlQRV9JTlZBTElEID0gMCwKKwlCRkFfUExfTE9HX1RZUEVfSU5UIAk9IDEsCisJQkZBX1BMX0xPR19UWVBFX1NUUklORyAJPSAyLAorfTsKKworLyoKKyAqIHRoZSAoZml4ZWQgc2l6ZSkgcmVjb3JkIGZvcm1hdCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgcG9ydGxvZworICovCitzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgeworCXUzMiAgICAgICAgdHY7CS8qIEZpbGxlZCBieSB0aGUgcG9ydGxvZyBkcml2ZXIgd2hlbiB0aGUgKgorCQkJCSAqIGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBjaXJjdWxhciBsb2cuICAgKi8KKwl1OCAgICAgICAgIHBvcnQ7CS8qIFNvdXJjZSBwb3J0IHRoYXQgbG9nZ2VkIHRoaXMgZW50cnkuIENNCisJCQkJICogZW50aXRpZXMgd2lsbCB1c2UgMHhGRiAqLworCXU4ICAgICAgICAgbWlkOwkvKiBJbnRlZ2VyIHZhbHVlIHRvIGJlIHVzZWQgYnkgYWxsIGVudGl0aWVzICoKKwkJCQkgKiB3aGlsZSBsb2dnaW5nLiBUaGUgbW9kdWxlIGlkIHRvIHN0cmluZyAgICoKKwkJCQkgKiBjb252ZXJzaW9uIHdpbGwgYmUgZG9uZSBieSBCRkFMLiBTZWUKKwkJCQkgKiBlbnVtIGJmYV9wbG9nX21pZCAqLworCXU4ICAgICAgICAgZWlkOwkvKiBpbmRpY2F0ZXMgUngsIFR4LCBJT0NUTCwgZXRjLiBTZWUKKwkJCQkgKiBlbnVtIGJmYV9wbG9nX2VpZCAqLworCXU4ICAgICAgICAgbG9nX3R5cGU7IC8qIGluZGljYXRlcyBzdHJpbmcgbG9nIG9yIGludGVnZXIgbG9nLgorCQkJCSAgICogc2VlIGJmYV9wbG9nX2xvZ190eXBlX3QgKi8KKwl1OCAgICAgICAgIGxvZ19udW1faW50czsKKwkvKgorCSAqIGludGVycHJldGVkIG9ubHkgaWYgbG9nX3R5cGUgaXMgSU5UX0xPRy4gaW5kaWNhdGVzIG51bWJlciBvZgorCSAqIGludGVnZXJzIGluIHRoZSBpbnRfbG9nW10gKDAtUExfSU5UX0xPR19TWikuCisJICovCisJdTggICAgICAgICByc3ZkOworCXUxNiAgICAgICAgbWlzYzsJLyogY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgZmMgZnJhbWUgbGVuZ3RoLAorCQkJCSAqZXRjLi4gKi8KKwl1bmlvbiB7CisJCWNoYXIgICAgICAgICAgICBzdHJpbmdfbG9nW0JGQV9QTF9TVFJJTkdfTE9HX1NaXTsKKwkJdTMyICAgICAgICBpbnRfbG9nW0JGQV9QTF9JTlRfTE9HX1NaXTsKKwl9IGxvZ19lbnRyeTsKKworfTsKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgI2RlZmluZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dnaW5nIGVudGl0aWVzIHRvIGluZGljYXRlCisgKiB0aGVpciBtb2R1bGUgaWQuIEJGQUwgd2lsbCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHZhbHVlIHRvIHN0cmluZyBmb3JtYXQKKyAqCisqIHByb2Nlc3MgdG8gYmUgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgZm9sbG93aW5nICNkZWZpbmVzOgorICogIC0gQWx3YXlzIGFkZCBuZXcgZW50cmllcyBhdCB0aGUgZW5kCisgKiAgLSBkZWZpbmUgY29ycmVzcG9uZGluZyBzdHJpbmcgaW4gQkZBTAorICogIC0gRG8gbm90IHJlbW92ZSBhbnkgZW50cnkgb3IgcmVhcnJhbmdlIHRoZSBvcmRlci4KKyAqLworZW51bSBiZmFfcGxvZ19taWQgeworCUJGQV9QTF9NSURfSU5WQUxJRCAJPSAwLAorCUJGQV9QTF9NSURfREVCVUcgCT0gMSwKKwlCRkFfUExfTUlEX0RSVlIgCT0gMiwKKwlCRkFfUExfTUlEX0hBTCAJCT0gMywKKwlCRkFfUExfTUlEX0hBTF9GQ1hQIAk9IDQsCisJQkZBX1BMX01JRF9IQUxfVUYgCT0gNSwKKwlCRkFfUExfTUlEX0ZDUyAJCT0gNiwKKwlCRkFfUExfTUlEX01BWCAJCT0gNworfTsKKworI2RlZmluZSBCRkFfUExfTUlEX1NUUkxFTiAgICA4CitzdHJ1Y3QgYmZhX3Bsb2dfbWlkX3N0cmluZ3NfcyB7CisJY2hhciAgICAgICAgICAgIG1fc3RyW0JGQV9QTF9NSURfU1RSTEVOXTsKK307CisKKy8qCisgKiB0aGUgZm9sbG93aW5nICNkZWZpbmVzIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9nZ2luZyBlbnRpdGllcyB0byBpbmRpY2F0ZQorICogdGhlaXIgZXZlbnQgdHlwZS4gQkZBTCB3aWxsIGNvbnZlcnQgdGhlIGludGVnZXIgdmFsdWUgdG8gc3RyaW5nIGZvcm1hdAorICoKKyogcHJvY2VzcyB0byBiZSB1c2VkIHdoaWxlIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgI2RlZmluZXM6CisgKiAgLSBBbHdheXMgYWRkIG5ldyBlbnRyaWVzIGF0IHRoZSBlbmQKKyAqICAtIGRlZmluZSBjb3JyZXNwb25kaW5nIHN0cmluZyBpbiBCRkFMCisgKiAgLSBEbyBub3QgcmVtb3ZlIGFueSBlbnRyeSBvciByZWFycmFuZ2UgdGhlIG9yZGVyLgorICovCitlbnVtIGJmYV9wbG9nX2VpZCB7CisJQkZBX1BMX0VJRF9JTlZBTElEIAkJPSAwLAorCUJGQV9QTF9FSURfSU9DX0RJU0FCTEUgCQk9IDEsCisJQkZBX1BMX0VJRF9JT0NfRU5BQkxFIAkJPSAyLAorCUJGQV9QTF9FSURfUE9SVF9ESVNBQkxFIAk9IDMsCisJQkZBX1BMX0VJRF9QT1JUX0VOQUJMRSAJCT0gNCwKKwlCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFIAk9IDUsCisJQkZBX1BMX0VJRF9UWCAJCQk9IDYsCisJQkZBX1BMX0VJRF9UWF9BQ0sxIAkJPSA3LAorCUJGQV9QTF9FSURfVFhfUkpUIAkJPSA4LAorCUJGQV9QTF9FSURfVFhfQlNZIAkJPSA5LAorCUJGQV9QTF9FSURfUlggCQkJPSAxMCwKKwlCRkFfUExfRUlEX1JYX0FDSzEgCQk9IDExLAorCUJGQV9QTF9FSURfUlhfUkpUIAkJPSAxMiwKKwlCRkFfUExfRUlEX1JYX0JTWSAJCT0gMTMsCisJQkZBX1BMX0VJRF9DVF9JTiAJCT0gMTQsCisJQkZBX1BMX0VJRF9DVF9PVVQgCQk9IDE1LAorCUJGQV9QTF9FSURfRFJJVkVSX1NUQVJUIAk9IDE2LAorCUJGQV9QTF9FSURfUlNDTiAJCT0gMTcsCisJQkZBX1BMX0VJRF9ERUJVRyAJCT0gMTgsCisJQkZBX1BMX0VJRF9NSVNDIAkJPSAxOSwKKwlCRkFfUExfRUlEX01BWCAJCQk9IDIwCit9OworCisjZGVmaW5lIEJGQV9QTF9FTkFNRV9TVFJMRU4gICAgCTgKK3N0cnVjdCBiZmFfcGxvZ19laWRfc3RyaW5nc19zIHsKKwljaGFyICAgICAgICAgICAgZV9zdHJbQkZBX1BMX0VOQU1FX1NUUkxFTl07Cit9OworCisjZGVmaW5lIEJGQV9QTF9TSUdfTEVOCTgKKyNkZWZpbmUgQkZBX1BMX1NJR19TVFIgICIxMnBsMTIzIgorCisvKgorICogcGVyIHBvcnQgY2lyY3VsYXIgbG9nIGJ1ZmZlcgorICovCitzdHJ1Y3QgYmZhX3Bsb2dfcyB7CisJY2hhciAgICAgICAgICAgIHBsb2dfc2lnW0JGQV9QTF9TSUdfTEVOXTsJLyogU3RhcnQgc2lnbmF0dXJlICovCisJdTggICAgICAgICBwbG9nX2VuYWJsZWQ7CisJdTggICAgICAgICByc3ZkWzddOworCXUzMiAgICAgICAgdGlja3M7CisJdTE2ICAgICAgICBoZWFkOworCXUxNiAgICAgICAgdGFpbDsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIHBsb2dfcmVjc1tCRkFfUExfTkxPR19FTlRTXTsKK307CisKK3ZvaWQgYmZhX3Bsb2dfaW5pdChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX3N0cihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLCBjaGFyICpsb2dfc3RyKTsKK3ZvaWQgYmZhX3Bsb2dfaW50YXJyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQl1MzIgKmludGFyciwgdTMyIG51bV9pbnRzKTsKK3ZvaWQgYmZhX3Bsb2dfZmNoZHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywKKwkJCXN0cnVjdCBmY2hzX3MgKmZjaGRyKTsKK3ZvaWQgYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hkciwgdTMyIHBsZF93MCk7Cit2b2lkIGJmYV9wbG9nX2NsZWFyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX3Bsb2dfZW5hYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7CitiZmFfYm9vbGVhbl90CWJmYV9wbG9nX2dldF9zZXR0aW5nKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKKworI2VuZGlmIC8qIF9fQkZBX1BPUlRMT0dfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODk1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9xLmggQ2lyY3VsYXIgcXVldWUgZGVmaW5pdGlvbnMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9RX0hfXworI2RlZmluZSBfX0JGQV9RX0hfXworCisjZGVmaW5lIGJmYV9xX2ZpcnN0KF9xKSAoKHZvaWQgKikoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcSkpLT5uZXh0KSkKKyNkZWZpbmUgYmZhX3FfbmV4dChfcWUpCSgoKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xZSkpLT5uZXh0KQorI2RlZmluZSBiZmFfcV9wcmV2KF9xZSkgKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3FlKSktPnByZXYpCisKKy8qCisgKiBiZmFfcV9xZV9pbml0IC0gdG8gaW5pdGlhbGl6ZSBhIHF1ZXVlIGVsZW1lbnQKKyAqLworI2RlZmluZSBiZmFfcV9xZV9pbml0KF9xZSkgewkJCQkJCVwKKwliZmFfcV9uZXh0KF9xZSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOwkJCVwKKwliZmFfcV9wcmV2KF9xZSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOwkJCVwKK30KKworLyoKKyAqIGJmYV9xX2RlcSAtIGRlcXVldWUgYW4gZWxlbWVudCBmcm9tIGhlYWQgb2YgdGhlIHF1ZXVlCisgKi8KKyNkZWZpbmUgYmZhX3FfZGVxKF9xLCBfcWUpIHsJCQkJCQlcCisJaWYgKCFsaXN0X2VtcHR5KF9xKSkgewkJCQkJXAorCQkoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpKSA9IGJmYV9xX25leHQoX3EpOwlcCisJCWJmYV9xX3ByZXYoYmZhX3FfbmV4dCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKSkgPQlcCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpOyBcCisJCWJmYV9xX25leHQoX3EpID0gYmZhX3FfbmV4dCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsgXAorCQlCRkFfUV9EQkdfSU5JVCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCSooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIE5VTEw7IFwKKwl9CQkJCQkJCQlcCit9CisKKy8qCisgKiBiZmFfcV9kZXFfdGFpbCAtIGRlcXVldWUgYW4gZWxlbWVudCBmcm9tIHRhaWwgb2YgdGhlIHF1ZXVlCisgKi8KKyNkZWZpbmUgYmZhX3FfZGVxX3RhaWwoX3EsIF9xZSkgewkJCQkJICAgIFwKKwlpZiAoIWxpc3RfZW1wdHkoX3EpKSB7CQkJCQkgICAgICAgICAgICBcCisJCSooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSA9IGJmYV9xX3ByZXYoX3EpOwkgICAgXAorCQliZmFfcV9uZXh0KGJmYV9xX3ByZXYoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSkpID0gCSAgICBcCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpOyAgXAorCQliZmFfcV9wcmV2KF9xKSA9IGJmYV9xX3ByZXYoKihzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpOyAgICBcCisJCUJGQV9RX0RCR19JTklUKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOwkJICAgIFwKKwl9IGVsc2UgewkJCQkJCQkgICAgXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOyBcCisJfQkJCQkJCQkJICAgIFwKK30KKworLyoKKyAqICNpZmRlZiBCRkFfREVCVUcgKFVzaW5nIGJmYV9hc3NlcnQgdG8gY2hlY2sgZm9yIGRlYnVnX2J1aWxkIGlzIG5vdAorICogY29uc2lzdGVudCBhY3Jvc3MgbW9kdWxlcykKKyAqLworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBCRkFfUV9EQkdfSU5JVChfcWUpCWJmYV9xX3FlX2luaXQoX3FlKQorI2Vsc2UKKyNkZWZpbmUgQkZBX1FfREJHX0lOSVQoX3FlKQorI2VuZGlmCisKKyNkZWZpbmUgYmZhX3FfaXNfb25fcShfcSwgX3FlKQkJXAorCWJmYV9xX2lzX29uX3FfZnVuYyhfcSwgKHN0cnVjdCBsaXN0X2hlYWQgKikoX3FlKSkKK2V4dGVybiBpbnQgYmZhX3FfaXNfb25fcV9mdW5jKHN0cnVjdCBsaXN0X2hlYWQgKnEsIHN0cnVjdCBsaXN0X2hlYWQgKnFlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzA2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfc20uaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYXNtLmggU3RhdGUgbWFjaGluZSBkZWZpbmVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9TTV9IX18KKyNkZWZpbmUgX19CRkFfU01fSF9fCisKK3R5cGVkZWYgdm9pZCAoKmJmYV9zbV90KSh2b2lkICpzbSwgaW50IGV2ZW50KTsKKworI2RlZmluZSBiZmFfc21fc2V0X3N0YXRlKF9zbSwgX3N0YXRlKQkoX3NtKS0+c20gPSAoYmZhX3NtX3QpKF9zdGF0ZSkKKyNkZWZpbmUgYmZhX3NtX3NlbmRfZXZlbnQoX3NtLCBfZXZlbnQpCShfc20pLT5zbSgoX3NtKSwgKF9ldmVudCkpCisjZGVmaW5lIGJmYV9zbV9nZXRfc3RhdGUoX3NtKQkJKChfc20pLT5zbSkKKyNkZWZpbmUgYmZhX3NtX2NtcF9zdGF0ZShfc20sIF9zdGF0ZSkJKChfc20pLT5zbSA9PSAoYmZhX3NtX3QpKF9zdGF0ZSkpCisKKy8qKgorICogRm9yIGNvbnZlcnRpbmcgZnJvbSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uIHRvIHN0YXRlIGVuY29kaW5nLgorICovCitzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgeworCWJmYV9zbV90CXNtOwkvKiAgc3RhdGUgbWFjaGluZSBmdW5jdGlvbgkqLworCWludAkJc3RhdGU7CS8qICBzdGF0ZSBtYWNoaW5lIGVuY29kaW5nCSovCisJY2hhcgkJKm5hbWU7CS8qICBzdGF0ZSBuYW1lIGZvciBkaXNwbGF5CSovCit9OworI2RlZmluZSBCRkFfU00oX3NtKQkoKGJmYV9zbV90KShfc20pKQorCitpbnQgYmZhX3NtX3RvX3N0YXRlKHN0cnVjdCBiZmFfc21fdGFibGVfcyAqc210LCBiZmFfc21fdCBzbSk7CisKKy8qKgorICogU3RhdGUgbWFjaGluZSB3aXRoIGVudHJ5IGFjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9mc21fdCkodm9pZCAqZnNtLCBpbnQgZXZlbnQpOworCisvKioKKyAqIG9jIC0gb2JqZWN0IGNsYXNzIGVnLiBiZmFfaW9jCisgKiBzdCAtIHN0YXRlLCBlZy4gcmVzZXQKKyAqIG90eXBlIC0gb2JqZWN0IHR5cGUsIGVnLiBzdHJ1Y3QgYmZhX2lvY19zCisgKiBldHlwZSAtIG9iamVjdCB0eXBlLCBlZy4gZW51bSBpb2NfZXZlbnQKKyAqLworI2RlZmluZSBiZmFfZnNtX3N0YXRlX2RlY2wob2MsIHN0LCBvdHlwZSwgZXR5cGUpCQlcCisJc3RhdGljIHZvaWQgb2MgIyMgX3NtXyAjIyBzdChvdHlwZSAqIGZzbSwgZXR5cGUgZXZlbnQpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBvYyAjIyBfc21fICMjIHN0ICMjIF9lbnRyeShvdHlwZSAqIGZzbSkKKworI2RlZmluZSBiZmFfZnNtX3NldF9zdGF0ZShfZnNtLCBfc3RhdGUpIGRvIHsJXAorCShfZnNtKS0+ZnNtID0gKGJmYV9mc21fdCkoX3N0YXRlKTsgICAgICBcCisJX3N0YXRlICMjIF9lbnRyeShfZnNtKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9mc21fc2VuZF9ldmVudChfZnNtLCBfZXZlbnQpCVwKKwkoX2ZzbSktPmZzbSgoX2ZzbSksIChfZXZlbnQpKQorI2RlZmluZSBiZmFfZnNtX2NtcF9zdGF0ZShfZnNtLCBfc3RhdGUpCQlcCisJKChfZnNtKS0+ZnNtID09IChiZmFfZnNtX3QpKF9zdGF0ZSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV90cmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfVFJDX0hfXworI2RlZmluZSBfX0JGQV9UUkNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKyNpZm5kZWYgQkZBX1RSQ19NQVgKKyNkZWZpbmUgQkZBX1RSQ19NQVgJKDQgKiAxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgQkZBX1RSQ19UUworI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKQkoKF90cmNtKS0+dGlja3MgKyspCisjZW5kaWYKKworc3RydWN0IGJmYV90cmNfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MTYJZmlsZW5vOworCXUxNglsaW5lOworI2Vsc2UKKwl1MTYJbGluZTsKKwl1MTYJZmlsZW5vOworI2VuZGlmCisJdTMyCXRpbWVzdGFtcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIJcnN2ZDsKKwkJCXUzMgl1MzI7CisJCX0gdTMyOworCQl1NjQJdTY0OworCX0gZGF0YTsKK307CisKKworc3RydWN0IGJmYV90cmNfbW9kX3MgeworCXUzMgloZWFkOworCXUzMgl0YWlsOworCXUzMgludHJjOworCXUzMglzdG9wcGVkOworCXUzMgl0aWNrczsKKwl1MzIJcnN2ZFszXTsKKwlzdHJ1Y3QgYmZhX3RyY19zIHRyY1tCRkFfVFJDX01BWF07Cit9OworCisKK2VudW0geworCUJGQV9UUkNfRlcgICA9IDEsCS8qICBmaXJtd2FyZSBtb2R1bGVzICovCisJQkZBX1RSQ19IQUwgID0gMiwJLyogIEJGQSBtb2R1bGVzICovCisJQkZBX1RSQ19GQ1MgID0gMywJLyogIEJGQSBGQ1MgbW9kdWxlcyAqLworCUJGQV9UUkNfTERSViA9IDQsCS8qICBMaW51eCBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfU0RSViA9IDUsCS8qICBTb2xhcmlzIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19WRFJWID0gNiwJLyogIHZtd2FyZSBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfV0RSViA9IDcsCS8qICB3aW5kb3dzIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19BRU4gID0gOCwJLyogIEFFTiBtb2R1bGUgKi8KKwlCRkFfVFJDX0JJT1MgPSA5LAkvKiAgYmlvcyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfRUZJICA9IDEwLAkvKiAgRUZJIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19XRFJWID0gMTEsCS8qICBCTkEgd2luZG93cyBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfVkRSViA9IDEyLAkvKiAgQk5BIHZtd2FyZSBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfU0RSViA9IDEzLAkvKiAgQk5BIFNvbGFyaXMgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX0xEUlYgPSAxNCwJLyogIEJOQSBMaW51eCBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfSEFMICA9IDE1LAkvKiAgQk5BIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0NOQSAgPSAxNiwJLyogIENvbW1vbiBtb2R1bGVzICovCisJQk5BX1RSQ19JTURSViA9IDE3CS8qICBCTkEgd2luZG93cyBpbnRlcm1lZGlhdGUgZHJpdmVyIG1vZHVsZXMgKi8KK307CisjZGVmaW5lIEJGQV9UUkNfTU9EX1NICTEwCisjZGVmaW5lIEJGQV9UUkNfTU9EKF9fbW9kKQkoKEJGQV9UUkNfICMjIF9fbW9kKSA8PCBCRkFfVFJDX01PRF9TSCkKKworLyoqCisgKiBEZWZpbmUgYSBuZXcgdHJhY2luZyBmaWxlIChtb2R1bGUpLiBNb2R1bGUgc2hvdWxkIG1hdGNoIG9uZSBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIEJGQV9UUkNfRklMRShfX21vZCwgX19zdWJtb2QpCQkJCQlcCisJc3RhdGljIGludCBfX3RyY19maWxlbm8gPSAoKEJGQV9UUkNfICMjIF9fbW9kICMjIF8gIyMgX19zdWJtb2QpIHwgXAorCQkJCQkJIEJGQV9UUkNfTU9EKF9fbW9kKSkKKworCisjZGVmaW5lIGJmYV90cmMzMihfdHJjcCwgX2RhdGEpCVwKKwlfX2JmYV90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTMyKV9kYXRhKQorCisKKyNpZm5kZWYgQkZBX0JPT1RfQlVJTEQKKyNkZWZpbmUgYmZhX3RyYyhfdHJjcCwgX2RhdGEpCVwKKwlfX2JmYV90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTY0KV9kYXRhKQorI2Vsc2UKK3ZvaWQgYmZhX2Jvb3RfdHJjKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIHUxNiBmaWxlbm8sCisJCQl1MTYgbGluZSwgdTMyIGRhdGEpOworI2RlZmluZSBiZmFfdHJjKF90cmNwLCBfZGF0YSkJXAorCWJmYV9ib290X3RyYygoX3RyY3ApLT50cmNtb2QsIF9fdHJjX2ZpbGVubywgX19MSU5FX18sICh1MzIpX2RhdGEpCisjZW5kaWYKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV90cmNfaW5pdChzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSkKK3sKKwl0cmNtLT5oZWFkID0gdHJjbS0+dGFpbCA9IHRyY20tPnN0b3BwZWQgPSAwOworCXRyY20tPm50cmMgPSBCRkFfVFJDX01BWDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV90cmNfc3RvcChzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSkKK3sKKwl0cmNtLT5zdG9wcGVkID0gMTsKK30KKworI2lmZGVmIEZXVFJDCitleHRlcm4gdm9pZCBkY19mbHVzaCh2b2lkICpkYXRhKTsKKyNlbHNlCisjZGVmaW5lIGRjX2ZsdXNoKGRhdGEpCisjZW5kaWYKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX3RyYyhzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSwgaW50IGZpbGVubywgaW50IGxpbmUsIHU2NCBkYXRhKQoreworCWludAkJdGFpbCA9IHRyY20tPnRhaWw7CisJc3RydWN0IGJmYV90cmNfcyAJKnRyYyA9ICZ0cmNtLT50cmNbdGFpbF07CisKKwlpZiAodHJjbS0+c3RvcHBlZCkKKwkJcmV0dXJuOworCisJdHJjLT5maWxlbm8gPSAodTE2KSBmaWxlbm87CisJdHJjLT5saW5lID0gKHUxNikgbGluZTsKKwl0cmMtPmRhdGEudTY0ID0gZGF0YTsKKwl0cmMtPnRpbWVzdGFtcCA9IEJGQV9UUkNfVFModHJjbSk7CisJZGNfZmx1c2godHJjKTsKKworCXRyY20tPnRhaWwgPSAodHJjbS0+dGFpbCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJaWYgKHRyY20tPnRhaWwgPT0gdHJjbS0+aGVhZCkKKwkJdHJjbS0+aGVhZCA9ICh0cmNtLT5oZWFkICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlkY19mbHVzaCh0cmNtKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX3RyYzMyKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtLCBpbnQgZmlsZW5vLCBpbnQgbGluZSwgdTMyIGRhdGEpCit7CisJaW50CQl0YWlsID0gdHJjbS0+dGFpbDsKKwlzdHJ1Y3QgYmZhX3RyY19zICp0cmMgPSAmdHJjbS0+dHJjW3RhaWxdOworCisJaWYgKHRyY20tPnN0b3BwZWQpCisJCXJldHVybjsKKworCXRyYy0+ZmlsZW5vID0gKHUxNikgZmlsZW5vOworCXRyYy0+bGluZSA9ICh1MTYpIGxpbmU7CisJdHJjLT5kYXRhLnUzMi51MzIgPSBkYXRhOworCXRyYy0+dGltZXN0YW1wID0gQkZBX1RSQ19UUyh0cmNtKTsKKwlkY19mbHVzaCh0cmMpOworCisJdHJjbS0+dGFpbCA9ICh0cmNtLT50YWlsICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlpZiAodHJjbS0+dGFpbCA9PSB0cmNtLT5oZWFkKQorCQl0cmNtLT5oZWFkID0gKHRyY20tPmhlYWQgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWRjX2ZsdXNoKHRyY20pOworfQorCisjaWZuZGVmIEJGQV9QRVJGX0JVSUxECisjZGVmaW5lIGJmYV90cmNfZnAoX3RyY3AsIF9kYXRhKQliZmFfdHJjKF90cmNwLCBfZGF0YSkKKyNlbHNlCisjZGVmaW5lIGJmYV90cmNfZnAoX3RyY3AsIF9kYXRhKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JGQV9UUkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYwYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV93Yy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3djLmggR2VuZXJpYyB3YWl0IGNvdW50ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGQV9XQ19IX18KKyNkZWZpbmUgX19CRkFfV0NfSF9fCisKK3R5cGVkZWYgdm9pZCAoKmJmYV93Y19yZXN1bWVfdCkgKHZvaWQgKmNiYXJnKTsKKworc3RydWN0IGJmYV93Y19zIHsKKwliZmFfd2NfcmVzdW1lX3Qgd2NfcmVzdW1lOworCXZvaWQJCSp3Y19jYmFyZzsKKwlpbnQJCXdjX2NvdW50OworfTsKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2NfdXAoc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwl3Yy0+d2NfY291bnQrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2NfZG93bihzdHJ1Y3QgYmZhX3djX3MgKndjKQoreworCXdjLT53Y19jb3VudC0tOworCWlmICh3Yy0+d2NfY291bnQgPT0gMCkKKwkJd2MtPndjX3Jlc3VtZSh3Yy0+d2NfY2JhcmcpOworfQorCisvKioKKyAqIEluaXRpYWxpemUgYSB3YWl0aW5nIGNvdW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX2luaXQoc3RydWN0IGJmYV93Y19zICp3YywgYmZhX3djX3Jlc3VtZV90IHdjX3Jlc3VtZSwgdm9pZCAqd2NfY2JhcmcpCit7CisJd2MtPndjX3Jlc3VtZSA9IHdjX3Jlc3VtZTsKKwl3Yy0+d2NfY2JhcmcgPSB3Y19jYmFyZzsKKwl3Yy0+d2NfY291bnQgPSAwOworCWJmYV93Y191cCh3Yyk7Cit9CisKKy8qKgorICogV2FpdCBmb3IgY291bnRlciB0byByZWFjaCB6ZXJvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX3dhaXQoc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwliZmFfd2NfZG93bih3Yyk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjA4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0FEQVBURVJfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQURBUFRFUl9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19tZmcuaD4KKworLyoqCisgKiBCRkEgYWRhcHRlciBsZXZlbCBhdHRyaWJ1dGVzLgorICovCitlbnVtIHsKKwlCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTiA9IFNUUlNaKEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUpLAorCQkJCQkvKgorCQkJCQkgKiE8IGFkYXB0ZXIgc2VyaWFsIG51bSBsZW5ndGgKKwkJCQkJICovCisJQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4gID0gMTYsICAvKiAgbW9kZWwgbmFtZSBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9NT0RFTF9ERVNDUl9MRU4gPSAxMjgsIC8qICBtb2RlbCBkZXNjcmlwdGlvbiBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU4gICAgPSA4LCAgIC8qICBtYW51ZmFjdHVyZXIgbmFtZSBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9TWU1fTkFNRV9MRU4gICAgPSA2NCwgIC8qICBhZGFwdGVyIHN5bWJvbGljIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfT1NfVFlQRV9MRU4JICAgID0gNjQsICAvKiAgYWRhcHRlciBvcyB0eXBlIGxlbmd0aCAqLworfTsKKworc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyB7CisJY2hhciAgICAgICAgICAgIG1hbnVmYWN0dXJlcltCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU5dOworCWNoYXIgICAgICAgICAgICBzZXJpYWxfbnVtW0JGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOXTsKKwl1MzIJcnN2ZDE7CisJY2hhciAgICAgICAgICAgIG1vZGVsW0JGQV9BREFQVEVSX01PREVMX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgbW9kZWxfZGVzY3JbQkZBX0FEQVBURVJfTU9ERUxfREVTQ1JfTEVOXTsKKwl3d25fdCAgICAgICAgICAgcHd3bjsKKwljaGFyICAgICAgICAgICAgbm9kZV9zeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKKwljaGFyICAgICAgICAgICAgaHdfdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIGZ3X3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvcHRyb21fdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIG9zX3R5cGVbQkZBX0FEQVBURVJfT1NfVFlQRV9MRU5dOworCXN0cnVjdCBiZmFfbWZnX3ZwZF9zCXZwZDsKKwlzdHJ1Y3QgbWFjX3MJbWFjOworCisJdTgJCW5wb3J0czsKKwl1OAkJbWF4X3NwZWVkOworCXU4CQlwcm90b3R5cGU7CisJY2hhcgkgICAgICAgIGFzaWNfcmV2OworCisJdTggICAgICAgICBwY2llX2dlbjsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXNfb3JpZzsKKwl1OCAgICAgICAgIHBjaWVfbGFuZXM7CisJdTgJICAgICAgICBjbmFfY2FwYWJsZTsKK307CisKKy8qKgorICogQkZBIGFkYXB0ZXIgbGV2ZWwgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9BREQ6ICAgICAgICBbaW5dOiBOb25lICAgICBbb3V0XTogc2VyaWFsX251bSwgcHd3biwgbnBvcnRzCisgKiBCRkFfUE9SVF9BRU5fUkVNT1ZFOiAgICAgW2luXTogcHd3biAgICAgW291dF06IHNlcmlhbF9udW0sIHB3d24sIG5wb3J0cworICovCitlbnVtIGJmYV9hZGFwdGVyX2Flbl9ldmVudCB7CisJQkZBX0FEQVBURVJfQUVOX0FERCAJPSAxLAkvKiAgTmV3IEFkYXB0ZXIgZm91bmQgZXZlbnQgKi8KKwlCRkFfQURBUFRFUl9BRU5fUkVNT1ZFIAk9IDIsCS8qICBBZGFwdGVyIHJlbW92ZWQgZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfYWRhcHRlcl9hZW5fZGF0YV9zIHsKKwljaGFyICAgICAgICAgICAgc2VyaWFsX251bVtCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTl07CisJdTMyICAgICAgICBucG9ydHM7CS8qICBOdW1iZXIgb2YgTlBvcnRzICovCisJd3duX3QgICAgICAgICAgIHB3d247CS8qICBXV04gb2Ygb25lIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgxYTYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQUVOX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FFTl9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfbHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pdG5pbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdGluLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pcGZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hdWRpdC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfZXRocG9ydC5oPgorCitlbnVtIGJmYV9hZW5fY2F0ZWdvcnkgeworCUJGQV9BRU5fQ0FUX0FEQVBURVIgCT0gMSwKKwlCRkFfQUVOX0NBVF9QT1JUIAk9IDIsCisJQkZBX0FFTl9DQVRfTFBPUlQgCT0gMywKKwlCRkFfQUVOX0NBVF9SUE9SVCAJPSA0LAorCUJGQV9BRU5fQ0FUX0lUTklNIAk9IDUsCisJQkZBX0FFTl9DQVRfVElOIAk9IDYsCisJQkZBX0FFTl9DQVRfSVBGQyAJPSA3LAorCUJGQV9BRU5fQ0FUX0FVRElUIAk9IDgsCisJQkZBX0FFTl9DQVRfSU9DIAk9IDksCisJQkZBX0FFTl9DQVRfRVRIUE9SVAk9IDEwLAorCUJGQV9BRU5fTUFYX0NBVCAJPSAxMAorfTsKKworI3ByYWdtYSBwYWNrKDEpCit1bmlvbiBiZmFfYWVuX2RhdGFfdSB7CisJc3RydWN0IGJmYV9hZGFwdGVyX2Flbl9kYXRhX3MgCWFkYXB0ZXI7CisJc3RydWN0IGJmYV9wb3J0X2Flbl9kYXRhX3MgCXBvcnQ7CisJc3RydWN0IGJmYV9scG9ydF9hZW5fZGF0YV9zIAlscG9ydDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgCXJwb3J0OworCXN0cnVjdCBiZmFfaXRuaW1fYWVuX2RhdGFfcyAJaXRuaW07CisJc3RydWN0IGJmYV9hdWRpdF9hZW5fZGF0YV9zIAlhdWRpdDsKKwlzdHJ1Y3QgYmZhX2lvY19hZW5fZGF0YV9zIAlpb2M7CisJc3RydWN0IGJmYV9ldGhwb3J0X2Flbl9kYXRhX3MgCWV0aHBvcnQ7Cit9OworCitzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zIHsKKwllbnVtIGJmYV9hZW5fY2F0ZWdvcnkgCWFlbl9jYXRlZ29yeTsKKwlpbnQJCQlhZW5fdHlwZTsKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSAgCWFlbl9kYXRhOworCXN0cnVjdCBiZmFfdGltZXZhbF9zICAgCWFlbl90djsKKwlzMzIgICAgICAgICAJc2VxX251bTsKKwlzMzIgICAgICAgICAJYmZhZF9udW07CisJczMyICAgICAgICAgCXJzdmRbMV07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZGVmaW5lIGJmYV9hZW5fZXZlbnRfdCBpbnQKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXVkaXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzYTk2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQVVESVRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQVVESVRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogQkZBIGF1ZGl0IGV2ZW50cworICovCitlbnVtIGJmYV9hdWRpdF9hZW5fZXZlbnQgeworCUJGQV9BVURJVF9BRU5fQVVUSF9FTkFCTEUgCT0gMSwKKwlCRkFfQVVESVRfQUVOX0FVVEhfRElTQUJMRSAJPSAyLAorfTsKKworLyoqCisgKiBhdWRpdCBldmVudCBkYXRhCisgKi8KK3N0cnVjdCBiZmFfYXVkaXRfYWVuX2RhdGFfcyB7CisJd3duX3QgICAgICAgICAgIHB3d247Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BVURJVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE5YzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXV0aC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfQVVUSF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BVVRIX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisjZGVmaW5lIFBVQkxJQ19LRVkJCQkxNTQwOQorI2RlZmluZSBQUklWQVRFX0tFWQkJCTE5MDA5CisjZGVmaW5lIEtFWV9MRU4JCQkJMzIzOTkKKyNkZWZpbmUgQkZBX0FVVEhfU0VDUkVUX1NUUklOR19MRU4JMjU2CisjZGVmaW5lIEJGQV9BVVRIX0ZBSUxfVElNRU9VVAkJMHhGRgorCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIHN0YXR1cworICovCitlbnVtIGJmYV9hdXRoX3N0YXR1cyB7CisJQkZBX0FVVEhfU1RBVFVTX05PTkUgCT0gMCwJLyogIG5vIGF1dGhlbnRpY2F0aW9uICovCisJQkZBX0FVVEhfVU5JTklUIAk9IDEsCS8qICBzdGF0ZSAtIHVuaW5pdCAqLworCUJGQV9BVVRIX05FR19TRU5EIAk9IDIsCS8qICBzdGF0ZSAtIG5lZ290aWF0ZSBzZW5kICovCisJQkZBX0FVVEhfQ0hBTF9XQUlUIAk9IDMsCS8qICBzdGF0ZSAtIGNoYWxsZW5nZSB3YWl0ICovCisJQkZBX0FVVEhfTkVHX1JFVFJZIAk9IDQsCS8qICBzdGF0ZSAtIG5lZ290aWF0ZSByZXRyeSAqLworCUJGQV9BVVRIX1JFUExZX1NFTkQgCT0gNSwJLyogIHN0YXRlIC0gcmVwbHkgc2VuZCAqLworCUJGQV9BVVRIX1NUQVRVU19XQUlUIAk9IDYsCS8qICBzdGF0ZSAtIHN0YXR1cyB3YWl0ICovCisJQkZBX0FVVEhfU1VDQ0VTUyAJPSA3LAkvKiAgc3RhdGUgLSBzdWNjZXNzICovCisJQkZBX0FVVEhfRkFJTEVEIAk9IDgsCS8qICBzdGF0ZSAtIGZhaWxlZCAqLworCUJGQV9BVVRIX1NUQVRVU19VTktOT1dOID0gOSwJLyogIGF1dGhlbnRpY2F0aW9uIHN0YXR1cyB1bmtub3duICovCit9OworCitzdHJ1Y3QgYXV0aF9wcm90b19zdGF0c19zIHsKKwl1MzIgICAgICAgIGF1dGhfcmp0czsKKwl1MzIgICAgICAgIGF1dGhfbmVnczsKKwl1MzIgICAgICAgIGF1dGhfZG9uZXM7CisKKwl1MzIgICAgICAgIGRoY2hhcF9jaGFsbGVuZ2VzOworCXUzMiAgICAgICAgZGhjaGFwX3JlcGxpZXM7CisJdTMyICAgICAgICBkaGNoYXBfc3VjY2Vzc2VzOworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiByZWxhdGVkIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9hdXRoX3N0YXRzX3MgeworCXUzMiAgICAgICAgICAgYXV0aF9mYWlsdXJlczsJLyogIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzICovCisJdTMyICAgICAgICAgICBhdXRoX3N1Y2Nlc3NlczsJLyogIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NlcyovCisJc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyBhdXRoX3J4X3N0YXRzOyAvKiAgUnggcHJvdG9jb2wgc3RhdHMgKi8KKwlzdHJ1Y3QgYXV0aF9wcm90b19zdGF0c19zIGF1dGhfdHhfc3RhdHM7IC8qICBUeCBwcm90b2NvbCBzdGF0cyAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBoYXNoIGZ1bmN0aW9uIGFsZ29yaXRobXMKKyAqLworZW51bSBiZmFfYXV0aF9hbGdvIHsKKwlCRkFfQVVUSF9BTEdPX01ENSAJPSAxLAkvKiAgTWVzc2FnZS1EaWdlc3QgYWxnb3JpdGhtIDUgKi8KKwlCRkFfQVVUSF9BTEdPX1NIQTEgCT0gMiwJLyogIFNlY3VyZSBIYXNoIEFsZ29yaXRobSAxICovCisJQkZBX0FVVEhfQUxHT19NUyAJPSAzLAkvKiAgTUQ1LCB0aGVuIFNIQS0xICovCisJQkZBX0FVVEhfQUxHT19TTSAJPSA0LAkvKiAgU0hBLTEsIHRoZW4gTUQ1ICovCit9OworCisvKioKKyAqIERIIEdyb3VwcworICoKKyAqIEN1cnJlbnQgdmFsdWUgY291bGQgYmUgY29tYmluYXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMKKyAqLworZW51bSBiZmFfYXV0aF9ncm91cCB7CisJQkZBX0FVVEhfR1JPVVBfREhOVUxMIAk9IDAsCS8qICBESCBOVUxMICh2YWx1ZSA9PSAwKSAqLworCUJGQV9BVVRIX0dST1VQX0RINzY4IAk9IDEsCS8qICBESCBncm91cCA3NjggKHZhbHVlID09IDEpICovCisJQkZBX0FVVEhfR1JPVVBfREgxMDI0IAk9IDIsCS8qICBESCBncm91cCAxMDI0ICh2YWx1ZSA9PSAyKSAqLworCUJGQV9BVVRIX0dST1VQX0RIMTI4MCAJPSA0LAkvKiAgREggZ3JvdXAgMTI4MCAodmFsdWUgPT0gMykgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDE1MzYgCT0gOCwJLyogIERIIGdyb3VwIDE1MzYgKHZhbHVlID09IDQpICovCisKKwlCRkFfQVVUSF9HUk9VUF9BTEwgCT0gMjU2CS8qICBVc2UgZGVmYXVsdCBESCBncm91cCBvcmRlcgorCQkJCQkgKiAgICAwLCAxLCAyLCAzLCA0ICovCit9OworCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIHNlY3JldCBzb3VyY2VzCisgKi8KK2VudW0gYmZhX2F1dGhfc2VjcmV0c291cmNlIHsKKwlCRkFfQVVUSF9TRUNTUkNfTE9DQUwgCT0gMSwJLyogIGxvY2FsbHkgY29uZmlndXJlZCAqLworCUJGQV9BVVRIX1NFQ1NSQ19SQURJVVMgCT0gMiwJLyogIHVzZSByYWRpdXMgc2VydmVyICovCisJQkZBX0FVVEhfU0VDU1JDX1RBQ0FDUyAJPSAzLAkvKiAgVEFDQUNTIHNlcnZlciAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfYXV0aF9hdHRyX3MgeworCWVudW0gYmZhX2F1dGhfc3RhdHVzIAlzdGF0dXM7CisJZW51bSBiZmFfYXV0aF9hbGdvIAlhbGdvOworCWVudW0gYmZhX2F1dGhfZ3JvdXAgCWRoX2dycDsKKwl1MTYJCXJqdF9jb2RlOworCXUxNgkJcmp0X2NvZGVfZXhwOworCXU4CQkJc2VjcmV0X3NldDsKKwl1OAkJCXJlc3ZbN107Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNGFhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfQk9PVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19CT09UX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCitlbnVtIHsKKwlCRkFfQk9PVF9CT09UTFVOX01BWCA9IDQsCS8qICBtYXhpbXVtIGJvb3QgbHVuIHBlciBJT0MgKi8KK307CisKKyNkZWZpbmUgQk9PVF9DRkdfUkVWMQkxCisKKy8qKgorICogICAgICBCb290IG9wdGlvbnMgc2V0dGluZy4gQm9vdCBvcHRpb25zIHNldHRpbmcgZGV0ZXJtaW5lcyBmcm9tIHdoZXJlCisgKiAgICAgIHRvIGdldCB0aGUgYm9vdCBsdW4gaW5mb3JtYXRpb24KKyAqLworZW51bSBiZmFfYm9vdF9ib290b3B0IHsKKyAgICBCRkFfQk9PVF9BVVRPX0RJU0NPVkVSID0gMCwgICAgLyogIEJvb3QgZnJvbSBibHVuIHByb3ZpZGVkIGJ5IGZhYnJpYyAqLworICAgIEJGQV9CT09UX1NUT1JFRF9CTFVOICAgPSAxLCAgICAvKiAgQm9vdCBmcm9tIGJsdW5zIHN0b3JlZCBpbiBmbGFzaCAgICovCisgICAgQkZBX0JPT1RfRklSU1RfTFVOICAgICA9IDIsICAgIC8qICBCb290IGZyb20gZmlyc3QgZGlzY292ZXJlZCBibHVuICAgKi8KK307CisKKy8qKgorICogQm9vdCBsdW4gaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgeworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgcG9ydCB3d24gb2YgdGFyZ2V0ICovCisJbHVuX3QgICAgICAgICAgIGx1bjsJLyogIDY0LWJpdCBsdW4gKi8KK307CisKKy8qKgorICogQk9PVCBib290IGNvbmZpZ3VyYXRvbgorICovCitzdHJ1Y3QgYmZhX2Jvb3RfY2ZnX3MgeworCXU4ICAgICAgICAgdmVyc2lvbjsKKwl1OCAgICAgICAgIHJzdmQxOworCXUxNiAgICAgICAgY2hrc3VtOworCisJdTggICAgICAgICBlbmFibGU7CQkvKiAgZW5hYmxlL2Rpc2FibGUgU0FOIGJvb3QgKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIGJvb3Qgc3BlZWQgc2V0dGluZ3MgKi8KKwl1OCAgICAgICAgIHRvcG9sb2d5OwkvKiAgYm9vdCB0b3BvbG9neSBzZXR0aW5nICovCisJdTggICAgICAgICBib290b3B0OwkvKiAgYmZhX2Jvb3RfYm9vdG9wdF90ICovCisKKwl1MzIgICAgICAgIG5ibHVuczsJCS8qICBudW1iZXIgb2YgYm9vdCBsdW5zICovCisKKwl1MzIgICAgICAgIHJzdmQyOworCisJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKKwlzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIGJsdW5fZGlzY1tCRkFfQk9PVF9CT09UTFVOX01BWF07Cit9OworCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0JPT1RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2NlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMGEyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogIGJmYV9kZWZzX2NlZS5oIEludGVyZmFjZSBkZWNsYXJhdGlvbnMgYmV0d2VlbiBob3N0IGJhc2VkCisgKglCRkFMIGFuZCBEQ0JYL0xMRFAgbW9kdWxlIGluIEZpcm13YXJlCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0NFRV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19DRUVfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIEJGQV9DRUVfTExEUF9NQVhfU1RSSU5HX0xFTiAoMTI4KQorCisKKy8qIEZJWE1FOiB0aGlzIGlzIGNvbWluZyBmcm9tIHRoZSBwcm90b2NvbCBzcGVjLiBDYW4gdGhlIGhvc3QgJiBhcHBzIHNoYXJlIHRoZQorICAgcHJvdG9jb2wgLmggZmlsZXMgPworICovCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX09USEVSICAgICAgIDB4MDAwMQorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9SRVBFQVRFUiAgICAweDAwMDIKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfTUFDX0JSSURHRSAgMHgwMDA0CisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1dMQU5fQVAgICAgIDB4MDAwOAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9ST1VURVIgICAgICAweDAwMTAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfVEVMRVBIT05FIAkgMHgwMDIwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX0RPQ1NJU19DRCAgIDB4MDA0MAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9TVEFUSU9OICAgICAweDAwODAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfQ1ZMQU4JICAgICAweDAxMDAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfU1ZMQU4gCSAgICAgMHgwMjAwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1RQTVIJCSAweDA0MDAKKworCisvKiBMTERQIHN0cmluZyB0eXBlICovCitzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHsKKwl1OCBzdWJfdHlwZTsKKwl1OCBsZW47CisJdTggcnN2ZFsyXTsKKwl1OCB2YWx1ZVtCRkFfQ0VFX0xMRFBfTUFYX1NUUklOR19MRU5dOworfTsKKworCisvKiBMTERQIHBhcmFtdGVycyAqLworc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyB7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBjaGFzc2lzX2lkOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgcG9ydF9pZDsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHBvcnRfZGVzYzsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHN5c19uYW1lOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3Mgc3lzX2Rlc2M7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBtZ210X2FkZHI7CisJdTE2ICAgIHRpbWVfdG9faW50ZXJ2YWw7CisJdTE2ICAgIGVuYWJsZWRfc3lzdGVtX2NhcDsKK307CisKK2VudW0gYmZhX2NlZV9kY2J4X3ZlcnNpb25fZSB7CisJRENCWF9QUk9UT0NPTF9QUkVDRUUgPSAxLAorCURDQlhfUFJPVE9DT0xfQ0VFICAgID0gMiwKK307CisKK2VudW0gYmZhX2NlZV9sbHNfZSB7CisJQ0VFX0xMU19ET1dOX05PX1RMViA9IDAsIC8qIExMUyBpcyBkb3duIGJlY2F1c2UgdGhlIFRMViBub3Qgc2VudCBieQorCQkJCSAgKiB0aGUgcGVlciAqLworCUNFRV9MTFNfRE9XTiAgICAgICAgPSAxLCAvKiBMTFMgaXMgZG93biBhcyBhZHZlcnRpc2VkIGJ5IHRoZSBwZWVyICovCisJQ0VFX0xMU19VUCAgICAgICAgICA9IDIsCit9OworCisvKiBDRUUvRENCWCBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgYmZhX2NlZV9kY2J4X2NmZ19zIHsKKwl1OCBwZ2lkWzhdOworCXU4IHBnX3BlcmNlbnRhZ2VbOF07CisJdTggcGZjX2VuYWJsZWQ7ICAgICAgICAgIC8qIGJpdG1hcCBvZiBwcmlvcnRpZXMgd2l0aCBQRkMgZW5hYmxlZCAqLworCXU4IGZjb2VfdXNlcl9wcmlvcml0eTsgICAvKiBiaXRtYXAgb2YgcHJpb3JpdGllcyB1c2VkIGZvciBGY29FCisJCQkJICAgICAgICogdHJhZmZpYyAqLworCXU4IGRjYnhfdmVyc2lvbjsJLyogb3BlcmF0aW5nIHZlcnNpb246Q0VFIG9yIHByZUNFRSAqLworCXU4IGxsc19mY29lOwkvKiBGQ29FIExvZ2ljYWwgTGluayBTdGF0dXMgKi8KKwl1OCBsbHNfbGFuOwkvKiBMQU4gTG9naWNhbCBMaW5rIFN0YXR1cyAqLworCXU4IHJzdmRbM107Cit9OworCisvKiBDRUUgc3RhdHVzICovCisvKiBNYWtpbmcgdGhpcyB0byB0cmktc3RhdGUgZm9yIHRoZSBiZW5lZml0IG9mIHBvcnQgbGlzdCBjb21tYW5kICovCitlbnVtIGJmYV9jZWVfc3RhdHVzX2UgeworICAgIENFRV9QSFlfRE9XTiA9IDAsCisgICAgQ0VFX1BIWV9VUCA9IDEsCisgICAgQ0VFX1VQID0gMiwKK307CisKKy8qIENFRSBRdWVyeSAqLworc3RydWN0IGJmYV9jZWVfYXR0cl9zIHsKKwl1OCAgICAgICAgICAgICAgICAgICBjZWVfc3RhdHVzOworCXU4ICAgICAgICAgICAgICAgICAgIGVycm9yX3JlYXNvbjsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zIGxsZHBfcmVtb3RlOworCXN0cnVjdCBiZmFfY2VlX2RjYnhfY2ZnX3MgZGNieF9yZW1vdGU7CisJbWFjX3Qgc3JjX21hYzsKKwl1OCBsaW5rX3NwZWVkOworCXU4IGZpbGxlclszXTsKK307CisKKworCisKKy8qIExMRFAvRENCWC9DRUUgU3RhdGlzdGljcyAqLworCitzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgeworCXUzMiBmcmFtZXNfdHJhbnNtaXR0ZWQ7CisJdTMyIGZyYW1lc19hZ2VkX291dDsKKwl1MzIgZnJhbWVzX2Rpc2NhcmRlZDsKKwl1MzIgZnJhbWVzX2luX2Vycm9yOworCXUzMiBmcmFtZXNfcmN2ZDsKKwl1MzIgdGx2c19kaXNjYXJkZWQ7CisJdTMyIHRsdnNfdW5yZWNvZ25pemVkOworfTsKKworc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zIHsKKwl1MzIgc3VidGx2c191bnJlY29nbml6ZWQ7CisJdTMyIG5lZ290aWF0aW9uX2ZhaWxlZDsKKwl1MzIgcmVtb3RlX2NmZ19jaGFuZ2VkOworCXUzMiB0bHZzX3JlY2VpdmVkOworCXUzMiB0bHZzX2ludmFsaWQ7CisJdTMyIHNlcW5vOworCXUzMiBhY2tubzsKKwl1MzIgcmVjdmRfc2Vxbm87CisJdTMyIHJlY3ZkX2Fja25vOworfTsKKworc3RydWN0IGJmYV9jZWVfY2ZnX3N0YXRzX3MgeworCXUzMiBjZWVfc3RhdHVzX2Rvd247CisJdTMyIGNlZV9zdGF0dXNfdXA7CisJdTMyIGNlZV9od19jZmdfY2hhbmdlZDsKKwl1MzIgcmVjdmRfaW52YWxpZF9jZmc7Cit9OworCisKK3N0cnVjdCBiZmFfY2VlX3N0YXRzX3MgeworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RhdHNfcyBsbGRwX3N0YXRzOworCXN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyBkY2J4X3N0YXRzOworCXN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICBjZmdfc3RhdHM7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisKKyNlbmRpZgkvKiBfX0JGQV9ERUZTX0NFRV9IX18gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDQ5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19EUklWRVJfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfRFJJVkVSX0hfXworCisvKioKKyAqIERyaXZlciBzdGF0aXN0aWNzCisgKi8KKwl1MTYgICAgdG1faW9fYWJvcnQ7CisgICAgdTE2ICAgIHRtX2lvX2Fib3J0X2NvbXA7CisgICAgdTE2ICAgIHRtX2x1bl9yZXNldDsKKyAgICB1MTYgICAgdG1fbHVuX3Jlc2V0X2NvbXA7CisgICAgdTE2ICAgIHRtX3RhcmdldF9yZXNldDsKKyAgICB1MTYgICAgdG1fYnVzX3Jlc2V0OworICAgIHUxNiAgICBpb2NfcmVzdGFydDsgICAgICAgIC8qICBJT0MgcmVzdGFydCBjb3VudCAqLworICAgIHUxNiAgICBpb19wZW5kaW5nOyAgICAgICAgIC8qICBvdXRzdGFuZGluZyBpbyBjb3VudCBwZXItSU9DICovCisgICAgdTY0ICAgIGNvbnRyb2xfcmVxOworICAgIHU2NCAgICBpbnB1dF9yZXE7CisgICAgdTY0ICAgIG91dHB1dF9yZXE7CisgICAgdTY0ICAgIGlucHV0X3dvcmRzOworICAgIHU2NCAgICBvdXRwdXRfd29yZHM7Cit9IGJmYV9kcml2ZXJfc3RhdHNfdDsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOWIzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2V0aHBvcnQuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19FVEhQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0VUSFBPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaD4KKyNpbmNsdWRlIDxjbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oPgorCitzdHJ1Y3QgYm5hX3R4X2luZm9fcyB7CisJdTMyICAgIG1pbmlwb3J0X3N0YXRlOworCXUzMiAgICBhZGFwdGVyX3N0YXRlOworCXU2NCAgICB0eF9jb3VudDsKKwl1NjQgICAgdHhfd2k7CisJdTY0ICAgIHR4X3NnOworCXU2NCAgICB0eF90Y3BfY2hrc3VtOworCXU2NCAgICB0eF91ZHBfY2hrc3VtOworCXU2NCAgICB0eF9pcF9jaGtzdW07CisJdTY0ICAgIHR4X2xzb3YxOworCXU2NCAgICB0eF9sc292MjsKKwl1NjQgICAgdHhfbWF4X3NnX2xlbiA7Cit9OworCitzdHJ1Y3QgYm5hX3J4X3F1ZXVlX2luZm9fcyB7CisJdTE2ICAgIHFfaWQgOworCXUxNiAgICBidWZfc2l6ZSA7CisJdTE2ICAgIGJ1Zl9jb3VudCA7CisJdTE2ICAgIHJzdmQgOworCXU2NCAgICByeF9jb3VudCA7CisJdTY0ICAgIHJ4X2Ryb3BwZWQgOworCXU2NCAgICByeF91bnN1cHBvcnRlZCA7CisJdTY0ICAgIHJ4X2ludGVybmFsX2VyciA7CisJdTY0ICAgIHJzc19jb3VudCA7CisJdTY0ICAgIHZsYW5fY291bnQgOworCXU2NCAgICByeF90Y3BfY2hrc3VtIDsKKwl1NjQgICAgcnhfdWRwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X2lwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X2hkcyA7Cit9OworCitzdHJ1Y3QgYm5hX3J4X3Ffc2V0X3MgeworCXUxNiAgICBxX3NldF90eXBlOworCXUzMiAgICBtaW5pcG9ydF9zdGF0ZTsKKwl1MzIgICAgYWRhcHRlcl9zdGF0ZTsKKwlzdHJ1Y3QgYm5hX3J4X3F1ZXVlX2luZm9fcyAgICByeF9xdWV1ZVsyXTsKK307CisKK3N0cnVjdCBibmFfcG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYm5hX3R4X2luZm9fcyAgIHR4X3N0YXRzOworCXUxNiAgICAgICAgcXNldF9jb3VudCA7CisJc3RydWN0IGJuYV9yeF9xX3NldF9zICByeF9xc2V0WzhdOworfTsKKworc3RydWN0IGJmYV9ldGhwb3J0X3N0YXRzX3MgeworCXN0cnVjdCBibmFfc3RhdHNfdHhmCXR4Zl9zdGF0c1sxXTsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3J4ZglyeGZfc3RhdHNbMV07CisJc3RydWN0IGJuYWRfZHJ2X3N0YXRzIGRydl9zdGF0czsKK307CisKKy8qKgorICogRXRoZXJuZXQgcG9ydCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1BPUlRfQUVOX0VUSF9MSU5LVVA6ICAgIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0xJTktET1dOOiAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqIEJGQV9QT1JUX0FFTl9FVEhfRU5BQkxFOiAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqIEJGQV9QT1JUX0FFTl9FVEhfRElTQUJMRTogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKgorICovCitlbnVtIGJmYV9ldGhwb3J0X2Flbl9ldmVudCB7CisJQkZBX0VUSFBPUlRfQUVOX0xJTktVUCA9IDEsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayB1cCBldmVudCAqLworCUJGQV9FVEhQT1JUX0FFTl9MSU5LRE9XTiA9IDIsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBkb3duIGV2ZW50ICovCisJQkZBX0VUSFBPUlRfQUVOX0VOQUJMRSA9IDMsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBlbmFibGUgZXZlbnQgKi8KKwlCRkFfRVRIUE9SVF9BRU5fRElTQUJMRSA9IDQsIC8qICBCYXNlIFBvcnQgRXRoZXJuZXQgbGluayBkaXNhYmxlCisJCQkJICAgICAgKiBldmVudCAqLworfTsKKworc3RydWN0IGJmYV9ldGhwb3J0X2Flbl9kYXRhX3MgeworCW1hY190IG1hYzsJLyogIE1BQyBhZGRyZXNzIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCit9OworCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0VUSFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDhmNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfRkNQSU1fSF9fCisKK3N0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyB7CisJdTMyICAgICAgICB0b3RhbF9pb3M7CS8qICBUb3RhbCBJTyBjb3VudCAqLworCXUzMiAgICAgICAgcXJlc3VtZXM7CS8qICBJTyB3YWl0aW5nIGZvciBDUSBzcGFjZSAqLworCXUzMiAgICAgICAgbm9faW90YWdzOwkvKiAgTk8gSU8gY29udGV4dHMgKi8KKwl1MzIgICAgICAgIGlvX2Fib3J0czsJLyogIElPIGFib3J0IHJlcXVlc3RzICovCisJdTMyICAgICAgICBub190c2tpbXM7CS8qICBOTyB0YXNrIG1hbmFnZW1lbnQgY29udGV4dHMgKi8KKwl1MzIgICAgICAgIGlvY29tcF9vazsJLyogIElPIGNvbXBsZXRpb25zIHdpdGggT0sgc3RhdHVzICovCisJdTMyICAgICAgICBpb2NvbXBfdW5kZXJydW47CS8qICBJTyB1bmRlcnJ1biAoZ29vZCkgKi8KKwl1MzIgICAgICAgIGlvY29tcF9vdmVycnVuOwkvKiAgSU8gb3ZlcnJ1biAoZ29vZCkgKi8KKwl1MzIgICAgICAgIGlvY29tcF9hYm9ydGVkOwkvKiAgQWJvcnRlZCBJTyByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgaW9jb21wX3RpbWVkb3V0OwkvKiAgSU8gdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGlvY29tX25leHVzX2Fib3J0OwkvKiAgSU8gc2VsZWN0aW9uIHRpbWVvdXRzICovCisJdTMyICAgICAgICBpb2NvbV9wcm90b19lcnI7CS8qICBJTyBwcm90b2NvbCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGlvY29tX2RpZl9lcnI7CS8qICBJTyBTQkMtMyBwcm90ZWN0aW9uIGVycm9ycyAqLworCXUzMiAgICAgICAgaW9jb21fdG1fYWJvcnQ7CS8qICBJTyBhYm9ydGVkIGJ5IFRNIHJlcXVlc3RzICovCisJdTMyICAgICAgICBpb2NvbV9zcWVyX25lZWRlZDsJLyogIElPIHJldHJ5IGZvciBTUSBlcnJvcgorCQkJCQkJICpyZWNvdmVyeSAqLworCXUzMiAgICAgICAgaW9jb21fcmVzX2ZyZWU7CS8qICBEZWxheWVkIGZyZWVpbmcgb2YgSU8gcmVzb3VyY2VzICovCisJdTMyICAgICAgICBpb2NvbXBfc2NzaWVycjsJLyogIElPIHdpdGggbm9uLWdvb2QgU0NTSSBzdGF0dXMgKi8KKwl1MzIgICAgICAgIGlvY29tX2hvc3RhYnJ0czsJLyogIEhvc3QgSU8gYWJvcnQgcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIGlvY29tX3V0YWdzOwkvKiAgSU8gY29tcCB3aXRoIHVua25vd24gdGFncyAqLworCXUzMiAgICAgICAgaW9fY2xlYW51cHM7CS8qICBJTyBpbXBsaWNpdGx5IGFib3J0ZWQgKi8KKwl1MzIgICAgICAgIGlvX3RtYWJvcnRzOwkvKiAgSU8gYWJvcnRlZCBkdWUgdG8gVE0gY29tbWFuZHMgKi8KKwl1MzIgICAgICAgIHJzdmQ7Cit9OworI2VuZGlmIC8qX19CRkFfREVGU19GQ1BJTV9IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NmNTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU1fQ09NTU9OX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18KKworI2RlZmluZQlCRkFfQURBUFRFUl9OQU1FX0xFTgkyNTYKKyNkZWZpbmUgQkZBX0FEQVBURVJfR1VJRF9MRU4gICAgMjU2CisjZGVmaW5lIFJFU0VSVkVEX1ZMQU5fTkFNRSAgICAgIEwiUE9SVCBWTEFOIgorI2RlZmluZSBQQVNTVEhSVV9WTEFOX05BTUUgICAgICBMIlBBU1NUSFJVIFZMQU4iCisKKwl1NjQJdHhfcGt0X2NudDsKKwl1NjQJcnhfcGt0X2NudDsKKwl1MzIJZHVyYXRpb247CisJdTgJCXN0YXR1czsKK30gYmZhX2ltX3N0YXRzX3QsICpwYmZhX2ltX3N0YXRzX3Q7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg2YTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fdGVhbS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU1fVEVBTV9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNkZWZpbmUJQkZBX1RFQU1fTUFYX1BPUlRTCTgKKyNkZWZpbmUJQkZBX1RFQU1fTkFNRV9MRU4JMjU2CisjZGVmaW5lIEJGQV9NQVhfTlVNX1RFQU1TCTE2CisjZGVmaW5lIEJGQV9URUFNX0lOVkFMSURfREVMQVkgLTEKKworCUJGQV9MQUNQX1JBVEVfU0xPVyA9IDEsCisJQkZBX0xBQ1BfUkFURV9GQVNUCit9IGJmYV9pbV9sYWNwX3JhdGVfdDsKKworCUJGQV9URUFNX01PREVfRkFJTF9PVkVSID0gMSwKKwlCRkFfVEVBTV9NT0RFX0ZBSUxfQkFDSywKKwlCRkFfVEVBTV9NT0RFX0xBQ1AsCisJQkZBX1RFQU1fTU9ERV9OT05FCit9IGJmYV9pbV90ZWFtX21vZGVfdDsKKworCUJGQV9YTUlUX1BPTElDWV9MMiA9IDEsCisJQkZBX1hNSVRfUE9MSUNZX0wzX0w0Cit9IGJmYV9pbV94bWl0X3BvbGljeV90OworCisJYmZhX2ltX3RlYW1fbW9kZV90ICAgICB0ZWFtX21vZGU7CisJYmZhX2ltX2xhY3BfcmF0ZV90ICAgICBsYWNwX3JhdGU7CisJYmZhX2ltX3htaXRfcG9saWN5X3QgICB4bWl0X3BvbGljeTsKKwlpbnQgICAJICAgICAgICAgIGRlbGF5OworCXdjaGFyX3QgICAgCSAgcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07CisJd2NoYXJfdCAgICAgICAgCSAgcHJlZmVycmVkX3ByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCW1hY190CSAgICAgICAgICBtYWM7CisJdTE2ICAgICAgIAkgIG51bV9wb3J0czsKKwl1MTYgICAgICAgICAgbnVtX3ZsYW5zOworCXUxNiB2bGFuX2xpc3RbQkZBX01BWF9WTEFOU19QRVJfUE9SVF07CisJd2NoYXJfdAkgdGVhbV9ndWlkX2xpc3RbQkZBX1RFQU1fTUFYX1BPUlRTXVtCRkFfQURBUFRFUl9HVUlEX0xFTl07CisJd2NoYXJfdAkgaW9jX25hbWVfbGlzdFtCRkFfVEVBTV9NQVhfUE9SVFNdW0JGQV9BREFQVEVSX05BTUVfTEVOXTsKK30gYmZhX2ltX3RlYW1fYXR0cl90OworCisJd2NoYXJfdAkJICAgICAgICAgICAgIHRlYW1fbmFtZVtCRkFfVEVBTV9OQU1FX0xFTl07CisJYmZhX2ltX3htaXRfcG9saWN5X3QJIHhtaXRfcG9saWN5OworCWludCAgICAgICAgICAgICAgICAgCSBkZWxheTsKKwl3Y2hhcl90ICAgICAgICAgICAgICAgIAkgcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07CisJd2NoYXJfdCAgICAgICAgICAgICAgIAkgcHJlZmVycmVkX3ByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworfSBiZmFfaW1fdGVhbV9lZGl0X3QsICpwYmZhX2ltX3RlYW1fZWRpdF90OworCisJd2NoYXJfdAkJCQkJdGVhbV9uYW1lW0JGQV9URUFNX05BTUVfTEVOXTsKKwliZmFfaW1fdGVhbV9tb2RlX3QgICAgICB0ZWFtX21vZGU7CisJbWFjX3QJICAgICAgICAgICAgICAgCW1hYzsKK30gYmZhX2ltX3RlYW1faW5mb190OworCisJYmZhX2ltX3RlYW1faW5mb190IAkJdGVhbV9pbmZvW0JGQV9NQVhfTlVNX1RFQU1TXTsKKwl1MTYgCQkJCW51bV90ZWFtczsKK30gYmZhX2ltX3RlYW1fbGlzdF90LCAqcGJmYV9pbV90ZWFtX2xpc3RfdDsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU1fVEVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkNTMyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JT0NfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU9DX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZGFwdGVyLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wbS5oPgorCitlbnVtIHsKKwlCRkFfSU9DX0RSSVZFUl9MRU4JPSAxNiwKKwlCRkFfSU9DX0NISVBfUkVWX0xFTiAJPSA4LAorfTsKKworLyoqCisgKiBEcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb25zLgorICovCitzdHJ1Y3QgYmZhX2lvY19kcml2ZXJfYXR0cl9zIHsKKwljaGFyICAgICAgICAgICAgZHJpdmVyW0JGQV9JT0NfRFJJVkVSX0xFTl07CS8qICBkcml2ZXIgbmFtZSAqLworCWNoYXIgICAgICAgICAgICBkcml2ZXJfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBkcml2ZXIgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBmd192ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIGZpcm13YXJlIHZlcnNpb24qLworCWNoYXIgICAgICAgICAgICBiaW9zX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgYmlvcyB2ZXJzaW9uICovCisJY2hhciAgICAgICAgICAgIGVmaV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIEVGSSB2ZXJzaW9uICovCisJY2hhciAgICAgICAgICAgIG9iX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgb3BlbmJvb3QgdmVyc2lvbiovCit9OworCisvKioKKyAqIElPQyBQQ0kgZGV2aWNlIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcyB7CisJdTE2ICAgICAgICB2ZW5kb3JfaWQ7CS8qICBQQ0kgdmVuZG9yIElEICovCisJdTE2ICAgICAgICBkZXZpY2VfaWQ7CS8qICBQQ0kgZGV2aWNlIElEICovCisJdTE2ICAgICAgICBzc2lkOwkJLyogIHN1YnN5c3RlbSBJRCAqLworCXUxNiAgICAgICAgc3N2aWQ7CQkvKiAgc3Vic3lzdGVtIHZlbmRvciBJRCAqLworCXUzMiAgICAgICAgcGNpZm47CQkvKiAgUENJIGRldmljZSBmdW5jdGlvbiAqLworCXUzMiAgICAgICAgcnN2ZDsJCS8qIHBhZGRpbmcgKi8KKwl1OCAgICAgICAgIGNoaXBfcmV2W0JGQV9JT0NfQ0hJUF9SRVZfTEVOXTsJIC8qICBjaGlwIHJldmlzaW9uICovCit9OworCisvKioKKyAqIElPQyBzdGF0ZXMKKyAqLworZW51bSBiZmFfaW9jX3N0YXRlIHsKKwlCRkFfSU9DX1JFU0VUICAgICAgID0gMSwgIC8qICBJT0MgaXMgaW4gcmVzZXQgc3RhdGUgKi8KKwlCRkFfSU9DX1NFTVdBSVQgICAgID0gMiwgIC8qICBXYWl0aW5nIGZvciBJT0MgaGFyZHdhcmUgc2VtYXBob3JlICovCisJQkZBX0lPQ19IV0lOSVQgCSAgICA9IDMsICAvKiAgSU9DIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkICovCisJQkZBX0lPQ19HRVRBVFRSICAgICA9IDQsICAvKiAgSU9DIGlzIGJlaW5nIGNvbmZpZ3VyZWQgKi8KKwlCRkFfSU9DX09QRVJBVElPTkFMID0gNSwgIC8qICBJT0MgaXMgb3BlcmF0aW9uYWwgKi8KKwlCRkFfSU9DX0lOSVRGQUlMICAgID0gNiwgIC8qICBJT0MgaGFyZHdhcmUgZmFpbHVyZSAqLworCUJGQV9JT0NfSEJGQUlMICAgICAgPSA3LCAgLyogIElPQyBoZWFydC1iZWF0IGZhaWx1cmUgKi8KKwlCRkFfSU9DX0RJU0FCTElORyAgID0gOCwgIC8qICBJT0MgaXMgYmVpbmcgZGlzYWJsZWQgKi8KKwlCRkFfSU9DX0RJU0FCTEVEICAgID0gOSwgIC8qICBJT0MgaXMgZGlzYWJsZWQgKi8KKwlCRkFfSU9DX0ZXTUlTTUFUQ0ggID0gMTAsIC8qICBJT0MgZmlybXdhcmUgZGlmZmVyZW50IGZyb20gZHJpdmVycyAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcyB7CisJdTMyICAgICAgICBoYl9jb3VudDsKKwl1MzIgICAgICAgIGNmZ19yZXFzOworCXUzMiAgICAgICAgZW5hYmxlX3JlcXM7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcXM7CisJdTMyICAgICAgICBzdGF0c19yZXFzOworCXUzMiAgICAgICAgY2xyc3RhdHNfcmVxczsKKwl1MzIgICAgICAgIHVua25vd25fcmVxczsKKwl1MzIgICAgICAgIGljX3JlcXM7CQkvKiAgaW50ZXJydXB0IGNvYWxlc2NlIHJlcXMgKi8KK307CisKKy8qKgorICogSU9DIGRyaXZlciBzdGF0cworICovCitzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcyB7CisJdTMyCWlvY19pc3JzOworCXUzMglpb2NfZW5hYmxlczsKKwl1MzIJaW9jX2Rpc2FibGVzOworCXUzMglpb2NfaGJmYWlsczsKKwl1MzIJaW9jX2Jvb3RzOworCXUzMglzdGF0c190bW9zOworCXUzMiAgICAgICAgaGJfY291bnQ7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcXM7CisJdTMyICAgICAgICBlbmFibGVfcmVxczsKKwl1MzIgICAgICAgIGRpc2FibGVfcmVwbGllczsKKwl1MzIgICAgICAgIGVuYWJsZV9yZXBsaWVzOworfTsKKworLyoqCisgKiBJT0Mgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2lvY19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcwlkcnZfc3RhdHM7IC8qICBkcml2ZXIgSU9DIHN0YXRzICovCisJc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcyAJZndfc3RhdHM7ICAvKiAgZmlybXdhcmUgSU9DIHN0YXRzICovCit9OworCisKK2VudW0gYmZhX2lvY190eXBlX2UgeworCUJGQV9JT0NfVFlQRV9GQwkgID0gMSwKKwlCRkFfSU9DX1RZUEVfRkNvRSA9IDIsCisJQkZBX0lPQ19UWVBFX0xMCSAgPSAzLAorfTsKKworLyoqCisgKiBJT0MgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfaW9jX2F0dHJfcyB7CisJZW51bSBiZmFfaW9jX3R5cGVfZQkJaW9jX3R5cGU7CisJZW51bSBiZmFfaW9jX3N0YXRlIAkJc3RhdGU7CQkvKiAgSU9DIHN0YXRlICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zCWFkYXB0ZXJfYXR0cjsJLyogIEhCQSBhdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9pb2NfZHJpdmVyX2F0dHJfcyAJZHJpdmVyX2F0dHI7CS8qICBkcml2ZXIgYXR0ciAgICAqLworCXN0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MJcGNpX2F0dHI7CisJdTgJCQkJcG9ydF9pZDsJLyogIHBvcnQgbnVtYmVyICAgICovCit9OworCisvKioKKyAqIEJGQSBJT0MgbGV2ZWwgZXZlbnRzCisgKi8KK2VudW0gYmZhX2lvY19hZW5fZXZlbnQgeworCUJGQV9JT0NfQUVOX0hCR09PRAk9IDEsCS8qICBIZWFydCBCZWF0IHJlc3RvcmUgZXZlbnQJKi8KKwlCRkFfSU9DX0FFTl9IQkZBSUwJPSAyLAkvKiAgSGVhcnQgQmVhdCBmYWlsdXJlIGV2ZW50CSovCisJQkZBX0lPQ19BRU5fRU5BQkxFCT0gMywJLyogIElPQyBlbmFibGVkIGV2ZW50CQkqLworCUJGQV9JT0NfQUVOX0RJU0FCTEUJPSA0LAkvKiAgSU9DIGRpc2FibGVkIGV2ZW50CQkqLworCUJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gJPSA1LAkvKiAgSU9DIGZpcm13YXJlIG1pc21hdGNoCSovCit9OworCisvKioKKyAqIEJGQSBJT0MgbGV2ZWwgZXZlbnQgZGF0YSwgbm93IGp1c3QgYSBwbGFjZSBob2xkZXIKKyAqLworc3RydWN0IGJmYV9pb2NfYWVuX2RhdGFfcyB7CisJZW51bSBiZmFfaW9jX3R5cGVfZSBpb2NfdHlwZTsKKwl3d25fdAlwd3duOworCW1hY190CW1hYzsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2YmNiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lPQ0ZDX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZGFwdGVyLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wbS5oPgorCisjZGVmaW5lIEJGQV9JT0NGQ19JTlRSX0RFTEFZCTExMjUKKyNkZWZpbmUgQkZBX0lPQ0ZDX0lOVFJfTEFURU5DWQkyMjUKKworLyoqCisgKiBJbnRlcnJ1cHQgY29hbGVzY2luZyBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zIHsKKwliZmFfYm9vbGVhbl90CWNvYWxlc2NlOwkvKiAgZW5hYmxlL2Rpc2FibGUgY29hbGVzY2luZyAqLworCXUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMgICAqLworCXUxNglkZWxheTsJCS8qICBkZWxheSBpbiBtaWNyb3NlY29uZHMgICAgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBjb25maWd1cmF0b24KKyAqLworc3RydWN0IGJmYV9pb2NmY19md2NmZ19zIHsKKwl1MTYgICAgICAgIG51bV9mYWJyaWNzOwkvKiAgbnVtYmVyIG9mIGZhYnJpY3MJCSovCisJdTE2ICAgICAgICBudW1fbHBvcnRzOwkvKiAgbnVtYmVyIG9mIGxvY2FsIGxwb3J0cwkqLworCXUxNiAgICAgICAgbnVtX3Jwb3J0czsJLyogIG51bWJlciBvZiByZW1vdGUgcG9ydHMJKi8KKwl1MTYgICAgICAgIG51bV9pb2ltX3JlcXM7CS8qICBudW1iZXIgb2YgSU8gcmVxcwkJKi8KKwl1MTYgICAgICAgIG51bV90c2tpbV9yZXFzOwkvKiAgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzCSovCisJdTE2ICAgICAgICBudW1faW90bV9yZXFzOwkvKiAgbnVtYmVyIG9mIFRNIElPIHJlcXMJKi8KKwl1MTYgICAgICAgIG51bV90c2t0bV9yZXFzOwkvKiAgVE0gdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzKi8KKwl1MTYgICAgICAgIG51bV9mY3hwX3JlcXM7CS8qICB1bmFzc2lzdGVkIEZDIGV4Y2hhbmdlcwkqLworCXUxNiAgICAgICAgbnVtX3VmX2J1ZnM7CS8qICB1bnNvbGljaXRlZCByZWN2IGJ1ZmZlcnMJKi8KKwl1OAkJbnVtX2NxczsKKwl1OAkJcnN2ZDsKK307CisKK3N0cnVjdCBiZmFfaW9jZmNfZHJ2Y2ZnX3MgeworCXUxNiAgICAgICAgbnVtX3JlcXFfZWxlbXM7CS8qICBudW1iZXIgb2YgcmVxIHF1ZXVlIGVsZW1lbnRzICovCisJdTE2ICAgICAgICBudW1fcnNwcV9lbGVtczsJLyogIG51bWJlciBvZiByc3AgcXVldWUgZWxlbWVudHMgKi8KKwl1MTYgICAgICAgIG51bV9zZ3BnczsJLyogIG51bWJlciBvZiB0b3RhbCBTRyBwYWdlcwkgICovCisJdTE2ICAgICAgICBudW1fc2Jvb3RfdGd0czsJLyogIG51bWJlciBvZiBTQU4gYm9vdCB0YXJnZXRzCSAgKi8KKwl1MTYgICAgICAgIG51bV9zYm9vdF9sdW5zOwkvKiAgbnVtYmVyIG9mIFNBTiBib290IGx1bnMJICAqLworCXUxNgkgICAgaW9jX3JlY292ZXI7CS8qICBJT0MgcmVjb3ZlcnkgbW9kZQkJICAqLworCXUxNgkgICAgbWluX2NmZzsJLyogIG1pbmltdW0gY29uZmlndXJhdGlvbgkgICovCisJdTE2ICAgICAgICBwYXRoX3RvdjsJLyogIGRldmljZSBwYXRoIHRpbWVvdXQJICAqLworCWJmYV9ib29sZWFuX3QgICBkZWxheV9jb21wOyAvKiAgZGVsYXkgY29tcGxldGlvbiBvZgorCQkJCQkJCWZhaWxlZCBpbmZsaWdodCBJT3MgKi8KKwl1MzIJCXJzdmQ7Cit9OworLyoqCisgKiBJT0MgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIHsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJZndjZmc7CS8qICBmaXJtd2FyZSBzaWRlIGNvbmZpZyAqLworCXN0cnVjdCBiZmFfaW9jZmNfZHJ2Y2ZnX3MJZHJ2Y2ZnOwkvKiAgZHJpdmVyIHNpZGUgY29uZmlnCSAgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIElPIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfaW9fc3RhdHNfcyB7CisJdTMyCWhvc3RfYWJvcnQ7CQkvKiAgSU8gYWJvcnRlZCBieSBob3N0IGRyaXZlciovCisJdTMyCWhvc3RfY2xlYW51cDsJCS8qICBJTyBjbGVhbiB1cCBieSBob3N0IGRyaXZlciAqLworCisJdTMyCWZ3X2lvX3RpbWVvdXQ7CQkvKiAgSU9zIHRpbWVkb3V0ICovCisJdTMyCWZ3X2ZybV9wYXJzZTsJCS8qICBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV9kYXRhOwkJLyogIGZjcF9kYXRhIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3JzcDsJCS8qICBmY3BfcnNwIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3hmZXJfcmR5OwkvKiAgeGZlcl9yZHkgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fYmxzX2FjYzsJCS8qICBCTFMgQUNDICBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV90Z3RfYWJvcnQ7CS8qICB0YXJnZXQgQUJUUyBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV91bmtub3duOwkJLyogIHVua25vd24gcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19kYXRhX2RtYTsJCS8qICBmL3cgRE1BJ2VkIHRoZSBkYXRhIGZyYW1lICovCisJdTMyCWZ3X2ZybV9kcm9wOwkJLyogIGYvdyBkcm9wIHRoZSBmcmFtZSAqLworCisJdTMyCXJlY190aW1lb3V0OwkJLyogIEZXIHJlYyB0aW1lZCBvdXQgKi8KKwl1MzIJZXJyb3JfcmVjOwkJCS8qICBGVyBzZW5kaW5nIHJlYyBvbgorCQkJCQkJCSogYW4gZXJyb3IgY29uZGl0aW9uKi8KKwl1MzIJd2FpdF9mb3Jfc2k7CQkvKiAgRlcgd2FpdCBmb3IgU0kgKi8KKwl1MzIJcmVjX3JzcF9pbnZhbDsJCS8qICBSRUMgcnNwIGludmFsaWQgKi8KKwl1MzIJc2Vxcl9pb19hYm9ydDsJCS8qICB0YXJnZXQgZG9lcyBub3Qga25vdyBjbWQgc28gYWJvcnQgKi8KKwl1MzIJc2Vxcl9pb19yZXRyeTsJCS8qICBTRVFSIGZhaWxlZCBzbyByZXRyeSBJTyAqLworCisJdTMyCWl0bl9jaXNjX3VwZF9yc3A7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9yc3AgKi8KKwl1MzIJaXRuX2Npc2NfdXBkX2RhdGE7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9kYXRhICovCisJdTMyCWl0bl9jaXNjX3VwZF94ZmVyX3JkeTsJLyogIElUTiBjaXNjIHVwZGF0ZWQgb24gZmNwX2RhdGEgKi8KKworCXUzMglmY3BfZGF0YV9sb3N0OwkJLyogIGZjcCBkYXRhIGxvc3QgKi8KKworCXUzMglyb19zZXRfaW5feGZlcl9yZHk7CS8qICBUYXJnZXQgc2V0IFJPIGluIFhmZXJfcmR5IGZyYW1lICovCisJdTMyCXhmZXJfcmR5X29vb19lcnI7CS8qICBPdXQgb2Ygb3JkZXIgWGZlcl9yZHkgcmVjZWl2ZWQgKi8KKwl1MzIJeGZlcl9yZHlfdW5rbm93bl9lcnI7CS8qICB1bmtub3duIGVycm9yIGluIHhmZXJfcmR5IGZyYW1lICovCisKKwl1MzIJaW9fYWJvcnRfdGltZW91dDsJLyogIEFCVFMgdGltZWRvdXQgICovCisJdTMyCXNsZXJfaW5pdGlhdGVkOwkJLyogIFNMRVIgaW5pdGlhdGVkICovCisKKwl1MzIJdW5leHBfZmNwX3JzcDsJCS8qICBmY3AgcmVzcG9uc2UgaW4gd3Jvbmcgc3RhdGUgKi8KKworCXUzMglmY3BfcnNwX3VuZGVyX3J1bjsJLyogIGZjcCByc3AgSU8gdW5kZXJydW4gKi8KKwl1MzIgICAgICAgIGZjcF9yc3BfdW5kZXJfcnVuX3dyOyAgIC8qICBmY3AgcnNwIElPIHVuZGVycnVuIGZvciB3cml0ZSAqLworCXUzMglmY3BfcnNwX3VuZGVyX3J1bl9lcnI7CS8qICBmY3AgcnNwIElPIHVuZGVycnVuIGVycm9yICovCisJdTMyICAgICAgICBmY3BfcnNwX3Jlc2lkX2ludmFsOyAgICAvKiAgaW52YWxpZCByZXNpZHVlICovCisJdTMyCWZjcF9yc3Bfb3Zlcl9ydW47CS8qICBmY3AgcnNwIElPIG92ZXJydW4gKi8KKwl1MzIJZmNwX3JzcF9vdmVyX3J1bl9lcnI7CS8qICBmY3AgcnNwIElPIG92ZXJydW4gZXJyb3IgKi8KKwl1MzIJZmNwX3JzcF9wcm90b19lcnI7CS8qICBwcm90b2NvbCBlcnJvciBpbiBmY3AgcnNwICovCisJdTMyCWZjcF9yc3Bfc2Vuc2VfZXJyOwkvKiAgZXJyb3IgaW4gc2Vuc2UgaW5mbyBpbiBmY3AgcnNwICovCisJdTMyCWZjcF9jb25mX3JlcTsJCS8qICBGQ1AgY29uZiByZXF1ZXN0ZWQgKi8KKworCXUzMgl0Z3RfYWJvcnRlZF9pbzsJCS8qICB0YXJnZXQgaW5pdGlhdGVkIGFib3J0ICovCisKKwl1MzIJaW9oX2VkdG92X3RpbWVvdXRfZXZlbnQ7LyogIElPSCBlZHRvdiB0aW1lciBwb3BwZWQgKi8KKwl1MzIJaW9oX2ZjcF9yc3BfZXhjcF9ldmVudDsJLyogIElPSCBGQ1BfUlNQIGV4Y2VwdGlvbiAqLworCXUzMglpb2hfZmNwX2NvbmZfZXZlbnQ7CS8qICBJT0ggRkNQX0NPTkYgKi8KKwl1MzIJaW9oX211bHRfZnJtX3JzcF9ldmVudDsJLyogIElPSCBtdWx0aV9mcmFtZSBGQ1BfUlNQICovCisJdTMyCWlvaF9oaXRfY2xhc3MyX2V2ZW50OwkvKiAgSU9IIGhpdCBjbGFzczIgKi8KKwl1MzIJaW9oX21pc3Nfb3RoZXJfZXZlbnQ7CS8qICBJT0ggbWlzcyBvdGhlciAqLworCXUzMglpb2hfc2VxX2NudF9lcnJfZXZlbnQ7CS8qICBJT0ggc2VxIGNudCBlcnJvciAqLworCXUzMglpb2hfbGVuX2Vycl9ldmVudDsJCS8qICBJT0ggbGVuIGVycm9yIC0gZmNwX2RsICE9CisJCQkJCQkJKiBieXRlcyB4ZmVyZWQgKi8KKwl1MzIJaW9oX3NlcV9sZW5fZXJyX2V2ZW50OwkvKiAgSU9IIHNlcSBsZW4gZXJyb3IgKi8KKwl1MzIJaW9oX2RhdGFfb29yX2V2ZW50OwkvKiAgRGF0YSBvdXQgb2YgcmFuZ2UgKi8KKwl1MzIJaW9oX3JvX29vb19ldmVudDsJLyogIFJlbGF0aXZlIG9mZnNldCBvdXQgb2YgcmFuZ2UgKi8KKwl1MzIJaW9oX2NwdV9vd25lZF9ldmVudDsJLyogIElPSCBoaXQgLWlvc3Qgb3duZWQgYnkgZi93ICovCisJdTMyCWlvaF91bmV4cF9mcmFtZV9ldmVudDsJLyogIHVuZXhwZWN0ZWQgZnJhbWUgcmVjaWV2ZWQKKwkJCQkJCSAqICAgY291bnQgKi8KKwl1MzIJaW9oX2Vycl9pbnQ7CQkvKiAgSU9IIGVycm9yIGludCBkdXJpbmcgZGF0YS1waGFzZQorCQkJCQkJICogICBmb3Igc2NzaSB3cml0ZQorCQkJCQkJICovCit9OworCisvKioKKyAqIElPQyBwb3J0IGZpcm13YXJlIHN0YXRzCisgKi8KKworc3RydWN0IGJmYV9md19wb3J0X2ZwZ19zdGF0c19zIHsKKyAgICB1MzIgICAgaW50cl9ldnQ7CisgICAgdTMyICAgIGludHI7CisgICAgdTMyICAgIGludHJfZXhjZXNzOworICAgIHUzMiAgICBpbnRyX2NhdXNlMDsKKyAgICB1MzIgICAgaW50cl9vdGhlcjsKKyAgICB1MzIgICAgaW50cl9vdGhlcl9pZ247CisgICAgdTMyICAgIHNpZ19sb3N0OworICAgIHUzMiAgICBzaWdfcmVnYWluZWQ7CisgICAgdTMyICAgIHN5bmNfbG9zdDsKKyAgICB1MzIgICAgc3luY190bzsKKyAgICB1MzIgICAgc3luY19yZWdhaW5lZDsKKyAgICB1MzIgICAgZGl2Ml9vdmVyZmxvdzsKKyAgICB1MzIgICAgZGl2Ml91bmRlcmZsb3c7CisgICAgdTMyICAgIGVmaWZvX292ZXJmbG93OworICAgIHUzMiAgICBlZmlmb191bmRlcmZsb3c7CisgICAgdTMyICAgIGlkbGVfcng7CisgICAgdTMyICAgIGxycl9yeDsKKyAgICB1MzIgICAgbHJfcng7CisgICAgdTMyICAgIG9sc19yeDsKKyAgICB1MzIgICAgbm9zX3J4OworICAgIHUzMiAgICBsaXBfcng7CisgICAgdTMyICAgIGFyYmYwX3J4OworICAgIHUzMiAgICBtcmtfcng7CisgICAgdTMyICAgIGNvbnN0X21ya19yeDsKKyAgICB1MzIgICAgcHJpbV91bmtub3duOworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfbGtzbV9zdGF0c19zIHsKKyAgICB1MzIgICAgaHdzbV9zdWNjZXNzOyAgICAgICAvKiAgaHdzbSBzdGF0ZSBtYWNoaW5lIHN1Y2Nlc3MgICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV9mYWlsczsgICAgICAgICAvKiAgaHdzbSBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV93ZHRvdjsgICAgICAgICAvKiAgaHdzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV9zdWNjZXNzOyAgICAgICAvKiAgc3dzbSBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV9mYWlsczsgICAgICAgICAvKiAgc3dzbSBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV93ZHRvdjsgICAgICAgICAvKiAgc3dzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgYnVzeWJ1ZnM7ICAgICAgICAgICAvKiAgbGluayBpbml0IGZhaWxlZCBkdWUgdG8gYnVzeWJ1ZiAgICAgKi8KKyAgICB1MzIgICAgYnVmX3dhaXRzOyAgICAgICAgICAvKiAgYnVmd2FpdCBzdGF0ZSBlbnRyaWVzICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbGlua19mYWlsczsgICAgICAgICAvKiAgbGluayBmYWlsdXJlcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcHNwX2Vycm9yczsgICAgICAgICAvKiAgcHJpbWl0aXZlIHNlcXVlbmNlIHByb3RvY29sIGVycm9ycyAgKi8KKyAgICB1MzIgICAgbHJfdW5leHA7ICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSIHJ4LWVkIHVuZXhwZWN0ZWRseSAgKi8KKyAgICB1MzIgICAgbHJyX3VuZXhwOyAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiByeC1lZCB1bmV4cGVjdGVkbHkgKi8KKyAgICB1MzIgICAgbHJfdHg7ICAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSIHR4IHN0YXJ0ZWQgICAgICAgICAgKi8KKyAgICB1MzIgICAgbHJyX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIExSUiB0eCBzdGFydGVkICAgICAgICAgKi8KKyAgICB1MzIgICAgb2xzX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE9MUyB0eCBzdGFydGVkICAgICAgICAgKi8KKyAgICB1MzIgICAgbm9zX3R4OyAgICAgICAgICAgICAvKiAgTm8uIG9mIHRpbWVzIE5PUyB0eCBzdGFydGVkICAgICAgICAgKi8KK307CisKKworc3RydWN0IGJmYV9md19wb3J0X3Nuc21fc3RhdHNfcyB7CisgICAgdTMyICAgIGh3c21fc3VjY2VzczsgICAgICAgLyogIFN1Y2Nlc3NmdWwgaHdzbSB0ZXJtaW5hdGlvbnMgICAgICAgICovCisgICAgdTMyICAgIGh3c21fZmFpbHM7ICAgICAgICAgLyogIGh3c20gZmFpbCBjb3VudCAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fd2R0b3Y7ICAgICAgICAgLyogIGh3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fc3VjY2VzczsgICAgICAgLyogIHN3c20gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fd2R0b3Y7ICAgICAgICAgLyogIHN3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGVycm9yX3Jlc2V0czsgICAgICAgLyogIGVycm9yIHJlc2V0cyBpbml0aWF0ZWQgYnkgdXBzbSAgICAgICovCisgICAgdTMyICAgIHN5bmNfbG9zdDsgICAgICAgICAgLyogIFN5bmMgbG9zcyBjb3VudCAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHNpZ19sb3N0OyAgICAgICAgICAgLyogIFNpZ25hbCBsb3NzIGNvdW50ICAgICAgICAgICAgICAgICAgICovCit9OworCisKK3N0cnVjdCBiZmFfZndfcG9ydF9waHlzbV9zdGF0c19zIHsKKyAgICB1MzIgICAgbW9kdWxlX2luc2VydHM7ICAgICAvKiAgTW9kdWxlIGluc2VydCBjb3VudCAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX3h0cmFjdHM7ICAgICAvKiAgTW9kdWxlIGV4dHJhY3RzIGNvdW50ICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX2ludmFsaWRzOyAgICAvKiAgSW52YWxpZCBtb2R1bGUgaW5zZXJ0ZWQgY291bnQgICAgICAgKi8KKyAgICB1MzIgICAgbW9kdWxlX3JlYWRfaWduOyAgICAvKiAgTW9kdWxlIHZhbGlkYXRpb24gc3RhdHVzIGlnbm9yZWQgICAgKi8KKyAgICB1MzIgICAgbGFzZXJfZmF1bHRzOyAgICAgICAvKiAgTGFzZXIgZmF1bHQgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19maXBfc3RhdHNfcyB7CisgICAgdTMyICAgIGRpc2NfcmVxOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBzb2xpY2l0IHJlcXVlc3RzICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfcnNwOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBzb2xpY2l0IHJlc3BvbnNlICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfZXJyOyAgICAgICAgICAgLyogIERpc2NvdmVyeSBhZHZ0LiBwYXJzZSBlcnJvcnMgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfdW5zb2w7ICAgICAgICAgLyogIERpc2NvdmVyeSB1bnNvbGljaXRlZCAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGRpc2NfdGltZW91dHM7ICAgICAgLyogIERpc2NvdmVyeSB0aW1lb3V0cyAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGxpbmtzdmNfdW5zdXBwOyAgICAgLyogIFVuc3VwcG9ydGVkIGxpbmsgc2VydmljZSByZXEgICAgICAgICovCisgICAgdTMyICAgIGxpbmtzdmNfZXJyOyAgICAgICAgLyogIFBhcnNlIGVycm9yIGluIGxpbmsgc2VydmljZSByZXEgICAgICovCisgICAgdTMyICAgIGxvZ29fcmVxOyAgICAgICAgICAgLyogIE51bWJlciBvZiBGSVAgbG9nb3MgcmVjZWl2ZWQgICAgICAgICovCisgICAgdTMyICAgIGNscnZsaW5rX3JlcTsgICAgICAgLyogIENsZWFyIHZpcnR1YWwgbGluayByZXEgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG9wX3Vuc3VwcDsgICAgICAgICAgLyogIFVuc3VwcG9ydGVkIEZJUCBvcGVyYXRpb24gICAgICAgICAgICovCisgICAgdTMyICAgIHVudGFnZ2VkOyAgICAgICAgICAgLyogIFVudGFnZ2VkIGZyYW1lcyAoaWdub3JlZCkgICAgICAgICAgICovCisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfbHBzX3N0YXRzX3MgeworICAgIHUzMiAgICBtYWNfaW52YWxpZHM7ICAgICAgIC8qICBJbnZhbGlkIG1hYyBhc3NpZ25lZCAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X2Zjb2Vfc3RhdHNfcyB7CisgICAgdTMyICAgIGNlZV9saW5rdXBzOyAgICAgICAgLyogIENFRSBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGNlZV9saW5rZG5zOyAgICAgICAgLyogIENFRSBsaW5rIGRvd24gY291bnQgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9saW5rdXBzOyAgICAgICAgLyogIEZJUCBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9saW5rZG5zOyAgICAgICAgLyogIEZJUCBsaW5rIHVwIGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGZpcF9mYWlsczsgICAgICAgICAgLyogIEZJUCBmYWlsIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1hY19pbnZhbGlkczsgICAgICAgLyogIEludmFsaWQgbWFjIGFzc2lnbmVkICAgICAgICAgICAgICAgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQ29FIHBvcnQgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19mY29lX3BvcnRfc3RhdHNfcyB7CisgICAgc3RydWN0IGJmYV9md19mY29lX3N0YXRzX3MgIGZjb2Vfc3RhdHM7CisgICAgc3RydWN0IGJmYV9md19maXBfc3RhdHNfcyAgIGZpcF9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIEZDIHBvcnQgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19mY19wb3J0X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfcG9ydF9mcGdfc3RhdHNfcwkJZnBnX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9waHlzbV9zdGF0c19zCXBoeXNtX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9zbnNtX3N0YXRzX3MJCXNuc21fc3RhdHM7CisJc3RydWN0IGJmYV9md19wb3J0X2xrc21fc3RhdHNfcwkJbGtzbV9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIEZDIHBvcnQgc3RhdHMKKyAqLwordW5pb24gYmZhX2Z3X3BvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19mY19wb3J0X3N0YXRzX3MJZmNfc3RhdHM7CisJc3RydWN0IGJmYV9md19mY29lX3BvcnRfc3RhdHNfcwlmY29lX3N0YXRzOworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X2lvY19zdGF0c19zCWlvY19zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X2lvX3N0YXRzX3MJaW9fc3RhdHM7CisJdW5pb24gIGJmYV9md19wb3J0X3N0YXRzX3MJcG9ydF9zdGF0czsKK307CisKKy8qKgorICogSU9DIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pb2NmY19zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgCWZ3X3N0YXRzOwkvKiAgZmlybXdhcmUgSU9DIHN0YXRzICAgICAgKi8KK307CisKKy8qKgorICogSU9DIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2F0dHJfcyB7CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcwkJY29uZmlnOwkJLyogIElPQ0ZDIGNvbmZpZyAgICovCisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcwlpbnRyX2F0dHI7CS8qICBpbnRlcnJ1cHQgYXR0ciAqLworfTsKKworI2RlZmluZSBCRkFfSU9DRkNfUEFUSFRPVl9NQVgJNjAKKyNkZWZpbmUgQkZBX0lPQ0ZDX1FERVBUSF9NQVgJMjAwMAorCisjZW5kaWYgLyogX19CRkFfREVGU19JT0NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiNjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lwZmMuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfSVBGQ19IX18KKyNkZWZpbmUgX19CRkFfREVGU19JUEZDX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisvKioKKyAqIEZDUyBpcCByZW1vdGUgcG9ydCBzdGF0ZXMKKyAqLworZW51bSBiZmFfaXBycF9zdGF0ZSB7CisJQkZBX0lQUlBfVU5JTklUICA9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfSVBSUF9PTkxJTkUgID0gMSwJLyogIHByb2Nlc3MgbG9naW4gaXMgY29tcGxldGUgKi8KKwlCRkFfSVBSUF9PRkZMSU5FID0gMiwJLyogIGlwcnAgaXMgb2ZmbGluZSAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2lwcnBfc3RhdHNfcyB7CisJdTMyICAgICAgICBvZmZsaW5lczsKKwl1MzIgICAgICAgIG9ubGluZXM7CisJdTMyICAgICAgICByc2NuczsKKwl1MzIgICAgICAgIHBsb2dpczsKKwl1MzIgICAgICAgIGxvZ29zOworCXUzMiAgICAgICAgcGxvZ2lfdGltZW91dHM7CisJdTMyICAgICAgICBwbG9naV9yZWplY3RzOworfTsKKworLyoqCisgKiBGQ1MgaXBycCBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lwcnBfYXR0cl9zIHsKKwllbnVtIGJmYV9pcHJwX3N0YXRlIHN0YXRlOworfTsKKworc3RydWN0IGJmYV9pcGZjX3N0YXRzX3MgeworCXUzMiBhcnBfc2VudDsKKwl1MzIgYXJwX3JlY3Y7CisJdTMyIGFycF9yZXBseV9zZW50OworCXUzMiBhcnBfcmVwbHlfcmVjdjsKKwl1MzIgZmFycF9zZW50OworCXUzMiBmYXJwX3JlY3Y7CisJdTMyIGZhcnBfcmVwbHlfc2VudDsKKwl1MzIgZmFycF9yZXBseV9yZWN2OworCXUzMiBmYXJwX3JlamVjdF9zZW50OworCXUzMiBmYXJwX3JlamVjdF9yZWN2OworfTsKKworc3RydWN0IGJmYV9pcGZjX2F0dHJfcyB7CisJYmZhX2Jvb2xlYW5fdCBlbmFibGVkOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSVBGQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2l0bmltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzc2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfSVROSU1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSVROSU1fSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBGQ1MgaXRuaW0gc3RhdGVzCisgKi8KK2VudW0gYmZhX2l0bmltX3N0YXRlIHsKKwlCRkFfSVROSU1fT0ZGTElORSAJPSAwLAkvKiAgb2ZmbGluZSAqLworCUJGQV9JVE5JTV9QUkxJX1NFTkQgCT0gMSwJLyogIHBybGkgc2VuZCAqLworCUJGQV9JVE5JTV9QUkxJX1NFTlQgCT0gMiwJLyogIHBybGkgc2VudCAqLworCUJGQV9JVE5JTV9QUkxJX1JFVFJZIAk9IDMsCS8qICBwcmxpIHJldHJ5ICovCisJQkZBX0lUTklNX0hDQl9PTkxJTkUgCT0gNCwJLyogIG9ubGluZSBjYWxsYmFjayAqLworCUJGQV9JVE5JTV9PTkxJTkUgCT0gNSwJLyogIG9ubGluZSAqLworCUJGQV9JVE5JTV9IQ0JfT0ZGTElORSAJPSA2LAkvKiAgb2ZmbGluZSBjYWxsYmFjayAqLworCUJGQV9JVE5JTV9JTklUSUFUSU9SIAk9IDcsCS8qICBpbml0aWF0b3IgKi8KK307CisKK3N0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgeworCXUzMglvbmxpbmVzOwkvKiAgSVROIG5leHVzIG9ubGluZXMgKFBSTEkgZG9uZSkgKi8KKwl1MzIJb2ZmbGluZXM7CS8qICBJVE4gTmV4dXMgb2ZmbGluZXMgCSovCisJdTMyCWNyZWF0ZXM7CS8qICBJVE4gY3JlYXRlIHJlcXVlc3RzIAkqLworCXUzMglkZWxldGVzOwkvKiAgSVROIGRlbGV0ZSByZXF1ZXN0cyAJKi8KKwl1MzIJY3JlYXRlX2NvbXBzOwkvKiAgSVROIGNyZWF0ZSBjb21wbGV0aW9ucyAJKi8KKwl1MzIJZGVsZXRlX2NvbXBzOwkvKiAgSVROIGRlbGV0ZSBjb21wbGV0aW9ucyAJKi8KKwl1MzIJc2xlcl9ldmVudHM7CS8qICBTTEVSIChzZXF1ZW5jZSBsZXZlbCBlcnJvcgorCQkJCQkgKiByZWNvdmVyeSkgZXZlbnRzICovCisJdTMyCWlvY19kaXNhYmxlZDsJLyogIE51bSBJT0MgZGlzYWJsZXMJCSovCisJdTMyCWNsZWFudXBfY29tcHM7CS8qICBJVE4gY2xlYW51cCBjb21wbGV0aW9ucyAqLworCXUzMgl0bV9jbW5kczsJLyogIHRhc2sgbWFuYWdlbWVudChUTSkgY21uZHMgc2VudCAqLworCXUzMgl0bV9md19yc3BzOwkvKiAgVE0gY21kcyBmaXJtd2FyZSByZXNwb25zZXMgKi8KKwl1MzIJdG1fc3VjY2VzczsJLyogIFRNIHN1Y2Nlc3NlcyAqLworCXUzMgl0bV9mYWlsdXJlczsJLyogIFRNIGZhaWx1cmVzICovCisJdTMyCXRtX2lvX2NvbXBzOwkvKiAgVE0gSU8gY29tcGxldGlvbnMgKi8KKwl1MzIJdG1fcXJlc3VtZXM7CS8qICBUTSBxdWV1ZSByZXN1bWVzIChhZnRlciB3YWl0aW5nCisJCQkJCSAqIGZvciByZXNvdXJjZXMpCisJCQkJCSAqLworCXUzMgl0bV9pb2Nkb3duczsJLyogIFRNIGNtbmRzIGFmZmVjdGVkIGJ5IElPQyBkb3duICovCisJdTMyCXRtX2NsZWFudXBzOwkvKiAgVE0gY2xlYW51cHMgKi8KKwl1MzIJdG1fY2xlYW51cF9jb21wczsKKwkJCQkJLyogIFRNIGNsZWFudXAgY29tcGxldGlvbnMgKi8KKwl1MzIJaW9zOwkJLyogIElPIHJlcXVlc3RzICovCisJdTMyCWlvX2NvbXBzOwkvKiAgSU8gY29tcGxldGlvbnMgKi8KKwl1NjQJaW5wdXRfcmVxczsJLyogIElOUFVUIHJlcXVlc3RzICovCisJdTY0CW91dHB1dF9yZXFzOwkvKiAgT1VUUFVUIHJlcXVlc3RzICovCit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyB7CisJdTMyICAgICAgICBvbmxpbmVzOwkvKiAgbnVtIHJwb3J0IG9ubGluZSAqLworCXUzMiAgICAgICAgb2ZmbGluZXM7CS8qICBudW0gcnBvcnQgb2ZmbGluZSAqLworCXUzMiAgICAgICAgcHJsaV9zZW50OwkvKiAgbnVtIHBybGkgc2VudCBvdXQgKi8KKwl1MzIgICAgICAgIGZjeHBfYWxsb2Nfd2FpdDsvKiAgbnVtIGZjeHAgYWxsb2Mgd2FpdHMgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX2VycjsJLyogIG51bSBwcmxpIHJzcCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX2FjYzsJLyogIG51bSBwcmxpIHJzcCBhY2NlcHRzICovCisJdTMyICAgICAgICBpbml0aWF0b3I7CS8qICBycG9ydCBpcyBhbiBpbml0aWF0b3IgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX3BhcnNlX2VycjsJLyogIHBybGkgcnNwIHBhcnNpbmcgZXJyb3JzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9yanQ7CS8qICBudW0gcHJsaSByc3AgcmVqZWN0cyAqLworCXUzMiAgICAgICAgdGltZW91dDsJLyogIG51bSB0aW1lb3V0cyBkZXRlY3RlZCAqLworCXUzMiAgICAgICAgc2xlcjsJCS8qICBudW0gc2xlciBub3RpZmljYXRpb24gZnJvbSBCRkEgKi8KKwl1MzIJcnN2ZDsKKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCWhhbF9zdGF0czsKK307CisKKy8qKgorICogRkNTIGl0bmltIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyB7CisJZW51bSBiZmFfaXRuaW1fc3RhdGUgc3RhdGU7IC8qICBGQ1MgaXRuaW0gc3RhdGUgICAgICAgICovCisJdTggcmV0cnk7CQkvKiAgZGF0YSByZXRyYW5zbWlzaW9uIHN1cHBvcnQgKi8KKwl1OAl0YXNrX3JldHJ5X2lkOyAgLyogIHRhc2sgcmV0cnkgaWRlbnQgc3VwcG9ydCAgICovCisJdTggcmVjX3N1cHBvcnQ7ICAgIC8qICBSRUMgc3VwcG9ydGVkICAgICAgICAgICAgICAqLworCXU4IGNvbmZfY29tcDsgICAgICAvKiAgY29uZmlybWVkIGNvbXBsZXRpb24gc3VwcCAgKi8KK307CisKKy8qKgorICogQkZBIElUTklNIGV2ZW50cy4KKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX0lUTklNX0FFTl9ORVc6ICAgICAgIFtpbl06IE5vbmUgIFtvdXRdOiB2Zl9pZCwgbHB3d24KKyAqIEJGQV9JVE5JTV9BRU5fREVMRVRFOiAgICBbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICogQkZBX0lUTklNX0FFTl9PTkxJTkU6ICAgIFtpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKiBCRkFfSVROSU1fQUVOX09GRkxJTkU6ICAgW2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqIEJGQV9JVE5JTV9BRU5fRElTQ09OTkVDVDpbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICovCitlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgeworCUJGQV9JVE5JTV9BRU5fT05MSU5FIAk9IDEsCS8qICBUYXJnZXQgb25saW5lICovCisJQkZBX0lUTklNX0FFTl9PRkZMSU5FIAk9IDIsCS8qICBUYXJnZXQgb2ZmbGluZSAqLworCUJGQV9JVE5JTV9BRU5fRElTQ09OTkVDVCA9IDMsCS8qICBUYXJnZXQgZGlzY29ubmVjdGVkICovCit9OworCisvKioKKyAqIEJGQSBJVE5JTSBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGJmYV9pdG5pbV9hZW5fZGF0YV9zIHsKKwl1MTYgICAgICAgIHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhlIElUIG5leHVzICovCisJdTE2ICAgICAgICByc3ZkWzNdOworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgcnB3d247CS8qICBXV04gb2YgcmVtb3RlKHRhcmdldCkgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSVROSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19MRURfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfTEVEX0hfXworCisjZGVmaW5lCUJGQV9MRURfTUFYX05VTQkJMworCitlbnVtIGJmYV9sZWRfb3AgeworCUJGQV9MRURfT0ZGICAgPSAwLAorCUJGQV9MRURfT04gICAgPSAxLAorCUJGQV9MRURfRkxJQ0sgPSAyLAorCUJGQV9MRURfQkxJTksgPSAzLAorfTsKKworZW51bSBiZmFfbGVkX2NvbG9yIHsKKwlCRkFfTEVEX0dSRUVOID0gMCwKKwlCRkFfTEVEX0FNQkVSID0gMSwKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0xFRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTlmODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0xQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0xQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorCisvKioKKyAqIEJGQSBBRU4gbG9naWNhbCBwb3J0IGV2ZW50cy4KKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX0xQT1JUX0FFTl9ORVc6ICAgICAgIFtpbl06IE5vbmUgICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fREVMRVRFOiAgICBbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX09OTElORTogICAgW2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9PRkZMSU5FOiAgIFtpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVDpbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05FV19QUk9QOiAgW2luXTogTm9uZSAgICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ERUxFVEVfUFJPUDogICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEOiAgICBbaW5dOiBOb25lICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRDogW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV046ICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYOiBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTjogICAgW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICovCitlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgeworCUJGQV9MUE9SVF9BRU5fTkVXCT0gMSwJLyogIExQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURQk9IDIsCS8qICBMUG9ydCBkZWxldGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PTkxJTkUJPSAzLAkvKiAgTFBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PRkZMSU5FCT0gNCwJLyogIExQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QgPSA1LAkvKiAgTFBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1BST1AJPSA2LAkvKiAgVlBvcnQgY3JlYXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fREVMRVRFX1BST1AgPSA3LAkvKiAgVlBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEID0gOCwJLyogIFZQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRCA9IDksICAvKiAgVlBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOID0gMTAsICAgIC8qICBWUG9ydCBjb25maWd1cmVkIHdpdGgKKwkJCQkJICAgICAqICAgZHVwbGljYXRlIFdXTiBldmVudAorCQkJCQkJICovCisJQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVggPSAxMSwgLyogIE1heCBOUElWIGluIGZhYnJpYy9mcG9ydCAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOID0gMTIsIC8qICBVbmtub3duIE5QSVYgRXJyb3IgY29kZSBldmVudCAqLworfTsKKworLyoqCisgKiBCRkEgQUVOIGV2ZW50IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfbHBvcnRfYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJdTE2ICAgICAgICByc3ZkOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlczsJLyogIExvZ2ljYWwgcG9ydCBtb2RlLElNL1RNL0lQIGV0YyAqLworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfTFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZmQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfTUZHX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX01GR19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworLyoqCisgKiBNYW51ZmFjdHVyaW5nIGJsb2NrIHZlcnNpb24KKyAqLworI2RlZmluZSBCRkFfTUZHX1ZFUlNJT04JCQkJMQorCisvKioKKyAqIE1hbnVmYWN0dXJpbmcgYmxvY2sgZm9ybWF0CisgKi8KKyNkZWZpbmUgQkZBX01GR19TRVJJQUxOVU1fU0laRQkJCTExCisjZGVmaW5lIEJGQV9NRkdfUEFSVE5VTV9TSVpFCQkJMTQKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9JRF9TSVpFCQkxMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1BBUlROVU1fU0laRQkyMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1NFUklBTE5VTV9TSVpFCTIwCisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfUkVWSVNJT05fU0laRQk0CisjZGVmaW5lIFNUUlNaKF9uKQkoKChfbikgKyA0KSAmIH4zKQorCisvKioKKyAqIFZQRCBkYXRhIGxlbmd0aAorICovCisjZGVmaW5lIEJGQV9NRkdfVlBEX0xFTiAgICAgMjU2CisKKy8qKgorICogQWxsIG51bWVyaWNhbCBmaWVsZHMgYXJlIGluIGJpZy1lbmRpYW4gZm9ybWF0LgorICovCitzdHJ1Y3QgYmZhX21mZ192cGRfcyB7CisgICAgdTggICAgIHZlcnNpb247ICAgIC8qICB2cGQgZGF0YSB2ZXJzaW9uICovCisgICAgdTggICAgIHZwZF9zaWdbM107IC8qICBjaGFyYWN0ZXJzICdWJywgJ1AnLCAnRCcgKi8KKyAgICB1OCAgICAgY2hrc3VtOyAgICAgLyogIHU4IGNoZWNrc3VtICovCisgICAgdTggICAgIHZlbmRvcjsgICAgIC8qICB2ZW5kb3IgKi8KKyAgICB1OCAgICAgbGVuOyAgICAgICAgLyogIHZwZCBkYXRhIGxlbmd0aCBleGNsdWRpbmcgaGVhZGVyICovCisgICAgdTggICAgIHJzdjsKKyAgICB1OCAgICAgZGF0YVtCRkFfTUZHX1ZQRF9MRU5dOyAgLyogIHZwZCBkYXRhICovCit9OworCisjcHJhZ21hIHBhY2soMSkKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfTUZHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI4MzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUENJX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BDSV9IX18KKworLyoqCisgKiBQQ0kgZGV2aWNlIGFuZCB2ZW5kb3IgSUQgaW5mb3JtYXRpb24KKyAqLworZW51bSB7CisJQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERQk9IDB4MTY1NywKKwlCRkFfUENJX0RFVklDRV9JRF9GQ184RzJQCT0gMHgxMywKKwlCRkFfUENJX0RFVklDRV9JRF9GQ184RzFQCT0gMHgxNywKKwlCRkFfUENJX0RFVklDRV9JRF9DVAkJPSAweDE0LAorfTsKKworLyoqCisgKiBQQ0kgc3ViLXN5c3RlbSBkZXZpY2UgYW5kIHZlbmRvciBJRCBpbmZvcm1hdGlvbgorICovCitlbnVtIHsKKwlCRkFfUENJX0ZDT0VfU1NERVZJQ0VfSUQJPSAweDE0LAorfTsKKworI2RlZmluZSBCRkFfUENJX0FDQ0VTU19SQU5HRVMgMQkvKiBNYXhpbXVtIG51bWJlciBvZiBkZXZpY2UgYWRkcmVzcyByYW5nZXMKKwkJCQkgKiBtYXBwZWQgdGhyb3VnaCBkaWZmZXJlbnQgQkFSKHMpLiAqLworCisjZW5kaWYgLyogX19CRkFfREVGU19QQ0lfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ2ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QTV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworLyoqCisgKiBCRkEgcG93ZXIgbWFuYWdlbWVudCBkZXZpY2Ugc3RhdGVzCisgKi8KK2VudW0gYmZhX3BtX2RzIHsKKwlCRkFfUE1fRFNfRDAgPSAwLAkvKiAgZnVsbCBwb3dlciBtb2RlICovCisJQkZBX1BNX0RTX0QxID0gMSwJLyogIHBvd2VyIHNhdmUgc3RhdGUgMSAqLworCUJGQV9QTV9EU19EMiA9IDIsCS8qICBwb3dlciBzYXZlIHN0YXRlIDIgKi8KKwlCRkFfUE1fRFNfRDMgPSAzLAkvKiAgcG93ZXIgb2ZmIHN0YXRlICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19QT01fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE9NX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworLyoqCisgKiBQT00gaGVhbHRoIHN0YXR1cyBsZXZlbHMgZm9yIGVhY2ggYXR0cmlidXRlcy4KKyAqLworZW51bSBiZmFfcG9tX2VudHJ5X2hlYWx0aCB7CisJQkZBX1BPTV9IRUFMVEhfTk9JTkZPICA9IDEsCS8qICBubyBpbmZvcm1hdGlvbiAqLworCUJGQV9QT01fSEVBTFRIX05PUk1BTCAgPSAyLAkvKiAgaGVhbHRoIGlzIG5vcm1hbCAqLworCUJGQV9QT01fSEVBTFRIX1dBUk5JTkcgPSAzLAkvKiAgd2FybmluZyBsZXZlbCAqLworCUJGQV9QT01fSEVBTFRIX0FMQVJNICAgPSA0LAkvKiAgYWxhcm1pbmcgbGV2ZWwgKi8KK307CisKKy8qKgorICogUmVhZGluZyBvZiB0ZW1wZXJhdHVyZS92b2x0YWdlL2N1cnJlbnQvcG93ZXIKKyAqLworc3RydWN0IGJmYV9wb21fZW50cnlfcyB7CisJZW51bSBiZmFfcG9tX2VudHJ5X2hlYWx0aCBoZWFsdGg7CS8qICBQT00gZW50cnkgaGVhbHRoICovCisJdTMyICAgICAgICBjdXJyX3ZhbHVlOwkvKiAgY3VycmVudCB2YWx1ZSAqLworCXUzMiAgICAgICAgdGhyX3dhcm5faGlnaDsJLyogIHRocmVzaG9sZCB3YXJuaW5nIGhpZ2ggKi8KKwl1MzIgICAgICAgIHRocl93YXJuX2xvdzsJLyogIHRocmVzaG9sZCB3YXJuaW5nIGxvdyAqLworCXUzMiAgICAgICAgdGhyX2FsYXJtX2xvdzsJLyogIHRocmVzaG9sZCBhbGFyYW0gbG93ICovCisJdTMyICAgICAgICB0aHJfYWxhcm1faGlnaDsJLyogIHRocmVzaG9sZCBhbGFybSBoaWdoICovCit9OworCisvKioKKyAqIFBPTSBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfcG9tX2F0dHJfcyB7CisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB0ZW1wZXJhdHVyZTsJLyogIGNlbnRpZ3JhZGUgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHZvbHRhZ2U7CS8qICB2b2x0cyAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3MgY3VycjsJLyogIG1pbGxpIGFtcHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHR4cG93ZXI7CS8qICBtaWNybyB3YXR0cyAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3Mgcnhwb3dlcjsJLyogIG1pY3JvIHdhdHRzICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QT01fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNjk2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvcnQuaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisKKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaICAxNgorCisvKioKKyAqIHN5bWJvbGljIG5hbWVzIGZvciBiYXNlIHBvcnQvdmlydHVhbCBwb3J0CisgKi8KKyNkZWZpbmUgQkZBX1NZTU5BTUVfTUFYTEVOCTEyOAkvKiB2bXdhcmUvd2luZG93cyB1c2VzIDEyOCBieXRlcyAqLworc3RydWN0IGJmYV9wb3J0X3N5bW5hbWVfcyB7CisJY2hhciAgICAgICAgICAgIHN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOXTsKK307CisKKy8qKgorKiBSb2xlcyBvZiBGQ1MgcG9ydDoKKyAqICAgICAtIEZDUCBJTSBhbmQgRkNQIFRNIHJvbGVzIGNhbm5vdCBiZSBlbmFibGVkIHRvZ2V0aGVyIGZvciBhIEZDUyBwb3J0CisgKiAgICAgLSBDcmVhdGUgbXVsdGlwbGUgcG9ydHMgaWYgYm90aCBJTSBhbmQgVE0gZnVuY3Rpb25zIHJlcXVpcmVkLgorICogICAgIC0gQXRsZWFzdCBvbmUgcm9sZSBtdXN0IGJlIHNwZWNpZmllZC4KKyAqLworZW51bSBiZmFfcG9ydF9yb2xlIHsKKwlCRkFfUE9SVF9ST0xFX0ZDUF9JTSAJPSAweDAxLAkvKiAgRkNQIGluaXRpYXRvciByb2xlICovCisJQkZBX1BPUlRfUk9MRV9GQ1BfVE0gCT0gMHgwMiwJLyogIEZDUCB0YXJnZXQgcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX0lQRkMgCT0gMHgwNCwJLyogIElQIG92ZXIgRkMgcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX01BWCAJPSBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDIHwgQkZBX1BPUlRfUk9MRV9GQ1BfSU0KK307CisKKy8qKgorICogRkNTIHBvcnQgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IGJmYV9wb3J0X2NmZ19zIHsKKyAgICB3d25fdCAgICAgICAgICAgICAgIHB3d247ICAgICAgIC8qICBwb3J0IHd3biAqLworICAgIHd3bl90ICAgICAgICAgICAgICAgbnd3bjsgICAgICAgLyogIG5vZGUgd3duICovCisgICAgc3RydWN0IGJmYV9wb3J0X3N5bW5hbWVfcyAgc3ltX25hbWU7ICAgLyogIHZtIHBvcnQgc3ltYm9saWMgbmFtZSAqLworICAgIGVudW0gYmZhX3BvcnRfcm9sZSAgICAgcm9sZXM7ICAgICAgLyogIEZDUyBwb3J0IHJvbGVzICovCisJdTMyCQkJcnN2ZDsKKyAgICB1OCAgICAgICAgICAgICB0YWdbMTZdOwkvKiAgb3BhcXVlIHRhZyBmcm9tIGFwcGxpY2F0aW9uICovCit9OworCisvKioKKyAqIEZDUyBwb3J0IHN0YXRlcworICovCitlbnVtIGJmYV9wb3J0X3N0YXRlIHsKKwlCRkFfUE9SVF9VTklOSVQgID0gMCwJLyogIFBPUlQgaXMgbm90IHlldCBpbml0aWFsaXplZCAqLworCUJGQV9QT1JUX0ZESVNDICAgPSAxLAkvKiAgRkRJU0MgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfUE9SVF9PTkxJTkUgID0gMiwJLyogIGxvZ2luIHRvIGZhYnJpYyBpcyBjb21wbGV0ZSAqLworCUJGQV9QT1JUX09GRkxJTkUgPSAzLAkvKiAgTm8gbG9naW4gdG8gZmFicmljICovCit9OworCisvKioKKyAqIEZDUyBwb3J0IHR5cGUuIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK2VudW0gYmZhX3BvcnRfdHlwZSB7CisJQkZBX1BPUlRfVFlQRV9QSFlTSUNBTCA9IDAsCisJQkZBX1BPUlRfVFlQRV9WSVJUVUFMLAorfTsKKworLyoqCisgKiBGQ1MgcG9ydCBvZmZsaW5lIHJlYXNvbi4gUmVxdWlyZWQgZm9yIFZtV2FyZS4KKyAqLworZW51bSBiZmFfcG9ydF9vZmZsaW5lX3JlYXNvbiB7CisJQkZBX1BPUlRfT0ZGTElORV9VTktOT1dOID0gMCwKKwlCRkFfUE9SVF9PRkZMSU5FX0xJTktET1dOLAorCUJGQV9QT1JUX09GRkxJTkVfRkFCX1VOU1VQUE9SVEVELAkvKiAgTlBJViBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorCQkJCQkJICogICAgZmFicmljICovCisJQkZBX1BPUlRfT0ZGTElORV9GQUJfTk9SRVNPVVJDRVMsCisJQkZBX1BPUlRfT0ZGTElORV9GQUJfTE9HT1VULAorfTsKKworLyoqCisgKiBGQ1MgbHBvcnQgaW5mby4gUmVxdWlyZWQgZm9yIFZtV2FyZS4KKyAqLworc3RydWN0IGJmYV9wb3J0X2luZm9fcyB7CisJdTggICAgICAgICBwb3J0X3R5cGU7CS8qIGJmYV9wb3J0X3R5cGVfdCA6IHBoeXNpY2FsIG9yCisJCQkJCSAqIHZpcnR1YWwgKi8KKwl1OCAgICAgICAgIHBvcnRfc3RhdGU7CS8qIG9uZSBvZiBiZmFfcG9ydF9zdGF0ZSB2YWx1ZXMgKi8KKwl1OCAgICAgICAgIG9mZmxpbmVfcmVhc29uOwkvKiBvbmUgb2YgYmZhX3BvcnRfb2ZmbGluZV9yZWFzb25fdAorCQkJCQkgKiB2YWx1ZXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF93d247CisJd3duX3QgICAgICAgICAgIG5vZGVfd3duOworCisJLyoKKwkgKiBmb2xsb3dpbmcgNCBmZWlsZHMgYXJlIHZhbGlkIGZvciBQaHlzaWNhbCBQb3J0cyBvbmx5CisJICovCisJdTMyICAgICAgICBtYXhfdnBvcnRzX3N1cHA7CS8qIE1heCBzdXBwb3J0ZWQgdnBvcnRzICovCisJdTMyICAgICAgICBudW1fdnBvcnRzX2ludXNlOwkvKiBOdW0gb2YgaW4gdXNlIHZwb3J0cyAqLworCXUzMiAgICAgICAgbWF4X3Jwb3J0c19zdXBwOwkvKiBNYXggc3VwcG9ydGVkIHJwb3J0cyAqLworCXUzMiAgICAgICAgbnVtX3Jwb3J0c19pbnVzZTsJLyogTnVtIG9mIGRvc2NvdmVyZWQgcnBvcnRzICovCisKK307CisKKy8qKgorICogRkNTIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyB7CisJdTMyICAgICAgICBuc19wbG9naV9zZW50OworCXUzMiAgICAgICAgbnNfcGxvZ2lfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX2FjY19lcnI7CisJdTMyICAgICAgICBuc19wbG9naV9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfcmVqZWN0czsJLyogTlMgY29tbWFuZCByZWplY3RzICovCisJdTMyICAgICAgICBuc19wbG9naV91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX3JldHJpZXM7CS8qIE5TIGNvbW1hbmQgcmV0cmllcyAqLworCXUzMiAgICAgICAgbnNfdGltZW91dHM7CS8qIE5TIGNvbW1hbmQgdGltZW91dHMgKi8KKworCXUzMiAgICAgICAgbnNfcnNwbmlkX3NlbnQ7CisJdTMyICAgICAgICBuc19yc3BuaWRfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfcnNwbmlkX3JlamVjdHM7CisJdTMyICAgICAgICBuc19yc3BuaWRfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnNfcmZ0aWRfc2VudDsKKwl1MzIgICAgICAgIG5zX3JmdGlkX2FjY2VwdHM7CisJdTMyICAgICAgICBuc19yZnRpZF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfcmZ0aWRfcmVqZWN0czsKKwl1MzIgICAgICAgIG5zX3JmdGlkX2FsbG9jX3dhaXQ7CisKKwl1MzIJbnNfcmZmaWRfc2VudDsKKwl1MzIJbnNfcmZmaWRfYWNjZXB0czsKKwl1MzIJbnNfcmZmaWRfcnNwX2VycjsKKwl1MzIJbnNfcmZmaWRfcmVqZWN0czsKKwl1MzIJbnNfcmZmaWRfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnNfZ2lkZnRfc2VudDsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X2FjY2VwdHM7CisJdTMyICAgICAgICBuc19naWRmdF9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfZ2lkZnRfcmVqZWN0czsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3Vua25vd25fcnNwOworCXUzMiAgICAgICAgbnNfZ2lkZnRfYWxsb2Nfd2FpdDsKKworCS8qCisJICogTWdtdCBTZXJ2ZXIgc3RhdHMKKwkgKi8KKwl1MzIgICAgICAgIG1zX3JldHJpZXM7CS8qIE1TIGNvbW1hbmQgcmV0cmllcyAqLworCXUzMiAgICAgICAgbXNfdGltZW91dHM7CS8qIE1TIGNvbW1hbmQgdGltZW91dHMgKi8KKwl1MzIgICAgICAgIG1zX3Bsb2dpX3NlbnQ7CisJdTMyICAgICAgICBtc19wbG9naV9yc3BfZXJyOworCXUzMiAgICAgICAgbXNfcGxvZ2lfYWNjX2VycjsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FjY2VwdHM7CisJdTMyICAgICAgICBtc19yZWplY3RzOwkvKiBOUyBjb21tYW5kIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIG1zX3Bsb2dpX3Vua25vd25fcnNwOworCXUzMiAgICAgICAgbXNfcGxvZ2lfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnVtX3JzY247CS8qIE51bSBvZiBSU0NOIHJlY2VpdmVkICovCisJdTMyICAgICAgICBudW1fcG9ydGlkX3JzY247LyogTnVtIHBvcnRpZCBmb3JtYXQgUlNDTgorCQkJCQkJCQkqIHJlY2VpdmVkICovCisKKwl1MzIJdWZfcmVjdnM7IAkvKiB1bnNvbGljaXRlZCByZWN2IGZyYW1lcyAgICAgICovCisJdTMyCXVmX3JlY3ZfZHJvcHM7IAkvKiBkcm9wcGVkIHJlY2VpdmVkIGZyYW1lcwkqLworCisJdTMyCXJzdmQ7IAkJLyogcGFkZGluZyBmb3IgNjQgYml0IGFsaWdubWVudCAqLworfTsKKworLyoqCisgKiBCRkEgcG9ydCBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zIHsKKwllbnVtIGJmYV9wb3J0X3N0YXRlIHN0YXRlOwkJLyogIHBvcnQgc3RhdGUgKi8KKwl1MzIgICAgICAgICBwaWQ7CQkvKiAgcG9ydCBJRCAqLworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAgIHBvcnRfY2ZnOwkvKiAgcG9ydCBjb25maWd1cmF0aW9uICovCisJZW51bSBiZmFfcHBvcnRfdHlwZSBwb3J0X3R5cGU7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJdTMyICAgICAgICAgbG9vcGJhY2s7CS8qICBjYWJsZSBpcyBleHRlcm5hbGx5IGxvb3BlZCBiYWNrICovCisJd3duX3QJCWZhYnJpY19uYW1lOyAvKiAgYXR0YWNoZWQgc3dpdGNoJ3Mgbnd3biAqLworCXU4CQlmYWJyaWNfaXBfYWRkcltCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1pdOyAvKiAgYXR0YWNoZWQKKwkJCQkJCQkqIGZhYnJpYydzIGlwIGFkZHIgKi8KK307CisKKy8qKgorICogQkZBIHBoeXNpY2FsIHBvcnQgTGV2ZWwgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9PTkxJTkU6ICAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fT0ZGTElORTogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX1JMSVI6ICAgICAgIFtpbl06IE5vbmUJW291dF06IHB3d24sIHJsaXJfZGF0YSwgcmxpcl9sZW4KKyAqIEJGQV9QT1JUX0FFTl9TRlBfSU5TRVJUOiBbaW5dOiBwd3duCVtvdXRdOiBwb3J0X2lkLCBwd3duCisgKiBCRkFfUE9SVF9BRU5fU0ZQX1JFTU9WRTogW2luXTogcHd3bglbb3V0XTogcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX1NGUF9QT006ICAgIFtpbl06IHB3d24JW291dF06IGxldmVsLCBwb3J0X2lkLCBwd3duCisgKiBCRkFfUE9SVF9BRU5fRU5BQkxFOiAgICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0RJU0FCTEU6ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9BVVRIX09OOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fQVVUSF9PRkY6ICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1Q6IFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9RT1NfTkVHOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFOiBbaW5dOiBwd3duLCBbb3V0XTogcHd3biwgZnd3bgorICoKKyAqLworZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgeworCUJGQV9QT1JUX0FFTl9PTkxJTkUgICAgID0gMSwJLyogIFBoeXNpY2FsIFBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX09GRkxJTkUgICAgPSAyLAkvKiAgUGh5c2ljYWwgUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1JMSVIgICAgICAgPSAzLAkvKiAgUkxJUiBldmVudCwgbm90IHN1cHBvcnRlZCAqLworCUJGQV9QT1JUX0FFTl9TRlBfSU5TRVJUID0gNCwJLyogIFNGUCBpbnNlcnRlZCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFID0gNSwJLyogIFNGUCByZW1vdmVkIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT00gICAgPSA2LAkvKiAgU0ZQIFBPTSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9FTkFCTEUgICAgID0gNywJLyogIFBoeXNpY2FsIFBvcnQgZW5hYmxlIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0RJU0FCTEUgICAgPSA4LAkvKiAgUGh5c2ljYWwgUG9ydCBkaXNhYmxlIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0FVVEhfT04gICAgPSA5LAkvKiAgUGh5c2ljYWwgUG9ydCBhdXRoIHN1Y2Nlc3MgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fQVVUSF9PRkYgICA9IDEwLAkvKiAgUGh5c2ljYWwgUG9ydCBhdXRoIGZhaWwgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCA9IDExLAkvKiAgUGh5c2ljYWwgUG9ydCBkaXNjb25uZWN0IGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1FPU19ORUcgICAgPSAxMiwgIAkvKiAgQmFzZSBQb3J0IFFPUyBuZWdvdGlhdGlvbiBldmVudCAqLworCUJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UgPSAxMywgLyogIEZhYnJpYyBOYW1lL1dXTiBjaGFuZ2UKKwkJCQkJICAgICAgICogZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUiA9IDE0LCAvKiAgU0ZQIHJlYWQgZXJyb3IgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1VOU1VQUE9SVCA9IDE1LCAvKiAgVW5zdXBwb3J0ZWQgU0ZQIGV2ZW50ICovCit9OworCitlbnVtIGJmYV9wb3J0X2Flbl9zZnBfcG9tIHsKKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9HUkVFTiA9IDEsCS8qICBOb3JtYWwgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9BTUJFUiA9IDIsCS8qICBXYXJuaW5nICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fUkVEICAgPSAzLAkvKiAgQ3JpdGljYWwgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9NQVggICA9IEJGQV9QT1JUX0FFTl9TRlBfUE9NX1JFRAorfTsKKworc3RydWN0IGJmYV9wb3J0X2Flbl9kYXRhX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UgaW9jX3R5cGU7CisJd3duX3QgICAgICAgICAgIHB3d247CSAgICAgIC8qICBXV04gb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgZnd3bjsJICAgICAgLyogIFdXTiBvZiB0aGUgZmFicmljIHBvcnQgKi8KKwltYWNfdCAgICAgICAgICAgbWFjOwkgICAgICAvKiAgTUFDIGFkZHJlcyBvZiB0aGUgZXRoZXJuZXQgcG9ydCwKKwkJCQkgICAgICAgKiBhcHBsaWNhYmxlIHRvIENOQSBwb3J0IG9ubHkgKi8KKwlpbnQgICAgICAgICAgICAgcGh5X3BvcnRfbnVtOyAvKiEgRm9yIFNGUCByZWxhdGVkIGV2ZW50cyAqLworCWVudW0gYmZhX3BvcnRfYWVuX3NmcF9wb20gbGV2ZWw7IC8qICBPbmx5IHRyYW5zaXRpb25zIHdpbGwKKwkJCQkJICAqIGJlIGluZm9ybWVkICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmgKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BQT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcW9zLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaD4KKworLyogTW9kaWZ5IGNoYXIqIHBvcnRfc3R0W10gaW4gYmZhbF9wb3J0LmMgaWYgYSBuZXcgc3RhdGUgd2FzIGFkZGVkICovCitlbnVtIGJmYV9wcG9ydF9zdGF0ZXMgeworCUJGQV9QUE9SVF9TVF9VTklOSVQgCQk9IDEsCisJQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUIAk9IDIsCisJQkZBX1BQT1JUX1NUX0VOQUJMSU5HIAkJPSAzLAorCUJGQV9QUE9SVF9TVF9MSU5LRE9XTiAJCT0gNCwKKwlCRkFfUFBPUlRfU1RfTElOS1VQIAkJPSA1LAorCUJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVQgCT0gNiwKKwlCRkFfUFBPUlRfU1RfRElTQUJMSU5HCQk9IDcsCisJQkZBX1BQT1JUX1NUX0RJU0FCTEVEIAkJPSA4LAorCUJGQV9QUE9SVF9TVF9TVE9QUEVEIAkJPSA5LAorCUJGQV9QUE9SVF9TVF9JT0NET1dOIAkJPSAxMCwKKwlCRkFfUFBPUlRfU1RfSU9DRElTIAkJPSAxMSwKKwlCRkFfUFBPUlRfU1RfRldNSVNNQVRDSAkJPSAxMiwKKwlCRkFfUFBPUlRfU1RfTUFYX1NUQVRFLAorfTsKKworLyoqCisgKiAJUG9ydCBzcGVlZCBzZXR0aW5ncy4gRWFjaCBzcGVjaWZpYyBzcGVlZCBpcyBhIGJpdCBmaWVsZC4gVXNlIG11bHRpcGxlCisgKiAgICAgIGJpdHMgdG8gc3BlY2lmeSBzcGVlZHMgdG8gYmUgc2VsZWN0ZWQgZm9yIGF1dG8tbmVnb3RpYXRpb24uCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkIHsKKwlCRkFfUFBPUlRfU1BFRURfVU5LTk9XTiA9IDAsCisJQkZBX1BQT1JUX1NQRUVEXzFHQlBTIAk9IDEsCisJQkZBX1BQT1JUX1NQRUVEXzJHQlBTIAk9IDIsCisJQkZBX1BQT1JUX1NQRUVEXzRHQlBTIAk9IDQsCisJQkZBX1BQT1JUX1NQRUVEXzhHQlBTIAk9IDgsCisJQkZBX1BQT1JUX1NQRUVEXzEwR0JQUyAJPSAxMCwKKwlCRkFfUFBPUlRfU1BFRURfQVVUTyA9CisJCShCRkFfUFBPUlRfU1BFRURfMUdCUFMgfCBCRkFfUFBPUlRfU1BFRURfMkdCUFMgfAorCQkgQkZBX1BQT1JUX1NQRUVEXzRHQlBTIHwgQkZBX1BQT1JUX1NQRUVEXzhHQlBTKSwKK307CisKKy8qKgorICogCQlQb3J0IG9wZXJhdGlvbmFsIHR5cGUgKGluIHN5bmMgd2l0aCBTTklBIHBvcnQgdHlwZSkuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3R5cGUgeworCUJGQV9QUE9SVF9UWVBFX1VOS05PV04gPSAxLAkvKiAgcG9ydCB0eXBlIGlzIHVua293biAqLworCUJGQV9QUE9SVF9UWVBFX1RSVU5LRUQgPSAyLAkvKiAgVHJ1bmtlZCBtb2RlICovCisJQkZBX1BQT1JUX1RZUEVfTlBPUlQgICA9IDUsCS8qICBQMlAgd2l0aCBzd2l0Y2hlZCBmYWJyaWMgKi8KKwlCRkFfUFBPUlRfVFlQRV9OTFBPUlQgID0gNiwJLyogIHB1YmxpYyBsb29wICovCisJQkZBX1BQT1JUX1RZUEVfTFBPUlQgICA9IDIwLAkvKiAgcHJpdmF0ZSBsb29wICovCisJQkZBX1BQT1JUX1RZUEVfUDJQICAgICA9IDIxLAkvKiAgUDJQIHdpdGggbm8gc3dpdGNoZWQgZmFicmljICovCisJQkZBX1BQT1JUX1RZUEVfVlBPUlQgICA9IDIyLAkvKiAgTlBJViAtIHZpcnR1YWwgcG9ydCAqLworfTsKKworLyoqCisgKiAJCVBvcnQgdG9wb2xvZ3kgc2V0dGluZy4gQSBwb3J0J3MgdG9wb2xvZ3kgYW5kIGZhYnJpYyBsb2dpbiBzdGF0dXMKKyAqIAkJZGV0ZXJtaW5lIGl0cyBvcGVyYXRpb25hbCB0eXBlLgorICovCitlbnVtIGJmYV9wcG9ydF90b3BvbG9neSB7CisJQkZBX1BQT1JUX1RPUE9MT0dZX05PTkUgPSAwLAkvKiAgTm8gdmFsaWQgdG9wb2xvZ3kgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfUDJQICA9IDEsCS8qICBQMlAgb25seSAqLworCUJGQV9QUE9SVF9UT1BPTE9HWV9MT09QID0gMiwJLyogIExPT1AgdG9wb2xvZ3kgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfQVVUTyA9IDMsCS8qICBhdXRvIHRvcG9sb2d5IHNlbGVjdGlvbiAqLworfTsKKworLyoqCisgKiAJCVBoeXNpY2FsIHBvcnQgbG9vcGJhY2sgdHlwZXMuCisgKi8KK2VudW0gYmZhX3Bwb3J0X29wbW9kZSB7CisJQkZBX1BQT1JUX09QTU9ERV9OT1JNQUwgICA9IDB4MDAsIC8qICBub3JtYWwgbm9uLWxvb3BiYWNrIG1vZGUgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0lOVCAgID0gMHgwMSwgLyogIGludGVybmFsIGxvb3AgYmFjayAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfU0xXICAgPSAweDAyLCAvKiAgc2VyaWFsIGxpbmsgd3JhcGJhY2sgKHNlcmRlcykgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0VYVCAgID0gMHgwNCwgLyogIGV4dGVybmFsIGxvb3AgYmFjayAoc2VyZGVzKSAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfQ0JMICAgPSAweDA4LCAvKiAgY2FibGVkIGxvb3AgYmFjayAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfTkxJTlQgPSAweDIwLCAvKiAgTkxfUG9ydCBpbnRlcm5hbCBsb29wYmFjayAqLworfTsKKworI2RlZmluZSBCRkFfUFBPUlRfT1BNT0RFX0xCX0hBUkQoX21vZGUpCQkJXAorCSgoX21vZGUgPT0gQkZBX1BQT1JUX09QTU9ERV9MQl9JTlQpIHx8CQlcCisgICAgIChfbW9kZSA9PSBCRkFfUFBPUlRfT1BNT0RFX0xCX1NMVykgfHwJCVwKKyAgICAgKF9tb2RlID09IEJGQV9QUE9SVF9PUE1PREVfTEJfRVhUKSkKKworLyoqCisJCVBvcnQgU3RhdGUgKGluIHN5bmMgd2l0aCBTTklBIHBvcnQgc3RhdGUpLgorICovCitlbnVtIGJmYV9wcG9ydF9zbmlhX3N0YXRlIHsKKwlCRkFfUFBPUlRfU1RBVEVfVU5LTk9XTiAgPSAxLAkvKiAgcG9ydCBpcyBub3QgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUFBPUlRfU1RBVEVfT05MSU5FICAgPSAyLAkvKiAgcG9ydCBpcyBPTkxJTkUgKi8KKwlCRkFfUFBPUlRfU1RBVEVfRElTQUJMRUQgPSAzLAkvKiAgcG9ydCBpcyBkaXNhYmxlZCBieSB1c2VyICovCisJQkZBX1BQT1JUX1NUQVRFX0JZUEFTU0VEID0gNCwJLyogIHBvcnQgaXMgYnlwYXNzZWQgKGluIExPT1ApICovCisJQkZBX1BQT1JUX1NUQVRFX0RJQUcgICAgID0gNSwJLyogIHBvcnQgZGlhZ25vc3RpY3MgaXMgYWN0aXZlICovCisJQkZBX1BQT1JUX1NUQVRFX0xJTktET1dOID0gNiwJLyogIGxpbmsgaXMgZG93biAqLworCUJGQV9QUE9SVF9TVEFURV9MT09QQkFDSyA9IDgsCS8qICBwb3J0IGlzIGxvb3BlZCBiYWNrICovCit9OworCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlCisgKi8KK2VudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZSB7CisJQkZBX1BQT1JUX0xJTktVUCAJID0gMSwJLyogIFBoeXNpY2FsIHBvcnQvVHJ1bmsgbGluayB1cCAqLworCUJGQV9QUE9SVF9MSU5LRE9XTiAJID0gMiwJLyogIFBoeXNpY2FsIHBvcnQvVHJ1bmsgbGluayBkb3duICovCisJQkZBX1BQT1JUX1RSVU5LX0xJTktET1dOID0gMywJLyogIFRydW5rIGxpbmsgZG93biAobmV3IHRtYXN0ZXIpICovCit9OworCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlIGV2ZW50CisgKi8KKyNkZWZpbmUgYmZhX3Bwb3J0X2V2ZW50X3QgZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlCisKKy8qKgorICogCQlQb3J0IGxpbmsgc3RhdGUgcmVhc29uIGNvZGUKKyAqLworZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlX3JzbiB7CisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fTk9ORQkJPSAwLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX0RJU0FCTEVEIAk9IDEsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTk9TIAkJPSAyLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX09MUyAJCT0gMywKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9MSVAgCQk9IDQsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTElQRjcgCT0gNSwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9TRlBfUkVNT1ZFRCAJPSA2LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1BPUlRfRkFVTFQgCT0gNywKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9MT1MgCQk9IDgsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fTE9DQUxfRkFVTFQgCT0gOSwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SRU1PVEVfRkFVTFQgCT0gMTAsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fVElNRU9VVCAJPSAxMSwKKworCisKKwkvKiBDRUUgcmVsYXRlZCByZWFzb24gY29kZXMvZXJyb3JzICovCisJQ0VFX0xMRFBfSU5GT19BR0VEX09VVCAgICAgICA9IDIwLAorCUNFRV9MTERQX1NIVVRET1dOX1RMVl9SQ1ZEICAgPSAyMSwKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX0RDQlggID0gMjIsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9QRyAgICA9IDIzLAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfUEZDICAgPSAyNCwKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX0ZDT0UgID0gMjUsCisJQ0VFX1BHX05PVF9DT01QQVRJQkxFICAgICAgICA9IDI2LAorCUNFRV9QRkNfTk9UX0NPTVBBVElCTEUgICAgICAgPSAyNywKKwlDRUVfRkNPRV9OT1RfQ09NUEFUSUJMRSAgICAgID0gMjgsCisJQ0VFX0JBRF9QR19SQ1ZEICAgICAgICAgICAgICA9IDI5LAorCUNFRV9CQURfQldfUkNWRCAgICAgICAgICAgICAgPSAzMCwKKwlDRUVfQkFEX1BGQ19SQ1ZEICAgICAgICAgICAgID0gMzEsCisJQ0VFX0JBRF9GQ09FX1BSSV9SQ1ZEICAgICAgICA9IDMyLAorCUNFRV9GQ09FX1BSSV9QRkNfT0ZGICAgICAgICAgPSAzMywKKwlDRUVfRFVQX0NPTlRST0xfVExWX1JDVkQgICAgID0gMzQsCisJQ0VFX0RVUF9GRUFUX1RMVl9SQ1ZEICAgICAgICA9IDM1LAorCUNFRV9BUFBMWV9ORVdfQ0ZHICAgICAgICAgICAgPSAzNiwJLyogcmVhc29uLCBub3QgYW4gZXJyb3IgKi8KKwlDRUVfUFJPVE9DT0xfSU5JVCAgICAgICAgICAgID0gMzcsICAvKiByZWFzb24sIG5vdCBhbiBlcnJvciAqLworCUNFRV9QSFlfTElOS19ET1dOICAgICAgICAgICAgPSAzOCwKKwlDRUVfTExTX0ZDT0VfQUJTRU5UICAgICAgICAgID0gMzksCisJQ0VFX0xMU19GQ09FX0RPV04gICAgICAgICAgICA9IDQwCit9OworCisvKioKKyAqICAgICAgRGVmYXVsdCBUYXJnZXQgUmF0ZSBMaW1pdGluZyBTcGVlZC4KKyAqLworI2RlZmluZSBCRkFfUFBPUlRfREVGX1RSTF9TUEVFRCAgQkZBX1BQT1JUX1NQRUVEXzFHQlBTCisKKy8qKgorICogICAgICBQaHlzaWNhbCBwb3J0IGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGJmYV9wcG9ydF9jZmdfcyB7CisJdTggICAgICAgICB0b3BvbG9neTsJLyogIGJmYV9wcG9ydF90b3BvbG9neQkJKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIGVudW0gYmZhX3Bwb3J0X3NwZWVkCSovCisJdTggICAgICAgICB0cnVua2VkOwkvKiAgdHJ1bmtlZCBvciBub3QJCSovCisJdTggICAgICAgICBxb3NfZW5hYmxlZDsJLyogIHFvcyBlbmFibGVkIG9yIG5vdAkJKi8KKwl1OCAgICAgICAgIHRydW5rX3BvcnRzOwkvKiAgYml0bWFwIG9mIHRydW5rZWQgcG9ydHMJKi8KKwl1OCAgICAgICAgIGNmZ19oYXJkYWxwYTsJLyogIGlzIGhhcmQgYWxwYSBjb25maWd1cmVkCSovCisJdTE2ICAgICAgICBtYXhmcnNpemU7CS8qICBtYXhpbXVtIGZyYW1lIHNpemUJCSovCisJdTggICAgICAgICBoYXJkYWxwYTsJLyogIGNvbmZpZ3VyZWQgaGFyZCBhbHBhCSovCisJdTggICAgICAgICByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMJKi8KKwl1OCAgICAgICAgIHR4X2JiY3JlZGl0OwkvKiAgdHJhbnNtaXQgYnVmZmVyIGNyZWRpdHMJKi8KKwl1OCAgICAgICAgIHJhdGVsaW1pdDsJLyogIHJhdGVsaW1pdCBlbmFibGVkIG9yIG5vdAkqLworCXU4ICAgICAgICAgdHJsX2RlZl9zcGVlZDsJLyogIHJhdGVsaW1pdCBkZWZhdWx0IHNwZWVkCSovCisJdTgJCXJzdmRbM107CisJdTE2ICAgCXBhdGhfdG92OwkvKiAgZGV2aWNlIHBhdGggdGltZW91dAkqLworCXUxNiAgIAlxX2RlcHRoOwkvKiAgU0NTSSBRdWV1ZSBkZXB0aAkJKi8KK307CisKKy8qKgorICogCQlQb3J0IGF0dHJpYnV0ZSB2YWx1ZXMuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHsKKwkvKgorCSAqIFN0YXRpYyBmaWVsZHMKKwkgKi8KKwl3d25fdCAgICAgICAgICAgbnd3bjsJCS8qICBub2RlIHd3biAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkJLyogIHBvcnQgd3duICovCisJZW51bSBmY19jb3MgICAgIGNvc19zdXBwb3J0ZWQ7CS8qICBzdXBwb3J0ZWQgY2xhc3Mgb2Ygc2VydmljZXMgKi8KKwl1MzIgICAgICAgIHJzdmQ7CisJc3RydWN0IGZjX3N5bW5hbWVfcyAgICBwb3J0X3N5bW5hbWU7CS8qICBwb3J0IHN5bWJvbGljIG5hbWUgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZF9zdXBwb3J0ZWQ7IC8qICBzdXBwb3J0ZWQgc3BlZWRzICovCisJYmZhX2Jvb2xlYW5fdCAgIHBiaW5kX2VuYWJsZWQ7CS8qICBXaWxsIGJlIHNldCBpZiBQZXJzaXN0ZW50IGJpbmRpbmcKKwkJCQkJICogICBlbmFibGVkLiBSZWxldmFudCBvbmx5IGluIFdpbmRvd3MKKwkJCQkJICovCisKKwkvKgorCSAqIENvbmZpZ3VyZWQgdmFsdWVzCisJICovCisJc3RydWN0IGJmYV9wcG9ydF9jZmdfcyBwcG9ydF9jZmc7CS8qICBwcG9ydCBjZmcgKi8KKworCS8qCisJICogRHluYW1pYyBmaWVsZCAtIGluZm8gZnJvbSBCRkEKKwkgKi8KKwllbnVtIGJmYV9wcG9ydF9zdGF0ZXMgCXBvcnRfc3RhdGU7CS8qICBjdXJyZW50IHBvcnQgc3RhdGUgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCAJc3BlZWQ7CQkvKiAgY3VycmVudCBzcGVlZCAqLworCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IAl0b3BvbG9neTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwliZmFfYm9vbGVhbl90CQliZWFjb247CQkvKiAgY3VycmVudCBiZWFjb24gc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdAkJbGlua19lMmVfYmVhY29uOy8qICBzZXQgaWYgbGluayBiZWFjb24gb24gKi8KKwliZmFfYm9vbGVhbl90CQlwbG9nX2VuYWJsZWQ7CS8qICBzZXQgaWYgcG9ydGxvZyBpcyBlbmFibGVkKi8KKworCS8qCisJICogRHluYW1pYyBmaWVsZCAtIGluZm8gZnJvbSBGQ1MKKwkgKi8KKwl1MzIgICAgICAgIAlwaWQ7CQkvKiAgcG9ydCBJRCAqLworCWVudW0gYmZhX3Bwb3J0X3R5cGUgCXBvcnRfdHlwZTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwl1MzIgICAgICAgIAlsb29wYmFjazsJLyogIGV4dGVybmFsIGxvb3BiYWNrICovCisJdTMyCQlyc3ZkMTsKKwl1MzIJCXJzdmQyOwkJLyogIHBhZGRpbmcgZm9yIDY0IGJpdCAqLworfTsKKworLyoqCisgKiAJCUZDIFBvcnQgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9mY19zdGF0c19zIHsKKwl1NjQgICAgICAgIHNlY3NfcmVzZXQ7CS8qICBzZWNvbmRzIHNpbmNlIHN0YXRzIGlzIHJlc2V0ICovCisJdTY0ICAgICAgICB0eF9mcmFtZXM7CS8qICB0cmFuc21pdHRlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIHR4X3dvcmRzOwkvKiAgdHJhbnNtaXR0ZWQgd29yZHMgKi8KKwl1NjQgICAgICAgIHJ4X2ZyYW1lczsJLyogIHJlY2VpdmVkIGZyYW1lcyAqLworCXU2NCAgICAgICAgcnhfd29yZHM7CS8qICByZWNlaXZlZCB3b3JkcyAqLworCXU2NCAgICAgICAgbGlwX2NvdW50OwkvKiAgTElQcyBzZWVuICovCisJdTY0ICAgICAgICBub3NfY291bnQ7CS8qICBOT1MgY291bnQgKi8KKwl1NjQgICAgICAgIGVycm9yX2ZyYW1lczsJLyogIGVycm9yZWQgZnJhbWVzIChzZW50PykgKi8KKwl1NjQgICAgICAgIGRyb3BwZWRfZnJhbWVzOwkvKiAgZHJvcHBlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIGxpbmtfZmFpbHVyZXM7CS8qICBsaW5rIGZhaWx1cmUgY291bnQgKi8KKwl1NjQgICAgICAgIGxvc3Nfb2Zfc3luY3M7CS8qICBsb3NzIG9mIHN5bmMgY291bnQgKi8KKwl1NjQgICAgICAgIGxvc3Nfb2Zfc2lnbmFsczsvKiAgbG9zcyBvZiBzaWduYWwgY291bnQgKi8KKwl1NjQgICAgICAgIHByaW1zZXFfZXJyczsJLyogIHByaW1pdGl2ZSBzZXF1ZW5jZSBwcm90b2NvbCAqLworCXU2NCAgICAgICAgYmFkX29zX2NvdW50OwkvKiAgaW52YWxpZCBvcmRlcmVkIHNldCAqLworCXU2NCAgICAgICAgZXJyX2VuY19vdXQ7CS8qICBFbmNvZGluZyBlcnJvciBvdXRzaWRlIGZyYW1lICovCisJdTY0ICAgICAgICBpbnZhbGlkX2NyY3M7CS8qICBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBpbnZhbGlkIENSQyovCisJdTY0CXVuZGVyc2l6ZWRfZnJtOyAvKiAgdW5kZXJzaXplZCBmcmFtZXMgKi8KKwl1NjQJb3ZlcnNpemVkX2ZybTsJLyogIG92ZXJzaXplZCBmcmFtZXMgKi8KKwl1NjQJYmFkX2VvZl9mcm07CS8qICBmcmFtZXMgd2l0aCBiYWQgRU9GICovCisJc3RydWN0IGJmYV9xb3Nfc3RhdHNfcwlxb3Nfc3RhdHM7CS8qICBRb1Mgc3RhdGlzdGljcyAqLworfTsKKworLyoqCisgKiAJCUV0aCBQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZXRoX3N0YXRzX3MgeworCXU2NAlzZWNzX3Jlc2V0OwkvKiAgc2Vjb25kcyBzaW5jZSBzdGF0cyBpcyByZXNldCAqLworCXU2NAlmcmFtZV82NDsgICAgICAvKiAgYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV82NV8xMjc7ICAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xMjhfMjU1OyAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8yNTZfNTExOyAgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV81MTJfMTAyMzsgICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xMDI0XzE1MTg7ICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NAlmcmFtZV8xNTE5XzE1MjI7ICAgLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCisJdTY0CXR4X2J5dGVzOworCXU2NAl0eF9wYWNrZXRzOworCXU2NAl0eF9tY2FzdF9wYWNrZXRzOworCXU2NAl0eF9iY2FzdF9wYWNrZXRzOworCXU2NAl0eF9jb250cm9sX2ZyYW1lOworCXU2NAl0eF9kcm9wOworCXU2NAl0eF9qYWJiZXI7CisJdTY0CXR4X2Zjc19lcnJvcjsKKwl1NjQJdHhfZnJhZ21lbnRzOworCisJdTY0CXJ4X2J5dGVzOworCXU2NAlyeF9wYWNrZXRzOworCXU2NAlyeF9tY2FzdF9wYWNrZXRzOworCXU2NAlyeF9iY2FzdF9wYWNrZXRzOworCXU2NAlyeF9jb250cm9sX2ZyYW1lczsKKwl1NjQJcnhfdW5rbm93bl9vcGNvZGU7CisJdTY0CXJ4X2Ryb3A7CisJdTY0CXJ4X2phYmJlcjsKKwl1NjQJcnhfZmNzX2Vycm9yOworCXU2NAlyeF9hbGlnbm1lbnRfZXJyb3I7CisJdTY0CXJ4X2ZyYW1lX2xlbmd0aF9lcnJvcjsKKwl1NjQJcnhfY29kZV9lcnJvcjsKKwl1NjQJcnhfZnJhZ21lbnRzOworCisJdTY0CXJ4X3BhdXNlOyAvKiBCUEMgKi8KKwl1NjQJcnhfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQJdHhfcGF1c2U7ICAgICAgLyogQlBDICovCisJdTY0CXR4X3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXJ4X2Zjb2VfcGF1c2U7IC8qIEJQQyAqLworCXU2NAlyeF9mY29lX3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXR4X2Zjb2VfcGF1c2U7ICAgICAgLyogQlBDICovCisJdTY0CXR4X2Zjb2VfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KK307CisKKy8qKgorICogCQlQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3VuaW9uIGJmYV9wcG9ydF9zdGF0c191IHsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2ZjX3N0YXRzX3MJZmM7CisJc3RydWN0IGJmYV9wcG9ydF9ldGhfc3RhdHNfcyAJZXRoOworfTsKKworLyoqCisgKiAgICAgICAgICAgICAgUG9ydCBGQ1AgbWFwcGluZ3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZmNwbWFwX3MgeworCWNoYXIJCW9zZGV2bmFtZVsyNTZdOworCXUzMglidXM7CisJdTMyICAgICAgICB0YXJnZXQ7CisJdTMyICAgICAgICBvc2x1bjsKKwl1MzIgICAgICAgIGZjaWQ7CisJd3duX3QgICAgICAgICAgIG53d247CisJd3duX3QgICAgICAgICAgIHB3d247CisJdTY0ICAgICAgICBmY3BsdW47CisJY2hhcgkJbHVpZFsyNTZdOworfTsKKworLyoqCisgKiAgICAgICAgICAgICAgUG9ydCBSTklEIGluZm8uCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfcm5pZF9zIHsKKwl3d25fdCAgICAgICAgICAgICB3d247CisJdTMyICAgICAgICAgIHVuaXR0eXBlOworCXUzMiAgICAgICAgICBwb3J0aWQ7CisJdTMyICAgICAgICAgIGF0dGFjaGVkX25vZGVzX251bTsKKwl1MTYgICAgICAgICAgaXBfdmVyc2lvbjsKKwl1MTYgICAgICAgICAgdWRwX3BvcnQ7CisJdTggICAgICAgICAgIGlwYWRkclsxNl07CisJdTE2ICAgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICAgIHRvcG9sb2d5ZGlzY292ZXJ5ZmxhZ3M7Cit9OworCisvKioKKyAqIAkJTGluayBzdGF0ZSBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2xpbmtfcyB7CisJdTggICAgICAgICBsaW5rc3RhdGU7CS8qICBMaW5rIHN0YXRlIGJmYV9wcG9ydF9saW5rc3RhdGUgKi8KKwl1OCAgICAgICAgIGxpbmtzdGF0ZV9yc247CS8qICBiZmFfcHBvcnRfbGlua3N0YXRlX3Jzbl90ICovCisJdTggICAgICAgICB0b3BvbG9neTsJLyogIFAyUC9MT09QIGJmYV9wcG9ydF90b3BvbG9neSAqLworCXU4ICAgICAgICAgc3BlZWQ7CQkvKiAgTGluayBzcGVlZCAoMS8yLzQvOCBHKSAqLworCXUzMiAgICAgICAgbGlua3N0YXRlX29wdDsJLyogIExpbmtzdGF0ZSBvcHRpb25hbCBkYXRhIChkZWJ1ZykgKi8KKwl1OCAgICAgICAgIHRydW5rZWQ7CS8qICBUcnVua2VkIG9yIG5vdCAoMSBvciAwKSAqLworCXU4ICAgICAgICAgcmVzdmRbM107CisJc3RydWN0IGJmYV9xb3NfYXR0cl9zICBxb3NfYXR0cjsgICAvKiBRb1MgQXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyBxb3NfdmNfYXR0cjsgIC8qICBWQyBpbmZvIGZyb20gRUxQICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggICAgICAgICB0bWFzdGVyOy8qICBUcnVuayBNYXN0ZXIgb3IKKwkJCQkJCSAqICAgIG5vdCAoMSBvciAwKSAqLworCQkJdTggICAgICAgICB0bGlua3M7CS8qICBUcnVuayBsaW5rcyBiaXRtYXAKKwkJCQkJCSAqICAgIChsaW5rdXApICovCisJCQl1OCAgICAgICAgIHJlc3YxOwkvKiAgUmVzZXJ2ZWQgKi8KKwkJfSB0cnVua19pbmZvOworCisJCXN0cnVjdCB7CisJCQl1OCAgICAgICAgIG15YWxwYTsJICAgLyogIGFscGEgY2xhaW1lZCAqLworCQkJdTggICAgICAgICBsb2dpbl9yZXE7IC8qICBMb2dpbiByZXF1aXJlZCBvcgorCQkJCQkJICAgICogICAgbm90ICgxIG9yIDApICovCisJCQl1OCAgICAgICAgIGFscGFibV92YWw7LyogIGFscGEgYml0bWFwIHZhbGlkCisJCQkJCQkgICAgKiAgICBvciBub3QgKDEgb3IgMCkgKi8KKwkJCXN0cnVjdCBmY19hbHBhYm1fcyAgICAgYWxwYWJtOwkgICAvKiAgYWxwYSBiaXRtYXAgKi8KKwkJfSBsb29wX2luZm87CisJfSB0bDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19xb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRiYWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUU9TX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1FPU19IX18KKworLyoqCisgKiBRb1Mgc3RhdGVzCisgKi8KK2VudW0gYmZhX3Fvc19zdGF0ZSB7CisJQkZBX1FPU19PTkxJTkUgPSAxLAkJLyogIFFvUyBpcyBvbmxpbmUgKi8KKwlCRkFfUU9TX09GRkxJTkUgPSAyLAkJLyogIFFvUyBpcyBvZmZsaW5lICovCit9OworCisKKy8qKgorICogUW9TICBQcmlvcml0eSBsZXZlbHMuCisgKi8KK2VudW0gYmZhX3Fvc19wcmlvcml0eSB7CisJQkZBX1FPU19VTktOT1dOID0gMCwKKwlCRkFfUU9TX0hJR0ggID0gMSwJLyogIFFvUyBQcmlvcml0eSBMZXZlbCBIaWdoICovCisJQkZBX1FPU19NRUQgID0gIDIsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgTWVkaXVtICovCisJQkZBX1FPU19MT1cgID0gIDMsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgTG93ICovCit9OworCisKKy8qKgorICogUW9TICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgZWFjaCBwcmlvcml0eSBsZXZlbAorICovCitlbnVtIGJmYV9xb3NfYndfYWxsb2MgeworCUJGQV9RT1NfQldfSElHSCAgPSA2MCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBIaWdoICovCisJQkZBX1FPU19CV19NRUQgID0gIDMwLAkvKiAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIE1lZGl1bSAqLworCUJGQV9RT1NfQldfTE9XICA9ICAxMCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBMb3cgKi8KK307CisKKy8qKgorICogUW9TIGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBRb1MgUXVlcnkKKyAqLworc3RydWN0IGJmYV9xb3NfYXR0cl9zIHsKKwllbnVtIGJmYV9xb3Nfc3RhdGUgc3RhdGU7CQkvKiAgUW9TIGN1cnJlbnQgc3RhdGUgKi8KKwl1MzIgIHRvdGFsX2JiX2NyOyAgCSAJLyogIFRvdGFsIEJCIENyZWRpdHMgKi8KK307CisKKy8qKgorICogVGhlc2UgZmllbGRzIHNob3VsZCBiZSBkaXNwbGF5ZWQgb25seSBmcm9tIHRoZSBDTEkuCisgKiBUaGVyZSB3aWxsIGJlIGEgc2VwYXJhdGUgQkZBTCBBUEkgKGdldF9xb3NfdmNfYXR0ciA/KQorICogdG8gcmV0cmlldmUgdGhpcy4KKyAqCisgKi8KKyNkZWZpbmUgIEJGQV9RT1NfTUFYX1ZDICAxNgorCitzdHJ1Y3QgYmZhX3Fvc192Y19pbmZvX3MgeworCXU4IHZjX2NyZWRpdDsKKwl1OCBib3Jyb3dfY3JlZGl0OworCXU4IHByaW9yaXR5OworCXU4IHJlc3ZkOworfTsKKworc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHsKKwl1MTYgIHRvdGFsX3ZjX2NvdW50OyAgICAgICAgICAgICAgICAgICAgLyogIFRvdGFsIFZDIENvdW50ICovCisJdTE2ICBzaGFyZWRfY3JlZGl0OworCXUzMiAgZWxwX29wbW9kZV9mbGFnczsKKwlzdHJ1Y3QgYmZhX3Fvc192Y19pbmZvX3MgdmNfaW5mb1tCRkFfUU9TX01BWF9WQ107ICAvKiAgIGFzIG1hbnkgYXMKKwkJCQkJCQkgICAgKiB0b3RhbF92Y19jb3VudCAqLworfTsKKworLyoqCisgKiBRb1Mgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zIHsKKwl1MzIJZmxvZ2lfc2VudDsgCQkvKiAgUW9TIEZsb2dpIHNlbnQgKi8KKwl1MzIJZmxvZ2lfYWNjX3JlY3ZkOwkvKiAgUW9TIEZsb2dpIEFjYyByZWNlaXZlZCAqLworCXUzMglmbG9naV9yanRfcmVjdmQ7IC8qICBRb1MgRmxvZ2kgcmVqZWN0cyByZWNlaXZlZCAqLworCXUzMglmbG9naV9yZXRyaWVzOwkJLyogIFFvUyBGbG9naSByZXRyaWVzICovCisKKwl1MzIJZWxwX3JlY3ZkOyAJICAgCS8qICBRb1MgRUxQIHJlY2VpdmVkICovCisJdTMyCWVscF9hY2NlcHRlZDsgICAgICAgLyogIFFvUyBFTFAgQWNjZXB0ZWQgKi8KKwl1MzIJZWxwX3JlamVjdGVkOyAgICAgICAvKiAgUW9TIEVMUCByZWplY3RlZCAqLworCXUzMgllbHBfZHJvcHBlZDsgICAgICAgIC8qICBRb1MgRUxQIGRyb3BwZWQgICovCisKKwl1MzIJcW9zX3JzY25fcmVjdmQ7ICAgICAvKiAgUW9TIFJTQ04gcmVjZWl2ZWQgKi8KKwl1MzIJcnN2ZDsgCQkvKiBwYWRkaW5nIGZvciA2NCBiaXQgYWxpZ25tZW50ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19RT1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFmNTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19xb3MuaD4KKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGVzCisgKi8KK2VudW0gYmZhX3Jwb3J0X3N0YXRlIHsKKwlCRkFfUlBPUlRfVU5JTklUIAk9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUlBPUlRfT0ZGTElORSAJPSAxLAkvKiAgcnBvcnQgaXMgb2ZmbGluZSAqLworCUJGQV9SUE9SVF9QTE9HSSAJPSAyLAkvKiAgUExPR0kgdG8gcnBvcnQgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfUlBPUlRfT05MSU5FIAk9IDMsCS8qICBsb2dpbiB0byBycG9ydCBpcyBjb21wbGV0ZSAqLworCUJGQV9SUE9SVF9QTE9HSV9SRVRSWSAJPSA0LAkvKiAgcmV0cnlpbmcgbG9naW4gdG8gcnBvcnQgKi8KKwlCRkFfUlBPUlRfTlNRVUVSWSAJPSA1LAkvKiAgbmFtZXNlcnZlciBxdWVyeSAqLworCUJGQV9SUE9SVF9BRElTQyAJPSA2LAkvKiAgQURJU0MgYXV0aGVudGljYXRpb24gKi8KKwlCRkFfUlBPUlRfTE9HTyAJCT0gNywJLyogIGxvZ2dpbmcgb3V0IHdpdGggcnBvcnQgKi8KKwlCRkFfUlBPUlRfTE9HT1JDViAJPSA4LAkvKiAgaGFuZGxpbmcgTE9HTyBmcm9tIHJwb3J0ICovCisJQkZBX1JQT1JUX05TRElTQyAJPSA5LAkvKiAgcmUtZGlzY292ZXIgcnBvcnQgKi8KK307CisKKy8qKgorICogIFJwb3J0IFNjc2kgRnVuY3Rpb24gOiBJbml0aWF0b3IvVGFyZ2V0LgorICovCitlbnVtIGJmYV9ycG9ydF9mdW5jdGlvbiB7CisJQkZBX1JQT1JUX0lOSVRJQVRPUiAJPSAweDAxLAkvKiAgU0NTSSBJbml0aWF0b3IJKi8KKwlCRkFfUlBPUlRfVEFSR0VUIAk9IDB4MDIsCS8qICBTQ1NJIFRhcmdldAkqLworfTsKKworLyoqCisgKiBwb3J0L25vZGUgc3ltYm9saWMgbmFtZXMgZm9yIHJwb3J0CisgKi8KKyNkZWZpbmUgQkZBX1JQT1JUX1NZTU5BTUVfTUFYTEVOCTI1NQorc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3MgeworCWNoYXIgICAgICAgICAgICBzeW1uYW1lW0JGQV9SUE9SVF9TWU1OQU1FX01BWExFTl07Cit9OworCitzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zIHsKKwl1MzIgICAgICAgIHNtX3VuX2NyOwkgICAgLyogIHVuaW5pdDogY3JlYXRlIGV2ZW50cyAgICAgICovCisJdTMyICAgICAgICBzbV91bl91bmV4cDsJICAgIC8qICB1bmluaXQ6IGV4Y2VwdGlvbiBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fY3Jfb247CSAgICAvKiAgY3JlYXRlZDogb25saW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX2RlbDsJICAgIC8qICBjcmVhdGVkOiBkZWxldGUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fY3JfaHdmOwkgICAgLyogIGNyZWF0ZWQ6IElPQyBkb3duICAgICAgICAgICovCisJdTMyICAgICAgICBzbV9jcl91bmV4cDsJICAgIC8qICBjcmVhdGVkOiBleGNlcHRpb24gZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZndjX3JzcDsJICAgIC8qICBmdyBjcmVhdGU6IGYvdyByZXNwb25zZXMgICAqLworCXUzMiAgICAgICAgc21fZndjX2RlbDsJICAgIC8qICBmdyBjcmVhdGU6IGRlbGV0ZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndjX29mZjsJICAgIC8qICBmdyBjcmVhdGU6IG9mZmxpbmUgZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZndjX2h3ZjsJICAgIC8qICBmdyBjcmVhdGU6IElPQyBkb3duICAgICAgICAqLworCXUzMiAgICAgICAgc21fZndjX3VuZXhwOwkgICAgLyogIGZ3IGNyZWF0ZTogZXhjZXB0aW9uIGV2ZW50cyovCisJdTMyICAgICAgICBzbV9vbl9vZmY7CSAgICAvKiAgb25saW5lOiBvZmZsaW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29uX2RlbDsJICAgIC8qICBvbmxpbmU6IGRlbGV0ZSBldmVudHMgICAgICAqLworCXUzMiAgICAgICAgc21fb25faHdmOwkgICAgLyogIG9ubGluZTogSU9DIGRvd24gZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9vbl91bmV4cDsJICAgIC8qICBvbmxpbmU6IGV4Y2VwdGlvbiBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndkX3JzcDsJICAgIC8qICBmdyBkZWxldGU6IGZ3IHJlc3BvbnNlcyAgICAqLworCXUzMiAgICAgICAgc21fZndkX2RlbDsJICAgIC8qICBmdyBkZWxldGU6IGRlbGV0ZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZndkX2h3ZjsJICAgIC8qICBmdyBkZWxldGU6IElPQyBkb3duIGV2ZW50cyAqLworCXUzMiAgICAgICAgc21fZndkX3VuZXhwOwkgICAgLyogIGZ3IGRlbGV0ZTogZXhjZXB0aW9uIGV2ZW50cyovCisJdTMyICAgICAgICBzbV9vZmZfZGVsOwkgICAgLyogIG9mZmxpbmU6IGRlbGV0ZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZfb247CSAgICAvKiAgb2ZmbGluZTogb25saW5lIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZl9od2Y7CSAgICAvKiAgb2ZmbGluZTogSU9DIGRvd24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX29mZl91bmV4cDsJICAgIC8qICBvZmZsaW5lOiBleGNlcHRpb24gZXZlbnRzICAqLworCXUzMiAgICAgICAgc21fZGVsX2Z3cnNwOwkgICAgLyogIGRlbGV0ZTogZncgcmVzcG9uc2VzICAgICAgICovCisJdTMyICAgICAgICBzbV9kZWxfaHdmOwkgICAgLyogIGRlbGV0ZTogSU9DIGRvd24gZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9kZWxfdW5leHA7CSAgICAvKiAgZGVsZXRlOiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2RlbHBfZndyc3A7CSAgICAvKiAgZGVsZXRlIHBlbmQ6IGZ3IHJlc3BvbnNlcyAgKi8KKwl1MzIgICAgICAgIHNtX2RlbHBfaHdmOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBJT0MgZG93bnMgICAgICovCisJdTMyICAgICAgICBzbV9kZWxwX3VuZXhwOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBleGNlcHRpb25zICAgICovCisJdTMyICAgICAgICBzbV9vZmZwX2Z3cnNwOwkgICAgLyogIG9mZi1wZW5kaW5nOiBmdyByZXNwb25zZXMgICovCisJdTMyICAgICAgICBzbV9vZmZwX2RlbDsJICAgIC8qICBvZmYtcGVuZGluZzogZGVsZXRlcyAgICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9od2Y7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IElPQyBkb3ducyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfdW5leHA7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IGV4Y2VwdGlvbnMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2Rfb2ZmOwkgICAgLyogIElPQyBkb3duOiBvZmZsaW5lIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9pb2NkX2RlbDsJICAgIC8qICBJT0MgZG93bjogZGVsZXRlIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21faW9jZF9vbjsJICAgIC8qICBJT0MgZG93bjogb25saW5lIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21faW9jZF91bmV4cDsJICAgIC8qICBJT0MgZG93bjogZXhjZXB0aW9ucyAgICAgICAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zIHsKKwl1MzIgICAgICAgIG9mZmxpbmVzOyAgICAgICAgICAgLyogIHJlbW90ZSBwb3J0IG9mZmxpbmUgY291bnQgICovCisJdTMyICAgICAgICBvbmxpbmVzOyAgICAgICAgICAgIC8qICByZW1vdGUgcG9ydCBvbmxpbmUgY291bnQgICAqLworCXUzMiAgICAgICAgcnNjbnM7ICAgICAgICAgICAgICAvKiAgUlNDTiBhZmZlY3RpbmcgcnBvcnQgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpczsJCSAgICAvKiAgcGxvZ2lzIHNlbnQgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX2FjY3M7CSAgICAvKiAgcGxvZ2kgYWNjZXB0cyAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX3RpbWVvdXRzOwkgICAgLyogIHBsb2dpIHRpbWVvdXRzICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9yZWplY3RzOwkgICAgLyogIHJjdmQgcGxvZ2kgcmVqZWN0cyAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9mYWlsZWQ7CSAgICAvKiAgbG9jYWwgZmFpbHVyZSAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX3JjdmQ7CSAgICAvKiAgcGxvZ2lzIHJjdmQgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBybGlfcmN2ZDsgICAgICAgICAgLyogIGluYm91bmQgUFJMSXMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19yY3ZkOyAgICAgICAgIC8qICBBRElTQ3MgcmVjZWl2ZWQgICAgICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfcmVqZWN0czsgICAgICAvKiAgcmVjdmQgIEFESVNDIHJlamVjdHMgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX3NlbnQ7ICAgICAgICAgLyogIEFESVNDIHJlcXVlc3RzIHNlbnQgICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19hY2NzOyAgICAgICAgIC8qICBBRElTQyBhY2NlcHRlZCBieSBycG9ydCAgICAqLworCXUzMiAgICAgICAgYWRpc2NfZmFpbGVkOyAgICAgICAvKiAgQURJU0MgZmFpbGVkIChubyByZXNwb25zZSkgKi8KKwl1MzIgICAgICAgIGFkaXNjX3JlamVjdGVkOyAgICAgLyogIEFESVNDIHJlamVjdGVkIGJ5IHVzICAgICovCisJdTMyICAgICAgICBsb2dvczsgICAgICAgICAgICAgIC8qICBsb2dvcyBzZW50ICAgICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgbG9nb19hY2NzOyAgICAgICAgICAvKiAgTE9HTyBhY2NlcHRzIGZyb20gcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fZmFpbGVkOyAgICAgICAgLyogIExPR08gZmFpbHVyZXMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBsb2dvX3JlamVjdGVkOyAgICAgIC8qICBMT0dPIHJlamVjdHMgZnJvbSBycG9ydCAgICAqLworCXUzMiAgICAgICAgbG9nb19yY3ZkOyAgICAgICAgICAvKiAgTE9HTyBmcm9tIHJlbW90ZSBwb3J0ICAgICAgKi8KKworCXUzMiAgICAgICAgcnBzY19yY3ZkOyAgICAgICAgIC8qICBSUFNDIHJlY2VpdmVkICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHJwc2NfcmVqZWN0czsgICAgICAvKiAgcmVjdmQgIFJQU0MgcmVqZWN0cyAgICAgICAqLworCXUzMiAgICAgICAgcnBzY19zZW50OyAgICAgICAgIC8qICBSUFNDIHJlcXVlc3RzIHNlbnQgICAgICAgICovCisJdTMyICAgICAgICBycHNjX2FjY3M7ICAgICAgICAgLyogIFJQU0MgYWNjZXB0ZWQgYnkgcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIHJwc2NfZmFpbGVkOyAgICAgICAvKiAgUlBTQyBmYWlsZWQgKG5vIHJlc3BvbnNlKSAqLworCXUzMiAgICAgICAgcnBzY19yZWplY3RlZDsgICAgIC8qICBSUFNDIHJlamVjdGVkIGJ5IHVzICAgICovCisKKwl1MzIgICAgICAgIHJzdmQ7CisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcwloYWxfc3RhdHM7ICAvKiAgQkZBIHJwb3J0IHN0YXRzICAgICovCit9OworCisvKioKKyAqICBScG9ydCdzIFFvUyBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyB7CisJZW51bSBiZmFfcW9zX3ByaW9yaXR5IHFvc19wcmlvcml0eTsgIC8qICBycG9ydCdzIFFvUyBwcmlvcml0eSAgICovCisJdTMyCSAgICAgICBxb3NfZmxvd19pZDsJICAvKiAgUW9TIGZsb3cgSWQJICovCit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgeworCXd3bl90ICAgICAgICAgICAJbnd3bjsJLyogIG5vZGUgd3duICovCisJd3duX3QgICAgICAgICAgIAlwd3duOwkvKiAgcG9ydCB3d24gKi8KKwllbnVtIGZjX2NvcyBjb3Nfc3VwcG9ydGVkOwkvKiAgc3VwcG9ydGVkIGNsYXNzIG9mIHNlcnZpY2VzICovCisJdTMyICAgICAgICAJcGlkOwkvKiAgcG9ydCBJRCAqLworCXUzMiAgICAgICAgCWRmX3N6OwkvKiAgTWF4IHBheWxvYWQgc2l6ZSAqLworCWVudW0gYmZhX3Jwb3J0X3N0YXRlIAlzdGF0ZTsJLyogIFJwb3J0IFN0YXRlIG1hY2hpbmUgc3RhdGUgKi8KKwllbnVtIGZjX2NvcyAgICAgICAgCWZjX2NvczsJLyogIEZDIGNsYXNzZXMgb2Ygc2VydmljZXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWNpc2M7CS8qICBDSVNDIGNhcGFibGUgZGV2aWNlICovCisJc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3Mgc3ltbmFtZTsgLyogIFN5bWJvbGljIE5hbWUgKi8KKwllbnVtIGJmYV9ycG9ydF9mdW5jdGlvbglzY3NpX2Z1bmN0aW9uOyAvKiAgSW5pdGlhdG9yL1RhcmdldCAqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsgLyogIHFvcyBhdHRyaWJ1dGVzICAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIGN1cnJfc3BlZWQ7ICAgLyogIG9wZXJhdGluZyBzcGVlZCBnb3QgZnJvbQorCQkJCQkgICAgKiBSUFNDIEVMUy4gVU5LTk9XTiwgaWYgUlBTQworCQkJCQkgICAgKiBpcyBub3Qgc3VwcG9ydGVkICovCisJYmZhX2Jvb2xlYW5fdCAJdHJsX2VuZm9yY2VkOwkvKiAgVFJMIGVuZm9yY2VkID8gVFJVRS9GQUxTRSAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkCWFzc2lnbmVkX3NwZWVkOwkvKiBTcGVlZCBhc3NpZ25lZCBieSB0aGUgdXNlci4KKwkJCQkJCSAqIHdpbGwgYmUgdXNlZCBpZiBSUFNDIGlzIG5vdAorCQkJCQkJICogc3VwcG9ydGVkIGJ5IHRoZSBycG9ydCAqLworfTsKKworI2RlZmluZSBiZmFfcnBvcnRfYWVuX3Fvc19kYXRhX3Qgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zCisKKy8qKgorICogQkZBIHJlbW90ZSBwb3J0IGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUlBPUlRfQUVOX09OTElORTogICAgW2luXTogbHB3d24JW291dF06IHZmX2lkLCBscHd3biwgcnB3d24KKyAqIEJGQV9SUE9SVF9BRU5fT0ZGTElORTogICBbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3bgorICogQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUOltpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duCisgKiBCRkFfUlBPUlRfQUVOX1FPU19QUklPOiAgW2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24sIHByaW8KKyAqIEJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRDpbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3biwgZmxvd19pZAorICovCitlbnVtIGJmYV9ycG9ydF9hZW5fZXZlbnQgeworCUJGQV9SUE9SVF9BRU5fT05MSU5FICAgICAgPSAxLAkvKiAgUlBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9PRkZMSU5FICAgICA9IDIsCS8qICBSUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUICA9IDMsCS8qICBSUG9ydCBkaXNjb25uZWN0IGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9RT1NfUFJJTyAgICA9IDQsCS8qICBRT1MgcHJpb3JpdHkgY2hhbmdlIGV2ZW50ICovCisJQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEICA9IDUsCS8qICBRT1MgZmxvdyBJZCBjaGFuZ2UgZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJdTE2ICAgICAgICByc3ZkWzNdOworCXd3bl90ICAgICAgICAgICBwcHd3bjsJLyogIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsJLyogIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBycHd3bjsJLyogIFdXTiBvZiB0aGlzIHJlbW90ZSBwb3J0ICovCisJdW5pb24geworCQliZmFfcnBvcnRfYWVuX3Fvc19kYXRhX3QgcW9zOworCX0gcHJpdjsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNlYWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19TVEFUVVNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfU1RBVFVTX0hfXworCisvKioKKyAqIEFQSSBzdGF0dXMgcmV0dXJuIHZhbHVlcworICoKKyAqIE5PVEU6IFRoZSBlcnJvciBtc2dzIGFyZSBhdXRvIGdlbmVyYXRlZCBmcm9tIHRoZSBjb21tZW50cy4gT25seSBzaW5nZSBsaW5lCisgKiBjb21tZW50cyBhcmUgc3VwcG9ydGVkCisgKi8KK2VudW0gYmZhX3N0YXR1cyB7CisJQkZBX1NUQVRVU19PSyAJCT0gMCwJLyogIFN1Y2Nlc3MgKi8KKwlCRkFfU1RBVFVTX0ZBSUxFRCAJPSAxLAkvKiAgT3BlcmF0aW9uIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfRUlOVkFMIAk9IDIsCS8qICBJbnZhbGlkIHBhcmFtcyBDaGVjayBpbnB1dAorCQkJCQkgKiBwYXJhbWV0ZXJzICovCisJQkZBX1NUQVRVU19FTk9NRU0gCT0gMywJLyogIE91dCBvZiByZXNvdXJjZXMgKi8KKwlCRkFfU1RBVFVTX0VOT1NZUyAJPSA0LAkvKiAgRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisJQkZBX1NUQVRVU19FVElNRVIgCT0gNSwJLyogIFRpbWVyIGV4cGlyZWQgLSBSZXRyeSwgaWYKKwkJCQkJICogcGVyc2lzdHMsIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfRVBST1RPQ09MIAk9IDYsCS8qICBQcm90b2NvbCBlcnJvciAqLworCUJGQV9TVEFUVVNfRU5PRkNQT1JUUyAJPSA3LAkvKiAgTm8gRkMgcG9ydHMgcmVzb3VyY2VzICovCisJQkZBX1NUQVRVU19OT0ZMQVNIIAk9IDgsCS8qICBGbGFzaCBub3QgcHJlc2VudCAqLworCUJGQV9TVEFUVVNfQkFERkxBU0ggCT0gOSwJLyogIEZsYXNoIGlzIGNvcnJ1cHRlZCBvciBiYWQgKi8KKwlCRkFfU1RBVFVTX1NGUF9VTlNVUFAgCT0gMTAsCS8qICBVbnN1cHBvcnRlZCBTRlAgLSBSZXBsYWNlIFNGUCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9WRklEID0gMTEsCS8qICBWRl9JRCBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0RBVEFDT1JSVVBURUQgPSAxMiwJLyogIERpYWcgcmV0dXJuZWQgZGF0YSBjb3JydXB0ZWQKKwkJCQkJICogY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19ERVZCVVNZIAk9IDEzLAkvKiAgRGV2aWNlIGJ1c3kgLSBSZXRyeSBvcGVyYXRpb24gKi8KKwlCRkFfU1RBVFVTX0FCT1JURUQgCT0gMTQsCS8qICBPcGVyYXRpb24gYWJvcnRlZCAqLworCUJGQV9TVEFUVVNfTk9ERVYgCT0gMTUsCS8qICBEZXYgaXMgbm90IHByZXNlbnQgKi8KKwlCRkFfU1RBVFVTX0hETUFfRkFJTEVEIAk9IDE2LAkvKiAgSG9zdCBkbWEgZmFpbGVkIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfRkxBU0hfQkFEX0xFTiA9IDE3LAkvKiAgRmxhc2ggYmFkIGxlbmd0aCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9MV1dOID0gMTgsCS8qICBMUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9SV1dOID0gMTksCS8qICBSUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfRkNQVF9MU19SSlQgCT0gMjAsCS8qICBHb3QgTFNfUkpUIGZvciBGQyBQYXNzCisJCQkJCSAqIHRocm91Z2ggUmVxICovCisJQkZBX1NUQVRVU19WUE9SVF9FWElTVFMgPSAyMSwJLyogIFZQT1JUIGFscmVhZHkgZXhpc3RzICovCisJQkZBX1NUQVRVU19WUE9SVF9NQVggCT0gMjIsCS8qICBSZWFjaGVkIG1heCBWUE9SVCBzdXBwb3J0ZWQKKwkJCQkJICogbGltaXQgKi8KKwlCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRCA9IDIzLAkvKiAgSW52YWxpZCBTcGVlZCBDaGVjayBzcGVlZAorCQkJCQkgKiBzZXR0aW5nICovCisJQkZBX1NUQVRVU19JTlZMRF9ERlNaIAk9IDI0LAkvKiAgSW52YWxpZCBNYXggZGF0YSBmaWVsZCBzaXplICovCisJQkZBX1NUQVRVU19DTkZHX0ZBSUxFRCAJPSAyNSwJLyogIFNldHRpbmcgY2FuIG5vdCBiZSBwZXJzaXN0ZWQgKi8KKwlCRkFfU1RBVFVTX0NNRF9OT1RTVVBQIAk9IDI2LAkvKiAgQ29tbWFuZC9BUEkgbm90IHN1cHBvcnRlZCAqLworCUJGQV9TVEFUVVNfTk9fQURBUFRFUiAJPSAyNywJLyogIE5vIEJyb2NhZGUgQWRhcHRlciBGb3VuZCAqLworCUJGQV9TVEFUVVNfTElOS0RPV04gCT0gMjgsCS8qICBMaW5rIGlzIGRvd24gLSBDaGVjayBvciByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfRkFCUklDX1JKVCAJPSAyOSwJLyogIFJlamVjdCBmcm9tIGF0dGFjaGVkIGZhYnJpYyAqLworCUJGQV9TVEFUVVNfVU5LTk9XTl9WV1dOID0gMzAsCS8qICBWUE9SVCBQV1dOIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfTlNMT0dJTl9GQUlMRUQgPSAzMSwJLyogIE5hbWVzZXJ2ZXIgbG9naW4gZmFpbGVkICovCisJQkZBX1NUQVRVU19OT19SUE9SVFMgCT0gMzIsCS8qICBObyByZW1vdGUgcG9ydHMgZm91bmQgKi8KKwlCRkFfU1RBVFVTX05TUVVFUllfRkFJTEVEID0gMzMsCS8qICBOYW1lc2VydmVyIHF1ZXJ5IGZhaWxlZCAqLworCUJGQV9TVEFUVVNfUE9SVF9PRkZMSU5FID0gMzQsCS8qICBQb3J0IGlzIG5vdCBvbmxpbmUgKi8KKwlCRkFfU1RBVFVTX1JQT1JUX09GRkxJTkUgPSAzNSwJLyogIFJQT1JUIGlzIG5vdCBvbmxpbmUgKi8KKwlCRkFfU1RBVFVTX1RHVE9QRU5fRkFJTEVEID0gMzYsCS8qICBSZW1vdGUgU0NTSSB0YXJnZXQgb3BlbiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0JBRF9MVU5TIAk9IDM3LAkvKiAgTm8gdmFsaWQgTFVOcyBmb3VuZCAqLworCUJGQV9TVEFUVVNfSU9fRkFJTFVSRSAJPSAzOCwJLyogIFNDU0kgdGFyZ2V0IElPIGZhaWx1cmUgKi8KKwlCRkFfU1RBVFVTX05PX0ZBQlJJQyAJPSAzOSwJLyogIE5vIHN3aXRjaGVkIGZhYnJpYyBwcmVzZW50ICovCisJQkZBX1NUQVRVU19FQkFERiAJPSA0MCwJLyogIEJhZCBmaWxlIGRlc2NyaXB0b3IgKi8KKwlCRkFfU1RBVFVTX0VJTlRSIAk9IDQxLAkvKiAgQSBzaWduYWwgd2FzIGNhdWdodCBkdXJpbmcgaW9jdGwgKi8KKwlCRkFfU1RBVFVTX0VJTyAJCT0gNDIsCS8qICBJL08gZXJyb3IgKi8KKwlCRkFfU1RBVFVTX0VOT1RUWSAJPSA0MywJLyogIEluYXBwcm9wcmlhdGUgSS9PIGNvbnRyb2wKKwkJCQkJICogb3BlcmF0aW9uICovCisJQkZBX1NUQVRVU19FTlhJTyAJPSA0NCwJLyogIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MgKi8KKwlCRkFfU1RBVFVTX0VGT1BFTiAJPSA0NSwJLyogIEZhaWxlZCB0byBvcGVuIGZpbGUgKi8KKwlCRkFfU1RBVFVTX1ZQT1JUX1dXTl9CUCA9IDQ2LAkvKiAgV1dOIGlzIHNhbWUgYXMgYmFzZSBwb3J0J3MgV1dOICovCisJQkZBX1NUQVRVU19QT1JUX05PVF9ESVNBQkxFRCA9IDQ3LCAvKiAgUG9ydCBub3QgZGlzYWJsZWQgZGlzYWJsZSBwb3J0CisJCQkJCSAgICAqIGZpcnN0ICovCisJQkZBX1NUQVRVU19CQURGUk1IRFIgCT0gNDgsCS8qICBCYWQgZnJhbWUgaGVhZGVyICovCisJQkZBX1NUQVRVU19CQURGUk1TWiAJPSA0OSwJLyogIEJhZCBmcmFtZSBzaXplIGNoZWNrIGFuZCByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfTUlTU0lOR0ZSTSAJPSA1MCwJLyogIE1pc3NpbmcgZnJhbWUgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19MSU5LVElNRU9VVCAJPSA1MSwJLyogIExpbmsgdGltZW91dCBjaGVjayBhbmQgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX05PX0ZDUElNX05FWFVTID0gNTIsCS8qICBObyBGQ1AgTmV4dXMgZXhpc3RzIHdpdGggdGhlCisJCQkJCSAqIHJwb3J0ICovCisJQkZBX1NUQVRVU19DSEVDS1NVTV9GQUlMID0gNTMsCS8qICBjaGVja3N1bSBmYWlsdXJlICovCisJQkZBX1NUQVRVU19HWk1FX0ZBSUxFRCAJPSA1NCwJLyogIEdldCB6b25lIG1lbWJlciBxdWVyeSBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1NDU0lTVEFSVF9SRVFEID0gNTUsCS8qICBTQ1NJIGRpc2sgcmVxdWlyZSBTVEFSVCBjb21tYW5kICovCisJQkZBX1NUQVRVU19JT0NfRkFJTFVSRSAJPSA1NiwJLyogIElPQyBmYWlsdXJlIC0gUmV0cnksIGlmIHBlcnNpc3RzCisJCQkJCSAqIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9XV04gCT0gNTcsCS8qICBJbnZhbGlkIFdXTiAqLworCUJGQV9TVEFUVVNfTUlTTUFUQ0ggCT0gNTgsCS8qICBWZXJzaW9uIG1pc21hdGNoICovCisJQkZBX1NUQVRVU19JT0NfRU5BQkxFRCAJPSA1OSwJLyogIElPQyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FEQVBURVJfRU5BQkxFRCA9IDYwLCAvKiAgQWRhcHRlciBpcyBub3QgZGlzYWJsZWQgZGlzYWJsZQorCQkJCQkgICogYWRhcHRlciBmaXJzdCAqLworCUJGQV9TVEFUVVNfSU9DX05PTl9PUCAJPSA2MSwJLyogIElPQyBpcyBub3Qgb3BlcmF0aW9uYWwuIEVuYWJsZSBJT0MKKwkJCQkJICogYW5kIGlmIGl0IHN0aWxsIGZhaWxzLAorCQkJCQkgKiBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0FERFJfTUFQX0ZBSUxVUkUgPSA2MiwgLyogIFBDSSBiYXNlIGFkZHJlc3Mgbm90IG1hcHBlZAorCQkJCQkgICAqIGluIE9TICovCisJQkZBX1NUQVRVU19TQU1FX05BTUUgCT0gNjMsCS8qICBOYW1lIGV4aXN0cyEgdXNlIGEgZGlmZmVyZW50CisJCQkJCSAqIG5hbWUgKi8KKwlCRkFfU1RBVFVTX1BFTkRJTkcgICAgICA9IDY0LCAgIC8qICBBUEkgY29tcGxldGVzIGFzeW5jaHJvbm91c2x5ICovCisJQkZBX1NUQVRVU184R19TUEQJPSA2NSwJLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvcgorCQkJCQkgKiA4RyBIQkEgKi8KKwlCRkFfU1RBVFVTXzRHX1NQRAk9IDY2LAkvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yCisJCQkJCSAqIDRHIEhCQSAqLworCUJGQV9TVEFUVVNfQURfSVNfRU5BQkxFID0gNjcsCS8qICBBZGFwdGVyIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfRUlOVkFMX1RPViAJPSA2OCwJLyogIEludmFsaWQgcGF0aCBmYWlsb3ZlciBUT1YgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTF9RREVQVEggPSA2OSwJLyogIEludmFsaWQgcXVldWUgZGVwdGggdmFsdWUgKi8KKwlCRkFfU1RBVFVTX1ZFUlNJT05fRkFJTCA9IDcwLAkvKiAgQXBwbGljYXRpb24vRHJpdmVyIHZlcnNpb24KKwkJCQkJICogbWlzbWF0Y2ggKi8KKwlCRkFfU1RBVFVTX0RJQUdfQlVTWSAgICA9IDcxLAkvKiAgZGlhZyBidXN5ICovCisJQkZBX1NUQVRVU19CRUFDT05fT04JPSA3MiwJLyogIFBvcnQgQmVhY29uIGFscmVhZHkgb24gKi8KKwlCRkFfU1RBVFVTX0JFQUNPTl9PRkYJPSA3MywJLyogIFBvcnQgQmVhY29uIGFscmVhZHkgb2ZmICovCisJQkZBX1NUQVRVU19MQkVBQ09OX09OICAgPSA3NCwJLyogIExpbmsgRW5kLXRvLUVuZCBCZWFjb24gYWxyZWFkeQorCQkJCQkgKiBvbiAqLworCUJGQV9TVEFUVVNfTEJFQUNPTl9PRkYJPSA3NSwJLyogIExpbmsgRW5kLXRvLUVuZCBCZWFjb24gYWxyZWFkeQorCQkJCQkgKiBvZmYgKi8KKwlCRkFfU1RBVFVTX1BPUlRfTk9UX0lOSVRFRCA9IDc2LCAvKiAgUG9ydCBub3QgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfU1RBVFVTX1JQU0NfRU5BQkxFRCA9IDc3LCAvKiAgVGFyZ2V0IGhhcyBhIHZhbGlkIHNwZWVkICovCisJQkZBX1NUQVRVU19FTk9GU0FWRSA9IDc4LAkvKiAgTm8gc2F2ZWQgZmlybXdhcmUgdHJhY2UgKi8KKwlCRkFfU1RBVFVTX0JBRF9GSUxFID0gNzksCS8qICBOb3QgYSB2YWxpZCBCcm9jYWRlIEJvb3QgQ29kZQorCQkJCQkgKiBmaWxlICovCisJQkZBX1NUQVRVU19STElNX0VOID0gODAsCS8qICBUYXJnZXQgcmF0ZSBsaW1pdGluZyBpcyBhbHJlYWR5CisJCQkJCSAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX1JMSU1fRElTID0gODEsICAvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMgYWxyZWFkeQorCQkJCSAgICAqIGRpc2FibGVkICovCisJQkZBX1NUQVRVU19JT0NfRElTQUJMRUQgPSA4MiwgICAvKiAgSU9DIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FEQVBURVJfRElTQUJMRUQgPSA4MywgICAvKiAgQWRhcHRlciBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19CSU9TX0RJU0FCTEVEID0gODQsICAgLyogIEJpb3MgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfQVVUSF9FTkFCTEVEID0gODUsICAgLyogIEF1dGhlbnRpY2F0aW9uIGlzIGFscmVhZHkKKwkJCQkJICogZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfQVVUSF9ESVNBQkxFRCA9IDg2LCAgIC8qICBBdXRoZW50aWNhdGlvbiBpcyBhbHJlYWR5CisJCQkJCSAqIGRpc2FibGVkICovCisJQkZBX1NUQVRVU19FUlJPUl9UUkxfRU5BQkxFRCA9IDg3LCAgIC8qICBUYXJnZXQgcmF0ZSBsaW1pdGluZyBpcworCQkJCQkgICAgICAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0VSUk9SX1FPU19FTkFCTEVEID0gODgsICAgLyogIFFvUyBpcyBlbmFibGVkICovCisJQkZBX1NUQVRVU19OT19TRlBfREVWID0gODksIC8qICBObyBTRlAgZGV2aWNlIGNoZWNrIG9yIHJlcGxhY2UgU0ZQICovCisJQkZBX1NUQVRVU19NRU1URVNUX0ZBSUxFRCA9IDkwLAkvKiAgTWVtb3J5IHRlc3QgZmFpbGVkIGNvbnRhY3QKKwkJCQkJICogc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9ERVZJRCA9IDkxLAkvKiAgSW52YWxpZCBkZXZpY2UgaWQgcHJvdmlkZWQgKi8KKwlCRkFfU1RBVFVTX1FPU19FTkFCTEVEID0gOTIsIC8qICBRT1MgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19RT1NfRElTQUJMRUQgPSA5MywgLyogIFFPUyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19JTkNPUlJFQ1RfRFJWX0NPTkZJRyA9IDk0LCAvKiAgQ2hlY2sgY29uZmlndXJhdGlvbgorCQkJCQkgICAgICAgKiBrZXkvdmFsdWUgcGFpciAqLworCUJGQV9TVEFUVVNfUkVHX0ZBSUwgPSA5NSwgLyogIENhbid0IHJlYWQgd2luZG93cyByZWdpc3RyeSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX0NPREUgPSA5NiwgLyogIEludmFsaWQgSU9DVEwgY29kZSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1ZMQU4gPSA5NywgLyogIEludmFsaWQgVkxBTiBJRCAqLworCUJGQV9TVEFUVVNfSU1fSU5WX0FEQVBUX05BTUUgPSA5OCwgLyogIEludmFsaWQgYWRhcHRlciBuYW1lICovCisJQkZBX1NUQVRVU19JTV9MT1dfUkVTT1VSQ0VTID0gOTksIC8qICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluCisJCQkJCSAgICogZHJpdmVyICovCisJQkZBX1NUQVRVU19JTV9WTEFOSURfSVNfUFZJRCA9IDEwMCwgLyogIEdpdmVuIFZMQU4gaWQgc2FtZSBhcyBQVklEICovCisJQkZBX1NUQVRVU19JTV9WTEFOSURfRVhJU1RTID0gMTAxLCAvKiAgR2l2ZW4gVkxBTiBpZCBhbHJlYWR5IGV4aXN0cyAqLworCUJGQV9TVEFUVVNfSU1fRldfVVBEQVRFX0ZBSUwgPSAxMDIsIC8qICBVcGRhdGluZyBmaXJtd2FyZSB3aXRoIG5ldworCQkJCQkgICAgICogVkxBTiBJRCBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRMT0dfRU5BQkxFRCA9IDEwMywgLyogIFBvcnQgTG9nIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfUE9SVExPR19ESVNBQkxFRCA9IDEwNCwgLyogIFBvcnQgTG9nIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0ZJTEVfTk9UX0ZPVU5EID0gMTA1LCAvKiAgU3BlY2lmaWVkIGZpbGUgY291bGQgbm90IGJlCisJCQkJCSAgKiBmb3VuZCAqLworCUJGQV9TVEFUVVNfUU9TX0ZDX09OTFkgPSAxMDYsIC8qICBRT1MgY2FuIGJlIGVuYWJsZWQgZm9yIEZDIG1vZGUKKwkJCQkgICAgICAgKiBvbmx5ICovCisJQkZBX1NUQVRVU19STElNX0ZDX09OTFkgPSAxMDcsIC8qICBSQVRFTElNIGNhbiBiZSBlbmFibGVkIGZvciBGQyBtb2RlCisJCQkJCSogb25seSAqLworCUJGQV9TVEFUVVNfQ1RfU1BEID0gMTA4LCAvKiAgSW52YWxpZCBzcGVlZCBzZWxlY3Rpb24gZm9yIENhdGFwdWx0LiAqLworCUJGQV9TVEFUVVNfTEVEVEVTVF9PUCA9IDEwOSwgLyogIExFRCB0ZXN0IGlzIG9wZXJhdGluZyAqLworCUJGQV9TVEFUVVNfQ0VFX05PVF9ETiA9IDExMCwgLyogIGV0aCBwb3J0IGlzIG5vdCBhdCBkb3duIHN0YXRlLCBwbGVhc2UKKwkJCQkgICAgICAqIGJyaW5nIGRvd24gZmlyc3QgKi8KKwlCRkFfU1RBVFVTXzEwR19TUEQgPSAxMTEsIC8qICBTcGVlZCBzZXR0aW5nIG5vdCB2YWxpZCBmb3IgMTBHIEhCQSAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1RFQU1fTkFNRSA9IDExMiwgLyogIEludmFsaWQgdGVhbSBuYW1lICovCisJQkZBX1NUQVRVU19JTV9EVVBfVEVBTV9OQU1FID0gMTEzLCAvKiAgR2l2ZW4gdGVhbSBuYW1lIGFscmVhZHkKKwkJCQkJICAgICogZXhpc3RzICovCisJQkZBX1NUQVRVU19JTV9BREFQVF9BTFJFQURZX0lOX1RFQU0gPSAxMTQsIC8qICBHaXZlbiBhZGFwdGVyIGlzIHBhcnQKKwkJCQkJCSAgICAqIG9mIGFub3RoZXIgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fQURBUFRfSEFTX1ZMQU5TID0gMTE1LCAvKiAgQWRhcHRlciBoYXMgVkxBTnMgY29uZmlndXJlZC4KKwkJCQkJICAgICAgKiBEZWxldGUgYWxsIFZMQU5zIGJlZm9yZQorCQkJCQkgICAgICAqIGNyZWF0aW5nIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfTUlTTUFUQ0ggPSAxMTYsIC8qICBNaXNtYXRjaGluZyBQVklEcyBjb25maWd1cmVkCisJCQkJCSAgICAqIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fTElOS19TUEVFRF9NSVNNQVRDSCA9IDExNywgLyogIE1pc21hdGNoaW5nIGxpbmsgc3BlZWRzCisJCQkJCQkgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX01UVV9NSVNNQVRDSCA9IDExOCwgLyogIE1pc21hdGNoaW5nIE1UVXMgY29uZmlndXJlZCBmb3IKKwkJCQkJICAgKiBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fUlNTX01JU01BVENIID0gMTE5LCAvKiAgTWlzbWF0Y2hpbmcgUlNTIHBhcmFtZXRlcnMKKwkJCQkJICAgKiBjb25maWd1cmVkIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fSERTX01JU01BVENIID0gMTIwLCAvKiAgTWlzbWF0Y2hpbmcgSERTIHBhcmFtZXRlcnMKKwkJCQkJICAgKiBjb25maWd1cmVkIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fT0ZGTE9BRF9NSVNNQVRDSCA9IDEyMSwgLyogIE1pc21hdGNoaW5nIG9mZmxvYWQKKwkJCQkJICAgICAgICogcGFyYW1ldGVycyBjb25maWd1cmVkIGZvcgorCQkJCQkgICAgICAgKiBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fUE9SVF9QQVJBTVMgPSAxMjIsIC8qICBFcnJvciBzZXR0aW5nIHBvcnQgcGFyYW1ldGVycyAqLworCUJGQV9TVEFUVVNfSU1fUE9SVF9OT1RfSU5fVEVBTSA9IDEyMywgLyogIFBvcnQgaXMgbm90IHBhcnQgb2YgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fQ0FOTk9UX1JFTV9QUkkgPSAxMjQsIC8qICBQcmltYXJ5IGFkYXB0ZXIgY2Fubm90IGJlCisJCQkJCSAgICAgKiByZW1vdmVkLiBDaGFuZ2UgcHJpbWFyeSBiZWZvcmUKKwkJCQkJICAgICAqIHJlbW92aW5nICovCisJQkZBX1NUQVRVU19JTV9NQVhfUE9SVFNfUkVBQ0hFRCA9IDEyNSwgLyogIEV4Y2VlZGluZyBtYXhpbXVtIHBvcnRzCisJCQkJCQkqIHBlciB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9MQVNUX1BPUlRfREVMRVRFID0gMTI2LCAvKiAgTGFzdCBwb3J0IGluIHRlYW0gYmVpbmcKKwkJCQkJICAgICAgICogZGVsZXRlZCAqLworCUJGQV9TVEFUVVNfSU1fTk9fRFJJVkVSID0gMTI3LCAvKiAgSU0gZHJpdmVyIGlzIG5vdCBpbnN0YWxsZWQgKi8KKwlCRkFfU1RBVFVTX0lNX01BWF9WTEFOU19SRUFDSEVEID0gMTI4LCAvKiAgRXhjZWVkaW5nIG1heGltdW0gVkxBTnMKKwkJCQkJCSogcGVyIHBvcnQgKi8KKwlCRkFfU1RBVFVTX1RPTUNBVF9TUERfTk9UX0FMTE9XRUQgPSAxMjksIC8qIEJpb3Mgc3BlZWQgY29uZmlnIG5vdAorCQkJCQkJICAqIGFsbG93ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfTk9fTUlOUE9SVF9EUklWRVIgPSAxMzAsIC8qICBNaW5pcG9ydCBkcml2ZXIgaXMgbm90CisJCQkJCSAgICAgKiBsb2FkZWQgKi8KKwlCRkFfU1RBVFVTX0NBUkRfVFlQRV9NSVNNQVRDSCA9IDEzMSwgLyogIENhcmQgdHlwZSBtaXNtYXRjaCAqLworCUJGQV9TVEFUVVNfQkFEX0FTSUNCTEsgPSAxMzIsIC8qICBCYWQgQVNJQyBibG9jayAqLworCUJGQV9TVEFUVVNfTk9fRFJJVkVSID0gMTMzLCAvKiAgU3RvcmFnZS9FdGhlcm5ldCBkcml2ZXIgbm90IGxvYWRlZCAqLworCUJGQV9TVEFUVVNfSU5WQUxJRF9NQUMgPSAxMzQsIC8qICBJbnZhbGlkIG1hYyBhZGRyZXNzICovCisJQkZBX1NUQVRVU19JTV9OT19WTEFOID0gMTM1LCAvKiAgTm8gVkxBTnMgY29uZmlndXJlZCBvbiB0aGUgYWRhcHRlciAqLworCUJGQV9TVEFUVVNfSU1fRVRIX0xCX0ZBSUxFRCA9IDEzNiwgLyogIEV0aGVybmV0IGxvb3BiYWNrIHRlc3QgZmFpbGVkICovCisJQkZBX1NUQVRVU19JTV9QVklEX1JFTU9WRSA9IDEzNywgLyogIENhbm5vdCByZW1vdmUgcG9ydCB2bGFuIChQVklEKSAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9FRElUID0gMTM4LCAvKiAgQ2Fubm90IGVkaXQgcG9ydCB2bGFuIChQVklEKSAqLworCUJGQV9TVEFUVVNfQ05BX05PX0JPT1QgPSAxMzksIC8qICBCb290IHVwbG9hZCBub3QgYWxsb3dlZCBmb3IgQ05BICovCisJQkZBX1NUQVRVU19JTV9QVklEX05PTl9aRVJPID0gMTQwLCAvKiAgUG9ydCBWTEFOIElEIChQVklEKSBpcyBTZXQgdG8KKwkJCQkJICAgICogTm9uLVplcm8gVmFsdWUgKi8KKwlCRkFfU1RBVFVTX0lNX0lORVRDRkdfTE9DS19GQUlMRUQgPSAxNDEsIC8qICBBY3F1aXJpbmcgTmV0d29yaworCQkJCQkJICAqIFN1YnN5dGVtIExvY2sgRmFpbGVkLlBsZWFzZQorCQkJCQkJICAqIHRyeSBhZnRlciBzb21lIHRpbWUgKi8KKwlCRkFfU1RBVFVTX0lNX0dFVF9JTkVUQ0ZHX0ZBSUxFRCA9IDE0MiwgLyogIEFjcXVpcmluZyBOZXR3b3JrIFN1YnN5dGVtCisJCQkJCQkgKiBoYW5kbGUgRmFpbGVkLiBQbGVhc2UgdHJ5CisJCQkJCQkgKiBhZnRlciBzb21lIHRpbWUgKi8KKwlCRkFfU1RBVFVTX0lNX05PVF9CT1VORCA9IDE0MywgLyogIEJyb2NhZGUgMTBHIEV0aGVybmV0IFNlcnZpY2UgaXMgbm90CisJCQkJCSogRW5hYmxlZCBvbiB0aGlzIHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOU1VGRklDSUVOVF9QRVJNUyA9IDE0NCwgLyogIFVzZXIgZG9lc24ndCBoYXZlIHN1ZmZpY2llbnQKKwkJCQkJICAgICAgKiBwZXJtaXNzaW9ucyB0byBleGVjdXRlIHRoZSBCQ1UKKwkJCQkJICAgICAgKiBhcHBsaWNhdGlvbiAqLworCUJGQV9TVEFUVVNfSU1fSU5WX1ZMQU5fTkFNRSA9IDE0NSwgLyogIEludmFsaWQvUmVzZXJ2ZWQgVmxhbiBuYW1lCisJCQkJCSAgICAqIHN0cmluZy4gVGhlIG5hbWUgaXMgbm90IGFsbG93ZWQKKwkJCQkJICAgICogZm9yIHRoZSBub3JtYWwgVmxhbnMgKi8KKwlCRkFfU1RBVFVTX0NNRF9OT1RTVVBQX0NOQSA9IDE0NiwgLyogIENvbW1hbmQgbm90IHN1cHBvcnRlZCBmb3IgQ05BICovCisJQkZBX1NUQVRVU19JTV9QQVNTVEhSVV9FRElUID0gMTQ3LCAvKiAgQ2FuIG5vdCBlZGl0IHBhc3N0aHJ1IHZsYW4gaWQgKi8KKwlCRkFfU1RBVFVTX0lNX0JJTkRfRkFJTEVEID0gMTQ4LCAvKiEgPCBJTSBEcml2ZXIgYmluZCBvcGVyYXRpb24KKwkJCQkJICAqIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfSU1fVU5CSU5EX0ZBSUxFRCA9IDE0OSwgLyogISA8IElNIERyaXZlciB1bmJpbmQgb3BlcmF0aW9uCisJCQkJCSAgICAqIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfTUFYX1ZBTAkJLyogIFVua25vd24gZXJyb3IgY29kZSAqLworfTsKKyNkZWZpbmUgYmZhX3N0YXR1c190IGVudW0gYmZhX3N0YXR1cworCitlbnVtIGJmYV9lcHJvdG9fc3RhdHVzIHsKKwlCRkFfRVBST1RPX0JBRF9BQ0NFUFQgPSAwLAorCUJGQV9FUFJPVE9fVU5LTk9XTl9SU1AgPSAxCit9OworI2RlZmluZSBiZmFfZXByb3RvX3N0YXR1c190IGVudW0gYmZhX2Vwcm90b19zdGF0dXMKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfU1RBVFVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVhMmRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1RJTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19USU5fSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisKKy8qKgorICogRkNTIHRpbiBzdGF0ZXMKKyAqLworZW51bSBiZmFfdGluX3N0YXRlX2UgeworCUJGQV9USU5fU01fT0ZGTElORSA9IDAsCQkvKiAgdGluIGlzIG9mZmxpbmUgKi8KKwlCRkFfVElOX1NNX1dPU19MT0dJTiA9IDEsCS8qICBXYWl0aW5nIFBSTEkgQUNDL1JKVCBmcm9tIFVMUCAqLworCUJGQV9USU5fU01fV0ZXX09OTElORSA9IDIsCS8qICBXYWl0aW5nIEFDSyB0byBQUkxJIEFDQyBmcm9tIEZXICovCisJQkZBX1RJTl9TTV9PTkxJTkUgPSAzLAkJLyogIHRpbiBsb2dpbiBpcyBjb21wbGV0ZSAqLworCUJGQV9USU5fU01fV0lPX1JFTE9HSU4gPSA0LAkvKiAgdGluIHJlbG9naW4gaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVElOX1NNX1dJT19MT0dPVVQgPSA1LAkvKiAgUHJvY2Vzc2luZyBvZiBQUkxPIHJlcSBmcm9tCisJCQkJCSAqICAgSW5pdGlhdG9yIGlzIGluIHByb2dyZXNzCisJCQkJCSAqLworCUJGQV9USU5fU01fV09TX0xPR09VVCA9IDYsCS8qICBQcm9jZXNzaW5nIG9mIFBSTE8gcmVxIGZyb20KKwkJCQkJICogICBJbml0aWF0b3IgaXMgaW4gcHJvZ3Jlc3MKKwkJCQkJICovCisJQkZBX1RJTl9TTV9XSU9fQ0xFQU4gPSA3LAkvKiAgV2FpdGluZyBmb3IgSU8gY2xlYW51cCBiZWZvcmUgdGluCisJCQkJCSAqICAgaXMgb2ZmbGluZS4gVGhpcyBjYW4gYmUgdHJpZ2dlcmVkCisJCQkJCSAqICAgYnkgUlBPUlQgTE9HTyAocmN2ZC9zZW50KSBvciBieQorCQkJCQkgKiAgIFBSTE8gKHJjdmQvc2VudCkKKwkJCQkJICovCit9OworCitzdHJ1Y3QgYmZhX3BybGlfcmVxX3MgeworCXN0cnVjdCBmY2hzX3MgZmNoczsKKwlzdHJ1Y3QgZmNfcHJsaV9zIHBybGlfcGF5bG9hZDsKK307CisKK3N0cnVjdCBiZmFfcHJsb19yZXFfcyB7CisJc3RydWN0IGZjaHNfcyBmY2hzOworCXN0cnVjdCBmY19wcmxvX3MgcHJsb19wYXlsb2FkOworfTsKKwordm9pZCBiZmFfdGluX3NlbmRfbG9naW5fcnNwKHZvaWQgKmJmYV90aW4sIHUzMiBsb2dpbl9yc3AsCisJCQkJc3RydWN0IGZjX2xzX3JqdF9zIHJqdF9wYXlsb2FkKTsKK3ZvaWQgYmZhX3Rpbl9zZW5kX2xvZ291dF9yc3Aodm9pZCAqYmZhX3RpbiwgdTMyIGxvZ291dF9yc3AsCisJCQkJc3RydWN0IGZjX2xzX3JqdF9zIHJqdF9wYXlsb2FkKTsKKy8qKgorICogRkNTIHRhcmdldCBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV90aW5fc3RhdHNfcyB7CisJdTMyIG9ubGluZXM7CS8qICBJVE4gbmV4dXMgb25saW5lcyAoUFJMSSBkb25lKSAqLworCXUzMiBvZmZsaW5lczsJLyogIElUTiBOZXh1cyBvZmZsaW5lcyAJKi8KKwl1MzIgcHJsaV9yZXFfcGFyc2VfZXJyOwkvKiAgcHJsaSByZXEgcGFyc2luZyBlcnJvcnMgKi8KKwl1MzIgcHJsaV9yc3Bfcmp0OwkvKiAgbnVtIHBybGkgcnNwIHJlamVjdHMgc2VudCAqLworCXUzMiBwcmxpX3JzcF9hY2M7CS8qICBudW0gcHJsaSByc3AgYWNjZXB0cyBzZW50ICovCisJdTMyIGNsZWFudXBfY29tcHM7CS8qICBJVE4gY2xlYW51cCBjb21wbGV0aW9ucyAqLworfTsKKworLyoqCisgKiBGQ1MgdGluIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3Rpbl9hdHRyX3MgeworCWVudW0gYmZhX3Rpbl9zdGF0ZV9lIHN0YXRlOworCXU4CXNlcV9yZXRyeTsgICAgLyogIFNlcXVlbmNlIHJldHJ5IHN1cHBvcnRlZCAgICAgICovCisJdTgJcnN2ZFszXTsKK307CisKKy8qKgorICogQkZBIFRJTiBhc3luYyBldmVudCBkYXRhIHN0cnVjdHVyZSBmb3IgQkZBTAorICovCitlbnVtIGJmYV90aW5fYWVuX2V2ZW50IHsKKwlCRkFfVElOX0FFTl9PTkxJTkUgCT0gMSwJLyogIFRhcmdldCBvbmxpbmUgKi8KKwlCRkFfVElOX0FFTl9PRkZMSU5FIAk9IDIsCS8qICBUYXJnZXQgb2ZmbGluZSAqLworCUJGQV9USU5fQUVOX0RJU0NPTk5FQ1QJPSAzLAkvKiAgVGFyZ2V0IGRpc2Nvbm5lY3RlZCAqLworfTsKKworLyoqCisgKiBCRkEgVElOIGV2ZW50IGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgYmZhX3Rpbl9hZW5fZGF0YV9zIHsKKwl1MTYgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGUgSVQgbmV4dXMgKi8KKwl1MTYgcnN2ZFszXTsKKwl3d25fdCBscHd3bjsJLyogIFdXTiBvZiBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCBycHd3bjsJLyogIFdXTiBvZiByZW1vdGUodGFyZ2V0KSBwb3J0ICovCit9OworCisvKioKKyAqIEJlbG93IEFQSXMgYXJlIG5lZWRlZCBmcm9tIEJGQSBkcml2ZXIKKyAqIE1vdmUgdGhlc2UgdG8gQkZBIGRyaXZlciBwdWJsaWMgaGVhZGVyIGZpbGU/CisgKi8KKy8qICBUSU4gcmN2ZCBuZXcgUFJMSSAmIGdldHMgYmZhZF90aW5fdCBwdHIgZnJvbSBkcml2ZXIgdGhpcyBjYWxsYmFjayAqLwordm9pZCAqYmZhZF90aW5fcmN2ZF9sb2dpbl9yZXEodm9pZCAqYmZhZF90bV9wb3J0LCB2b2lkICpiZmFfdGluLAorCQkJCXd3bl90IHJwX3d3biwgdTMyIHJwX2ZjaWQsCisJCQkJc3RydWN0IGJmYV9wcmxpX3JlcV9zIHBybGlfcmVxKTsKKy8qICBUSU4gcmN2ZCBuZXcgUFJMTyAqLwordm9pZCBiZmFkX3Rpbl9yY3ZkX2xvZ291dF9yZXEodm9pZCAqYmZhZF90aW4sIHd3bl90IHJwX3d3biwgdTMyIHJwX2ZjaWQsCisJCQkJc3RydWN0IGJmYV9wcmxvX3JlcV9zIHBybG9fcmVxKTsKKy8qICBUSU4gaXMgb25saW5lIGFuZCByZWFkeSBmb3IgSU8gKi8KK3ZvaWQgYmZhZF90aW5fb25saW5lKHZvaWQgKmJmYWRfdGluKTsKKy8qICBUSU4gaXMgb2ZmbGluZSBhbmQgQkZBIGRyaXZlciBjYW4gc2h1dGRvd24gaXRzIHVwcGVyIHN0YWNrICovCit2b2lkIGJmYWRfdGluX29mZmxpbmUodm9pZCAqYmZhZF90aW4pOworLyogIFRJTiBkb2VzIG5vdCBuZWVkIHRoaXMgQkZBIGRyaXZlciB0aW4gdGFnIGFueW1vcmUsIHNvIGNhbiBiZSBmcmVlZCAqLwordm9pZCBiZmFkX3Rpbl9yZXNfZnJlZSh2b2lkICpiZmFkX3Rpbik7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RJTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTg4MWQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHNlbnNvci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVFNFTlNPUl9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKy8qKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIHN0YXR1cyB2YWx1ZXMKKyAqLworZW51bSBiZmFfdHNlbnNvcl9zdGF0dXMgeworCUJGQV9UU0VOU09SX1NUQVRVU19VTktOT1dOICAgPSAxLCAgIC8qICB1bmtvd24gc3RhdHVzICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0ZBVUxUWSAgICA9IDIsICAgLyogIHNlbnNvciBpcyBmYXVsdHkgKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfQkVMT1dfTUlOID0gMywgICAvKiAgdGVtcGVyYXR1cmUgYmVsb3cgbWluaW51bSAqLworCUJGQV9UU0VOU09SX1NUQVRVU19OT01JTkFMICAgPSA0LCAgIC8qICBub3JtYWwgdGVtcGVyYXR1cmUgKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfQUJPVkVfTUFYID0gNSwgICAvKiAgdGVtcGVyYXR1cmUgYWJvdmUgbWF4aW11bSAqLworfTsKKworLyoqCisgKiBUZW1wZXJhdHVyZSBzZW5zb3IgYXR0cmlidXRlCisgKi8KK3N0cnVjdCBiZmFfdHNlbnNvcl9hdHRyX3MgeworCWVudW0gYmZhX3RzZW5zb3Jfc3RhdHVzIHN0YXR1czsJLyogIHRlbXBlcmF0dXJlIHNlbnNvciBzdGF0dXMgKi8KKwl1MzIgICAgICAgIAl2YWx1ZTsJLyogIGN1cnJlbnQgdGVtcGVyYXR1cmUgaW4gY2Vsc2l1cyAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVFNFTlNPUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3R5cGVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDgzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19UWVBFU19IX18KKyNkZWZpbmUgX19CRkFfREVGU19UWVBFU19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworZW51bSBiZmFfYm9vbGVhbiB7CisJQkZBX0ZBTFNFID0gMCwKKwlCRkFfVFJVRSAgPSAxCit9OworI2RlZmluZSBiZmFfYm9vbGVhbl90IGVudW0gYmZhX2Jvb2xlYW4KKworI2RlZmluZSBCRkFfU1RSSU5HXzMyCTMyCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTAyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192ZXJzaW9uLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX1ZFUlNJT05fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVkVSU0lPTl9IX18KKworI2RlZmluZSBCRkFfVkVSU0lPTl9MRU4JCTY0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzNWJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVkZfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVkZfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBWRiBzdGF0ZXMKKyAqLworZW51bSBiZmFfdmZfc3RhdGUgeworCUJGQV9WRl9VTklOSVQgICAgPSAwLAkvKiAgZmFicmljIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfVkZfTElOS19ET1dOID0gMSwJLyogIGxpbmsgaXMgZG93biAqLworCUJGQV9WRl9GTE9HSSAgICAgPSAyLAkvKiAgZmxvZ2kgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVkZfQVVUSCAgICAgID0gMywJLyogIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzICovCisJQkZBX1ZGX05PRkFCUklDICA9IDQsCS8qICBmYWJyaWMgaXMgbm90IHByZXNlbnQgKi8KKwlCRkFfVkZfT05MSU5FICAgID0gNSwJLyogIGxvZ2luIHRvIGZhYnJpYyBpcyBjb21wbGV0ZSAqLworCUJGQV9WRl9FVkZQICAgICAgPSA2LAkvKiAgRVZGUCBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9WRl9JU09MQVRFRCAgPSA3LAkvKiAgcG9ydCBpc29sYXRlZCBkdWUgdG8gdmZfaWQgbWlzbWF0Y2ggKi8KK307CisKKy8qKgorICogVkYgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MgeworCXUzMiAgICAgICAgZmxvZ2lfc2VudDsJLyogIE51bSBGTE9HSXMgc2VudCAJCSovCisJdTMyICAgICAgICBmbG9naV9yc3BfZXJyOwkvKiAgRkxPR0kgcmVzcG9uc2UgZXJyb3JzIAkqLworCXUzMiAgICAgICAgZmxvZ2lfYWNjX2VycjsJLyogIEZMT0dJIGFjY2VwdCBlcnJvcnMgCSovCisJdTMyICAgICAgICBmbG9naV9hY2NlcHRzOwkvKiAgRkxPR0kgYWNjZXB0cyByZWNlaXZlZCAJKi8KKwl1MzIgICAgICAgIGZsb2dpX3JlamVjdHM7CS8qICBGTE9HSSByZWplY3RzIHJlY2VpdmVkIAkqLworCXUzMiAgICAgICAgZmxvZ2lfdW5rbm93bl9yc3A7IC8qICBVbmtub3duIHJlc3BvbnNlcyBmb3IgRkxPR0kgKi8KKwl1MzIgICAgICAgIGZsb2dpX2FsbG9jX3dhaXQ7IC8qICBBbGxvY2F0aW9uIHdhaXRzIHByaW9yIHRvCisJCQkJCSAgICogc2VuZGluZyBGTE9HSQorCQkJCQkgICAqLworCXUzMiAgICAgICAgZmxvZ2lfcmN2ZDsJLyogIEZMT0dJcyByZWNlaXZlZCAqLworCXUzMiAgICAgICAgZmxvZ2lfcmVqZWN0ZWQ7CS8qICBJbmNvbWluZyBGTE9HSXMgcmVqZWN0ZWQgKi8KKwl1MzIgICAgICAgIGZhYnJpY19vbmxpbmVzOwkvKiAgSW50ZXJuYWwgZmFicmljIG9ubGluZQorCQkJCQkgKiBub3RpZmljYXRpb24gc2VudCB0byBvdGhlcgorCQkJCQkgKiBtb2R1bGVzCisJCQkJCSAqLworCXUzMiAgICAgICAgZmFicmljX29mZmxpbmVzOyAvKiAgSW50ZXJuYWwgZmFicmljIG9mZmxpbmUKKwkJCQkJICAqIG5vdGlmaWNhdGlvbiBzZW50IHRvIG90aGVyCisJCQkJCSAgKiBtb2R1bGVzCisJCQkJCSAgKi8KKwl1MzIgICAgICAgIHJlc3ZkOworfTsKKworLyoqCisgKiBWRiBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV92Zl9hdHRyX3MgeworCWVudW0gYmZhX3ZmX3N0YXRlICBzdGF0ZTsJCS8qICBWRiBzdGF0ZSAqLworCXUzMiAgICAgICAgcnN2ZDsKKwl3d25fdCAgICAgICAgICAgZmFicmljX25hbWU7CS8qICBmYWJyaWMgbmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjAyMWY0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBWUE9SVCBzdGF0ZXMKKyAqLworZW51bSBiZmFfdnBvcnRfc3RhdGUgeworCUJGQV9GQ1NfVlBPUlRfVU5JTklUIAkJPSAwLAorCUJGQV9GQ1NfVlBPUlRfQ1JFQVRFRCAJCT0gMSwKKwlCRkFfRkNTX1ZQT1JUX09GRkxJTkUgCQk9IDEsCisJQkZBX0ZDU19WUE9SVF9GRElTQ19TRU5EIAk9IDIsCisJQkZBX0ZDU19WUE9SVF9GRElTQyAJCT0gMywKKwlCRkFfRkNTX1ZQT1JUX0ZESVNDX1JFVFJZIAk9IDQsCisJQkZBX0ZDU19WUE9SVF9PTkxJTkUgCQk9IDUsCisJQkZBX0ZDU19WUE9SVF9ERUxFVElORyAJCT0gNiwKKwlCRkFfRkNTX1ZQT1JUX0NMRUFOVVAgCQk9IDYsCisJQkZBX0ZDU19WUE9SVF9MT0dPX1NFTkQgCT0gNywKKwlCRkFfRkNTX1ZQT1JUX0xPR08gCQkJPSA4LAorCUJGQV9GQ1NfVlBPUlRfRVJST1IJCQk9IDksCisJQkZBX0ZDU19WUE9SVF9NQVhfU1RBVEUsCit9OworCisvKioKKyAqIHZwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBwb3J0X3N0YXRzOwkvKiAgYmFzZSBjbGFzcyAocG9ydCkgc3RhdHMgKi8KKwkvKgorCSAqIFRPRE8gLSByZW1vdmUKKwkgKi8KKworCXUzMiAgICAgICAgZmRpc2Nfc2VudDsJLyogIG51bSBmZGlzYyBzZW50ICovCisJdTMyICAgICAgICBmZGlzY19hY2NlcHRzOwkvKiAgZmRpc2MgYWNjZXB0cyAqLworCXUzMiAgICAgICAgZmRpc2NfcmV0cmllczsJLyogIGZkaXNjIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3RpbWVvdXRzOwkvKiAgZmRpc2MgdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3JzcF9lcnI7CS8qICBmZGlzYyByZXNwb25zZSBlcnJvciAqLworCXUzMiAgICAgICAgZmRpc2NfYWNjX2JhZDsJLyogIGJhZCBmZGlzYyBhY2NlcHRzICovCisJdTMyICAgICAgICBmZGlzY19yZWplY3RzOwkvKiAgZmRpc2MgcmVqZWN0cyAqLworCXUzMiAgICAgICAgZmRpc2NfdW5rbm93bl9yc3A7CisJLyoKKwkgKiE8IGZkaXNjIHJzcCB1bmtub3duIGVycm9yCisJICovCisJdTMyICAgICAgICBmZGlzY19hbGxvY193YWl0Oy8qICBmZGlzYyByZXEgKGZjeHApYWxsb2Mgd2FpdCAqLworCisJdTMyICAgICAgICBsb2dvX2FsbG9jX3dhaXQ7LyogIGxvZ28gcmVxIChmY3hwKSBhbGxvYyB3YWl0ICovCisJdTMyICAgICAgICBsb2dvX3NlbnQ7CS8qICBsb2dvIHNlbnQgKi8KKwl1MzIgICAgICAgIGxvZ29fYWNjZXB0czsJLyogIGxvZ28gYWNjZXB0cyAqLworCXUzMiAgICAgICAgbG9nb19yZWplY3RzOwkvKiAgbG9nbyByZWplY3RzICovCisJdTMyICAgICAgICBsb2dvX3JzcF9lcnI7CS8qICBsb2dvIHJzcCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGxvZ29fdW5rbm93bl9yc3A7CisJCQkvKiAgbG9nbyByc3AgdW5rbm93biBlcnJvcnMgKi8KKworCXUzMiAgICAgICAgZmFiX25vX25waXY7CS8qICBmYWJyaWMgZG9lcyBub3Qgc3VwcG9ydCBucGl2ICovCisKKwl1MzIgICAgICAgIGZhYl9vZmZsaW5lOwkvKiAgb2ZmbGluZSBldmVudHMgZnJvbSBmYWIgU00gKi8KKwl1MzIgICAgICAgIGZhYl9vbmxpbmU7CS8qICBvbmxpbmUgZXZlbnRzIGZyb20gZmFiIFNNICovCisJdTMyICAgICAgICBmYWJfY2xlYW51cDsJLyogIGNsZWFudXAgcmVxdWVzdCBmcm9tIGZhYiBTTSAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogQkZBIHZwb3J0IGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdnBvcnRfYXR0cl9zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zICAgcG9ydF9hdHRyOyAvKiAgYmFzZSBjbGFzcyAocG9ydCkgYXR0cmlidXRlcyAqLworCWVudW0gYmZhX3Zwb3J0X3N0YXRlIHZwb3J0X3N0YXRlOyAvKiAgdnBvcnQgc3RhdGUgKi8KKwl1MzIgICAgICAgICAgcnN2ZDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTYzYjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiLmggQkZBIEZDUyBjYWxsYmFjayBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9IX18KKworLyoqCisgKiAgZmNiIE1haW4gZmNzIGNhbGxiYWNrcworICovCisKK3ZvaWQgYmZhX2ZjYl9leGl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNzBhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisqIDogYmZhZF9mY3BpbS5oIC0gQkZBIEZDUyBpbml0aWF0b3IgbW9kZSByZW1vdGUgcG9ydCBjYWxsYmFja3MKKyAqLworCisjaWZuZGVmIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisKK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKKy8qCisgKiBSUElNIGNhbGxiYWNrcworICovCisKKy8qKgorICogCU1lbW9yeSBhbGxvY2F0aW9uIGZvciByZW1vdGUgcG9ydCBpbnN0YW5jZS4gQ2FsbGVkIGJlZm9yZSBQUkxJIGlzCisgKiAJaW5pdGlhdGVkIHRvIHRoZSByZW1vdGUgdGFyZ2V0IHBvcnQuCisgKgorICogQHBhcmFtW2luXSBiZmFkCQktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW291dF0gaXRuaW0JCS0gRkNTIHJlbW90ZSBwb3J0IChJTSkgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9pdG5pbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoqaXRuaW0sCisJCQkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpOworCisvKioKKyAqIAkJRnJlZSByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZAktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCSAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiBvZiB3aGVuIGxvZ2luIHdpdGggYSByZW1vdGUgdGFyZ2V0IGRldmljZSBpcyBjb21wbGV0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV9vbmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIHdoZW4gbG9naW4gd2l0aCB0aGUgcmVtb3RlIGRldmljZSBpcyBzZXZlcmVkLgorICoKKyAqIEBwYXJhbVtpbl0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fdG92X2JlZ2luKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV90b3Yoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworI2VuZGlmIC8qIF9fQkZBRF9GQ0JfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQ3Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3BvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9QT1JUX0hfXworCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKy8qKgorICogIGZjc19wb3J0X2ZjYiBGQ1MgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9wb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNhbGwgZnJvbSBGQ1MgdG8gZHJpdmVyIG1vZHVsZSB3aGVuIGEgcG9ydCBpcyBpbnN0YW50aWF0ZWQuIFRoZSBwb3J0CisgKiAJY2FuIGJlIGEgYmFzZSBwb3J0IG9yIGEgdmlydHVhbCBwb3J0IHdpdGggaW4gdGhlIGJhc2UgZmFicmljIG9yCisgKiAJYSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAgT24gdGhpcyBjYWxsYmFjaywgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGNyZWF0ZSBzY3NpX2hvc3QsIHNjc2lfdGd0IG9yCisgKiAgbmV0d29yayBpbnRlcmZhY2VzIGJhc2VzIG9uIHBvcnRzIHBlcnNvbmFsaXR5L3JvbGVzLgorICoKKyAqICAgICAgYmFzZSBwb3J0IG9mIGJhc2UgZmFicmljOgl2Zl9kcnYgPT0gTlVMTCAmJiB2cF9kcnYgPT0gTlVMTAorICogICAgICB2cG9ydCBvZiBiYXNlIGZhYnJpYzoJCXZmX2RydiA9PSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKiAgICAgIGJhc2UgcG9ydCBvZiBWRjoJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiA9PSBOVUxMCisgKiAgICAgIHZwb3J0IG9mIFZGOgkJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcG9ydCAgIC0gRkNTIHBvcnQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFkX3BvcnRfcyAqYmZhX2ZjYl9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCQlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlDYWxsIGZyb20gRkNTIHRvIGRyaXZlciBtb2R1bGUgd2hlbiBhIHBvcnQgaXMgZGVsZXRlZC4gVGhlIHBvcnQKKyAqIAljYW4gYmUgYSBiYXNlIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQgd2l0aCBpbiB0aGUgYmFzZSBmYWJyaWMgb3IKKyAqIAlhIHZpcnR1YWwgZmFicmljLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gd2hlbiBwb3J0IHRyYW5zaXRpb25zIHRvIE9OTElORSBzdGF0ZS4KKyAqCisgKiBPbmxpbmUgbm90aWZpY2F0aW9uIGlzIGEgbG9naWNhbCBsaW5rIHVwIGZvciB0aGUgbG9jYWwgcG9ydC4gVGhpcworICogbm90aWZpY2F0aW9uIGlzIHNlbnQgYWZ0ZXIgYSBzdWNjZXNzZnVsbCBGTE9HSSwgb3IgYSBzdWNjZXNzZnVsCisgKiBsaW5rIGluaXRpYWxpemF0aW9uIGluIHByb3ZpYXRlLWxvb3Agb3IgTjJOIHRvcG9sb2dpZXMuCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiB3aGVuIHBvcnQgdHJhbnNpdGlvbnMgdG8gT0ZGTElORSBzdGF0ZS4KKyAqCisgKiBPZmZsaW5lIG5vdGlmaWNhdGlvbiBpcyBhIGxvZ2ljYWwgbGluayBkb3duIGZvciB0aGUgbG9jYWwgcG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI2MWJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3Jwb3J0LmggQkZBIEZDUyBycG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfUlBPUlRfSF9fCisKKy8qKgorICogIGZjc19ycG9ydF9mY2IgUmVtb3RlIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3Jwb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfcnBvcnRfYWRkKCkuCisgKgorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpOworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Jwb3J0X3JlbW92ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9ycG9ydF9yZW1vdmUoc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKKworLyoqCisgKiAJCUNhbGwgdG8gYWxsb2NhdGUgYSBycG9ydCBpbnN0YW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIHJwb3J0IC0gQkZBIEZDUyBpbnN0YW5jZSBvZiBycG9ydAorICogQHBhcmFtW291dF0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHZhbCBCRkFfU1RBVFVTX09LIC0gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZAorICogQHJldHZhbCBCRkFfU1RBVFVTX0VOT01FTSAtIGNhbm5vdCBhbGxvY2F0ZQorICovCitiZmFfc3RhdHVzX3QgYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKy8qKgorICogCUNhbGwgdG8gZnJlZSBycG9ydCBtZW1vcnkgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQzZmFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3ZmLmggQkZBIEZDUyB2aXJ0dWFsIGZhYnJpYyBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZGX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVkZfSF9fCisKKy8qKgorICogIGZjc192Zl9mY2IgVmlydHVhbCBmYWJyaWMgZHJpdmVyIGludHJlZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3ZmX3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfdmZfc3RvcCgpLgorICoKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZmCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3ZmX3N0b3Aoc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfVkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWY0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfdnBvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVlBPUlRfSF9fCisKKy8qKgorICogIGZjc192cG9ydF9mY2IgVmlydHVhbCBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworCitzdHJ1Y3QgYmZhZF92cG9ydF9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Zwb3J0X2RlbGV0ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gdnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9WUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NjY5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19IX18KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisKKyNkZWZpbmUgQkZBX0ZDU19PU19TVFJfTEVOICAJCTY0CisKK3N0cnVjdCBiZmFfZmNzX3N0YXRzX3MgeworCXN0cnVjdCB7CisJCXUzMiAgICAgICAgdW50YWdnZWQ7IC8qICB1bnRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHRhZ2dlZDsJLyogIHRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHZmaWRfdW5rbm93bjsJLyogIFZGIGlkIGlzIHVua25vd24gKi8KKwl9IHVmOworfTsKKworc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyB7CisJdTggIHZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsJCS8qICBEcml2ZXIgVmVyc2lvbiAqLworCXU4ICBob3N0X21hY2hpbmVfbmFtZVtCRkFfRkNTX09TX1NUUl9MRU5dOworCXU4ICBob3N0X29zX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIE9TIG5hbWUgYW5kIHZlcnNpb24gKi8KKwl1OCAgaG9zdF9vc19wYXRjaFtCRkFfRkNTX09TX1NUUl9MRU5dOy8qICBwYXRjaCBvciBzZXJ2aWNlIHBhY2sgKi8KKwl1OCAgb3NfZGV2aWNlX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIERyaXZlciBEZXZpY2UgTmFtZSAqLworfTsKKworc3RydWN0IGJmYV9mY3NfcyB7CisJc3RydWN0IGJmYV9zICAgICAgKmJmYTsJLyogIGNvcnJlc3BvbmRpbmcgQkZBIGJmYSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsgLyogIGNvcnJlc3BvbmRpbmcgQkRBIGRyaXZlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbTsJLyogIGRyaXZlciBsb2dnaW5nIG1vZHVsZSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOwkvKiAgdHJhY2luZyBtb2R1bGUgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zICAgICAgKmFlbjsJLyogIGFlbiBjb21wb25lbnQgKi8KKwliZmFfYm9vbGVhbl90ICAgdmZfZW5hYmxlZDsJLyogIFZGIG1vZGUgaXMgZW5hYmxlZCAqLworCWJmYV9ib29sZWFuX3QgbWluX2NmZzsJCS8qIG1pbiBjZmcgZW5hYmxlZC9kaXNhYmxlZCAqLworCXUxNiAgICAgICAgcG9ydF92ZmlkOwkvKiAgcG9ydCBkZWZhdWx0IFZGIElEICovCisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyBkcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyBmYWJyaWM7IC8qICBiYXNlIGZhYnJpYyBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3Nfc3RhdHNfcwlzdGF0czsJLyogIEZDUyBzdGF0aXN0aWNzICovCisJc3RydWN0IGJmYV93Y19zICAgICAgIAl3YzsJLyogIHdhaXRpbmcgY291bnRlciAqLworfTsKKworLyoKKyAqIGJmYSBmY3MgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKTsKK3ZvaWQgYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvKTsKK3ZvaWQgYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfdHJjX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKTsKK3ZvaWQgYmZhX2Zjc19sb2dfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCBiZmFfZmNzX2Flbl9pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKK3ZvaWQgCSAgCWJmYV9mY3Nfc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzRjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfQVVUSF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX0FVVEhfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYXV0aC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisKK3N0cnVjdCBiZmFfZmNzX2ZhYnJpY19zOworCisKKworc3RydWN0IGJmYV9mY3NfYXV0aF9zIHsKKwliZmFfc21fdAlzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwliZmFfYm9vbGVhbl90ICAgcG9saWN5OwkvKiAgYXV0aGVudGljYXRpb24gZW5hYmxlZC9kaXNhYmxlZCAqLworCWVudW0gYmZhX2F1dGhfc3RhdHVzIHN0YXR1czsJLyogIGF1dGhlbnRpY2F0aW9uIHN0YXR1cyAqLworCWVudW0gYXV0aF9yanRfY29kZXMgIHJqdF9jb2RlOwkvKiAgYXV0aCByZWplY3Qgc3RhdHVzICovCisJZW51bSBhdXRoX3JqdF9jb2RlX2V4cHMgIHJqdF9jb2RlX2V4cDsJLyogIGF1dGggcmVqZWN0IHJlYXNvbiAqLworCWVudW0gYmZhX2F1dGhfYWxnbyBhbGdvOwkvKiAgQXV0aGVudGljYXRpb24gYWxnb3JpdGhtICovCisJc3RydWN0IGJmYV9hdXRoX3N0YXRzX3Mgc3RhdHM7CS8qICBTdGF0aXN0aWNzICovCisJZW51bSBhdXRoX2RoX2dpZCAgIGdyb3VwOwkvKiAgREgoZGlmZmllLWhlbGxtYW4pIEdyb3VwICovCisJZW51bSBiZmFfYXV0aF9zZWNyZXRzb3VyY2Ugc291cmNlOwkvKiAgU2VjcmV0IHNvdXJjZSAqLworCWNoYXIgICAgICAgICAgICBzZWNyZXRbQkZBX0FVVEhfU0VDUkVUX1NUUklOR19MRU5dOworCQkJCS8qICBzZWNyZXQgc3RyaW5nICovCisJdTggICAgICAgICBzZWNyZXRfbGVuOworCQkJCS8qICBzZWNyZXQgc3RyaW5nIGxlbmd0aCAqLworCXU4ICAgICAgICAgbnJldHJpZXM7CisJCQkJLyogIG51bWJlciBvZiByZXRyaWVzICovCisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsvKiAgcG9pbnRlciB0byBmYWJyaWMgKi8KKwl1OCAgICAgICAgIHNlbnRjb2RlOwkvKiAgcG9pbnRlciB0byByZXNwb25zZSBkYXRhICovCisJdTggICAgICAgICpyZXNwb25zZTsJLyogIHBvaW50ZXIgdG8gcmVzcG9uc2UgZGF0YSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBkZWxheV90aW1lcjsgCS8qICBkZWxheSB0aW1lciAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkJLyogIHBvaW50ZXIgdG8gZmN4cCAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKy8qKgorICogYmZhIGZjcyBhdXRoZW50aWNhdGlvbiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBzdHJ1Y3QgYmZhX2F1dGhfYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3BvbGljeShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQliZmFfYm9vbGVhbl90IHBvbGljeSk7CitlbnVtIGJmYV9hdXRoX3N0YXR1cyBiZmFfZmNzX2F1dGhfZ2V0X3N0YXR1cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X2FsZ28oc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9hdXRoX2FsZ28gYWxnbyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2F1dGhfc3RhdHNfcyAqc3RhdHMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfZGhfZ3JvdXAoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwgaW50IGdyb3VwKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHN0cmluZyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBjaGFyICpzZWNyZXQpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfc2VjcmV0c3RyaW5nX2VuY3J5cHQoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJICAgICAgdTMyIHNlY3JldFtdLCB1MzIgbGVuKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHNvdXJjZShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBlbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSBzcmMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfcmVpbml0KHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQpOworCisjZW5kaWYgLyogX19CRkFfRkNTX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmZDIyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mYWJyaWMuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfYXV0aC5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbgorICovCitzdHJ1Y3QgYmZhZF92Zl9zOworCitlbnVtIGJmYV9mY3NfZmFicmljX3R5cGUgeworCUJGQV9GQ1NfRkFCUklDX1VOS05PV04gPSAwLAorCUJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEID0gMSwKKwlCRkFfRkNTX0ZBQlJJQ19QTE9PUCA9IDIsCisJQkZBX0ZDU19GQUJSSUNfTjJOID0gMywKK307CisKKworc3RydWN0IGJmYV9mY3NfZmFicmljX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QJIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CQkvKiAgRkNTIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICBicG9ydDsJLyogIGJhc2UgbG9naWNhbCBwb3J0ICovCisJZW51bSBiZmFfZmNzX2ZhYnJpY190eXBlIGZhYl90eXBlOyAvKiAgZmFicmljIHR5cGUgKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIG9wZXJfdHlwZTsJLyogIGN1cnJlbnQgbGluayB0b3BvbG9neSAqLworCXU4ICAgICAgICAgaXNfdmY7CQkvKiAgaXMgdmlydHVhbCBmYWJyaWM/ICovCisJdTggICAgICAgICBpc19ucGl2OwkvKiAgaXMgTlBJViBzdXBwb3J0ZWQgPyAqLworCXU4ICAgICAgICAgaXNfYXV0aDsJLyogIGlzIFNlY3VyaXR5L0F1dGggc3VwcG9ydGVkID8gKi8KKwl1MTYgICAgICAgIGJiX2NyZWRpdDsJLyogIEJCIGNyZWRpdCBmcm9tIGZhYnJpYyAqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQgKi8KKwl1MTYgICAgICAgIG51bV92cG9ydHM7CS8qICBudW0gdnBvcnRzICovCisJdTE2ICAgICAgICByc3ZkOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2cG9ydF9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBwb3J0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2Zl9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBmYWJyaWNzICovCisJc3RydWN0IGJmYWRfdmZfcyAgICAgICp2Zl9kcnY7CS8qICBkcml2ZXIgdmYgc3RydWN0dXJlICovCisJc3RydWN0IGJmYV90aW1lcl9zIGxpbmtfdGltZXI7CS8qICBMaW5rIEZhaWx1cmUgdGltZXIuIFZwb3J0ICovCisJd3duX3QgICAgICAgICAgIGZhYnJpY19uYW1lOwkvKiAgYXR0YWNoZWQgZmFicmljIG5hbWUgKi8KKwliZmFfYm9vbGVhbl90ICAgYXV0aF9yZXFkOwkvKiAgYXV0aGVudGljYXRpb24gcmVxdWlyZWQJKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgZGVsYXlfdGltZXI7CS8qICBkZWxheSB0aW1lcgkJKi8KKwl1bmlvbiB7CisJCXUxNiAgICAgICAgc3dwX3ZmaWQ7LyogIHN3aXRjaCBwb3J0IFZGIGlkCQkqLworCX0gZXZlbnRfYXJnOworCXN0cnVjdCBiZmFfZmNzX2F1dGhfcyAgYXV0aDsJLyogIGF1dGhlbnRpY2F0aW9uIGNvbmZpZwkqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgd2M7CS8qICB3YWl0IGNvdW50ZXIgZm9yIGRlbGV0ZQkqLworCXN0cnVjdCBiZmFfdmZfc3RhdHNfcyAgc3RhdHM7IAkvKiAgZmFicmljL3ZmIHN0YXRzCQkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJLyogIGxwb3J0IGxvZ2luIHNlcnZpY2VzCSovCisJdTgJZmFicmljX2lwX2FkZHJbQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaXTsgIC8qICBhdHRhY2hlZAorCQkJCQkJCSAgICAqIGZhYnJpYydzIGlwIGFkZHIKKwkJCQkJCQkgICAgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fZikgICAgKF9fZiktPmlzX25waXYKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQoX19mKQkJCVwKKwkoKF9fZiktPmZhYl90eXBlID09IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEKQorCisvKioKKyAqICAgVGhlIGRlc2lnbiBjYWxscyBmb3IgYSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgYmFzZSBmYWJyaWMgYW5kIHZmLgorICovCisjZGVmaW5lIGJmYV9mY3NfdmZfdCBzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcworCitzdHJ1Y3QgYmZhX3ZmX2V2ZW50X3MgeworCXUzMiAgICAgICAgdW5kZWZpbmVkOworfTsKKworLyoqCisgKiBiZmEgZmNzIHZmIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9lbmFibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9kaXNhYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9jcmVhdGUoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJICAgICAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCSAgICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfZGVsZXRlKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX3N0YXJ0KGJmYV9mY3NfdmZfdCAqdmYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfc3RvcChiZmFfZmNzX3ZmX3QgKnZmKTsKK3ZvaWQgYmZhX2Zjc192Zl9saXN0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcyk7Cit2b2lkIGJmYV9mY3NfdmZfbGlzdF9hbGwoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKTsKK3ZvaWQgYmZhX2Zjc192Zl9nZXRfYXR0cihiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX3ZmX2F0dHJfcyAqdmZfYXR0cik7Cit2b2lkIGJmYV9mY3NfdmZfZ2V0X3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYsCisJCQkgIHN0cnVjdCBiZmFfdmZfc3RhdHNfcyAqdmZfc3RhdHMpOwordm9pZCBiZmFfZmNzX3ZmX2NsZWFyX3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX2dldF9wb3J0cyhiZmFfZmNzX3ZmX3QgKnZmLCB3d25fdCB2cHd3bltdLCBpbnQgKm5wb3J0cyk7CitiZmFfZmNzX3ZmX3QgKmJmYV9mY3NfdmZfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKTsKK3N0cnVjdCBiZmFkX3ZmX3MgKmJmYV9mY3NfdmZfZ2V0X2Rydl92ZihiZmFfZmNzX3ZmX3QgKnZmKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GQUJSSUNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTlmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZjcGltLmggQkZBIEZDUyBGQ1AgSW5pdGlhdG9yIE1vZGUgaW50ZXJmYWNlcy9kZWZpbmVzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXRuaW0uaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxiZmFfZmNwaW0uaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgeworCWJmYV9zbV90CQlzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAJKnJwb3J0OwkJLyogIHBhcmVudCByZW1vdGUgcnBvcnQgICovCisJc3RydWN0IGJmYWRfaXRuaW1fcyAgIAkqaXRuaW1fZHJ2OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgCSpmY3M7CQkvKiAgZmNzIGluc3RhbmNlICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXRpbWVyOwkJLyogIHRpbWVyIGZ1bmN0aW9ucyAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqYmZhX2l0bmltOwkvKiAgQkZBIGl0bmltIHN0cnVjdCAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJc2VxX3JlYzsJLyogIHNlcSByZWNvdmVyeSBzdXBwb3J0ICovCisJYmZhX2Jvb2xlYW5fdAkgCXJlY19zdXBwb3J0OwkvKiAgUkVDIHN1cHBvcnRlZCAgICAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJY29uZl9jb21wOwkvKiAgRkNQX0NPTkYgICAgIHN1cHBvcnQgKi8KKwliZmFfYm9vbGVhbl90CSAJdGFza19yZXRyeV9pZDsJLyogIHRhc2sgcmV0cnkgaWQgc3VwcCAgICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsJLyogIHdhaXQgcWVsZW0gZm9yIGZjeHAgICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CQkvKiAgRkNYUCBpbiB1c2UgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgCXN0YXRzOwkvKiAgaXRuIHN0YXRpc3RpY3MgICAgICAgKi8KK307CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfZHJ2cG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0LT5iZmFkX3BvcnQ7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfcG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0OworfQorCisKK3N0YXRpYyBpbmxpbmUgd3duX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X253d24oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+bnd3bjsKK30KKworCitzdGF0aWMgaW5saW5lIHd3bl90CitiZmFfZmNzX2l0bmltX2dldF9wd3duKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnB3d247Cit9CisKKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cGlkOworfQorCisKK3N0YXRpYyBpbmxpbmUgICB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X21heGZyc2l6ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5tYXhmcnNpemU7Cit9CisKKworc3RhdGljIGlubGluZSAgIGVudW0gZmNfY29zCitiZmFfZmNzX2l0bmltX2dldF9jb3Moc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+ZmNfY29zOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFfZmNzX2l0bmltX2dldF9kcnZpdG4oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5pdG5pbV9kcnY7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+YmZhX2l0bmltOworfQorCisvKioKKyAqIGJmYSBmY3MgRkNQIEluaXRpYXRvciBtb2RlIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgKmF0dHIpOwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAqc3RhdHMpOworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqYmZhX2Zjc19pdG5pbV9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fYXR0cl9nZXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3biwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19pdG5pbV9zdGF0c19jbGVhcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycHd3bik7CisjZW5kaWYgLyogX19CRkFfRkNTX0ZDUElNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZkbWkuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MWZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZkbWkuaCBCRkEgZmNzIGZkbWkgbW9kdWxlIHB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GRE1JX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkRNSV9IX18KKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmRtaS5oPgorCisjZGVmaW5lCUJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMgIChGRE1JX1RSQU5TX1NQRUVEXzFHICB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF8yRyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF80RyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF84RykKKworLyoKKyogSEJBIEF0dHJpYnV0ZSBCbG9jayA6IEJGQSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gTm90ZSA6IFNvbWUgdmFyaWFibGUKKyogc2l6ZXMgaGF2ZSBiZWVuIHRyaW1tZWQgdG8gc3VpdCBCRkEgRm9yIEV4IDogTW9kZWwgd2lsbCBiZSAiQnJvY2FkZSIuIEJhc2VkCisgKiBvbiB0aGlzIHRoZSBzaXplIGhhcyBiZWVuIHJlZHVjZWQgdG8gMTYgYnl0ZXMgZnJvbSB0aGUgc3RhbmRhcmQncyA2NCBieXRlcy4KKyAqLworc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgbm9kZV9uYW1lOworCXU4ICAgICAgICAgbWFudWZhY3R1cmVyWzY0XTsKKwl1OCAgICAgICAgIHNlcmlhbF9udW1bNjRdOworCXU4ICAgICAgICAgbW9kZWxbMTZdOworCXU4ICAgICAgICAgbW9kZWxfZGVzY1syNTZdOworCXU4ICAgICAgICAgaHdfdmVyc2lvbls4XTsKKwl1OCAgICAgICAgIGRyaXZlcl92ZXJzaW9uWzhdOworCXU4ICAgICAgICAgb3B0aW9uX3JvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwl1OCAgICAgICAgIGZ3X3ZlcnNpb25bOF07CisJdTggICAgICAgICBvc19uYW1lWzI1Nl07CisJdTMyICAgICAgICBtYXhfY3RfcHlsZDsKK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIHsKKwl1OCAgICAgICAgIHN1cHBfZmM0X3R5cGVzWzMyXTsJLyogc3VwcG9ydGVkIEZDNCB0eXBlcyAqLworCXUzMiAgICAgICAgc3VwcF9zcGVlZDsJLyogc3VwcG9ydGVkIHNwZWVkICovCisJdTMyICAgICAgICBjdXJyX3NwZWVkOwkvKiBjdXJyZW50IFNwZWVkICovCisJdTMyICAgICAgICBtYXhfZnJtX3NpemU7CS8qIG1heCBmcmFtZSBzaXplICovCisJdTggICAgICAgICBvc19kZXZpY2VfbmFtZVsyNTZdOwkvKiBPUyBkZXZpY2UgTmFtZSAqLworCXU4ICAgICAgICAgaG9zdF9uYW1lWzI1Nl07CS8qIGhvc3QgbmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GRE1JX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVjYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19wb3J0LmggQkZBIGZjcyBwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3djLmg+CisKK3N0cnVjdCBiZmFfZmNzX3M7CitzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfczsKKworLyoKKyogQHRvZG8gOiBuZWVkIHRvIG1vdmUgdG8gYSBnbG9iYWwgY29uZmlnIGZpbGUuCisgKiBNYXhpbXVtIFZwb3J0cyBzdXBwb3J0ZWQgcGVyIHBoeXNpY2FsIHBvcnQgb3IgdmYuCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ0IgIDI1NQorI2RlZmluZSBCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DVCAgMTkxCisKKy8qCisqIEB0b2RvIDogbmVlZCB0byBtb3ZlIHRvIGEgZ2xvYmFsIGNvbmZpZyBmaWxlLgorICogTWF4aW11bSBScG9ydHMgc3VwcG9ydGVkIHBlciBwb3J0IChwaHlzaWNhbC9sb2dpY2FsKS4KKyAqLworI2RlZmluZSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUCAgMjU2CS8qIEB0b2RvIDogdGVudGF0aXZlIHZhbHVlICovCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zOwkvKiAgcGFyZW50IG1zICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworCXU4ICAgICAgICAgcmV0cnlfY250OwkvKiAgcmV0cnkgY291bnQgKi8KKwl1OAkgCSAgIHJzdmRbM107Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgZmRtaTsJLyogIEZETUkgY29tcG9uZW50IG9mIE1TICovCisJdTggICAgICAgICByZXRyeV9jbnQ7CS8qICByZXRyeSBjb3VudCAqLworCXU4CSAJICAgcnN2ZFszXTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIG5zOwkvKiAgTlMgY29tcG9uZW50IG9mIHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zIHNjbjsJLyogIHNjbiBjb21wb25lbnQgb2YgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyBtczsJLyogIE1TIGNvbXBvbmVudCBvZiBwb3J0ICovCit9OworCisKKworI2RlZmluZSAJTUFYX0FMUEFfQ09VTlQgCQkxMjcKKworc3RydWN0IGJmYV9mY3NfcG9ydF9sb29wX3MgeworCXU4ICAgICAgICAgbnVtX2FscGE7CS8qICBOdW0gb2YgQUxQQSBlbnRyaWVzIGluIHRoZSBtYXAgKi8KKwl1OCAgICAgICAgIGFscGFfcG9zX21hcFtNQVhfQUxQQV9DT1VOVF07CS8qICBBTFBBIFBvc2l0aW9uYWwKKwkJCQkJCQkgKk1hcCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCit9OworCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyB7CisJdTMyICAgICAgICByc3ZkOworCXUxNiAgICAgICAgcmVwbHlfb3hpZDsJLyogIG94X2lkIGZyb20gdGhlIHJlcSBmbG9naSB0byBiZQorCQkJCQkgKnVzZWQgaW4gZmxvZ2kgYWNjICovCisJd3duX3QgICAgICAgICAgIHJlbV9wb3J0X3d3bjsJLyogIEF0dGFjaGVkIHBvcnQncyB3d24gKi8KK307CisKKwordW5pb24gYmZhX2Zjc19wb3J0X3RvcG9fdSB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyBwZmFiOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbG9vcF9zIHBsb29wOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgcG4ybjsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CS8qICB1c2VkIGJ5IHBvcnQvdnBvcnQgKi8KKwliZmFfc21fdCAgICAgICAgICAgICAgIHNtOwkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CS8qICBwYXJlbnQgZmFicmljICovCisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBsaW5rX3RpbWVyOwkvKiAgdGltZXIgZm9yIGxpbmsgb2ZmbGluZSAqLworCXUzMiAgICAgICAgcGlkIDogMjQ7CS8qICBGQyBhZGRyZXNzICovCisJdTggICAgICAgICBscF90YWc7CQkvKiAgbHBvcnQgdGFnICovCisJdTE2ICAgICAgICBudW1fcnBvcnRzOwkvKiAgTnVtIG9mIHItcG9ydHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X3E7CS8qICBxdWV1ZSBvZiBkaXNjb3ZlcmVkIHItcG9ydHMgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CS8qICBGQ1MgaW5zdGFuY2UgKi8KKwl1bmlvbiBiZmFfZmNzX3BvcnRfdG9wb191IHBvcnRfdG9wbzsJLyogIGZhYnJpYy9sb29wL24ybiBkZXRhaWxzICovCisJc3RydWN0IGJmYWRfcG9ydF9zICpiZmFkX3BvcnQ7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OwkvKiAgTlVMTCBmb3IgYmFzZSBwb3J0cyAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBzdGF0czsKKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyIGZvciBldmVudHMgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19scG9ydF90IHN0cnVjdCBiZmFfZmNzX3BvcnRfcworCisvKioKKyAqIFN5bWJvbGljIE5hbWUgcmVsYXRlZCBkZWZpbmVzCisgKiAgVG90YWwgYnl0ZXMgMjU1LgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIDEyOCBieXRlcy4KKyAqICBGb3IgVnBvcnRzLCBWcG9ydCdzIHN5bWJvbGljIG5hbWUgaXMgYXBwZW5kZWQgdG8gdGhlIFBoeXNpY2FsIHBvcnQncworICogIFN5bWJvbGljIE5hbWUuCisgKgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIEZvcm1hdCA6IChUb3RhbCAxMjggYnl0ZXMpCisgKiAgQWRhcHRlciBNb2RlbCBudW1iZXIvbmFtZSA6IDEyIGJ5dGVzCisgKiAgRHJpdmVyIFZlcnNpb24gICAgIDogMTAgYnl0ZXMKKyAqICBIb3N0IE1hY2hpbmUgTmFtZSAgOiAzMCBieXRlcworICogCUhvc3QgT1MgSW5mbwkgICA6IDQ4IGJ5dGVzCisgKiAJSG9zdCBPUyBQQVRDSCBJbmZvIDogMTYgYnl0ZXMKKyAqICAoIHJlbWFpbmluZyAxMiBieXRlcyByZXNlcnZlZCB0byBiZSB1c2VkIGZvciBzZXBhcmF0b3IpCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiAJCSIgfCAiCisKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX01PREVMX1NaCQkJMTIKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1ZFUlNJT05fU1ogCQkxMAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTUFDSElORU5BTUVfU1ogCTMwCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1oJCQk0OAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NQQVRDSF9TWgkJMTYKKworLyoqCisgKiBHZXQgRkMgcG9ydCBJRCBmb3IgYSBsb2dpY2FsIHBvcnQuCisgKi8KKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mY2lkKF9scG9ydCkJKChfbHBvcnQpLT5waWQpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfcHd3bihfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcucHd3bikKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9ud3duKF9scG9ydCkJKChfbHBvcnQpLT5wb3J0X2NmZy5ud3duKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcuc3ltX25hbWUpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc190YXJnZXQoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfbnJwb3J0cyhfbHBvcnQpCVwKKwkJCSgoX2xwb3J0KSA/IChfbHBvcnQpLT5udW1fcnBvcnRzIDogMCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9kcnZwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlyZXR1cm4gcG9ydC0+YmZhZF9wb3J0OworfQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9vcGVydHlwZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPm9wZXJfdHlwZQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPmZhYnJpY19uYW1lCisKKworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIoX2xwb3J0KQkoX2xwb3J0KS0+ZmFicmljLT5mYWJyaWNfaXBfYWRkcgorCisvKioKKyAqIGJmYSBmY3MgcG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2Zjc19jZmdfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnBvcnRfd3duc1tdLCBpbnQgKm5ycG9ydHMpOworCit3d25fdCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgd3duLAorCQkJaW50IGluZGV4LCBpbnQgbnJwb3J0cywgYmZhX2Jvb2xlYW5fdCBid3duKTsKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2xvb2t1cF9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgbHB3d24pOworCit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfaW5mbyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfaW5mb19zICpwb3J0X2luZm8pOwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgKnBvcnRfc3RhdHMpOwordm9pZCBiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9lbmFibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2Rpc2FibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJiOTViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19SUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKworI2RlZmluZSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVCAJOTAgCS8qIGluIHNlY3MgKi8KKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zOworCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zOworc3RydWN0IGJmYV9mY3NfdGluX3M7CitzdHJ1Y3QgYmZhX2Zjc19pcHJwX3M7CisKKy8qIFJwb3J0IEZlYXR1cmVzIChSUEYpICovCitzdHJ1Y3QgYmZhX2Zjc19ycGZfcyB7CisJYmZhX3NtX3QgICAgICAgICAgICAgICBzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsJLyogIHBhcmVudCBycG9ydCAqLworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CS8qICBGQ1hQIG5lZWRlZCBmb3IgZGlzY2FyZGluZyAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAJZmN4cF93cWU7CS8qICBmY3hwIHdhaXQgcXVldWUgZWxlbWVudCAqLworCWludCAgICAgICAgICAgICAJcnBzY19yZXRyaWVzOwkvKiAgbWF4IFJQU0MgcmV0cnkgYXR0ZW1wdHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCAJcnBzY19zcGVlZDsJLyogQ3VycmVudCBTcGVlZCBmcm9tIFJQU0MuCisJCQkJCQkgKiBPIGlmIFJQU0MgZmFpbHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZAlhc3NpZ25lZF9zcGVlZDsJLyogU3BlZWQgYXNzaWduZWQgYnkgdGhlIHVzZXIuCisJCQkJCQkgKiB3aWxsIGJlIHVzZWQgaWYgUlBTQyBpcyBub3QKKwkJCQkJCSAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQgKi8KK307CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsJLyogIHVzZWQgYnkgcG9ydC92cG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBGQ1MgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzOwkvKiAgZmNzIGluc3RhbmNlICovCisJc3RydWN0IGJmYWRfcnBvcnRfcyAgICpycF9kcnY7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXUzMiAgICAgICAgcGlkOwkvKiAgcG9ydCBJRCBvZiBycG9ydCAqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplICovCisJdTE2ICAgICAgICByZXBseV9veGlkOwkvKiAgT1hfSUQgb2YgaW5ib3VuZCByZXF1ZXN0cyAqLworCWVudW0gZmNfY29zICAgICAgICBmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2Ugc3VwcCAqLworCWJmYV9ib29sZWFuX3QgICBjaXNjOwkvKiAgQ0lTQyBjYXBhYmxlIGRldmljZSAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgcG9ydCB3d24gb2YgcnBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbnd3bjsJLyogIG5vZGUgd3duIG9mIHJwb3J0ICovCisJc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3MgcHN5bV9uYW1lOyAvKiAgcG9ydCBzeW1ib2xpYyBuYW1lICAqLworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW47CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX2lwcnBfcyAqaXBycDsJLyogIElQL0ZDIHJvbGUgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydDsJLyogIEJGQSBScG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkvKiAgRkNYUCBuZWVkZWQgZm9yIGRpc2NhcmRpbmcgKi8KKwlpbnQgICAgICAgICAgICAgcGxvZ2lfcmV0cmllczsJLyogIG1heCBwbG9naSByZXRyeSBhdHRlbXB0cyAqLworCWludCAgICAgICAgICAgICBuc19yZXRyaWVzOwkvKiAgbWF4IE5TIHF1ZXJ5IHJldHJ5IGF0dGVtcHRzICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsgLyogIGZjeHAgd2FpdCBxdWV1ZSBlbGVtZW50ICovCisJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zIHN0YXRzOwkvKiAgcnBvcnQgc3RhdHMgKi8KKwllbnVtIGJmYV9ycG9ydF9mdW5jdGlvbglzY3NpX2Z1bmN0aW9uOyAgLyogIEluaXRpYXRvci9UYXJnZXQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyBycGY7IAkvKiBScG9ydCBmZWF0dXJlcyBtb2R1bGUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfZ2V0X2hhbHJwb3J0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBycG9ydC0+YmZhX3Jwb3J0OworfQorCisvKioKKyAqIGJmYSBmY3MgcnBvcnQgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCAqcHd3biwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Jwb3J0X3JlbW92ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcyAqYXR0cik7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zICpzdGF0cyk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgcm53d24pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dCh1OCBycG9ydF90bW8pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfUlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdnBvcnQuaCBCRkEgZmNzIHZwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJcWU7CQkvKiAgcXVldWUgZWxlbQkgKi8KKwliZmFfc21fdAkJc207CQkvKiAgc3RhdGUgbWFjaGluZQkqLworCWJmYV9mY3NfbHBvcnRfdAkJbHBvcnQ7CQkvKiAgbG9naWNhbCBwb3J0CSovCisJc3RydWN0IGJmYV90aW1lcl9zCXRpbWVyOwkJLyogIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLworCXN0cnVjdCBiZmFkX3Zwb3J0X3MJKnZwb3J0X2RydjsJLyogIERyaXZlciBwcml2YXRlCSovCisJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHZwb3J0X3N0YXRzOwkvKiAgdnBvcnQgc3RhdGlzdGljcwkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJCS8qICBMcG9ydCBsb2dpbiBzZXJ2aWNlICovCisJaW50CQkJZmRpc2NfcmV0cmllczsKK307CisKKyNkZWZpbmUgYmZhX2Zjc192cG9ydF9nZXRfcG9ydCh2cG9ydCkgXAorCQkJKChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgICopKCZ2cG9ydC0+cG9ydCkpCisKKy8qKgorICogYmZhIGZjcyB2cG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLAorCQkJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RvcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyAqdnBvcnRfYXR0cik7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zICp2cG9ydF9zdGF0cyk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKmJmYV9mY3NfdnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgdnB3d24pOworCisjZW5kaWYgLyogX19CRkFfRkNTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjVkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfZmNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogbWVzc2FnZXMgZGVmaW5lIGZvciBGQ1MgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0ZDU19IX18KKyNkZWZpbmUJX19CRkFfTE9HX0ZDU19IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0ZDU19GQUJSSUNfTk9TV0lUQ0ggCVwKKwkoKCh1MzIpIEJGQV9MT0dfRkNTX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfRkNTX0ZBQlJJQ19JU09MQVRFRCAJXAorCSgoKHUzMikgQkZBX0xPR19GQ1NfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTJhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfaGFsLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEhBTCBNb2R1bGUgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0hBTF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0hBTF9IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0hBTF9BU1NFUlQgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNkZWZpbmUgQkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElEIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfSEFMX1NNX0FTU0VSVCBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxN2MwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCisjaWZuZGVmCV9fQkZBX0xPR19MSU5VWF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0xJTlVYX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfTElOVVhfREVWSUNFX0NMQUlNRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9IQVNIX0lOSVRfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfTUVNX0FMTE9DX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDUpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA2KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09OTElORSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA3KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09GRkxJTkUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgOCkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TQ1NJX0hPU1RfRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA5KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMTApCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVF9DT01QIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDExKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfd2Rydi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlhOTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBtZXNzYWdlcyBkZWZpbmUgZm9yIFdEUlYgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX1dEUlZfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19XRFJWX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiAJXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5URVJOQUxfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfU1RBUlRfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAzKQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNSkKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDYpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DVF9IX18KKyNkZWZpbmUgX19DVF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitzdHJ1Y3QgY3RfaGRyX3N7CisJdTMyCXJldl9pZDo4OwkvKiBSZXZpc2lvbiBvZiB0aGUgQ1QgKi8KKwl1MzIJaW5faWQ6MjQ7CS8qIEluaXRpYXRvciBJZCAqLworCXUzMglnc190eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBUeXBlICovCisJdTMyCWdzX3N1Yl90eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBzdWIgdHlwZSAqLworCXUzMglvcHRpb25zOjg7CS8qIG9wdGlvbnMgKi8KKwl1MzIJcnN2cmQ6ODsJLyogcmVzZXJ2ZWQgKi8KKwl1MzIJY21kX3JzcF9jb2RlOjE2Oy8qIGN0IGNvbW1hbmQvcmVzcG9uc2UgY29kZSAqLworCXUzMgltYXhfcmVzX3NpemU6MTY7LyogbWF4aW11bS9yZXNpZHVhbCBzaXplICovCisJdTMyCWZyYWdfaWQ6ODsJLyogZnJhZ21lbnQgSUQgKi8KKwl1MzIJcmVhc29uX2NvZGU6ODsJLyogcmVhc29uIGNvZGUgKi8KKwl1MzIJZXhwX2NvZGU6ODsJLyogZXhwbGFuYXRpb24gY29kZSAqLworCXUzMgl2ZW5kb3JfdW5xOjg7CS8qIHZlbmRvciB1bmlxdWUgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciB0aGUgUmV2aXNpb24KKyAqLworZW51bSB7CisJQ1RfR1MzX1JFVklTSU9OID0gMHgwMSwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc190eXBlCisgKi8KK2VudW0geworCUNUX0dTVFlQRV9LRVlTRVJWSUNFCT0gMHhGNywKKwlDVF9HU1RZUEVfQUxJQVNTRVJWSUNFCT0gMHhGOCwKKwlDVF9HU1RZUEVfTUdNVFNFUlZJQ0UJPSAweEZBLAorCUNUX0dTVFlQRV9USU1FU0VSVklDRQk9IDB4RkIsCisJQ1RfR1NUWVBFX0RJUlNFUlZJQ0UJPSAweEZDLAorfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIGdzX3N1Yl90eXBlIGZvciBncyB0eXBlIGRpcmVjdG9yeSBzZXJ2aWNlCisgKi8KK2VudW0geworCUNUX0dTU1VCVFlQRV9OQU1FU0VSVkVSID0gMHgwMiwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc19zdWJfdHlwZSBmb3IgZ3MgdHlwZSBtYW5hZ2VtZW50IHNlcnZpY2UKKyAqLworZW51bSB7CisJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUgk9IDB4MDEsCisJQ1RfR1NTVUJUWVBFX1VOWk9ORURfTlMgPSAweDAyLAorCUNUX0dTU1VCVFlQRV9aT05FU0VSVkVSID0gMHgwMywKKwlDVF9HU1NVQlRZUEVfTE9DS1NFUlZFUiA9IDB4MDQsCisJQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSID0gMHgxMCwJLyogZm9yIEZETUkgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBDVCByZXNwb25zZSBjb2RlIGZpZWxkCisgKi8KK2VudW0geworCUNUX1JTUF9SRUpFQ1QgPSAweDgwMDEsCisJQ1RfUlNQX0FDQ0VQVCA9IDB4ODAwMiwKK307CisKKy8qCisgKiBkZWZpbnRpb25zIGZvciBDVCByZWFzb24gY29kZQorICovCitlbnVtIHsKKwlDVF9SU05fSU5WX0NNRAkJPSAweDAxLAorCUNUX1JTTl9JTlZfVkVSCQk9IDB4MDIsCisJQ1RfUlNOX0xPR0lDX0VSUgk9IDB4MDMsCisJQ1RfUlNOX0lOVl9TSVpFCQk9IDB4MDQsCisJQ1RfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJQ1RfUlNOX1BST1RPX0VSUgk9IDB4MDcsCisJQ1RfUlNOX1VOQUJMRV9UT19QRVJGCT0gMHgwOSwKKwlDVF9SU05fTk9UX1NVUFAJCQk9IDB4MEIsCisJQ1RfUlNOX1NFUlZFUl9OT1RfQVZCTCAgPSAweDBELAorCUNUX1JTTl9TRVNTSU9OX0NPVUxEX05PVF9CRV9FU1RCRCA9IDB4MEUsCisJQ1RfUlNOX1ZFTkRPUl9TUEVDSUZJQyAgPSAweEZGLAorCit9OworCisvKgorICogZGVmaW5pdGlvbnMgZm9yIGV4cGxhbmF0aW9ucyBjb2RlIGZvciBOYW1lIHNlcnZlcgorICovCitlbnVtIHsKKwlDVF9OU19FWFBfTk9BRERJVElPTkFMCT0gMHgwMCwKKwlDVF9OU19FWFBfSURfTk9UX1JFRwk9IDB4MDEsCisJQ1RfTlNfRVhQX1BOX05PVF9SRUcJPSAweDAyLAorCUNUX05TX0VYUF9OTl9OT1RfUkVHCT0gMHgwMywKKwlDVF9OU19FWFBfQ1NfTk9UX1JFRwk9IDB4MDQsCisJQ1RfTlNfRVhQX0lQTl9OT1RfUkVHCT0gMHgwNSwKKwlDVF9OU19FWFBfSVBBX05PVF9SRUcJPSAweDA2LAorCUNUX05TX0VYUF9GVF9OT1RfUkVHCT0gMHgwNywKKwlDVF9OU19FWFBfU1BOX05PVF9SRUcJPSAweDA4LAorCUNUX05TX0VYUF9TTk5fTk9UX1JFRwk9IDB4MDksCisJQ1RfTlNfRVhQX1BUX05PVF9SRUcJPSAweDBBLAorCUNUX05TX0VYUF9JUFBfTk9UX1JFRwk9IDB4MEIsCisJQ1RfTlNfRVhQX0ZQTl9OT1RfUkVHCT0gMHgwQywKKwlDVF9OU19FWFBfSEFfTk9UX1JFRwk9IDB4MEQsCisJQ1RfTlNfRVhQX0ZEX05PVF9SRUcJPSAweDBFLAorCUNUX05TX0VYUF9GRl9OT1RfUkVHCT0gMHgwRiwKKwlDVF9OU19FWFBfQUNDRVNTREVOSUVECT0gMHgxMCwKKwlDVF9OU19FWFBfVU5BQ0NFUFRBQkxFX0lEID0gMHgxMSwKKwlDVF9OU19FWFBfREFUQUJBU0VFTVBUWQkJCT0gMHgxMiwKKwlDVF9OU19FWFBfTk9UX1JFR19JTl9TQ09QRSAJCT0gMHgxMywKKwlDVF9OU19FWFBfRE9NX0lEX05PVF9QUkVTRU5UIAk9IDB4MTQsCisJQ1RfTlNfRVhQX1BPUlRfTlVNX05PVF9QUkVTRU5UICA9IDB4MTUsCisJQ1RfTlNfRVhQX05PX0RFVklDRV9BVFRBQ0hFRCAJPSAweDE2Cit9OworCisvKgorICogZGVmaW50aW9ucyBmb3IgdGhlIGV4cGxhbmF0aW9uIGNvZGUgZm9yIGFsbCBzZXJ2ZXJzCisgKi8KK2VudW0geworCUNUX0VYUF9BVVRIX0VYQ0VQVElPTgkJCT0gMHhGMSwKKwlDVF9FWFBfREJfRlVMTAkJCQkJPSAweEYyLAorCUNUX0VYUF9EQl9FTVBUWQkJCQkJPSAweEYzLAorCUNUX0VYUF9QUk9DRVNTSU5HX1JFUQkJCT0gMHhGNCwKKwlDVF9FWFBfVU5BQkxFX1RPX1ZFUklGWV9DT05OCT0gMHhGNSwKKwlDVF9FWFBfREVWSUNFU19OT1RfSU5fQ01OX1pPTkUgID0gMHhGNgorfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIE5hbWUgc2VydmVyCisgKi8KK2VudW0geworCUdTX0dJRF9QTgk9IDB4MDEyMSwJLyogR2V0IElkIG9uIHBvcnQgbmFtZSAqLworCUdTX0dQTl9JRAk9IDB4MDExMiwJLyogR2V0IHBvcnQgbmFtZSBvbiBJRCAqLworCUdTX0dOTl9JRAk9IDB4MDExMywJLyogR2V0IG5vZGUgbmFtZSBvbiBJRCAqLworCUdTX0dJRF9GVAk9IDB4MDE3MSwJLyogR2V0IElkIG9uIEZDNCB0eXBlICovCisJR1NfR1NQTl9JRAk9IDB4MDExOCwJLyogR2V0IHN5bWJvbGljIFBOIG9uIElEICovCisJR1NfUkZUX0lECT0gMHgwMjE3LAkvKiBSZWdpc3RlciBmYzR0eXBlIG9uIElEICovCisJR1NfUlNQTl9JRAk9IDB4MDIxOCwJLyogUmVnaXN0ZXIgc3ltYm9saWMgUE4gb24gSUQgKi8KKwlHU19SUE5fSUQJPSAweDAyMTIsCS8qIFJlZ2lzdGVyIHBvcnQgbmFtZSAqLworCUdTX1JOTl9JRAk9IDB4MDIxMywJLyogUmVnaXN0ZXIgbm9kZSBuYW1lICovCisJR1NfUkNTX0lECT0gMHgwMjE0LAkvKiBSZWdpc3RlciBjbGFzcyBvZiBzZXJ2aWNlICovCisJR1NfUlBUX0lECT0gMHgwMjFBLAkvKiBSZWdpc3RlciBwb3J0IHR5cGUgKi8KKwlHU19HQV9OWFQJPSAweDAxMDAsCS8qIEdldCBhbGwgbmV4dCAqLworCUdTX1JGRl9JRAk9IDB4MDIxRiwJLyogUmVnaXN0ZXIgRkM0IEZlYXR1cmUJCSovCit9OworCitzdHJ1Y3QgZmNnc19pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKyNkZWZpbmUgZmNnc19ncG5pZF9yZXFfdCBzdHJ1Y3QgZmNnc19pZF9yZXFfcworI2RlZmluZSBmY2dzX2dubmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisjZGVmaW5lIGZjZ3NfZ3NwbmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisKK3N0cnVjdCBmY2dzX2dpZHBuX3JlcV9zeworCXd3bl90CXBvcnRfbmFtZTsJLyogcG9ydCB3d24gKi8KK307CisKK3N0cnVjdCBmY2dzX2dpZHBuX3Jlc3Bfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKworLyoqCisgKiBSRlRfSUQKKyAqLworc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllciAqLworCXUzMglmYzRfdHlwZVs4XTsJLyogZmM0IHR5cGVzICovCit9OworCisvKioKKyAqIFJGRl9JRCA6IFJlZ2lzdGVyIEZDNCBmZWF0dXJlcy4KKyAqLworCisjZGVmaW5lIEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9JTklUSUFUT1IgIDB4MDIKKyNkZWZpbmUgRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVAkgMHgwMQorCitzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfc3sKKyAgICB1MzIgICAgcnN2ZCAgICAgICAgICA6ODsKKyAgICB1MzIgICAgZGFwICAgICAgICAJICA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIJKi8KKyAgICB1MzIgICAgcnN2ZDEgICAgICAgICA6MTY7CisgICAgdTMyICAgIGZjNGZ0cl9iaXRzICAgOjg7CQkvKiBmYzQgZmVhdHVyZSBiaXRzCSovCisgICAgdTMyICAgIGZjNF90eXBlICAgICAgOjg7CQkvKiBjb3JyZXNwb25kaW5nIEZDNCBUeXBlICovCit9OworCisvKioKKyAqIEdJRF9GVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zeworCXU4CXJlc2VydmVkOworCXU4CWRvbWFpbl9pZDsJLyogZG9tYWluLCAwIC0gYWxsIGZhYnJpYyAqLworCXU4CWFyZWFfaWQ7CS8qIGFyZWEsIDAgLSB3aG9sZSBkb21haW4gKi8KKwl1OAlmYzRfdHlwZTsJLyogRkNfVFlQRV9GQ1AgZm9yIFNDU0kgZGV2aWNlcyAqLworfTsJCQkJLyogR0lEX0ZUIFJlcXVlc3QgKi8KKworLyoqCisgKiBHSURfRlQgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZ2lkZnRfcmVzcF9zIHsKKwl1OAkJbGFzdDoxOwkvKiBsYXN0IHBvcnQgaWRlbnRpZmllciBmbGFnICovCisJdTgJCXJlc2VydmVkOjc7CisJdTMyCXBpZDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCit9OwkJCQkvKiBHSURfRlQgUmVzcG9uc2UgKi8KKworLyoqCisgKiBSU1BOX0lECisgKi8KK3N0cnVjdCBmY2dzX3JzcG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl1OAkJc3BuX2xlbjsJLyogc3ltYm9saWMgcG9ydCBuYW1lIGxlbmd0aCAqLworCXU4CQlzcG5bMjU2XTsJLyogc3ltYm9saWMgcG9ydCBuYW1lICovCit9OworCisvKioKKyAqIFJQTl9JRAorICovCitzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlwb3J0X25hbWU7Cit9OworCisvKioKKyAqIFJOTl9JRAorICovCitzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlub2RlX25hbWU7Cit9OworCisvKioKKyAqIFJDU19JRAorICovCitzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMgljb3M7Cit9OworCisvKioKKyAqIFJQVF9JRAorICovCitzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMglwb3J0X3R5cGU6ODsKKwl1MzIJcnN2ZDE6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dhbnh0X3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19nYW54dF9yc3Bfc3sKKwl1MzIJcG9ydF90eXBlOjg7CS8qIFBvcnQgVHlwZSAqLworCXUzMglwb3J0X2lkOjI0OwkvKiBQb3J0IElkZW50aWZpZXIgKi8KKwl3d25fdAkJcG9ydF9uYW1lOwkvKiBQb3J0IE5hbWUgKi8KKwl1OAkJc3BuX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIFBvcnQgTmFtZSAqLworCWNoYXIJCXNwblsyNTVdOwkvKiBTeW1ib2xpYyBQb3J0IE5hbWUgKi8KKwl3d25fdAkJbm9kZV9uYW1lOwkvKiBOb2RlIE5hbWUgKi8KKwl1OAkJc25uX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIE5vZGUgTmFtZSAqLworCWNoYXIJCXNublsyNTVdOwkvKiBTeW1ib2xpYyBOb2RlIE5hbWUgKi8KKwl1OAkJaXBhWzhdOwkJLyogSW5pdGlhbCBQcm9jZXNzIEFzc29jaWF0b3IgKi8KKwl1OAkJaXBbMTZdOwkJLyogSVAgQWRkcmVzcyAqLworCXUzMgljb3M7CQkvKiBDbGFzcyBvZiBTZXJ2aWNlICovCisJdTMyCWZjNHR5cGVzWzhdOwkvKiBGQy00IFRZUEVzICovCisJd3duX3QJCWZhYnJpY19wb3J0X25hbWU7CisJCQkJCS8qIEZhYnJpYyBQb3J0IE5hbWUgKi8KKwl1MzIJcnN2ZDo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIJaGFyZF9hZGRyOjI0OwkvKiBIYXJkIEFkZHJlc3MgKi8KK307CisKKy8qCisgKiBGYWJyaWMgQ29uZmlnIFNlcnZlcgorICovCisKKy8qCisgKiBDb21tYW5kIGNvZGVzIGZvciBGYWJyaWMgQ29uZmlndXJhdGlvbiBTZXJ2ZXIKKyAqLworZW51bSB7CisJR1NfRkNfR0ZOX0NNRAk9IDB4MDExNCwJLyogR1MgRkMgR2V0IEZhYnJpYyBOYW1lICAqLworCUdTX0ZDX0dNQUxfQ01ECT0gMHgwMTE2LAkvKiBHUyBGQyBHTUFMICAqLworCUdTX0ZDX1RSQUNFX0NNRAk9IDB4MDQwMCwJLyogR1MgRkMgVHJhY2UgUm91dGUgKi8KKwlHU19GQ19QSU5HX0NNRAk9IDB4MDQwMSwJLyogR1MgRkMgUGluZyAqLworfTsKKworLyoKKyAqIFNvdXJjZSBvciBEZXN0aW5hdGlvbiBQb3J0IFRhZ3MuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9UQUdfTlBPUlRfSUQJCT0gMSwKKwlHU19GVFJBQ0VfVEFHX05QT1JUX05BTUUJPSAyLAorfTsKKworLyoKKyogUG9ydCBWYWx1ZSA6IENvdWxkIGJlIGEgUG9ydCBpZCBvciB3d24KKyAqLwordW5pb24gZmNnc19wb3J0X3ZhbF91eworCXUzMglucG9ydF9pZDsKKwl3d25fdAkJbnBvcnRfd3duOworfTsKKworI2RlZmluZSBHU19GVFJBQ0VfTUFYX0hPUF9DT1VOVAkyMAorI2RlZmluZSBHU19GVFJBQ0VfUkVWSVNJT04JMQorCisvKgorICogRnRyYWNlIFJlbGF0ZWQgU3RydWN0dXJlcy4KKyAqLworCisvKgorICogU1RSIChTd2l0Y2ggVHJhY2UpIFJlamVjdCBSZWFzb24gQ29kZXMuIEZyb20gRkMtU1cuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9TVFJfQ01EX0NPTVBMRVRFRF9TVUNDCT0gMCwKKwlHU19GVFJBQ0VfU1RSX0NNRF9OT1RfU1VQUF9JTl9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX05PX1JFU1BfRlJPTV9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX01BWF9IT1BfQ05UX1JFQUNIRUQsCisJR1NfRlRSQUNFX1NUUl9TUkNfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9EU1RfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9ERVZJQ0VTX05PVF9JTl9DT01NT05fWk9ORSwKKwlHU19GVFJBQ0VfU1RSX05PX1JPVVRFX0JXX1BPUlRTLAorCUdTX0ZUUkFDRV9TVFJfTk9fQURETF9FWFBMTiwKKwlHU19GVFJBQ0VfU1RSX0ZBQlJJQ19CVVNZLAorCUdTX0ZUUkFDRV9TVFJfRkFCUklDX0JVSUxEX0lOX1BST0dSRVNTLAorCUdTX0ZUUkFDRV9TVFJfVkVORE9SX1NQRUNJRklDX0VSUl9TVEFSVCA9IDB4ZjAsCisJR1NfRlRSQUNFX1NUUl9WRU5ET1JfU1BFQ0lGSUNfRVJSX0VORCA9IDB4ZmYsCit9OworCisvKgorICogRnRyYWNlIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJc3JjX3BvcnRfdGFnOwkvKiBTb3VyY2UgUG9ydCB0YWcgKi8KKwl1MTYJc3JjX3BvcnRfbGVuOwkvKiBTb3VyY2UgUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3Ugc3JjX3BvcnRfdmFsOwkvKiBTb3VyY2UgUG9ydCB2YWx1ZSAqLworCXUxNglkc3RfcG9ydF90YWc7CS8qIERlc3RpbmF0aW9uIFBvcnQgdGFnICovCisJdTE2CWRzdF9wb3J0X2xlbjsJLyogRGVzdGluYXRpb24gUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3UgZHN0X3BvcnRfdmFsOwkvKiBEZXN0aW5hdGlvbiBQb3J0IHZhbHVlICovCisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CS8qIFQxMCBWZW5kb3IgSWRlbnRpZmllciAqLworCXU4CQl2ZW5kb3JfaW5mb1s4XTsJLyogVmVuZG9yIHNwZWNpZmljIEluZm8gKi8KKwl1MzIJbWF4X2hvcF9jbnQ7CS8qIE1heCBIb3AgQ291bnQgKi8KK307CisKKy8qCisgKiBQYXRoIGluZm8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY2dzX2Z0cmFjZV9wYXRoX2luZm9fc3sKKwl3d25fdAkJc3dpdGNoX25hbWU7CQkvKiBTd2l0Y2ggV1dOICovCisJdTMyCWRvbWFpbl9pZDsKKwl3d25fdAkJaW5ncmVzc19wb3J0X25hbWU7CS8qIEluZ3Jlc3MgcG9ydHMgd3duICovCisJdTMyCWluZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworCXd3bl90CQllZ3Jlc3NfcG9ydF9uYW1lOwkvKiBJbmdyZXNzIHBvcnRzIHd3biAqLworCXUzMgllZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworfTsKKworLyoKKyAqIEZ0cmFjZSBBY2MgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3Jlc3Bfc3sKKwl1MzIJcmV2aXNpb247CisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CQkvKiBUMTAgVmVuZG9yIElkZW50aWZpZXIgKi8KKwl1OAkJdmVuZG9yX2luZm9bOF07CQkvKiBWZW5kb3Igc3BlY2lmaWMgSW5mbyAqLworCXUzMglzdHJfcmVqX3JlYXNvbl9jb2RlOwkvKiBTVFIgUmVqZWN0IFJlYXNvbiBDb2RlICovCisJdTMyCW51bV9wYXRoX2luZm9fZW50cmllczsJLyogTm8uIG9mIHBhdGggaW5mbyBlbnRyaWVzICovCisJLyoKKwkgKiBwYXRoIGluZm8gZW50cnkvZW50cmllcy4KKwkgKi8KKwlzdHJ1Y3QgZmNnc19mdHJhY2VfcGF0aF9pbmZvX3MgcGF0aF9pbmZvWzFdOworCit9OworCisvKgorKiBGYWJyaWMgQ29uZmlnIFNlcnZlciA6IEZDUGluZworICovCisKKy8qCisgKiBGQyBQaW5nIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZmNwaW5nX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJcG9ydF90YWc7CisJdTE2CXBvcnRfbGVuOwkvKiBQb3J0IGxlbiAqLworCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBwb3J0X3ZhbDsJLyogUG9ydCB2YWx1ZSAqLworCXUzMgl0b2tlbjsKK307CisKKy8qCisgKiBGQyBQaW5nIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2ZjcGluZ19yZXNwX3N7CisJdTMyCXRva2VuOworfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIHpvbmUgc2VydmVyIHF1ZXJ5LgorICovCitlbnVtIHsKKwlaU19HWk1FID0gMHgwMTI0LAkvKiBHZXQgem9uZSBtZW1iZXIgZXh0ZW5kZWQgKi8KK307CisKKy8qCisgKiBaUyBHWk1FIHJlcXVlc3QKKyAqLworI2RlZmluZSBaU19HWk1FX1pOQU1FTEVOCTMyCitzdHJ1Y3QgenNfZ3ptZV9yZXFfc3sKKwl1OAl6bmFtZWxlbjsKKwl1OAlyc3ZkWzNdOworCXU4CXpuYW1lW1pTX0daTUVfWk5BTUVMRU5dOworfTsKKworZW51bSB6c19tYnJfdHlwZXsKKwlaU19NQlJfVFlQRV9QV1dOCT0gMSwKKwlaU19NQlJfVFlQRV9ET01QT1JUCT0gMiwKKwlaU19NQlJfVFlQRV9QT1JUSUQJPSAzLAorCVpTX01CUl9UWVBFX05XV04JPSA0LAorfTsKKworc3RydWN0IHpzX21icl93d25fc3sKKwl1OAltYnJfdHlwZTsKKwl1OAlyc3ZkWzNdOworCXd3bl90CXd3bjsKK307CisKK3N0cnVjdCB6c19xdWVyeV9yZXNwX3N7CisJdTMyCW5tYnJzOwkvKiAgbnVtYmVyIG9mIHpvbmUgbWVtYmVycyAqLworCXN0cnVjdCB6c19tYnJfd3duX3MJbWJyWzFdOworfTsKKworLyoKKyAqIEdNQUwgQ29tbWFuZCAoIEdldCAoIGludGVyY29ubmVjdCBFbGVtZW50KSBNYW5hZ2VtZW50IEFkZHJlc3MgTGlzdCkKKyAqIFRvIHJldHJpZXZlIHRoZSBJUCBBZGRyZXNzIG9mIGEgU3dpdGNoLgorICovCisKKyNkZWZpbmUgQ1RfR01BTF9SRVNQX1BSRUZJWF9URUxORVQJICJ0ZWxuZXQ6Ly8iCisjZGVmaW5lIENUX0dNQUxfUkVTUF9QUkVGSVhfSFRUUAkgImh0dHA6Ly8iCisKKy8qICBHTUFML0dGTiByZXF1ZXN0ICovCitzdHJ1Y3QgZmNnc19yZXFfcyB7CisJd3duX3QgICAgd3duOyAJLyogUFdXTi9OV1dOICovCit9OworCisjZGVmaW5lIGZjZ3NfZ21hbF9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworI2RlZmluZSBmY2dzX2dmbl9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworCisvKiBBY2NlcHQgUmVzcG9uc2UgdG8gR01BTCAqLworc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgeworCXUzMiAJCW1zX2xlbjsgICAvKiBOdW0gb2YgZW50cmllcyAqLworCXU4ICAgICAJbXNfbWFbMjU2XTsKK307CisKK3N0cnVjdCBmY19nbWFsX2VudHJ5X3MgeworCXU4ICBsZW47CisJdTggIHByZWZpeFs3XTsgLyogbGlrZSAiaHR0cDovLyIgKi8KKwl1OCAgaXBfYWRkclsyNDhdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaApAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX0hfXworI2RlZmluZSBfX0ZDX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGaWJyZSBDaGFubmVsIEhlYWRlciBTdHJ1Y3R1cmUgKEZDSFMpIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZjaHNfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJvdXRpbmc6NDsJLyogcm91dGluZyBiaXRzICovCisJdTMyICAgICAgICBjYXRfaW5mbzo0OwkvKiBjYXRlZ29yeSBpbmZvICovCisjZWxzZQorCXUzMiAgICAgICAgY2F0X2luZm86NDsJLyogY2F0ZWdvcnkgaW5mbyAqLworCXUzMiAgICAgICAgcm91dGluZzo0OwkvKiByb3V0aW5nIGJpdHMgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgZF9pZDoyNDsJLyogZGVzdGluYXRpb24gaWRlbnRpZmllciAqLworCisJdTMyICAgICAgICBjc19jdGw6ODsJLyogY2xhc3Mgc3BlY2lmaWMgY29udHJvbCAqLworCXUzMiAgICAgICAgc19pZDoyNDsJLyogc291cmNlIGlkZW50aWZpZXIgKi8KKworCXUzMiAgICAgICAgdHlwZTo4OwkJLyogZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworCXUzMiAgICAgICAgZl9jdGw6MjQ7CS8qIGluaXRpYWwgZnJhbWUgY29udHJvbCAqLworCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiBzZXF1ZW5jZSBpZGVudGlmaWVyICovCisJdTggICAgICAgICBkZl9jdGw7CQkvKiBkYXRhIGZpZWxkIGNvbnRyb2wgKi8KKwl1MTYgICAgICAgIHNlcV9jbnQ7CS8qIHNlcXVlbmNlIGNvdW50ICovCisKKwl1MTYgICAgICAgIG94X2lkOwkJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUxNiAgICAgICAgcnhfaWQ7CQkvKiByZXNwb25kZXIgZXhjaGFuZ2UgSUQgKi8KKworCXUzMiAgICAgICAgcm87CQkvKiByZWxhdGl2ZSBvZmZzZXQgKi8KK307CisvKgorICogRmlicmUgQ2hhbm5lbCBCQl9FIEhlYWRlciBTdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjYmJlaHNfcyB7CisJdTE2CXZlcl9yc3ZkOworCXUzMglyc3ZkWzJdOworCXUzMglyc3ZkX19zb2Y7Cit9OworCisjZGVmaW5lIEZDX1NFUV9JRF9NQVgJCTI1NgorCisvKgorICogcm91dGluZyBiaXQgZGVmaW5pdGlvbnMKKyAqLworZW51bSB7CisJRkNfUlRHX0ZDNF9ERVZfREFUQQk9IDB4MCwJLyogRkMtNCBEZXZpY2UgRGF0YSAqLworCUZDX1JUR19FWFRfTElOSwkJPSAweDIsCS8qIEV4dGVuZGVkIExpbmsgRGF0YSAqLworCUZDX1JUR19GQzRfTElOS19EQVRBCT0gMHgzLAkvKiBGQy00IExpbmsgRGF0YSAqLworCUZDX1JUR19WSURFT19EQVRBCT0gMHg0LAkvKiBWaWRlbyBEYXRhICovCisJRkNfUlRHX0VYVF9IRFIJCT0gMHg1LAkvKiBWRlQsIElGUiBvciBFbmNhcHN1bGVkICovCisJRkNfUlRHX0JBU0lDX0xJTksJPSAweDgsCS8qIEJhc2ljIExpbmsgZGF0YSAqLworCUZDX1JUR19MSU5LX0NUUkwJPSAweEMsCS8qIExpbmsgQ29udHJvbCAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBleHRlbmRlZCBsaW5rIGRhdGEgYW5kIEZDLTQgTGluayBEYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9MRF9SRVFVRVNUCT0gMHgyLAkvKiBSZXF1ZXN0ICovCisJRkNfQ0FUX0xEX1JFUExZCQk9IDB4MywJLyogUmVwbHkgKi8KKwlGQ19DQVRfTERfRElBRwkJPSAweEYsCS8qIGZvciBESUFHIHVzZSBvbmx5ICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIGV4dGVuZGVkIGhlYWRlcnMgKFZGVCwgSUZSIG9yIGVuY2Fwc3VsYXRpb24pCisgKi8KK2VudW0geworCUZDX0NBVF9WRlRfSERSID0gMHgwLAkvKiBWaXJ0dWFsIGZhYnJpYyB0YWdnaW5nIGhlYWRlciAqLworCUZDX0NBVF9JRlJfSERSID0gMHgxLAkvKiBJbnRlci1GYWJyaWMgcm91dGluZyBoZWFkZXIgKi8KKwlGQ19DQVRfRU5DX0hEUiA9IDB4MiwJLyogRW5jYXBzdWxhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgRkMtNCBkZXZpY2UgZGF0YQorICovCitlbnVtIHsKKwlGQ19DQVRfVU5DQVRFR19JTkZPCT0gMHgwLAkvKiBVbmNhdGVnb3JpemVkIGluZm9ybWF0aW9uICovCisJRkNfQ0FUX1NPTElDSVRfREFUQQk9IDB4MSwJLyogU29saWNpdGVkIERhdGEgKi8KKwlGQ19DQVRfVU5TT0xJQ0lUX0NUUkwJPSAweDIsCS8qIFVuc29saWNpdGVkIENvbnRyb2wgKi8KKwlGQ19DQVRfU09MSUNJVF9DVFJMCT0gMHgzLAkvKiBTb2xpY2l0ZWQgQ29udHJvbCAqLworCUZDX0NBVF9VTlNPTElDSVRfREFUQQk9IDB4NCwJLyogVW5zb2xpY2l0ZWQgRGF0YSAqLworCUZDX0NBVF9EQVRBX0RFU0MJPSAweDUsCS8qIERhdGEgRGVzY3JpcHRvciAqLworCUZDX0NBVF9VTlNPTElDSVRfQ01ECT0gMHg2LAkvKiBVbnNvbGljaXRlZCBDb21tYW5kICovCisJRkNfQ0FUX0NNRF9TVEFUVVMJPSAweDcsCS8qIENvbW1hbmQgU3RhdHVzICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIExpbmsgQ29udHJvbAorICovCitlbnVtIHsKKwlGQ19DQVRfQUNLXzEJCT0gMHgwMCwKKwlGQ19DQVRfQUNLXzBfTgkJPSAweDAxLAorCUZDX0NBVF9QX1JKVAkJPSAweDAyLAorCUZDX0NBVF9GX1JKVAkJPSAweDAzLAorCUZDX0NBVF9QX0JTWQkJPSAweDA0LAorCUZDX0NBVF9GX0JTWV9EQVRBCT0gMHgwNSwKKwlGQ19DQVRfRl9CU1lfTElOS19DVEwJPSAweDA2LAorCUZDX0NBVF9GX0xDUgkJPSAweDA3LAorCUZDX0NBVF9OVFkJCT0gMHgwOCwKKwlGQ19DQVRfRU5ECQk9IDB4MDksCit9OworCisvKgorICogVHlwZSBGaWVsZCBEZWZpbml0aW9ucy4gRkMtUEggU2VjdGlvbiAxOC41IHBnLiAxNjUKKyAqLworZW51bSB7CisJRkNfVFlQRV9CTFMJCT0gMHgwLAkvKiBCYXNpYyBMaW5rIFNlcnZpY2UgKi8KKwlGQ19UWVBFX0VMUwkJPSAweDEsCS8qIEV4dGVuZGVkIExpbmsgU2VydmljZSAqLworCUZDX1RZUEVfSVAJCT0gMHg1LAkvKiBJUCAqLworCUZDX1RZUEVfRkNQCQk9IDB4OCwJLyogU0NTSS1GQ1AgKi8KKwlGQ19UWVBFX0dQUAkJPSAweDksCS8qIFNDU0lfR1BQICovCisJRkNfVFlQRV9TRVJWSUNFUwk9IDB4MjAsCS8qIEZpYnJlIENoYW5uZWwgU2VydmljZXMgKi8KKwlGQ19UWVBFX0ZDX0ZTUwkJPSAweDIyLAkvKiBGYWJyaWMgU3dpdGNoIFNlcnZpY2VzICovCisJRkNfVFlQRV9GQ19BTAkJPSAweDIzLAkvKiBGQy1BTCAqLworCUZDX1RZUEVfRkNfU05NUAkJPSAweDI0LAkvKiBGQy1TTk1QICovCisJRkNfVFlQRV9NQVgJCT0gMjU2LAkvKiAyNTYgRkMtNCB0eXBlcyAqLworfTsKKworc3RydWN0IGZjX2ZjNHR5cGVzX3N7CisJdTggICAgICAgICBiaXRzW0ZDX1RZUEVfTUFYIC8gOF07Cit9OworCisvKgorICogRnJhbWUgQ29udHJvbCBEZWZpbml0aW9ucy4gRkMtUEggVGFibGUtNDUuIHBnLiAxNjgKKyAqLworZW51bSB7CisJRkNUTF9FQ19PUklHID0gMHgwMDAwMDAsCS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwlGQ1RMX0VDX1JFU1AgPSAweDgwMDAwMCwJLyogZXhjaGFuZ2UgcmVzcG9uZGVyICovCisJRkNUTF9TRVFfSU5JID0gMHgwMDAwMDAsCS8qIHNlcXVlbmNlIGluaXRpYXRvciAqLworCUZDVExfU0VRX1JFQyA9IDB4NDAwMDAwLAkvKiBzZXF1ZW5jZSByZWNpcGllbnQgKi8KKwlGQ1RMX0ZTX0VYQ0ggPSAweDIwMDAwMCwJLyogZmlyc3Qgc2VxdWVuY2Ugb2YgeGNoZyAqLworCUZDVExfTFNfRVhDSCA9IDB4MTAwMDAwLAkvKiBsYXN0IHNlcXVlbmNlIG9mIHhjaGcgKi8KKwlGQ1RMX0VORF9TRVEgPSAweDA4MDAwMCwJLyogbGFzdCBmcmFtZSBvZiBzZXF1ZW5jZSAqLworCUZDVExfU0lfWEZFUiA9IDB4MDEwMDAwLAkvKiBzZXEgaW5pdGlhdGl2ZSB0cmFuc2ZlciAqLworCUZDVExfUk9fUFJFU0VOVCA9IDB4MDAwMDA4LAkvKiByZWxhdGl2ZSBvZmZzZXQgcHJlc2VudCAqLworCUZDVExfRklMTEJZVEVfTUFTSyA9IDB4MDAwMDAzCS8qICwgZmlsbCBieXRlIG1hc2sgKi8KK307CisKKy8qCisgKiBGYWJyaWMgV2VsbCBLbm93biBBZGRyZXNzZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1dFTExfS05PV05fQUREUgkJPSAweEZGRkZGMCwKKwlGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIAk9IDB4RkZGQzAwLAorCUZDX0FMSUFTX1NFUlZFUgkJCT0gMHhGRkZGRjgsCisJRkNfTUdNVF9TRVJWRVIJCQk9IDB4RkZGRkZBLAorCUZDX1RJTUVfU0VSVkVSCQkJPSAweEZGRkZGQiwKKwlGQ19OQU1FX1NFUlZFUgkJCT0gMHhGRkZGRkMsCisJRkNfRkFCUklDX0NPTlRST0xMRVIJCT0gMHhGRkZGRkQsCisJRkNfRkFCUklDX1BPUlQJCQk9IDB4RkZGRkZFLAorCUZDX0JST0FEQ0FTVF9TRVJWRVIJCT0gMHhGRkZGRkYKK307CisKKy8qCisgKiBkb21haW4vYXJlYS9wb3J0IGRlZmluZXMKKyAqLworI2RlZmluZSBGQ19ET01BSU5fTUFTSyAgMHhGRjAwMDAKKyNkZWZpbmUgRkNfRE9NQUlOX1NISUZUIDE2CisjZGVmaW5lIEZDX0FSRUFfTUFTSyAgICAweDAwRkYwMAorI2RlZmluZSBGQ19BUkVBX1NISUZUICAgOAorI2RlZmluZSBGQ19QT1JUX01BU0sgICAgMHgwMDAwRkYKKyNkZWZpbmUgRkNfUE9SVF9TSElGVCAgIDAKKworI2RlZmluZSBGQ19HRVRfRE9NQUlOKHApCSgoKHApICYgRkNfRE9NQUlOX01BU0spID4+IEZDX0RPTUFJTl9TSElGVCkKKyNkZWZpbmUgRkNfR0VUX0FSRUEocCkJCSgoKHApICYgRkNfQVJFQV9NQVNLKSA+PiBGQ19BUkVBX1NISUZUKQorI2RlZmluZSBGQ19HRVRfUE9SVChwKQkJKCgocCkgJiBGQ19QT1JUX01BU0spID4+IEZDX1BPUlRfU0hJRlQpCisKKyNkZWZpbmUgRkNfRE9NQUlOX0NUUkxSKHApCShGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIHwgKEZDX0dFVF9ET01BSU4ocCkpKQorCitlbnVtIHsKKwlGQ19SWElEX0FOWSA9IDB4RkZGRlUsCit9OworCisvKgorICogZ2VuZXJpYyBFTFMgY29tbWFuZAorICovCitzdHJ1Y3QgZmNfZWxzX2NtZF9zeworCXUzMiAgICAgICAgZWxzX2NvZGU6ODsJLyogRUxTIENvbW1hbmQgQ29kZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6MjQ7Cit9OworCisvKgorICogRUxTIENvbW1hbmQgQ29kZXMuIEZDLVBIIFRhYmxlLTc1LiBwZy4gMjIzCisgKi8KK2VudW0geworCUZDX0VMU19MU19SSlQgPSAweDEsCS8qIExpbmsgU2VydmljZSBSZWplY3QuICovCisJRkNfRUxTX0FDQyA9IDB4MDIsCS8qIEFjY2VwdCAqLworCUZDX0VMU19QTE9HSSA9IDB4MDMsCS8qIE5fUG9ydCBMb2dpbi4gKi8KKwlGQ19FTFNfRkxPR0kgPSAweDA0LAkvKiBGX1BvcnQgTG9naW4uICovCisJRkNfRUxTX0xPR08gPSAweDA1LAkvKiBMb2dvdXQuICovCisJRkNfRUxTX0FCVFggPSAweDA2LAkvKiBBYm9ydCBFeGNoYW5nZSAqLworCUZDX0VMU19SRVMgPSAweDA4LAkvKiBSZWFkIEV4Y2hhbmdlIHN0YXR1cyAqLworCUZDX0VMU19SU1MgPSAweDA5LAkvKiBSZWFkIHNlcXVlbmNlIHN0YXR1cyBibG9jayAqLworCUZDX0VMU19SU0kgPSAweDBBLAkvKiBSZXF1ZXN0IFNlcXVlbmNlIEluaXRpYXRpdmUgKi8KKwlGQ19FTFNfRVNUQyA9IDB4MEMsCS8qIEVzdGltYXRlIENyZWRpdC4gKi8KKwlGQ19FTFNfUlRWID0gMHgwRSwJLyogUmVhZCBUaW1lb3V0IFZhbHVlLiAqLworCUZDX0VMU19STFMgPSAweDBGLAkvKiBSZWFkIExpbmsgU3RhdHVzLiAqLworCUZDX0VMU19FQ0hPID0gMHgxMCwJLyogRWNobyAqLworCUZDX0VMU19URVNUID0gMHgxMSwJLyogVGVzdCAqLworCUZDX0VMU19SUlEgPSAweDEyLAkvKiBSZWluc3RhdGUgUmVjb3ZlcnkgUXVhbGlmaWVyLiAqLworCUZDX0VMU19SRUMgPSAweDEzLAkvKiBBZGQgdGhpcyBmb3IgVEFQRSBzdXBwb3J0IGluIEZDUiAqLworCUZDX0VMU19QUkxJID0gMHgyMCwJLyogUHJvY2VzcyBMb2dpbiAqLworCUZDX0VMU19QUkxPID0gMHgyMSwJLyogUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1NDTiA9IDB4MjIsCS8qIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24uICovCisJRkNfRUxTX1RQUkxPID0gMHgyNCwJLyogVGhpcmQgUGFydHkgUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1BESVNDID0gMHg1MCwJLyogRGlzY292ZXIgTl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0ZESVNDID0gMHg1MSwJLyogRGlzY292ZXIgRl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0FESVNDID0gMHg1MiwJLyogRGlzY292ZXIgQWRkcmVzcy4gKi8KKwlGQ19FTFNfRkFOID0gMHg2MCwJLyogRmFicmljIEFkZHJlc3MgTm90aWZpY2F0aW9uICovCisJRkNfRUxTX1JTQ04gPSAweDYxLAkvKiBSZWcgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAqLworCUZDX0VMU19TQ1IgPSAweDYyLAkvKiBTdGF0ZSBDaGFuZ2UgUmVnaXN0cmF0aW9uLiAqLworCUZDX0VMU19SVElOID0gMHg3NywJLyogTWFuZ2VtZW50IHNlcnZlciByZXF1ZXN0ICovCisJRkNfRUxTX1JOSUQgPSAweDc4LAkvKiBNYW5nZW1lbnQgc2VydmVyIHJlcXVlc3QgKi8KKwlGQ19FTFNfUkxJUiA9IDB4NzksCS8qIFJlZ2lzdGVyZWQgTGluayBJbmNpZGVudCBSZWNvcmQgKi8KKworCUZDX0VMU19SUFNDID0gMHg3RCwJLyogUmVwb3J0IFBvcnQgU3BlZWQgQ2FwYWJpbGl0aWVzICovCisJRkNfRUxTX1FTQSA9IDB4N0UsCS8qIFF1ZXJ5IFNlY3VyaXR5IEF0dHJpYnV0ZXMuIFJlZiBGQy1TUCAqLworCUZDX0VMU19FMkVfTEJFQUNPTiA9IDB4ODEsCisJCQkJLyogRW5kLXRvLUVuZCBMaW5rIEJlYWNvbiAqLworCUZDX0VMU19BVVRIID0gMHg5MCwJLyogQXV0aGVudGljYXRpb24uIFJlZiBGQy1TUCAqLworCUZDX0VMU19SRkNOID0gMHg5NywJLyogUmVxdWVzdCBGYWJyaWMgQ2hhbmdlIE5vdGlmaWNhdGlvbi4gUmVmCisJCQkJICpGQy1TUCAqLworCit9OworCisvKgorICogIFZlcnNpb24gbnVtYmVycyBmb3IgRkMtUEggc3RhbmRhcmRzLAorICogIHVzZWQgaW4gbG9naW4gdG8gaW5kaWNhdGUgd2hhdCBwb3J0CisgKiAgc3VwcG9ydHMuIFNlZSBGQy1QSC1YIHRhYmxlIDE1OC4KKyAqLworZW51bSB7CisJRkNfUEhfVkVSXzRfMyA9IDB4MDksCisJRkNfUEhfVkVSX1BIXzMgPSAweDIwLAorfTsKKworLyoKKyAqIFBEVSBzaXplIGRlZmluZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1BEVVNaID0gNTEyLAorCUZDX01BWF9QRFVTWiA9IDIxMTIsCit9OworCisvKgorICogTl9Qb3J0IFBMT0dJIENvbW1vbiBTZXJ2aWNlIFBhcmFtZXRlcnMuCisgKiBGQy1QSC14LiBGaWd1cmUtNzYuIHBnLiAzMDguCisgKi8KK3N0cnVjdCBmY19wbG9naV9jc3Bfc3sKKwl1OCAgICAgICAgIHZlcmhpOwkvKiBGQy1QSCBoaWdoIHZlcnNpb24gKi8KKwl1OCAgICAgICAgIHZlcmxvOwkvKiBGQy1QSCBsb3cgdmVyc2lvbiAqLworCXUxNiAgICAgICAgYmJjcmVkOwkvKiBCQl9DcmVkaXQgKi8KKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBjaXJvOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBSTyAqLworCQkJcnJvOjEsCQkvKiByYW5kb20gcmVsYXRpdmUgb2Zmc2V0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlhbHRiYmNyZWQ6MSwJLyogYWx0ZXJuYXRlIEJCX0NyZWRpdCAqLworCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJdnZsX2luZm86MSwJLyogVlZMIEluZm8gaW5jbHVkZWQgKi8KKwkJCXJlc2VydmVkMToxOworCisJdTggICAgICAgICBoZ19zdXBwOjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlzeW5jX2NhcDoxLAorCQkJcl90X3RvdjoxLAorCQkJZGhfZHVwX3N1cHA6MSwKKwkJCWNpc2M6MSwJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIHNlcSBjb3VudCAqLworCQkJcGF5bG9hZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyLAorCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJYWx0YmJjcmVkOjEsCS8qIGFsdGVybmF0ZSBCQl9DcmVkaXQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLworCQkJY2lybzoxOwkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KKworCXU4ICAgICAgICAgcGF5bG9hZDoxLAorCQkJY2lzYzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgc2VxIGNvdW50ICovCisJCQlkaF9kdXBfc3VwcDoxLAorCQkJcl90X3RvdjoxLAorCQkJc3luY19jYXA6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCWhnX3N1cHA6MTsKKyNlbmRpZgorCisJdTE2ICAgICAgICByeHN6OwkJLyogcmVjaWV2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUxNiAgICAgICAgY29uc2VxOworCXUxNiAgICAgICAgcm9fYml0bWFwOworCisJdTMyICAgICAgICBlX2RfdG92OworfTsKKworLyoKKyAqIE5fUG9ydCBQTE9HSSBDbGFzcyBTcGVjaWZpYyBQYXJhbWV0ZXJzLgorICogRkMtUEgteC4gRmlndXJlIDc4LiBwZy4gMzE4LgorICovCitzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIGNsYXNzX3ZhbGlkOjE7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworCXUzMiAgICAgICAgc2VxdWVudGlhbDoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICBjbGFzc192YWxpZDoxOworI2VuZGlmCisKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ0OjE2OworCXUzMiAgICAgICAgcnhzejoxNjsJLyogUmVjZWl2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ1Ojg7CisJdTMyICAgICAgICBjb25zZXE6ODsKKwl1MzIgICAgICAgIGUyZV9jcmVkaXQ6MTY7CS8qIGVuZCB0byBlbmQgY3JlZGl0ICovCisKKwl1MzIgICAgICAgIHJlc2VydmVkNzo4OworCXUzMiAgICAgICAgb3NweDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ4OjE2OworfTsKKworI2RlZmluZSBGTE9HSV9WVkxfQlJDRCAgICAweDQyNTI0MzQ0IC8qIEFTQ0lJIHZhbHVlIGZvciBlYWNoIGNoYXJhY3RlciBpbgorCQkJCSAgICAgICogc3RyaW5nICJCUkNEIiAqLworCisvKgorICogUExPR0kgZWxzIGNvbW1hbmQgYW5kIHJlcGx5IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2xvZ2lfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY3NwX3MgIGNzcDsJCS8qIGNvbW1vbiBzZXJ2aWNlIHBhcmFtcyAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzMTsJCS8qIGNsYXNzIDEgc2VydmljZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczI7CQkvKiBjbGFzcyAyIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3MzOwkJLyogY2xhc3MgMyBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzNDsJCS8qIGNsYXNzIDQgc2VydmljZSBwYXJhbWV0ZXJzICovCisJdTggICAgICAgICB2dmxbMTZdOwkvKiB2ZW5kb3IgdmVyc2lvbiBsZXZlbCAqLworfTsKKworLyoKKyAqIExPR08gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfbG9nb19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX3BvcnRfbmFtZTsJLyogUG9ydCBuYW1lIG9mIHRoZSBMT0dPIG9yaWdpbmF0b3IgKi8KK307CisKKy8qCisgKiBBRElTQyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19hZGlzY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfSEE6MjQ7CS8qIG9yaWdpbmF0b3IgaGFyZCBhZGRyZXNzICovCisJd3duX3QgICAgICAgICAgIG9yaWdfcG9ydF9uYW1lOwkvKiBvcmlnaW5hdG9yIHBvcnQgbmFtZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX25vZGVfbmFtZTsJLyogb3JpZ2luYXRvciBub2RlIG5hbWUgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KK307CisKKy8qCisgKiBFeGNoYW5nZSBzdGF0dXMgYmxvY2sKKyAqLworc3RydWN0IGZjX2V4Y2hfc3RhdHVzX2Jsa19zeworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7CisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX25wOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfbnA6MjQ7CS8qIHJlc3BvbmRlciBOUG9ydElEICovCisJdTMyICAgICAgICBlc19iaXRzOworCXUzMiAgICAgICAgcmVzMzsKKwkvKgorCSAqIHVuIG1vZGlmaWVkIHNlY3Rpb24gb2YgdGhlIGZpZWxkcworCSAqLworfTsKKworLyoKKyAqIFJFUyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZXNfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKKwl1OCAgICAgICAgIGFzc29jX2hkclszMl07Cit9OworCisvKgorICogUkVTIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVzX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXN0cnVjdCBmY19leGNoX3N0YXR1c19ibGtfcyBmY19leGNoX2JsazsgLyogRXhjaGFuZ2Ugc3RhdHVzIGJsb2NrICovCit9OworCisvKgorICogUkVDIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JlY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBOX1BvcnQgaWRlbnRpZmllciBvZiBzb3VyY2UgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworfTsKKworI2RlZmluZSBGQ19SRUNfRVNCX09XTl9SU1AJMHg4MDAwMDAwMAkvKiByZXNwb25kZXIgb3ducyAqLworI2RlZmluZSBGQ19SRUNfRVNCX1NJCQkweDQwMDAwMDAwCS8qIFNJIGlzIG93bmVkIAkqLworI2RlZmluZSBGQ19SRUNfRVNCX0NPTVAJCTB4MjAwMDAwMDAJLyogZXhjaGFuZ2UgaXMgY29tcGxldGUJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9FTkRDT05EX0FCTgkweDEwMDAwMDAwCS8qIGFibm9ybWFsIGVuZGluZyAJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9SUUFDVAkweDA0MDAwMDAwCS8qIHJlY292ZXJ5IHF1YWwgYWN0aXZlCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfRVJSUF9NU0sJMHgwMzAwMDAwMAorI2RlZmluZSBGQ19SRUNfRVNCX09YSURfSU5WCTB4MDA4MDAwMDAJLyogaW52YWxpZCBPWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1JYSURfSU5WCTB4MDA0MDAwMDAJLyogaW52YWxpZCBSWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1BSSU9fSU5VU0UJMHgwMDIwMDAwMAorCisvKgorICogUkVDIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVjX2FjY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19pZDoyNDsJLyogTl9Qb3J0IGlkIG9mIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfaWQ6MjQ7CS8qIE5fUG9ydCBpZCBvZiBleGNoYW5nZSByZXNwb25kZXIgKi8KKwl1MzIgICAgICAgIGNvdW50OwkJLyogZGF0YSB0cmFuc2ZlciBjb3VudCAqLworCXUzMiAgICAgICAgZV9zdGF0OwkJLyogZXhjaGFuZ2Ugc3RhdHVzICovCit9OworCisvKgorICogUlNJIGVscyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yc2lfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19zaWQ6MjQ7CisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKK307CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFBSTEkgcGFyYW1hdGVyIHBhZ2VzLCBib3RoIHJlcXVlc3QgJiByZXNwb25zZQorICogc2VlIEZDLVBILVggdGFibGUgMTEzICYgMTE1IGZvciBleHBsYW5hdGlvbiBhbHNvIEZDUCB0YWJsZSA4CisgKi8KK3N0cnVjdCBmY19wcmxpX3BhcmFtc19zeworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6IDE2OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICB0YXNrX3JldHJ5X2lkIDogMTsKKwl1MzIgICAgICAgIHJldHJ5IDogMTsKKworCXUzMiAgICAgICAgY29uZmlybSA6IDE7CisJdTMyICAgICAgICBkb3ZlcmxheToxOworCXUzMiAgICAgICAgaW5pdGlhdG9yOjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICBkcm1peDoxOworCXUzMiAgICAgICAgcnhyZGlzYWI6MTsKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisjZWxzZQorCXUzMiAgICAgICAgcmV0cnkgOiAxOworCXUzMiAgICAgICAgdGFza19yZXRyeV9pZCA6IDE7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisJdTMyICAgICAgICByeHJkaXNhYjoxOworCXUzMiAgICAgICAgZHJtaXg6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGluaXRpYXRvcjoxOworCXUzMiAgICAgICAgZG92ZXJsYXk6MTsKKwl1MzIgICAgICAgIGNvbmZpcm0gOiAxOworI2VuZGlmCit9OworCisvKgorICogdmFsaWQgdmFsdWVzIGZvciByc3Bjb2RlIGluIFBSTEkgQUNDIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfUFJMSV9BQ0NfWFFURCA9IDB4MSwJCS8qIHJlcXVlc3QgZXhlY3V0ZWQgKi8KKwlGQ19QUkxJX0FDQ19QUkVERUZfSU1HID0gMHg1LAkvKiBwcmVkZWZpbmVkIGltYWdlIC0gbm8gcHJsaSBuZWVkZWQgKi8KK307CisKK3N0cnVjdCBmY19wcmxpX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICBjb2RleHQ6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3JpZ3Byb2Nhc3Y6MTsKKwl1MzIgICAgICAgIHJzcHBhdjoxOworCXUzMiAgICAgICAgaW1hZ2VwYWlyOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHJzcGNvZGU6NDsKKyNlbHNlCisJdTMyICAgICAgICByc3Bjb2RlOjQ7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIGltYWdlcGFpcjoxOworCXUzMiAgICAgICAgcnNwcGF2OjE7CisJdTMyICAgICAgICBvcmlncHJvY2FzdjoxOworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDI6ODsKKworCXUzMiAgICAgICAgb3JpZ3Byb2NhczsKKwl1MzIgICAgICAgIHJzcHByb2NhczsKKwlzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcyAgc2VydnBhcmFtczsKK307CisKKy8qCisgKiBQUkxJIHJlcXVlc3QgYW5kIGFjY2VwdCBwYXlsb2FkLCBGQy1QSC1YIHRhYmxlcyAxMTIgJiAxMTQKKyAqLworc3RydWN0IGZjX3BybGlfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBnbGVuOjg7CisJdTMyICAgICAgICBwYWdlYnl0ZXM6MTY7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3BhZ2VfcyBwYXJhbXBhZ2U7Cit9OworCisvKgorICogUFJMTyBsb2dvdXQgcGFyYW1zIHBhZ2UKKyAqLworc3RydWN0IGZjX3BybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICByZXMxOjE0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTQ7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworI2VuZGlmCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOworfTsKKworLyoKKyAqIFBSTE8gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19zeworCXUzMiAgICAgICAgCWNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIAlwYWdlX2xlbjo4OworCXUzMiAgICAgICAgCXBheWxvYWRfbGVuOjE2OworCXN0cnVjdCBmY19wcmxvX3BhcmFtc19wYWdlX3MgCXBybG9fcGFyYW1zWzFdOworfTsKKworLyoKKyAqIFBSTE8gTG9nb3V0IHJlc3BvbnNlIHBhcmFtZXRlciBwYWdlCisgKi8KK3N0cnVjdCBmY19wcmxvX2FjY19wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgcmVzMToxNDsKKyNlbHNlCisJdTMyICAgICAgICByZXMxOjE0OworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CisJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKKworCXUzMiAgICAgICAgZmM0dHlwZV9jc3A7Cit9OworCisvKgorICogUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19hY2Nfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcGFyYW1zX3BhZ2VfcyBwcmxvX2FjY19wYXJhbXNbMV07Cit9OworCisvKgorICogU0NSIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfU0NSX1JFR19GVU5DX0ZBQlJJQ19ERVRFQ1RFRCA9IDB4MDEsCisJRkNfU0NSX1JFR19GVU5DX05fUE9SVF9ERVRFQ1RFRCA9IDB4MDIsCisJRkNfU0NSX1JFR19GVU5DX0ZVTEwgPSAweDAzLAorCUZDX1NDUl9SRUdfRlVOQ19DTEVBUl9SRUcgPSAweEZGLAorfTsKKworLyogU0NSIFZVIHJlZ2lzdHJhdGlvbnMgKi8KK2VudW0geworCUZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0UgPSAweDAxCit9OworCitzdHJ1Y3QgZmNfc2NyX3N7CisJdTMyIGNvbW1hbmQ6ODsKKwl1MzIgcmVzOjI0OworCXUzMiB2dV9yZWdfZnVuYzo4OyAvKiBWZW5kb3IgVW5pcXVlIFJlZ2lzdHJhdGlvbnMgKi8KKwl1MzIgcmVzMToxNjsKKwl1MzIgcmVnX2Z1bmM6ODsKK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgQmFzaWMgbGluayBkYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9OT1AJPSAweDAsCisJRkNfQ0FUX0FCVFMJPSAweDEsCisJRkNfQ0FUX1JNQwk9IDB4MiwKKwlGQ19DQVRfQkFfQUNDCT0gMHg0LAorCUZDX0NBVF9CQV9SSlQJPSAweDUsCisJRkNfQ0FUX1BSTVQJPSAweDYsCit9OworCisvKgorICogTFNfUkpUIGVscyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19sc19yanRfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgcmVhc29uX2NvZGU6ODsJCS8qIFJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlX2V4cGw6ODsJLyogUmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKi8KKwl1MzIgICAgICAgIHZlbmRvcl91bmlxdWU6ODsJLyogVmVuZG9yIHNwZWNpZmljICovCit9OworCisvKgorICogTFNfUkpUIHJlYXNvbiBjb2RlcworICovCitlbnVtIHsKKwlGQ19MU19SSlRfUlNOX0lOVl9DTURfQ09ERQk9IDB4MDEsCisJRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0VSUk9SCT0gMHgwMywKKwlGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUgk9IDB4MDcsCisJRkNfTFNfUkpUX1JTTl9VTkFCTEVfVE9fUEVSRl9DTUQgPSAweDA5LAorCUZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQCT0gMHgwQiwKK307CisKKy8qCisgKiBMU19SSlQgcmVhc29uIGNvZGUgZXhwbGFuYXRpb24KKyAqLworZW51bSB7CisJRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8JCT0gMHgwMCwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUwk9IDB4MDEsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX0lOSV9DVEwJPSAweDAzLAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9SRUNfQ1RMCT0gMHgwNSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfUlhTWgkJPSAweDA3LAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9DT05TRVEJCT0gMHgwOSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfQ1JFRElUCQk9IDB4MEIsCisJRkNfTFNfUkpUX0VYUF9JTlZfUE9SVF9OQU1FCQk9IDB4MEQsCisJRkNfTFNfUkpUX0VYUF9JTlZfTk9ERV9GQUJSSUNfTkFNRQk9IDB4MEUsCisJRkNfTFNfUkpUX0VYUF9JTlZfQ1NQCQkJPSAweDBGLAorCUZDX0xTX1JKVF9FWFBfSU5WX0FTU09DX0hEUgkJPSAweDExLAorCUZDX0xTX1JKVF9FWFBfQVNTT0NfSERSX1JFUUQJCT0gMHgxMywKKwlGQ19MU19SSlRfRVhQX0lOVl9PUklHX1NfSUQJCT0gMHgxNSwKKwlGQ19MU19SSlRfRVhQX0lOVl9PWElEX1JYSURfQ09NQgk9IDB4MTcsCisJRkNfTFNfUkpUX0VYUF9DTURfQUxSRUFEWV9JTl9QUk9HCT0gMHgxOSwKKwlGQ19MU19SSlRfRVhQX0xPR0lOX1JFUVVJUkVECQk9IDB4MUUsCisJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lECQk9IDB4MUYsCisJRkNfTFNfUkpUX0VYUF9JTlNVRkZfUkVTCQk9IDB4MjksCisJRkNfTFNfUkpUX0VYUF9DTURfTk9UX1NVUFAJCT0gMHgyQywKKwlGQ19MU19SSlRfRVhQX0lOVl9QQVlMT0FEX0xFTgkJPSAweDJELAorfTsKKworLyoKKyAqIFJSUSBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ycnFfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIHNfaWQ6MjQ7CS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgU19JRCAqLworCisJdTMyICAgICAgICBveF9pZDoxNjsJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJlc3BvbmRlciBleGNoYW5nZSBJRCAqLworCisJdTMyICAgICAgICByZXMyWzhdOwkvKiBvcHRpb25hbCBhc3NvY2lhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBBQlRTIEJBX0FDQyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19iYV9hY2Nfc3sKKwl1MzIgICAgICAgIHNlcV9pZF92YWxpZDo4OwkvKiBzZXQgdG8gMHgwMCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIHNlcV9pZDo4OwkvKiBpbnZhbGlkIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgcmVzMjoxNjsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBPWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiBSWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIGxvd19zZXFfY250OjE2OwkvKiBzZXQgdG8gMHgwMDAwIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgaGlnaF9zZXFfY250OjE2Oy8qIHNldCB0byAweEZGRkYgZm9yIEFib3J0IEV4Y2hhbmdlICovCit9OworCisvKgorICogQUJUUyBCQV9SSlQgcmVqZWN0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2JhX3JqdF9zeworCXUzMiAgICAgICAgcmVzMTo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CS8qIHJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9leHBsOjg7CS8qIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCisJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlOjg7LyogdmVuZG9yIHVuaXF1ZSByZWFzb24gY29kZSxzZXQgdG8gMCAqLworfTsKKworLyoKKyAqIFRQUkxPIGxvZ291dCBwYXJhbWV0ZXIgcGFnZQorICovCitzdHJ1Y3QgZmNfdHBybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgZ2xvYmFsX3Byb2Nlc3NfbG9nb3V0OjE7CisJdTMyICAgICAgICByZXMxOjEyOworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTI7CisJdTMyICAgICAgICBnbG9iYWxfcHJvY2Vzc19sb2dvdXQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsKKyNlbmRpZgorCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICB0cG9fbnBvcnRfaWQ7Cit9OworCisvKgorICogVFBSTE8gRUxTIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKworCXN0cnVjdCBmY190cHJsb19wYXJhbXNfcGFnZV9zIHRwcmxvX3BhcmFtc1sxXTsKK307CisKK2VudW0gZmNfdHBybG9fdHlwZXsKKwlGQ19HTE9CQUxfTE9HTyA9IDEsCisJRkNfVFBSX0xPR08KK307CisKKy8qCisgKiBUUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fYWNjX3N7CisJdTMyCWNvbW1hbmQ6ODsKKwl1MzIJcGFnZV9sZW46ODsKKwl1MzIJcGF5bG9hZF9sZW46MTY7CisJc3RydWN0IGZjX3BybG9fYWNjX3BhcmFtc19wYWdlX3MgdHBybG9fYWNjX3BhcmFtc1sxXTsKK307CisKKy8qCisgKiBSU0NOIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KKyNkZWZpbmUgRkNfUlNDTl9QR0xFTgkweDQKKworZW51bSBmY19yc2NuX2Zvcm1hdHsKKwlGQ19SU0NOX0ZPUk1BVF9QT1JUSUQJPSAweDAsCisJRkNfUlNDTl9GT1JNQVRfQVJFQQk9IDB4MSwKKwlGQ19SU0NOX0ZPUk1BVF9ET01BSU4JPSAweDIsCisJRkNfUlNDTl9GT1JNQVRfRkFCUklDCT0gMHgzLAorfTsKKworc3RydWN0IGZjX3JzY25fZXZlbnRfc3sKKwl1MzIgICAgICAgIGZvcm1hdDoyOworCXUzMiAgICAgICAgcXVhbGlmaWVyOjQ7CisJdTMyICAgICAgICByZXN2ZDoyOworCXUzMiAgICAgICAgcG9ydGlkOjI0OworfTsKKworc3RydWN0IGZjX3JzY25fcGxfc3sKKwl1OCAgICAgICAgIGNvbW1hbmQ7CisJdTggICAgICAgICBwYWdlbGVuOworCXUxNiAgICAgICAgcGF5bGRsZW47CisJc3RydWN0IGZjX3JzY25fZXZlbnRfcyBldmVudFsxXTsKK307CisKKy8qCisgKiBFQ0hPIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19lY2hvX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKK307CisKKy8qCisgKiBSTklEIGVscyBjb21tYW5kCisgKi8KKworI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9DT01NT04gICAgCQkgMHgwMAorI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9GQ1AzICAgICAgICAJCSAweDA4CisjZGVmaW5lIFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0RJU0NPVkVSWSAgICAgCQkweERGCisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCisvKgorICogUk5JRCBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ybmlkX2NtZF9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkOjI0OworfTsKKworLyoKKyAqIFJOSUQgZWxzIHJlc3BvbnNlIHBheWxvYWQKKyAqLworCitzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKK307CisKK3N0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zeworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZVs0XTsKKwl1MzIgICAgICAgIGFzc29fdHlwZTsKKwl1MzIgICAgICAgIHBoeV9wb3J0X251bTsKKwl1MzIgICAgICAgIG51bV9hdHRhY2hlZF9ub2RlczsKKwl1MzIgICAgICAgIG5vZGVfbWdtdDo4OworCXUzMiAgICAgICAgaXBfdmVyc2lvbjo4OworCXUzMiAgICAgICAgdWRwX3RjcF9wb3J0X251bToxNjsKKwl1MzIgICAgICAgIGlwX2FkZHJlc3NbNF07CisJdTMyICAgICAgICByZXNlcnZlZDoxNjsKKwl1MzIgICAgICAgIHZlbmRvcl9zcGVjaWZpYzoxNjsKK307CisKK3N0cnVjdCBmY19ybmlkX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIGNvbW1vbl9pZF9kYXRhX2xlbmd0aDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6ODsKKwl1MzIgICAgICAgIHNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoOjg7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb2xvZ3lfZGF0YTsKK307CisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCitlbnVtIGZjX3Jwc2Nfc3BlZWRfY2FweworCVJQU0NfU1BFRURfQ0FQXzFHID0gMHg4MDAwLAorCVJQU0NfU1BFRURfQ0FQXzJHID0gMHg0MDAwLAorCVJQU0NfU1BFRURfQ0FQXzRHID0gMHgyMDAwLAorCVJQU0NfU1BFRURfQ0FQXzEwRyA9IDB4MTAwMCwKKwlSUFNDX1NQRUVEX0NBUF84RyA9IDB4MDgwMCwKKwlSUFNDX1NQRUVEX0NBUF8xNkcgPSAweDA0MDAsCisKKwlSUFNDX1NQRUVEX0NBUF9VTktOT1dOID0gMHgwMDAxLAorfTsKKworZW51bSBmY19ycHNjX29wX3NwZWVkX3N7CisJUlBTQ19PUF9TUEVFRF8xRyA9IDB4ODAwMCwKKwlSUFNDX09QX1NQRUVEXzJHID0gMHg0MDAwLAorCVJQU0NfT1BfU1BFRURfNEcgPSAweDIwMDAsCisJUlBTQ19PUF9TUEVFRF8xMEcgPSAweDEwMDAsCisJUlBTQ19PUF9TUEVFRF84RyA9IDB4MDgwMCwKKwlSUFNDX09QX1NQRUVEXzE2RyA9IDB4MDQwMCwKKworCVJQU0NfT1BfU1BFRURfTk9UX0VTVCA9IDB4MDAwMSwJLyohIHNwZWVkIG5vdCBlc3RhYmxpc2hlZCAqLworfTsKKworc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zeworCXUxNiAgICAgICAgcG9ydF9zcGVlZF9jYXA7CS8qISBzZWUgZmNfcnBzY19zcGVlZF9jYXBfdCAqLworCXUxNiAgICAgICAgcG9ydF9vcF9zcGVlZDsJLyohIHNlZSBmY19ycHNjX29wX3NwZWVkX3QgKi8KK307CisKK2VudW0gbGlua19lMmVfYmVhY29uX3N1YmNtZHsKKwlMSU5LX0UyRV9CRUFDT05fT04gPSAxLAorCUxJTktfRTJFX0JFQUNPTl9PRkYgPSAyCit9OworCitlbnVtIGJlYWNvbl90eXBleworCUJFQUNPTl9UWVBFX05PUk1BTAk9IDEsCS8qISBOb3JtYWwgQmVhY29uaW5nLiBHcmVlbiAqLworCUJFQUNPTl9UWVBFX1dBUk4JPSAyLAkvKiEgV2FybmluZyBCZWFjb25pbmcuIFllbGxvdy9BbWJlciAqLworCUJFQUNPTl9UWVBFX0NSSVRJQ0FMCT0gMwkvKiEgQ3JpdGljYWwgQmVhY29uaW5nLiBSZWQgKi8KK307CisKK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcGFyYW1fcyB7CisJdTggICAgICAgICBiZWFjb25fdHlwZTsJLyogQmVhY29uIFR5cGUuIFNlZSBiZWFjb25fdHlwZV90ICovCisJdTggICAgICAgICBiZWFjb25fZnJlcXVlbmN5OworCQkJCQkvKiBCZWFjb24gZnJlcXVlbmN5LiBOdW1iZXIgb2YgYmxpbmtzCisJCQkJCSAqIHBlciAxMCBzZWNvbmRzCisJCQkJCSAqLworCXUxNiAgICAgICAgYmVhY29uX2R1cmF0aW9uOy8qIEJlYWNvbiBkdXJhdGlvbiAoaW4gU2Vjb25kcykuIFRoZQorCQkJCQkgKiBjb21tYW5kIG9wZXJhdGlvbiBzaG91bGQgYmUKKwkJCQkJICogdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoaXMKKwkJCQkJICogdGltZW91dCB2YWx1ZS4KKwkJCQkJICoKKwkJCQkJICogSWdub3JlZCBpZiBkaWFnX3N1Yl9jbWQgaXMKKwkJCQkJICogTElOS19FMkVfQkVBQ09OX09GRi4KKwkJCQkJICoKKwkJCQkJICogSWYgMCwgYmVhY29uaW5nIHdpbGwgY29udGludWUgdGlsbCBhCisJCQkJCSAqIEJFQUNPTiBPRkYgcmVxdWVzdCBpcyByZWNlaXZlZAorCQkJCQkgKi8KK307CisKKy8qCisgKiBMaW5rIEUyRSBiZWFjb24gcmVxdWVzdC9nb29kIHJlc3BvbnNlIGZvcm1hdC4gRm9yIExTX1JKVHMgdXNlIGZjX2xzX3JqdF90CisgKi8KK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcmVxX3N7CisJdTMyICAgICAgICBsc19jb2RlOwkvKiEgRkNfRUxTX0UyRV9MQkVBQ09OIGluIHJlcXVlc3RzICoKKwkJCQkJICpvciBGQ19FTFNfQUNDIGluIGdvb2QgcmVwbGllcyAqLworCXUzMiAgICAgICAgbHNfc3ViX2NtZDsJLyohIFNlZSBsaW5rX2UyZV9iZWFjb25fc3ViY21kX3QgKi8KKwlzdHJ1Y3QgbGlua19lMmVfYmVhY29uX3BhcmFtX3MgYmVhY29uX3Bhcm07Cit9OworCisvKioKKyAqIElmIFJQU0MgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBEb21haW4gQ29udHJvbGxlciwgdGhlIHJlcXVlc3QgaXMgZm9yCisgKiBhbGwgdGhlIHBvcnRzIHdpdGhpbiB0aGF0IGRvbWFpbiAoVE9ETyAtIEkgZG9uJ3QgdGhpbmsgRk9TIGltcGxlbWVudHMKKyAqIHRoaXMuLi4pLgorICovCitzdHJ1Y3QgZmNfcnBzY19jbWRfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7Cit9OworCisvKgorICogUlBTQyBBY2MKKyAqLworc3RydWN0IGZjX3Jwc2NfYWNjX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICByc3ZkOjg7CisJdTMyICAgICAgICBudW1fZW50cmllczoxNjsKKworCXN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyBzcGVlZF9pbmZvWzFdOworfTsKKworLyoqCisgKiBJZiBSUFNDMiByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIERvbWFpbiBDb250cm9sbGVyLAorICovCisjZGVmaW5lIEZDX0JSQ0RfVE9LRU4gICAgMHg0MjUyNDM0NAorCitzdHJ1Y3QgZmNfcnBzYzJfY21kX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAJdG9rZW47CisJdTE2ICAgICAJcmVzdmQ7CisJdTE2ICAgICAJbnVtX3BpZHM7ICAgICAgIC8qIE51bWJlciBvZiBwaWRzIGluIHRoZSByZXF1ZXN0ICovCisJc3RydWN0ICB7CisJCXUzMglyc3ZkMTo4OworCQl1MzIJcGlkOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl9IHBpZF9saXN0WzFdOworfTsKKworZW51bSBmY19ycHNjMl9wb3J0X3R5cGV7CisJUlBTQzJfUE9SVF9UWVBFX1VOS05PV04gPSAwLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVCAgID0gMSwKKwlSUFNDMl9QT1JUX1RZUEVfTkxQT1JUICA9IDIsCisJUlBTQzJfUE9SVF9UWVBFX05QSVZfUE9SVCAgPSAweDVmLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVF9UUlVOSyAgPSAweDZmLAorfTsKKworLyoKKyAqIFJQU0MyIHBvcnRJbmZvIGVudHJ5IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNfcnBzYzJfcG9ydF9pbmZvX3N7CisgICAgdTMyICAgIHBpZDsgICAgICAgIC8qIFBJRCAqLworICAgIHUxNiAgICByZXN2ZDE7CisgICAgdTE2ICAgIGluZGV4OyAgICAgIC8qIHBvcnQgbnVtYmVyIC8gaW5kZXggKi8KKyAgICB1OCAgICAgcmVzdmQyOworICAgIHU4ICAgIAl0eXBlOyAgICAgICAgLyogcG9ydCB0eXBlIE4vTkwvLi4uICovCisgICAgdTE2ICAgIHNwZWVkOyAgICAgIC8qIHBvcnQgT3BlcmF0aW5nIFNwZWVkICovCit9OworCisvKgorICogUlBTQzIgQWNjZXB0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Jwc2MyX2FjY19zeworCXU4ICAgICAgICBlbHNfY21kOworCXU4ICAgICAgICByZXN2ZDsKKwl1MTYgICAgICAgbnVtX3BpZHM7ICAvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCXN0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fcyAgcG9ydF9pbmZvWzFdOyAgICAvKiBwb3J0IGluZm9ybWF0aW9uICovCit9OworCisvKioKKyAqIGJpdCBmaWVsZHMgc28gdGhhdCBtdWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBzcGVjaWZpZWQKKyAqLworZW51bSBmY19jb3N7CisJRkNfQ0xBU1NfMgk9IDB4MDQsCisJRkNfQ0xBU1NfMwk9IDB4MDgsCisJRkNfQ0xBU1NfMl8zCT0gMHgwQywKK307CisKKy8qCisgKiBzeW1ib2xpYyBuYW1lCisgKi8KK3N0cnVjdCBmY19zeW1uYW1lX3N7CisJdTggICAgICAgICBzeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKK307CisKK3N0cnVjdCBmY19hbHBhYm1fc3sKKwl1OCAgICAgICAgIGFscGFfYm1bRkNfQUxQQV9NQVggLyA4XTsKK307CisKKy8qCisgKiBwcm90b2NvbCBkZWZhdWx0IHRpbWVvdXQgdmFsdWVzCisgKi8KKyNkZWZpbmUgRkNfRURfVE9WCQkyCisjZGVmaW5lIEZDX1JFQ19UT1YJCShGQ19FRF9UT1YgKyAxKQorI2RlZmluZSBGQ19SQV9UT1YJCTEwCisjZGVmaW5lIEZDX0VMU19UT1YJCSgyICogRkNfUkFfVE9WKQorCisvKgorICogdmlydHVhbCBmYWJyaWMgcmVsYXRlZCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgRkNfVkZfSURfTlVMTCAgICAwCS8qICBtdXN0IG5vdCBiZSB1c2VkIGFzIFZGX0lEICovCisjZGVmaW5lIEZDX1ZGX0lEX01JTiAgICAgMQorI2RlZmluZSBGQ19WRl9JRF9NQVggICAgIDB4RUZGCisjZGVmaW5lIEZDX1ZGX0lEX0NUTCAgICAgMHhGRUYJLyogIGNvbnRyb2wgVkZfSUQgKi8KKworLyoqCisgKiBWaXJ0dWFsIEZhYnJpYyBUYWdnaW5nIGhlYWRlciBmb3JtYXQKKyAqIEBjYXV0aW9uIFRoaXMgaXMgZGVmaW5lZCBvbmx5IGluIEJJRyBFTkRJQU4gZm9ybWF0LgorICovCitzdHJ1Y3QgZmNfdmZ0X3N7CisJdTMyICAgICAgICByX2N0bDo4OworCXUzMiAgICAgICAgdmVyOjI7CisJdTMyICAgICAgICB0eXBlOjQ7CisJdTMyICAgICAgICByZXNfYToyOworCXUzMiAgICAgICAgcHJpb3JpdHk6MzsKKwl1MzIgICAgICAgIHZmX2lkOjEyOworCXUzMiAgICAgICAgcmVzX2I6MTsKKwl1MzIgICAgICAgIGhvcGN0Ojg7CisJdTMyICAgICAgICByZXNfYzoyNDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNfc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJiMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX1NQX0hfXworI2RlZmluZSBfX0ZDX1NQX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYXV0aF9lbHNfZmxhZ3N7CisJRkNfQVVUSF9FTFNfTU9SRV9GUkFHU19GTEFHIAk9IDB4ODAsCS8qISBiaXQtNy4gTW9yZSBGcmFnbWVudHMKKwkJCQkJCSAqIEZvbGxvdworCQkJCQkJICovCisJRkNfQVVUSF9FTFNfQ09OQ0FUX0ZMQUcgCT0gMHg0MCwJLyohIGJpdC02LiBDb25jYXRlbmF0aW9uIEZsYWcgKi8KKwlGQ19BVVRIX0VMU19TRVFfTlVNX0ZMQUcgCT0gMHgwMSAJLyohIGJpdC0wLiBTZXF1ZW5jZSBOdW1iZXIgKi8KK307CisKK2VudW0gYXV0aF9tc2dfY29kZXN7CisJRkNfQVVUSF9NQ19BVVRIX1JKVAkJPSAweDBBLAkvKiEgQXV0aCBSZWplY3QgKi8KKwlGQ19BVVRIX01DX0FVVEhfTkVHIAkJPSAweDBCLCAvKiEgQXV0aCBOZWdvdGlhdGUgKi8KKwlGQ19BVVRIX01DX0FVVEhfRE9ORSAJCT0gMHgwQywgLyohIEF1dGggRG9uZSAqLworCisJRkNfQVVUSF9NQ19ESENIQVBfQ0hBTCAJCT0gMHgxMCwgLyohIERIQ0hBUCBDaGFsbGVuZ2UgKi8KKwlGQ19BVVRIX01DX0RIQ0hBUF9SRVBMWSAJPSAweDExLCAvKiEgREhDSEFQIFJlcGx5ICovCisJRkNfQVVUSF9NQ19ESENIQVBfU1VDQyAJCT0gMHgxMiwgLyohIERIQ0hBUCBTdWNjZXNzICovCisKKwlGQ19BVVRIX01DX0ZDQVBfUkVRIAkJPSAweDEzLCAvKiEgRkNBUCBSZXF1ZXN0ICovCisJRkNfQVVUSF9NQ19GQ0FQX0FDSyAJCT0gMHgxNCwgLyohIEZDQVAgQWNrbm93bGVkZ2UgKi8KKwlGQ19BVVRIX01DX0ZDQVBfQ09ORiAJCT0gMHgxNSwgLyohIEZDQVAgQ29uZmlybSAqLworCisJRkNfQVVUSF9NQ19GQ1BBUF9JTklUIAkJPSAweDE2LCAvKiEgRkNQQVAgSW5pdCAqLworCUZDX0FVVEhfTUNfRkNQQVBfQUNDIAkJPSAweDE3LCAvKiEgRkNQQVAgQWNjZXB0ICovCisJRkNfQVVUSF9NQ19GQ1BBUF9DT01QIAkJPSAweDE4LCAvKiEgRkNQQVAgQ29tcGxldGUgKi8KKworCUZDX0FVVEhfTUNfSUtFX1NBX0lOSVQgCQk9IDB4MjIsIC8qISBJS0UgU0EgSU5JVCAqLworCUZDX0FVVEhfTUNfSUtFX1NBX0FVVEggCQk9IDB4MjMsIC8qISBJS0UgU0EgQXV0aCAqLworCUZDX0FVVEhfTUNfSUtFX0NSRUFURV9DSElMRF9TQQk9IDB4MjQsIC8qISBJS0UgQ3JlYXRlIENoaWxkIFNBICovCisJRkNfQVVUSF9NQ19JS0VfSU5GTyAJCT0gMHgyNSwgLyohIElLRSBpbmZvcm1hdGlvbmFsICovCit9OworCitlbnVtIGF1dGhfcHJvdG9fdmVyc2lvbnsKKwlGQ19BVVRIX1BST1RPX1ZFUl8xIAk9IDEsCS8qISBQcm90b2NvbCBWZXJzaW9uIDEgKi8KK307CisKK2VudW0geworCUZDX0FVVEhfRUxTX0NPTU1BTkRfQ09ERSA9IDB4OTAsLyohIEF1dGhlbnRpY2F0aW9uIEVMUyBDb21tYW5kIGNvZGUgICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9MRU5fU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgTGVuIEZpZWxkICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9WQUxfU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgVmFsIEZpZWxkICovCisJRkNfTUFYX0FVVEhfU0VDUkVUX0xFTiAgICAgPSAyNTYsCisJCQkJCS8qISBNYXhpbXVtIHNlY3JldCBzdHJpbmcgbGVuZ3RoICovCisJRkNfQVVUSF9OVU1fVVNBQkxFX1BST1RPX0xFTl9TWiA9IDQsCisJCQkJCS8qISBTaXplIG9mIHVzYWJsZSBwcm90b2NvbHMgZmllbGQgKi8KKwlGQ19BVVRIX1JFU1BfVkFMVUVfTEVOX1NaCT0gNCwKKwkJCQkJLyohIFNpemUgb2YgcmVzcG9uc2UgdmFsdWUgbGVuZ3RoICovCisJRkNfTUFYX0NIQVBfS0VZX0xFTgk9IDI1NiwJLyohIE1heGltdW0gbWQ1IGRpZ2VzdCBsZW5ndGggKi8KKwlGQ19NQVhfQVVUSF9SRVRSSUVTICAgICA9IDMsCS8qISBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzICovCisJRkNfTUQ1X0RJR0VTVF9MRU4gICAgICAgPSAxNiwJLyohIE1ENSBkaWdlc3QgbGVuZ3RoICovCisJRkNfU0hBMV9ESUdFU1RfTEVOICAgICAgPSAyMCwJLyohIFNIQTEgZGlnZXN0IGxlbmd0aCAqLworCUZDX01BWF9ESEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gREggR3JvdXBzIHN1cHBvcnRlZCAqLworCUZDX01BWF9BTEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gYWxnb3JpdGhtcyBzdXBwb3J0ZWQgKi8KKwlGQ19NQVhfUFJPVE9fU1VQUE9SVEVEICA9IDEsCS8qISBNYXhpbXVtIHByb3RvY29scyBzdXBwb3J0ZWQgKi8KKwlGQ19TVEFSVF9UWE5fSUQgICAgICAgICA9IDIsCS8qISBTdGFydGluZyB0cmFuc2FjdGlvbiBJRCAqLworfTsKKworZW51bSBhdXRoX3Byb3RvX2lkeworCUZDX0FVVEhfUFJPVE9fREhDSEFQCQk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9QUk9UT19GQ0FQIAkJPSAweDAwMDAwMDAyLAorCUZDX0FVVEhfUFJPVE9fRkNQQVAgCQk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9QUk9UT19JS0V2MiAJCT0gMHgwMDAwMDAwNCwKKwlGQ19BVVRIX1BST1RPX0lLRXYyX0FVVEggCT0gMHgwMDAwMDAwNSwKK307CisKK3N0cnVjdCBhdXRoX25hbWVfc3sKKwl1MTYJbmFtZV90YWc7CS8qISBOYW1lIFRhZyA9IDEgZm9yIEF1dGhlbnRpY2F0aW9uICovCisJdTE2CW5hbWVfbGVuOwkvKiEgTmFtZSBMZW5ndGggPSA4IGZvciBBdXRoZW50aWNhdGlvbgorCQkJCQkgKi8KKwl3d25fdAkJbmFtZTsgIAkJLyohIE5hbWUuIFRPRE8gLSBpcyB0aGlzIFBXV04gKi8KK307CisKKworZW51bSBhdXRoX2hhc2hfZnVuY3sKKwlGQ19BVVRIX0hBU0hfRlVOQ19NRDUgCQk9IDB4MDAwMDAwMDUsCisJRkNfQVVUSF9IQVNIX0ZVTkNfU0hBXzEgCT0gMHgwMDAwMDAwNiwKK307CisKK2VudW0gYXV0aF9kaF9naWR7CisJRkNfQVVUSF9ESF9HSURfMF9ESEdfTlVMTAk9IDB4MDAwMDAwMDAsCisJRkNfQVVUSF9ESF9HSURfMV9ESEdfMTAyNAk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9ESF9HSURfMl9ESEdfMTI4MAk9IDB4MDAwMDAwMDIsCisJRkNfQVVUSF9ESF9HSURfM19ESEdfMTUzNgk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9ESF9HSURfNF9ESEdfMjA0OAk9IDB4MDAwMDAwMDQsCisJRkNfQVVUSF9ESF9HSURfNl9ESEdfMzA3Mgk9IDB4MDAwMDAwMDYsCisJRkNfQVVUSF9ESF9HSURfN19ESEdfNDA5Ngk9IDB4MDAwMDAwMDcsCisJRkNfQVVUSF9ESF9HSURfOF9ESEdfNjE0NAk9IDB4MDAwMDAwMDgsCisJRkNfQVVUSF9ESF9HSURfOV9ESEdfODE5Mgk9IDB4MDAwMDAwMDksCit9OworCitzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MgeworCXU4CQlhdXRoX2Vsc19jb2RlOwkvKiAgQXV0aGVudGljYXRpb24gRUxTIENvZGUgKDB4OTApICovCisJdTggCWF1dGhfZWxzX2ZsYWc7IAkvKiAgQXV0aGVudGljYXRpb24gRUxTIEZsYWdzICovCisJdTggCWF1dGhfbXNnX2NvZGU7IAkvKiAgQXV0aGVudGljYXRpb24gTWVzc2FnZSBDb2RlICovCisJdTggCXByb3RvX3ZlcnNpb247IAkvKiAgUHJvdG9jb2wgVmVyc2lvbiAqLworCXUzMgltc2dfbGVuOyAJLyogIE1lc3NhZ2UgTGVuZ3RoICovCisJdTMyCXRyYW5zX2lkOyAJLyogIFRyYW5zYWN0aW9uIElkZW50aWZpZXIgKFRfSUQpICovCisKKwkvKiBNc2cgcGF5bG9hZCBmb2xsb3dzLi4uICovCit9OworCisKK2VudW0gYXV0aF9uZWdfcGFyYW1fdGFncyB7CisJRkNfQVVUSF9ORUdfREhDSEFQX0hBU0hMSVNUIAk9IDB4MDAwMSwKKwlGQ19BVVRIX05FR19ESENIQVBfREhHX0lEX0xJU1QgCT0gMHgwMDAyLAorfTsKKworCitzdHJ1Y3QgZGhjaGFwX3BhcmFtX2Zvcm1hdF9zIHsKKwl1MTYJdGFnOwkJLyohIFBhcmFtZXRlciBUYWcuIFNlZQorCQkJCQkgKiBhdXRoX25lZ19wYXJhbV90YWdzX3QKKwkJCQkJICovCisJdTE2CXdvcmRfY250OworCisJLyogZm9sbG93ZWQgYnkgdmFyaWFibGUgbGVuZ3RoIHBhcmFtZXRlciB2YWx1ZS4uLiAqLworfTsKKworc3RydWN0IGF1dGhfcHJvdG9fcGFyYW1zX3MgeworCXUzMglwcm90b19wYXJhbV9sZW47CisJdTMyCXByb3RvX2lkOworCisJLyoKKwkgKiBGb2xsb3dlZCBieSB2YXJpYWJsZSBsZW5ndGggUHJvdG9jb2wgc3BlY2lmaWMgcGFyYW1ldGVycy4gREgtQ0hBUAorCSAqIHVzZXMgZGhjaGFwX3BhcmFtX2Zvcm1hdF90CisJICovCit9OworCitzdHJ1Y3QgYXV0aF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX25hbWVfcwlhdXRoX2luaV9uYW1lOworCXUzMgkJdXNhYmxlX2F1dGhfcHJvdG9zOworCXN0cnVjdCBhdXRoX3Byb3RvX3BhcmFtc19zIHByb3RvX3BhcmFtc1sxXTsgLyohICgxLi51c2FibGVfYXV0aF9wcm90bykKKwkJCQkJCSAgICAgKiBwcm90b2NvbCBwYXJhbXMKKwkJCQkJCSAgICAgKi8KK307CisKK3N0cnVjdCBhdXRoX2RoX3ZhbF9zIHsKKwl1MzIgZGhfdmFsX2xlbjsKKwl1MzIgZGhfdmFsWzFdOworfTsKKworc3RydWN0IGF1dGhfZGhjaGFwX2NoYWxfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJc3RydWN0IGF1dGhfbmFtZV9zIGF1dGhfcmVzcG9uZGVyX25hbWU7CS8qIFRPRE8gVlJLIC0gaXMgYXV0aF9uYW1lX3QKKwkJCQkJCSAqIHR5cGUgT0s/CisJCQkJCQkgKi8KKwl1MzIgCWhhc2hfaWQ7CisJdTMyIAlkaF9ncnBfaWQ7CisJdTMyIAljaGFsX3ZhbF9sZW47CisJY2hhcgkJY2hhbF92YWxbMV07CisKKwkvKiAuLi5mb2xsb3dlZCBieSB2YXJpYWJsZSBDaGFsbGVuZ2UgbGVuZ3RoL3ZhbHVlIGFuZCBESCBsZW5ndGgvdmFsdWUgKi8KK307CisKKworZW51bSBhdXRoX3JqdF9jb2RlcyB7CisJRkNfQVVUSF9SSlRfQ09ERV9BVVRIX0ZBSUxVUkUgCT0gMHgwMSwKKwlGQ19BVVRIX1JKVF9DT0RFX0xPR0lDQUxfRVJSCT0gMHgwMiwKK307CisKK2VudW0gYXV0aF9yanRfY29kZV9leHBzIHsKKwlGQ19BVVRIX0NFWFBfQVVUSF9NRUNIX05PVF9VU0FCTEUJPSAweDAxLAorCUZDX0FVVEhfQ0VYUF9ESF9HUk9VUF9OT1RfVVNBQkxFIAk9IDB4MDIsCisJRkNfQVVUSF9DRVhQX0hBU0hfRlVOQ19OT1RfVVNBQkxFIAk9IDB4MDMsCisJRkNfQVVUSF9DRVhQX0FVVEhfWEFDVF9TVEFSVEVECQk9IDB4MDQsCisJRkNfQVVUSF9DRVhQX0FVVEhfRkFJTEVEIAkJPSAweDA1LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUExEIAkJPSAweDA2LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUFJPVE9fTVNHIAk9IDB4MDcsCisJRkNfQVVUSF9DRVhQX1JFU1RBUlRfQVVUSF9QUk9UTyAJPSAweDA4LAorCUZDX0FVVEhfQ0VYUF9BVVRIX0NPTkNBVF9OT1RfU1VQUCAJPSAweDA5LAorCUZDX0FVVEhfQ0VYUF9QUk9UT19WRVJfTk9UX1NVUFAgCT0gMHgwQSwKK307CisKK2VudW0gYXV0aF9zdGF0dXMgeworCUZDX0FVVEhfU1RBVEVfSU5QUk9HUkVTUyA9IDAsIAkvKiEgYXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MgCSovCisJRkNfQVVUSF9TVEFURV9GQUlMRUQJPSAxLCAJLyohIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAqLworCUZDX0FVVEhfU1RBVEVfU1VDQ0VTUwk9IDIgCS8qISBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCSovCit9OworCitzdHJ1Y3QgYXV0aF9yanRfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJdTgJCXJlYXNvbl9jb2RlOworCXU4CQlyZWFzb25fY29kZV9leHA7CisJdTgJCXJzdmRbMl07Cit9OworCisKK3N0cnVjdCBhdXRoX2RoY2hhcF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcyBoZHI7CisJc3RydWN0IGF1dGhfbmVnX21zZ19zIG5lZ287Cit9OworCitzdHJ1Y3QgYXV0aF9kaGNoYXBfcmVwbHlfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisKKwkvKgorCSAqIGZvbGxvd2VkIGJ5IHJlc3BvbnNlIHZhbHVlIGxlbmd0aCAmIFZhbHVlICsgREggVmFsdWUgTGVuZ3RoICYgVmFsdWUKKwkgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0ZDX1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDUFBST1RPX0hfXworI2RlZmluZSBfX0ZDUFBST1RPX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvc2NzaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSB7CisJRkNQX1JKVAkJPSAweDAxMDAwMDAwLAkvKiBTUlIgcmVqZWN0ICovCisJRkNQX1NSUl9BQ0NFUFQJPSAweDAyMDAwMDAwLAkvKiBTUlIgYWNjZXB0ICovCisJRkNQX1NSUgkJPSAweDE0MDAwMDAwLAkvKiBTZXF1ZW5jZSBSZXRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovCit9OworCisvKgorICogU1JSIEZDLTQgTFMgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfc3JyX3N7CisJdTMyCWxzX2NtZDsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBveC1pZCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJ4LWlkICovCisJdTMyICAgICAgICBybzsJCS8qIHJlbGF0aXZlIG9mZnNldCAqLworCXUzMiAgICAgICAgcl9jdGw6ODsJCS8qIFJfQ1RMIGZvciBJLlUuICovCisJdTMyICAgICAgICByZXM6MjQ7Cit9OworCisKKy8qCisgKiBGQ1BfQ01ORCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEZDUF9DTU5EX0NEQl9MRU4gICAgMTYKKyNkZWZpbmUgRkNQX0NNTkRfTFVOX0xFTiAgICA4CisKK3N0cnVjdCBmY3BfY21uZF9zeworCWx1bl90ICAgICAgICAgICBsdW47CQkvKiA2NC1iaXQgTFUgbnVtYmVyICovCisJdTggICAgICAgICBjcm47CQkvKiBjb21tYW5kIHJlZmVyZW5jZSBudW1iZXIgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzdmQ6MSwKKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJdGFza2F0dHI6MzsJLyogc2NzaSB0YXNrIGF0dHJpYnV0ZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHRhc2thdHRyOjMsCS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJcmVzdmQ6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgdG1fZmxhZ3M7CS8qIHRhc2sgbWFuYWdlbWVudCBmbGFncyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBhZGRsX2NkYl9sZW46NiwJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoIHdvcmRzICovCisJCQlpb2RpcjoyOwkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLworI2Vsc2UKKwl1OCAgICAgICAgIGlvZGlyOjIsCS8qIHJlYWQvd3JpdGUgRkNQX0RBVEEgSVVzICovCisJCQlhZGRsX2NkYl9sZW46NjsJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9jZGJfcyAgICAgIGNkYjsKKworCS8qCisJICogISEhIGFkZGl0aW9uYWwgY2RiIGJ5dGVzIGZvbGxvd3MgaGVyZSEhIQorCSAqLworCXUzMiAgICAgICAgZmNwX2RsOwkvKiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworfTsKKworI2RlZmluZSBmY3BfY21uZF9jZGJfbGVuKF9jbW5kKSAoKF9jbW5kKS0+YWRkbF9jZGJfbGVuICogNCArIEZDUF9DTU5EX0NEQl9MRU4pCisjZGVmaW5lIGZjcF9jbW5kX2ZjcGRsKF9jbW5kKQkoKCYoX2NtbmQpLT5mY3BfZGwpWyhfY21uZCktPmFkZGxfY2RiX2xlbl0pCisKKy8qCisgKiBmY3BfY21uZF90LmlvZGlyIGZpZWxkIHZhbHVlcworICovCitlbnVtIGZjcF9pb2RpcnsKKwlGQ1BfSU9ESVJfTk9ORQk9IDAsCisJRkNQX0lPRElSX1dSSVRFID0gMSwKKwlGQ1BfSU9ESVJfUkVBRAk9IDIsCisJRkNQX0lPRElSX1JXCT0gMywKK307CisKKy8qCisgKiBUYXNrIGF0dHJpYnV0ZSBmaWVsZAorICovCitlbnVtIHsKKwlGQ1BfVEFTS19BVFRSX1NJTVBMRQk9IDAsCisJRkNQX1RBU0tfQVRUUl9IT1EJPSAxLAorCUZDUF9UQVNLX0FUVFJfT1JERVJFRAk9IDIsCisJRkNQX1RBU0tfQVRUUl9BQ0EJPSA0LAorCUZDUF9UQVNLX0FUVFJfVU5UQUdHRUQJPSA1LAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworfTsKKworLyoKKyAqIFRhc2sgbWFuYWdlbWVudCBmbGFncyBmaWVsZCAtIG9ubHkgb25lIGJpdCBzaGFsbCBiZSBzZXQKKyAqLworI2lmbmRlZiBCSVQKKyNkZWZpbmUgQklUKF94KQkoMSA8PCAoX3gpKQorI2VuZGlmCitlbnVtIGZjcF90bV9jbW5keworCUZDUF9UTV9BQk9SVF9UQVNLX1NFVAk9IEJJVCgxKSwKKwlGQ1BfVE1fQ0xFQVJfVEFTS19TRVQJPSBCSVQoMiksCisJRkNQX1RNX0xVTl9SRVNFVAk9IEJJVCg0KSwKKwlGQ1BfVE1fVEFSR0VUX1JFU0VUCT0gQklUKDUpLAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworCUZDUF9UTV9DTEVBUl9BQ0EJPSBCSVQoNiksCit9OworCisvKgorICogRkNQX1hGRVJfUkRZIElVIGRlZmluZXMKKyAqLworc3RydWN0IGZjcF94ZmVyX3JkeV9zeworCXUzMiAgICAgICAgZGF0YV9ybzsKKwl1MzIgICAgICAgIGJ1cnN0X2xlbjsKKwl1MzIgICAgICAgIHJlc2VydmVkOworfTsKKworLyoKKyAqIEZDUF9SU1AgcmVzaWR1ZSBmbGFncworICovCitlbnVtIGZjcF9yZXNpZHVleworCUZDUF9OT19SRVNJRFVFID0gMCwJLyogbm8gcmVzaWR1ZSAqLworCUZDUF9SRVNJRF9PVkVSID0gMSwJLyogbW9yZSBkYXRhIGxlZnQgdGhhdCB3YXMgbm90IHNlbnQgKi8KKwlGQ1BfUkVTSURfVU5ERVIgPSAyLAkvKiBsZXNzIGRhdGEgdGhhbiByZXF1ZXN0ZWQgKi8KK307CisKK2VudW0geworCUZDUF9SU1BJTkZPX0dPT0QgPSAwLAorCUZDUF9SU1BJTkZPX0RBVEFMRU5fTUlTTUFUQ0ggPSAxLAorCUZDUF9SU1BJTkZPX0NNTkRfSU5WQUxJRCA9IDIsCisJRkNQX1JTUElORk9fUk9MRU5fTUlTTUFUQ0ggPSAzLAorCUZDUF9SU1BJTkZPX1RNX05PVF9TVVBQID0gNCwKKwlGQ1BfUlNQSU5GT19UTV9GQUlMRUQgPSA1LAorfTsKKworc3RydWN0IGZjcF9yc3BpbmZvX3N7CisJdTMyICAgICAgICByZXMwOjI0OworCXUzMiAgICAgICAgcnNwX2NvZGU6ODsJLyogcmVzcG9uc2UgY29kZSAoYXMgYWJvdmUpICovCisJdTMyICAgICAgICByZXMxOworfTsKKworc3RydWN0IGZjcF9yZXNwX3N7CisJdTMyICAgICAgICByZXNlcnZlZFsyXTsJLyogMiB3b3JkcyByZXNlcnZlZCAqLworCXUxNiAgICAgICAgcmVzZXJ2ZWQyOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKwl1OCAgICAgICAgIGZjcF9jb25mX3JlcToxOwkvKiBGQ1BfQ09ORiBpcyByZXF1ZXN0ZWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgc25zX2xlbl92YWxpZDoxOy8qIHNlbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgcnNwX2xlbl92YWxpZDoxOy8qIHJlc3BvbnNlIGxlbiBpcyB2YWxpZCAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9sZW5fdmFsaWQ6MTsvKiByZXNwb25zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHNuc19sZW5fdmFsaWQ6MTsvKiBzZW5zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHNjc2lfc3RhdHVzOwkvKiBvbmUgYnl0ZSBTQ1NJIHN0YXR1cyAqLworCXUzMiAgICAgICAgcmVzaWR1ZTsJLyogcmVzaWR1YWwgZGF0YSBieXRlcyAqLworCXUzMiAgICAgICAgc25zX2xlbjsJLyogbGVuZ3RoIG9kIHNlbnNlIGluZm8gKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qIGxlbmd0aCBvZiByZXNwb25zZSBpbmZvICovCit9OworCisjZGVmaW5lIGZjcF9zbnNsZW4oX19mY3Byc3ApCSgoX19mY3Byc3ApLT5zbnNfbGVuX3ZhbGlkID8gCQlcCisJCQkJCShfX2ZjcHJzcCktPnNuc19sZW4gOiAwKQorI2RlZmluZSBmY3BfcnNwbGVuKF9fZmNwcnNwKQkoKF9fZmNwcnNwKS0+cnNwX2xlbl92YWxpZCA/IAkJXAorCQkJCQkoX19mY3Byc3ApLT5yc3BfbGVuIDogMCkKKyNkZWZpbmUgZmNwX3JzcGluZm8oX19mY3Byc3ApCSgoc3RydWN0IGZjcF9yc3BpbmZvX3MgKikoKF9fZmNwcnNwKSArIDEpKQorI2RlZmluZSBmY3Bfc25zaW5mbyhfX2ZjcHJzcCkJKCgodTggKilmY3BfcnNwaW5mbyhfX2ZjcHJzcCkpICsgCVwKKwkJCQkJCWZjcF9yc3BsZW4oX19mY3Byc3ApKQorCitzdHJ1Y3QgZmNwX2NtbmRfZnJfc3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGZjcF9jbW5kX3MgICAgICBmY3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mZG1pLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDVjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GRE1JX0hfXworI2RlZmluZSBfX0ZETUlfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvY3QuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGRE1JIENvbW1hbmQgQ29kZXMKKyAqLworI2RlZmluZQlGRE1JX0dSSEwJCTB4MDEwMAorI2RlZmluZQlGRE1JX0dIQVQJCTB4MDEwMQorI2RlZmluZQlGRE1JX0dSUEwJCTB4MDEwMgorI2RlZmluZQlGRE1JX0dQQVQJCTB4MDExMAorI2RlZmluZQlGRE1JX1JIQkEJCTB4MDIwMAorI2RlZmluZQlGRE1JX1JIQVQJCTB4MDIwMQorI2RlZmluZQlGRE1JX1JQUlQJCTB4MDIxMAorI2RlZmluZQlGRE1JX1JQQQkJMHgwMjExCisjZGVmaW5lCUZETUlfREhCQQkJMHgwMzAwCisjZGVmaW5lCUZETUlfRFBSVAkJMHgwMzEwCisKKy8qCisgKiBGRE1JIHJlYXNvbiBjb2RlcworICovCisjZGVmaW5lCUZETUlfTk9fQURESVRJT05BTF9FWFAJCTB4MDAKKyNkZWZpbmUJRkRNSV9IQkFfQUxSRUFEWV9SRUcJCTB4MTAKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9SRUcJCTB4MTEKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX01VTFRJUExFCTB4MTIKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX0xFTkdUSF9JTlZBTElECTB4MTMKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9QUkVTRU5UCTB4MTQKKyNkZWZpbmUJRkRNSV9QT1JUX09SSUdfTk9UX0lOX0xJU1QJMHgxNQorI2RlZmluZQlGRE1JX1BPUlRfSEJBX05PVF9JTl9MSVNUCTB4MTYKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9OT1RfUkVHCTB4MjAKKyNkZWZpbmUJRkRNSV9QT1JUX05PVF9SRUcJCTB4MjEKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9NVUxUSVBMRQkweDIyCisjZGVmaW5lCUZETUlfUE9SVF9BVFRSSUJfTEVOR1RIX0lOVkFMSUQJMHgyMworI2RlZmluZQlGRE1JX1BPUlRfQUxSRUFEWV9SRUdJU1RFUkVFRAkweDI0CisKKy8qCisgKiBGRE1JIFRyYW5zbWlzc2lvbiBTcGVlZCBNYXNrIHZhbHVlcworICovCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMUcJCTB4MDAwMDAwMDEKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8yRwkJMHgwMDAwMDAwMgorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzEwRwkJMHgwMDAwMDAwNAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzRHCQkweDAwMDAwMDA4CisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfOEcJCTB4MDAwMDAwMTAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8xNkcJCTB4MDAwMDAwMjAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF9VTktOT1dOCTB4MDAwMDgwMDAKKworLyoKKyAqIEZETUkgSEJBIGF0dHJpYnV0ZSB0eXBlcworICovCitlbnVtIGZkbWlfaGJhX2F0dHJpYnV0ZV90eXBlIHsKKwlGRE1JX0hCQV9BVFRSSUJfTk9ERU5BTUUgPSAxLAkvKiAweDAwMDEgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTUFOVUZBQ1RVUkVSLAkvKiAweDAwMDIgKi8KKwlGRE1JX0hCQV9BVFRSSUJfU0VSSUFMTlVNLAkvKiAweDAwMDMgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUwsCQkvKiAweDAwMDQgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUxfREVTQywJLyogMHgwMDA1ICovCisJRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04sCS8qIDB4MDAwNiAqLworCUZETUlfSEJBX0FUVFJJQl9EUklWRVJfVkVSU0lPTiwJLyogMHgwMDA3ICovCisJRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OLAkvKiAweDAwMDggKi8KKwlGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTiwJLyogMHgwMDA5ICovCisJRkRNSV9IQkFfQVRUUklCX09TX05BTUUsCS8qIDB4MDAwQSAqLworCUZETUlfSEJBX0FUVFJJQl9NQVhfQ1QsCQkvKiAweDAwMEIgKi8KKworCUZETUlfSEJBX0FUVFJJQl9NQVhfVFlQRQorfTsKKworLyoKKyAqIEZETUkgUG9ydCBhdHRyaWJ1dGUgdHlwZXMKKyAqLworZW51bSBmZG1pX3BvcnRfYXR0cmlidXRlX3R5cGUgeworCUZETUlfUE9SVF9BVFRSSUJfRkM0X1RZUEVTID0gMSwJLyogMHgwMDAxICovCisJRkRNSV9QT1JUX0FUVFJJQl9TVVBQX1NQRUVELAkvKiAweDAwMDIgKi8KKwlGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQsCS8qIDB4MDAwMyAqLworCUZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSwJLyogMHgwMDA0ICovCisJRkRNSV9QT1JUX0FUVFJJQl9ERVZfTkFNRSwJLyogMHgwMDA1ICovCisJRkRNSV9QT1JUX0FUVFJJQl9IT1NUX05BTUUsCS8qIDB4MDAwNiAqLworCisJRkRNSV9QT1JUX0FUVFJfTUFYX1RZUEUKK307CisKKy8qCisgKiBGRE1JIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgZmRtaV9hdHRyX3MgeworCXUxNiAgICAgICAgdHlwZTsKKwl1MTYgICAgICAgIGxlbjsKKwl1OCAgICAgICAgIHZhbHVlWzFdOworfTsKKworLyoKKyAqIEhCQSBBdHRyaWJ1dGUgQmxvY2sKKyAqLworc3RydWN0IGZkbWlfaGJhX2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIGhiYV9hdHRyOwkvKiBuIGF0dHJpYnV0ZXMgKi8KK307CisKKy8qCisgKiBSZWdpc3RlcmVkIFBvcnQgTGlzdAorICovCitzdHJ1Y3QgZmRtaV9wb3J0X2xpc3RfcyB7CisJdTMyICAgICAgICBudW1fcG9ydHM7CS8qIG51bWJlciBPZiBQb3J0IEVudHJpZXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF9lbnRyeTsJLyogb25lIG9yIG1vcmUgKi8KK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIHBvcnRfYXR0cjsJLyogbiBhdHRyaWJ1dGVzICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBIQkEgQXR0cmlidXRlcworICovCitzdHJ1Y3QgZmRtaV9yaGJhX3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXN0cnVjdCBmZG1pX3BvcnRfbGlzdF9zIHBvcnRfbGlzdDsJLyogUmVnaXN0ZXJlZCBQb3J0IExpc3QgKi8KKwlzdHJ1Y3QgZmRtaV9oYmFfYXR0cl9zIGhiYV9hdHRyX2JsazsJLyogSEJBIGF0dHJpYnV0ZSBibG9jayAqLworfTsKKworLyoKKyAqIEZETUkgUmVnaXN0ZXIgUG9ydAorICovCitzdHJ1Y3QgZmRtaV9ycHJ0X3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIFBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGZkbWlfcnBhX3MgeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIHBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3BjaWZ3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcGNpZncuaCBQQ0kgRlcgcmVsYXRlZCBoZWFkZXJzCisgKi8KKworI2lmbmRlZiBfX1BDSUZXX0hfXworI2RlZmluZSBfX1BDSUZXX0hfXworCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IHBucF9oZHJfc3sKKyAgdTMyCXNpZ25hdHVyZTsJLyogIiRQblAiICovCisgIHU4CXJldjsJCS8qIFN0cnVjdCByZXZpc2lvbiAqLworICB1OCAJbGVuOwkJLyogSGVhZGVyIHN0cnVjdHVyZSBsZW4gaW4gbXVsdGlwbGVzCisJCQkJICogb2YgMTYgYnl0ZXMgKi8KKyAgdTE2ICBvZmY7CQkvKiBPZmZzZXQgdG8gbmV4dCBoZWFkZXIgMDAgaWYgbm9uZSAqLworICB1OAlyc3ZkOwkJLyogUmVzZXJ2ZWQgYnl0ZSAqLworICB1OAlja3N1bTsJCS8qIDgtYml0IGNoZWNrc3VtIGZvciB0aGlzIGhlYWRlciAqLworICB1MzIJcG5wX2Rldl9pZDsJLyogUG5QIERldmljZSBJZCAqLworICB1MTYgIG1mc3RyOwkJLyogUG9pbnRlciB0byBtYW51ZmFjdHVyZXIgc3RyaW5nICovCisgIHUxNglwcnN0cjsJCS8qIFBvaW50ZXIgdG8gcHJvZHVjdCBzdHJpbmcgKi8KKyAgdTgJZGV2dHlwZVszXTsJLyogRGV2aWNlIFR5cGUgQ29kZSAqLworICB1OAlkZXZpbmQ7CQkvKiBEZXZpY2UgSW5kaWNhdG9yICovCisgIHUxNgliY3ZlbnRyOwkvKiBCb290c3RyYXAgZW50cnkgdmVjdG9yICovCisgIHUxNglyc3ZkMjsJCS8qIFJlc2VydmVkICovCisgIHUxNiAgc3JpdjsJCS8qIFN0YXRpYyByZXNvdXJjZSBpbmZvcm1hdGlvbiB2ZWN0b3IgKi8KK307CisKK3N0cnVjdCBwY2lfM18wX2RzX3N7CisgdTMyCXNpZzsgICAJCS8qIFNpZ25hdHVyZSAiUENJUiIgKi8KKyB1MTYJdmVuZGlkOwkJLyogVmVuZG9yIElEICovCisgdTE2CWRldmlkOwkJLyogRGV2aWNlIElEICovCisgdTE2CWRldmxpc3RvZmY7CS8qIERldmljZSBMaXN0IE9mZnNldCAqLworIHUxNglsZW47CQkvKiBQQ0kgRGF0YSBTdHJ1Y3R1cmUgTGVuZ3RoICovCisgdTgJcmV2OwkJLyogUENJIERhdGEgU3RydWN0dXJlIFJldmlzaW9uICovCisgdTgJY2xjb2RlWzNdOwkvKiBDbGFzcyBDb2RlICovCisgdTE2CWltZ2xlbjsJCS8qIENvZGUgaW1hZ2UgbGVuZ3RoIGluIG11bHRpcGxlcyBvZgorCQkJCSAqIDUxMiBieXRlcyAqLworIHUxNgljb2RlcmV2OwkvKiBSZXZpc2lvbiBsZXZlbCBvZiBjb2RlL2RhdGEgKi8KKyB1OAljb2RldHlwZTsJLyogQ29kZSB0eXBlIDB4MDAgLSBCSU9TICovCisgdTgJaW5kcjsJCS8qIExhc3QgaW1hZ2UgaW5kaWNhdG9yICovCisgdTE2CW1ydGltZ2xlbjsJLyogTWF4IFJ1biBUaW1lIEltYWdlIExlbmd0aCAqLworIHUxNgljdW9mZjsJCS8qIENvbmZpZyBVdGlsaXR5IENvZGUgSGVhZGVyIE9mZnNldCAqLworIHUxNglkbXRmY2xwOwkvKiBETVRGIENMUCBlbnRyeSBwb2ludCBvZmZzZXQgKi8KK307CisKK3N0cnVjdCBwY2lfb3B0cm9tX2hkcl9zeworIHUxNglzaWc7CQkvKiBTaWduYXR1cmUgMHg1NUFBICovCisgdTgJbGVuOwkJLyogT3B0aW9uIFJPTSBsZW5ndGggaW4gdW5pdHMgb2YgNTEyIGJ5dGVzICovCisgdTgJaW5pdmVjWzNdOwkvKiBJbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KKyB1OAlyc3ZkWzE2XTsJLyogUmVzZXJ2ZWQgZmllbGQgKi8KKyB1MTYJdmVycHRyOwkJLyogUG9pbnRlciB0byB2ZXJzaW9uIHN0cmluZyAtIHByaXZhdGUgKi8KKyB1MTYJcGNpZHM7CQkvKiBQb2ludGVyIHRvIFBDSSBkYXRhIHN0cnVjdHVyZSAqLworIHUxNglwbnBoZHI7CQkvKiBQb2ludGVyIHRvIFBuUCBleHBhbnNpb24gaGVhZGVyICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9zY3NpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjBlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCkBAIC0wLDAgKzEsMTY0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fU0NTSV9IX18KKyNkZWZpbmUgX19TQ1NJX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBnZW5lcmljIFNDU0kgY2RiIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBTQ1NJX01BWF9DREJMRU4gICAgIDE2CitzdHJ1Y3Qgc2NzaV9jZGJfc3sKKwl1OCAgICAgICAgIHNjc2lfY2RiW1NDU0lfTUFYX0NEQkxFTl07Cit9OworCisvKgorICogc2NzaSBsdW4gc2VyaWFsIG51bWJlciBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9MVU5fU05fTEVOICAgICAzMgorc3RydWN0IHNjc2lfbHVuX3NuX3N7CisJdTggICAgICAgICBsdW5fc25bU0NTSV9MVU5fU05fTEVOXTsKK307CisKKy8qCisgKiBTQ1NJIERpcmVjdCBBY2Nlc3MgQ29tbWFuZHMKKyAqLworZW51bSB7CisJU0NTSV9PUF9URVNUX1VOSVRfUkVBRFkJCT0gMHgwMCwKKwlTQ1NJX09QX1JFUVVFU1RfU0VOU0UJCT0gMHgwMywKKwlTQ1NJX09QX0ZPUk1BVF9VTklUCQk9IDB4MDQsCisJU0NTSV9PUF9SRUFENgkJCT0gMHgwOCwKKwlTQ1NJX09QX1dSSVRFNgkJCT0gMHgwQSwKKwlTQ1NJX09QX1dSSVRFX0ZJTEVNQVJLUwkJPSAweDEwLAorCVNDU0lfT1BfSU5RVUlSWQkJCT0gMHgxMiwKKwlTQ1NJX09QX01PREVfU0VMRUNUNgkJPSAweDE1LAorCVNDU0lfT1BfUkVTRVJWRTYJCT0gMHgxNiwKKwlTQ1NJX09QX1JFTEVBU0U2CQk9IDB4MTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFNgkJPSAweDFBLAorCVNDU0lfT1BfU1RBUlRfU1RPUF9VTklUCQk9IDB4MUIsCisJU0NTSV9PUF9TRU5EX0RJQUdOT1NUSUMJCT0gMHgxRCwKKwlTQ1NJX09QX1JFQURfQ0FQQUNJVFkJCT0gMHgyNSwKKwlTQ1NJX09QX1JFQUQxMAkJCT0gMHgyOCwKKwlTQ1NJX09QX1dSSVRFMTAJCQk9IDB4MkEsCisJU0NTSV9PUF9WRVJJRlkxMAkJPSAweDJGLAorCVNDU0lfT1BfUkVBRF9ERUZFQ1RfREFUQQk9IDB4MzcsCisJU0NTSV9PUF9MT0dfU0VMRUNUCQk9IDB4NEMsCisJU0NTSV9PUF9MT0dfU0VOU0UJCT0gMHg0RCwKKwlTQ1NJX09QX01PREVfU0VMRUNUMTAJCT0gMHg1NSwKKwlTQ1NJX09QX1JFU0VSVkUxMAkJPSAweDU2LAorCVNDU0lfT1BfUkVMRUFTRTEwCQk9IDB4NTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFMTAJCT0gMHg1QSwKKwlTQ1NJX09QX1BFUl9SRVNFUlZFX0lOCQk9IDB4NUUsCisJU0NTSV9PUF9QRVJfUkVTRVJWRV9PVVIJCT0gMHg1RSwKKwlTQ1NJX09QX1JFQUQxNgkJCT0gMHg4OCwKKwlTQ1NJX09QX1dSSVRFMTYJCQk9IDB4OEEsCisJU0NTSV9PUF9WRVJJRlkxNgkJPSAweDhGLAorCVNDU0lfT1BfUkVBRF9DQVBBQ0lUWTE2CQk9IDB4OUUsCisJU0NTSV9PUF9SRVBPUlRfTFVOUwkJPSAweEEwLAorCVNDU0lfT1BfUkVBRDEyCQkJPSAweEE4LAorCVNDU0lfT1BfV1JJVEUxMgkJCT0gMHhBQSwKKwlTQ1NJX09QX1VOREVGCQkJPSAweEZGLAorfTsKKworLyoKKyAqIFNDU0kgU1RBUlRfU1RPUF9VTklUIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfc3RhcnRfc3RvcF91bml0X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBpbW1lZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGltbWVkOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBvd2VyX2NvbmRpdGlvbnM6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkNDoyOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgc3RhcnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBzdGFydDoxOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjI7CisJdTggICAgICAgICBwb3dlcl9jb25kaXRpb25zOjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBTRU5EX0RJQUdOT1NUSUMgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV9zZW5kX2RpYWdub3N0aWNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKwl1OCAgICAgICAgIHBmOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwZjoxOworCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCisJdTggICAgICAgICBwYXJhbV9saXN0X2xlbmd0aFsyXTsJLyogTVNCIGZpcnN0ICovCisJdTggICAgICAgICBjb250cm9sOworCit9OworCisvKgorICogU0NTSSBSRUFEMTAvV1JJVEUxMCBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgZHBvOjE7CS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKwl1OCAgICAgICAgIGZ1YToxOwkvKiBGb3JjZSBVbml0IEFjY2VzcyAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MjsKKwl1OCAgICAgICAgIGZ1YToxOworCXU4ICAgICAgICAgZHBvOjE7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJLyogbG9naWNhbCBibG9jayBhZGRyZXNzIC0gTVNCICovCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CS8qIExTQiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgwOwkvKiB0cmFuc2ZlciBsZW5ndGggaW4gYmxvY2tzIC0gTVNCICovCisJdTggICAgICAgICB4ZmVyX2xlbmd0aDE7CS8qIExTQiAqLworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREIxMF9HRVRfTEJBKGNkYikgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoY2RiKS0+bGJhMCA8PCAyNCkgfCAoKGNkYiktPmxiYTEgPDwgMTYpIHwgICAgXAorICAgICAoKGNkYiktPmxiYTIgPDwgOCkgfCAoY2RiKS0+bGJhMykKKworI2RlZmluZSBTQ1NJX0NEQjEwX1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMjQ7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiAxNikgJiAweEZGOyAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IChsYmEgPj4gOCkgJiAweEZGOyAgICBcCisgICAgKGNkYiktPmxiYTMgPSBsYmEgJiAweEZGOyAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX1RMKGNkYikgIFwKKyAgICAoKGNkYiktPnhmZXJfbGVuZ3RoMCA8PCA4IHwgKGNkYiktPnhmZXJfbGVuZ3RoMSkKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGgwID0gdGwgPj4gODsgICAgICAgXAorICAgIChjZGIpLT54ZmVyX2xlbmd0aDEgPSB0bCAmIDB4RkY7ICAgICBcCit9CisKKy8qCisgKiBTQ1NJIFJFQUQ2L1dSSVRFNiBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsJCS8qIExTQiAqLworCXU4ICAgICAgICAgeGZlcl9sZW5ndGg7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX1RBUEVfQ0RCNl9HRVRfVEwoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPnRsMCA8PCAxNikgfCAoKGNkYiktPnRsMSA8PCA4KSB8IChjZGIpLT50bDIpCisKKyNkZWZpbmUgU0NTSV9UQVBFX0NEQjZfU0VUX1RMKGNkYiwgdGwpIHsgICAgICBcCisgICAgKGNkYiktPnRsMCA9IHRsID4+IDE2OyAgICAgICAgICAgIFwKKyAgICAoY2RiKS0+dGwxID0gKHRsID4+IDgpICYgMHhGRjsgICAgXAorICAgIChjZGIpLT50bDIgPSB0bCAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlcXVlbnRpYWwgKFRBUEUpIHdydGllIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfdGFwZV93cl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByc3ZkOjc7CisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKwl1OCAgICAgICAgIHJzdmQ6NzsKKyNlbmRpZgorCXU4ICAgICAgICAgdGwwOwkJLyogTXNiICovCisJdTggICAgICAgICB0bDE7CisJdTggICAgICAgICB0bDI7CQkvKiBMc2IgKi8KKworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9MQkEoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPmxiYTAgPDwgMTYpIHwgKChjZGIpLT5sYmExIDw8IDgpIHwgKGNkYiktPmxiYTIpCisKKyNkZWZpbmUgU0NTSV9DREI2X1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMTY7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiA4KSAmIDB4RkY7ICAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IGxiYSAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9UTChjZGIpICgoY2RiKS0+eGZlcl9sZW5ndGgpCisjZGVmaW5lIFNDU0lfQ0RCNl9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGggPSB0bDsgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlbnNlIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHZhbGlkOjE7CisJdTggICAgICAgICByc3BfY29kZTo3OworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9jb2RlOjc7CisJdTggICAgICAgICB2YWxpZDoxOworI2VuZGlmCisJdTggICAgICAgICBzZWdfbnVtOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBmaWxlX21hcms6MTsKKwl1OCAgICAgICAgIGVvbToxOwkJLyogZW5kIG9mIG1lZGlhICovCisJdTggICAgICAgICBpbGk6MTsJCS8qIGluY29ycmVjdCBsZW5ndGggaW5kaWNhdG9yICovCisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisjZWxzZQorCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgaWxpOjE7CQkvKiBpbmNvcnJlY3QgbGVuZ3RoIGluZGljYXRvciAqLworCXU4ICAgICAgICAgZW9tOjE7CQkvKiBlbmQgb2YgbWVkaWEgKi8KKwl1OCAgICAgICAgIGZpbGVfbWFyazoxOworI2VuZGlmCisJdTggICAgICAgICBpbmZvcm1hdGlvbls0XTsJLyogZGV2aWNlLXR5cGUgb3IgY29tbWFuZCBzcGVjaWZpYyBpbmZvCisJCQkJCSAqLworCXU4ICAgICAgICAgYWRkX3NlbnNlX2xlbmd0aDsKKwkJCQkJLyogYWRkaXRpb25hbCBzZW5zZSBsZW5ndGggKi8KKwl1OCAgICAgICAgIGNvbW1hbmRfaW5mb1s0XTsvKiBjb21tYW5kIHNwZWNpZmljIGluZm9ybWF0aW9uCisJCQkJCQkgKi8KKwl1OCAgICAgICAgIGFzYzsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXU4ICAgICAgICAgYXNjcTsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KKwl1OCAgICAgICAgIGZydV9jb2RlOwkvKiBmaWVsZCByZXBsYWNlYWJsZSB1bml0IGNvZGUgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisJdTggICAgICAgICBjX2Q6MTsJCS8qIGNvbW1hbmQvZGF0YSBiaXQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIGJwb2ludGVyOjM7CS8qIGJpdCBwb2ludGVyICovCisjZWxzZQorCXU4ICAgICAgICAgYnBvaW50ZXI6MzsJLyogYml0IHBvaW50ZXIgKi8KKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGNfZDoxOwkJLyogY29tbWFuZC9kYXRhIGJpdCAqLworCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisjZW5kaWYKKwl1OCAgICAgICAgIGZwb2ludGVyWzJdOwkvKiBmaWVsZCBwb2ludGVyICovCit9OworCisjZGVmaW5lIFNDU0lfU0VOU0VfQ1VSX0VSUiAgICAgICAgICAweDcwCisjZGVmaW5lIFNDU0lfU0VOU0VfREVGX0VSUiAgICAgICAgICAweDcxCisKKy8qCisgKiBTQ1NJIHNlbnNlIGtleSB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX1NLX05PX1NFTlNFICAgICAgICAweDAKKyNkZWZpbmUgU0NTSV9TS19SRUNfRVJSICAgICAgICAgMHgxCS8qIHJlY292ZXJlZCBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX05PVF9SRUFEWSAgICAgICAweDIKKyNkZWZpbmUgU0NTSV9TS19NRURfRVJSICAgICAgICAgMHgzCS8qIG1lZGl1bSBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX0hXX0VSUiAgICAgICAgICAweDQJLyogaGFyZHdhcmUgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9TS19JTExFR0FMX1JFUSAgICAgMHg1CisjZGVmaW5lIFNDU0lfU0tfVU5JVF9BVFQgICAgICAgIDB4NgkvKiB1bml0IGF0dGVudGlvbiAqLworI2RlZmluZSBTQ1NJX1NLX0RBVEFfUFJPVEVDVCAgICAweDcKKyNkZWZpbmUgU0NTSV9TS19CTEFOS19DSEVDSyAgICAgMHg4CisjZGVmaW5lIFNDU0lfU0tfVkVORE9SX1NQRUMgICAgIDB4OQorI2RlZmluZSBTQ1NJX1NLX0NPUFlfQUJPUlRFRCAgICAweEEKKyNkZWZpbmUgU0NTSV9TS19BQk9SVEVEX0NNTkQgICAgMHhCCisjZGVmaW5lIFNDU0lfU0tfVk9MX09WRVJGTE9XICAgIDB4RAorI2RlZmluZSBTQ1NJX1NLX01JU0NPTVBBUkUgICAgICAweEUKKworLyoKKyAqIFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfQVNDX05PX0FERF9TRU5TRSAgICAgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1JFQURZICAgICAgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX0NPTU1VTklDQVRJT04gICAgICAweDA4CisjZGVmaW5lIFNDU0lfQVNDX1dSSVRFX0VSUk9SICAgICAgICAgICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ19JTlZBTElEX0NNTkRfQ09ERSAgICAgIDB4MjAKKyNkZWZpbmUgU0NTSV9BU0NfQkFEX0xCQSAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFNDU0lfQVNDX0lOVkFMSURfRklFTERfSU5fQ0RCICAgMHgyNAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1NVUFBPUlRFRCAgICAgIDB4MjUKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX1dSSVRFX1BST1RFQ1QgICAgICAweDI3CisjZGVmaW5lIFNDU0lfQVNDX1BPV0VST05fQkRSICAgICAgICAgICAgMHgyOQkvKiBwb3dlciBvbiByZXNldCwgYnVzIHJlc2V0LAorCQkJCQkJICogYnVzIGRldmljZSByZXNldAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUkFNU19DSEFOR0VEICAgICAgICAgMHgyQQorI2RlZmluZSBTQ1NJX0FTQ19DTU5EX0NMRUFSRURfQllfQV9JICAgIDB4MkYKKyNkZWZpbmUgU0NTSV9BU0NfU0FWSU5HX1BBUkFNX05PVFNVUFAgICAweDM5CisjZGVmaW5lIFNDU0lfQVNDX1RPQ0MgICAgICAgICAgICAgICAgICAgMHgzRgkvKiB0YXJnZXQgb3BlcmF0aW5nIGNvbmR0aW9ucworCQkJCQkJICogY2hhbmdlZAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUklUWV9FUlJPUiAgICAgICAgICAgMHg0NworI2RlZmluZSBTQ1NJX0FTQ19DTU5EX1BIQVNFX0VSUk9SICAgICAgIDB4NEEKKyNkZWZpbmUgU0NTSV9BU0NfREFUQV9QSEFTRV9FUlJPUiAgICAgICAweDRCCisjZGVmaW5lIFNDU0lfQVNDX1ZFTkRPUl9TUEVDICAgICAgICAgICAgMHg3RgorCisvKgorICogU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVycworICovCisjZGVmaW5lIFNDU0lfQVNDUV9DQVVTRV9OT1RfUkVQT1JUICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfQkVDT01JTkdfUkVBRFkgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0lOSVRfQ01EX1JFUSAgICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9GT1JNQVRfSU5fUFJPR1JFU1MgICAgMHgwNAorI2RlZmluZSBTQ1NJX0FTQ1FfT1BFUkFUSU9OX0lOX1BST0dSRVNTIDB4MDcKKyNkZWZpbmUgU0NTSV9BU0NRX1NFTEZfVEVTVF9JTl9QUk9HUkVTUyAweDA5CisjZGVmaW5lIFNDU0lfQVNDUV9XUl9VTkVYUF9VTlNPTF9EQVRBICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ1FfV1JfTk9URU5HX1VOU09MX0RBVEEgIDB4MEQKKworI2RlZmluZSBTQ1NJX0FTQ1FfTEJBX09VVF9PRl9SQU5HRSAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NRX0lOVkFMSURfRUxFTUVOVF9BRERSICAweDAxCisKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9XUklURV9QUk9URUNURUQgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX0hXX1dSSVRFX1BST1RFQ1RFRCAgICAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fU1dfV1JJVEVfUFJPVEVDVEVEICAgIDB4MDIKKworI2RlZmluZSBTQ1NJX0FTQ1FfUE9SICAgMHgwMQkvKiBwb3dlciBvbiByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfU0JSICAgMHgwMgkvKiBzY3NpIGJ1cyByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfQkRSICAgMHgwMwkvKiBidXMgZGV2aWNlIHJlc2V0ICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESVIgICAweDA0CS8qIGRldmljZSBpbnRlcm5hbCByZXNldCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9NT0RFX1BBUkFNU19DSEFOR0VEICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0xPR19QQVJBTVNfQ0hBTkdFRCAgICAgICAgMHgwMgorI2RlZmluZSBTQ1NJX0FTQ1FfUkVTRVJWQVRJT05TX1BSRUVNUFRFRCAgICAweDAzCisjZGVmaW5lIFNDU0lfQVNDUV9SRVNFUlZBVElPTlNfUkVMRUFTRUQgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NRX1JFR0lTVFJBVElPTlNfUFJFRU1QVEVEICAgMHgwNQorCisjZGVmaW5lIFNDU0lfQVNDUV9NSUNST0NPREVfQ0hBTkdFRCAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9DSEFOR0VEX09QRVJfQ09ORCAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9JTlFfQ0hBTkdFRCAgICAgICAweDAzCS8qIGlucXVpcnkgZGF0YSBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESV9DSEFOR0VEICAgICAgICAweDA1CS8qIGRldmljZSBpZCBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9STF9EQVRBX0NIQU5HRUQgICAweDBFCS8qIHJlcG9ydCBsdW5zIGRhdGEgY2hhbmdlZCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9EUF9DUkNfRVJSICAgICAgICAgICAgMHgwMQkvKiBkYXRhIHBoYXNlIGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfRFBfU0NTSV9QQVJJVFlfRVJSICAgIDB4MDIJLyogZGF0YSBwaGFzZSBzY3NpIHBhcml0eSBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDUV9JVV9DUkNfRVJSICAgICAgICAgICAgMHgwMwkvKiBpbmZvcm1hdGlvbiB1bml0IGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfUFJPVE9fU0VSVl9DUkNfRVJSICAgIDB4MDUKKworI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX1RJTUVfT1VUICAgICAgICAgIDB4MDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIElOUVVJUlkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBzY3NpX2lucXVpcnlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgZXZwZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV2cGQ6MTsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfdmVuZG9yX3N7CisJdTggICAgICAgICB2ZW5kb3JfaWRbOF07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zeworCXU4ICAgICAgICAgcHJvZHVjdF9pZFsxNl07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RyZXZfc3sKKwl1OCAgICAgICAgIHByb2R1Y3RfcmV2WzRdOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV9kYXRhX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOwkvKiBwZXJpcGhlcmFsIHF1YWxpZmllciAqLworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJCS8qIHBlcmlwaGVyYWwgZGV2aWNlIHR5cGUgKi8KKworCXU4ICAgICAgICAgcm1iOjE7CQkJLyogcmVtb3ZhYmxlIG1lZGl1bSBiaXQgKi8KKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OwkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICBhZW5jOjE7CQkvKiBhc3luYyBldmVudCBub3RpZmljYXRpb24gY2FwYWJpbGl0eQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHRybV9pb3A6MTsJLyogdGVybWluYXRlIEkvTyBwcm9jZXNzICovCisJdTggICAgICAgICBub3JtX2FjYToxOwkvKiBub3JtYWwgQUNBIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgaGlfc3VwcG9ydDoxOwkvKiBTQ1NJLTM6IHN1cHBvcnRzIFJFUE9SVCBMVU5TICovCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKworCXU4ICAgICAgICAgYWRkaXRpb25hbF9sZW47CisJdTggICAgICAgICBzY2NzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NzsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisJdTggICAgICAgICBlbmNfc2VydjoxOwkvKiBlbmNsb3N1cmUgc2VydmljZSBjb21wb25lbnQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOworCXU4ICAgICAgICAgbXVsdGlfcG9ydDoxOwkvKiBtdWx0aS1wb3J0IGRldmljZSAqLworCXU4ICAgICAgICAgbV9jaG5ncjoxOwkvKiBkZXZpY2UgaW4gbWVkaXVtIHRyYW5zcG9ydCBlbGVtZW50ICovCisJdTggICAgICAgICBhY2tfcmVxX3E6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFkZHIxNjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgc3luY2hyb25vdXM6MTsKKwl1OCAgICAgICAgIGxpbmtlZF9jb21tYW5kczoxOworCXU4ICAgICAgICAgdHJhbnNfZGlzOjE7CisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHNvZnRfcmVzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJLyogcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSAqLworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJCQkJCS8qIHBlcmlwaGVyYWwgcXVhbGlmaWVyICovCisKKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OworCQkJCQkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCXU4ICAgICAgICAgcm1iOjE7CQkvKiByZW1vdmFibGUgbWVkaXVtIGJpdCAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKwl1OCAgICAgICAgIGhpX3N1cHBvcnQ6MTsJLyogU0NTSS0zOiBzdXBwb3J0cyBSRVBPUlQgTFVOUyAqLworCXU4ICAgICAgICAgbm9ybV9hY2E6MTsJLyogbm9ybWFsIEFDQSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRlcm1pbmF0ZV9pb3A6MTsvKiB0ZXJtaW5hdGUgSS9PIHByb2Nlc3MgKi8KKwl1OCAgICAgICAgIGFlbmM6MTsJCS8qIGFzeW5jIGV2ZW50IG5vdGlmaWNhdGlvbiBjYXBhYmlsaXR5CisJCQkJCSAqLworCisJdTggICAgICAgICBhZGRpdGlvbmFsX2xlbjsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo3OworCXU4ICAgICAgICAgc2NjczoxOworCisJdTggICAgICAgICBhZGRyMTY6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFja19yZXFfcToxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBtX2NobmdyOjE7CS8qIGRldmljZSBpbiBtZWRpdW0gdHJhbnNwb3J0IGVsZW1lbnQgKi8KKwl1OCAgICAgICAgIG11bHRpX3BvcnQ6MTsJLyogbXVsdGktcG9ydCBkZXZpY2UgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOwkvKiBUQkQgLSBWZW5kb3IgU3BlY2lmaWMgKi8KKwl1OCAgICAgICAgIGVuY19zZXJ2OjE7CS8qIGVuY2xvc3VyZSBzZXJ2aWNlIGNvbXBvbmVudCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisKKwl1OCAgICAgICAgIHNvZnRfc2VzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRyYW5zX2RpczoxOworCXU4ICAgICAgICAgbGlua2VkX2NvbW1hbmRzOjE7CisJdTggICAgICAgICBzeW5jaHJvbm91czoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3ZlbmRvcl9zIHZlbmRvcl9pZDsKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zIHByb2R1Y3RfaWQ7CisJc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kcmV2X3MgcHJvZHVjdF9yZXY7CisJdTggICAgICAgICB2ZW5kb3Jfc3BlY2lmaWNbMjBdOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0WzQwXTsKK307CisKKy8qCisgKiBpbnF1aXJ5LnBlcmlwaGVyYWxfcXVhbCBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVlFVQUxfREVGQVVMVCAgICAgICAgMAorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX0NPTk5FQ1RFRCAgMQorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX1NVUFBPUlRFRCAgMworCisvKgorICogaW5xdWlyeS5kZXZpY2VfdHlwZSBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVklDRV9ESVJFQ1RfQUNDRVNTICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfU0VRX0FDQ0VTUyAgICAgICAgICAweDAxCisjZGVmaW5lIFNDU0lfREVWSUNFX0FSUkFZX0NPTlRST0xMRVIgICAgMHgwQworI2RlZmluZSBTQ1NJX0RFVklDRV9VTktOT1dOICAgICAgICAgICAgIDB4MUYKKworLyoKKyAqIGlucXVpcnkudmVyc2lvbgorICovCisjZGVmaW5lIFNDU0lfVkVSU0lPTl9BTlNJX1gzMTMxICAgICAyCS8qIEFOU0kgWDMuMTMxIFNDU0ktMiAqLworI2RlZmluZSBTQ1NJX1ZFUlNJT05fU1BDICAgICAgICAgICAgMwkvKiBTUEMgKFNDU0ktMyksIEFOU0kgWDMuMzAxOjE5OTcgKi8KKyNkZWZpbmUgU0NTSV9WRVJTSU9OX1NQQ18yICAgICAgICAgIDQJLyogU1BDLTIgKi8KKworLyoKKyAqIHJlc3BvbnNlIGRhdGEgZm9ybWF0CisgKi8KKyNkZWZpbmUgU0NTSV9SU1BfREFUQV9GT1JNQVQgICAgICAgIDIJLyogU0NTSS0yICYgU1BDICovCisKKy8qCisgKiBTQ1NJIGlucXVpcnkgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VfVlBEX1BBR0VTICAgICAweDAwCS8qIHN1cHBvcnRlZCB2cGQgcGFnZXMgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9VU05fUEFHRSAgICAgIDB4ODAJLyogdW5pdCBzZXJpYWwgbnVtYmVyIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9ERVZfSURFTlQgICAgIDB4ODMJLyogZGV2aWNlIGluZGVudGlmaWNhdGlvbiBwYWdlCisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRVNfTUFYICAgICAgICAgIDMKKworLyoKKyAqIHN1cHBvcnRlZCB2aXRhbCBwcm9kdWN0IGRhdGEgcGFnZXMKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfdnBkX3BhZ2VzX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkOworCXU4ICAgICAgICAgcGFnZV9sZW5ndGg7CisJdTggICAgICAgICBwYWdlc1tTQ1NJX0lOUV9QQUdFU19NQVhdOworfTsKKworLyoKKyAqIFVuaXQgc2VyaWFsIG51bWJlciBwYWdlCisgKi8KKyNkZWZpbmUgU0NTSV9JTlFfVVNOX0xFTiAzMgorCitzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3N7CisJY2hhciAgICAgICAgICAgIHVzbltTQ1NJX0lOUV9VU05fTEVOXTsKK307CisKK3N0cnVjdCBzY3NpX2lucV9wYWdlX3Vzbl9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBwYWdlX2xlbmd0aDsKKwlzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3MgIHVzbjsKK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9DT0RFX0JJTkFSWSA9IDEsCS8qIGlkZW50aWZpZXIgaGFzIGJpbmFyeSB2YWx1ZSAqLworCVNDU0lfSU5RX0RJUF9DT0RFX0FTQ0lJID0gMiwJLyogaWRlbnRpZmllciBoYXMgYXNjaWkgdmFsdWUgKi8KK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9BU1NPQ19MVU4gPSAwLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggZGV2aWNlICovCisJU0NTSV9JTlFfRElQX0FTU09DX1BPUlQgPSAxLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggcG9ydCB0aGF0CisJCQkJCSAqIHJlY2VpdmVkIHRoZSByZXF1ZXN0CisJCQkJCSAqLworfTsKKworZW51bSB7CisJU0NTSV9JTlFfSURfVFlQRV9WRU5ET1IgPSAxLAorCVNDU0lfSU5RX0lEX1RZUEVfSUVFRSA9IDIsCisJU0NTSV9JTlFfSURfVFlQRV9GQ19GUyA9IDMsCisJU0NTSV9JTlFfSURfVFlQRV9PVEhFUiA9IDQsCit9OworCitzdHJ1Y3Qgc2NzaV9pbnFfZGlwX2Rlc2Nfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzMDo0OworCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICBpZF90eXBlOjQ7CisjZWxzZQorCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczA6NDsKKwl1OCAgICAgICAgIGlkX3R5cGU6NDsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICByZXMxOjI7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlczI7CisJdTggICAgICAgICBpZF9sZW47CisJc3RydWN0IHNjc2lfbHVuX3NuX3MgICBpZDsKK307CisKKy8qCisgKiBEZXZpY2UgaW5kZW50aWZpY2F0aW9uIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfZGV2X2lkZW50X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIHBhZ2VfbGVuZ3RoOworCXN0cnVjdCBzY3NpX2lucV9kaXBfZGVzY19zIGRlc2M7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJFQUQgQ0FQQUNJVFkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsKKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOwkvKiBNU0IgKi8KKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworCXU4ICAgICAgICAgcG1pOjE7CS8qIHBhcnRpYWwgbWVkaXVtIGluZGljYXRvciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBtaToxOwkvKiBwYXJ0aWFsIG1lZGl1bSBpbmRpY2F0b3IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworI2VuZGlmCisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eV9kYXRhX3N7CisJdTMyICAgICAgICBtYXhfbGJhOwkvKiBtYXhpbXVtIExCQSBhdmFpbGFibGUgKi8KKwl1MzIgICAgICAgIGJsb2NrX2xlbmd0aDsJLyogaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHkxNl9kYXRhX3N7CisJdTY0ICAgICAgICBsYmE7CS8qIG1heGltdW0gTEJBIGF2YWlsYWJsZSAqLworCXUzMiAgICAgICAgYmxvY2tfbGVuZ3RoOwkvKiBpbiBieXRlcyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6NCwKKwkJCXBfdHlwZTozLAorCQkJcHJvdF9lbjoxOworCXU4CQlyZXNlcnZlZDI6NCwKKwkJCWxiX3BiZTo0OwkvKiBsb2dpY2FsIGJsb2NrcyBwZXIgcGh5c2ljYWwgYmxvY2sKKwkJCQkJICogZXhwb25lbnQgKi8KKwl1MTYJcmVzZXJ2ZWQzOjIsCisJCQlsYmFfYWxpZ246MTQ7CS8qIGxvd2VzdCBhbGlnbmVkIGxvZ2ljYWwgYmxvY2sKKwkJCQkJICogYWRkcmVzcyAqLworI2Vsc2UKKwl1MTYJbGJhX2FsaWduOjE0LAkvKiBsb3dlc3QgYWxpZ25lZCBsb2dpY2FsIGJsb2NrCisJCQkJCSAqIGFkZHJlc3MgKi8KKwkJCXJlc2VydmVkMzoyOworCXU4CQlsYl9wYmU6NCwJLyogbG9naWNhbCBibG9ja3MgcGVyIHBoeXNpY2FsIGJsb2NrCisJCQkJCSAqIGV4cG9uZW50ICovCisJCQlyZXNlcnZlZDI6NDsKKwl1OAkJcHJvdF9lbjoxLAorCQkJcF90eXBlOjMsCisJCQlyZXNlcnZlZDE6NDsKKyNlbmRpZgorCXU2NAlyZXNlcnZlZDQ7CisJdTY0CXJlc2VydmVkNTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUkVQT1JUIExVTlMgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RydWN0IHNjc2lfcmVwb3J0X2x1bnNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsJCS8qIEEwaCAtIFJFUE9SVCBMVU5TIG9wQ29kZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxWzVdOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoWzRdOy8qIGFsbG9jYXRpb24gbGVuZ3RoIE1TQiBmaXJzdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9SRVBPUlRfTFVOX0FMTE9DX0xFTkdUSChybCkgICAgICAgICAgICAgICAgCQlcCisgICAgKChybC0+YWxsb2NfbGVuZ3RoWzBdIDw8IDI0KSB8IChybC0+YWxsb2NfbGVuZ3RoWzFdIDw8IDE2KSB8IAlcCisgICAgIChybC0+YWxsb2NfbGVuZ3RoWzJdIDw8IDgpIHwgKHJsLT5hbGxvY19sZW5ndGhbM10pKQorCisjZGVmaW5lIFNDU0lfUkVQT1JUX0xVTlNfU0VUX0FMTE9DTEVOKHJsLCBhbGxvY19sZW4pIHsgICAgICBcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzBdID0gKGFsbG9jX2xlbikgPj4gMjQ7ICAgICAgCQkJXAorICAgIChybCktPmFsbG9jX2xlbmd0aFsxXSA9ICgoYWxsb2NfbGVuKSA+PiAxNikgJiAweEZGOyAJCVwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbMl0gPSAoKGFsbG9jX2xlbikgPj4gOCkgJiAweEZGOyAgCQlcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzNdID0gKGFsbG9jX2xlbikgJiAweEZGOyAgICAgCQkJXAorfQorCitzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19kYXRhX3N7CisJdTMyICAgICAgICBsdW5fbGlzdF9sZW5ndGg7CS8qIGxlbmd0aCBvZiBMVU4gbGlzdCBsZW5ndGggKi8KKwl1MzIgICAgICAgIHJlc2VydmVkOworCWx1bl90ICAgICAgICAgICBsdW5bMV07CQkJLyogZmlyc3QgTFVOIGluIGx1biBsaXN0ICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIG1vZGUgIHBhcmFtZXRlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2VudW0geworCVNDU0lfREFfTUVESVVNX0RFRiA9IDAsCS8qIGRpcmVjdCBhY2Nlc3MgZGVmYXVsdCBtZWRpdW0gdHlwZSAqLworCVNDU0lfREFfTUVESVVNX1NTID0gMSwJLyogZGlyZWN0IGFjY2VzcyBzaW5nbGUgc2lkZWQgKi8KKwlTQ1NJX0RBX01FRElVTV9EUyA9IDIsCS8qIGRpcmVjdCBhY2Nlc3MgZG91YmxlIHNpZGVkICovCit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCg2KSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZWxlY3Q2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgcGY6MTsJCS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHNwOjE7CQkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1syXTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2VsZWN0MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBzcDoxOwkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1s1XTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9tc2I7CisJdTggICAgICAgICBhbGxvY19sZW5fbHNiOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2Vuc2UoNikgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGlzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCisJdTggICAgICAgICBwYzoyOwkvKiBwYWdlIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHBjOjI7CS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZW5zZSgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2UxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIExMQkFBOjE7CS8qIGxvbmcgTEJBIGFjY2VwdGVkIGlmIHNldCB0byAxICovCisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0CisJCQkJCSAqIHRvIDEKKwkJCQkJICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvCisJCQkJCSAqIDEKKwkJCQkJICovCisJdTggICAgICAgICBMTEJBQToxOwkvKiBsb25nIExCQSBhY2NlcHRlZCBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDNbNF07CisJdTggICAgICAgICBhbGxvY19sZW5fbXNiOworCXU4ICAgICAgICAgYWxsb2NfbGVuX2xzYjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX0FMKGNkYikgIAkJCQkJXAorICAgICgoY2RiKS0+YWxsb2NfbGVuX21zYiA8PCA4IHwgKGNkYiktPmFsbG9jX2xlbl9sc2IpCisKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfQUwoY2RiLCBhbCkgeyAgICAgIFwKKyAgICAoY2RiKS0+YWxsb2NfbGVuX21zYiA9IGFsID4+IDg7ICAgICAgIAkJCQlcCisgICAgKGNkYiktPmFsbG9jX2xlbl9sc2IgPSBhbCAmIDB4RkY7ICAgICAJCQkJXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCNl9HRVRfQUwoY2RiKSAoKGNkYiktPmFsbG9jX2xlbikKKworI2RlZmluZSBTQ1NJX0NEQjZfU0VUX0FMKGNkYiwgYWwpIHsgICAgICBcCisgICAgKGNkYiktPmFsbG9jX2xlbiA9IGFsOyAgICAgICAgIAkJCQkJXAorfQorCisvKgorICogcGFnZSBjb250cm9sIGZpZWxkIHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfUENfQ1VSUkVOVF9WQUxVRVMgICAgICAgMHgwCisjZGVmaW5lIFNDU0lfUENfQ0hBTkdFQUJMRV9WQUxVRVMgICAgMHgxCisjZGVmaW5lIFNDU0lfUENfREVGQVVMVF9WQUxVRVMgICAgICAgMHgyCisjZGVmaW5lIFNDU0lfUENfU0FWRURfVkFMVUVTICAgICAgICAgMHgzCisKKy8qCisgKiBTQ1NJIG1vZGUgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfTVBfVkVORE9SX1NQRUMgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9NUF9ESVNDX1JFQ04gICAgICAgMHgwMgkvKiBkaXNjb25uZWN0LXJlY29ubmVjdCBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfRk9STUFUX0RFVklDRSAgIDB4MDMKKyNkZWZpbmUgU0NTSV9NUF9SREcgICAgICAgICAgICAgMHgwNAkvKiByaWdpZCBkaXNrIGdlb21ldHJ5IHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9GRFAgICAgICAgICAgICAgMHgwNQkvKiBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DQUNISU5HICAgICAgICAgMHgwOAkvKiBjYWNoaW5nIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DT05UUk9MICAgICAgICAgMHgwQQkvKiBjb250cm9sIG1vZGUgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX01FRF9UWVBFU19TVVAgICAweDBCCS8qIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0lORk9fRVhDUF9DTlRMICAweDFDCS8qIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgU0NTSV9NUF9BTEwgICAgICAgICAgICAgMHgzRgkvKiByZXR1cm4gYWxsIHBhZ2VzIC0gbW9kZSBzZW5zZSBvbmx5ICovCisKKy8qCisgKiBtb2RlIHBhcmFtZXRlciBoZWFkZXIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3N7CisJdTggICAgICAgICBtb2RlX2RhdGFsZW47CisJdTggICAgICAgICBtZWRpdW1fdHlwZTsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisJdTggICAgICAgICBibG9ja19kZXNjbGVuOworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zeworCXUzMiAgICAgICAgbW9kZV9kYXRhbGVuOjE2OworCXUzMiAgICAgICAgbWVkaXVtX3R5cGU6ODsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworCXUzMiAgICAgICAgbG9uZ2xiYToxOworI2Vsc2UKKwl1MzIgICAgICAgIGxvbmdsYmE6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDQ6ODsKKwl1MzIgICAgICAgIGJsb2NrX2Rlc2NsZW46MTY7Cit9OworCisvKgorICogbW9kZSBwYXJhbWV0ZXIgYmxvY2sgZGVzY3JpcHRvcgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2Nfc3sKKwl1MzIgICAgICAgIG5ibGtzOworCXUzMiAgICAgICAgZGVuc2l0eV9jb2RlOjg7CisJdTMyICAgICAgICBibG9ja19sZW5ndGg6MjQ7Cit9OworCisvKgorICogRGlzY29ubmVjdC1yZWNvbm5lY3QgbW9kZSBwYWdlIGZvcm1hdAorICovCitzdHJ1Y3Qgc2NzaV9tcF9kaXNjX3JlY25fc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCXU4ICAgICAgICAgYnVmX2Z1bGxfcmF0aW87CisJdTggICAgICAgICBidWZfZW1wdHlfcmF0aW87CisKKwl1OCAgICAgICAgIGJpbF9tc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1NU0IgKi8KKwl1OCAgICAgICAgIGJpbF9sc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1MU0IgKi8KKworCXU4ICAgICAgICAgZHRsX21zYjsJLyogZGlzY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBkdGxfbHNiOwkvKiBkaXNjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgY3RsX21zYjsJLyogY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBjdGxfbHNiOwkvKiBjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgbWF4X2J1cnN0X2xlbl9tc2I7CisJdTggICAgICAgICBtYXhfYnVyc3RfbGVuX2xzYjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZW1kcDoxOwkvKiBlbmFibGUgbW9kaWZ5IGRhdGEgcG9pbnRlcnMgKi8KKwl1OCAgICAgICAgIGZhOjM7CS8qIGZhaXIgYXJiaXRyYXRpb24gKi8KKwl1OCAgICAgICAgIGRpbW06MTsJLyogZGlzY29ubmVjdCBpbW1lZGlhdGUgKi8KKwl1OCAgICAgICAgIGR0ZGM6MzsJLyogZGF0YSB0cmFuc2ZlciBkaXNjb25uZWN0IGNvbnRyb2wgKi8KKyNlbHNlCisJdTggICAgICAgICBkdGRjOjM7CS8qIGRhdGEgdHJhbnNmZXIgZGlzY29ubmVjdCBjb250cm9sICovCisJdTggICAgICAgICBkaW1tOjE7CS8qIGRpc2Nvbm5lY3QgaW1tZWRpYXRlICovCisJdTggICAgICAgICBmYTozOwkvKiBmYWlyIGFyYml0cmF0aW9uICovCisJdTggICAgICAgICBlbWRwOjE7CS8qIGVuYWJsZSBtb2RpZnkgZGF0YSBwb2ludGVycyAqLworI2VuZGlmCisKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKworCXU4ICAgICAgICAgZmlyc3RfYnVyc3RfbGVuX21zYjsKKwl1OCAgICAgICAgIGZpcnN0X2J1cnN0X2xlbl9sc2I7Cit9OworCisvKgorICogU0NTSSBmb3JtYXQgZGV2aWNlIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mb3JtYXRfZGV2aWNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3NlY19wZXJfem9uZToxNjsKKwl1MzIgICAgICAgIGFfdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3RyYWNrc19wZXJfbHVuOjE2OwkvKiBhbHRlcm5hdGUgdHJhY2tzL2x1bi1NU0IgKi8KKwl1MzIgICAgICAgIHNlY19wZXJfdHJhY2s6MTY7CS8qIHNlY3RvcnMvdHJhY2stTVNCICovCisKKwl1MzIgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3I6MTY7CisJdTMyICAgICAgICBpbnRlcmxlYXZlOjE2OworCisJdTMyICAgICAgICB0c2Y6MTY7CQkJLyogdHJhY2sgc2tldyBmYWN0b3ItTVNCICovCisJdTMyICAgICAgICBjc2Y6MTY7CQkJLyogY3lsaW5kZXIgc2tldyBmYWN0b3ItTVNCICovCisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisJdTMyICAgICAgICBoc2VjOjE7CS8qIGhhcmQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIHN1cmY6MTsJLyogc3VyZmFjZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisJdTMyICAgICAgICBzdXJmOjE7CS8qIHN1cmZhY2UgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIGhzZWM6MTsJLyogaGFyZCBzZWN0b3IgZm9ybWF0dGluZyAqLworCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisjZW5kaWYKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKK307CisKKy8qCisgKiBTQ1NJIHJpZ2lkIGRpc2sgZGV2aWNlIGdlb21ldHJ5IHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfcmlnaWRfZGV2aWNlX2dlb21ldHJ5X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgbnVtX2N5bGluZGVyczA6ODsKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMxOjg7CisKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMyOjg7CisJdTMyICAgICAgICBudW1faGVhZHM6ODsKKwl1MzIgICAgICAgIHNjd3AwOjg7CisJdTMyICAgICAgICBzY3dwMTo4OworCisJdTMyICAgICAgICBzY3dwMjo4OworCXUzMiAgICAgICAgc2Nyd2MwOjg7CisJdTMyICAgICAgICBzY3J3YzE6ODsKKwl1MzIgICAgICAgIHNjcndjMjo4OworCisJdTMyICAgICAgICBkc3I6MTY7CisJdTMyICAgICAgICBsc2N5bDA6ODsKKwl1MzIgICAgICAgIGxzY3lsMTo4OworCisJdTMyICAgICAgICBsc2N5bDI6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisJdTMyICAgICAgICBycGw6MjsJLyogcm90YXRpb25hbCBwb3NpdGlvbiBsb2NraW5nICovCisjZWxzZQorCXUzMiAgICAgICAgcnBsOjI7CS8qIHJvdGF0aW9uYWwgcG9zaXRpb24gbG9ja2luZyAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisjZW5kaWYKKwl1MzIgICAgICAgIHJvdF9vZmY6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo4OworCisJdTMyICAgICAgICBtZWRfcm90X3JhdGU6MTY7CisJdTMyICAgICAgICByZXNlcnZlZDQ6MTY7Cit9OworCisvKgorICogU0NTSSBjYWNoaW5nIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXMxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlczE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBpYzoxOwkvKiBpbml0aWF0b3IgY29udHJvbCAqLworCXU4ICAgICAgICAgYWJwZjoxOwkvKiBhYm9ydCBwcmUtZmV0Y2ggKi8KKwl1OCAgICAgICAgIGNhcDoxOwkvKiBjYWNoaW5nIGFuYWx5c2lzIHBlcm1pdHRlZCAqLworCXU4ICAgICAgICAgZGlzYzoxOwkvKiBkaXNjb250aW51aXR5ICovCisJdTggICAgICAgICBzaXplOjE7CS8qIHNpemUgZW5hYmxlICovCisJdTggICAgICAgICB3Y2U6MTsJLyogd3JpdGUgY2FjaGUgZW5hYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHJjZDoxOwkvKiByZWFkIGNhY2hlIGRpc2FibGUgKi8KKworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKwl1OCAgICAgICAgIHdycDo0OwkvKiB3cml0ZSByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbHNlCisJdTggICAgICAgICByY2Q6MTsJLyogcmVhZCBjYWNoZSBkaXNhYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHdjZToxOwkvKiB3cml0ZSBjYWNoZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIHNpemU6MTsJLyogc2l6ZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIGRpc2M6MTsJLyogZGlzY29udGludWl0eSAqLworCXU4ICAgICAgICAgY2FwOjE7CS8qIGNhY2hpbmcgYW5hbHlzaXMgcGVybWl0dGVkICovCisJdTggICAgICAgICBhYnBmOjE7CS8qIGFib3J0IHByZS1mZXRjaCAqLworCXU4ICAgICAgICAgaWM6MTsJLyogaW5pdGlhdG9yIGNvbnRyb2wgKi8KKworCXU4ICAgICAgICAgd3JwOjQ7CS8qIHdyaXRlIHJldGVudGlvbiBwcmlvcml0eSAqLworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgZHB0bFsyXTsvKiBkaXNhYmxlIHByZS1mZXRjaCB0cmFuc2ZlciBsZW5ndGggKi8KKwl1OCAgICAgICAgIG1pbl9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaF9saW1pdFsyXTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKwl1OCAgICAgICAgIGxiY3NzOjE7LyogbG9naWNhbCBibG9jayBjYWNoZSBzZWdtZW50IHNpemUgKi8KKwl1OCAgICAgICAgIGRyYToxOwkvKiBkaXNhYmxlIHJlYWQgYWhlYWQgKi8KKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgcmVzMjozOworI2Vsc2UKKwl1OCAgICAgICAgIHJlczI6MzsKKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgZHJhOjE7CS8qIGRpc2FibGUgcmVhZCBhaGVhZCAqLworCXU4ICAgICAgICAgbGJjc3M6MTsvKiBsb2dpY2FsIGJsb2NrIGNhY2hlIHNlZ21lbnQgc2l6ZSAqLworCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbnVtX2NhY2hlX3NlZ3M7CisKKwl1OCAgICAgICAgIGNhY2hlX3NlZ19zaXplWzJdOworCXU4ICAgICAgICAgcmVzMzsKKwl1OCAgICAgICAgIG5vbl9jYWNoZV9zZWdfc2l6ZVszXTsKK307CisKKy8qCisgKiBTQ1NJIGNvbnRyb2wgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2NvbnRyb2xfcGFnZV9zeworI2lmZGVmIF9fQklHRU5ESUFOCit1OCAgICAgICAgIHBzOjE7Cit1OCAgICAgICAgIHJlc2VydmVkMToxOwordTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCit1OCAgICAgICAgIHBhZ2VfY29kZTo2OwordTggICAgICAgICByZXNlcnZlZDE6MTsKK3U4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHRzdDozOwkJLyogdGFzayBzZXQgdHlwZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICBnbHRzZDoxOwkvKiBnbG9iYWwgbG9nZ2luZyB0YXJnZXQgc2F2ZSBkaXNhYmxlICovCisJdTggICAgICAgICBybGVjOjE7CQkvKiByZXBvcnQgbG9nIGV4Y2VwdGlvbiBjb25kaXRpb24gKi8KKworCXU4ICAgICAgICAgcWFsZ29fbW9kOjQ7CS8qIHF1ZXVlIGFsb2dvcml0aG0gbW9kaWZpZXIgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgcWVycjoyOwkJLyogcXVldWUgZXJyb3IgbWFuYWdlbWVudCAqLworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisKKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCXU4ICAgICAgICAgcmFjOjE7CQkvKiByZXBvcnQgYSBjaGVjayAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ2OjI7CisJdTggICAgICAgICBzd3A6MTsJCS8qIHNvZnR3YXJlIHdyaXRlIHByb3RlY3QgKi8KKwl1OCAgICAgICAgIHJhZXJwOjE7CS8qIHJlYWR5IEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICBlYWVycDoxOwkvKiBlcnJvciBBRVIgcGVybWlzc2lvbiAqLworCisJdTggICAgICAgICByZXNlcnZlZDc6NTsKKwl1OCAgICAgICAgIGF1dG9sb2FkX21vZDozOworI2Vsc2UKKwl1OCAgICAgICAgIHJsZWM6MTsJCS8qIHJlcG9ydCBsb2cgZXhjZXB0aW9uIGNvbmRpdGlvbiAqLworCXU4ICAgICAgICAgZ2x0c2Q6MTsJLyogZ2xvYmFsIGxvZ2dpbmcgdGFyZ2V0IHNhdmUgZGlzYWJsZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICB0c3Q6MzsJCS8qIHRhc2sgc2V0IHR5cGUgKi8KKworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisJdTggICAgICAgICBxZXJyOjI7CQkvKiBxdWV1ZSBlcnJvciBtYW5hZ2VtZW50ICovCisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHFhbGdvX21vZDo0OwkvKiBxdWV1ZSBhbG9nb3JpdGhtIG1vZGlmaWVyICovCisKKwl1OCAgICAgICAgIGVhZXJwOjE7CS8qIGVycm9yIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICByYWVycDoxOwkvKiByZWFkeSBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgc3dwOjE7CQkvKiBzb2Z0d2FyZSB3cml0ZSBwcm90ZWN0ICovCisJdTggICAgICAgICByZXNlcnZlZDY6MjsKKwl1OCAgICAgICAgIHJhYzoxOwkJLyogcmVwb3J0IGEgY2hlY2sgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCisJdTggICAgICAgICBhdXRvbG9hZF9tb2Q6MzsKKwl1OCAgICAgICAgIHJlc2VydmVkNzo1OworI2VuZGlmCisJdTggICAgICAgICByYWhwX21zYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTVNCICovCisJdTggICAgICAgICByYWhwX2xzYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTFNCICovCisKKwl1OCAgICAgICAgIGJ1c3lfdGltZW91dF9wZXJpb2RfbXNiOworCXU4ICAgICAgICAgYnVzeV90aW1lb3V0X3BlcmlvZF9sc2I7CisKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX21zYjsKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX2xzYjsKK307CisKKy8qCisgKiBTQ1NJIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX21lZGl1bV90eXBlc19zdXBfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCisJdTggICAgICAgICByZXNlcnZlZDNbMl07CisJdTggICAgICAgICBtZWRfdHlwZTFfc3VwOwkvKiBtZWRpdW0gdHlwZSBvbmUgc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTJfc3VwOwkvKiBtZWRpdW0gdHlwZSB0d28gc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTNfc3VwOwkvKiBtZWRpdW0gdHlwZSB0aHJlZSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIG1lZF90eXBlNF9zdXA7CS8qIG1lZGl1bSB0eXBlIGZvdXIgc3VwcG9ydGVkICovCit9OworCisvKgorICogU0NTSSBpbmZvcm1hdGlvbmFsIGV4Y2VwdGlvbiBjb250cm9sIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9pbmZvX2V4Y3B0X2NudGxfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBlYmY6MTsJCS8qIGVuYWJsZSBiYWNrZ3JvdW5kIGZ1Y250aW9uICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZGV4Y3B0OjE7CS8qIGRpc2FibGUgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworCXU4ICAgICAgICAgbXJpZTo0OwkJLyogbWV0aG9kIG9mIHJlcG9ydGluZyBpbmZvCisJCQkJCSAqIGV4Y2VwdGlvbnMKKwkJCQkJICovCisjZWxzZQorCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIGRleGNwdDoxOwkvKiBkaXNhYmxlIGV4Y2VwdGlvbiBjb250cm9sICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZWJmOjE7CQkvKiBlbmFibGUgYmFja2dyb3VuZCBmdWNudGlvbiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCisJdTggICAgICAgICBtcmllOjQ7CQkvKiBtZXRob2Qgb2YgcmVwb3J0aW5nIGluZm8KKwkJCQkJICogZXhjZXB0aW9ucworCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworI2VuZGlmCisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9tc2I7CisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9sc2I7CisKKwl1OCAgICAgICAgIHJlcG9ydF9jb3VudF9tc2I7CisJdTggICAgICAgICByZXBvcnRfY291bnRfbHNiOworfTsKKworLyoKKyAqIE1ldGhvZHMgb2YgcmVwb3J0aW5nIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9ucworICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX05PX1JFUE9SVCAgICAgICAweDAJLyogbm8gcmVwb3J0aW5nIG9mIGV4Y2VwdGlvbnMgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfQUVSICAgICAgICAgICAgIDB4MQkvKiBhc3luYyBldmVudCByZXBvcnRpbmcgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5JVF9BVFROICAgICAgIDB4MgkvKiBnZW5lcmF0ZSB1bml0IGF0dGVuc3Rpb24gKi8KKyNkZWZpbmUgU0NTSV9NT19JRUNfQ09ORF9SRUNfRVJSICAgIDB4MwkvKiBjb25kaXRpb25hbGx5IGdlbmVyYXRlIHJlY292ZXJlZAorCQkJCQkgKiBlcnJvcgorCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5DT05EX1JFQ19FUlIgIDB4NAkvKiB1bmNvbmRpdGlvbmFsbHkgZ2VuZXJhdGUgcmVjb3ZlcmVkCisJCQkJCSAqIGVycm9yCisJCQkJCSAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19OT19TRU5TRSAgICAgICAgMHg1CS8qIGdlbmVyYXRlIG5vIHNlbnNlICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX09OX1JFUVVFU1QgICAgICAweDYJLyogb25seSByZXBvcnQgZXhjZXB0aW9ucyBvbiByZXF1ZXN0ICovCisKKy8qCisgKiBTQ1NJIGZsZXhpYmxlIGRpc2sgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mbGV4aWJsZV9kaXNrX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKworCXU4ICAgICAgICAgdHJhbnNmZXJfcmF0ZV9tc2I7CisJdTggICAgICAgICB0cmFuc2Zlcl9yYXRlX2xzYjsKKworCXU4ICAgICAgICAgbnVtX2hlYWRzOworCXU4ICAgICAgICAgbnVtX3NlY3RvcnM7CisKKwl1OCAgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3JfbXNiOworCXU4ICAgICAgICAgYnl0ZXNfcGVyX3NlY3Rvcl9sc2I7CisKKwl1OCAgICAgICAgIG51bV9jeWxpbmRlcnNfbXNiOworCXU4ICAgICAgICAgbnVtX2N5bGluZGVyc19sc2I7CisKKwl1OCAgICAgICAgIHNjX3dwY19tc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXdyaXRlCisJCQkJCSAqIHByZWNvbXBlbnNhdGlvbiBtc2IKKwkJCQkJICovCisJdTggICAgICAgICBzY193cGNfbHNiOwkvKiBzdGFydGluZyBjeWxpbmRlci13cml0ZQorCQkJCQkgKiBwcmVjb21wZW5zYXRpb24gbHNiCisJCQkJCSAqLworCXU4ICAgICAgICAgc2NfcndjX21zYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItcmVkdWNlZCB3cml0ZQorCQkJCQkgKiBjdXJyZW50IG1zYgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHNjX3J3Y19sc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXJlZHVjZWQgd3JpdGUKKwkJCQkJICogY3VycmVudCBsc2IKKwkJCQkJICovCisKKwl1OCAgICAgICAgIGRldl9zdGVwX3JhdGVfbXNiOworCXU4ICAgICAgICAgZGV2X3N0ZXBfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIGRldl9zdGVwX3B1bHNlX3dpZHRoOworCisJdTggICAgICAgICBoZWFkX3NkX21zYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbXNiICovCisJdTggICAgICAgICBoZWFkX3NkX2xzYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbHNiICovCisKKwl1OCAgICAgICAgIG1vdG9yX29uX2RlbGF5OworCXU4ICAgICAgICAgbW90b3Jfb2ZmX2RlbGF5OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICB0cmR5OjE7CQkvKiB0cnVlIHJlYWR5IGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjU7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNDo0OworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMzo1OworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgdHJkeToxOwkJLyogdHJ1ZSByZWFkeSBiaXQgKi8KKworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIHdyaXRlX2NvbXA7CisJdTggICAgICAgICBoZWFkX2xvYWRfZGVsYXk7CisJdTggICAgICAgICBoZWFkX3VubG9hZF9kZWxheTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGluMzQ6NDsJLyogcGluMzQgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKworCXU4ICAgICAgICAgcGluNDo0OwkJLyogcGluNCB1c2FnZSAqLworCXU4ICAgICAgICAgcGluMTo0OwkJLyogcGluMSB1c2FnZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjM0OjQ7CS8qIHBpbjM0IHVzYWdlICovCisKKwl1OCAgICAgICAgIHBpbjE6NDsJCS8qIHBpbjEgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjQ6NDsJCS8qIHBpbjQgdXNhZ2UgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbWVkX3JvdF9yYXRlX21zYjsKKwl1OCAgICAgICAgIG1lZF9yb3RfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNVsyXTsKK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9mb3JtYXRfZGF0YTZfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfZm9ybWF0X2RhdGExMF9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfcmRnX2RhdGE2X3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX3JkZ19kYXRhMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlNl9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3MgY2FjaGU7CS8qIGNhY2hlIHBhZ2UgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2NhY2hpbmdfcyBjYWNoZTsJLyogY2FjaGUgcGFnZSBkYXRhICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRm9ybWF0IFVuaXQgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZvcm1hdCBVbml0IENEQgorICovCitzdHJ1Y3Qgc2NzaV9mb3JtYXRfdW5pdF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXMxOjM7CisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgY21wbHN0OjE7CS8qIGlmIHNldCwgZGVmZWN0IGxpc3QgaXMgY29tcGxldGUgKi8KKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0xCisJCQkJCSAqLworI2Vsc2UKKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0gMQorCQkJCQkgKi8KKwl1OCAgICAgICAgIGNtcGxzdDoxOwkvKiBpZiBzZXQsIGRlZmVjdCBsaXN0IGlzIGNvbXBsZXRlICovCisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzMTozOworI2VuZGlmCisJdTggICAgICAgICBpbnRlcmxlYXZlX21zYjsKKwl1OCAgICAgICAgIGludGVybGVhdmVfbHNiOworCXU4ICAgICAgICAgdmVuZG9yX3NwZWM7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIGgKKyAqLworc3RydWN0IHNjc2lfcmVzZXJ2ZTZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MzsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICByZXNlcnZlZDozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHBhcmFtX2xpc3RfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBoCisgKi8KK3N0cnVjdCBzY3NpX3JlbGVhc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogaAorICovCitzdHJ1Y3Qgc2NzaV9yZXNlcnZlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV9yZWxlYXNlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV92ZXJpZnkxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVsYWRkcjoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlbGFkZHI6MTsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICB2ZXJpZmljYXRpb25fbGVuMDsKKwl1OCAgICAgICAgIHZlcmlmaWNhdGlvbl9sZW4xOworCXU4ICAgICAgICAgY29udHJvbF9ieXRlOworfTsKKworc3RydWN0IHNjc2lfcmVxdWVzdF9zZW5zZV9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkOjU7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6NTsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDA7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sX2J5dGU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNDU0kgc3RhdHVzIGJ5dGUgdmFsdWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19HT09EICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfU1RBVFVTX0NPTkRJVElPTl9NRVQgICAgICAgICAgMHgwNAorI2RlZmluZSBTQ1NJX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFICAgICAgICAgICAweDEwCisjZGVmaW5lIFNDU0lfU1RBVFVTX0lDTSAgICAgICAgICAgICAgICAgICAgMHgxNAkvKiBpbnRlcm1lZGlhdGUgY29uZGl0aW9uIG1ldCAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCAgIDB4MTgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEICAgICAweDIyCisjZGVmaW5lIFNDU0lfU1RBVFVTX1FVRVVFX0ZVTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBTQ1NJX1NUQVRVU19BQ0FfQUNUSVZFICAgICAgICAgICAgIDB4MzAKKworI2RlZmluZSBTQ1NJX01BWF9BTExPQ19MRU4JCTB4RkYJLyogbWF4aW11bSBhbGxvY2FyaW9uIGxlbmd0aAorCQkJCQkJICogaW4gQ0RCcworCQkJCQkJICovCisKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMCAgICAgIDB4MkUKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMiAgICAgIDB4QUUKKyNkZWZpbmUgU0NTSV9PUF9VTkRFRiAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIFNDU0kgV1JJVEUtVkVSSUZZKDEwKSBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3dyaXRlX3ZlcmlmeTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKwl1OCAgICAgICAgIGVicDoxOwkJLyogZXJzZSBieS1wYXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZWxzZQorCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgZWJwOjE7CQkvKiBlcnNlIGJ5LXBhc3MgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJCS8qIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyAtIE1TQiAqLworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOwkJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICB4ZmVyX2xlbmd0aDA7CS8qIHRyYW5zZmVyIGxlbmd0aCBpbiBibG9ja3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMTsJLyogTFNCICovCisJdTggICAgICAgICBjb250cm9sOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fU0NTSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NWE2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgdHlwZXMuaCBQcm90b2NvbCBkZWZpbmVkIGJhc2UgdHlwZXMKKyAqLworCisjaWZuZGVmIF9fVFlQRVNfSF9fCisjZGVmaW5lIF9fVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKyNkZWZpbmUgd3duX3QgdTY0CisjZGVmaW5lIGx1bl90IHU2NAorCisjZGVmaW5lIFdXTl9OVUxMCSgwKQorI2RlZmluZSBGQ19TWU1OQU1FX01BWAkyNTYJLyogIG1heCBuYW1lIHNlcnZlciBzeW1ib2xpYyBuYW1lIHNpemUgKi8KKyNkZWZpbmUgRkNfQUxQQV9NQVgJMTI4CisKKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIE1BQ19BRERSTEVOCSg2KQorc3RydWN0IG1hY19zIHsgdTggbWFjW01BQ19BRERSTEVOXTsgfTsKKyNkZWZpbmUgbWFjX3Qgc3RydWN0IG1hY19zCisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE4ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9sb29wLmMgdnBvcnQgcHJpdmF0ZSBsb29wIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIExPT1ApOworCisvKioKKyAqICAgQUxQQSB0byBMSVhBIGJpdG1hcCBtYXBwaW5nCisgKgorICogICBBTFBBIDB4MDAgKFdvcmQgMCwgQml0IDMwKSBpcyBpbnZhbGlkIGZvciBOX1BvcnRzLiBBbHNvIFdvcmQgMCBCaXQgMzEKKyAqIGlzIGZvciBMX2JpdCAobG9naW4gcmVxdWlyZWQpIGFuZCBpcyBmaWxsZWQgYXMgQUxQQSAweDAwIGhlcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1OCAgIHBvcnRfbG9vcF9hbHBhX21hcFtdID0geworCTB4RUYsIDB4RTgsIDB4RTQsIDB4RTIsIDB4RTEsIDB4RTAsIDB4REMsIDB4REEsCS8qIFdvcmQgMyBCaXRzIDAuLjcgKi8KKwkweEQ5LCAweEQ2LCAweEQ1LCAweEQ0LCAweEQzLCAweEQyLCAweEQxLCAweENFLAkvKiBXb3JkIDMgQml0cyA4Li4xNSAqLworCTB4Q0QsIDB4Q0MsIDB4Q0IsIDB4Q0EsIDB4QzksIDB4QzcsIDB4QzYsIDB4QzUsCS8qIFdvcmQgMyBCaXRzIDE2Li4yMyAqLworCTB4QzMsIDB4QkMsIDB4QkEsIDB4QjksIDB4QjYsIDB4QjUsIDB4QjQsIDB4QjMsCS8qIFdvcmQgMyBCaXRzIDI0Li4zMSAqLworCisJMHhCMiwgMHhCMSwgMHhBRSwgMHhBRCwgMHhBQywgMHhBQiwgMHhBQSwgMHhBOSwJLyogV29yZCAyIEJpdHMgMC4uNyAqLworCTB4QTcsIDB4QTYsIDB4QTUsIDB4QTMsIDB4OUYsIDB4OUUsIDB4OUQsIDB4OUIsCS8qIFdvcmQgMiBCaXRzIDguLjE1ICovCisJMHg5OCwgMHg5NywgMHg5MCwgMHg4RiwgMHg4OCwgMHg4NCwgMHg4MiwgMHg4MSwJLyogV29yZCAyIEJpdHMgMTYuLjIzICovCisJMHg4MCwgMHg3QywgMHg3QSwgMHg3OSwgMHg3NiwgMHg3NSwgMHg3NCwgMHg3MywJLyogV29yZCAyIEJpdHMgMjQuLjMxICovCisKKwkweDcyLCAweDcxLCAweDZFLCAweDZELCAweDZDLCAweDZCLCAweDZBLCAweDY5LAkvKiBXb3JkIDEgQml0cyAwLi43ICovCisJMHg2NywgMHg2NiwgMHg2NSwgMHg2MywgMHg1QywgMHg1QSwgMHg1OSwgMHg1NiwJLyogV29yZCAxIEJpdHMgOC4uMTUgKi8KKwkweDU1LCAweDU0LCAweDUzLCAweDUyLCAweDUxLCAweDRFLCAweDRELCAweDRDLAkvKiBXb3JkIDEgQml0cyAxNi4uMjMgKi8KKwkweDRCLCAweDRBLCAweDQ5LCAweDQ3LCAweDQ2LCAweDQ1LCAweDQzLCAweDNDLAkvKiBXb3JkIDEgQml0cyAyNC4uMzEgKi8KKworCTB4M0EsIDB4MzksIDB4MzYsIDB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsCS8qIFdvcmQgMCBCaXRzIDAuLjcgKi8KKwkweDJFLCAweDJELCAweDJDLCAweDJCLCAweDJBLCAweDI5LCAweDI3LCAweDI2LAkvKiBXb3JkIDAgQml0cyA4Li4xNSAqLworCTB4MjUsIDB4MjMsIDB4MUYsIDB4MUUsIDB4MUQsIDB4MUIsIDB4MTgsIDB4MTcsCS8qIFdvcmQgMCBCaXRzIDE2Li4yMyAqLworCTB4MTAsIDB4MEYsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsCS8qIFdvcmQgMCBCaXRzIDI0Li4zMSAqLworfTsKKworLyoKKyAqIExvY2FsIEZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgdm9pZCAqY2JhcmcsCisJCQkJCQkgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgdTMyIHJzcF9sZW4sCisJCQkJCQkgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIGluaXRpYWxpemFyIGluIHByb3ZhdGUgTE9PUCB0b3BvbG9neS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisKKwl1OCAgICAgICAgIG51bV9hbHBhID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLm51bV9hbHBhOworCXU4ICAgICAgICAqYWxwYV9wb3NfbWFwID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLmFscGFfcG9zX21hcDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpyX3BvcnQ7CisJaW50ICAgICAgICAgICAgIGlpID0gMDsKKworCS8qCisJICogSWYgdGhlIHBvcnQgcm9sZSBpcyBJbml0aWF0b3IgTW9kZSwgY3JlYXRlIFJwb3J0cy4KKwkgKi8KKwlpZiAocG9ydC0+cG9ydF9jZmcucm9sZXMgPT0gQkZBX1BPUlRfUk9MRV9GQ1BfSU0pIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIEFMUEEgcG9zaXRpb25hbCBiaXRtYXAgaXMgYXZhaWxhYmxlLgorCQkgKiBpZiBub3QsIHdlIHNlbmQgUExPR0kgdG8gYWxsIHBvc3NpYmxlIEFMUEFzLgorCQkgKi8KKwkJaWYgKG51bV9hbHBhID4gMCkgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgbnVtX2FscGE7IGlpKyspIHsKKwkJCQkvKgorCQkJCSAqIGlnbm9yZSBBTFBBIG9mIGJmYSBwb3J0CisJCQkJICovCisJCQkJaWYgKGFscGFfcG9zX21hcFtpaV0gIT0gcG9ydC0+cGlkKSB7CisJCQkJCXJfcG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsCisJCQkJCQlhbHBhX3Bvc19tYXBbaWldKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBNQVhfQUxQQV9DT1VOVDsgaWkrKykgeworCQkJCS8qCisJCQkJICogaWdub3JlIEFMUEEgb2YgYmZhIHBvcnQKKwkJCQkgKi8KKwkJCQlpZiAoKHBvcnRfbG9vcF9hbHBhX21hcFtpaV0gPiAwKQorCQkJCSAgICAmJiAocG9ydF9sb29wX2FscGFfbWFwW2lpXSAhPSBwb3J0LT5waWQpKQorCQkJCQliZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpKHBvcnQsCisJCQkJCQlwb3J0X2xvb3BfYWxwYV9tYXBbaWldKTsKKwkJCQkvKipUQkQgKi8KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRCRCBUYXJnZXQgTW9kZSA/PworCQkgKi8KKwl9CisKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9mZmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgYSBMSVAgb24gdGhlIGxvb3AuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogTG9jYWwgRnVuY3Rpb25zLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIFBsb2dpIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpX3Jlc3A7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCS8qCisJCSAqIEB0b2RvCisJCSAqIFRoaXMgY291bGQgbWVhbiB0aGF0IHRoZSBkZXZpY2Ugd2l0aCB0aGlzIEFQTEEgZG9lcyBub3QKKwkJICogZXhpc3Qgb24gdGhlIGxvb3AuCisJCSAqLworCisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlwbG9naV9yZXNwID0gKHN0cnVjdCBmY19sb2dpX3MgKikgZWxzX2NtZDsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCWJmYV9mY3NfcnBvcnRfc3RhcnQocG9ydCwgcnNwX2ZjaHMsIHBsb2dpX3Jlc3ApOworCX0gZWxzZSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBwbG9naV9yZXNwLT5lbHNfY21kLmVsc19jb2RlKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naV9hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX3Bsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCQkgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCQkgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfYWNjX3Jlc3BvbnNlLAorCQkJCSAodm9pZCAqKXBvcnQsIEZDX01BWF9QRFVTWiwgMCk7IC8qIE5vIHJlc3BvbnNlCisJCQkJCQkJCSAgKiBleHBlY3RlZAorCQkJCQkJCQkgICovCisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoKKyAqICBQbG9naSBBY2MgUmVzcG9uc2UKKyAqIFdlIGRvbm90IGRvIGFueSBwcm9jZXNzaW5nIGhlcmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX2FkaXNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIEFESVNDIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGZjX2FkaXNjX3MgICAgICphZGlzY19yZXNwOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwl1MzIgICAgICAgIHBpZCA9IHJzcF9mY2hzLT5zX2lkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQkvKgorCQkgKiBUQkQgOiB3ZSBtYXkgbmVlZCB0byByZXRyeSBjZXJ0YWluIHJlcXVlc3RzCisJCSAqLworCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJYWRpc2NfcmVzcCA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSBlbHNfY21kOworCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19BQ0MpIHsKKwl9IGVsc2UgeworCQliZmFfdHJjKHBvcnQtPmZjcywgYWRpc2NfcmVzcC0+ZWxzX2NtZC5lbHNfY29kZSk7CisKKwkJLyoKKwkJICogVEJEOiB3ZSBtYXkgbmVlZCB0byBjaGVjayBmb3IgcmVqZWN0IGNvZGVzIGFuZCByZXRyeQorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCBwaWQpOworCQlpZiAocnBvcnQpIHsKKwkJCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQl9CisKKwl9CisJcmV0dXJuOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2NfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19hZGlzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCQkgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJCUZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkJYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlLAorCQkJCSh2b2lkICopcG9ydCwgRkNfTUFYX1BEVVNaLCAwKTsgLyogbm8gcmVwb25zZQorCQkJCQkJCQkgKiBleHBlY3RlZAorCQkJCQkJCQkgKi8KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKgorICogIEFkaXNjIEFjYyBSZXNwb25zZQorICogV2UgZG9ub3QgZG8gYW55IHByb2Nlc3NpbmcgaGVyZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjUxYTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBwb3J0X2FwaS5jIEJGQSBGQ1MgcG9ydAorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQT1JUX0FQSSk7CisKKworCisvKioKKyAqICBmY3NfcG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisKK3ZvaWQKK2JmYV9mY3NfY2ZnX2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqCitiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXJldHVybiAoJmZjcy0+ZmFicmljLmJwb3J0KTsKK30KKword3duX3QKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCB3d24sIGludCBpbmRleCwKKwkJICAgICAgIGludCBucnBvcnRzLCBiZmFfYm9vbGVhbl90IGJ3d24pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBucnBvcnRzID09IDApCisJCXJldHVybiAod3duX3QpIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisJYmZhX3RyYyhmY3MsICh1MzIpIG5ycG9ydHMpOworCisJaSA9IDA7CisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlICgocWUgIT0gcWgpICYmIChpIDwgbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGJ3d24pIHsKKwkJCWlmICghbWVtY21wKCZ3d24sICZycG9ydC0+cHd3biwgOCkpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSBpbmRleCkKKwkJCQlicmVhazsKKwkJfQorCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJaWYgKHJwb3J0KSB7CisJCXJldHVybiBycG9ydC0+cHd3bjsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHd3bl90KSAwOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycG9ydF93d25zW10sCisJCQlpbnQgKm5ycG9ydHMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBycG9ydF93d25zID09IE5VTEwgfHwgKm5ycG9ydHMgPT0gMCkKKwkJcmV0dXJuOworCisJZmNzID0gcG9ydC0+ZmNzOworCWJmYV90cmMoZmNzLCAodTMyKSAqbnJwb3J0cyk7CisKKwlpID0gMDsKKwlxaCA9ICZwb3J0LT5ycG9ydF9xOworCXFlID0gYmZhX3FfZmlyc3QocWgpOworCisJd2hpbGUgKChxZSAhPSBxaCkgJiYgKGkgPCAqbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcnBvcnRfd3duc1tpXSA9IHJwb3J0LT5wd3duOworCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJKm5ycG9ydHMgPSBpOworCXJldHVybjsKK30KKworLyoKKyAqIEl0ZXJhdGUncyB0aHJvdWdoIGFsbCB0aGUgcnBvcnQncyBpbiB0aGUgZ2l2ZW4gcG9ydCB0bworICogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG9wZXJhdGluZyBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxaCwgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CisJZW51bSBiZmFfcHBvcnRfc3BlZWQgbWF4X3NwZWVkID0gMDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBwcG9ydF9hdHRyOworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHBwb3J0X3NwZWVkOworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisKKwkvKgorCSAqIEdldCBQaHlzaWNhbCBwb3J0J3MgY3VycmVudCBzcGVlZAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCXBwb3J0X3NwZWVkID0gcHBvcnRfYXR0ci5zcGVlZDsKKwliZmFfdHJjKGZjcywgcHBvcnRfc3BlZWQpOworCisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICgoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKQorCQkgICAgfHwgKGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHJwb3J0KSA9PSBCRkFfUlBPUlRfT0ZGTElORSkpIHsKKwkJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF84R0JQUykKKwkJICAgIHx8IChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPiBwcG9ydF9zcGVlZCkpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJwb3J0LT5ycGYucnBzY19zcGVlZCA+IG1heF9zcGVlZCkgeworCQkJbWF4X3NwZWVkID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCQl9CisKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgbWF4X3NwZWVkKTsKKwlyZXR1cm4gbWF4X3NwZWVkOworfQorCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19sb29rdXBfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwgd3duX3QgbHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJYmZhX2Zjc192Zl90ICAgKnZmOworCisJYmZhX2Fzc2VydChmY3MgIT0gTlVMTCk7CisKKwl2ZiA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWlmICh2ZiA9PSBOVUxMKSB7CisJCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKCFscHd3biB8fCAodmYtPmJwb3J0LnBvcnRfY2ZnLnB3d24gPT0gbHB3d24pKQorCQlyZXR1cm4gKCZ2Zi0+YnBvcnQpOworCisJdnBvcnQgPSBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAodmYsIGxwd3duKTsKKwlpZiAodnBvcnQpCisJCXJldHVybiAoJnZwb3J0LT5scG9ydCk7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogIEFQSSBjb3JyZXNwb25kaW5nIHRvIFZtV2FyZSdzIE5QSVZfVlBPUlRfR0VUSU5GTy4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9pbmZvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgc3RydWN0IGJmYV9wb3J0X2luZm9fcyAqcG9ydF9pbmZvKQoreworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+ZmFicmljX25hbWUpOworCisJaWYgKHBvcnQtPnZwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIFBoeXNpY2FsIHBvcnQKKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF90eXBlID0gQkZBX1BPUlRfVFlQRV9QSFlTSUNBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCQlwb3J0X2luZm8tPm1heF92cG9ydHNfc3VwcCA9IGJmYV9mY3NfdnBvcnRfZ2V0X21heChwb3J0LT5mY3MpOworCQlwb3J0X2luZm8tPm51bV92cG9ydHNfaW51c2UgPQorCQkJYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQocG9ydC0+ZmFicmljKTsKKwkJcG9ydF9pbmZvLT5tYXhfcnBvcnRzX3N1cHAgPSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUDsKKwkJcG9ydF9pbmZvLT5udW1fcnBvcnRzX2ludXNlID0gcG9ydC0+bnVtX3Jwb3J0czsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgdmlydHVhbCBwb3J0CisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfdHlwZSA9IEJGQV9QT1JUX1RZUEVfVklSVFVBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zICpwb3J0X3N0YXRzKQoreworCWJmYV9vc19tZW1jcHkocG9ydF9zdGF0cywgJmZjc19wb3J0LT5zdGF0cywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZmY3NfcG9ydC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2VuYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZGlzYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCXJldHVybjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWUzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19WUF9QUklWX0hfXworI2RlZmluZSBfX1ZQX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdnBzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHZwcworICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBzX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHBvcnRfZmFiCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgIHU4ICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtTlMuCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19xdWVyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLVNDTgorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1OMk4KKyAqLworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX3J4X2ZyYW1lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLUxPT1AKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisjZW5kaWYgLyogX19WUF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9tcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmIzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL21zLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTVMpOworCisjZGVmaW5lIEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTICAyCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4odm9pZCAqbXNfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKy8qKgorICogIGZjc19tc19zbSBGQ1MgTVMgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIE1TIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9tc19ldmVudCB7CisJTVNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU1TU01fRVZFTlRfUlNQX09LID0gMywKKwlNU1NNX0VWRU5UX1JTUF9FUlJPUiA9IDQsCisJTVNTTV9FVkVOVF9USU1FT1VUID0gNSwKKwlNU1NNX0VWRU5UX0ZDWFBfU0VOVCA9IDYsCisJTVNTTV9FVkVOVF9QT1JUX0ZBQlJJQ19SU0NOID0gNworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJCSBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkJZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQllbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nZm4oc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKKy8qKgorICogCQlTdGFydCBpbiBvZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgTlMgdG8gc2VuZCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLCAmbXMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIHNpbmNlIHBsb2dpIGlzIGRvbmUsIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKG1zKTsKKworCQkvKioKKwkJICogaWYgdGhpcyBpcyBhIFZwb3J0LCBnbyB0byBvbmxpbmUgc3RhdGUuCisJCSAqLworCQlpZiAobXMtPnBvcnQtPnZwb3J0KSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRm9yIGEgYmFzZSBwb3J0IHdlIG5lZWQgdG8gZ2V0IHRoZQorCQkgKiBzd2l0Y2gncyBJUCBhZGRyZXNzLgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm1zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCS8qCisJCSAqIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShtcyk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ046CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCW1zLT5yZXRyeV9jbnQgPSAwOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCWVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG1zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwodm9pZCAqbXNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IG1zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZtcy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwsIG1zKTsKKwkJcmV0dXJuOworCX0KKwltcy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19nbWFsX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ21hbF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgKmdtYWxfcmVzcDsKKwlzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICpnbWFsX2VudHJ5OworCXUzMiAgICAgICAgbnVtX2VudHJpZXM7CisJdTggICAgICAgICpyc3Bfc3RyOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ21hbF9yZXNwID0gKHN0cnVjdCBmY2dzX2dtYWxfcmVzcF9zICopKGN0aGRyICsgMSk7CisJCW51bV9lbnRyaWVzID0gYmZhX29zX250b2hsKGdtYWxfcmVzcC0+bXNfbGVuKTsKKwkJaWYgKG51bV9lbnRyaWVzID09IDApIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogVGhlIHJlc3BvbnNlIGNvdWxkIGNvbnRhaW4gbXVsdGlwbGUgRW50cmllcy4KKwkJICogRW50cmllcyBmb3IgU05NUCBpbnRlcmZhY2UsIGV0Yy4KKwkJICogV2UgbG9vayBmb3IgdGhlIGVudHJ5IHdpdGggYSB0ZWxuZXQgcHJlZml4LgorCQkgKiBGaXJzdCAiaHR0cDovLyIgZW50cnkgcmVmZXJzIHRvIElQIGFkZHIKKwkJICovCisKKwkJZ21hbF9lbnRyeSA9IChzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICopZ21hbF9yZXNwLT5tc19tYTsKKwkJd2hpbGUgKG51bV9lbnRyaWVzID4gMCkgeworCQkJaWYgKHN0cm5jbXAKKwkJCSAgICAoZ21hbF9lbnRyeS0+cHJlZml4LCBDVF9HTUFMX1JFU1BfUFJFRklYX0hUVFAsCisJCQkgICAgIHNpemVvZihnbWFsX2VudHJ5LT5wcmVmaXgpKSA9PSAwKSB7CisKKwkJCQkvKgorCQkJCSAqIGlmIHRoZSBJUCBhZGRyZXNzIGlzIHRlcm1pbmF0aW5nIHdpdGggYSAnLycsCisJCQkJICogcmVtb3ZlIGl0LiAqQnl0ZSAwIGNvbnNpc3RzIG9mIHRoZSBsZW5ndGgKKwkJCQkgKiBvZiB0aGUgc3RyaW5nLgorCQkJCSAqLworCQkJCXJzcF9zdHIgPSAmKGdtYWxfZW50cnktPnByZWZpeFswXSk7CisJCQkJaWYgKHJzcF9zdHJbZ21hbF9lbnRyeS0+bGVuIC0gMV0gPT0gJy8nKQorCQkJCQlyc3Bfc3RyW2dtYWxfZW50cnktPmxlbiAtIDFdID0gMDsKKwkJCQkvKgorCQkJCSAqIGNvcHkgSVAgQWRkcmVzcyB0byBmYWJyaWMKKwkJCQkgKi8KKwkJCQlzdHJuY3B5KGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX2lwYWRkcihwb3J0KSwKKwkJCQkJZ21hbF9lbnRyeS0+aXBfYWRkciwKKwkJCQkJQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLS1udW1fZW50cmllczsKKwkJCQkrK2dtYWxfZW50cnk7CisJCQl9CisJCX0KKworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJICAgICAgICZtcy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dmbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKG1zLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dmbih2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm1zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuLCBtcyk7CisJCXJldHVybjsKKwl9CisJbXMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfZ2ZuX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkgICAgICAgYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX2dmbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJd3duX3QgICAgICAgICAgKmdmbl9yZXNwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ2ZuX3Jlc3AgPSAod3duX3QgKikgKGN0aGRyICsgMSk7CisJCS8qCisJCSAqIGNoZWNrIGlmIGl0IGhhcyBhY3R1YWxseSBjaGFuZ2VkCisJCSAqLworCQlpZiAoKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpLCBnZm5fcmVzcCwKKwkJICAgICAgc2l6ZW9mKHd3bl90KSkgIT0gMCkpCisJCQliZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUocG9ydC0+ZmFicmljLCAqZ2ZuX3Jlc3ApOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiAgbXNfcHZ0IE1TIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSh2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbXMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSwgbXMpOworCQlyZXR1cm47CisJfQorCW1zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5tc19wbG9naV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWNiYXJnOworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfcnNwX2VycisrOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5tc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5tc19yZWplY3RzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfdW5rbm93bl9yc3ArKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKilhcmc7CisKKwltcy0+cG9ydC0+c3RhdHMubXNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisKKwkvKgorCSAqIEludm9rZSBpbml0IHJvdXRpbmVzIG9mIHN1YiBtb2R1bGVzLgorCSAqLworCWJmYV9mY3NfcG9ydF9mZG1pX2luaXQobXMpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJbXMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJLyoKKwkgKiBAdG9kby4gIEhhbmRsZSB0aGlzIG9ubHkgd2hlbiBpbiBPbmxpbmUgc3RhdGUKKwkgKi8KKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSkpCisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ04pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9uMm4uYyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NDU2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgbjJuLmMgbjJuIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIE4yTik7CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gaW5pdGlhbGl6ZSBOMk4gdG9wb2xvZ3kuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uMm5faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb25saW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbjJuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmcG9ydC0+cG9ydF90b3BvLnBuMm47CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJnBvcnQtPnBvcnRfY2ZnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBjZmctPnB3d24pOworCisJLyoKKwkgKiBJZiBvdXIgUFdXTiBpcyA+IHRoYW4gdGhhdCBvZiB0aGUgci1wb3J0LCB3ZSBoYXZlIHRvIGluaXRpYXRlIFBMT0dJCisJICogYW5kIGFzc2lnbiBhbiBBZGRyZXNzLiBpZiBub3QsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaXRzIFBMT0dJLgorCSAqCisJICogSWYgb3VyIFBXV04gaXMgPCB0aGFuIHRoYXQgb2YgdGhlIHJlbW90ZSBwb3J0LCBpdCB3aWxsIHNlbmQgYSBQTE9HSQorCSAqIHdpdGggdGhlIFBJRHMgYXNzaWduZWQuIFRoZSBycG9ydCBzdGF0ZSBtYWNoaW5lIHRha2UgY2FyZSBvZiB0aGlzCisJICogaW5jb21pbmcgUExPR0kuCisJICovCisJaWYgKG1lbWNtcAorCSAgICAoKHZvaWQgKikmcGNmZy0+cHd3biwgKHZvaWQgKikmbjJuX3BvcnQtPnJlbV9wb3J0X3d3biwKKwkgICAgIHNpemVvZih3d25fdCkpID4gMCkgeworCQlwb3J0LT5waWQgPSBOMk5fTE9DQUxfUElEOworCQkvKioKKwkJICogRmlyc3QsIGNoZWNrIGlmIHdlIGtub3cgdGhlIGRldmljZSBieSBwd3duLgorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwKKwkJCQkJCSAgICAgICBuMm5fcG9ydC0+cmVtX3BvcnRfd3duKTsKKwkJaWYgKHJwb3J0KSB7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQkJcnBvcnQtPnBpZCA9IE4yTl9SRU1PVEVfUElEOworCQkJYmZhX2Zjc19ycG9ydF9vbmxpbmUocnBvcnQpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogSW4gbjJuIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBycG9ydC4gRGVsZXRlIHRoZSBvbGQgb25lIHdob3NlCisJCSAqIHBpZCBzaG91bGQgYmUgemVybywgYmVjYXVzZSBpdCBpcyBvZmZsaW5lLgorCQkgKi8KKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPiAwKSB7CisJCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIDApOworCQkJYmZhX2Fzc2VydChycG9ydCAhPSBOVUxMKTsKKwkJCWlmIChycG9ydCkgeworCQkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIE4yTl9SRU1PVEVfUElEKTsKKwl9Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X24ybl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zICpuMm5fcG9ydCA9ICZwb3J0LT5wb3J0X3RvcG8ucG4ybjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCXBvcnQtPnBpZCA9IDA7CisJbjJuX3BvcnQtPnJlbV9wb3J0X3d3biA9IDA7CisJbjJuX3BvcnQtPnJlcGx5X294aWQgPSAwOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ucy5jCkBAIC0wLDAgKzEsMTI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIEBwYWdlIG5zX3NtX2luZm8gVlBPUlQgTlMgU3RhdGUgTWFjaGluZQorICoKKyAqIEBzZWN0aW9uIG5zX3NtX2ludGVyYWN0aW9ucyBWUE9SVCBOUyBTdGF0ZSBNYWNoaW5lIEludGVyYWN0aW9ucworICoKKyAqIEBzZWN0aW9uIG5zX3NtIFZQT1JUIE5TIFN0YXRlIE1hY2hpbmUKKyAqIAlpbWcgbnNfc20uanBnCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBOUyk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZmX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcHJvY2Vzc19naWRmdF9waWRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSAgIHUzMiAqcGlkX2J1ZiwKKwkJCQkJCSAgIHUzMiBuX3BpZHMpOworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKy8qKgorICogIGZjc19uc19zbSBGQ1MgbmFtZXNlcnZlciBpbnRlcmZhY2Ugc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgTlMgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSB2cG9ydF9uc19ldmVudCB7CisJTlNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU5TU01fRVZFTlRfUExPR0lfU0VOVCA9IDMsCisJTlNTTV9FVkVOVF9SU1BfT0sgPSA0LAorCU5TU01fRVZFTlRfUlNQX0VSUk9SID0gNSwKKwlOU1NNX0VWRU5UX1RJTUVPVVQgPSA2LAorCU5TU01fRVZFTlRfTlNfUVVFUlkgPSA3LAorCU5TU01fRVZFTlRfUlNQTklEX1NFTlQgPSA4LAorCU5TU01fRVZFTlRfUkZUSURfU0VOVCA9IDksCisJTlNTTV9FVkVOVF9SRkZJRF9TRU5UID0gMTAsCisJTlNTTV9FVkVOVF9HSURGVF9TRU5UID0gMTEsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgICAgICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0X3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CisvKioKKyAqIAkJU3RhcnQgaW4gb2ZmbGluZSBzdGF0ZSAtIGF3YWl0aW5nIGxpbmt1cAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUExPR0lfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgICAgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUE5JRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRlRJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIE5vdyBtb3ZlIHRvIHJlZ2lzdGVyIEZDNCBGZWF0dXJlcworCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRkZJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisKKwkJLyoKKwkJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIHdlIGRvbm90IGluaXRpYXRlIHJwb3J0CisJCSAqIGRpc2NvdmVyeSB3aXRoIHRoZSBmYWJyaWMuIEluc3RlYWQsIHdlIHdpbGwgcmV0cmlldmUgdGhlCisJCSAqIGJvb3QgdGFyZ2V0cyBmcm9tIEhBTC9GVy4KKwkJICovCisJCWlmIChfX2Zjc19taW5fY2ZnKG5zLT5wb3J0LT5mY3MpKSB7CisJCQliZmFfZmNzX3BvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhucy0+cG9ydCk7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSBwb3J0IHJvbGUgaXMgSW5pdGlhdG9yIE1vZGUgaXNzdWUgTlMgcXVlcnkuCisJCSAqIElmIGl0IGlzIFRhcmdldCBNb2RlLCBza2lwIHRoaXMgYW5kIGdvIHRvIG9ubGluZS4KKwkJICovCisJCWlmIChCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKG5zLT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KTsKKwkJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCX0gZWxzZSBpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUpOworCQl9CisJCS8qCisJCSAqIGtpY2sgb2ZmIG1nbXQgc3J2ciBzdGF0ZSBtYWNoaW5lCisJCSAqLworCQliZmFfZmNzX3BvcnRfbXNfb25saW5lKG5zLT5wb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfR0lERlRfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBUQkQ6IGZvciBjZXJ0YWluIHJlamVjdCBjb2Rlcywgd2UgZG9uJ3QgbmVlZCB0byByZXRyeQorCQkgKi8KKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX05TX1FVRVJZOgorCQkvKgorCQkgKiBJZiB0aGUgcG9ydCByb2xlIGlzIEluaXRpYXRvciBNb2RlIGlzc3VlIE5TIHF1ZXJ5LgorCQkgKiBJZiBpdCBpcyBUYXJnZXQgTW9kZSwgc2tpcCB0aGlzIGFuZCBnbyB0byBvbmxpbmUuCisJCSAqLworCQlpZiAoQkZBX0ZDU19WUE9SVF9JU19JTklUSUFUT1JfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQobnMsIE5VTEwpOworCQl9OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgbnNfcHZ0IE5hbWVzZXJ2ZXIgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwlwb3J0LT5zdGF0cy5uc19wbG9naV9zZW50Kys7CisKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QTE9HSV9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCS8qIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpX3Jlc3A7ICovCisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5uc19yZWplY3RzKys7CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19wbG9naV91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBSZWdpc3RlciB0aGUgc3ltYm9saWMgcG9ydCBuYW1lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBzeW1ibFsyNTZdOworCXU4ICAgICAgICAqcHN5bWJsID0gJnN5bWJsWzBdOworCisJYmZhX29zX21lbXNldChzeW1ibCwgMCwgc2l6ZW9mKHN5bWJsKSk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIGZvciBWLVBvcnQsIGZvcm0gYSBQb3J0IFN5bWJvbGljIE5hbWUKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJLyoqRm9yIFZwb3J0cywKKwkJICogIHdlIGFwcGVuZCB0aGUgdnBvcnQncyBwb3J0IHN5bWJvbGljIG5hbWUgdG8gdGhhdCBvZiB0aGUgYmFzZSBwb3J0LgorCQkgKi8KKworCQlzdHJuY3B5KChjaGFyICopcHN5bWJsLAorCQkJKGNoYXIgKikKKwkJCSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCSAgKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKSksCisJCQlzdHJsZW4oKGNoYXIgKikKKwkJCSAgICAgICAmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUoYmZhX2Zjc19nZXRfYmFzZV9wb3J0CisJCQkJCQkJICAgKHBvcnQtPmZjcykpKSk7CisKKwkJLyoKKwkJICogRW5zdXJlIHdlIGhhdmUgYSBudWxsIHRlcm1pbmF0aW5nIHN0cmluZy4KKwkJICovCisJCSgoY2hhciAqKQorCQkgcHN5bWJsKVtzdHJsZW4oKGNoYXIgKikKKwkJCQkmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCQkoYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpKV0gPSAwOworCisJCXN0cm5jYXQoKGNoYXIgKilwc3ltYmwsCisJCQkoY2hhciAqKSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpLAorCQkJc3RybGVuKChjaGFyICopJmJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKHBvcnQpKSk7CisJfSBlbHNlIHsKKwkJcHN5bWJsID0gKHU4ICopICYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpOworCX0KKworCWxlbiA9IGZjX3JzcG5pZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwgcHN5bWJsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yc3BuaWRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQTklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JzcG5faWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19yc3BuaWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcnNwbmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9yZWplY3RzKys7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiBSZWdpc3RlciBGQzQtVHlwZXMKKyAqIFRCRCwgTmVlZCB0byByZXRyaWV2ZSB0aGlzIGZyb20gdGhlIE9TIGRyaXZlciwgaW4gY2FzZSBJUEZDIGlzIGVuYWJsZWQgPworICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19yZnRpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5yb2xlcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yZnRpZF9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUkZUSURfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcmVqZWN0cysrOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiBSZWdpc3RlciBGQzQtRmVhdHVyZXMgOiBTaG91bGQgYmUgZG9uZSBhZnRlciBSRlRfSUQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBmYzRfZnRycyA9IDA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX0lOSVRJQVRPUjsKKwl9IGVsc2UgaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVDsKKwl9CisKKwlsZW4gPSBmY19yZmZpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBGQ19UWVBFX0ZDUCwKKwkJCSAgICAgZmM0X2Z0cnMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfcmZmaWRfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JGRklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCXZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JlamVjdHMrKzsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKworCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX05PVF9TVVBQKSB7CisJCS8qCisJCSAqIGlmIHRoaXMgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBkb24ndCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwl9IGVsc2UgeworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBRdWVyeSBGYWJyaWMgZm9yIEZDNC1UeXBlcyBEZXZpY2VzLgorICoKKyogIFRCRCA6IE5lZWQgdG8gdXNlIGEgbG9jYWwgKEZDUyBwcml2YXRlKSByZXNwb25zZSBidWZmZXIsIHNpbmNlIHRoZSByZXNwb25zZQorICogY2FuIGJlIGxhcmdlciB0aGFuIDJLLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCS8qCisJICogVGhpcyBxdWVyeSBpcyBvbmx5IGluaXRpYXRlZCBmb3IgRkNQIGluaXRpYXRvciBtb2RlLgorCSAqLworCWxlbiA9IGZjX2dpZF9mdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgbnMtPnBvcnQtPnBpZCwKKwkJCSAgICAgIEZDX1RZUEVfRkNQKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19naWRfZnRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIGJmYV9mY3hwX2dldF9tYXhyc3AocG9ydC0+ZmNzLT5iZmEpLAorCQkgICAgICBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfZ2lkZnRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfR0lERlRfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJdTMyICAgICAgICBuX3BpZHM7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJlc2lkX2xlbiAhPSAwKSB7CisJCS8qCisJCSAqIFRCRCA6IHdlIHdpbGwgbmVlZCB0byBhbGxvY2F0ZSBhIGxhcmdlciBidWZmZXIgJiByZXRyeSB0aGUKKwkJICogY29tbWFuZAorCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzcF9sZW4pOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVzaWRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlzd2l0Y2ggKGN0aGRyLT5jbWRfcnNwX2NvZGUpIHsKKworCWNhc2UgQ1RfUlNQX0FDQ0VQVDoKKworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hY2NlcHRzKys7CisJCW5fcGlkcyA9IChmY19nZXRfY3RyZXNwX3B5bGRfbGVuKHJzcF9sZW4pIC8gc2l6ZW9mKHUzMikpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbl9waWRzKTsKKwkJYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhwb3J0LAorCQkJCQkJICAgKHUzMiAqKSAoY3RoZHIgKyAxKSwKKwkJCQkJCSAgIG5fcGlkcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBDVF9SU1BfUkVKRUNUOgorCisJCS8qCisJCSAqIENoZWNrIHRoZSByZWFzb24gY29kZSAgJiBleHBsYW5hdGlvbi4KKwkJICogVGhlcmUgbWF5IG5vdCBoYXZlIGJlZW4gYW55IEZDNCBkZXZpY2VzIGluIHRoZSBmYWJyaWMKKwkJICovCisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3JlamVjdHMrKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCisJCWlmICgoY3RoZHItPnJlYXNvbl9jb2RlID09IENUX1JTTl9VTkFCTEVfVE9fUEVSRikKKwkJICAgICYmIChjdGhkci0+ZXhwX2NvZGUgPT0gQ1RfTlNfRVhQX0ZUX05PVF9SRUcpKSB7CisKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogZm9yIGFsbCBvdGhlciBlcnJvcnMsIHJldHJ5CisJCQkgKi8KKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19naWRmdF91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmNtZF9yc3BfY29kZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXBvcnQgCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfdC4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKilhcmc7CisKKwlucy0+cG9ydC0+c3RhdHMubnNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIFBJRCBsaXN0IGluIEdJRF9GVCByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgdTMyICpwaWRfYnVmLCB1MzIgbl9waWRzKQoreworCXN0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyAqZ2lkZnRfZW50cnk7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTMyICAgICAgICBpaTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG5fcGlkczsgaWkrKykgeworCQlnaWRmdF9lbnRyeSA9IChzdHJ1Y3QgZmNnc19naWRmdF9yZXNwX3MgKikgJnBpZF9idWZbaWldOworCisJCWlmIChnaWRmdF9lbnRyeS0+cGlkID09IHBvcnQtPnBpZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENoZWNrIGlmIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJICovCisJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgZ2lkZnRfZW50cnktPnBpZCk7CisJCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogdGhpcyBpcyBhIG5ldyBkZXZpY2UuIGNyZWF0ZSBycG9ydAorCQkJICovCisJCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIGdpZGZ0X2VudHJ5LT5waWQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJCSAqLworCQkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCQl9CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGdpZGZ0X2VudHJ5LT5waWQpOworCisJCS8qCisJCSAqIGlmIHRoZSBsYXN0IGVudHJ5IGJpdCBpcyBzZXQsIGJhaWwgb3V0LgorCQkgKi8KKwkJaWYgKGdpZGZ0X2VudHJ5LT5sYXN0KQorCQkJcmV0dXJuOworCX0KK30KKworLyoqCisgKiAgZmNzX25zX3B1YmxpYyBGQ1MgbmFtZXNlcnZlciBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGdW5jdGlvbnMgY2FsbGVkIGJ5IHBvcnQvZmFiLgorICogVGhlc2Ugd2lsbCBzZW5kIHJlbGV2YW50IEV2ZW50cyB0byB0aGUgbnMgc3RhdGUgbWFjaGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X25zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwlucy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCW5zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJbnMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfTlNfUVVFUlkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTggICAgICAgICBud3duczsKKwl3d25fdCAgICAgICAgICAqd3duczsKKwlpbnQgICAgICAgICAgICAgaWk7CisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHBvcnQtPmZjcy0+YmZhLCAmbnd3bnMsICZ3d25zKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG53d25zOyArK2lpKSB7CisJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHBvcnQsIHd3bnNbaWldKTsKKwkJYmZhX2Fzc2VydChycG9ydCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9wbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworc3RhdGljIGludAorcGxrZF92YWxpZGF0ZV9sb2dyZWMoc3RydWN0IGJmYV9wbG9nX3JlY19zICpwbF9yZWMpCit7CisJaWYgKChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9JTlQpCisJICAgICYmIChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9TVFJJTkcpKQorCQlyZXR1cm4gMTsKKworCWlmICgocGxfcmVjLT5sb2dfdHlwZSAhPSBCRkFfUExfTE9HX1RZUEVfSU5UKQorCSAgICAmJiAocGxfcmVjLT5sb2dfbnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcGxvZ19hZGQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIHN0cnVjdCBiZmFfcGxvZ19yZWNfcyAqcGxfcmVjKQoreworCXUxNiAgICAgICAgdGFpbDsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlY3A7CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkID09IDApCisJCXJldHVybjsKKworCWlmIChwbGtkX3ZhbGlkYXRlX2xvZ3JlYyhwbF9yZWMpKSB7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwl0YWlsID0gcGxvZy0+dGFpbDsKKworCXBsX3JlY3AgPSAmKHBsb2ctPnBsb2dfcmVjc1t0YWlsXSk7CisKKwliZmFfb3NfbWVtY3B5KHBsX3JlY3AsIHBsX3JlYywgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJcGxfcmVjcC0+dHYgPSBCRkFfVFJDX1RTKHBsb2cpOworCUJGQV9QTF9MT0dfUkVDX0lOQ1IocGxvZy0+dGFpbCk7CisKKwlpZiAocGxvZy0+aGVhZCA9PSBwbG9nLT50YWlsKQorCQlCRkFfUExfTE9HX1JFQ19JTkNSKHBsb2ctPmhlYWQpOworfQorCit2b2lkCitiZmFfcGxvZ19pbml0KHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCWJmYV9vc19tZW1zZXQoKGNoYXIgKilwbG9nLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3MpKTsKKworCWJmYV9vc19tZW1jcHkocGxvZy0+cGxvZ19zaWcsIEJGQV9QTF9TSUdfU1RSLCBCRkFfUExfU0lHX0xFTik7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworCXBsb2ctPnBsb2dfZW5hYmxlZCA9IDE7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX3N0cihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIGNoYXIgKmxvZ19zdHIpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfU1RSSU5HOworCQlscC5taXNjID0gbWlzYzsKKwkJc3RybmNweShscC5sb2dfZW50cnkuc3RyaW5nX2xvZywgbG9nX3N0ciwKKwkJCUJGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMSk7CisJCWxwLmxvZ19lbnRyeS5zdHJpbmdfbG9nW0JGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMV0gPSAnXDAnOworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ludGFycihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIHUzMiAqaW50YXJyLCB1MzIgbnVtX2ludHMpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKwl1MzIgICAgICAgIGk7CisKKwlpZiAobnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikKKwkJbnVtX2ludHMgPSBCRkFfUExfSU5UX0xPR19TWjsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfSU5UOworCQlscC5taXNjID0gbWlzYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludHM7IGkrKykKKwkJCWJmYV9vc19hc3NpZ24obHAubG9nX2VudHJ5LmludF9sb2dbaV0sCisJCQkJCWludGFycltpXSk7CisKKwkJbHAubG9nX251bV9pbnRzID0gKHU4KSBudW1faW50czsKKworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJCXUxNiBtaXNjLCBzdHJ1Y3QgZmNoc19zICpmY2hkcikKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCXUzMiAgICAgICAqdG1wX2ludCA9ICh1MzIgKikgZmNoZHI7CisJdTMyICAgICAgICBpbnRzW0JGQV9QTF9JTlRfTE9HX1NaXTsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKworCQlpbnRzWzBdID0gdG1wX2ludFswXTsKKwkJaW50c1sxXSA9IHRtcF9pbnRbMV07CisJCWludHNbMl0gPSB0bXBfaW50WzRdOworCisJCWJmYV9wbG9nX2ludGFycihwbG9nLCBtaWQsIGV2ZW50LCBtaXNjLCBpbnRzLCAzKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyX2FuZF9wbChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkgICAgICBlbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsIHN0cnVjdCBmY2hzX3MgKmZjaGRyLAorCQkgICAgICB1MzIgcGxkX3cwKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisJdTMyICAgICAgICp0bXBfaW50ID0gKHUzMiAqKSBmY2hkcjsKKwl1MzIgICAgICAgIGludHNbQkZBX1BMX0lOVF9MT0dfU1pdOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJCWludHNbMF0gPSB0bXBfaW50WzBdOworCQlpbnRzWzFdID0gdG1wX2ludFsxXTsKKwkJaW50c1syXSA9IHRtcF9pbnRbNF07CisJCWludHNbM10gPSBwbGRfdzA7CisKKwkJYmZhX3Bsb2dfaW50YXJyKHBsb2csIG1pZCwgZXZlbnQsIG1pc2MsIGludHMsIDQpOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfY2xlYXIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworfQorCit2b2lkCitiZmFfcGxvZ19lbmFibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+cGxvZ19lbmFibGVkID0gMTsKK30KKwordm9pZAorYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlwbG9nLT5wbG9nX2VuYWJsZWQgPSAwOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlyZXR1cm4oKGJmYV9ib29sZWFuX3QpcGxvZy0+cGxvZ19lbmFibGVkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Y1OGJiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwpAQCAtMCwwICsxLDI2MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcnBvcnQuYyBSZW1vdGUgcG9ydCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9ycG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3Jwb3J0Lmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIFJQT1JUKTsKKworI2RlZmluZSBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTCQkoNSkKKworLyogSW4gbWlsbGlzZWNzICovCitzdGF0aWMgdTMyIGJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQgPQorCQkJQkZBX0ZDU19SUE9SVF9ERUZfREVMX1RJTUVPVVQgKiAxMDAwOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkJICAgd3duX3QgcHd3biwgdTMyIHJwaWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X29ubGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfdXBkYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZmM0X3BhdXNlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2ZjNF9yZXN1bWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbih2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZ2lkcG5fcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2Modm9pZCAqcnBvcnRfY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfcHJvY2Vzc19wcmxpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHU4IHJlYXNvbl9jb2RlLAorCQkJdTggcmVhc29uX2NvZGVfZXhwbCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbik7CisvKioKKyAqICBmY3NfcnBvcnRfc20gRkNTIHJwb3J0IHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBycG9ydF9ldmVudCB7CisJUlBTTV9FVkVOVF9QTE9HSV9TRU5EID0gMSwJLyogIG5ldyBycG9ydDsgc3RhcnQgd2l0aCBQTE9HSSAqLworCVJQU01fRVZFTlRfUExPR0lfUkNWRCA9IDIsCS8qICBJbmJvdW5kIFBMT0dJIGZyb20gcmVtb3RlIHBvcnQgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX0NPTVAgPSAzLAkvKiAgUExPR0kgY29tcGxldGVkIHRvIHJwb3J0ICovCisJUlBTTV9FVkVOVF9MT0dPX1JDVkQgPSA0LAkvKiAgTE9HTyBmcm9tIHJlbW90ZSBkZXZpY2UgKi8KKwlSUFNNX0VWRU5UX0xPR09fSU1QID0gNSwJLyogIGltcGxpY2l0IGxvZ28gZm9yIFNMRVIgKi8KKwlSUFNNX0VWRU5UX0ZDWFBfU0VOVCA9IDYsCS8qICBGcmFtZSBmcm9tIGhhcyBiZWVuIHNlbnQgKi8KKwlSUFNNX0VWRU5UX0RFTEVURSA9IDcsCS8qICBSUE9SVCBkZWxldGUgcmVxdWVzdCAqLworCVJQU01fRVZFTlRfU0NOID0gOCwJLyogIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gKi8KKwlSUFNNX0VWRU5UX0FDQ0VQVEVEID0gOSwvKiAgR29vZCByZXNwb25zZSBmcm9tIHJlbW90ZSBkZXZpY2UgKi8KKwlSUFNNX0VWRU5UX0ZBSUxFRCA9IDEwLAkvKiAgUmVxdWVzdCB0byBycG9ydCBmYWlsZWQuICAqLworCVJQU01fRVZFTlRfVElNRU9VVCA9IDExLAkvKiAgUnBvcnQgU00gdGltZW91dCBldmVudCAqLworCVJQU01fRVZFTlRfSENCX09OTElORSA9IDEyLAkvKiAgQkZBIHJwb3J0IG9ubGluZSBjYWxsYmFjayAqLworCVJQU01fRVZFTlRfSENCX09GRkxJTkUgPSAxMywJLyogIEJGQSBycG9ydCBvZmZsaW5lIGNhbGxiYWNrICovCisJUlBTTV9FVkVOVF9GQzRfT0ZGTElORSA9IDE0LAkvKiAgRkMtNCBvZmZsaW5lIGNvbXBsZXRlICovCisJUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRSA9IDE1LAkvKiAgUnBvcnQncyBQSUQgaGFzIGNoYW5nZWQgKi8KKwlSUFNNX0VWRU5UX0FERFJFU1NfRElTQyA9IDE2CS8qICBOZWVkIHRvIERpc2NvdmVyIHJwb3J0J3MgUElEICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJCSAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbG9nb19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBycG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpLCBCRkFfUlBPUlRfVU5JTklUfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyksIEJGQV9SUE9SVF9QTE9HSX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkpLCBCRkFfUlBPUlRfUExPR0lfUkVUUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naSksIEJGQV9SUE9SVF9QTE9HSX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fb25saW5lKSwgQkZBX1JQT1JUX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyksIEJGQV9SUE9SVF9OU1FVRVJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeSksIEJGQV9SUE9SVF9OU1FVRVJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyksIEJGQV9SUE9SVF9BRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKSwgQkZBX1JQT1JUX0FESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpLCBCRkFfUlBPUlRfTE9HT1JDVn0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCksIEJGQV9SUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKSwgQkZBX1JQT1JUX09GRkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdiksIEJGQV9SUE9SVF9MT0dPUkNWfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKSwgQkZBX1JQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcpLCBCRkFfUlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKSwgQkZBX1JQT1JUX05TRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeSksIEJGQV9SUE9SVF9OU0RJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudCksIEJGQV9SUE9SVF9OU0RJU0N9LAorfTsKKworLyoqCisgKiAJCUJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1NFTkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfRElTQzoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2kpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogSWdub3JlLCBTQ04gaXMgcG9zc2libHkgb25saW5lIG5vdGlmaWNhdGlvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCQkvKioKKwkJICogSWdub3JlIEJGQSBjYWxsYmFjaywgb24gYSBQTE9HSSByZWNlaXZlIHdlIGNhbGwgYmZhIG9mZmxpbmUuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCS8qCisJCSAqICEhIGZhbGwgdGhyb3VnaCAhIQorCQkgKi8KKworCWNhc2UgUlBTTV9FVkVOVF9USU1FT1VUOgorCQlycG9ydC0+cGxvZ2lfcmV0cmllcysrOworCQlpZiAocnBvcnQtPnBsb2dpX3JldHJpZXMgPCBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJLyoKKwkJICogISEgZmFsbCB0aHJvdWdoICEhCisJCSAqLworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBJZ25vcmUgU0NOIC0gd2FpdCBmb3IgUExPR0kgcmVzcG9uc2UuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgY29tcGxldGUuIEF3YWl0aW5nIEJGQSBycG9ydCBvbmxpbmUgY2FsbGJhY2suIEZDLTRzCisgKiAJCWFyZSBvZmZsaW5lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3Jjdik7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogQHRvZG8KKwkJICogSWdub3JlIFNDTiAtIFBMT0dJIGp1c3QgY29tcGxldGVkLCBGQy00IGxvZ2luIHNob3VsZCBkZXRlY3QKKwkJICogZGV2aWNlIGZhaWx1cmVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIE9OTElORS4gRkMtNHMgYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogUGF1c2UgRkMtNCBhY3Rpdml0eSB0aWxsIHJwb3J0IGlzIGF1dGhlbnRpY2F0ZWQuCisJCSAqIEluIHN3aXRjaGVkIGZhYnJpY3MsIGNoZWNrIHByZXNlbmNlIG9mIGRldmljZSBpbiBuYW1lc2VydmVyCisJCSAqIGZpcnN0LgorCQkgKi8KKwkJYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2UocnBvcnQpOworCisJCWlmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHJwb3J0LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIE5TIHF1ZXJ5IGlzIGJlaW5nIHNlbnQKKyAqIAkJcHJpb3IgdG8gQURJU0MgYXV0aGVudGljYXRpb24gd2l0aCBycG9ydC4gRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIGlnbm9yZSBTQ04sIHdhaXQgZm9yIHJlc3BvbnNlIHRvIHF1ZXJ5IGl0c2VsZgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBOUyBxdWVyeSBpcyBzZW50IHRvIHJwb3J0LgorICogCUZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJcnBvcnQtPm5zX3JldHJpZXMrKzsKKwkJaWYgKHJwb3J0LT5uc19yZXRyaWVzIDwgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIEFESVNDIGlzIGJlaW5nIHNlbnQgZm9yCisgKiAJYXV0aGVudGljYXRpbmcgd2l0aCBycG9ydC4gRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gQURJU0MgaXMgdG8gcnBvcnQuCisgKiAJCUZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfZmM0X3Jlc3VtZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCS8qKgorCQkgKiBUb28gY29tcGxleCB0byBjbGVhbnVwIEZDLTQgJiBycG9ydCBhbmQgdGhlbiBhY2MgdG8gUExPR0kuCisJCSAqIEF0IGxlYXN0IGdvIG9mZmxpbmUgd2hlbiBhIFBMT0dJIGlzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCS8qCisJCSAqICEhISBmYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogYWxyZWFkeSBwcm9jZXNzaW5nIFJTQ04KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBoYXMgc2VudCBMT0dPLiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJTE9HTyBuZWVkcyB0byBiZSBzZW50IHRvIHJwb3J0LiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbgorICogCQljYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJUnBvcnQgaXMgZ29pbmcgb2ZmbGluZS4gQXdhaXRpbmcgRkMtNCBvZmZsaW5lIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQkvKioKKwkJICogcnBvcnQgaXMgYWxyZWFkeSBnb2luZyBvZmZsaW5lLgorCQkgKiBTQ04gLSBpZ25vcmUgYW5kIHdhaXQgdGlsbCB0cmFuc2l0aW9uaW5nIHRvIG9mZmxpbmUgc3RhdGUKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgb2ZmbGluZS4gRkMtNHMgYXJlIG9mZmxpbmUuIEF3YWl0aW5nIEJGQSBycG9ydCBvZmZsaW5lCisgKiAJCWNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAoYmZhX2Zjc19wb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBJZ25vcmUsIGFscmVhZHkgb2ZmbGluZS4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIAkJY2FsbGJhY2sgdG8gc2VuZCBMT0dPIGFjY2VwdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJaWYgKHJwb3J0LT5waWQpCisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQkvKgorCQkgKiBJZiB0aGUgbHBvcnQgaXMgb25saW5lIGFuZCBpZiB0aGUgcnBvcnQgaXMgbm90IGEgd2VsbCBrbm93bgorCQkgKiBhZGRyZXNzIHBvcnQsIHdlIHRyeSB0byByZS1kaXNjb3ZlciB0aGUgci1wb3J0LgorCQkgKi8KKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUocnBvcnQtPnBvcnQpCisJCSAgICAmJiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogaWYgaXQgaXMgbm90IGEgd2VsbCBrbm93biBhZGRyZXNzLCByZXNldCB0aGUgcGlkIHRvCisJCQkgKgorCQkJICovCisJCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBJZ25vcmUgLSBhbHJlYWR5IHByb2Nlc3NpbmcgYSBMT0dPLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBpcyBiZWluZyBkZWxldGVkLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIGNhbGxiYWNrIHRvIHNlbmQgTE9HTy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBiZWluZyBkZWxldGVkLiBGQy00cyBhcmUgb2ZmbGluZS4gTE9HTyBpcyBiZWluZyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJLyoKKwkJICogT25jZSBMT0dPIGlzIHNlbnQsIHdlIGRvbm90IHdhaXQgZm9yIHRoZSByZXNwb25zZQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgb2ZmbGluZS4gRkMtNHMgYXJlIG9mZmxpbmUuIEJGQSBycG9ydCBpcyBvZmZsaW5lLgorICogCQlUaW1lciBhY3RpdmUgdG8gZGVsZXRlIHN0YWxlIHJwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgorCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlScG9ydCBhZGRyZXNzIGhhcyBjaGFuZ2VkLiBOYW1lc2VydmVyIGRpc2NvdmVyeSByZXF1ZXN0IGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfU0VORDoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsJLyogcmVzZXQgdGhlIHJldHJ5IGNvdW50ICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJTmFtZXNlcnZlciBkaXNjb3ZlcnkgZmFpbGVkLiBXYWl0aW5nIGZvciB0aW1lb3V0IHRvIHJldHJ5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IGFkZHJlc3MgaGFzIGNoYW5nZWQuIE5hbWVzZXJ2ZXIgZGlzY292ZXJ5IHJlcXVlc3QgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJaWYgKHJwb3J0LT5waWQpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJCXJwb3J0LT5uc19yZXRyaWVzKys7CisJCWlmIChycG9ydC0+bnNfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBpZ25vcmUsIHdhaXQgZm9yIE5TIHF1ZXJ5IHJlc3BvbnNlCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBOb3QgbG9nZ2VkLWluIHlldC4gQWNjZXB0IExPR08uCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGZjc19ycG9ydF9wcml2YXRlIEZDUyBSUE9SVCBwcm92YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kodm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2ksIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcnBvcnQtPnN0YXRzLnBsb2dpcysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgZmNfbG9naV9zCSpwbG9naV9yc3A7CisJc3RydWN0IGZjX2xzX3JqdF9zCSpsc19yanQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqdHdpbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlycG9ydC0+c3RhdHMucGxvZ2lfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisKKwlwbG9naV9yc3AgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJLyoqCisJICogQ2hlY2sgZm9yIGZhaWx1cmUgZmlyc3QuCisJICovCisJaWYgKHBsb2dpX3JzcC0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKSB7CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJcnBvcnQtPnN0YXRzLnBsb2dpX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFBMT0dJIGlzIGNvbXBsZXRlLiBNYWtlIHN1cmUgdGhpcyBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUga25vd24KKwkgKiBkZXZpY2Ugd2l0aCBhIG5ldyBGQyBwb3J0IGFkZHJlc3MuCisJICovCisJbGlzdF9mb3JfZWFjaChxZSwgJnJwb3J0LT5wb3J0LT5ycG9ydF9xKSB7CisJCXR3aW4gPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAodHdpbiA9PSBycG9ydCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJwb3J0LT5wd3duICYmIChwbG9naV9yc3AtPnBvcnRfbmFtZSA9PSB0d2luLT5wd3duKSkgeworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCB0d2luLT5waWQpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCQkJLyoKKwkJCSAqIFVwZGF0ZSBwbG9naSBzdGF0cyBpbiB0d2luCisJCQkgKi8KKwkJCXR3aW4tPnN0YXRzLnBsb2dpcyArPSBycG9ydC0+c3RhdHMucGxvZ2lzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfcmVqZWN0cyArPSBycG9ydC0+c3RhdHMucGxvZ2lfcmVqZWN0czsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX3RpbWVvdXRzICs9CisJCQkJcnBvcnQtPnN0YXRzLnBsb2dpX3RpbWVvdXRzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfZmFpbGVkICs9IHJwb3J0LT5zdGF0cy5wbG9naV9mYWlsZWQ7CisJCQl0d2luLT5zdGF0cy5wbG9naV9yY3ZkICs9IHJwb3J0LT5zdGF0cy5wbG9naV9yY3ZkOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfYWNjcysrOworCisJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisKKwkJCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHR3aW4sIHBsb2dpX3JzcCk7CisJCQl0d2luLT5waWQgPSByc3BfZmNocy0+c19pZDsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHR3aW4sIFJQU01fRVZFTlRfUExPR0lfQ09NUCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKioKKwkgKiBOb3JtYWwgbG9naW4gcGF0aCAtLSBubyBldmlsIHR3aW5zLgorCSAqLworCXJwb3J0LT5zdGF0cy5wbG9naV9hY2NzKys7CisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpX3JzcCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUNDRVBURUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJCSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJwb3J0LT5yZXBseV9veGlkLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2Modm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2MsIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19hZGlzY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2UsCisJCSAgICAgIHJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlycG9ydC0+c3RhdHMuYWRpc2Nfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwl2b2lkICAgICAgICAgICAqcGxkID0gYmZhX2ZjeHBfZ2V0X3JzcGJ1ZihmY3hwKTsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX2ZhaWxlZCsrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZjX2FkaXNjX3JzcF9wYXJzZSgoc3RydWN0IGZjX2FkaXNjX3MgKilwbGQsIHJzcF9sZW4sIHJwb3J0LT5wd3duLAorCQlycG9ydC0+bnd3bikgID09IEZDX1BBUlNFX09LKSB7CisJCXJwb3J0LT5zdGF0cy5hZGlzY19hY2NzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FDQ0VQVEVEKTsKKwkJcmV0dXJuOworCX0KKworCXJwb3J0LT5zdGF0cy5hZGlzY19yZWplY3RzKys7CisJbHNfcmp0ID0gcGxkOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5lbHNfY21kLmVsc19jb2RlKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4sIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19naWRwbl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBycG9ydC0+cHd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3Jwb3J0X2dpZHBuX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqdHdpbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgCSpjdGhkcjsKKwlzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3MJKmdpZHBuX3JzcDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHBpZCBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLworCQlnaWRwbl9yc3AgPSAoc3RydWN0IGZjZ3NfZ2lkcG5fcmVzcF9zICopIChjdGhkciArIDEpOworCisJCWlmIChnaWRwbl9yc3AtPmRhcCA9PSBycG9ydC0+cGlkKSB7CisJCQkvKgorCQkJICogRGV2aWNlIGlzIG9ubGluZQorCQkJICovCisJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BQ0NFUFRFRCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGV2aWNlJ3MgUElEIGhhcyBjaGFuZ2VkLiBXZSBuZWVkIHRvIGNsZWFudXAgYW5kCisJCQkgKiByZS1sb2dpbi4gSWYgdGhlcmUgaXMgYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUgdGhlCisJCQkgKiBuZXdseSBkaXNjb3ZlcmVkIHBpZCwgc2VuZCBhbiBzY24gbm90aWNlIHNvIHRoYXQgaXRzCisJCQkgKiBuZXcgcGlkIGNhbiBiZSBkaXNjb3ZlcmVkLgorCQkJICovCisJCQlsaXN0X2Zvcl9lYWNoKHFlLCAmcnBvcnQtPnBvcnQtPnJwb3J0X3EpIHsKKwkJCQl0d2luID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQlpZiAodHdpbiA9PSBycG9ydCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGdpZHBuX3JzcC0+ZGFwID09IHR3aW4tPnBpZCkgeworCQkJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHR3aW4tPnBpZCk7CisJCQkJCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwkJCQkJdHdpbi0+cGlkID0gMDsKKwkJCQkJYmZhX3NtX3NlbmRfZXZlbnQodHdpbiwKKwkJCQkJCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UpOworCQkJCX0KKwkJCX0KKwkJCXJwb3J0LT5waWQgPSBnaWRwbl9yc3AtPmRhcDsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBSZWplY3QgUmVzcG9uc2UKKwkgKi8KKwlzd2l0Y2ggKGN0aGRyLT5yZWFzb25fY29kZSkgeworCWNhc2UgQ1RfUlNOX0xPR0lDQUxfQlVTWToKKwkJLyoKKwkJICogTmVlZCB0byByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBDVF9SU05fVU5BQkxFX1RPX1BFUkY6CisJCS8qCisJCSAqIGRldmljZSBkb2Vzbid0IGV4aXN0IDogU3RhcnQgdGltZXIgdG8gY2xlYW51cCB0aGlzIGxhdGVyLgorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogICAgQ2FsbGVkIHRvIHNlbmQgYSBsb2dvdXQgdG8gdGhlIHJwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28odm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXUxNiAgICAgICAgbGVuOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCXBvcnQgPSBycG9ydC0+cG9ydDsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28sIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19sb2dvX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgcnBvcnQsIEZDX01BWF9QRFVTWiwKKwkJICAgICAgRkNfRURfVE9WKTsKKworCXJwb3J0LT5zdGF0cy5sb2dvcysrOworCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKKy8qKgorICogICAgU2VuZCBBQ0MgZm9yIGEgTE9HTyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyh2b2lkICpycG9ydF9jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTE2ICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJcG9ydCA9IHJwb3J0LT5wb3J0OworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJcnBvcnQtPnN0YXRzLmxvZ29fcmN2ZCsrOworCWxlbiA9IGZjX2xvZ29fYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnBvcnQtPnJlcGx5X294aWQpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAlycG9ydCAJCQktIHBvaW50ZXIgdG8gYmZhX2Zjc19wb3J0X25zX3QuCisgKiAJcGFyYW1bb3V0XQlycG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAgCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWFyZzsKKworCXJwb3J0LT5zdGF0cy5wbG9naV90aW1lb3V0cysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3BybGkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfcHJsaV9zICAgICAgKnBybGk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCisJcnBvcnQtPnN0YXRzLnBybGlfcmN2ZCsrOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUocG9ydCkpIHsKKwkJLyoKKwkJICogVGFyZ2V0IE1vZGUgOiBMZXQgdGhlIGZjcHRtIGhhbmRsZSBpdAorCQkgKi8KKwkJYmZhX2Zjc190aW5fcnhfcHJsaShycG9ydC0+dGluLCByeF9mY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBhcmUgZWl0aGVyIGluIEluaXRpYXRvciBvciBpcGZjIE1vZGUKKwkgKi8KKwlwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHJ4X2ZjaHMgKyAxKTsKKworCWlmIChwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy5pbml0aWF0b3IpIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBwcmxpLT5wYXJhbXBhZ2UudHlwZSk7CisJCXJwb3J0LT5zY3NpX2Z1bmN0aW9uID0gQkZBX1JQT1JUX0lOSVRJQVRPUjsKKwkJYmZhX2Zjc19pdG5pbV9pc19pbml0aWF0b3IocnBvcnQtPml0bmltKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBAdG9kbzogUFJMSSBmcm9tIGEgdGFyZ2V0ID8KKwkJICovCisJCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwkJcnBvcnQtPnNjc2lfZnVuY3Rpb24gPSBCRkFfUlBPUlRfVEFSR0VUOworCX0KKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX3BybGlfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJcG9ydC0+cG9ydF9jZmcucm9sZXMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19ycHNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zIHNwZWVkczsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBwcG9ydF9hdHRyOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKworCXJwb3J0LT5zdGF0cy5ycHNjX3JjdmQrKzsKKwlzcGVlZHMucG9ydF9zcGVlZF9jYXAgPQorCQlSUFNDX1NQRUVEX0NBUF8xRyB8IFJQU0NfU1BFRURfQ0FQXzJHIHwgUlBTQ19TUEVFRF9DQVBfNEcgfAorCQlSUFNDX1NQRUVEX0NBUF84RzsKKworCS8qCisJICogZ2V0IGN1cmVudCBzcGVlZCBmcm9tIHBwb3J0IGF0dHJpYnV0ZXMgZnJvbSBCRkEKKwkgKi8KKwliZmFfcHBvcnRfZ2V0X2F0dHIocG9ydC0+ZmNzLT5iZmEsICZwcG9ydF9hdHRyKTsKKworCXNwZWVkcy5wb3J0X29wX3NwZWVkID0gZmNfYmZhX3NwZWVkX3RvX3Jwc2Nfb3BlcnNwZWVkKHBwb3J0X2F0dHIuc3BlZWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfcnBzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCQkmc3BlZWRzKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgICphZGlzYzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisKKwlycG9ydC0+c3RhdHMuYWRpc2NfcmN2ZCsrOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUocG9ydCkpIHsKKwkJLyoKKwkJICogQHRvZG8gOiBUYXJnZXQgTW9kZSBoYW5kbGluZworCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJYWRpc2MgPSAoc3RydWN0IGZjX2FkaXNjX3MgKikgKHJ4X2ZjaHMgKyAxKTsKKworCS8qCisJICogQWNjZXB0IGlmIHRoZSBpdG5pbSBmb3IgdGhpcyBycG9ydCBpcyBvbmxpbmUuIEVsc2UgcmVqZWN0IHRoZSBBRElTQworCSAqLworCWlmIChiZmFfZmNzX2l0bmltX2dldF9vbmxpbmVfc3RhdGUocnBvcnQtPml0bmltKSA9PSBCRkFfU1RBVFVTX09LKSB7CisKKwkJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCQlpZiAoIWZjeHApCisJCQlyZXR1cm47CisKKwkJbGVuID0gZmNfYWRpc2NfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJCQkgcnhfZmNocy0+c19pZCwKKwkJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwKKwkJCQkJIHJ4X2ZjaHMtPm94X2lkLCBwb3J0LT5wb3J0X2NmZy5wd3duLAorCQkJCQkgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwkJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCQkgICAgICBGQ19NQVhfUERVU1osIDApOworCX0gZWxzZSB7CisJCXJwb3J0LT5zdGF0cy5hZGlzY19yZWplY3RlZCsrOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHJwb3J0LCByeF9mY2hzLAorCQkJCQkgIEZDX0xTX1JKVF9SU05fVU5BQkxFX1RPX1BFUkZfQ01ELAorCQkJCQkgIEZDX0xTX1JKVF9FWFBfTE9HSU5fUkVRVUlSRUQpOworCX0KKworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfaW5mb19zIHJwb3J0X2luZm87CisKKwlycG9ydF9pbmZvLnBpZCA9IHJwb3J0LT5waWQ7CisJcnBvcnRfaW5mby5sb2NhbF9waWQgPSBwb3J0LT5waWQ7CisJcnBvcnRfaW5mby5scF90YWcgPSBwb3J0LT5scF90YWc7CisJcnBvcnRfaW5mby52Zl9pZCA9IHBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJcnBvcnRfaW5mby52Zl9lbiA9IHBvcnQtPmZhYnJpYy0+aXNfdmY7CisJcnBvcnRfaW5mby5mY19jbGFzcyA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfaW5mby5jaXNjID0gcnBvcnQtPmNpc2M7CisJcnBvcnRfaW5mby5tYXhfZnJtc3ogPSBycG9ydC0+bWF4ZnJzaXplOworCWJmYV9ycG9ydF9vbmxpbmUocnBvcnQtPmJmYV9ycG9ydCwgJnJwb3J0X2luZm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2Uoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX2l0bmltX3BhdXNlKHJwb3J0LT5pdG5pbSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfdGluX3BhdXNlKHJwb3J0LT50aW4pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mYzRfcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc19pdG5pbV9yZXN1bWUocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc190aW5fcmVzdW1lKHJwb3J0LT50aW4pOworfQorCitzdGF0aWMgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3biwgdTMyIHJwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzID0gcG9ydC0+ZmNzOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2RydjsKKworCS8qKgorCSAqIGFsbG9jYXRlIHJwb3J0CisJICovCisJaWYgKGJmYV9mY2JfcnBvcnRfYWxsb2MoZmNzLT5iZmFkLCAmcnBvcnQsICZycG9ydF9kcnYpCisJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgci1wb3J0CisJICovCisJcnBvcnQtPnBvcnQgPSBwb3J0OworCXJwb3J0LT5mY3MgPSBmY3M7CisJcnBvcnQtPnJwX2RydiA9IHJwb3J0X2RydjsKKwlycG9ydC0+cGlkID0gcnBpZDsKKwlycG9ydC0+cHd3biA9IHB3d247CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBCRkEgcnBvcnQKKwkgKi8KKwlycG9ydC0+YmZhX3Jwb3J0ID0gYmZhX3Jwb3J0X2NyZWF0ZShwb3J0LT5mY3MtPmJmYSwgcnBvcnQpOworCWlmICghcnBvcnQtPmJmYV9ycG9ydCkgeworCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCWtmcmVlKHJwb3J0X2Rydik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qKgorCSAqIGFsbG9jYXRlIEZDLTRzCisJICovCisJYmZhX2Fzc2VydChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpIF4KKwkJICAgYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgeworCQlycG9ydC0+aXRuaW0gPSBiZmFfZmNzX2l0bmltX2NyZWF0ZShycG9ydCk7CisJCWlmICghcnBvcnQtPml0bmltKSB7CisJCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCQliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCQkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpIHsKKwkJcnBvcnQtPnRpbiA9IGJmYV9mY3NfdGluX2NyZWF0ZShycG9ydCk7CisJCWlmICghcnBvcnQtPnRpbikgeworCQkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQkJYmZhX3Jwb3J0X2RlbGV0ZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJCWtmcmVlKHJwb3J0X2Rydik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWJmYV9mY3NfcG9ydF9hZGRfcnBvcnQocG9ydCwgcnBvcnQpOworCisJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBScG9ydCBGZWF0dXJlcyhSUEYpIFN1YiBNb2R1bGUKKwkgKi8KKwlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJYmZhX2Zjc19ycGZfaW5pdChycG9ydCk7CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCS8qKgorCSAqIC0gZGVsZXRlIEZDLTRzCisJICogLSBkZWxldGUgQkZBIHJwb3J0CisJICogLSByZW1vdmUgZnJvbSBxdWV1ZSBvZiBycG9ydHMKKwkgKi8KKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkKKwkJYmZhX2Zjc19pdG5pbV9kZWxldGUocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9kZWxldGUocnBvcnQtPnRpbik7CisKKwliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCWJmYV9mY3NfcG9ydF9kZWxfcnBvcnQocG9ydCwgcnBvcnQpOworCWtmcmVlKHJwb3J0LT5ycF9kcnYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJICAgICAgIGVudW0gYmZhX3Jwb3J0X2Flbl9ldmVudCBldmVudCwKKwkJICAgICAgIHN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyAqZGF0YSkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcnBvcnQtPmZjcy0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgbHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocnBvcnQtPnBvcnQpOworCXd3bl90ICAgICAgICAgICBycHd3biA9IHJwb3J0LT5wd3duOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgIHJwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAqcHJpb19zdHJbXSA9IHsgInVua25vd24iLCAiaGlnaCIsICJtZWRpdW0iLCAibG93IiB9OworCisJd3duMnN0cihscHd3bl9wdHIsIGxwd3duKTsKKwl3d24yc3RyKHJwd3duX3B0ciwgcnB3d24pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX0FFTl9PTkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX09OTElORSwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfT0ZGTElORSwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fUU9TX1BSSU86CisJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zID0gZGF0YS0+cHJpdi5xb3M7CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX1FPU19QUklPLAorCQkJcHJpb19zdHJbYWVuX2RhdGEucnBvcnQucHJpdi5xb3MucW9zX3ByaW9yaXR5XSwKKwkJCXJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQ6CisJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zID0gZGF0YS0+cHJpdi5xb3M7CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQsCisJCQlhZW5fZGF0YS5ycG9ydC5wcml2LnFvcy5xb3NfZmxvd19pZCwgcnB3d25fcHRyLAorCQkJbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEucnBvcnQudmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5ycG9ydC5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocnBvcnQtPmZjcykpOworCWFlbl9kYXRhLnJwb3J0Lmxwd3duID0gbHB3d247CisJYWVuX2RhdGEucnBvcnQucnB3d24gPSBycHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCXJwb3J0LT5zdGF0cy5vbmxpbmVzKys7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgeworCQliZmFfZmNzX2l0bmltX3Jwb3J0X29ubGluZShycG9ydC0+aXRuaW0pOworCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCWJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShycG9ydCk7CisJfTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9ycG9ydF9vbmxpbmUocnBvcnQtPnRpbik7CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX09OTElORSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJcnBvcnQtPnN0YXRzLm9mZmxpbmVzKys7CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSB7CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKHJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkgeworCQkJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNULAorCQkJCQkgICAgICAgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX09GRkxJTkUsCisJCQkJCSAgICAgICBOVUxMKTsKKwkJfQorCX0KKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCWJmYV9mY3NfaXRuaW1fcnBvcnRfb2ZmbGluZShycG9ydC0+aXRuaW0pOworCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCWJmYV9mY3NfcnBmX3Jwb3J0X29mZmxpbmUocnBvcnQpOworCX0KKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9ycG9ydF9vZmZsaW5lKHJwb3J0LT50aW4pOworfQorCisvKioKKyAqIFVwZGF0ZSBycG9ydCBwYXJhbWV0ZXJzIGZyb20gUExPR0kgb3IgUExPR0kgYWNjZXB0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF91cGRhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJLyoqCisJICogLSBwb3J0IG5hbWUKKwkgKiAtIG5vZGUgbmFtZQorCSAqLworCXJwb3J0LT5wd3duID0gcGxvZ2ktPnBvcnRfbmFtZTsKKwlycG9ydC0+bnd3biA9IHBsb2dpLT5ub2RlX25hbWU7CisKKwkvKioKKwkgKiAtIGNsYXNzIG9mIHNlcnZpY2UKKwkgKi8KKwlycG9ydC0+ZmNfY29zID0gMDsKKwlpZiAocGxvZ2ktPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJcnBvcnQtPmZjX2NvcyA9IEZDX0NMQVNTXzM7CisKKwlpZiAocGxvZ2ktPmNsYXNzMi5jbGFzc192YWxpZCkKKwkJcnBvcnQtPmZjX2NvcyB8PSBGQ19DTEFTU18yOworCisJLyoqCisJICogLSBDSVNDCisJICogLSBNQVggcmVjZWl2ZSBmcmFtZSBzaXplCisJICovCisJcnBvcnQtPmNpc2MgPSBwbG9naS0+Y3NwLmNpc2M7CisJcnBvcnQtPm1heGZyc2l6ZSA9IGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisJLyoqCisJICogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZSA6CisJICogVGhpcyBpcyB0byBoYW5kbGUgYSBidWcgKDIzMzQ3NikgaW4gSUJNIHRhcmdldHMgaW4gRGlyZWN0IEF0dGFjaAorCSAqIE1vZGUuIEJhc2ljYWxseSwgaW4gRkxPR0kgQWNjZXB0IHRoZSB0YXJnZXQgd291bGQgaGF2ZSBlcnJvbmVvdXNseQorCSAqIHNldCB0aGUgQkIgQ3JlZGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGluIHRoZSBGTE9HSSBzZW50IGJ5IHRoZSBIQkEuCisJICogSXQgdXNlcyB0aGUgY29ycmVjdCB2YWx1ZSAoaXRzIG93biBCQiBjcmVkaXQpIGluIFBMT0dJLgorCSAqLworCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJICAgICYmIChiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpIDwgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpKSB7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkpOworCQliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpOworCisJCXBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKTsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChwb3J0LT5mY3MtPmJmYSwKKwkJCQkJICBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisJfQorCit9CisKKy8qKgorICogICBDYWxsZWQgdG8gaGFuZGxlIExPR08gcmVjZWl2ZWQgZnJvbSBhbiBleGlzdGluZyByZW1vdGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19sb2dvKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzKQoreworCXJwb3J0LT5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwlycG9ydC0+c3RhdHMubG9nb19yY3ZkKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19SQ1ZEKTsKK30KKworCisKKy8qKgorICogIGZjc19ycG9ydF9wdWJsaWMgRkNTIHJwb3J0IHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoqCisgKiAJQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGNyZWF0ZSBhIHJlbW90ZSBwb3J0IGluc3RhbmNlIGZvciBhIGRpc2NvdmVyZWQKKyAqIAlyZW1vdGUgZGV2aWNlLgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydAktIGJhc2UgcG9ydCBvciB2cG9ydAorICogQHBhcmFtW2luXSBycGlkCS0gcmVtb3RlIHBvcnQgSUQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHUzMiBycGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJwaWQpOworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBXV05fTlVMTCwgcnBpZCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKy8qKgorICogQ2FsbGVkIHRvIGNyZWF0ZSBhIHJwb3J0IGZvciB3aGljaCBvbmx5IHRoZSB3d24gaXMga25vd24uCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0CisgKiBAcGFyYW1baW5dIHJwd3duCS0gcmVtb3RlIHBvcnQgd3duCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnB3d24pOworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBycHd3biwgMCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BRERSRVNTX0RJU0MpOworCXJldHVybiBycG9ydDsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQgaW4gcHJpdmF0ZSBsb29wIHRvcG9sb2d5IHRvIGluZGljYXRlIHRoYXQgYQorICogcnBvcnQgaGFzIGJlZW4gZGlzY292ZXJlZCBhbmQgcGxvZ2kgaGFzIGJlZW4gY29tcGxldGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydAktIGJhc2UgcG9ydCBvciB2cG9ydAorICogQHBhcmFtW2luXSBycGlkCS0gcmVtb3RlIHBvcnQgSUQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBXV05fTlVMTCwgZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuOworCisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX0NPTVApOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGhhbmRsZSBQTE9HSSByZWNlaXZlZCBmcm9tIGEgbmV3IHJlbW90ZSBwb3J0LgorICogICBJZiBhbiBleGlzdGluZyBycG9ydCBkb2VzIGEgcGxvZ2ksIGl0IHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBwbG9naS0+cG9ydF9uYW1lLCBmY2hzLT5zX2lkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm47CisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJcnBvcnQtPnJlcGx5X294aWQgPSBmY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCXJwb3J0LT5zdGF0cy5wbG9naV9yY3ZkKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfUkNWRCk7Cit9CisKK3N0YXRpYyBpbnQKK3d3bl9jb21wYXJlKHd3bl90IHd3bjEsIHd3bl90IHd3bjIpCit7CisJdTggICAgICAgICpiMSA9ICh1OCAqKSAmd3duMTsKKwl1OCAgICAgICAgKmIyID0gKHU4ICopICZ3d24yOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih3d25fdCk7IGkrKykgeworCQlpZiAoYjFbaV0gPCBiMltpXSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGIxW2ldID4gYjJbaV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gaGFuZGxlIFBMT0dJIHJlY2VpdmVkIGZyb20gYW4gZXhpc3RpbmcKKyAqIAkgcmVtb3RlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCSAgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwkvKioKKwkgKiBAdG9kbyBIYW5kbGUgUDJQIGFuZCBpbml0aWF0b3ItaW5pdGlhdG9yLgorCSAqLworCisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpKTsKKworCXJwb3J0LT5yZXBseV9veGlkID0gcnhfZmNocy0+b3hfaWQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwkvKioKKwkgKiBJbiBTd2l0Y2hlZCBmYWJyaWMgdG9wb2xvZ3ksCisJICogUExPR0kgdG8gZWFjaCBvdGhlci4gSWYgb3VyIHB3d24gaXMgc21hbGxlciwgaWdub3JlIGl0LAorCSAqIGlmIGl0IGlzIG5vdCBhIHdlbGwga25vd24gYWRkcmVzcy4KKwkgKiBJZiB0aGUgbGluayB0b3BvbG9neSBpcyBOMk4sCisJICogdGhpcyBQbG9naSBzaG91bGQgYmUgYWNjZXB0ZWQuCisJICovCisJaWYgKCh3d25fY29tcGFyZShycG9ydC0+cG9ydC0+cG9ydF9jZmcucHd3biwgcnBvcnQtPnB3d24pID09IC0xKQorCSAgICAmJiAoYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocnBvcnQtPnBvcnQtPmZhYnJpYykpCisJICAgICYmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSkgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCQlyZXR1cm47CisJfQorCisJcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gZGVsZXRlIGEgcmVtb3RlIHBvcnQgaW5zdGFuY2UuCisgKgorKiBScG9ydCBkZWxldGUgaXMgY2FsbGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAkJLSB2cG9ydCBpcyBkZWxldGVkCisgKiAJCS0gdmYgaXMgZGVsZXRlZAorICogCQktIGV4cGxpY2l0IHJlcXVlc3QgZnJvbSBPUyB0byBkZWxldGUgcnBvcnQgKHZtd2FyZSkKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfREVMRVRFKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gIHdoZW4gYSB0YXJnZXQgZ29lcyBvZmZsaW5lLgorICoKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQgaW4gbjJuIHdoZW4gYSB0YXJnZXQgKGF0dGFjaGVkIHBvcnQpIGJlY29tZXMgb25saW5lLgorICoKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfU0VORCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gbm90aWZ5IFNDTiBmb3IgdGhlIHJlbW90ZSBwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc2NuKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCisJcnBvcnQtPnN0YXRzLnJzY25zKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfU0NOKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSAgZmNwaW0gdG8gbm90aWZ5IHRoYXQgdGhlIElUTiBjbGVhbnVwIGlzIGRvbmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3B0bSB0byBub3RpZnkgdGhhdCB0aGUgSVROIGNsZWFudXAgaXMgZG9uZS4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF90aW5fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIEJGQSBjYWxsYmFjayBmb3IgYmZhX3Jwb3J0X29ubGluZSgpIGNhbGwuCisgKgorICogCXBhcmFtW2luXSAJY2JfYXJnCS0gIHJwb3J0IHN0cnVjdC4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3ZvaWQKK2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcpCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9IQ0JfT05MSU5FKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIEJGQSBjYWxsYmFjayBmb3IgYmZhX3Jwb3J0X29mZmxpbmUoKSBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gCXJwb3J0IAktCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorICogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfSENCX09GRkxJTkUpOworfQorCisvKioKKyAqIFRoaXMgcm91dGluZSBpcyBhIHN0YXRpYyBCRkEgY2FsbGJhY2sgd2hlbiB0aGVyZSBpcyBhIFFvUyBmbG93X2lkCisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKgorICogQHBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiBAcmV0dXJuICAJdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X3Fvc19zY25fZmxvd2lkKHZvaWQgKmNiYXJnLAorCQkJICAgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHIsCisJCQkgICAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIGFlbl9kYXRhOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYWVuX2RhdGEucHJpdi5xb3MgPSBuZXdfcW9zX2F0dHI7CisJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lELCAmYWVuX2RhdGEpOworfQorCisvKioKKyAqIFRoaXMgcm91dGluZSBpcyBhIHN0YXRpYyBCRkEgY2FsbGJhY2sgd2hlbiB0aGVyZSBpcyBhIFFvUyBwcmlvcml0eQorICogY2hhbmdlIG5vdGlmaWNhdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gCXJwb3J0IAktCisgKgorICogQHJldHVybiAJdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X3Fvc19zY25fcHJpbyh2b2lkICpjYmFyZywgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCSAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIGFlbl9kYXRhOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYWVuX2RhdGEucHJpdi5xb3MgPSBuZXdfcW9zX2F0dHI7CisJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTywgJmFlbl9kYXRhKTsKK30KKworLyoqCisgKiAJCUNhbGxlZCB0byBwcm9jZXNzIGFueSB1bnNvbGljdGVkIGZyYW1lcyBmcm9tIHRoaXMgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX0lNUCk7Cit9CisKKy8qKgorICogCQlDYWxsZWQgdG8gcHJvY2VzcyBhbnkgdW5zb2xpY3RlZCBmcmFtZXMgZnJvbSB0aGlzIHJlbW90ZSBwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT5zX2lkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPmRfaWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisKKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykKKwkJcmV0dXJuOworCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19MT0dPOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfbG9nbyhycG9ydCwgZmNocyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfQURJU0M6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19QUkxPOgorCQlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkKKwkJCWJmYV9mY3NfZmNwaW1fdWZfcmVjdihycG9ydC0+aXRuaW0sIGZjaHMsIGxlbik7CisKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCQliZmFfZmNzX2ZjcHRtX3VmX3JlY3YocnBvcnQtPnRpbiwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19QUkxJOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcHJsaShycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19SUFNDOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcnBzYyhycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHJwb3J0LCBmY2hzLAorCQkJCQkgIEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQLAorCQkJCQkgIEZDX0xTX1JKVF9FWFBfTk9fQURETF9JTkZPKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogU2VuZCBhIExTIHJlamVjdAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCSAgdTggcmVhc29uX2NvZGUsIHU4IHJlYXNvbl9jb2RlX2V4cGwpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhycG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX3JqdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkgICAgICByZWFzb25fY29kZSwgcmVhc29uX2NvZGVfZXhwbCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKKy8qKgorICogUmV0dXJuIHN0YXRlIG9mIHJwb3J0LgorICovCitpbnQKK2JmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBiZmFfc21fdG9fc3RhdGUocnBvcnRfc21fdGFibGUsIHJwb3J0LT5zbSk7Cit9CisKKy8qKgorICogCQkgQ2FsbGVkIGJ5IHRoZSBEcml2ZXIgdG8gc2V0IHJwb3J0IGRlbGV0ZS9hZ2VvdXQgdGltZW91dAorICoKKyAqIAlwYXJhbVtpbl0JCXJwb3J0IHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zZXRfZGVsX3RpbWVvdXQodTggcnBvcnRfdG1vKQoreworCS8qCisJICogY29udmVydCB0byBNaWxsaXNlY3MKKwkgKi8KKwlpZiAocnBvcnRfdG1vID4gMCkKKwkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCA9IHJwb3J0X3RtbyAqIDEwMDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGFlMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFJQT1JUX0FQSSk7CisKKy8qKgorICogIHJwb3J0X2FwaS5jIFJlbW90ZSBwb3J0IGltcGxlbWVudGF0aW9uLgorICovCisKKy8qKgorICogIGZjc19ycG9ydF9hcGkgRkNTIHJwb3J0IEFQSS4KKyAqLworCisvKioKKyAqIAlEaXJlY3QgQVBJIHRvIGFkZCBhIHRhcmdldCBieSBwb3J0IHd3bi4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCwgZm9yCisgKglleGFtcGxlLCBieSBiaW9zIHdoZW4gdGFyZ2V0IHB3d24gaXMga25vd24gZnJvbSBib290IGx1biBjb25maWd1cmF0aW9uLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcnBvcnRfYWRkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgKnB3d24sCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2RydikKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgKnB3d24pOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICoJRGlyZWN0IEFQSSB0byByZW1vdmUgYSB0YXJnZXQgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4gVGhpcworICoJaW50ZXJmYWNlIGlzIHVzZWQsIGZvciBleGFtcGxlLCBieSB2bXdhcmUgZHJpdmVyIHRvIHJlbW92ZSB0YXJnZXQKKyAqCXBvcnRzIGZyb20gdGhlIHRhcmdldCBsaXN0IGZvciBhIFZNLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcnBvcnRfcmVtb3ZlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0X2luKQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0X2luLT5mY3MsIHJwb3J0X2luLT5wd3duKTsKKworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHJwb3J0X2luLT5wb3J0LCBycG9ydF9pbi0+cHd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCQliZmFfdHJjKHJwb3J0X2luLT5mY3MsIHJwb3J0X2luLT5waWQpOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTktOT1dOX1JXV047CisJfQorCisJLyoKKwkgKiBUQkQgaWYgdGhpcyByZW1vdGUgcG9ydCBpcyBvbmxpbmUsIHNlbmQgYSBsb2dvCisJICovCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKK30KKworLyoqCisgKglSZW1vdGUgZGV2aWNlIHN0YXR1cyBmb3IgZGlzcGxheS9kZWJ1Zy4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zICpycG9ydF9hdHRyKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCWJmYV9vc19tZW1zZXQocnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zKSk7CisKKwlycG9ydF9hdHRyLT5waWQgPSBycG9ydC0+cGlkOworCXJwb3J0X2F0dHItPnB3d24gPSBycG9ydC0+cHd3bjsKKwlycG9ydF9hdHRyLT5ud3duID0gcnBvcnQtPm53d247CisJcnBvcnRfYXR0ci0+Y29zX3N1cHBvcnRlZCA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfYXR0ci0+ZGZfc3ogPSBycG9ydC0+bWF4ZnJzaXplOworCXJwb3J0X2F0dHItPnN0YXRlID0gYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUocnBvcnQpOworCXJwb3J0X2F0dHItPmZjX2NvcyA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfYXR0ci0+Y2lzYyA9IHJwb3J0LT5jaXNjOworCXJwb3J0X2F0dHItPnNjc2lfZnVuY3Rpb24gPSBycG9ydC0+c2NzaV9mdW5jdGlvbjsKKwlycG9ydF9hdHRyLT5jdXJyX3NwZWVkICA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwlycG9ydF9hdHRyLT5hc3NpZ25lZF9zcGVlZCAgPSBycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkOworCisJYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihycG9ydC0+YmZhX3Jwb3J0LCAmcW9zX2F0dHIpOworCXJwb3J0X2F0dHItPnFvc19hdHRyID0gcW9zX2F0dHI7CisKKwlycG9ydF9hdHRyLT50cmxfZW5mb3JjZWQgPSBCRkFfRkFMU0U7CisJaWYgKGJmYV9wcG9ydF9pc19yYXRlbGltKHBvcnQtPmZjcy0+YmZhKSkgeworCQlpZiAoKHJwb3J0LT5ycGYucnBzY19zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikgfHwKKwkJCShycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPAorCQkJYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9tYXhfc3BlZWQocG9ydCkpKQorCQkJcnBvcnRfYXR0ci0+dHJsX2VuZm9yY2VkID0gQkZBX1RSVUU7CisJfQorCisJLyoKKwkgKiBUT0RPCisJICogcnBvcnQtPnN5bW5hbWUKKwkgKi8KK30KKworLyoqCisgKiAJUGVyIHJlbW90ZSBkZXZpY2Ugc3RhdGlzdGljcy4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IHJwb3J0LT5zdGF0czsKK30KKwordm9pZAorYmZhX2Zjc19ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KChjaGFyICopJnJwb3J0LT5zdGF0cywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MpKTsKK30KKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwgcnB3d24pOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRCRCBFcnJvciBoYW5kbGluZworCQkgKi8KKwl9CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJud3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24ocG9ydCwgcm53d24pOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRCRCBFcnJvciBoYW5kbGluZworCQkgKi8KKwl9CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKy8qCisgKiBUaGlzIEFQSSBpcyB0byBzZXQgdGhlIFJwb3J0J3Mgc3BlZWQuIFNob3VsZCBiZSB1c2VkIHdoZW4gUlBTQyBpcyBub3QKKyAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc2V0X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJcnBvcnQtPnJwZi5hc3NpZ25lZF9zcGVlZCAgPSBzcGVlZDsKKworCS8qIFNldCB0aGlzIHNwZWVkIGluIGYvdyBvbmx5IGlmIHRoZSBSUFNDIHNwZWVkIGlzIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKQorCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgc3BlZWQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExZjU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHJwb3J0X2Z0cnMuYyBSZW1vdGUgcG9ydCBmZWF0dXJlcyAoUlBGKSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlRfRlRSUyk7CisKKyNkZWZpbmUgQkZBX0ZDU19SUEZfUkVUUklFUwkoMykKKyNkZWZpbmUgQkZBX0ZDU19SUEZfUkVUUllfVElNRU9VVCAgKDEwMDApIC8qIDEgc2VjIChJbiBtaWxsaXNlY3MpICovCisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJdTMyIHJlc2lkX2xlbiwKKwkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl90aW1lb3V0KHZvaWQgKmFyZyk7CisKKy8qKgorICogIGZjc19ycG9ydF9mdHJzX3NtIEZDUyBycG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCisKK2VudW0gcnBmX2V2ZW50IHsKKwlSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FICA9IDEsICAgICAvKiAgUnBvcnQgb2ZmbGluZSAgICAgICAgICAgICovCisJUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FICAgPSAyLCAgICAgLyogIFJwb3J0IG9ubGluZSAgICAgICAgICAgICovCisJUlBGU01fRVZFTlRfRkNYUF9TRU5UICAgICAgPSAzLCAgICAvKiAgRnJhbWUgZnJvbSBoYXMgYmVlbiBzZW50ICovCisJUlBGU01fRVZFTlRfVElNRU9VVCAgCSAgID0gNCwgICAgLyogIFJwb3J0IFNNIHRpbWVvdXQgZXZlbnQgICAqLworCVJQRlNNX0VWRU5UX1JQU0NfQ09NUCAgICAgID0gNSwKKwlSUEZTTV9FVkVOVF9SUFNDX0ZBSUwgICAgICA9IDYsCisJUlBGU01fRVZFTlRfUlBTQ19FUlJPUiAgICAgPSA3LAorfTsKKworc3RhdGljIHZvaWQJYmZhX2Zjc19ycGZfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJICAgICAgIGVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9ycHNjKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCSAgICAgICBlbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAJYmZhX2Zjc19ycGZfc21fcnBzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FIDoKKwkJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMihycGYsIE5VTEwpOworCQkJYnJlYWs7CisJCX07CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzYyk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwZi0+ZmN4cF93cWUpOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUFNDX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQkvKiBVcGRhdGUgc3BlZWQgaW5mbyBpbiBmL3cgdmlhIEJGQSAqLworCQlpZiAocnBmLT5ycHNjX3NwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB7CisJCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgcnBmLT5ycHNjX3NwZWVkKTsKKwkJfSBlbHNlIGlmIChycGYtPmFzc2lnbmVkX3NwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB7CisJCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgcnBmLT5hc3NpZ25lZF9zcGVlZCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQU0NfRkFJTDoKKwkJLyogUlBTQyBub3Qgc3VwcG9ydGVkIGJ5IHJwb3J0ICovCisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBTQ19FUlJPUjoKKwkJLyogbmVlZCB0byByZXRyeS4uLmRlbGF5ZWQgYSBiaXQuICovCisJCWlmIChycGYtPnJwc2NfcmV0cmllcysrIDwgQkZBX0ZDU19SUEZfUkVUUklFUykgeworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwZi0+dGltZXIsCisJCQkJICAgIGJmYV9mY3NfcnBmX3RpbWVvdXQsIHJwZiwKKwkJCQkgICAgQkZBX0ZDU19SUEZfUkVUUllfVElNRU9VVCk7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19yZXRyeSk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb25saW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycGYtPmZjeHApOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9USU1FT1VUIDoKKwkJLyogcmUtc2VuZCB0aGUgUlBTQyAqLworCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMihycGYsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV90aW1lcl9zdG9wKCZycGYtPnRpbWVyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09OTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgaXMgY3JlYXRlZC4KKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gJnJwb3J0LT5ycGY7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCXJwZi0+cnBvcnQgPSBycG9ydDsKKworCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV91bmluaXQpOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIFJwb3J0IGJlY29tZXMgb25saW5lCisgKi8KK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJaWYgKF9fZmNzX21pbl9jZmcocnBvcnQtPnBvcnQtPmZjcykpCisJCXJldHVybjsKKworCWlmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkKKwkJYmZhX3NtX3NlbmRfZXZlbnQoJnJwb3J0LT5ycGYsIFJQRlNNX0VWRU5UX1JQT1JUX09OTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgYmVjb21lcyBvZmZsaW5lCisgKi8KK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCWlmIChfX2Zjc19taW5fY2ZnKHJwb3J0LT5wb3J0LT5mY3MpKQorCQlyZXR1cm47CisKKwliZmFfc21fc2VuZF9ldmVudCgmcnBvcnQtPnJwZiwgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopIGFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHZvaWQgKnJwZl9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmIAk9IChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqKXJwZl9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwZi0+ZmN4cF93cWUsCisJCQkJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIsIHJwZik7CisJCXJldHVybjsKKwl9CisJcnBmLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Jwc2MyX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgJnJwb3J0LT5waWQsIDEpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2UsCisJCQkgIHJwZiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCXJwb3J0LT5zdGF0cy5ycHNjX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX0ZDWFBfU0VOVCk7CisKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3Jwc2MyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopIGNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKwlzdHJ1Y3QgZmNfcnBzYzJfYWNjX3MgICpycHNjMl9hY2M7CisJdTE2ICAgICAgICBudW1fZW50czsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisKKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWlmIChyZXFfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJcnBvcnQtPnN0YXRzLnJwc2NfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlycHNjMl9hY2MgPSAoc3RydWN0IGZjX3Jwc2MyX2FjY19zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJaWYgKHJwc2MyX2FjYy0+ZWxzX2NtZCA9PSBGQ19FTFNfQUNDKSB7CisJCXJwb3J0LT5zdGF0cy5ycHNjX2FjY3MrKzsKKwkJbnVtX2VudHMgPSBiZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5udW1fcGlkcyk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbnVtX2VudHMpOworCQlpZiAobnVtX2VudHMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnBpZCAhPSBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0ucGlkKSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnNwZWVkKSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLmluZGV4KSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJcnBzYzJfYWNjLT5wb3J0X2luZm9bMF0udHlwZSk7CisKKwkJCWlmIChycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5zcGVlZCA9PSAwKSB7CisJCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCXJwZi0+cnBzY19zcGVlZCA9IGZjX3Jwc2Nfb3BlcnNwZWVkX3RvX2JmYV9zcGVlZCgKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uc3BlZWQpKTsKKworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0NPTVApOworCQl9CisJfSBlbHNlIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisJCXJwb3J0LT5zdGF0cy5ycHNjX3JlamVjdHMrKzsKKwkJaWYgKGxzX3JqdC0+cmVhc29uX2NvZGUgPT0gRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFApIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19GQUlMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19FUlJPUik7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jIGIvZHJpdmVycy9zY3NpL2JmYS9zY24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQ3NzFmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbXMuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFNDTik7CisKKyNkZWZpbmUgRkNfUU9TX1JTQ05fRVZFTlQJCTB4MGMKKyNkZWZpbmUgRkNfRkFCUklDX05BTUVfUlNDTl9FVkVOVAkweDBkCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3Njcih2b2lkICpzY25fY2JhcmcsCisJCQkJCSAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zY3JfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2VuZF9sc19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fdGltZW91dCh2b2lkICphcmcpOworCisvKioKKyAqICBmY3Nfc2NtX3NtIEZDUyBTQ04gc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgU0NOIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9zY25fZXZlbnQgeworCVNDTlNNX0VWRU5UX1BPUlRfT05MSU5FID0gMSwKKwlTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCVNDTlNNX0VWRU5UX1JTUF9PSyA9IDMsCisJU0NOU01fRVZFTlRfUlNQX0VSUk9SID0gNCwKKwlTQ05TTV9FVkVOVF9USU1FT1VUID0gNSwKKwlTQ05TTV9FVkVOVF9TQ1JfU0VOVCA9IDYsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQllbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CisKKy8qKgorICogCQlTdGFydGluZyBzdGF0ZSAtIGF3YWl0aW5nIGxpbmsgdXAuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKTsKKwkJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3NjcihzY24sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3NjcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9TQ1JfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoc2NuLT5wb3J0LT5mY3MtPmJmYSwgJnNjbi0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBzY24tPnBvcnQ7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChwb3J0LT5mY3MtPmJmYSwgJnNjbi0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X3Njbl90aW1lb3V0LCBzY24sCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoc2NuLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2NyX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCSAgICAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3IpOworCQliZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHNjbiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmc2NuLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3Nfc2NuX3ByaXZhdGUgRkNTIFNDTiBwcml2YXRlIGZ1bmN0aW9ucworICovCisKKy8qKgorICogVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIHRvIHNlbmQgYSBTQ1IgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Iodm9pZCAqc2NuX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IHNjbl9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBzY24tPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZzY24tPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyLCBzY24pOworCQlyZXR1cm47CisJfQorCXNjbi0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIEhhbmRsZSBWVSByZWdpc3RyYXRpb25zIGZvciBCYXNlIHBvcnQgb25seQorCSAqLworCWlmICgoIXBvcnQtPnZwb3J0KSAmJiBiZmFfaW9jX2dldF9mY21vZGUoJnBvcnQtPmZjcy0+YmZhLT5pb2MpKSB7CisJCWxlbiA9IGZjX3Njcl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkgICBiZmFfbHBzX2lzX2JyY2RfZmFicmljKHBvcnQtPmZhYnJpYy0+bHBzKSwKKwkJCQkgICBwb3J0LT5waWQsIDApOworCX0gZWxzZSB7CisJCWxlbiA9IGZjX3Njcl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgQkZBX0ZBTFNFLAorCQkJCSAgIHBvcnQtPnBpZCwgMCk7CisJfQorCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X3Njbl9zY3JfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopc2NuLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1NDUl9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKworCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoKKyAqIFNlbmQgYSBMUyBBY2NlcHQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc2VuZF9sc19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocykKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19sc19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgYmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCQktIHBvaW50ZXIgdG8gYmZhX2Zjc19wb3J0X3QuCisgKiAJcGFyYW1bb3V0XQl2cG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAgCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKilhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1RJTUVPVVQpOworfQorCisKKworLyoqCisgKiAgZmNzX3Njbl9wdWJsaWMgRkNTIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKgorICogRnVuY3Rpb25zIGNhbGxlZCBieSBwb3J0L2ZhYgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCk7CisKKwlzY24tPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9wb3J0aWRfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHUzMiBycGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJwaWQpOworCisJLyoqCisJICogSWYgdGhpcyBpcyBhbiB1bmtub3duIGRldmljZSwgdGhlbiBpdCBqdXN0IGNhbWUgb25saW5lLgorCSAqIE90aGVyd2lzZSBsZXQgcnBvcnQgaGFuZGxlIHRoZSBSU0NOIGV2ZW50LgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcnBpZCk7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIHdlIGRvbm90IG5lZWQgdG8KKwkJICogZGlzY292ZXIgYW55IG5ldyBycG9ydHMuCisJCSAqLworCQlpZiAoIV9fZmNzX21pbl9jZmcocG9ydC0+ZmNzKSkKKwkJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGUocG9ydCwgcnBpZCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCX0KK30KKworLyoqCisgKiByc2NuIGZvcm1hdCBiYXNlZCBQSUQgY29tcGFyaXNvbgorICovCisjZGVmaW5lIF9fZmNfcGlkX21hdGNoKF9fYzAsIF9fYzEsIF9fZm10KQkJXAorCSgoKF9fZm10KSA9PSBGQ19SU0NOX0ZPUk1BVF9GQUJSSUMpIHx8CQlcCisJICgoKF9fZm10KSA9PSBGQ19SU0NOX0ZPUk1BVF9ET01BSU4pICYmCQlcCisJICAoKF9fYzApWzBdID09IChfX2MxKVswXSkpIHx8CQkJXAorCSAoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfQVJFQSkgJiYJCVwKKwkgICgoX19jMClbMF0gPT0gKF9fYzEpWzBdKSAmJgkJCVwKKwkgICgoX19jMClbMV0gPT0gKF9fYzEpWzFdKSkpCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX211bHRpcG9ydF9yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gZmNfcnNjbl9mb3JtYXQgZm9ybWF0LCB1MzIgcnNjbl9waWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZV9uZXh0OworCXU4ICAgICAgICAqYzAsICpjMTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBmb3JtYXQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuX3BpZCk7CisKKwljMCA9ICh1OCAqKSAmcnNjbl9waWQ7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlX25leHQsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJYzEgPSAodTggKikgJnJwb3J0LT5waWQ7CisJCWlmIChfX2ZjX3BpZF9tYXRjaChjMCwgYzEsIGZvcm1hdCkpCisJCQliZmFfZmNzX3Jwb3J0X3NjbihycG9ydCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgICAgICB1MzIgbGVuKQoreworCXN0cnVjdCBmY19yc2NuX3BsX3MgICAqcnNjbiA9IChzdHJ1Y3QgZmNfcnNjbl9wbF9zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9lbnRyaWVzOworCXUzMiAgICAgICAgcnNjbl9waWQ7CisJYmZhX2Jvb2xlYW5fdCAgIG5zcXVlcnkgPSBCRkFfRkFMU0U7CisJaW50ICAgICAgICAgICAgIGkgPSAwOworCisJbnVtX2VudHJpZXMgPQorCQkoYmZhX29zX250b2hzKHJzY24tPnBheWxkbGVuKSAtCisJCSBzaXplb2YodTMyKSkgLyBzaXplb2YocnNjbi0+ZXZlbnRbMF0pOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIG51bV9lbnRyaWVzKTsKKworCXBvcnQtPnN0YXRzLm51bV9yc2NuKys7CisKKwliZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHBvcnQsIGZjaHMpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKKwkJcnNjbl9waWQgPSByc2NuLT5ldmVudFtpXS5wb3J0aWQ7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY24tPmV2ZW50W2ldLmZvcm1hdCk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuX3BpZCk7CisKKwkJc3dpdGNoIChyc2NuLT5ldmVudFtpXS5mb3JtYXQpIHsKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9QT1JUSUQ6CisJCQlpZiAocnNjbi0+ZXZlbnRbaV0ucXVhbGlmaWVyID09IEZDX1FPU19SU0NOX0VWRU5UKSB7CisJCQkJLyoKKwkJCQkgKiBJZ25vcmUgdGhpcyBldmVudC4gZi93IHdvdWxkIGhhdmUgcHJvY2Vzc2VkCisJCQkJICogaXQKKwkJCQkgKi8KKwkJCQliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCQkJfSBlbHNlIHsKKwkJCQlwb3J0LT5zdGF0cy5udW1fcG9ydGlkX3JzY24rKzsKKwkJCQliZmFfZmNzX3BvcnRfc2NuX3BvcnRpZF9yc2NuKHBvcnQsIHJzY25fcGlkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfRkFCUklDOgorCQkJaWYgKHJzY24tPmV2ZW50W2ldLnF1YWxpZmllciA9PQorCQkJICAgIEZDX0ZBQlJJQ19OQU1FX1JTQ05fRVZFTlQpIHsKKwkJCQliZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24ocG9ydCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogISEhISEhISEhIEZhbGwgVGhyb3VnaCAhISEhISEhISEhISEhCisJCQkgKi8KKworCQljYXNlIEZDX1JTQ05fRk9STUFUX0FSRUE6CisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfRE9NQUlOOgorCQkJbnNxdWVyeSA9IEJGQV9UUlVFOworCQkJYmZhX2Zjc19wb3J0X3Njbl9tdWx0aXBvcnRfcnNjbihwb3J0LAorCQkJCQkJCXJzY24tPmV2ZW50W2ldLmZvcm1hdCwKKwkJCQkJCQlyc2NuX3BpZCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYmZhX2Fzc2VydCgwKTsKKwkJCW5zcXVlcnkgPSBCRkFfVFJVRTsKKwkJfQorCX0KKworCS8qKgorCSAqIElmIGFueSBvZiBhcmVhLCBkb21haW4gb3IgZmFicmljIFJTQ04gaXMgcmVjZWl2ZWQsIGRvIGEgZnJlc2ggZGlzY292ZXJ5CisJICogdG8gZmluZCBuZXcgZGV2aWNlcy4KKwkgKi8KKwlpZiAobnNxdWVyeSkKKwkJYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHBvcnQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ4MWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS92ZmFwaS5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHZmYXBpLmMgRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgVkZBUEkpOworCisvKioKKyAqICBmY3NfdmZfYXBpIHZpcnR1YWwgZmFicmljcyBBUEkKKyAqLworCisvKioKKyAqIAkJRW5hYmxlIFZGIG1vZGUuCisgKgorICogQHBhcmFtW2luXQkJZmNzCQlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCQl2Zl9pZAkJZGVmYXVsdCB2Zl9pZCBvZiBwb3J0LCBGQ19WRl9JRF9OVUxMCisgKiAJCQkJCXRvIHVzZSBzdGFuZGFyZCBkZWZhdWx0IHZmX2lkIG9mIDEuCisgKgorICogQHJldHZhbAlCRkFfU1RBVFVTX09LCQl2ZiBtb2RlIGlzIGVuYWJsZWQKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19CVVNZCQlQb3J0IGlzIGFjdGl2ZS4gUG9ydCBtdXN0IGJlIGRpc2FibGVkCisgKgkJCQkJYmVmb3JlIFZGIG1vZGUgY2FuIGJlIGVuYWJsZWQuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9tb2RlX2VuYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCkKK3sKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAJCURpc2FibGUgVkYgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dCQlmY3MJCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfT0sJCXZmIG1vZGUgaXMgZGlzYWJsZWQKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19CVVNZCQlWRnMgYXJlIHByZXNlbnQgYW5kIGJlaW5nIHVzZWQuIEFsbAorICogCQkJCQlWRnMgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBkaXNhYmxpbmcKKyAqCQkJCQlWRiBtb2RlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfbW9kZV9kaXNhYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAJCUNyZWF0ZSBhIG5ldyBWRiBpbnN0YW5jZS4KKyAqCisgKiAgQSBuZXcgVkYgaXMgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gVkYgY29uZmlndXJhdGlvbi4gQSBWRiBpcyBpZGVudGlmaWVkCisgKiAgYnkgVkYgaWQuIE5vIGR1cGxpY2F0ZSBWRiBjcmVhdGlvbiBpcyBhbGxvd2VkIHdpdGggdGhlIHNhbWUgVkYgaWQuIE9uY2UKKyAqICBhIFZGIGlzIGNyZWF0ZWQsIFZGIGlzIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBhZnRlciBsaW5rIGluaXRpYWxpemF0aW9uCisgKiAgYW5kIEVWRlAgZXhjaGFuZ2UgaXMgY29tcGxldGVkLgorICoKKyAqIAlwYXJhbVtpbl0gdmYJCS0gCUZDUyB2ZiBkYXRhIHN0cnVjdHVyZS4gTWVtb3J5IGlzCisgKgkJCQkJYWxsb2NhdGVkIGJ5IGNhbGxlciAoZHJpdmVyKQorICogCXBhcmFtW2luXSBmY3MgCQktIAlGQ1MgbW9kdWxlCisgKiAJcGFyYW1baW5dIHZmX2NmZwktIAlWRiBjb25maWd1cmF0aW9uCisgKiAJcGFyYW1baW5dIHZmX2RydiAJLSAJT3BhcXVlIGhhbmRsZSBiYWNrIHRvIHRoZSBkcml2ZXIncworICoJCQkJCXZpcnR1YWwgdmYgc3RydWN0dXJlCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LIFZGIGNyZWF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19GQUlMRUQgVkYgY3JlYXRpb24gZmFpbGVkCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRUVYSVNUIEEgVkYgZXhpc3RzIHdpdGggdGhlIGdpdmVuIHZmX2lkCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9jcmVhdGUoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQsCisJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KQoreworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBkZWxldGUgYSBCRkEgVkYgb2JqZWN0LiBWRiBvYmplY3Qgc2hvdWxkCisgKiAJCWJlIHN0b3BwZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sJT24gdmYgZGVsZXRpb24gc3VjY2VzcworICogCXJldHZhbCBCRkFfU1RBVFVTX0JVU1kgVkYgaXMgbm90IGluIGEgc3RvcHBlZCBzdGF0ZQorICogCXJldHZhbCBCRkFfU1RBVFVTX0lOUFJPR1JFU1MgVkYgZGVsZXRpb24gaW4gaW4gcHJvZ3Jlc3MKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX2RlbGV0ZShiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVN0YXJ0IHBhcnRpY2lwYXRpb24gaW4gVkYuIFRoaXMgdHJpZ2dlcnMgbG9naW4gdG8gdGhlIHZpcnR1YWwgZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0gdmYgLSBwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3ZmX3N0YXJ0KGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworfQorCisvKioKKyAqICAJTG9nb3V0IHdpdGggdGhlIHZpcnR1YWwgZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0gdmYgLSBwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyAJT24gc3VjY2Vzcy4KKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTIFZGIGlzIGJlaW5nIHN0b3BwZWQuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9zdG9wKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJUmV0dXJucyBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZlbiBWRi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKiAJcGFyYW1bb3V0XSB2Zl9hdHRyIAl2ZiBhdHRyaWJ1dGVzIHJldHVybmVkCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X2F0dHIoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV92Zl9hdHRyX3MgKnZmX2F0dHIpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworfQorCisvKioKKyAqIAkJUmV0dXJuIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKiAJcGFyYW1bb3V0XSB2Zl9zdGF0cyAJdmYgc3RhdGlzdGljcyByZXR1cm5lZAorICoKKyAqICBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9nZXRfc3RhdHMoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV92Zl9zdGF0c19zICp2Zl9zdGF0cykKK3sKKwliZmFfb3NfbWVtY3B5KHZmX3N0YXRzLCAmdmYtPnN0YXRzLCBzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCisvKioKKyAqIAkJY2xlYXIgc3RhdGlzdGljcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHZmLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQkJcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK2JmYV9mY3NfdmZfY2xlYXJfc3RhdHMoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfb3NfbWVtc2V0KCZ2Zi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MpKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIAlSZXR1cm5zIEZDUyB2ZiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gdmZfaWQuCisgKgorICogCXBhcmFtW2luXSAJdmZfaWQJCS0gVkZfSUQKKyAqCisgKiAJcmV0dXJuCisgKiAJCUlmIGxvb2t1cCBzdWNjZWVkcywgcmV0dW5zIGZjcyB2ZiBvYmplY3QsIG90aGVyd2lzZSByZXR1cm5zIE5VTEwKKyAqLworYmZhX2Zjc192Zl90ICAgKgorYmZhX2Zjc192Zl9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpCit7CisJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwlpZiAodmZfaWQgPT0gRkNfVkZfSURfTlVMTCkKKwkJcmV0dXJuICgmZmNzLT5mYWJyaWMpOworCisJLyoqCisJICogQHRvZG8gdmYgc3VwcG9ydAorCSAqLworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogIAlSZXR1cm5zIGRyaXZlciBWRiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gRkNTIHZmLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQktIHBvaW50ZXIgdG8gYmZhX3ZmX3QKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfdmZfcyAgICAgICoKK2JmYV9mY3NfdmZfZ2V0X2Rydl92ZihiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV9hc3NlcnQodmYpOworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gdmYtPnZmX2RydjsKK30KKworLyoqCisgKiAgCVJldHVybiB0aGUgbGlzdCBvZiBWRnMgY29uZmlndXJlZC4KKyAqCisgKiAJcGFyYW1baW5dCWZjcwlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiAJcGFyYW1bb3V0XSAJdmZfaWRzCXJldHVybmVkIGxpc3Qgb2YgdmZfaWRzCisgKiAJcGFyYW1baW4sb3V0XSAJbnZmcwlpbjpzaXplIG9mIHZmX2lkcyBhcnJheSwKKyAqIAkJCQlvdXQ6dG90YWwgZWxlbWVudHMgcHJlc2VudCwKKyAqIAkJCQlhY3R1YWwgZWxlbWVudHMgcmV0dXJuZWQgaXMgbGltaXRlZCBieSB0aGUgc2l6ZQorICoKKyAqIAlyZXR1cm4gRHJpdmVyIFZGIHN0cnVjdHVyZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2xpc3Qoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKQoreworCWJmYV90cmMoZmNzLCAqbnZmcyk7Cit9CisKKy8qKgorICogIAlSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIFZGcyB2aXNpYmxlIGZyb20gZmFicmljLgorICoKKyAqIAlwYXJhbVtpbl0JZmNzCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqIAlwYXJhbVtvdXRdIAl2Zl9pZHMJcmV0dXJuZWQgbGlzdCBvZiB2Zl9pZHMKKyAqIAlwYXJhbVtpbixvdXRdIAludmZzCWluOnNpemUgb2YgdmZfaWRzIGFycmF5LAorICoJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9saXN0X2FsbChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiAqdmZfaWRzLCBpbnQgKm52ZnMpCit7CisJYmZhX3RyYyhmY3MsICpudmZzKTsKK30KKworLyoqCisgKiAJCVJldHVybiB0aGUgbGlzdCBvZiBsb2NhbCBsb2dpY2FsIHBvcnRzIHByZXNlbnQgaW4gdGhlIGdpdmVuIFZGLgorICoKKyAqIAlwYXJhbVtpbl0JdmYJdmYgZm9yIHdoaWNoIGxvZ2ljYWwgcG9ydHMgYXJlIHJldHVybmVkCisgKiAJcGFyYW1bb3V0XSAJbHB3d24JcmV0dXJuZWQgbG9naWNhbCBwb3J0IHd3biBsaXN0CisgKiAJcGFyYW1baW4sb3V0XSAJbmxwb3J0cwlpbjpzaXplIG9mIGxwd3duIGxpc3Q7CisgKgkJCQlvdXQ6dG90YWwgZWxlbWVudHMgcHJlc2VudCwKKyAqIAkJCQlhY3R1YWwgZWxlbWVudHMgcmV0dXJuZWQgaXMgbGltaXRlZCBieSB0aGUgc2l6ZQorICoKKyAqLwordm9pZAorYmZhX2Zjc192Zl9nZXRfcG9ydHMoYmZhX2Zjc192Zl90ICp2Ziwgd3duX3QgbHB3d25bXSwgaW50ICpubHBvcnRzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgKmZjczsKKworCWlmICh2ZiA9PSBOVUxMIHx8IGxwd3duID09IE5VTEwgfHwgKm5scG9ydHMgPT0gMCkKKwkJcmV0dXJuOworCisJZmNzID0gdmYtPmZjczsKKworCWJmYV90cmMoZmNzLCB2Zi0+dmZfaWQpOworCWJmYV90cmMoZmNzLCAodTMyKSAqbmxwb3J0cyk7CisKKwlpID0gMDsKKwlscHd3bltpKytdID0gdmYtPmJwb3J0LnBvcnRfY2ZnLnB3d247CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmdmYtPnZwb3J0X3EpIHsKKwkJaWYgKGkgPj0gKm5scG9ydHMpCisJCQlicmVhazsKKworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopIHFlOworCQlscHd3bltpKytdID0gdnBvcnQtPmxwb3J0LnBvcnRfY2ZnLnB3d247CisJfQorCisJYmZhX3RyYyhmY3MsIGkpOworCSpubHBvcnRzID0gaTsKKwlyZXR1cm47Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMGFmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Zwb3J0LmMKQEAgLTAsMCArMSw4OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc192cG9ydC5jIEZDUyB2aXJ0dWFsIHBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNidWlsZC5oPgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgVlBPUlQpOworCisjZGVmaW5lIF9fdnBvcnRfZmNzKF9fdnApICAgICAgIChfX3ZwKS0+bHBvcnQuZmNzCisjZGVmaW5lIF9fdnBvcnRfcHd3bihfX3ZwKSAgICAgIChfX3ZwKS0+bHBvcnQucG9ydF9jZmcucHd3bgorI2RlZmluZSBfX3Zwb3J0X253d24oX192cCkgICAgICAoX192cCktPmxwb3J0LnBvcnRfY2ZnLm53d24KKyNkZWZpbmUgX192cG9ydF9iZmEoX192cCkgICAgICAgKF9fdnApLT5scG9ydC5mY3MtPmJmYQorI2RlZmluZSBfX3Zwb3J0X2ZjaWQoX192cCkgICAgICAoX192cCktPmxwb3J0LnBpZAorI2RlZmluZSBfX3Zwb3J0X2ZhYnJpYyhfX3ZwKSAgICAoX192cCktPmxwb3J0LmZhYnJpYworI2RlZmluZSBfX3Zwb3J0X3ZmaWQoX192cCkgICAgICAoX192cCktPmxwb3J0LmZhYnJpYy0+dmZfaWQKKworI2RlZmluZSBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTICA1CisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZG9fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfdGltZW91dCh2b2lkICp2cG9ydF9hcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZG9fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKKworLyoqCisgKiAgZmNzX3Zwb3J0X3NtIEZDUyB2aXJ0dWFsIHBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IHsKKwlCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURSA9IDEsCS8qICB2cG9ydCBjcmVhdGUgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURSA9IDIsCS8qICB2cG9ydCBkZWxldGUgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1NUQVJUID0gMywJLyogIHZwb3J0IHN0YXJ0IHJlcXVlc3QgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1NUT1AgPSA0LAkvKiAgc3RvcDogdW5zdXBwb3J0ZWQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX09OTElORSA9IDUsCS8qICBmYWJyaWMgb25saW5lICovCisJQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FID0gNiwJLyogIGZhYnJpYyBvZmZsaW5lIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9GUk1TRU5UID0gNywJLyogIGZkaXNjL2xvZ28gc2VudCBldmVudHMgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyA9IDgsCS8qICBnb29kIHJlc3BvbnNlICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IgPSA5LAkvKiAgZXJyb3IvYmFkIHJlc3BvbnNlICovCisJQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUID0gMTAsCS8qICBkZWxheSB0aW1lciBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUCA9IDExLAkvKiAgbHBvcnQgZGVsZXRlIGNvbXBsZXRpb24gKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9EVVBfV1dOID0gMTIsCS8qICBEdXAgd25uIGVycm9yICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRkFJTEVEID0gMTMsCS8qICBub24tcmV0cnlhYmxlIGZhaWx1cmUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9lcnJvcihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyB2cG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV91bmluaXQpLCBCRkFfRkNTX1ZQT1JUX1VOSU5JVH0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQpLCBCRkFfRkNTX1ZQT1JUX0NSRUFURUR9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKSwgQkZBX0ZDU19WUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpLCBCRkFfRkNTX1ZQT1JUX0ZESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkpLCBCRkFfRkNTX1ZQT1JUX0ZESVNDX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fb25saW5lKSwgQkZBX0ZDU19WUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyksIEJGQV9GQ1NfVlBPUlRfREVMRVRJTkd9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKSwgQkZBX0ZDU19WUE9SVF9DTEVBTlVQfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fbG9nbyksIEJGQV9GQ1NfVlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKSwgQkZBX0ZDU19WUE9SVF9FUlJPUn0KK307CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKTsKKwkJYmZhX2Zjc19mYWJyaWNfYWRkdnBvcnQoX192cG9ydF9mYWJyaWModnBvcnQpLCB2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogQ3JlYXRlZCBzdGF0ZSAtIGEgc3RhcnQgZXZlbnQgaXMgcmVxdWlyZWQgdG8gc3RhcnQgdXAgdGhlIHN0YXRlIG1hY2hpbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9mY3NfZmFicmljX2lzX29ubGluZShfX3Zwb3J0X2ZhYnJpYyh2cG9ydCkpCisJCSAgICAmJiBiZmFfZmNzX2ZhYnJpY19ucGl2X2NhcGFibGUoX192cG9ydF9mYWJyaWModnBvcnQpKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyk7CisJCQliZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHZwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCS8qKgorCQkJICogRmFicmljIGlzIG9mZmxpbmUgb3Igbm90IE5QSVYgY2FwYWJsZSwgc3RheSBpbgorCQkJICogb2ZmbGluZSBzdGF0ZS4KKwkJCSAqLworCQkJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9ub19ucGl2Kys7CisJCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT05MSU5FOgorCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQkvKioKKwkJICogSWdub3JlIE9OTElORS9PRkZMSU5FIGV2ZW50cyBmcm9tIGZhYnJpYyB0aWxsIHZwb3J0IGlzIHN0YXJ0ZWQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBPTkxJTkUgZXZlbnQgZnJvbSBmYWJyaWMgU00uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyk7CisJCXZwb3J0LT5mZGlzY19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCS8qCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdnBvcnQgY291bGRuJ3QgYmUgaW5pdGlhbHppZWQgZHVlCisJCSAqIHRoZSBmYWN0IHRoYXQgdGhlIG5waXYgd2FzIG5vdCBlbmFibGVkIG9uIHRoZSBzd2l0Y2guIEluCisJCSAqIHRoYXQgY2FzZSB3ZSB3aWxsIHB1dCB0aGUgdnBvcnQgaW4gb2ZmbGluZSBzdGF0ZS4gSG93ZXZlciwKKwkJICogdGhlIGxpbmsgY2FuIGdvIGRvd24gYW5kIGNhdXNlIHRoZSB0aGlzIGV2ZW50IHRvIGJlIHNlbnQgd2hlbgorCQkgKiB3ZSBhcmUgYWxyZWFkeSBvZmZsaW5lLiBJZ25vcmUgaXQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEZESVNDIGlzIHNlbnQgYW5kIGF3YWl0aW5nIHJlcGx5IGZyb20gZmFicmljLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJmYV9mY3NfdnBvcnRfZG9fbG9nbyh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcG9ydF9vbmxpbmUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChfX3Zwb3J0X2JmYSh2cG9ydCksICZ2cG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc192cG9ydF90aW1lb3V0LCB2cG9ydCwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9lcnJvcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRkRJU0MgYXR0ZW1wdCBmYWlsZWQgLSBhIHRpbWVyIGlzIGFjdGl2ZSB0byByZXRyeSBGRElTQy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQliZmFfdGltZXJfc3RvcCgmdnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnZwb3J0LT50aW1lcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfcmV0cmllcysrOworCQl2cG9ydC0+ZmRpc2NfcmV0cmllcysrOworCQliZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBWcG9ydCBpcyBvbmxpbmUgKEZESVNDIGlzIGNvbXBsZXRlKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJmYV9mY3NfcG9ydF9vZmZsaW5lKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFZwb3J0IGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBscG9ydCBkZWxldGUgY29tcGxldGlvbiB0byBzZW5kCisgKiBMT0dPIHRvIGZhYnJpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pOworCQliZmFfZmNzX3Zwb3J0X2RvX2xvZ28odnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEVycm9yIFN0YXRlLgorICogVGhpcyBzdGF0ZSB3aWxsIGJlIHNldCB3aGVuIHRoZSBWcG9ydCBDcmVhdGlvbiBmYWlscyBkdWUgdG8gZXJyb3JzIGxpa2UKKyAqIER1cCBXV04uIEluIHRoaXMgc3RhdGUgb25seSBvcGVyYXRpb24gYWxsb3dlZCBpcyBhIFZwb3J0IERlbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZXJyb3Ioc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIExwb3J0IGNsZWFudXAgaXMgaW4gcHJvZ3Jlc3Mgc2luY2UgdnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4gRmFicmljIGlzCisgKiBvZmZsaW5lLCBzbyBubyBMT0dPIGlzIG5lZWRlZCB0byBjb21wbGV0ZSB2cG9ydCBkZWxldGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIExPR08gaXMgc2VudCB0byBmYWJyaWMuIFZwb3J0IGRlbGV0ZSBpcyBpbiBwcm9ncmVzcy4gTHBvcnQgZGVsZXRlIGNsZWFudXAKKyAqIGlzIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0s6CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfcHJpdmF0ZSBGQ1MgdmlydHVhbCBwb3J0IHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoYmZhX2Zjc19scG9ydF90ICpwb3J0LCBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSA9IHBvcnQtPnBvcnRfY2ZnLnJvbGVzOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICpyb2xlX3N0cltCRkFfUE9SVF9ST0xFX0ZDUF9NQVggLyAyICsgMV0gPQorCQl7ICJJbml0aWF0b3IiLCAiVGFyZ2V0IiwgIklQRkMiIH07CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCisJYmZhX2Fzc2VydChyb2xlIDw9IEJGQV9QT1JUX1JPTEVfRkNQX01BWCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTjoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV046CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEubHBvcnQudmZfaWQgPSBwb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9kYXRhLmxwb3J0LnJvbGVzID0gcm9sZTsKKwlhZW5fZGF0YS5scG9ydC5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSk7CisJYWVuX2RhdGEubHBvcnQubHB3d24gPSBscHd3bjsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgdG8gc2VuZCBhIEZESVNDIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9scHNfZmRpc2ModnBvcnQtPmxwcywgdnBvcnQsCisJCSAgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKF9fdnBvcnRfYmZhKHZwb3J0KSksCisJCSAgICAgIF9fdnBvcnRfcHd3bih2cG9ydCksIF9fdnBvcnRfbnd3bih2cG9ydCkpOworCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19zZW50Kys7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2ZkaXNjX3JlamVjdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXU4ICAgICAgICAgbHNyanRfcnNuID0gYmZhX2xwc19nZXRfbHNyanRfcnNuKHZwb3J0LT5scHMpOworCXU4ICAgICAgICAgbHNyanRfZXhwbCA9IGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwodnBvcnQtPmxwcyk7CisKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgbHNyanRfcnNuKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgbHNyanRfZXhwbCk7CisKKwkvKgorCSAqIEZvciBjZXJ0YWluIHJlYXNvbiBjb2Rlcywgd2UgZG9uJ3Qgd2FudCB0byByZXRyeS4KKwkgKi8KKwlzd2l0Y2ggKGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwodnBvcnQtPmxwcykpIHsKKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5WX1BPUlRfTkFNRToJLyogYnkgYnJvY2FkZSAqLworCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEOgkvKiBieSBDaXNjbyAqLworCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwkJZWxzZSB7CisJCQliZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KCZ2cG9ydC0+bHBvcnQsCisJCQkJCSAgICAgICBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTik7CisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5TVUZGX1JFUzoKKwkJLyoKKwkJICogVGhpcyBtZWFucyBtYXggbG9naW5zIHBlciBwb3J0L3N3aXRjaCBzZXR0aW5nIG9uIHRoZQorCQkgKiBzd2l0Y2ggd2FzIGV4Y2VlZGVkLgorCQkgKi8KKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzIDwgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWVsc2UgeworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVgpOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPT0gMCkJLyogUHJpbnQgb25seSBvbmNlICovCisJCQliZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KCZ2cG9ydC0+bHBvcnQsCisJCQkJCSAgICAgICBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTik7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIAlDYWxsZWQgdG8gc2VuZCBhIGxvZ291dCB0byB0aGUgZmFicmljLiBVc2VkIHdoZW4gYSBWLVBvcnQgaXMKKyAqIAlkZWxldGVkL3N0b3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2RvX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCisJdnBvcnQtPnZwb3J0X3N0YXRzLmxvZ29fc2VudCsrOworCWJmYV9scHNfZmRpc2Nsb2dvKHZwb3J0LT5scHMpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCXZwb3J0X3N0YXR1cyAJLSBwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0dXMgaW4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3RpbWVvdXQodm9pZCAqdnBvcnRfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKil2cG9ydF9hcmc7CisKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfZmNzX2ZhYnJpY19kZWx2cG9ydChfX3Zwb3J0X2ZhYnJpYyh2cG9ydCksIHZwb3J0KTsKKwliZmFfZmNiX3Zwb3J0X2RlbGV0ZSh2cG9ydC0+dnBvcnRfZHJ2KTsKKwliZmFfbHBzX2RlbGV0ZSh2cG9ydC0+bHBzKTsKK30KKworCisKKy8qKgorICogIGZjc192cG9ydF9wdWJsaWMgRkNTIHZpcnR1YWwgcG9ydCBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qKgorICogT25saW5lIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTS4KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9vbmxpbmUrKzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkUpOworfQorCisvKioKKyAqIE9mZmxpbmUgbm90aWZpY2F0aW9uIGZyb20gZmFicmljIFNNLgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9vZmZsaW5lKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBub3RpZmljYXRpb24gZnJvbSBmYWJyaWMgU00gb24gbGluayB0aW1lciBleHBpcnkuCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmFiX2NsZWFudXArKzsKK30KKworLyoqCisgKiBEZWxldGUgY29tcGxldGlvbiBjYWxsYmFjayBmcm9tIGFzc29jaWF0ZWQgbHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QKTsKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCit1MzIKK2JmYV9mY3NfdnBvcnRfZ2V0X21heChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJYmZhX2dldF9hdHRyKGZjcy0+YmZhLCAmaW9jX2F0dHIpOworCisJaWYgKGlvY19hdHRyLnBjaV9hdHRyLmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkKKwkJcmV0dXJuIChCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DVCk7CisJZWxzZQorCQlyZXR1cm4gKEJGQV9GQ1NfTUFYX1ZQT1JUU19TVVBQX0NCKTsKK30KKworCisKKy8qKgorICogIGZjc192cG9ydF9hcGkgVmlydHVhbCBwb3J0IEFQSQorICovCisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBpbnN0YW50aWF0ZSBhIG5ldyBGQ1MgdnBvcnQgb2JqZWN0LiBUaGlzCisgKiAJZnVuY3Rpb24gd2lsbCBub3QgdHJpZ2dlciBhbnkgSFcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyAod2hpY2ggd2lsbCBiZQorICogCWRvbmUgaW4gdnBvcnRfc3RhcnQoKSBjYWxsKQorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQJLSAJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuIFRoaXMgc3BhY2UKKyAqIAkJCQkJbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCisgKiAJcGFyYW1baW5dIGZjcyAJCS0gCUZDUyBpbnN0YW5jZQorICogCXBhcmFtW2luXSB2cG9ydF9jZmcJLSAJdnBvcnQgY29uZmlndXJhdGlvbgorICogCXBhcmFtW2luXSB2Zl9pZCAgICAJLSAJVkZfSUQgaWYgdnBvcnQgaXMgY3JlYXRlZCB3aXRoaW4gYSBWRi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAJCUZDX1ZGX0lEX05VTEwgdG8gc3BlY2lmeSBiYXNlIGZhYnJpYy4KKyAqIAlwYXJhbVtpbl0gdnBvcnRfZHJ2IAktIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzIHZwb3J0CisgKiAJCQkJCXN0cnVjdHVyZQorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyAtIG9uIHN1Y2Nlc3MuCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRkFJTEVEIC0gb24gZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkgICAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICp2cG9ydF9jZmcsCisJCSAgICAgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KQoreworCWlmICh2cG9ydF9jZmctPnB3d24gPT0gMCkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkFMSURfV1dOKTsKKworCWlmIChiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJmZjcy0+ZmFicmljLmJwb3J0KSA9PSB2cG9ydF9jZmctPnB3d24pCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX1dXTl9CUDsKKworCWlmIChiZmFfZmNzX3Zwb3J0X2xvb2t1cChmY3MsIHZmX2lkLCB2cG9ydF9jZmctPnB3d24pICE9IE5VTEwpCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX0VYSVNUUzsKKworCWlmIChiZmFfZmNzX2ZhYnJpY192cG9ydF9jb3VudCgmZmNzLT5mYWJyaWMpID09CisJICAgIGJmYV9mY3NfdnBvcnRfZ2V0X21heChmY3MpKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9NQVg7CisKKwl2cG9ydC0+bHBzID0gYmZhX2xwc19hbGxvYyhmY3MtPmJmYSk7CisJaWYgKCF2cG9ydC0+bHBzKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9NQVg7CisKKwl2cG9ydC0+dnBvcnRfZHJ2ID0gdnBvcnRfZHJ2OworCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKworCWJmYV9mY3NfbHBvcnRfaW5pdCgmdnBvcnQtPmxwb3J0LCBmY3MsIHZmX2lkLCB2cG9ydF9jZmcsIHZwb3J0KTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX0NSRUFURSk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgdGhlIHZwb3J0LgorICoKKyAqICBAcGFyYW1baW5dIHZwb3J0IC0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKgorICogIEByZXR1cm5zIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1NUQVJUKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gcXVpZXNlIHRoZSB2cG9ydCBvYmplY3QuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIAlpbW1lZGlhdGVseSwgd2hlbiB0aGUgdnBvcnQgaXMgYWN0dWFsbHkgc3RvcHBlZCwgdGhlCisgKiAJYmZhX2Rydl92cG9ydF9zdG9wX2NiKCkgd2lsbCBiZSBjYWxsZWQuCisgKgorICogCXBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdnBvcnRfc3RvcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9TVE9QKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgdnBvcnQgb2JqZWN0LiBGYWJyaWMgb2JqZWN0IHNob3VsZAorICogCQliZSBzdG9wcGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgKgorICogCXBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gICAgIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEUpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdnBvcnQncyBjdXJyZW50IHN0YXR1cyBpbmZvLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKiAJcGFyYW1bb3V0XQlhdHRyIAkJcG9pbnRlciB0byByZXR1cm4gdnBvcnQgYXR0cmlidXRlcworICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICAgc3RydWN0IGJmYV92cG9ydF9hdHRyX3MgKmF0dHIpCit7CisJaWYgKHZwb3J0ID09IE5VTEwgfHwgYXR0ciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwliZmFfb3NfbWVtc2V0KGF0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcykpOworCisJYmZhX2Zjc19wb3J0X2dldF9hdHRyKCZ2cG9ydC0+bHBvcnQsICZhdHRyLT5wb3J0X2F0dHIpOworCWF0dHItPnZwb3J0X3N0YXRlID0gYmZhX3NtX3RvX3N0YXRlKHZwb3J0X3NtX3RhYmxlLCB2cG9ydC0+c20pOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHZwb3J0J3Mgc3RhdGlzdGljcy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICogCXBhcmFtW291dF0Jc3RhdHMJCXBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXRpc3RpY3MgaW4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IHZwb3J0LT52cG9ydF9zdGF0czsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHZwb3J0J3Mgc3RhdGlzdGljcy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2Nscl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZ2cG9ydC0+dnBvcnRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MpKTsKK30KKworLyoqCisgKiAgICAgIExvb2t1cCBhIHZpcnR1YWwgcG9ydC4gRXhjbHVkZXMgYmFzZSBwb3J0IGZyb20gbG9va3VwLgorICovCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICoKK2JmYV9mY3NfdnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLCB3d25fdCB2cHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwliZmFfdHJjKGZjcywgdnB3d24pOworCisJZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJaWYgKCFmYWJyaWMpIHsKKwkJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdnBvcnQgPSBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAoZmFicmljLCB2cHd3bik7CisJcmV0dXJuIHZwb3J0OworfQorCisvKioKKyAqIEZESVNDIFJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9jYl9scHNfZmRpc2NfY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gdWFyZzsKKworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgc3RhdHVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQkvKgorCQkgKiBJbml0aWFsaWF6ZSB0aGUgVi1Qb3J0IGZpZWxkcworCQkgKi8KKwkJX192cG9ydF9mY2lkKHZwb3J0KSA9IGJmYV9scHNfZ2V0X3BpZCh2cG9ydC0+bHBzKTsKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfSU5WQUxJRF9NQUM6CisJCS8qCisJCSAqIE9ubHkgZm9yIENOQQorCQkgKi8KKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY19iYWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKHZwb3J0LT5scHMpKSB7CisJCWNhc2UgQkZBX0VQUk9UT19CQURfQUNDRVBUOgorCQkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY19iYWQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgQkZBX0VQUk9UT19VTktOT1dOX1JTUDoKKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY191bmtub3duX3JzcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRkFCUklDX1JKVDoKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JlamVjdHMrKzsKKwkJYmZhX2Zjc192cG9ydF9mZGlzY19yZWplY3RlZCh2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogTE9HTyByZXNwb25zZQorICovCit2b2lkCitiZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQgPSB1YXJnOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmggYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAppbmRleCBkNzU3NmYyLi41ZWRkZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAorKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaApAQCAtMTAwLDYgKzEwMCw4IEBACiAjZGVmaW5lIENUWF9PRkZTRVQgCQkJMHgxMDAwMAogI2RlZmluZSBNQVhfQ0lEX0NOVAkJCTB4NDAwMAogCisjZGVmaW5lIEJOWDJJXzU3MFhfUEFHRV9TSVpFX0RFRkFVTFQJNDA5NgorCiAvKiA1NzA5IGNvbnRleHQgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHMgkJCTB4MDAwMDNkMDAKICNkZWZpbmUgQk5YMl9NUV9DT05GSUcyX0NPTlRfU1oJCSgweDdMPDw0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDQxZTFiMGUuLjVjOGQ3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTIzODYsNyArMjM4Niw3IEBACiAJCWN0eF9zeiA9IChjb25maWcyICYgQk5YMl9NUV9DT05GSUcyX0NPTlRfU1opID4+IDM7CiAJCWlmIChjdHhfc3opCiAJCQlyZWdfb2ZmID0gQ1RYX09GRlNFVCArIE1BWF9DSURfQ05UICogTUJfS0VSTkVMX0NUWF9TSVpFCi0JCQkJICArIFBBR0VfU0laRSAqCisJCQkJICArIEJOWDJJXzU3MFhfUEFHRV9TSVpFX0RFRkFVTFQgKgogCQkJCSAgKCgoY2lkX251bSAtIGZpcnN0X2w0bDUpIC8gY3R4X3N6KSArIDI1Nik7CiAJCWVsc2UKIAkJCXJlZ19vZmYgPSBDVFhfT0ZGU0VUICsgKE1CX0tFUk5FTF9DVFhfU0laRSAqIGNpZF9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCA5YTdiYTcxLi5jYWZiODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIAkJY21kc19tYXggPSBCTlgySV9TUV9XUUVTX01JTjsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYm54MmlfaXNjc2lfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwgc2l6ZW9mKHN0cnVjdCBibngyaV9jbWQpLAorCQkJCQkgIGNtZHNfbWF4LCAwLCBzaXplb2Yoc3RydWN0IGJueDJpX2NtZCksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgSVNDU0lfTUFYX1RBUkdFVCk7CiAJaWYgKCFjbHNfc2Vzc2lvbikKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwppbmRleCBjMzk5ZjQ4Li4yNjMxYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCUJVR19PTihoYmEgIT0gaXNjc2lfaG9zdF9wcml2KHNob3N0KSk7CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmN4Z2IzaV9pc2NzaV90cmFuc3BvcnQsIHNob3N0LAotCQkJCQkgIGNtZHNfbWF4LAorCQkJCQkgIGNtZHNfbWF4LCAwLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2spICsKIAkJCQkJICBzaXplb2Yoc3RydWN0IGN4Z2IzaV90YXNrX2RhdGEpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDExYzg5MzEuLjI2ODE4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTUwMCw4ICs1MDAsNiBAQAogCWlmICghcmV0KQogCQlnb3RvIGRvbmU7CiAKLQllcnIgPSBTQ1NJX0RIX09LOwotCiAJc3dpdGNoIChzZW5zZV9oZHIuc2Vuc2Vfa2V5KSB7CiAJY2FzZSBOT19TRU5TRToKIAljYXNlIEFCT1JURURfQ09NTUFORDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IGI2YWY2M2MuLjQ5Njc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMTkxOCw2ICsxOTE4LDEwIEBACiAJCX0KIAkJc2l6ZSA9IHNpemU+PjE2OwogCQlzaXplICo9IDQ7CisJCWlmIChzaXplID4gTUFYX01FU1NBR0VfU0laRSkgeworCQkJcmNvZGUgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJCS8qIENvcHkgaW4gdGhlIHVzZXIncyBJMk8gY29tbWFuZCAqLwogCQlpZiAoY29weV9mcm9tX3VzZXIgKG1zZywgdXNlcl9tc2csIHNpemUpKSB7CiAJCQlyY29kZSA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCAxODVlNmJjLi45ZThmY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTI5MDAsNyArMjkwMCw3IEBACiAgICAgICAgIGVpbmRleCA9IGhhbmRsZTsKICAgICBlc3RyLT5ldmVudF9zb3VyY2UgPSAwOwogCi0gICAgaWYgKGVpbmRleCA+PSBNQVhfRVZFTlRTKSB7CisgICAgaWYgKGVpbmRleCA8IDAgfHwgZWluZGV4ID49IE1BWF9FVkVOVFMpIHsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgIHJldHVybiBlaW5kZXg7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGM1OTZhYjUuLmEwZTdlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSGlnaFBvaW50IFJSM3h4eC80eHh4IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBMaW51eAotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gImhwdGlvcCI7CiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZV9sb25nW10gPSAiUm9ja2V0UkFJRCAzeHh4LzR4eHggQ29udHJvbGxlciBkcml2ZXIiOwotc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjMgKDA3MTIwMykiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjYgKDA5MDkxMCkiOwogCiBzdGF0aWMgaW50IGlvcF9zZW5kX3N5bmNfbXNnKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiBtc2csIHUzMiBtaWxsaXNlYyk7CiBzdGF0aWMgdm9pZCBocHRpb3BfZmluaXNoX3Njc2lfcmVxKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiB0YWcsCkBAIC0xMTUsOSArMTE1LDEzIEBACiBzdGF0aWMgaW50IGlvcF9pbnRyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogewogCXN0cnVjdCBocHRfaW9wbXVfaXRsIF9faW9tZW0gKmlvcCA9IGhiYS0+dS5pdGwuaW9wOworCXZvaWQgX19pb21lbSAqcGx4ID0gaGJhLT51Lml0bC5wbHg7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChwbHggJiYgcmVhZGwocGx4ICsgMHgxMUM1QykgJiAweGYpCisJCXdyaXRlbCgxLCBwbHggKyAweDExQzYwKTsKKwogCXN0YXR1cyA9IHJlYWRsKCZpb3AtPm91dGJvdW5kX2ludHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgSU9QTVVfT1VUQk9VTkRfSU5UX01TRzApIHsKQEAgLTQ2MCwxNSArNDY0LDI1IEBACiAKIHN0YXRpYyBpbnQgaHB0aW9wX21hcF9wY2lfYmFyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogeworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBoYmEtPnBjaWRldjsKIAloYmEtPnUuaXRsLmlvcCA9IGhwdGlvcF9tYXBfcGNpX2JhcihoYmEsIDApOwotCWlmIChoYmEtPnUuaXRsLmlvcCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQorCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CisJaWYgKChwY2lkZXYtPmRldmljZSAmIDB4ZmYwMCkgPT0gMHg0NDAwKSB7CisJCWhiYS0+dS5pdGwucGx4ID0gaGJhLT51Lml0bC5pb3A7CisJCWhiYS0+dS5pdGwuaW9wID0gaHB0aW9wX21hcF9wY2lfYmFyKGhiYSwgMik7CisJCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKSB7CisJCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHB0aW9wX3VubWFwX3BjaV9iYXJfaXRsKHN0cnVjdCBocHRpb3BfaGJhICpoYmEpCiB7CisJaWYgKGhiYS0+dS5pdGwucGx4KQorCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKIAlpb3VubWFwKGhiYS0+dS5pdGwuaW9wKTsKIH0KIApAQCAtMTIzOSwyMiArMTI1MywyMyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdGlvcF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMyMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzMyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIxKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTQwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MzApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzU0MCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTYwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MjEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQyMTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzExKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQ0MDApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzEyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX212X29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMxMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9tdl9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMDIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfbXZfb3BzIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmggYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmgKaW5kZXggYTAyODlmMi4uMGI4NzFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwdGlvcC5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBIaWdoUG9pbnQgUlIzeHh4LzR4eHggY29udHJvbGxlciBkcml2ZXIgZm9yIExpbnV4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMjgsNiArMjI4LDcgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG11X2l0bCBfX2lvbWVtICppb3A7CisJCQl2b2lkIF9faW9tZW0gKnBseDsKIAkJfSBpdGw7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG12X3JlZ3MgKnJlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggNWYwNDU1MC4uNzZkMjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtNDE4OSw2ICs0MTg5LDI1IEBACiB9CiAKIC8qKgorICogaXByX2lzcl9laCAtIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZXJyb3IgaGFuZGxlcgorICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CisgKiBAbXNnOgltZXNzYWdlIHRvIGxvZworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKiovCitzdGF0aWMgdm9pZCBpcHJfaXNyX2VoKHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZywgY2hhciAqbXNnKQoreworCWlvYV9jZmctPmVycm9yc19sb2dnZWQrKzsKKwlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICIlc1xuIiwgbXNnKTsKKworCWlmIChXQUlUX0ZPUl9EVU1QID09IGlvYV9jZmctPnNkdF9zdGF0ZSkKKwkJaW9hX2NmZy0+c2R0X3N0YXRlID0gR0VUX0RVTVA7CisKKwlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKK30KKworLyoqCiAgKiBpcHJfaXNyIC0gSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQogICogQGlycToJaXJxIG51bWJlcgogICogQGRldnA6CXBvaW50ZXIgdG8gaW9hIGNvbmZpZyBzdHJ1Y3QKQEAgLTQyMDMsNiArNDIyMiw3IEBACiAJdm9sYXRpbGUgdTMyIGludF9yZWcsIGludF9tYXNrX3JlZzsKIAl1MzIgaW9hc2M7CiAJdTE2IGNtZF9pbmRleDsKKwlpbnQgbnVtX2hycnEgPSAwOwogCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKIAlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOwogCkBAIC00MjMzLDEzICs0MjUzLDcgQEAKIAkJCQkgICAgIElQUl9IUlJRX1JFUV9SRVNQX0hBTkRMRV9NQVNLKSA+PiBJUFJfSFJSUV9SRVFfUkVTUF9IQU5ETEVfU0hJRlQ7CiAKIAkJCWlmICh1bmxpa2VseShjbWRfaW5kZXggPj0gSVBSX05VTV9DTURfQkxLUykpIHsKLQkJCQlpb2FfY2ZnLT5lcnJvcnNfbG9nZ2VkKys7Ci0JCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiSW52YWxpZCByZXNwb25zZSBoYW5kbGUgZnJvbSBJT0FcbiIpOwotCi0JCQkJaWYgKFdBSVRfRk9SX0RVTVAgPT0gaW9hX2NmZy0+c2R0X3N0YXRlKQotCQkJCQlpb2FfY2ZnLT5zZHRfc3RhdGUgPSBHRVRfRFVNUDsKLQotCQkJCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCQkJCWlwcl9pc3JfZWgoaW9hX2NmZywgIkludmFsaWQgcmVzcG9uc2UgaGFuZGxlIGZyb20gSU9BIik7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KQEAgLTQyNjYsOCArNDI4MCwxOCBAQAogCiAJCWlmIChpcHJfY21kICE9IE5VTEwpIHsKIAkJCS8qIENsZWFyIHRoZSBQQ0kgaW50ZXJydXB0ICovCi0JCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKLQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCWRvIHsKKwkJCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKKwkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7CisJCQl9IHdoaWxlIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEICYmCisJCQkJCW51bV9ocnJxKysgPCBJUFJfTUFYX0hSUlFfUkVUUklFUyk7CisKKwkJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEKSB7CisJCQkJaXByX2lzcl9laChpb2FfY2ZnLCAiRXJyb3IgY2xlYXJpbmcgSFJSUSIpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisKIAkJfSBlbHNlCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggMTYzMjQ1YS4uMTliYmNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAjZGVmaW5lIElQUl9JT0FfTUFYX1NFQ1RPUlMJCQkJMzI3NjcKICNkZWZpbmUgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMJCQkJNTEyCiAjZGVmaW5lIElQUl9NQVhfQ0RCX0xFTgkJCQkJMTYKKyNkZWZpbmUgSVBSX01BWF9IUlJRX1JFVFJJRVMJCQkJMwogCiAjZGVmaW5lIElQUl9ERUZBVUxUX0JVU19XSURUSAkJCQkxNgogI2RlZmluZSBJUFJfODBNQnNfU0NTSV9SQVRFCQkoKDgwICogMTApIC8gKElQUl9ERUZBVUxUX0JVU19XSURUSCAvIDgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDJiMWI4MzQuLmVkYzQ5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCQlnb3RvIGZyZWVfaG9zdDsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmaXNjc2lfc3dfdGNwX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgY21kc19tYXgsCisJCQkJCSAgY21kc19tYXgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV90Y3BfdGFzaykgKwogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc3dfdGNwX2hkcmJ1ZiksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDhkYzczYzQuLmYxYTQyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0yNDM2LDcgKzI0MzYsNyBAQAogICovCiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICppc2NzaXQsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAotCQkgICAgdWludDE2X3QgY21kc19tYXgsIGludCBjbWRfdGFza19zaXplLAorCQkgICAgdWludDE2X3QgY21kc19tYXgsIGludCBkZF9zaXplLCBpbnQgY21kX3Rhc2tfc2l6ZSwKIAkJICAgIHVpbnQzMl90IGluaXRpYWxfY21kc24sIHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKQEAgLTI0ODYsNyArMjQ4Niw4IEBACiAJc2NzaV9jbWRzID0gdG90YWxfY21kcyAtIElTQ1NJX01HTVRfQ01EU19NQVg7CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX2FsbG9jX3Nlc3Npb24oc2hvc3QsIGlzY3NpdCwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3Nlc3Npb24pKTsKKwkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3Nlc3Npb24pICsKKwkJCQkJICBkZF9zaXplKTsKIAlpZiAoIWNsc19zZXNzaW9uKQogCQlnb3RvIGRlY19zZXNzaW9uX2NvdW50OwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKQEAgLTI1MDMsNiArMjUwNCw3IEBACiAJc2Vzc2lvbi0+bWF4X2NtZHNuID0gaW5pdGlhbF9jbWRzbiArIDE7CiAJc2Vzc2lvbi0+bWF4X3IydCA9IDE7CiAJc2Vzc2lvbi0+dHQgPSBpc2NzaXQ7CisJc2Vzc2lvbi0+ZGRfZGF0YSA9IGNsc19zZXNzaW9uLT5kZF9kYXRhICsgc2l6ZW9mKCpzZXNzaW9uKTsKIAltdXRleF9pbml0KCZzZXNzaW9uLT5laF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnNlc3Npb24tPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwppbmRleCBiMzM4MTk1Li4zM2NmOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKQEAgLTk2MCw3ICs5NjAsNiBAQAogCiAJCQl9CiAJCX0KLQkJcmVzID0gMDsKIAl9CiAKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCA2MWQwODk3Li5jODhmNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtNTYsOCArNTYsNiBAQAogCSJTQ1NJX1BST1RfV1JJVEVfSU5TRVJUIiwKIAkiU0NTSV9QUk9UX1JFQURfUEFTUyIsCiAJIlNDU0lfUFJPVF9XUklURV9QQVNTIiwKLQkiU0NTSV9QUk9UX1JFQURfQ09OVkVSVCIsCi0JIlNDU0lfUFJPVF9XUklURV9DT05WRVJUIgogfTsKIHN0YXRpYyB2b2lkCiBscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqcHNiKTsKQEAgLTExMzEsMTMgKzExMjksMTEgQEAKIAkJCXJldF9wcm9mID0gTFBGQ19QUk9GX0ExOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOgotCQljYXNlIFNDU0lfUFJPVF9XUklURV9DT05WRVJUOgorCQljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CisJCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1BBU1M6CiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9BU1QxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgotCQljYXNlIFNDU0lfUFJPVF9XUklURV9QQVNTOgogCQljYXNlIFNDU0lfUFJPVF9OT1JNQUw6CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIkJhZCBvcC9ndWFyZDolZC8lZCBjb21iaW5hdGlvblxuIiwKQEAgLTExNTcsOCArMTE1Myw2IEBACiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9DMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKIAkJY2FzZSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQ6CiAJCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1NUUklQOgogCQljYXNlIFNDU0lfUFJPVF9OT1JNQUw6CkBAIC0xMjA5LDggKzEyMDMsNyBAQAogCXN0YXRpYyBpbnQgY250OwogCiAJaWYgKHByb3RjbnQgJiYgKG9wID09IFNDU0lfUFJPVF9XUklURV9TVFJJUCB8fAotCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9QQVNTIHx8Ci0JCQkJb3AgPT0gU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQpKSB7CisJCQkJb3AgPT0gU0NTSV9QUk9UX1dSSVRFX1BBU1MpKSB7CiAKIAkJY250Kys7CiAJCXNwdCA9IHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNjc2lfcHJvdF9zZ2xpc3Qoc2MpKSkgKwpAQCAtMTUwMSw4ICsxNDk0LDYgQEAKIAljYXNlIFNDU0lfUFJPVF9XUklURV9TVFJJUDoKIAljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CiAJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKLQljYXNlIFNDU0lfUFJPVF9XUklURV9DT05WRVJUOgotCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKIAkJcmV0ID0gTFBGQ19QR19UWVBFX0RJRl9CVUY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwppbmRleCA0YTg2ODU1Li43MGM0YzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAjIEtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBNUFQyU0FTCiAjCiAjIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCi0jIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogIyAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCmluZGV4IDdiYjJlY2UuLmY5ZjZjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjExCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMgogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ1LDEzIEBACiAgKiAgMTAtMDItMDggIDAyLjAwLjEwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgogICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgZnJvbSBtcGkyX2luaXQuaC4KICAqICAwMS0xOS0wOSAgMDIuMDAuMTEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjEyICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgSW4gYWxsIHJlcXVlc3QgYW5kIHJlcGx5IGRlc2NyaXB0b3JzLCByZXBsYWNlZCBWRl9JRAorICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgd2l0aCBNU0l4SW5kZXggZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIERldkhhbmRsZSBmaWVsZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTcwLDcgKzc3LDcgQEAKICNkZWZpbmUgTVBJMl9WRVJTSU9OXzAyXzAwICAgICAgICAgICAgICAgICAgKDB4MDIwMCkKIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwQikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEMpCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKQEAgLTI1Nyw3ICsyNjQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQ7ICAgIC8qIDB4MDYgKi8KQEAgLTI3MSw2ICsyNzgsNyBAQAogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX1RBUkdFVCAgICAgICAgICAgICAoMHgwMikKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWSAgICAgICAgICAgKDB4MDYpCiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0RFRkFVTFRfVFlQRSAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19SQUlEX0FDQ0VMRVJBVE9SICAgICAgICAoMHgwQSkKIAogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19JT0NfRklGT19NQVJLRVIgKDB4MDEpCiAKQEAgLTI3OSw3ICsyODcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KQEAgLTI5Myw3ICszMDEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KQEAgLTMwNiw3ICszMTQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIElvSW5kZXg7ICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0zMTUsMTQgKzMyMywyOSBAQAogICBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3QsCiAgIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lUYXJnZXRSZXF1ZXN0RGVzY3JpcHRvcl90OwogCisKKy8qIFJBSUQgQWNjZWxlcmF0b3IgUmVxdWVzdCBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiB7CisgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9IE1QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTXBpMlJBSURBY2NlbGVyYXRvclJlcXVlc3REZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJBSURBY2NlbGVyYXRvclJlcXVlc3REZXNjcmlwdG9yX3Q7CisKKwogLyogdW5pb24gb2YgUmVxdWVzdCBEZXNjcmlwdG9ycyAqLwogdHlwZWRlZiB1bmlvbiBfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04KIHsKLSAgICBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgRGVmYXVsdDsKLSAgICBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgSGlnaFByaW9yaXR5OwotICAgIE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJSU87Ci0gICAgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgIFNDU0lUYXJnZXQ7Ci0gICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworICAgIE1QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgIEhpZ2hQcmlvcml0eTsKKyAgICBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIFNDU0lJTzsKKyAgICBNUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIFNDU0lUYXJnZXQ7CisgICAgTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICBSQUlEQWNjZWxlcmF0b3I7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKIH0gTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04sCiAgIE1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdDsKIApAQCAtMzMzLDE5ICszNTYsMjAgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDE7ICAgLyogMHgwMiAqLwogICAgIFUzMiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDI7ICAgLyogMHgwNCAqLwogfSBNUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiwKICAgTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90OwogCiAvKiBkZWZpbmVzIGZvciB0aGUgUmVwbHlGbGFncyBmaWVsZCAqLwotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgICAgICAgICAoMHgwRikKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfU0NTSV9JT19TVUNDRVNTICAgICAgICAgKDB4MDApCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkgICAgICAgICAgICgweDAxKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUyAgICAoMHgwMikKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUX0NPTU1BTkRfQlVGRkVSICAgKDB4MDMpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUyAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUiAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTICAgICgweDA1KQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgICAgICAgICAgICAgKDB4MEYpCiAKIC8qIHZhbHVlcyBmb3IgbWFya2luZyBhIHJlcGx5IGRlc2NyaXB0b3IgYXMgdW51c2VkICovCiAjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX1VOVVNFRF9XT1JEMF9NQVJLICAgICAgICAgICAgICgweEZGRkZGRkZGKQpAQCAtMzU1LDcgKzM3OSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMzIgICAgICAgICAgICAgUmVwbHlGcmFtZUFkZHJlc3M7ICAgICAgICAgIC8qIDB4MDQgKi8KIH0gTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IsCkBAIC0zNjgsMTAgKzM5MiwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KLSAgICBVMTYgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KIH0gTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAogICBNcGkyU0NTSUlPU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LApAQCAtMzgyLDcgKzQwNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTggICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyOyAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTggICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA1ICovCkBAIC0zOTcsNyArNDIxLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTggICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTggICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCiAgICAgVTE2ICAgICAgICAgICAgIEluaXRpYXRvckRldkhhbmRsZTsgICAgICAgICAvKiAweDA0ICovCkBAIC00MTEsMTUgKzQzNSwyOCBAQAogI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9UQ0JfRkxBR1NfUEhZTlVNX01BU0sgICAgICgweDNGKQogCiAKKy8qIFJBSUQgQWNjZWxlcmF0b3IgU3VjY2VzcyBSZXBseSBEZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiB7CisgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9IE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTXBpMlJBSURBY2NlbGVyYXRvclN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyUkFJREFjY2VsZXJhdG9yU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90OworCisKIC8qIHVuaW9uIG9mIFJlcGx5IERlc2NyaXB0b3JzICovCiB0eXBlZGVmIHVuaW9uIF9NUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OCiB7Ci0gICAgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICBEZWZhdWx0OwotICAgIE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgQWRkcmVzc1JlcGx5OwotICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgU0NTSUlPU3VjY2VzczsKLSAgICBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFRhcmdldEFzc2lzdFN1Y2Nlc3M7Ci0gICAgTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiBUYXJnZXRDb21tYW5kQnVmZmVyOwotICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CisgICAgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgRGVmYXVsdDsKKyAgICBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICBBZGRyZXNzUmVwbHk7CisgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgU0NTSUlPU3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICBUYXJnZXRBc3Npc3RTdWNjZXNzOworICAgIE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgICAgIFRhcmdldENvbW1hbmRCdWZmZXI7CisgICAgTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgUkFJREFjY2VsZXJhdG9yU3VjY2VzczsKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKIH0gTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OLAogICBNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90OwogCkBAIC00NTgsNiArNDk1LDcgQEAKICNkZWZpbmUgTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0UgICAgICAgICAgICAgICAgICAoMHgxRSkgLyogRGlhZ25vc3RpYyBSZWxlYXNlICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfQkFTRV9QT1NUICAgICAgKDB4MjQpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IEJhc2UgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9MSVNUX1BPU1QgICAgICAoMHgyNSkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgTGlzdCAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNDRUxFUkFUT1IgICAgICAgICAgICAgICgweDJDKSAvKiBSQUlEIEFjY2VsZXJhdG9yKi8KIAogCiAKQEAgLTU1NSwxMiArNTkzLDE3IEBACiAKICNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRCAgICAgICAgICAoMHgwMEEwKQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUkFJRCBBY2NlbGVyYXRvciB2YWx1ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfUkFJRF9BQ0NFTF9FUlJPUiAgICAgICAgICAgICAoMHgwMEIwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgSU9DU3RhdHVzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBsb2cgaW5mbyBpcyBhdmFpbGFibGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRkxBR19MT0dfSU5GT19BVkFJTEFCTEUgICgweDgwMDApCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFICAgICAgKDB4ODAwMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIElPQ0xvZ0luZm8gVHlwZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAppbmRleCAyZjI3Y2Y2Li5hYjQ3YzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBhbmQgcGFnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgTm92ZW1iZXIgMTAsIDIwMDYKICAqCi0gKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTAKKyAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTk1LDYgKzk1LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfREVWSUNFX0JMT0NLRUQgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG9ydEdyb3VwcywgRG1hR3JvdXAsIGFuZCBDb250cm9sR3JvdXAgZmllbGRzIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICBTQVMgRGV2aWNlIFBhZ2UgMC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IGFuZCBJTworICogICAgICAgICAgICAgICAgICAgICAgVW5pdCBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBleHBhbmRlciByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgZGF0YSB0byBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSAyIGFuZCBTQVMgUEhZIFBhZ2UgMy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTcyMyw2ICs3MjgsNjUgQEAKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFM19HUElPX1NFVFRJTkdfT04gICAgICAgICAgICAgICAgKDB4MDAwMSkKIAogCisvKiBJTyBVbml0IFBhZ2UgNSAqLworCisvKgorICogVXBwZXIgbGF5ZXIgY29kZSAoZHJpdmVycywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5QYWdlTGVuZ3RoIG9yIE51bURtYUVuZ2luZXMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BRU5HSU5FX0VOVFJJRVMgICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUgeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsJCQkJLyogMHgwMCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckJ1ZmZlckJhc2VBZGRyZXNzOyAgLyogMHgwNCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckJ1ZmZlclNpemU7ICAgICAgICAgLyogMHgwQyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckNvbnRyb2xCYXNlQWRkcmVzczsgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBQ29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bURtYUVuZ2luZXM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxRCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBTWluQ29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgxRSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBTWF4Q29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgLyogMHgxRiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERtYUVuZ2luZUNhcGFiaWxpdGllcworCQkJCVtNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTXTsgLyogMHgyQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNSwKKyAgTXBpMklPVW5pdFBhZ2U1X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPVW5pdFBhZ2U1X3Q7CisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IERtYUVuZ2luZUNhcGFiaWxpdGllcyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfTUFTS19NQVhfUkVRVUVTVFMgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfU0hJRlRfTUFYX1JFUVVFU1RTICAgICAoMTYpCisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0VFRFAgICAgICAgICAgICAgICAgICAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX1BBUklUWV9HRU5FUkFUSU9OICAgICAgKDB4MDAwNCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0hBU0hJTkcgICAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX0VOQ1JZUFRJT04gICAgICAgICAgICAgKDB4MDAwMSkKKworCisvKiBJTyBVbml0IFBhZ2UgNiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYgeworICAgIE1QSTJfQ09ORklHX1BBR0VfSEVBREVSIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQUhvc3RDb250cm9sU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmFpZEFjY2VsZXJhdG9ySG9zdENvbnRyb2xCYXNlQWRkcmVzczsgIC8qIDB4MDggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzYsCisgIE1waTJJT1VuaXRQYWdlNl90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlNl90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTZfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNiBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U2X0ZMQUdTX0VOQUJMRV9SQUlEX0FDQ0VMRVJBVE9SICAoMHgwMDAxKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgSU9DIENvbmZpZyBQYWdlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MDksMTAgKzE3NzMsMTQgQEAKICAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmVab25lTWFuYWdlclNBU0FkZHJlc3M7LyogMHgyQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpvbmVMb2NrSW5hY3Rpdml0eUxpbWl0OyAgICAvKiAweDM0ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MzYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lVG9SZWR1Y2VkRnVuYzsgICAgICAgICAgLyogMHgzOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxUaW1lVG9SZWR1Y2VkRnVuYzsgICAvKiAweDM5ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UmVkdWNlZEZ1bmNUaW1lOyAgICAgICAgIC8qIDB4M0EgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgzQiAqLwogfSBNUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLAogICBNcGkyRXhwYW5kZXJQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJFeHBhbmRlclBhZ2UwX3Q7CiAKLSNkZWZpbmUgTVBJMl9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT04gICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OICAgICAgICgweDA2KQogCiAvKiB2YWx1ZXMgZm9yIFNBUyBFeHBhbmRlciBQYWdlIDAgRGlzY292ZXJ5U3RhdHVzIGZpZWxkICovCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19NQVhfRU5DTE9TVVJFU19FWENFRUQgICAgICAgICAoMHg4MDAwMDAwMCkKQEAgLTE3MzcsNiArMTgwNSw3IEBACiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9EU19MT09QX0RFVEVDVEVEICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKIAogLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAgICAoMHgyMDAwKQogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfWk9ORV9MT0NLRUQgICAgICAgICAgICAgICAgKDB4MTAwMCkKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1NVUFBPUlRFRF9QSFlTSUNBTF9QUkVTICAgICgweDA4MDApCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19BU1NFUlRFRF9QSFlTSUNBTF9QUkVTICAgICAoMHgwNDAwKQpAQCAtMTk0NCw2ICsyMDEzLDEzMyBAQAogI2RlZmluZSBNUEkyX1NBU1BIWTFfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMSkKIAogCisvKiBTQVMgUEhZIFBhZ2UgMiAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCB7CisgICAgVTggICAgICAgICAgUGh5RXZlbnRDb2RlOyAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgUGh5RXZlbnRJbmZvOyAgICAgICAvKiAweDA0ICovCit9IE1QSTJfU0FTUEhZMl9QSFlfRVZFTlQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCwKKyAgTXBpMlNhc1BoeTJQaHlFdmVudF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHkyUGh5RXZlbnRfdDsKKworLyogdXNlIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFXyBmb3IgdGhlIFBoeUV2ZW50Q29kZSBmaWVsZCAqLworCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlFdmVudHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWAorI2RlZmluZSBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWCAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeUV2ZW50czsgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlQgICAgICAgICAgICAgIFBoeUV2ZW50W01QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYXTsKKwkJCQkJCQkJLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMiwKKyAgTXBpMlNhc1BoeVBhZ2UyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UyX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkyX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKworLyogU0FTIFBIWSBQYWdlIDMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHIHsKKyAgICBVOCAgICAgICAgICBQaHlFdmVudENvZGU7ICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBDb3VudGVyVHlwZTsgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICBUaHJlc2hvbGRXaW5kb3c7ICAgIC8qIDB4MDUgKi8KKyAgICBVOCAgICAgICAgICBUaW1lVW5pdHM7ICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVMzIgICAgICAgICBFdmVudFRocmVzaG9sZDsgICAgIC8qIDB4MDggKi8KKyAgICBVMTYgICAgICAgICBUaHJlc2hvbGRGbGFnczsgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MEUgKi8KK30gTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcsCisgIE1waTJTYXNQaHkzUGh5RXZlbnRDb25maWdfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5M1BoeUV2ZW50Q29uZmlnX3Q7CisKKy8qIHZhbHVlcyBmb3IgUGh5RXZlbnRDb2RlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX05PX0VWRU5UICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfSU5WQUxJRF9EV09SRCAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SVU5OSU5HX0RJU1BBUklUWV9FUlJPUiAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0xPU1NfRFdPUkRfU1lOQyAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEhZX1JFU0VUX1BST0JMRU0gICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9FTEFTVElDSVRZX0JVRl9PVkVSRkxPVyAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0VSUk9SICAgICAgICAgICAgICAgICAgICAoMHgwNikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUREUl9GUkFNRV9FUlJPUiAgICAgICAgICgweDIwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9BQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyMikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfUkNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDIzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9SQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUF9QQVJUSUFMX1dBSVRJTkdfT04gICAoMHgyNSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUlQX0NPTk5FQ1RfV0FJVElOR19PTiAgICgweDI2KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9CUkVBSyAgICAgICAgICAgICAgICAgICAgKDB4MjcpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0JSRUFLICAgICAgICAgICAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfQlJFQUtfVElNRU9VVCAgICAgICAgICAgICAgICgweDI5KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9DT05ORUNUSU9OICAgICAgICAgICAgICAgICAgKDB4MkEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtUWF9QQVRIV0FZX0JMT0NLRUQgICAgICAoMHgyQikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS1RYX0FSQl9XQUlUX1RJTUUgICAgICAgICgweDJDKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLX0FSQl9XQUlUX1RJTUUgICAgICAgICAgKDB4MkQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtfQ09OTkVDVF9USU1FICAgICAgICAgICAoMHgyRSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU1NQX0ZSQU1FUyAgICAgICAgICAgICAgICgweDQwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TU1BfRlJBTUVTICAgICAgICAgICAgICAgKDB4NDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NTUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg0MikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU1NQX0VSUk9SX0ZSQU1FUyAgICAgICAgICgweDQzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9DUkVESVRfQkxPQ0tFRCAgICAgICAgICAgKDB4NDQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0NSRURJVF9CTE9DS0VEICAgICAgICAgICAoMHg0NSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU0FUQV9GUkFNRVMgICAgICAgICAgICAgICgweDUwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TQVRBX0ZSQU1FUyAgICAgICAgICAgICAgKDB4NTEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1NBVEFfT1ZFUkZMT1cgICAgICAgICAgICAgICAoMHg1MikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU01QX0ZSQU1FUyAgICAgICAgICAgICAgICgweDYwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TTVBfRlJBTUVTICAgICAgICAgICAgICAgKDB4NjEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NNUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg2MykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfSE9UUExVR19USU1FT1VUICAgICAgICAgICAgICgweEQwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9NSVNBTElHTkVEX01VWF9QUklNSVRJVkUgICAgKDB4RDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUCAgICAgICAgICAgICAgICAgICAgICAoMHhEMikKKworLyogdmFsdWVzIGZvciB0aGUgQ291bnRlclR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV9XUkFQUElORyAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFX1NBVFVSQVRJTkcgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfUEVBS19WQUxVRSAgICAgICAgICAgICAgICAoMHgwMikKKworLyogdmFsdWVzIGZvciB0aGUgVGltZVVuaXRzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwX01JQ1JPU0VDT05EUyAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMTAwX01JQ1JPU0VDT05EUyAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xX01JTExJU0VDT05EICAgICAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwX01JTExJU0VDT05EUyAgICAgICAgICAgICAoMHgwMykKKworLyogdmFsdWVzIGZvciB0aGUgVGhyZXNob2xkRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RGTEFHU19QSFlfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19URkxBR1NfRVZFTlRfTk9USUZZICAgICAgICAgICAgICAgICAgICAoMHgwMDAxKQorCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVgKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVggICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzMgeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlFdmVudHM7ICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRyAgICAgICBQaHlFdmVudENvbmZpZworCQkJCQlbTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9NQVhdOyAvKiAweDEwICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zLAorICBNcGkyU2FzUGh5UGFnZTNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTNfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTNfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIFNBUyBQb3J0IENvbmZpZyBQYWdlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0IGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmY2FhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CkBAIC0wLDAgKzEsMzM0IEBACisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgRnVzaW9uLU1QVCBNUEkgMi4wIEhlYWRlciBGaWxlIENoYW5nZSBIaXN0b3J5CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDIuMDAuMTIKKyBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMDUtMDYtMDkKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIEZpbGVuYW1lICAgICAgICAgICAgICAgQ3VycmVudCB2ZXJzaW9uICAgICBQcmlvciB2ZXJzaW9uCisgLS0tLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0KKyBtcGkyLmggICAgICAgICAgICAgICAgIDAyLjAwLjEyICAgICAgICAgICAgMDIuMDAuMTEKKyBtcGkyX2NuZmcuaCAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKKyBtcGkyX2luaXQuaCAgICAgICAgICAgIDAyLjAwLjA3ICAgICAgICAgICAgMDIuMDAuMDYKKyBtcGkyX2lvYy5oICAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKKyBtcGkyX3JhaWQuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKKyBtcGkyX3Nhcy5oICAgICAgICAgICAgIDAyLjAwLjAyICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyX3RhcmcuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKKyBtcGkyX3Rvb2wuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyX3R5cGUuaCAgICAgICAgICAgIDAyLjAwLjAwICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX3JhLmggICAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9oaXN0b3J5LnR4dCAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEyCisKKworICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KKyAqICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBSZXBseVBvc3RIb3N0SW5kZXggcmVnaXN0ZXIgdG8gb2Zmc2V0IDB4NkMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NZU1RFTV9JTlRFUkZBQ0VfUkVHUyBhbmQgbW9kaWZpZWQgdGhlIGRlZmluZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHVuaW9uIG9mIHJlcXVlc3QgZGVzY3JpcHRvcnMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXBseSBkZXNjcmlwdG9ycy4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yIE1QSTJfVkVSU0lPTl8wMl8wMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIHRoZSBzaXplIG9mIHRoZSBGdW5jdGlvbkRlcGVuZGVudDUgZmllbGQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0RFRkFVTFRfUkVQTFkgc3RydWN0dXJlLgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgdGhlIE1QSS1kZWZpbmVkIEZhdWx0IENvZGVzIGFuZCBleHRlbmRlZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Qgc3BlY2lmaWMgY29kZXMgdXAgdG8gMHhFRkZGLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYSBzaXh0aCBrZXkgdmFsdWUgZm9yIHRoZSBXcml0ZVNlcXVlbmNlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hhbmdlZCB0aGUgZmx1c2ggdmFsdWUgdG8gMHgwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbWVzc2FnZSBmdW5jdGlvbiBjb2RlcyBmb3IgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIERpYWduc290aWMgUmVsZWFzZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE5ldyBJT0NTdGF0dXMgZGVmaW5lOiBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VECisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gZnJvbSBtcGkyX2lvYy5oLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDcgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA4ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgI2RlZmluZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDkgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMDItMDggIDAyLjAwLjEwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgZnJvbSBtcGkyX2luaXQuaC4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjEyICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgSW4gYWxsIHJlcXVlc3QgYW5kIHJlcGx5IGRlc2NyaXB0b3JzLCByZXBsYWNlZCBWRl9JRAorICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgd2l0aCBNU0l4SW5kZXggZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIERldkhhbmRsZSBmaWVsZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2NuZmcuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0wNC0wNyAgMDIuMDAuMDEgIEFkZGVkIGRlZmluZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMiBQaHlGbGFncy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1hbnVmYWN0dXJpbmcgUGFnZSAxMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19DT05ORUNUT1JfRU5EX0RFVklDRQorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQWRkaW5nIGdlbmVyaWMgc3RydWN0dXJlIGZvciBwcm9kdWN0LXNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyaW5nIHBhZ2VzOiBNUEkyX0NPTkZJR19QQUdFX01BTlVGQUNUVVJJTkdfUFMuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXdvcmsgb2YgQklPUyBQYWdlIDIgY29uZmlndXJhdGlvbiBwYWdlLgorICogICAgICAgICAgICAgICAgICAgICAgRml4ZWQgTVBJMl9CSU9TUEFHRTJfQk9PVF9ERVZJQ0UgdG8gYmUgYSB1bmlvbiBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgY29uZmlndXJhdGlvbiBwYWdlcyBJT0MgUGFnZSA4IGFuZCBEcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIFBlcnNpc3RlbnQgTWFwcGluZyBQYWdlIDAuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBNb2RpZmllZCBjb25maWd1cmF0aW9uIHBhZ2VzIGRlYWxpbmcgd2l0aCBJbnRlZ3JhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIChNYW51ZmFjdHVyaW5nIFBhZ2UgNCwgUkFJRCBWb2x1bWUgUGFnZXMgMCBhbmQgMSwKKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlcyAwIGFuZCAxLCBSQUlEIENvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgdmFsdWUgZm9yIEFjY2Vzc1N0YXR1cyBmaWVsZCBvZiBTQVMgRGV2aWNlCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAgKF9TQVRBX05FRURTX0lOSVRJQUxJWkFUSU9OKS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEFkZGVkIG1pc3NpbmcgU0VQRGV2SGFuZGxlIGZpZWxkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX1NBU19FTkNMT1NVUkVfMC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIE1vZGlmaWVkIElPIFVuaXQgUGFnZSAwIHRvIHVzZSAzMi1iaXQgdmVyc2lvbiBmaWVsZHMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBOVkRBVEEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBJT0MgUGFnZSA3IHRvIHVzZSBtYXNrcyBhbmQgYWRkZWQgZmllbGQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBTQVNCcm9hZGNhc3RQcmltaXRpdmVNYXNrcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfQ09ORklHX1BBR0VfQklPU180LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9MT0dfMC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgRGV2aWNlIElEcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZWQgSW50ZWdyYXRlZCBSQUlEIGNvbmZpZ3VyYXRpb24gcGFnZXMgaW5jbHVkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyaW5nIFBhZ2UgNCwgSU9DIFBhZ2UgNiwgYW5kIFJBSUQgQ29uZmlndXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwLgorICogIDA1LTIxLTA4ICAwMi4wMC4wNyAgQWRkZWQgZGVmaW5lIE1QSTJfTUFOUEFHRTRfTUlYX1NTRF9TQVNfU0FUQS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBNUEkyX01BTlBBR0U0X1BIWVNESVNLXzEyOE1CX0NPRVJDSU9OLgorICogICAgICAgICAgICAgICAgICAgICAgRml4ZWQgZGVmaW5lIE1QSTJfSU9DUEFHRThfRkxBR1NfRU5DTE9TVVJFX1NMT1RfTUFQUElORy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1pc3NpbmcgTWF4TnVtUm91dGVkU2FzQWRkcmVzc2VzIGZpZWxkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUG9ydCBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBzdHJ1Y3R1cmUgbGF5b3V0IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9EUklWRVJfTUFQUElOR18wLgorICogIDA2LTI3LTA4ICAwMi4wMC4wOCAgQ2hhbmdlZCBNUEkyX0NPTkZJR19QQUdFX1JEX1BESVNLXzEgdG8gdXNlCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1JBSURfUEhZU19ESVNLMV9QQVRIX01BWCB0byBzaXplIHRoZSBhcnJheS4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDkgIENoYW5nZWQgTVBJMl9SQUlEX1BHQURfQ09ORklHTlVNX01BU0sgZnJvbSAweDAwMDBGRkZGCisgKiAgICAgICAgICAgICAgICAgICAgICB0byAweDAwMDAwMEZGLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyB2YWx1ZXMgZm9yIHRoZSBQaHlzaWNhbCBEaXNrIENvZXJjaW9uIFNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJpdHMgaW4gdGhlIEZsYWdzIGZpZWxkIG9mIE1hbnVmYWN0dXJpbmcgUGFnZSA0LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcHJvZHVjdC1zcGVjaWZpYyBNYW51ZmFjdHVyaW5nIHBhZ2VzIDE2IHRvIDMxLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgRmxhZ3MgYml0cyBmb3IgY29udHJvbGxpbmcgd3JpdGUgY2FjaGUgb24gU0FUQQorICogICAgICAgICAgICAgICAgICAgICAgZHJpdmVzIGluIElPIFVuaXQgUGFnZSAxLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGJpdCB0byBBZGRpdGlvbmFsQ29udHJvbEZsYWdzIG9mIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDEgdG8gY29udHJvbCBJbnZhbGlkIFRvcG9sb2d5IENvcnJlY3Rpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTdXBwb3J0ZWRQaHlzRGlza3MgZmllbGQgdG8gUkFJRCBWb2x1bWUgUGFnZSAxIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgYWRkZWQgcmVsYXRlZCBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBkZWZpbmVzIGZvciBSQUlEIFZvbHVtZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXR1c0ZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgbWVhbmluZyBvZiBSQUlEIFZvbHVtZSBQYWdlIDAgVm9sdW1lU2V0dGluZ3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBmb3IgYXV0by1jb25maWd1cmUgb2YgaG90LXN3YXAgZHJpdmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5c0Rpc2tBdHRyaWJ1dGVzIGZpZWxkIChhbmQgcmVsYXRlZCBkZWZpbmVzKSB0bworICogICAgICAgICAgICAgICAgICAgICAgUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX1BIWUlORk9fUEhZX1ZBQ0FOVCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aHJlZSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdHMgZm9yIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIG11bHRpcGxleGluZyBpbmZvcm1hdGlvbiBmcm9tIFNBUyBJTyBVbml0IHBhZ2VzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgQm9vdERldmljZVdhaXRUaW1lIGZpZWxkIHRvIFNBUyBJTyBVbml0IFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgWm9uZSBBZGRyZXNzIFJlc29sdmVkIGJpdCBmcm9tIFBoeUluZm8gYW5kIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMCBGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgQWNjZXNzU3RhdHVzIHZhbHVlcyB0byBTQVMgRGV2aWNlIFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgZm9yIGluZGljYXRpbmcgcm91dGluZyBwcm9ibGVtcy4gQWRkZWQgMyByZXNlcnZlZCB3b3JkcworICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhpcyBwYWdlLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMCAgRml4ZWQgZGVmaW5lcyBmb3IgR1BJT1ZhbCBmaWVsZCBvZiBJTyBVbml0IFBhZ2UgMy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluc2VydGVkIG1pc3NpbmcgcmVzZXJ2ZWQgZmllbGQgaW50byBzdHJ1Y3R1cmUgZm9yIElPQworICogICAgICAgICAgICAgICAgICAgICAgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbW9yZSBwZW5kaW5nIHRhc2sgYml0cyB0byBSQUlEIFZvbHVtZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZVN0YXR1c0ZsYWdzIGRlZmluZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1BIWVNESVNLMF9TVEFUVVNfRkxBR19OT1RfQ0VSVElGSUVEIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGEgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXQgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAgdG8gZmxhZyBhIGRvd25zdHJlYW0gaW5pdGlhdG9yCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGluIHNpbXBsaWZpZWQgcm91dGluZyBtb2RlLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBTQVRBIEluaXQgRmFpbHVyZSBkZWZpbmVzIGZvciBEaXNjb3ZlcnlTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyBvZiBTQVMgSU8gVW5pdCBQYWdlIDAgYW5kIFNBUyBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19ERVZJQ0UwX0FTVEFUVVNfREVWSUNFX0JMT0NLRUQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG9ydEdyb3VwcywgRG1hR3JvdXAsIGFuZCBDb250cm9sR3JvdXAgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBTQVMgRGV2aWNlIFBhZ2UgMC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA1IGFuZCBJTworICogICAgICAgICAgICAgICAgICAgICAgVW5pdCBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBleHBhbmRlciByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgZGF0YSB0byBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSAyIGFuZCBTQVMgUEhZIFBhZ2UgMy4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2luaXQuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDEgIEZpeGVkIG5hbWUgZm9yIHBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVxdWVzdF90LgorICogIDEyLTE4LTA3ICAwMi4wMC4wMiAgTW9kaWZpZWQgVGFzayBNYW5hZ2VtZW50IFRhcmdldCBSZXNldCBNZXRob2QgZGVmaW5lcy4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDMgIEFkZGVkIFF1ZXJ5IFRhc2sgU2V0IGFuZCBRdWVyeSBVbml0IEF0dGVudGlvbi4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDQgIEZpeGVkIG5hbWUgb2Ygc3RydWN0IF9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA1ICBGaXhlZCB0eXBvIGluIG5hbWUgb2YgTXBpMlNlcFJlcXVlc3RfdC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDYgIFJlbW92ZWQgVW50YWdnZWQgYW5kIE5vIERpc2Nvbm5lY3QgdmFsdWVzIGZyb20gU0NTSSBJTworICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBmaWVsZCBUYXNrIEF0dHJpYnV0ZSBmbGFncy4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhc3VlIHRoZXkgYXJlCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgorICogIDA1LTA2LTA5ICAwMi4wMC4wNyAgQ2hhbmdlZCB0YXNrIG1hbmFnZW1lbnQgdHlwZSBvZiBRdWVyeSBVbml0IEF0dGVudGlvbiB0bworICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZCB0d28gbmV3IGJpdHMgaW4gdGhlIFNsb3RTdGF0dXMgZmllbGQgb2YgdGhlIFNDU0kKKyAqICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBhbmQgUmVwbHkuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9pb2MuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0wNC0wNyAgMDIuMDAuMDEgIEluIElPQ0ZhY3RzIFJlcGx5IHN0cnVjdHVyZSwgcmVuYW1lZCBNYXhEZXZpY2VzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNYXhUYXJnZXRzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgVG90YWxJbWFnZVNpemUgZmllbGQgdG8gRldEb3dubG9hZCBSZXF1ZXN0LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcmVzZXJ2ZWQgd29yZHMgdG8gRldVcGxvYWQgUmVxdWVzdC4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEFkZGVkIElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBSZW1vdmVkIFN5c3RlbVJlcGx5UXVldWVEZXB0aCBmaWVsZCBmcm9tIHRoZSBJT0NJbml0CisgKiAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCByZXBsYWNlZCBpdCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aCBhbmQgUmVwbHlGcmVlUXVldWVEZXB0aC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIHRoZSBNaW5SZXBseVF1ZXVlRGVwdGggZmllbGQgb2YgdGhlIElPQ0ZhY3RzCisgKiAgICAgICAgICAgICAgICAgICAgICByZXBseSB3aXRoIE1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9SRFBRX0RFUFRIX01JTiBkZWZpbmUgdG8gc3BlY2lmeSB0aGUgbWluaW11bQorICogICAgICAgICAgICAgICAgICAgICAgZGVwdGggZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVNBZGRyZXNzIGZpZWxkIHRvIEluaXRpYXRvciBEZXZpY2UgVGFibGUKKyAqICAgICAgICAgICAgICAgICAgICAgIE92ZXJmbG93IEV2ZW50IGRhdGEuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBBZGRlZCBSZWFzb25Db2RlIE1QSTJfRVZFTlRfU0FTX0lOSVRfUkNfTk9UX1JFU1BPTkRJTkcKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBTQVMgSW5pdGlhdG9yIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBSZWFzb24gQ29kZSBkZWZpbmVzIGZvciBTQVMgVG9wb2xvZ3kgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBMaXN0IEV2ZW50IGRhdGEsIGluY2x1ZGluZyBhZGRpbmcgYSBiaXQgZm9yIFBIWSBWYWNhbnQKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgYW5kIGFkZGluZyBhIG1hc2sgZm9yIHRoZSBSZWFzb24gQ29kZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfREVMQVlfTk9UX1JFU1BPTkRJTkcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yIE1QSTJfRVhUX0lNQUdFX1RZUEVfTUVHQVJBSUQuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBBZGRlZCBCb290IFN0YXR1cyBkZWZpbmVzIGZvciB0aGUgSU9DRXhjZXB0aW9ucyBmaWVsZCBvZgorICogICAgICAgICAgICAgICAgICAgICAgdGhlIElPQ0ZhY3RzIFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIE1QSTJfVkVSU0lPTl9VTklPTiB0byBtcGkyLmguCisgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIE1QSTJfRVZFTlRfTk9USUZJQ0FUSU9OX1JFUVVFU1QgdG8gdXNlIG1hc2tzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGVuYWJsZXMsIGFuZCBhZGRlZCBTQVNCcm9hZGNhc3RQcmltaXRpdmVNYXNrcworICogICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBMb2cgRW50cnkgQWRkZWQgRXZlbnQgYW5kIHJlbGF0ZWQgc3RydWN0dXJlLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgQWRkZWQgZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGRlZmluZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NNUF9UQVJHRVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhWb2x1bWVzIGFuZCBNYXhQZXJzaXN0ZW50RW50cmllcyBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIElPQ0ZhY3RzIHJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUHJvdG9jYWxGbGFncyBhbmQgSU9DQ2FwYWJpbGl0aWVzIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9GV19JTUFHRV9IRUFERVIuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfUE9SVEVOQUJMRV9GTEFHU19FTkFCTEVfU0lOR0xFX1BPUlQuCisgKiAgMDMtMDMtMDggIDAyLjAwLjA3ICBGaXhlZCBNUEkyX0ZXX0lNQUdFX0hFQURFUiBieSBjaGFuZ2luZyBSZXNlcnZlZDI2IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBhIFUxNiAoZnJvbSBhIFUzMikuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGV4dHJhICdzJyBmcm9tIEV2ZW50TWFza3MgbmFtZS4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDggIEZpeGVkIGFuIG9mZnNldCBpbiBhIGNvbW1lbnQuCisgKiAgMTAtMDItMDggIDAyLjAwLjA5ICBSZW1vdmVkIFN5c3RlbVJlcGx5RnJhbWVTaXplIGZyb20gTVBJMl9JT0NfSU5JVF9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBDdXJSZXBseUZyYW1lU2l6ZSBmcm9tIE1QSTJfSU9DX0ZBQ1RTX1JFUExZIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCBNaW5SZXBseUZyYW1lU2l6ZSB0byBSZXBseUZyYW1lU2l6ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfRVhDRVBUX0lSX0ZPUkVJR05fQ09ORklHX01BWC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgUkFJRE9wZXJhdGlvbiB2YWx1ZXMgZm9yIEludGVncmF0ZWQgUkFJRAorICogICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9ucyBTdGF0dXMgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZvdXIgbmV3IElSIENvbmZpZ3VyYXRpb24gQ2hhbmdlIExpc3QgRXZlbnQgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgUmVhc29uQ29kZSB2YWx1ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IFJlYXNvbkNvZGUgZGVmaW5lcyBmb3IgU0FTIERldmljZSBTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhyZWUgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXRzIGZvciB0aGUgU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBEaXNjb3ZlcnkgZXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE11bHRpcGxleGluZyBTdGF0dXMgQ2hhbmdlIGJpdCB0byB0aGUgUGh5U3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiB0aGUgU0FTIFRvcG9sb2d5IENoYW5nZSBMaXN0IGV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGRlZmluZSBmb3IgTVBJMl9JTklUX0lNQUdFX0JPT1RGTEFHU19YTUVNQ09QWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEJvb3RGbGFncyBhcmUgbm93IHByb2R1Y3Qtc3BlY2lmaWMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciB0aGUgaW5kaXZkdWFsIHNpZ25hdHVyZSBieXRlcworICogICAgICAgICAgICAgICAgICAgICAgZm9yIE1QSTJfSU5JVF9JTUFHRV9GT09URVIuCisgKiAgMDEtMTktMDkgIDAyLjAwLjEwICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfRE9XTlNUUkVBTV9JTklUSUFUT1IKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU0FUQV9JTklUX0ZBSUxVUkUgZGVmaW5lLgorICogIDA1LTA2LTA5ICAwMi4wMC4xMSAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgcmVhc29uIGNvZGVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGV2ZW50OiBTQVMgUEhZIENvdW50ZXIuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9yYWlkLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAxICBNb2RpZmljYXRpb25zIHRvIFJBSUQgQWN0aW9uIHJlcXVlc3QgYW5kIHJlcGx5LAorICogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBBY3Rpb25zIGFuZCBBY3Rpb25EYXRhLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgQWRkZWQgTVBJMl9SQUlEX0FDVElPTl9BREFUQV9ESVNBQkxfRlVMTF9SRUJVSUxELgorICogIDA1LTIxLTA4ICAwMi4wMC4wMyAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTIHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBQaHlzRGlzayBhcnJheSBpbiBNUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAorICogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHNpemVkIGJ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3Nhcy5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTI2LTA3ICAwMi4wMC4wMSAgQWRkZWQgQ2xlYXIgQWxsIFBlcnNpc3RlbnQgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0CisgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFJlcXVlc3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjAyICBBZGRlZCBTZXQgSU9DIFBhcmFtZXRlciBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQgQ29udHJvbAorICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3RhcmcuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDEgIEFkZGVkIENvbW1hbmQgQnVmZmVyIERhdGEgTG9jYXRpb24gQWRkcmVzcyBTcGFjZSBiaXRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJQb3N0RmxhZ3MgZmllbGQgb2YgQ29tbWFuZEJ1ZmZlclBvc3RCYXNlIFJlcXVlc3QuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIDEwLTAyLTA4ICAwMi4wMC4wMyAgUmVtb3ZlZCBOZXh0Q21kQnVmZmVyT2Zmc2V0IGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfVEFSR0VUX0NNRF9CVUZfUE9TVF9CQVNFX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgU3RhdHVzIFNlbmQgUmVxdWVzdCBvbmx5IHRha2VzIGEgc2luZ2xlIFNHRSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIGRhdGEuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl90b29sLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTItMTgtMDcgIDAyLjAwLjAxICBBZGRlZCBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IGFuZCBEaWFnbm9zdGljIFJlbGVhc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIDA1LTA2LTA5ICAwMi4wMC4wMyAgQWRkZWQgSVNUV0kgUmVhZCBXcml0ZSBUb29sIGFuZCBEaWFnbm9zdGljIENMSSBUb29sLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfdHlwZS5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfcmEuaAorICogIDA1LTA2LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfaGlzdG9yeS50eHQgICAgICAgICBQYXJ0cyBsaXN0IGhpc3RvcnkKKworRmlsZW5hbWUgICAgIDAyLjAwLjEyCistLS0tLS0tLS0tICAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xMgorbXBpMl9jbmZnLmggIDAyLjAwLjExCittcGkyX2luaXQuaCAgMDIuMDAuMDcKK21waTJfaW9jLmggICAwMi4wMC4xMQorbXBpMl9yYWlkLmggIDAyLjAwLjAzCittcGkyX3Nhcy5oICAgMDIuMDAuMDIKK21waTJfdGFyZy5oICAwMi4wMC4wMworbXBpMl90b29sLmggIDAyLjAwLjAzCittcGkyX3R5cGUuaCAgMDIuMDAuMDAKK21waTJfcmEuaCAgICAwMi4wMC4wMAorCitGaWxlbmFtZSAgICAgMDIuMDAuMTEgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xMSAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2CittcGkyX2NuZmcuaCAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2ICAwMi4wMC4wNgorbXBpMl9pbml0LmggIDAyLjAwLjA2ICAwMi4wMC4wNiAgMDIuMDAuMDUgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfaW9jLmggICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDcgIDAyLjAwLjA2CittcGkyX3JhaWQuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl9zYXMuaCAgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEKK21waTJfdGFyZy5oICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3Rvb2wuaCAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl90eXBlLmggIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKKworRmlsZW5hbWUgICAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorbXBpMl9jbmZnLmggIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfaW5pdC5oICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX2lvYy5oICAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorbXBpMl9yYWlkLmggIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfc2FzLmggICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3RhcmcuaCAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl90b29sLmggIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAppbmRleCBmMTExNWYwLi41NjNlNTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCiAgKgogICoKICAqICAgICAgICAgICBOYW1lOiAgbXBpMl9pbml0LmgKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNDU0kgaW5pdGlhdG9yIG1vZGUgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMywgMjAwNgogICoKLSAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNgorICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA3CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjMsNiArMjMsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgZmllbGQgVGFzayBBdHRyaWJ1dGUgZmxhZ3MuCiAgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyB0byBtcGkyLmggYmVjYXN1ZSB0aGV5IGFyZQogICogICAgICAgICAgICAgICAgICAgICAgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcy4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDcgIENoYW5nZWQgdGFzayBtYW5hZ2VtZW50IHR5cGUgb2YgUXVlcnkgVW5pdCBBdHRlbnRpb24gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCisgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjg5LDcgKzI5MywxMSBAQAogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RVUVSWV9UQVNLICAgICAgICAgICAoMHgwNykKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQ0xSX0FDQSAgICAgICAgICAgICAgKDB4MDgpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9UQVNLX1NFVCAgICAgICAgICgweDA5KQotI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVU5JVF9BVFRFTlRJT04gICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX0FTWU5DX0VWRU5UICAgICAgKDB4MEEpCisKKy8qIG9ic29sZXRlIFRhc2tUeXBlIG5hbWUgKi8KKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1VOSVRfQVRURU5USU9OCVwKKwkoTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX0FTWU5DX0VWRU5UKQogCiAvKiBNc2dGbGFncyBiaXRzICovCiAKQEAgLTM3NSw2ICszODMsOCBAQAogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19IT1RfU1BBUkUgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfVU5DT05GSUdVUkVEICAgICAgICAgICAgKDB4MDAwMDAwODApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1BSRURJQ1RFRF9GQVVMVCAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19JTl9DUklUSUNBTF9BUlJBWSAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSU5fRkFJTEVEX0FSUkFZICAgICAgICAgKDB4MDAwMDAwMDgpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAgICgweDAwMDAwMDA0KQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCkBAIC00MTAsNiArNDIwLDggQEAKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19IT1RfU1BBUkUgICAgICAgICAgICAgKDB4MDAwMDAxMDApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfVU5DT05GSUdVUkVEICAgICAgICAgICgweDAwMDAwMDgwKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1BSRURJQ1RFRF9GQVVMVCAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19JTl9DUklUSUNBTF9BUlJBWSAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSU5fRkFJTEVEX0FSUkFZICAgICAgICgweDAwMDAwMDA4KQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0RFVl9SRUJVSUxESU5HICAgICAgICAoMHgwMDAwMDAwNCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19ERVZfRkFVTFRZICAgICAgICAgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfTk9fRVJST1IgICAgICAgICAgICAgICgweDAwMDAwMDAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCA4YzVkODE4Li5jMjk0MTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTAKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTc5LDYgKzc5LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRQogICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX1NBVEFfSU5JVF9GQUlMVVJFIGRlZmluZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjYxLDYgKzI2Niw4IEBACiAvKiBQcm9kdWN0SUQgZmllbGQgdXNlcyBNUEkyX0ZXX0hFQURFUl9QSURfICovCiAKIC8qIElPQ0NhcGFiaWxpdGllcyAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggICAgICAgICAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgICAgICAgKDB4MDAwMDQwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgICAgICAgICAgICgweDAwMDAyMDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEICAgICAgICAoMHgwMDAwMTAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA4MDApCkBAIC00NDAsNiArNDQ3LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLICAgICAgICAgICAgICAgICAoMHgwMDFGKQogI2RlZmluZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1QgICAgICgweDAwMjApCiAjZGVmaW5lIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEICAgICAgICAgICAgICAgICAgKDB4MDAyMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfUEhZX0NPVU5URVIgICAgICAgICAgICAgICAgICAoMHgwMDIyKQogCiAKIC8qIExvZyBFbnRyeSBBZGRlZCBFdmVudCBkYXRhICovCkBAIC01MDIsMTcgKzUxMCwxOSBAQAogICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdDsKIAogLyogU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSAgICAgICAgICAgICAgICgweDA1KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19VTlNVUFBPUlRFRCAgICAgICAgICAgICAgKDB4MDcpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVCAgICAoMHgwOCkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICgweDA5KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BQk9SVF9UQVNLX1NFVF9JTlRFUk5BTCAgKDB4MEEpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NMRUFSX1RBU0tfU0VUX0lOVEVSTkFMICAoMHgwQikKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfUVVFUllfVEFTS19JTlRFUk5BTCAgICAgICgweDBDKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BU1lOQ19OT1RJRklDQVRJT04gICAgICAgKDB4MEQpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9JTlRFUk5BTF9ERVZfUkVTRVQgICAoMHgwRSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX1RBU0tfQUJPUlRfSU5URVJOQUwgICgweDBGKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRSAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1RBU0tfQUJPUlRfSU5URVJOQUwgICAgICAgICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQUJPUlRfVEFTS19TRVRfSU5URVJOQUwgICAgICAgICAgICAgICgweDBBKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTEVBUl9UQVNLX1NFVF9JTlRFUk5BTCAgICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1FVRVJZX1RBU0tfSU5URVJOQUwgICAgICAgICAgICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQVNZTkNfTk9USUZJQ0FUSU9OICAgICAgICAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfSU5URVJOQUxfREVWX1JFU0VUICAgICAgICAgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19FWFBBTkRFUl9SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9FWFBBTkRFUl9SRURVQ0VEX0ZVTkNUSU9OQUxJVFkgICAoMHgxMikKIAogCiAvKiBJbnRlZ3JhdGVkIFJBSUQgT3BlcmF0aW9uIFN0YXR1cyBFdmVudCBkYXRhICovCkBAIC04MjIsNiArODMyLDM3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0VOQ0xfUkNfTk9UX1JFU1BPTkRJTkcgICAgICAgKDB4MDIpCiAKIAorLyogU0FTIFBIWSBDb3VudGVyIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9TQVNfUEhZX0NPVU5URVIgeworICAgIFU2NCAgICAgICAgIFRpbWVTdGFtcDsgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgIFBoeUV2ZW50Q29kZTsgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgIFBoeU51bTsgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgIFBoeUV2ZW50SW5mbzsgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgIENvdW50ZXJUeXBlOyAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgIFRocmVzaG9sZFdpbmRvdzsgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgIFRpbWVVbml0czsgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgxNyAqLworICAgIFUzMiAgICAgICAgIEV2ZW50VGhyZXNob2xkOyAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgIFRocmVzaG9sZEZsYWdzOyAgICAgLyogMHgxQyAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxRSAqLworfSBNUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9TQVNfUEhZX0NPVU5URVIsCisgIE1waTJFdmVudERhdGFTYXNQaHlDb3VudGVyX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc1BoeUNvdW50ZXJfdDsKKworLyogdXNlIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBQaHlFdmVudENvZGUgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBDb3VudGVyVHlwZSBmaWVsZAorICogdXNlIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBUaW1lVW5pdHMgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfVEZMQUdTXyB2YWx1ZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IgdGhlCisgKiBUaHJlc2hvbGRGbGFncyBmaWVsZAorICogKi8KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXZlbnRBY2sgbWVzc2FnZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaAppbmRleCAyZmY0ZTkzLi4wMDdlOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA4IExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCiAgKgogICoKICAqICAgICAgICAgICBOYW1lOiAgbXBpMl90b29sLmgKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIGRpYWdub3N0aWMgdG9vbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwogICogIENyZWF0aW9uIERhdGU6ICBNYXJjaCAyNiwgMjAwNwogICoKLSAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4wMgorICogICAgbXBpMl90b29sLmggVmVyc2lvbjogIDAyLjAwLjAzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTcsNiArMTcsNyBAQAogICogIDEyLTE4LTA3ICAwMi4wMC4wMSAgQWRkZWQgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCBhbmQgRGlhZ25vc3RpYyBSZWxlYXNlCiAgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgogICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTMyLDcgKzMzLDEwIEBACiAvKiBkZWZpbmVzIGZvciB0aGUgVG9vbHMgKi8KICNkZWZpbmUgTVBJMl9UT09MQk9YX0NMRUFOX1RPT0wgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9UT09MQk9YX01FTU9SWV9NT1ZFX1RPT0wgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfVE9PTCAgICAgICAgICAoMHgwMykKICNkZWZpbmUgTVBJMl9UT09MQk9YX0JFQUNPTl9UT09MICAgICAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1RPT0wgICAgICAgICAgICAoMHgwNikKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgVG9vbGJveCByZXBseQpAQCAtMTEyLDYgKzExNiw3NyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVG9vbGJveCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgcmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVCB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV2SW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUeERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJ4RGF0YUxlbmd0aDsgICAgICAgICAgICAgICAvKiAweDFBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDk7ICAgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTA7ICAgICAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMTsgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDEyOyAgICAgICAgICAgICAgICAgLyogMHgyQyAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDMwICovCit9IE1QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVCwKKyAgTXBpMlRvb2xib3hJc3R3aVJlYWRXcml0ZVJlcXVlc3RfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveElzdHdpUmVhZFdyaXRlUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBBY3Rpb24gZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRUFEX0RBVEEgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9XUklURV9EQVRBICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9TRVFVRU5DRSAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRVNFUlZFX0JVUyAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRUxFQVNFX0JVUyAgICAgICAgICAoMHgxMSkKKyNkZWZpbmUgTVBJMl9UT09MX0lTVFdJX0FDVElPTl9SRVNFVCAgICAgICAgICAgICAgICAoMHgxMikKKworLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworCisKKy8qIFRvb2xib3ggSVNUV0kgUmVhZCBXcml0ZSBUb29sIHJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGV2SW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIElzdHdpU3RhdHVzOyAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUeERhdGFDb3VudDsgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJ4RGF0YUNvdW50OyAgICAgICAgICAgICAgICAvKiAweDFBICovCit9IE1QSTJfVE9PTEJPWF9JU1RXSV9SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFksCisgIE1waTJUb29sYm94SXN0d2lSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94SXN0d2lSZXBseV90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBUb29sYm94IEJlYWNvbiBUb29sIHJlcXVlc3QKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEzOSw2ICsyMTQsNjEgQEAKICNkZWZpbmUgTVBJMl9UT09MQk9YX0ZMQUdTX0JFQUNPTk1PREVfT04gICAgICAgICgweDAxKQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVBJMl9UT09MQk9YX0RJQUdfQ0xJX0NNRF9MRU5HVEggICAgKDB4NUMpCisKKy8qIFRvb2xib3ggRGlhZ25vc3RpYyBDTEkgVG9vbCByZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVRVUVTVCB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNDbGlDb21tYW5kCisJCVtNUEkyX1RPT0xCT1hfRElBR19DTElfQ01EX0xFTkdUSF07ICAgICAvKiAweDE0ICovCisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4NzAgKi8KK30gTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QsCisgIE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcXVlc3RfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wgcmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVBMWSB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXR1cm5lZERhdGFMZW5ndGg7ICAgICAgICAgLyogMHgxNCAqLworfSBNUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVQTFksCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0RJQUdfQ0xJX1JFUExZLAorICBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXBseV90LAorICBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcGx5X3Q7CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqICAgICAgIERpYWdub3N0aWMgQnVmZmVyIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IGQ5NWQyZjIuLjY3MDI0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0zLDcgKzMsNyBAQAogICogZm9yIGFjY2VzcyB0byBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNjMsNyArNjMsNyBAQAogc3RhdGljIE1QVF9DQUxMQkFDSwltcHRfY2FsbGJhY2tzW01QVF9NQVhfQ0FMTEJBQ0tTXTsKIAogI2RlZmluZSBGQVVMVF9QT0xMSU5HX0lOVEVSVkFMIDEwMDAgLyogaW4gbWlsbGlzZWNvbmRzICovCi0jZGVmaW5lIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgNTAwIC8qIG1heGltdW0gY29udHJvbGxlciBxdWV1ZSBkZXB0aCAqLworI2RlZmluZSBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDYwMCAvKiBtYXhpbXVtIGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KIAogc3RhdGljIGludCBtYXhfcXVldWVfZGVwdGggPSAtMTsKIG1vZHVsZV9wYXJhbShtYXhfcXVldWVfZGVwdGgsIGludCwgMCk7CkBAIC01NDMsMTMgKzU0MywxMyBAQAogICogX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvIC0KICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK19iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAogICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKQEAgLTU3MiwyMiArNTcyLDI0IEBACiAgKiBtcHQyc2FzX2Jhc2VfZG9uZSAtIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkCi1tcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKG1waV9yZXBseSAmJiBtcGlfcmVwbHktPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCiAJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC01OTYsMTggKzU5OCwyMCBAQAogCX0KIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+YmFzZV9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKioKICAqIF9iYXNlX2FzeW5jX2V2ZW50IC0gbWFpbiBjYWxsYmFjayBoYW5kbGVyIGZvciBmaXJtd2FyZSBhc3luIGV2ZW50cwogICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9iYXNlX2FzeW5jX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3N0YXRpYyB1OAorX2Jhc2VfYXN5bmNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwogCU1waTJFdmVudEFja1JlcXVlc3RfdCAqYWNrX3JlcXVlc3Q7CkBAIC02MTUsOSArNjE5LDkgQEAKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmICghbXBpX3JlcGx5KQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChtcGlfcmVwbHktPkZ1bmN0aW9uICE9IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCV9iYXNlX2Rpc3BsYXlfZXZlbnRfZGF0YShpb2MsIG1waV9yZXBseSk7CiAjZW5kaWYKQEAgLTYzNSwxNiArNjM5LDQ3IEBACiAJYWNrX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9FVkVOVF9BQ0s7CiAJYWNrX3JlcXVlc3QtPkV2ZW50ID0gbXBpX3JlcGx5LT5FdmVudDsKIAlhY2tfcmVxdWVzdC0+RXZlbnRDb250ZXh0ID0gbXBpX3JlcGx5LT5FdmVudENvbnRleHQ7Ci0JYWNrX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJYWNrX3JlcXVlc3QtPlZGX0lEID0gMDsgIC8qIFRPRE8gKi8KKwlhY2tfcmVxdWVzdC0+VlBfSUQgPSAwOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAKICBvdXQ6CiAKIAkvKiBzY3NpaCBjYWxsYmFjayBoYW5kbGVyICovCi0JbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhpb2MsIFZGX0lELCByZXBseSk7CisJbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhpb2MsIG1zaXhfaW5kZXgsIHJlcGx5KTsKIAogCS8qIGN0bCBjYWxsYmFjayBoYW5kbGVyICovCi0JbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworCW1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKGlvYywgbXNpeF9pbmRleCwgcmVwbHkpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogX2Jhc2VfZ2V0X2NiX2lkeCAtIG9idGFpbiB0aGUgY2FsbGJhY2sgaW5kZXgKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm4gY2FsbGJhY2sgaW5kZXguCisgKi8KK3N0YXRpYyB1OAorX2Jhc2VfZ2V0X2NiX2lkeChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCWludCBpOworCXU4IGNiX2lkeCA9IDB4RkY7CisKKwlpZiAoc21pZCA+PSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpIHsKKwkJaWYgKHNtaWQgPCBpb2MtPmludGVybmFsX3NtaWQpIHsKKwkJCWkgPSBzbWlkIC0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCQkJY2JfaWR4ID0gaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeDsKKwkJfSBlbHNlIHsKKwkJCWkgPSBzbWlkIC0gaW9jLT5pbnRlcm5hbF9zbWlkOworCQkJY2JfaWR4ID0gaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4OworCQl9CisJfSBlbHNlIHsKKwkJaSA9IHNtaWQgLSAxOworCQljYl9pZHggPSBpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeDsKKwl9CisJcmV0dXJuIGNiX2lkeDsKIH0KIAogLyoqCkBAIC02ODAsNyArNzE1LDYgQEAKIHsKIAl1MzIgaGltX3JlZ2lzdGVyOwogCi0Jd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOwogCWhpbV9yZWdpc3RlciA9IHJlYWRsKCZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKIAloaW1fcmVnaXN0ZXIgJj0gfk1QSTJfSElNX1JJTTsKIAl3cml0ZWwoaGltX3JlZ2lzdGVyLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CkBAIC03MTIsOSArNzQ2LDEwIEBACiAJdTE2IHNtaWQ7CiAJdTggY2JfaWR4OwogCXUzMiByZXBseTsKLQl1OCBWRl9JRDsKKwl1OCBtc2l4X2luZGV4OwogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IGJ1c19pZDsKIAlNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3QgKnJwZjsKKwl1OCByYzsKIAogCWlmIChpb2MtPm1hc2tfaW50ZXJydXB0cykKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtNzMzLDcgKzc2OCw3IEBACiAJCXJlcGx5ID0gMDsKIAkJY2JfaWR4ID0gMHhGRjsKIAkJc21pZCA9IGxlMTZfdG9fY3B1KHJwZi0+RGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudDEpOwotCQlWRl9JRCA9IHJwZi0+RGVmYXVsdC5WRl9JRDsKKwkJbXNpeF9pbmRleCA9IHJwZi0+RGVmYXVsdC5NU0l4SW5kZXg7CiAJCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PQogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSkgewogCQkJcmVwbHkgPSBsZTMyX3RvX2NwdQpAQCAtNzQ1LDE2ICs3ODAsMTggQEAKIAkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTKQogCQkJZ290byBuZXh0OwogCQlpZiAoc21pZCkKLQkJCWNiX2lkeCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeDsKKwkJCWNiX2lkeCA9IF9iYXNlX2dldF9jYl9pZHgoaW9jLCBzbWlkKTsKIAkJaWYgKHNtaWQgJiYgY2JfaWR4ICE9IDB4RkYpIHsKLQkJCW1wdF9jYWxsYmFja3NbY2JfaWR4XShpb2MsIHNtaWQsIFZGX0lELCByZXBseSk7CisJCQlyYyA9IG1wdF9jYWxsYmFja3NbY2JfaWR4XShpb2MsIHNtaWQsIG1zaXhfaW5kZXgsCisJCQkgICAgcmVwbHkpOwogCQkJaWYgKHJlcGx5KQotCQkJCV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhpb2MsIHNtaWQsIFZGX0lELAorCQkJCV9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyhpb2MsIHNtaWQsIG1zaXhfaW5kZXgsCiAJCQkJICAgIHJlcGx5KTsKLQkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKKwkJCWlmIChyYykKKwkJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CiAJCX0KIAkJaWYgKCFzbWlkKQotCQkJX2Jhc2VfYXN5bmNfZXZlbnQoaW9jLCBWRl9JRCwgcmVwbHkpOworCQkJX2Jhc2VfYXN5bmNfZXZlbnQoaW9jLCBtc2l4X2luZGV4LCByZXBseSk7CiAKIAkJLyogcmVwbHkgZnJlZSBxdWV1ZSBoYW5kbGluZyAqLwogCQlpZiAocmVwbHkpIHsKQEAgLTExOTEsMTkgKzEyMjgsNiBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYSAtIG9idGFpbiByZXF1ZXN0IG1mIHBvaW50ZXIgcGh5cyBhZGRyCi0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4KHNtaWQgemVybyBpcyBpbnZhbGlkKQotICoKLSAqIFJldHVybnMgcGh5cyBwb2ludGVyIHRvIG1lc3NhZ2UgZnJhbWUuCi0gKi8KLWRtYV9hZGRyX3QKLW1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQotewotCXJldHVybiBpb2MtPnJlcXVlc3RfZG1hICsgKHNtaWQgKiBpb2MtPnJlcXVlc3Rfc3opOwotfQotCi0vKioKICAqIG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lIC0gb2J0YWluIHJlcXVlc3QgbWYgcG9pbnRlcgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleChzbWlkIHplcm8gaXMgaW52YWxpZCkKQEAgLTEyNTgsNyArMTI4Miw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19iYXNlX2dldF9zbWlkIC0gb2J0YWluIGEgZnJlZSBzbWlkCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQgLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBpbnRlcm5hbCBxdWV1ZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAogICoKQEAgLTEyNzIsNiArMTI5NiwzOSBAQAogCXUxNiBzbWlkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBzbWlkIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QubmV4dCwKKwkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CisJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CisJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyAtIG9idGFpbiBhIGZyZWUgc21pZCBmcm9tIHNjc2lpbyBxdWV1ZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICoKKyAqIFJldHVybnMgc21pZCAoemVybyBpcyBpbnZhbGlkKQorICovCit1MTYKK21wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKnJlcXVlc3Q7CisJdTE2IHNtaWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJmlvYy0+ZnJlZV9saXN0KSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHNtaWQgbm90IGF2YWlsYWJsZVxuIiwKQEAgLTEyODEsNiArMTMzOCwzNiBAQAogCiAJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5mcmVlX2xpc3QubmV4dCwKIAkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlyZXF1ZXN0LT5zY21kID0gc2NtZDsKKwlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CisJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CisJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNtaWQ7Cit9CisKKy8qKgorICogbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwciAtIG9idGFpbiBhIGZyZWUgc21pZCBmcm9tIGhpLXByaW9yaXR5IHF1ZXVlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKgorICogUmV0dXJucyBzbWlkICh6ZXJvIGlzIGludmFsaWQpCisgKi8KK3UxNgorbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKnJlcXVlc3Q7CisJdTE2IHNtaWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+aHByX2ZyZWVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+aHByX2ZyZWVfbGlzdC5uZXh0LAorCSAgICBzdHJ1Y3QgcmVxdWVzdF90cmFja2VyLCB0cmFja2VyX2xpc3QpOwogCXJlcXVlc3QtPmNiX2lkeCA9IGNiX2lkeDsKIAlzbWlkID0gcmVxdWVzdC0+c21pZDsKIAlsaXN0X2RlbCgmcmVxdWVzdC0+dHJhY2tlcl9saXN0KTsKQEAgLTEzMDAsMTAgKzEzODcsMzIgQEAKIG1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLmNiX2lkeCA9IDB4RkY7Ci0JbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0udHJhY2tlcl9saXN0LAorCWlmIChzbWlkID49IGlvYy0+aGlfcHJpb3JpdHlfc21pZCkgeworCQlpZiAoc21pZCA8IGlvYy0+aW50ZXJuYWxfc21pZCkgeworCQkJLyogaGktcHJpb3JpdHkgKi8KKwkJCWkgPSBzbWlkIC0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCQkJaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCQlsaXN0X2FkZF90YWlsKCZpb2MtPmhwcl9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkJICAgICZpb2MtPmhwcl9mcmVlX2xpc3QpOworCQl9IGVsc2UgeworCQkJLyogaW50ZXJuYWwgcXVldWUgKi8KKwkJCWkgPSBzbWlkIC0gaW9jLT5pbnRlcm5hbF9zbWlkOworCQkJaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJCSAgICAmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogc2NzaWlvIHF1ZXVlICovCisJaSA9IHNtaWQgLSAxOworCWlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOworCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAogCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzUyLDIxICsxNDYxLDE5IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyAtIHNlbmQgU0NTSV9JTyByZXF1ZXN0IHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCi0gICAgdTE2IGhhbmRsZSkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHUxNiBoYW5kbGUpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCiAJZGVzY3JpcHRvci5TQ1NJSU8uUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTzsKLQlkZXNjcmlwdG9yLlNDU0lJTy5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSUlPLk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLlNDU0lJTy5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5TQ1NJSU8uRGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAlkZXNjcmlwdG9yLlNDU0lJTy5MTUlEID0gMDsKQEAgLTEzNzksMjAgKzE0ODYsMTggQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eSAtIHNlbmQgVGFzayBNYW5hZ21lbnQgcmVxdWVzdCB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKLW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHU4IHZmX2lkKQorbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlcXVlc3RGbGFncyA9CiAJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFk7Ci0JZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LkxNSUQgPSAwOwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlJlc2VydmVkMSA9IDA7CkBAIC0xNDA0LDE4ICsxNTA5LDE3IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdCAtIERlZmF1bHQsIHByaW1hcmlseSB1c2VkIGZvciBjb25maWcgcGFnZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuRGVmYXVsdC5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEU7Ci0JZGVzY3JpcHRvci5EZWZhdWx0LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5EZWZhdWx0Lk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLkRlZmF1bHQuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuRGVmYXVsdC5MTUlEID0gMDsKIAlkZXNjcmlwdG9yLkRlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQgPSAwOwpAQCAtMTQyNywyMSArMTUzMSwyMCBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3QgLSBzZW5kIFRhcmdldCBBc3Npc3QvU3RhdHVzIHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBpb19pbmRleDogdmFsdWUgdXNlZCB0byB0cmFjayB0aGUgSU8KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCwgdTE2IGlvX2luZGV4KQorICAgIHUxNiBpb19pbmRleCkKIHsKIAlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CiAJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOwogCiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlJlcXVlc3RGbGFncyA9CiAJICAgIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfVEFSR0VUOwotCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuTE1JRCA9IDA7CiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LklvSW5kZXggPSBjcHVfdG9fbGUxNihpb19pbmRleCk7CkBAIC0xNzE3LDYgKzE4MjAsOCBAQAogCX0KIAogCWtmcmVlKGlvYy0+c2NzaV9sb29rdXApOworCWtmcmVlKGlvYy0+aHByX2xvb2t1cCk7CisJa2ZyZWUoaW9jLT5pbnRlcm5hbF9sb29rdXApOwogfQogCiAKQEAgLTE3MzYsNyArMTg0MSw2IEBACiAJdTE2IG51bV9vZl9yZXBseV9mcmFtZXM7CiAJdTE2IGNoYWluc19uZWVkZWRfcGVyX2lvOwogCXUzMiBzeiwgdG90YWxfc3o7Ci0JdTE2IGk7CiAJdTMyIHJldHJ5X3N6OwogCXUxNiBtYXhfcmVxdWVzdF9jcmVkaXQ7CiAKQEAgLTE3NjQsNyArMTg2OCwxMCBAQAogCQkgICAgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSkgPyBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDoKIAkJICAgIGZhY3RzLT5SZXF1ZXN0Q3JlZGl0OwogCX0KLQlpb2MtPnJlcXVlc3RfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQ7CisKKwlpb2MtPmhiYV9xdWV1ZV9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdDsKKwlpb2MtPmhpX3ByaW9yaXR5X2RlcHRoID0gZmFjdHMtPkhpZ2hQcmlvcml0eUNyZWRpdDsKKwlpb2MtPmludGVybmFsX2RlcHRoID0gaW9jLT5oaV9wcmlvcml0eV9kZXB0aCArIDU7CiAKIAkvKiByZXF1ZXN0IGZyYW1lIHNpemUgKi8KIAlpb2MtPnJlcXVlc3Rfc3ogPSBmYWN0cy0+SU9DUmVxdWVzdEZyYW1lU2l6ZSAqIDQ7CkBAIC0xODAyLDcgKzE5MDksNyBAQAogCWlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gPSBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKIAogCS8qIHJlcGx5IGZyZWUgcXVldWUgc2l6aW5nIC0gdGFraW5nIGludG8gYWNjb3VudCBmb3IgZXZlbnRzICovCi0JbnVtX29mX3JlcGx5X2ZyYW1lcyA9IGlvYy0+cmVxdWVzdF9kZXB0aCArIDMyOworCW51bV9vZl9yZXBseV9mcmFtZXMgPSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCArIDMyOwogCiAJLyogbnVtYmVyIG9mIHJlcGxpZXMgZnJhbWVzIGNhbid0IGJlIGEgbXVsdGlwbGUgb2YgMTYgKi8KIAkvKiBkZWNyZWFzZSBudW1iZXIgb2YgcmVwbHkgZnJhbWVzIGJ5IDEgKi8KQEAgLTE4MjMsNyArMTkzMCw3IEBACiAJICogZnJhbWVzCiAJICovCiAKLQlxdWV1ZV9zaXplID0gaW9jLT5yZXF1ZXN0X2RlcHRoICsgbnVtX29mX3JlcGx5X2ZyYW1lcyArIDE7CisJcXVldWVfc2l6ZSA9IGlvYy0+aGJhX3F1ZXVlX2RlcHRoICsgbnVtX29mX3JlcGx5X2ZyYW1lcyArIDE7CiAJLyogcm91bmQgdXAgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLwogCWlmIChxdWV1ZV9zaXplICUgMTYpCiAJCXF1ZXVlX3NpemUgKz0gMTYgLSAocXVldWVfc2l6ZSAlIDE2KTsKQEAgLTE4MzcsNjAgKzE5NDQsODUgQEAKIAkJaWYgKHF1ZXVlX2RpZmYgJSAxNikKIAkJCXF1ZXVlX2RpZmYgKz0gMTYgLSAocXVldWVfZGlmZiAlIDE2KTsKIAotCQkvKiBhZGp1c3QgcmVxdWVzdF9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKKwkJLyogYWRqdXN0IGhiYV9xdWV1ZV9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKIAkJICogYW5kIHF1ZXVlX3NpemUKIAkJICovCi0JCWlvYy0+cmVxdWVzdF9kZXB0aCAtPSBxdWV1ZV9kaWZmOworCQlpb2MtPmhiYV9xdWV1ZV9kZXB0aCAtPSBxdWV1ZV9kaWZmOwogCQlpb2MtPnJlcGx5X2ZyZWVfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKIAkJcXVldWVfc2l6ZSAtPSBxdWV1ZV9kaWZmOwogCX0KIAlpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggPSBxdWV1ZV9zaXplOwogCi0JLyogbWF4IHNjc2kgaG9zdCBxdWV1ZSBkZXB0aCAqLwotCWlvYy0+c2hvc3QtPmNhbl9xdWV1ZSA9IGlvYy0+cmVxdWVzdF9kZXB0aCAtIElOVEVSTkFMX0NNRFNfQ09VTlQ7Ci0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaSBob3N0IHF1ZXVlOiBkZXB0aCIKLQkgICAgIiglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlKSk7Ci0KIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY2F0dGVyIGdhdGhlcjogIgogCSAgICAic2dlX2luX21haW5fbXNnKCVkKSwgc2dlX3Blcl9jaGFpbiglZCksIHNnZV9wZXJfaW8oJWQpLCAiCiAJICAgICJjaGFpbnNfcGVyX2lvKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPm1heF9zZ2VzX2luX21haW5fbWVzc2FnZSwKIAkgICAgaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlLCBpb2MtPnNob3N0LT5zZ190YWJsZXNpemUsCiAJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKTsKIAorCWlvYy0+c2NzaWlvX2RlcHRoID0gaW9jLT5oYmFfcXVldWVfZGVwdGggLQorCSAgICBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoIC0gaW9jLT5pbnRlcm5hbF9kZXB0aDsKKworCS8qIHNldCB0aGUgc2NzaSBob3N0IGNhbl9xdWV1ZSBkZXB0aAorCSAqIHdpdGggc29tZSBpbnRlcm5hbCBjb21tYW5kcyB0aGF0IGNvdWxkIGJlIG91dHN0YW5kaW5nCisJICovCisJaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlID0gaW9jLT5zY3NpaW9fZGVwdGggLSAoMik7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaSBob3N0OiAiCisJICAgICJjYW5fcXVldWUgZGVwdGggKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNob3N0LT5jYW5fcXVldWUpKTsKKwogCS8qIGNvbnRpZ3VvdXMgcG9vbCBmb3IgcmVxdWVzdCBhbmQgY2hhaW5zLCAxNiBieXRlIGFsaWduLCBvbmUgZXh0cmEgIgogCSAqICJmcmFtZSBmb3Igc21pZD0wCiAJICovCi0JaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnJlcXVlc3RfZGVwdGg7Ci0Jc3ogPSAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEgKyBpb2MtPmNoYWluX2RlcHRoKSAqIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnNjc2lpb19kZXB0aDsKKwlzeiA9ICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlzeiArPSAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqIGlvYy0+cmVxdWVzdF9zeik7CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCXN6ICs9IChpb2MtPmludGVybmFsX2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KTsKIAogCWlvYy0+cmVxdWVzdF9kbWFfc3ogPSBzejsKIAlpb2MtPnJlcXVlc3QgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsIHN6LCAmaW9jLT5yZXF1ZXN0X2RtYSk7CiAJaWYgKCFpb2MtPnJlcXVlc3QpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVxdWVzdCBwb29sOiBwY2lfYWxsb2NfY29uc2lzdGVudCAiCi0JCSAgICAiZmFpbGVkOiByZXFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCi0JCSAgICAidG90YWwoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkJICAgICJmYWlsZWQ6IGhiYV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKKwkJICAgICJ0b3RhbCglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5oYmFfcXVldWVfZGVwdGgsCiAJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOwotCQlpZiAoaW9jLT5yZXF1ZXN0X2RlcHRoIDwgTVBUMlNBU19TQVNfUVVFVUVfREVQVEgpCisJCWlmIChpb2MtPnNjc2lpb19kZXB0aCA8IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIKQogCQkJZ290byBvdXQ7CiAJCXJldHJ5X3N6ICs9IDY0OwotCQlpb2MtPnJlcXVlc3RfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQgLSByZXRyeV9zejsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQgLSByZXRyeV9zejsKIAkJZ290byByZXRyeV9hbGxvY2F0aW9uOwogCX0KIAogCWlmIChyZXRyeV9zeikKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAicmVxdWVzdCBwb29sOiBwY2lfYWxsb2NfY29uc2lzdGVudCAiCi0JCSAgICAic3VjY2VlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgotCQkgICAgInRvdGFsKCVkIGtiKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICAic3VjY2VlZDogaGJhX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgorCQkgICAgInRvdGFsKCVkIGtiKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmhiYV9xdWV1ZV9kZXB0aCwKIAkJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8sIGlvYy0+cmVxdWVzdF9zeiwgc3ovMTAyNCk7CiAKLQlpb2MtPmNoYWluID0gaW9jLT5yZXF1ZXN0ICsgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqCisKKwkvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLworCWlvYy0+aGlfcHJpb3JpdHkgPSBpb2MtPnJlcXVlc3QgKyAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSkgKgogCSAgICBpb2MtPnJlcXVlc3Rfc3opOwotCWlvYy0+Y2hhaW5fZG1hID0gaW9jLT5yZXF1ZXN0X2RtYSArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCWlvYy0+aGlfcHJpb3JpdHlfZG1hID0gaW9jLT5yZXF1ZXN0X2RtYSArICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxKSAqCiAJICAgIGlvYy0+cmVxdWVzdF9zeik7CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCWlvYy0+aW50ZXJuYWwgPSBpb2MtPmhpX3ByaW9yaXR5ICsgKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+aW50ZXJuYWxfZG1hID0gaW9jLT5oaV9wcmlvcml0eV9kbWEgKyAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisKKwlpb2MtPmNoYWluID0gaW9jLT5pbnRlcm5hbCArIChpb2MtPmludGVybmFsX2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwlpb2MtPmNoYWluX2RtYSA9IGlvYy0+aW50ZXJuYWxfZG1hICsgKGlvYy0+aW50ZXJuYWxfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVxdWVzdCBwb29sKDB4JXApOiAiCiAJICAgICJkZXB0aCglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsCi0JICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5yZXF1ZXN0X2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osCi0JICAgICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKiBpb2MtPnJlcXVlc3Rfc3opLzEwMjQpKTsKKwkgICAgaW9jLT5yZXF1ZXN0LCBpb2MtPmhiYV9xdWV1ZV9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LAorCSAgICAoaW9jLT5oYmFfcXVldWVfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opLzEwMjQpKTsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjaGFpbiBwb29sKDB4JXApOiBkZXB0aCIKIAkgICAgIiglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+Y2hhaW4sCiAJICAgIGlvYy0+Y2hhaW5fZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwgKChpb2MtPmNoYWluX2RlcHRoICoKQEAgLTE4OTksNyArMjAzMSw3IEBACiAJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9jLT5yZXF1ZXN0X2RtYSkpOwogCXRvdGFsX3N6ICs9IHN6OwogCi0JaW9jLT5zY3NpX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5yZXF1ZXN0X2RlcHRoLAorCWlvYy0+c2NzaV9sb29rdXAgPSBrY2FsbG9jKGlvYy0+c2NzaWlvX2RlcHRoLAogCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOwogCWlmICghaW9jLT5zY3NpX2xvb2t1cCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJzY3NpX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCkBAIC0xOTA3LDEyICsyMDM5LDM4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCSAvKiBpbml0aWFsaXplIHNvbWUgYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykKLQkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zbWlkID0gaSArIDE7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NzaWlvKDB4JXApOiAiCisJICAgICJkZXB0aCglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0LAorCSAgICBpb2MtPnNjc2lpb19kZXB0aCkpOworCisJLyogaW5pdGlhbGl6ZSBoaS1wcmlvcml0eSBxdWV1ZSBzbWlkJ3MgKi8KKwlpb2MtPmhwcl9sb29rdXAgPSBrY2FsbG9jKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGgsCisJICAgIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF90cmFja2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPmhwcl9sb29rdXApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiaHByX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5oaV9wcmlvcml0eV9zbWlkID0gaW9jLT5zY3NpaW9fZGVwdGggKyAxOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImhpX3ByaW9yaXR5KDB4JXApOiAiCisJICAgICJkZXB0aCglZCksIHN0YXJ0IHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aGlfcHJpb3JpdHksCisJICAgIGlvYy0+aGlfcHJpb3JpdHlfZGVwdGgsIGlvYy0+aGlfcHJpb3JpdHlfc21pZCkpOworCisJLyogaW5pdGlhbGl6ZSBpbnRlcm5hbCBxdWV1ZSBzbWlkJ3MgKi8KKwlpb2MtPmludGVybmFsX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5pbnRlcm5hbF9kZXB0aCwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+aW50ZXJuYWxfbG9va3VwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImludGVybmFsX2xvb2t1cDoga2NhbGxvYyBmYWlsZWRcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaW9jLT5pbnRlcm5hbF9zbWlkID0gaW9jLT5oaV9wcmlvcml0eV9zbWlkICsgaW9jLT5oaV9wcmlvcml0eV9kZXB0aDsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpbnRlcm5hbCgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBzdGFydCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmludGVybmFsLAorCSAgICAgaW9jLT5pbnRlcm5hbF9kZXB0aCwgaW9jLT5pbnRlcm5hbF9zbWlkKSk7CiAKIAkvKiBzZW5zZSBidWZmZXJzLCA0IGJ5dGUgYWxpZ24gKi8KLQlzeiA9IGlvYy0+cmVxdWVzdF9kZXB0aCAqIFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwlzeiA9IGlvYy0+c2NzaWlvX2RlcHRoICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwogCWlvYy0+c2Vuc2VfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInNlbnNlIHBvb2wiLCBpb2MtPnBkZXYsIHN6LCA0LAogCSAgICAwKTsKIAlpZiAoIWlvYy0+c2Vuc2VfZG1hX3Bvb2wpIHsKQEAgLTE5MjksNyArMjA4Nyw3IEBACiAJfQogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgInNlbnNlIHBvb2woMHglcCk6IGRlcHRoKCVkKSwgZWxlbWVudF9zaXplKCVkKSwgcG9vbF9zaXplIgotCSAgICAiKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNlbnNlLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJICAgICIoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2Vuc2UsIGlvYy0+c2NzaWlvX2RlcHRoLAogCSAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIHN6LzEwMjQpKTsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5zZV9kbWEoMHglbGx4KVxuIiwKIAkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWlvYy0+c2Vuc2VfZG1hKSk7CkBAIC0yMzA0LDcgKzI0NjIsNyBAQAogCSAgICAoKHJlcXVlc3RfYnl0ZXMvNCk8PE1QSTJfRE9PUkJFTExfQUREX0RXT1JEU19TSElGVCkpLAogCSAgICAmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CiAKLQlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIHNsZWVwX2ZsYWcpKSkgeworCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgTk9fU0xFRVApKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJkb29yYmVsbCBoYW5kc2hha2UgIgogCQkgICAiaW50IGZhaWxlZCAobGluZT0lZClcbiIsIGlvYy0+bmFtZSwgX19MSU5FX18pOwogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NTQsNyArMjYxMiw4IEBACiAJaWYgKG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgfHwKIAkgICAgbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfTElOS19SRVNFVCkKIAkJaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcyA9IDE7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKIAkgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOwogCWlmICgobXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCB8fApAQCAtMjU1NSw3ICsyNzE0LDggQEAKIAlyZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKIAlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKIAltZW1jcHkocmVxdWVzdCwgbXBpX3JlcXVlc3QsIHNpemVvZihNcGkyU2VwUmVwbHlfdCkpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCiAJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKQEAgLTI3MDEsMTMgKzI4NjEsMTIgQEAKIC8qKgogICogX2Jhc2Vfc2VuZF9pb2NfaW5pdCAtIHNlbmQgaW9jX2luaXQgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2Vfc2VuZF9pb2NfaW5pdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK19iYXNlX3NlbmRfaW9jX2luaXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkySU9DSW5pdFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlNcGkySU9DSW5pdFJlcGx5X3QgbXBpX3JlcGx5OwpAQCAtMjcxOSw3ICsyODc4LDggQEAKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMklPQ0luaXRSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fSU9DX0lOSVQ7CiAJbXBpX3JlcXVlc3QuV2hvSW5pdCA9IE1QSTJfV0hPSU5JVF9IT1NUX0RSSVZFUjsKLQltcGlfcmVxdWVzdC5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LlZQX0lEID0gMDsKIAltcGlfcmVxdWVzdC5Nc2dWZXJzaW9uID0gY3B1X3RvX2xlMTYoTVBJMl9WRVJTSU9OKTsKIAltcGlfcmVxdWVzdC5IZWFkZXJWZXJzaW9uID0gY3B1X3RvX2xlMTYoTVBJMl9IRUFERVJfVkVSU0lPTik7CiAKQEAgLTI3OTUsMTMgKzI5NTUsMTIgQEAKIC8qKgogICogX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZSAtIHNlbmQgcG9ydF9lbmFibGUoZGlzY292ZXJ5IHN0dWZmKSB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9zZW5kX3BvcnRfZW5hYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQorX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCU1waTJQb3J0RW5hYmxlUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAl1MzIgaW9jX3N0YXRlOwpAQCAtMjgyOSw5ICsyOTg4LDExIEBACiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1BPUlRfRU5BQkxFOwotCW1waV9yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICAzMDAqSFopOwogCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewpAQCAtMjg5MiwxMyArMzA1MywxMiBAQAogLyoqCiAgKiBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24gLSBzZW5kIGV2ZW50IG5vdGlmaWNhdGlvbgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9ldmVudF9ub3RpZmljYXRpb24oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CkBAIC0yOTI2LDExICszMDg2LDEzIEBACiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT047Ci0JbXBpX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKQogCQltcGlfcmVxdWVzdC0+RXZlbnRNYXNrc1tpXSA9CiAJCSAgICBsZTMyX3RvX2NwdShpb2MtPmV2ZW50X21hc2tzW2ldKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsIDMwKkhaKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCkBAIC0yOTgxLDcgKzMxNDMsNyBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7Ci0JX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwlfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBDQU5fU0xFRVApOwogCW11dGV4X3VubG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwogfQogCkBAIC0zMDA2LDcgKzMxNjgsNiBAQAogCiAJZHJzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJjbGVhciBpbnRlcnJ1cHRzXG4iLAogCSAgICBpb2MtPm5hbWUpKTsKLQl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CiAKIAljb3VudCA9IDA7CiAJZG8gewpAQCAtMzE2MCwzMCArMzMyMSw2MCBAQAogLyoqCiAgKiBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbCAtIHB1dCBjb250cm9sbGVyIGluIE9QRVJBVElPTkFMIHN0YXRlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCWludCByLCBpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdTMyIHJlcGx5X2FkZHJlc3M7CisJdTE2IHNtaWQ7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyLCAqZGVsYXllZF90cl9uZXh0OwogCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwkvKiBjbGVhbiB0aGUgZGVsYXllZCB0YXJnZXQgcmVzZXQgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZWxheWVkX3RyLCBkZWxheWVkX3RyX25leHQsCisJICAgICZpb2MtPmRlbGF5ZWRfdHJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWtmcmVlKGRlbGF5ZWRfdHIpOworCX0KKwogCS8qIGluaXRpYWxpemUgdGhlIHNjc2kgbG9va3VwIGZyZWUgbGlzdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5mcmVlX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCXNtaWQgPSAxOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrLCBzbWlkKyspIHsKIAkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOwogCQlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKIAkJICAgICZpb2MtPmZyZWVfbGlzdCk7CiAJfQorCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5ocHJfZnJlZV9saXN0KTsKKwlzbWlkID0gaW9jLT5oaV9wcmlvcml0eV9zbWlkOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoOyBpKyssIHNtaWQrKykgeworCQlpb2MtPmhwcl9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJaW9jLT5ocHJfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlsaXN0X2FkZF90YWlsKCZpb2MtPmhwcl9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+aHByX2ZyZWVfbGlzdCk7CisJfQorCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCXNtaWQgPSBpb2MtPmludGVybmFsX3NtaWQ7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+aW50ZXJuYWxfZGVwdGg7IGkrKywgc21pZCsrKSB7CisJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnNtaWQgPSBzbWlkOworCQlsaXN0X2FkZF90YWlsKCZpb2MtPmludGVybmFsX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCSAgICAmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAogCS8qIGluaXRpYWxpemUgUmVwbHkgRnJlZSBRdWV1ZSAqLwpAQCAtMzE5Niw3ICszMzg3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoOyBpKyspCiAJCWlvYy0+cmVwbHlfcG9zdF9mcmVlW2ldLldvcmRzID0gVUxMT05HX01BWDsKIAotCXIgPSBfYmFzZV9zZW5kX2lvY19pbml0KGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9zZW5kX2lvY19pbml0KGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0zMjA3LDE0ICszMzk4LDE0IEBACiAJd3JpdGVsKDAsICZpb2MtPmNoaXAtPlJlcGx5UG9zdEhvc3RJbmRleCk7CiAKIAlfYmFzZV91bm1hc2tfaW50ZXJydXB0cyhpb2MpOwotCXIgPSBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKIAkJX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyhpb2MpOwogCi0JciA9IF9iYXNlX3NlbmRfcG9ydF9lbmFibGUoaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX3NlbmRfcG9ydF9lbmFibGUoaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTMyNzgsNiArMzQ2OSwxNyBAQAogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIAorCWlvYy0+cGZhY3RzID0ga2NhbGxvYyhpb2MtPmZhY3RzLk51bWJlck9mUG9ydHMsCisJICAgIHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5wZmFjdHMpCisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCisJZm9yIChpID0gMCA7IGkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGkrKykgeworCQlyID0gX2Jhc2VfZ2V0X3BvcnRfZmFjdHMoaW9jLCBpLCBDQU5fU0xFRVApOworCQlpZiAocikKKwkJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOworCX0KKwogCXIgPSBfYmFzZV9hbGxvY2F0ZV9tZW1vcnlfcG9vbHMoaW9jLCBDQU5fU0xFRVApOwogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKQEAgLTMyODYsNyArMzQ4OCw2IEBACiAKIAkvKiBiYXNlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCW11dGV4X2luaXQoJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIApAQCAtMzI5NCw3ICszNDk1LDYgQEAKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X2luaXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAogCS8qIHRhc2sgbWFuYWdlbWVudCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAlpb2MtPnRtX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwpAQCAtMzMxMCw3ICszNTEwLDYgQEAKIAlpb2MtPmN0bF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPmN0bF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X2luaXQoJmlvYy0+Y3RsX2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykKIAkJaW9jLT5ldmVudF9tYXNrc1tpXSA9IC0xOwpAQCAtMzMyNywxOCArMzUyNiw3IEBACiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUyk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTCk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEKTsKLQotCWlvYy0+cGZhY3RzID0ga2NhbGxvYyhpb2MtPmZhY3RzLk51bWJlck9mUG9ydHMsCi0JICAgIHNpemVvZihNcGkyUG9ydEZhY3RzUmVwbHlfdCksIEdGUF9LRVJORUwpOwotCWlmICghaW9jLT5wZmFjdHMpCi0JCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwotCi0JZm9yIChpID0gMCA7IGkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGkrKykgewotCQlyID0gX2Jhc2VfZ2V0X3BvcnRfZmFjdHMoaW9jLCBpLCBDQU5fU0xFRVApOwotCQlpZiAocikKLQkJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwotCX0KLQlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCAwLCBDQU5fU0xFRVApOworCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIENBTl9TTEVFUCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCkBAIC0zNDY2LDcgKzM2NTQsNyBAQAogCiAJLyogcGVuZGluZyBjb21tYW5kIGNvdW50ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKykKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ICE9IDB4RkYpCiAJCQlpb2MtPnBlbmRpbmdfaW9fY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKQEAgLTM0OTAsNyArMzY3OCw3IEBACiBtcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcsCiAgICAgZW51bSByZXNldF90eXBlIHR5cGUpCiB7Ci0JaW50IHIsIGk7CisJaW50IHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCkBAIC0zNTEzLDkgKzM3MDEsNyBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfQUZURVJfUkVTRVQpOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspCi0JCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIGlvYy0+cGZhY3RzW2ldLlZGX0lELAotCQkgICAgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCAyZmFhYjFlLi4wY2Y2YmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtMyw3ICszLDcgQEAKICAqIGZvciBhY2Nlc3MgdG8gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5oCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTY5LDEwICs2OSwxMCBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAxLjEwMC4wNi4wMCIKLSNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMQorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDIuMTAwLjAzLjAwIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAyCiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCi0jZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDYKKyNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMwogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKQEAgLTI2NCw2ICsyNjQsMTMgQEAKICAqIFNBUyBUb3BvbG9neSBTdHJ1Y3R1cmVzCiAgKi8KIAorI2RlZmluZSBNUFRTQVNfU1RBVEVfVFJfU0VORAkJMHgwMDAxCisjZGVmaW5lIE1QVFNBU19TVEFURV9UUl9DT01QTEVURQkweDAwMDIKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX0NOVFJMX1NFTkQJCTB4MDAwNAorI2RlZmluZSBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEUJMHgwMDA4CisKKyNkZWZpbmUgTVBUMlNBU19SRVFfU0FTX0NOVFJMCQkweDAwMTAKKwogLyoqCiAgKiBzdHJ1Y3QgX3Nhc19kZXZpY2UgLSBhdHRhY2hlZCBkZXZpY2UgaW5mb3JtYXRpb24KICAqIEBsaXN0OiBzYXMgZGV2aWNlIGxpc3QKQEAgLTMwMCw2ICszMDcsNyBAQAogCXUxNglzbG90OwogCXU4CWhpZGRlbl9yYWlkX2NvbXBvbmVudDsKIAl1OAlyZXNwb25kaW5nOworCXUxNglzdGF0ZTsKIH07CiAKIC8qKgpAQCAtNDM2LDYgKzQ0NCwxNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2tlcl9saXN0OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgX3RyX2xpc3QgLSB0YXJnZXQgcmVzZXQgbGlzdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQHN0YXRlOiBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0cnVjdCBfdHJfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUxNgloYW5kbGU7CisJdTE2CXN0YXRlOworfTsKKwogdHlwZWRlZiB2b2lkICgqTVBUX0FERF9TR0UpKHZvaWQgKnBhZGRyLCB1MzIgZmxhZ3NfbGVuZ3RoLCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKIAogLyoqCkBAIC01MTAsOCArNTI5LDkgQEAKICAqIEBjb25maWdfcGFnZV9zejogY29uZmlnIHBhZ2Ugc2l6ZQogICogQGNvbmZpZ19wYWdlOiByZXNlcnZlIG1lbW9yeSBmb3IgY29uZmlnIHBhZ2UgcGF5bG9hZAogICogQGNvbmZpZ19wYWdlX2RtYToKKyAqIEBoYmFfcXVldWVfZGVwdGg6IGhiYSByZXF1ZXN0IHF1ZXVlIGRlcHRoCiAgKiBAc2dlX3NpemU6IHNnIGVsZW1lbnQgc2l6ZSBmb3IgZWl0aGVyIDMyLzY0IGJpdAotICogQHJlcXVlc3RfZGVwdGg6IGhiYSByZXF1ZXN0IHF1ZXVlIGRlcHRoCisgKiBAc2NzaWlvX2RlcHRoOiBTQ1NJX0lPIHF1ZXVlIGRlcHRoCiAgKiBAcmVxdWVzdF9zejogcGVyIHJlcXVlc3QgZnJhbWUgc2l6ZQogICogQHJlcXVlc3Q6IHBvb2wgb2YgcmVxdWVzdCBmcmFtZXMKICAqIEByZXF1ZXN0X2RtYToKQEAgLTUyOCw2ICs1NDgsMTggQEAKICAqIEBjaGFpbnNfbmVlZGVkX3Blcl9pbzogbWF4IGNoYWlucyBwZXIgaW8KICAqIEBjaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTogbG9jYXRpb24gMXN0IHNnIGluIG1haW4KICAqIEBjaGFpbl9kZXB0aDogdG90YWwgY2hhaW5zIGFsbG9jYXRlZAorICogQGhpX3ByaW9yaXR5X3NtaWQ6CisgKiBAaGlfcHJpb3JpdHk6CisgKiBAaGlfcHJpb3JpdHlfZG1hOgorICogQGhpX3ByaW9yaXR5X2RlcHRoOgorICogQGhwcl9sb29rdXA6CisgKiBAaHByX2ZyZWVfbGlzdDoKKyAqIEBpbnRlcm5hbF9zbWlkOgorICogQGludGVybmFsOgorICogQGludGVybmFsX2RtYToKKyAqIEBpbnRlcm5hbF9kZXB0aDoKKyAqIEBpbnRlcm5hbF9sb29rdXA6CisgKiBAaW50ZXJuYWxfZnJlZV9saXN0OgogICogQHNlbnNlOiBwb29sIG9mIHNlbnNlCiAgKiBAc2Vuc2VfZG1hOgogICogQHNlbnNlX2RtYV9wb29sOgpAQCAtNTk3LDYgKzYyOSw4IEBACiAJdTgJCWN0bF9jYl9pZHg7CiAJdTgJCWJhc2VfY2JfaWR4OwogCXU4CQljb25maWdfY2JfaWR4OworCXU4CQl0bV90cl9jYl9pZHg7CisJdTgJCXRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCBiYXNlX2NtZHM7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgdHJhbnNwb3J0X2NtZHM7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgdG1fY21kczsKQEAgLTY0Myw5ICs2NzcsMTAgQEAKIAl2b2lkIAkJKmNvbmZpZ19wYWdlOwogCWRtYV9hZGRyX3QJY29uZmlnX3BhZ2VfZG1hOwogCi0JLyogcmVxdWVzdCAqLworCS8qIHNjc2lpbyByZXF1ZXN0ICovCisJdTE2CQloYmFfcXVldWVfZGVwdGg7CiAJdTE2CQlzZ2Vfc2l6ZTsKLQl1MTYgCQlyZXF1ZXN0X2RlcHRoOworCXUxNiAJCXNjc2lpb19kZXB0aDsKIAl1MTYJCXJlcXVlc3Rfc3o7CiAJdTgJCSpyZXF1ZXN0OwogCWRtYV9hZGRyX3QJcmVxdWVzdF9kbWE7CkBAIC02NjUsNiArNzAwLDIyIEBACiAJdTE2CQljaGFpbl9vZmZzZXRfdmFsdWVfZm9yX21haW5fbWVzc2FnZTsKIAl1MTYJCWNoYWluX2RlcHRoOwogCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwl1MTYJCWhpX3ByaW9yaXR5X3NtaWQ7CisJdTgJCSpoaV9wcmlvcml0eTsKKwlkbWFfYWRkcl90CWhpX3ByaW9yaXR5X2RtYTsKKwl1MTYJCWhpX3ByaW9yaXR5X2RlcHRoOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKmhwcl9sb29rdXA7CisJc3RydWN0IGxpc3RfaGVhZCBocHJfZnJlZV9saXN0OworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwl1MTYJCWludGVybmFsX3NtaWQ7CisJdTgJCSppbnRlcm5hbDsKKwlkbWFfYWRkcl90CWludGVybmFsX2RtYTsKKwl1MTYJCWludGVybmFsX2RlcHRoOworCXN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgKmludGVybmFsX2xvb2t1cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGludGVybmFsX2ZyZWVfbGlzdDsKKwogCS8qIHNlbnNlICovCiAJdTgJCSpzZW5zZTsKIAlkbWFfYWRkcl90CXNlbnNlX2RtYTsKQEAgLTY5MCw2ICs3NDEsOCBAQAogCXN0cnVjdCBkbWFfcG9vbCAqcmVwbHlfcG9zdF9mcmVlX2RtYV9wb29sOwogCXUzMgkJcmVwbHlfcG9zdF9ob3N0X2luZGV4OwogCisJc3RydWN0IGxpc3RfaGVhZCBkZWxheWVkX3RyX2xpc3Q7CisKIAkvKiBkaWFnIGJ1ZmZlciBzdXBwb3J0ICovCiAJdTgJCSpkaWFnX2J1ZmZlcltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwogCXUzMgkJZGlhZ19idWZmZXJfc3pbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKQEAgLTcwMSw3ICs3NTQsNyBAQAogCXUzMgkJZGlhZ25vc3RpY19mbGFnc1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwogfTsKIAotdHlwZWRlZiB2b2lkICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK3R5cGVkZWYgdTggKCpNUFRfQ0FMTEJBQ0spKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KTsKIAogCkBAIC03MjAsMjIgKzc3MywyOCBAQAogdm9pZCAqbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHZvaWQgKnBhZGRyKTsKLWRtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwotZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CitkbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTE2IHNtaWQpOworCisvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLwordTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpOwordTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgsCisgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCk7CiAKIHUxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpOwogdm9pZCBtcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwotdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCwKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKICAgICB1MTYgaGFuZGxlKTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKTsKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfdGFyZ2V0X2Fzc2lzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHU4IHZmX2lkLCB1MTYgaW9faW5kZXgpOwotdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7CisgICAgdTE2IGlvX2luZGV4KTsKK3ZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIodm9pZCk7CiB1OCBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihNUFRfQ0FMTEJBQ0sgY2JfZnVuYyk7CiB2b2lkIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodTggY2JfaWR4KTsKIAotdm9pZCBtcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIHBoeXNfYWRkcik7CiAKIHUzMiBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IGNvb2tlZCk7CkBAIC03NDksNiArODA4LDggQEAKIHZvaWQgbXB0MnNhc19iYXNlX3ZhbGlkYXRlX2V2ZW50X3R5cGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgKmV2ZW50X3R5cGUpOwogCiAvKiBzY3NpaCBzaGFyZWQgQVBJICovCit1OCBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX3Njc2loX2lzc3VlX3RtKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdWludCBsdW4sCiAgICAgdTggdHlwZSwgdTE2IHNtaWRfdGFzaywgdWxvbmcgdGltZW91dCk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKTsKQEAgLTc2MCwxMSArODIxLDExIEBACiBzdHJ1Y3QgX3Nhc19kZXZpY2UgKm1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKAogICAgIHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKIAotdm9pZCBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7CiAKIC8qIGNvbmZpZyBzaGFyZWQgQVBJICovCi12b2lkIG1wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggKm51bV9waHlzKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCAqY29uZmlnX3BhZ2UpOwpAQCAtODE3LDE0ICs4NzgsMTcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19kZXZfYXR0cnNbXTsKIHZvaWQgbXB0MnNhc19jdGxfaW5pdCh2b2lkKTsKIHZvaWQgbXB0MnNhc19jdGxfZXhpdCh2b2lkKTsKLXZvaWQgbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX2N0bF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKTsKLXZvaWQgbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX2N0bF9hZGRfdG9fZXZlbnRfbG9nKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHkpOwogCiAvKiB0cmFuc3BvcnQgc2hhcmVkIEFQSSAqLwotdm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiBzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgdTE2IGhhbmRsZSwgdTE2IHBhcmVudF9oYW5kbGUpOwogdm9pZCBtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcywKQEAgLTgzOCw2ICs5MDIsOCBAQAogZXh0ZXJuIHN0cnVjdCBzYXNfZnVuY3Rpb25fdGVtcGxhdGUgbXB0MnNhc190cmFuc3BvcnRfZnVuY3Rpb25zOwogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CiBleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX2Jsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitleHRlcm4gdTggbXB0MnNhc19zdG1femVyb19zbWlkX2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSk7CiBleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX3VuYmxvY2soc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIAogI2VuZGlmIC8qIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwppbmRleCBhYjhjNTYwOC4uNTk0YTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29tbW9uIEFQSSBmb3IgYWNjZXNzaW5nIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gcGFnZXMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjI3LDIzICsyMjcsMjUgQEAKICAqIG1wdDJzYXNfY29uZmlnX2RvbmUgLSBjb25maWcgcGFnZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBfY29uZmlnX3JlcXVlc3QuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC0yNTcsNiArMjU5LDcgQEAKICNlbmRpZgogCWlvYy0+Y29uZmlnX2NtZHMuc21pZCA9IFVTSE9SVF9NQVg7CiAJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzAzLDYgKzMwNiw5IEBACiAJcmV0cnlfY291bnQgPSAwOwogCW1lbXNldCgmbWVtLCAwLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19yZXF1ZXN0KSk7CiAKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKKwogCWlmIChjb25maWdfcGFnZSkgewogCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CiAJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CkBAIC0zODAsNyArMzg2LDcgQEAKIAlfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1Zyhpb2MsIHNtaWQsICJjb25maWdfcmVxdWVzdCIsIE5VTEwpOwogI2VuZGlmCiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgY29uZmlnX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUsCiAJICAgIHRpbWVvdXQqSFopOwogCWlmICghKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCBjMmE1MTAxLi41N2Q3MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTMsNyArMyw3IEBACiAgKiBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxOSwyMyArMjE5LDI1IEBACiAgKiBtcHQyc2FzX2N0bF9kb25lIC0gY3RsIG1vZHVsZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBpb2MtPmN0bF9jYl9pZHguCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y3RsX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y3RsX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTI0Nyw2ICsyNDksNyBAQAogI2VuZGlmCiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzI4LDIyICszMzEsMjUgQEAKIC8qKgogICogbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhpb2MsIG1waV9yZXBseSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtNTA3LDcgKzUxMyw3IEBACiAKIAloYW5kbGUgPSBsZTE2X3RvX2NwdSh0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSBpb2MtPnJlcXVlc3RfZGVwdGg7IGkgJiYgIWZvdW5kOyBpLS0pIHsKKwlmb3IgKGkgPSBpb2MtPnNjc2lpb19kZXB0aDsgaSAmJiAhZm91bmQ7IGktLSkgewogCQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtpIC0gMV0uc2NtZDsKIAkJaWYgKHNjbWQgPT0gTlVMTCB8fCBzY21kLT5kZXZpY2UgPT0gTlVMTCB8fAogCQkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YSA9PSBOVUxMKQpAQCAtNjE0LDcgKzYyMCw3IEBACiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaW9jIGlzIG9wZXJhdGlvbmFsXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jdGxfY2JfaWR4KTsKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+Y3RsX2NiX2lkeCwgTlVMTCk7CiAJaWYgKCFzbWlkKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwpAQCAtNzM3LDcgKzc0Myw3IEBACiAJCSAgICAodTMyKW1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShpb2MsIHNtaWQpOwogCQlwcml2X3NlbnNlID0gbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoaW9jLCBzbWlkKTsKIAkJbWVtc2V0KHByaXZfc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwgMCwKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLAogCQkgICAgbGUxNl90b19jcHUobXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSkpOwogCQlicmVhazsKIAl9CkBAIC03NTksOCArNzY1LDcgQEAKIAkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKIAkJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGxlMTZfdG9fY3B1KAogCQkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlKSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsCi0JCSAgICBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g6CkBAIC03ODEsNyArNzg2LDcgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgpAQCAtNzk1LDExICs4MDAsMTEgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCkBAIC04MDcsNiArODEyLDcgQEAKIAkJdGltZW91dCA9IE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUOwogCWVsc2UKIAkJdGltZW91dCA9IGthcmcudGltZW91dDsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgdGltZW91dCpIWik7CiAJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKSB7CkBAIC0xMzcxLDYgKzEzNzcsOCBAQAogCW1waV9yZXF1ZXN0LT5GbGFncyA9IGNwdV90b19sZTMyKGthcmcuZGlhZ25vc3RpY19mbGFncyk7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlckFkZHJlc3MgPSBjcHVfdG9fbGU2NChyZXF1ZXN0X2RhdGFfZG1hKTsKIAltcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIocmVxdWVzdF9kYXRhX3N6KTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAogCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlcigweCVwKSwgIgogCSAgICAiZG1hKDB4JWxseCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmVxdWVzdF9kYXRhLApAQCAtMTM4MCw3ICsxMzg4LDggQEAKIAkJbXBpX3JlcXVlc3QtPlByb2R1Y3RTcGVjaWZpY1tpXSA9CiAJCQljcHVfdG9fbGUzMihpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdW2ldKTsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE2NDMsOCArMTY1MiwxMSBAQAogCiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0U7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBidWZmZXJfdHlwZTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE5MDIsOCArMTkxNCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCiAJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQogCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOwogCkBAIC0yMDY5LDYgKzIwODQsNyBAQAogX2N0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyByZXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCXJldCA9IF9jdGxfaW9jdGxfbWFpbihmaWxlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMjE0Myw2ICsyMTU5LDcgQEAKIF9jdGxfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWxvbmcgcmV0OworCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoY21kID09IE1QVDJDT01NQU5EMzIpCiAJCXJldCA9IF9jdGxfY29tcGF0X21wdF9jb21tYW5kKGZpbGUsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCmluZGV4IDRkYTExNDMuLjIxMWYyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApAQCAtMyw3ICszLDcgQEAKICAqIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmgKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCmluZGV4IGFkMzI1MDkuLjUzMDhhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBMb2dnaW5nIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfZGVidWcuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggNzc0YjM0NS4uODZhYjMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtMiw3ICsyLDcgQEAKICAqIFNjc2kgSG9zdCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9zY3NpaC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTc5LDYgKzc5LDkgQEAKIHN0YXRpYyB1OCBjb25maWdfY2JfaWR4ID0gLTE7CiBzdGF0aWMgaW50IG1wdF9pZHM7CiAKK3N0YXRpYyB1OCB0bV90cl9jYl9pZHggPSAtMSA7CitzdGF0aWMgdTggdG1fc2FzX2NvbnRyb2xfY2JfaWR4ID0gLTE7CisKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCiBzdGF0aWMgdTMyIGxvZ2dpbmdfbGV2ZWw7CiBNT0RVTEVfUEFSTV9ERVNDKGxvZ2dpbmdfbGV2ZWwsICIgYml0cyBmb3IgZW5hYmxpbmcgYWRkaXRpb25hbCBsb2dnaW5nIGluZm8gIgpAQCAtMTA5LDYgKzExMiw3IEBACiAgKiBAd29yazogd29yayBvYmplY3QgKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xKQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCiAgKiBAaG9zdF9yZXNldF9oYW5kbGluZzogaGFuZGxpbmcgZXZlbnRzIGR1cmluZyBob3N0IHJlc2V0CiAgKiBAaWdub3JlOiBmbGFnIG1lYW5pbmcgdGhpcyBldmVudCBoYXMgYmVlbiBtYXJrZWQgdG8gaWdub3JlCiAgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50IE1QSTJfRVZFTlRfWFhYIGRlZmluZWQgaW4gbXB0Ml9pb2MuaApAQCAtMTIxLDYgKzEyNSw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOwogCXU4CQkJVkZfSUQ7CisJdTgJCQlWUF9JRDsKIAl1OAkJCWhvc3RfcmVzZXRfaGFuZGxpbmc7CiAJdTgJCQlpZ25vcmU7CiAJdTE2CQkJZXZlbnQ7CkBAIC0xMzgsOCArMTQzLDEwIEBACiAgKiBAbHVuOiBsdW4gbnVtYmVyCiAgKiBAY2RiX2xlbmd0aDogY2RiIGxlbmd0aAogICogQGNkYjogY2RiIGNvbnRlbnRzCi0gKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAdGltZW91dDogdGltZW91dCBmb3IgdGhpcyBjb21tYW5kCisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCisgKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAc2Vuc2VfbGVuZ3RoOiBzZW5zZSBsZW5ndGgKICAqIEBpb2Nfc3RhdHVzOiBpb2Mgc3RhdHVzCiAgKiBAc2NzaV9zdGF0ZTogc2NzaSBzdGF0ZQpAQCAtMTYxLDYgKzE2OCw4IEBACiAJdTgJY2RiX2xlbmd0aDsKIAl1OAljZGJbMzJdOwogCXU4CXRpbWVvdXQ7CisJdTgJVkZfSUQ7CisJdTgJVlBfSUQ7CiAJdTgJdmFsaWRfcmVwbHk7CiAgIC8qIHRoZSBmb2xsb3dpbmcgYml0cyBhcmUgb25seSB2YWxpZCB3aGVuICd2YWxpZF9yZXBseSA9IDEnICovCiAJdTMyCXNlbnNlX2xlbmd0aDsKQEAgLTc1Niw2NiArNzY1LDE2IEBACiB9CiAKIC8qKgotICogX3Njc2loX3Njc2lfbG9va3VwX2dldCAtIHJldHVybnMgc2NtZCBlbnRyeQorICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCiAgKgogICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgogICovCiBzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXJldHVybiBzY21kOwotfQotCi0vKioKLSAqIG1wdHNjc2loX2dldGNsZWFyX3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCi0gKgotICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLCBhcyB3ZWxsIGFzIGNsZWFyaW5nIHRoZSBzY21kIHBvaW50ZXIuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKLV9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2NtZDsKLX0KLQotLyoqCi0gKiBfc2NzaWhfc2NzaV9sb29rdXBfc2V0IC0gdXBkYXRlcyBzY21kIGVudHJ5IGluIGxvb2t1cAotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAotICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgotICoKLSAqIFRoaXMgd2lsbCBzYXZlIHNjbWQgcG9pbnRlciBpbiB0aGUgc2NzaV9sb29rdXAgYXJyYXkuCi0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfc2NzaV9sb29rdXBfc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBzY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwogfQogCiAvKioKQEAgLTgzOCw5ICs3OTcsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCXNtaWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPT0gc2NtZCkgewotCQkJc21pZCA9IGkgKyAxOworCQkJc21pZCA9IGlvYy0+c2NzaV9sb29rdXBbaV0uc21pZDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtODY5LDcgKzgyOCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJZm91bmQgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspIHsKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCAmJgogCQkgICAgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5pZCA9PSBpZCAmJgogCQkgICAgaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCkpIHsKQEAgLTkwMyw3ICs4NjIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWZvdW5kID0gMDsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJZm9yIChpID0gMCA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgJiYKIAkJICAgIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+aWQgPT0gaWQgJiYKIAkJICAgIGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5jaGFubmVsID09IGNoYW5uZWwgJiYKQEAgLTExMTMsNyArMTA3Miw3IEBACiB9CiAKIC8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQorICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQogICoKQEAgLTE2NzksMjMgKzE2MzgsMjQgQEAKICAqIF9zY3NpaF90bV9kb25lIC0gdG0gY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBub25lLgogICoKICAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfaXNzdWVfdG0uCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPnRtX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTE3MDQsNiArMTY2NCw3IEBACiAJfQogCWlvYy0+dG1fY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0xNzkwLDcgKzE3NTEsNiBAQAogCXUxNiBzbWlkID0gMDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7Ci0JdTggVkZfSUQgPSAwOwogCiAJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB0bV9jbWQgYnVzeSEhIVxuIiwKQEAgLTE4MTcsNyArMTc3Nyw3IEBACiAJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKIAl9CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT50bV9jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV9jYl9pZHgpOwogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTE4MjUsNyArMTc4NSw4IEBACiAJfQogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgdG06IGhhbmRsZSgweCUwNHgpLCIKLQkgICAgIiB0YXNrX3R5cGUoMHglMDJ4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlLCB0eXBlLCBzbWlkKSk7CisJICAgICIgdGFza190eXBlKDB4JTAyeCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgdHlwZSwKKwkgICAgc21pZF90YXNrKSk7CiAJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CiAJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwogCWlvYy0+dG1fY21kcy5zbWlkID0gc21pZDsKQEAgLTE4MzQsMTAgKzE3OTUsMTIgQEAKIAltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAltcGlfcmVxdWVzdC0+VGFza1R5cGUgPSB0eXBlOwogCW1waV9yZXF1ZXN0LT5UYXNrTUlEID0gY3B1X3RvX2xlMTYoc21pZF90YXNrKTsKKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOyAgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7CiAJaW50X3RvX3Njc2lsdW4obHVuLCAoc3RydWN0IHNjc2lfbHVuICopbXBpX3JlcXVlc3QtPkxVTik7CiAJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRtX2NtZHMuZG9uZSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRtX2NtZHMuZG9uZSwgdGltZW91dCpIWik7CiAJbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKGlvYywgaGFuZGxlKTsKIAlpZiAoIShpb2MtPnRtX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yMDc1LDcgKzIwMzgsNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9hYm9ydCAtIGVoIHRocmVhZHMgbWFpbiBob3N0IHJlc2V0IHJvdXRpbmUKKyAqIF9zY3NpaF9ob3N0X3Jlc2V0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKQEAgLTIzNTQsNiArMjMxNywyMzEgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfdG1fdHJfc2VuZCAtIHNlbmQgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBjb2RlIGlzIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbCBoYW5kc2hha2UgcHJvdG9jYWwKKyAqIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSB0YXJnZXQgcmVzZXQKKyAqIHVzaW5nIGhpZ2ggcHJpb3JpdHkgcmVxdWVzdCBxdWV1ZS4gIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQKKyAqIGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpIGZyb20gdGhpcyBjb21wbGV0aW9uLgorICoKKyAqIFRoaXMgaXMgZGVzaWduZWQgdG8gc2VuZCBtdWxpcGxlIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IGF0IHRoZSBzYW1lCisgKiB0aW1lIHRvIHRoZSBmaWZvLiBJZiB0aGUgZmlmbyBpcyBmdWxsLCB3ZSB3aWxsIGFwcGVuZCB0aGUgcmVxdWVzdCwKKyAqIGFuZCBwcm9jZXNzIGl0IGluIGEgZnV0dXJlIGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdG1fdHJfc2VuZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwl1MTYgc21pZDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHI7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwkvKiBza2lwIGlzIGhpZGRlbiByYWlkIGNvbXBvbmVudCAqLworCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpCisJCXJldHVybjsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV90cl9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlkZWxheWVkX3RyID0ga3phbGxvYyhzaXplb2YoKmRlbGF5ZWRfdHIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkZWxheWVkX3RyKQorCQkJcmV0dXJuOworCQlJTklUX0xJU1RfSEVBRCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWRlbGF5ZWRfdHItPmhhbmRsZSA9IGhhbmRsZTsKKwkJZGVsYXllZF90ci0+c3RhdGUgPSBNUFQyU0FTX1JFUV9TQVNfQ05UUkw7CisJCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWRfdHItPmxpc3QsCisJCSAgICAmaW9jLT5kZWxheWVkX3RyX2xpc3QpOworCQlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sCisJCQkgICAgc2FzX2RldmljZS0+c3RhcmdldCwgIkRFTEFZRUQ6dHI6aGFuZGxlKDB4JTA0eCksICIKKwkJCSAgICAiKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5ID0gMTsKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cjpoYW5kbGUoMHglMDR4KSwgKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJbXBpX3JlcXVlc3QtPlRhc2tUeXBlID0gTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VUOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9UUl9TRU5EOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVDJTQVNfUkVRX1NBU19DTlRSTDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKK30KKworCisKKy8qKgorICogX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlIC0gY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBpcyB0aGUgc2FzIGlvdW5pdCBjb250cm9sbCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90ICptcGlfcmVwbHkgPQorCSAgICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZmluZGluZyBzYXNfZGV2aWNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOworCX0KKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkgICAgInNjX2NvbXBsZXRlOmhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCisJCSAgICBoYW5kbGUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpKTsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBfc2NzaWhfdG1fdHJfY29tcGxldGUgLQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdCB0aW1lLgorICoKKyAqIFRoaXMgaXMgdGhlIHRhcmdldCByZXNldCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKiBJdCB3aWxsIHNlbmQgYSBzYXMgaW91bml0IGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3RtX3RyX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseSA9CisJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwl1MTYgc21pZF9zYXNfY3RybDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90cjsKKwl1OCByYzsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX1RSX0NPTVBMRVRFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cl9jb21wbGV0ZTpoYW5kbGUoMHglMDR4KSwgKCVzKSBpb2Nfc3RhdHVzKDB4JTA0eCksICIKKwkJICAgICJsb2dpbmZvKDB4JTA4eCksIGNvbXBsZXRlZCglZClcbiIsCisJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsIChzYXNfZGV2aWNlLT5zdGF0ZSAmCisJCSAgICBNUFQyU0FTX1JFUV9TQVNfQ05UUkwpID8gIm9wZW4iIDogImFjdGl2ZSIsCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5UZXJtaW5hdGlvbkNvdW50KSkpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQgJiYgc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmaW9jLT5kZWxheWVkX3RyX2xpc3QpKSB7CisJCWRlbGF5ZWRfdHIgPSBsaXN0X2VudHJ5KGlvYy0+ZGVsYXllZF90cl9saXN0Lm5leHQsCisJCSAgICBzdHJ1Y3QgX3RyX2xpc3QsIGxpc3QpOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWlmIChkZWxheWVkX3RyLT5zdGF0ZSAmIE1QVDJTQVNfUkVRX1NBU19DTlRSTCkKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgZGVsYXllZF90ci0+aGFuZGxlKTsKKwkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlrZnJlZShkZWxheWVkX3RyKTsKKwkJcmMgPSAwOyAvKiB0ZWxscyBiYXNlX2ludGVycnVwdCBub3QgdG8gZnJlZSBtZiAqLworCX0gZWxzZQorCQlyYyA9IDE7CisKKworCWlmICghKHNhc19kZXZpY2UtPnN0YXRlICYgTVBUMlNBU19SRVFfU0FTX0NOVFJMKSkKKwkJcmV0dXJuIHJjOworCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc21pZF9zYXNfY3RybCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwlpZiAoIXNtaWRfc2FzX2N0cmwpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiByYzsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZF9zYXNfY3RybCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IG1waV9yZXBseS0+RGV2SGFuZGxlOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9DTlRSTF9TRU5EOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZF9zYXNfY3RybCk7CisJcmV0dXJuIHJjOworfQorCisvKioKICAqIF9zY3NpaF9jaGVja190b3BvX2RlbGV0ZV9ldmVudHMgLSBzYW5pdHkgY2hlY2sgb24gdG9wbyBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGV2ZW50X2RhdGE6IHRoZSBldmVudCBkYXRhIHBheWxvYWQKQEAgLTIzNzUsNiArMjU2MywyMSBAQAogCXUxNiBleHBhbmRlcl9oYW5kbGU7CiAJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJlYXNvbl9jb2RlOworCXUxNiBoYW5kbGU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgeworCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCisJCQljb250aW51ZTsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORykKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgaGFuZGxlKTsKKwl9CiAKIAlleHBhbmRlcl9oYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSk7CiAJaWYgKGV4cGFuZGVyX2hhbmRsZSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cykgewpAQCAtMjQzMyw4ICsyNjM2LDggQEAKIAl1MTYgc21pZDsKIAl1MTYgY291bnQgPSAwOwogCi0JZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnJlcXVlc3RfZGVwdGg7IHNtaWQrKykgewotCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMjYxNiw3ICsyODE5LDcgQEAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSkKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCk7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4LCBzY21kKTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0yNjQzLDcgKzI4NDYsOCBAQAogCW1waV9yZXF1ZXN0LT5TR0xPZmZzZXQwID0gb2Zmc2V0b2YoTXBpMlNDU0lJT1JlcXVlc3RfdCwgU0dMKSAvIDQ7CiAJbXBpX3JlcXVlc3QtPlNHTEZsYWdzID0gY3B1X3RvX2xlMTYoTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9NUEkgKwogCSAgICBNUEkyX1NDU0lJT19TR0xGTEFHU19TWVNURU1fQUREUik7Ci0KKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAlpbnRfdG9fc2NzaWx1bihzYXNfZGV2aWNlX3ByaXZfZGF0YS0+bHVuLCAoc3RydWN0IHNjc2lfbHVuICopCiAJICAgIG1waV9yZXF1ZXN0LT5MVU4pOwogCW1lbWNweShtcGlfcmVxdWVzdC0+Q0RCLkNEQjMyLCBzY21kLT5jbW5kLCBzY21kLT5jbWRfbGVuKTsKQEAgLTI2NTcsOCArMjg2MSw3IEBACiAJCX0KIAl9CiAKLQlfc2NzaWhfc2NzaV9sb29rdXBfc2V0KGlvYywgc21pZCwgc2NtZCk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLCAwLAorCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwKIAkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSk7CiAJcmV0dXJuIDA7CiAKQEAgLTI5NTQsMTUgKzMxNTcsMTYgQEAKICAqIF9zY3NpaF9pb19kb25lIC0gc2NzaSByZXF1ZXN0IGNhbGxiYWNrCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIHNjc2loX3FjbWQuCisgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgX3Njc2loX3FjbWQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAlNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5OwpAQCAtMjk3Niw5ICszMTgwLDkgQEAKIAl1MzIgcmVzcG9uc2VfY29kZTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwotCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoaW9jLCBzbWlkKTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOwogCWlmIChzY21kID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAKQEAgLTMxMzQsNiArMzMzOCw3IEBACiAgb3V0OgogCXNjc2lfZG1hX3VubWFwKHNjbWQpOwogCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0zMzk4LDkgKzM2MDMsOCBAQAogCQl9CiAJfQogCi0Jc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7CiAJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKIAkgICAgc2FzX2FkZHJlc3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwpAQCAtMzY2Niw2ICszODcwLDEyIEBACiAJaWYgKGlvYy0+cmVtb3ZlX2hvc3QpCiAJCWdvdG8gb3V0OwogCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9UUl9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAidGFyZ2V0X3Jlc2V0IGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIHNraXBfdHI7CisJfQorCiAJLyogVGFyZ2V0IFJlc2V0IHRvIGZsdXNoIG91dCBhbGwgdGhlIG91dHN0YW5kaW5nIElPICovCiAJZGV2aWNlX2hhbmRsZSA9IChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpID8KIAkgICAgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSA6IGhhbmRsZTsKQEAgLTM2ODIsNiArMzg5MiwxMyBAQAogCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKIAkJCWdvdG8gb3V0OwogCX0KKyBza2lwX3RyOgorCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9DTlRSTF9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAic2FzX2NudHJsIGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBTQVNfSU9fVU5JVF9DTlRSIC0gc2VuZCBSRU1PVkVfREVWSUNFICovCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzYXNfaW91bml0OiBoYW5kbGUiCkBAIC0zNjkwLDcgKzM5MDcsOCBAQAogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOwogCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CiAJbXBpX3JlcXVlc3QuRGV2SGFuZGxlID0gaGFuZGxlOwotCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC5WUF9JRCA9IDA7CiAJaWYgKChtcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sKGlvYywgJm1waV9yZXBseSwKIAkgICAgJm1waV9yZXF1ZXN0KSkgIT0gMCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLApAQCAtMzgwMCwxNSArNDAxOCwxMiBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudCAtIGhhbmRsZSB0b3BvbG9neSBjaGFuZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKLSAqIGZ3X2V2ZW50OgorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEsCitfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCWludCBpOwpAQCAtMzgxOCw2ICs0MDMzLDcgQEAKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBsaW5rX3JhdGVfOworCU1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCkBAIC0zODUxLDE1ICs0MDY3LDE2IEBACiAJCX0KIAkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCQlyZXR1cm47Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkgJiYgKHJlYXNvbl9jb2RlICE9CisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkcpKQogCQkJY29udGludWU7CiAJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBIWVtpXS5BdHRhY2hlZERldkhhbmRsZSk7CiAJCWlmICghaGFuZGxlKQogCQkJY29udGludWU7Ci0JCXBoeV9udW1iZXIgPSBldmVudF9kYXRhLT5TdGFydFBoeU51bSArIGk7Ci0JCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CiAJCWxpbmtfcmF0ZV8gPSBldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNDsKIAkJc3dpdGNoIChyZWFzb25fY29kZSkgewogCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfUEhZX0NIQU5HRUQ6CkBAIC0zOTcxLDE5ICs0MTg4LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgZGV2aWNlIHN0YXR1cyBjaGFuZ2UKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQotCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCkBAIC00MDI2LDM0ICs0MjQzLDMzIEBACiAvKioKICAqIF9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGVuY2xvc3VyZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCi0gICAgdTggVkZfSUQsIE1waTJFdmVudERhdGFTYXNFbmNsRGV2U3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsCi0JCSAgICAgZXZlbnRfZGF0YSk7CisJCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOwogI2VuZGlmCiB9CiAKIC8qKgogICogX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50IC0gaGFuZGxlIGJyb2FkY2FzdCBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwogCXUxNiBzbWlkLCBoYW5kbGU7CkBAIC00MDYyLDExICs0Mjc4LDEyIEBACiAJdTMyIHRlcm1pbmF0aW9uX2NvdW50OwogCXUzMiBxdWVyeV9jb3VudDsKIAlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqbXBpX3JlcGx5OwotCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisjZW5kaWYKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCiAJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKIAkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7Ci0KIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCkBAIC00MDc0LDcgKzQyOTEsNyBAQAogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwotCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBzbWlkKyspIHsKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+c2NzaWlvX2RlcHRoOyBzbWlkKyspIHsKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7CkBAIC00MTIxLDIzICs0MzM4LDI1IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50IC0gaGFuZGxlIGRpc2NvdmVyeSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CisJTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykgewogCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2NvdmVyeSBldmVudDogKCVzKSIsIGlvYy0+bmFtZSwKIAkJICAgIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfU1RBUlRFRCkgPwogCQkgICAgInN0YXJ0IiA6ICJzdG9wIik7CiAJaWYgKGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIsIGRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCi0JCSAgICBpb2MtPm5hbWUsIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykpOworCQlwcmludGsoImRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCisJCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpKTsKIAlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCkBAIC00NDg4LDE5ICs0NzA3LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBpciBjb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudDsKIAlpbnQgaTsKIAl1OCBmb3JlaWduX2NvbmZpZzsKKwlNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQpAQCAtNDU0MywxNCArNDc2MiwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudCAtIElSIHZvbHVtZSBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCXU2NCB3d2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTU5LDYgKzQ3NzgsNyBAQAogCXUzMiBzdGF0ZTsKIAlpbnQgcmM7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwpAQCAtNDYyOCwxNCArNDg0OCwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQgLSBQRCBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgTXBpMkV2ZW50RGF0YUlyUGh5c2ljYWxEaXNrX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAl1MTYgaGFuZGxlOwogCXUzMiBzdGF0ZTsKQEAgLTQ2NDQsNiArNDg2NCw3IEBACiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZpY2VfcGcwOwogCXUzMiBpb2Nfc3RhdHVzOworCU1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRFX0NIQU5HRUQpCiAJCXJldHVybjsKQEAgLTQ3NDMsMzMgKzQ5NjQsMzMgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50IC0gaGFuZGxlIFJBSUQgb3BlcmF0aW9uIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCi0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCiAvKioKICAqIF9zY3NpaF90YXNrX3NldF9mdWxsIC0gaGFuZGxlIHRhc2sgc2V0IGZ1bGwKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogVGhyb3R0bGUgYmFjayBxZGVwdGguCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhKQorX3Njc2loX3Rhc2tfc2V0X2Z1bGwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgZndfZXZlbnRfd29yaworCSpmd19ldmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKQEAgLTQ3ODAsNiArNTAwMSw3IEBACiAJdTE2IGhhbmRsZTsKIAlpbnQgaWQsIGNoYW5uZWw7CiAJdTY0IHNhc19hZGRyZXNzOworCU1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAljdXJyZW50X2RlcHRoID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Q3VycmVudERlcHRoKTsKIAloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5EZXZIYW5kbGUpOwpAQCAtNDg2OCw2ICs1MDkwLDEwIEBACiAJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcyAmJgogCQkgICAgc2FzX2RldmljZS0+c2xvdCA9PSBzbG90ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQpIHsKIAkJCXNhc19kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOworCQkJc2FzX2RldmljZS0+c3RhdGUgPSAwOworCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOwogCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAogCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZW5jbG9zdXJlICIKIAkJCSAgICAibG9naWNhbCBpZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgaGFuZGxlLApAQCAtNDg4MCw4ICs1MTA2LDYgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0aGFuZGxlIGNoYW5nZWQgZnJvbSgweCUwNHgpISEhXG4iLAogCQkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSk7CiAJCQlzYXNfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCQlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKLQkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gaGFuZGxlOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTUyMjcsNDQgKzU0NTEsMzggQEAKIAogCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDoKLQkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSwgZndfZXZlbnQpOworCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKLQkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgotCQlfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoaW9jLAorCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6Ci0JCV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCi0JCSAgICBmd19ldmVudC0+VkZfSUQsIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6Ci0JCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgotCQlfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgotCQlfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6Ci0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKLQkJX3Njc2loX3Rhc2tfc2V0X2Z1bGwoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAl9CiAJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7CkBAIC01MjczLDE3ICs1NDkxLDE5IEBACiAvKioKICAqIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisJdTMyIHJlcGx5KQogewogCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CkBAIC01Mjk0LDExICs1NTE0LDExIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpb2MtPmZ3X2V2ZW50c19vZmYgfHwgaW9jLT5yZW1vdmVfaG9zdCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJZXZlbnQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTUzMTIsNyArNTUzMiw3IEBACiAJCWlmIChiYWVuX2RhdGEtPlByaW1pdGl2ZSAhPQogCQkgICAgTVBJMl9FVkVOVF9QUklNSVRJVkVfQVNZTkNIUk9OT1VTX0VWRU5UIHx8CiAJCSAgICBpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAxOwogCQlpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSA9IDE7CiAJCWJyZWFrOwogCX0KQEAgLTUzMzQsMTQgKzU1NTQsMTQgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiAvKiBpZ25vcmUgdGhlIHJlc3QgKi8KLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAKIAlmd19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmd19ldmVudF93b3JrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmd19ldmVudCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJZndfZXZlbnQtPmV2ZW50X2RhdGEgPQogCSAgICBremFsbG9jKG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQsIEdGUF9BVE9NSUMpOwpAQCAtNTM0OSwxNSArNTU2OSwxNyBAQAogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKIAkJa2ZyZWUoZndfZXZlbnQpOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAogCW1lbWNweShmd19ldmVudC0+ZXZlbnRfZGF0YSwgbXBpX3JlcGx5LT5FdmVudERhdGEsCiAJICAgIG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQpOwogCWZ3X2V2ZW50LT5pb2MgPSBpb2M7Ci0JZndfZXZlbnQtPlZGX0lEID0gVkZfSUQ7CisJZndfZXZlbnQtPlZGX0lEID0gbXBpX3JlcGx5LT5WRl9JRDsKKwlmd19ldmVudC0+VlBfSUQgPSBtcGlfcmVwbHktPlZQX0lEOwogCWZ3X2V2ZW50LT5ldmVudCA9IGV2ZW50OwogCV9zY3NpaF9md19ldmVudF9hZGQoaW9jLCBmd19ldmVudCk7CisJcmV0dXJuIDE7CiB9CiAKIC8qIHNob3N0IHRlbXBsYXRlICovCkBAIC01NjE3LDcgKzU4MzksNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgcmFpZCB2b2x1bWVzIHRvIHNhcyB0cmFuc3BvcnQKKyAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgc2FzIGRldmljZXMgdG8gc2FzIHRyYW5zcG9ydAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgogICogQ2FsbGVkIGR1cmluZyBpbml0aWFsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KQEAgLTU3MTQsNiArNTkzNiw4IEBACiAJaW9jLT5iYXNlX2NiX2lkeCA9IGJhc2VfY2JfaWR4OwogCWlvYy0+dHJhbnNwb3J0X2NiX2lkeCA9IHRyYW5zcG9ydF9jYl9pZHg7CiAJaW9jLT5jb25maWdfY2JfaWR4ID0gY29uZmlnX2NiX2lkeDsKKwlpb2MtPnRtX3RyX2NiX2lkeCA9IHRtX3RyX2NiX2lkeDsKKwlpb2MtPnRtX3Nhc19jb250cm9sX2NiX2lkeCA9IHRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSBsb2dnaW5nX2xldmVsOwogCS8qIG1pc2Mgc2VtYXBob3JlcyBhbmQgc3BpbiBsb2NrcyAqLwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrKTsKQEAgLTU3MjksNiArNTk1Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZndfZXZlbnRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5kZWxheWVkX3RyX2xpc3QpOwogCiAJLyogaW5pdCBzaG9zdCBwYXJhbWV0ZXJzICovCiAJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CkBAIC01NzQ1LDYgKzU5NzAsNyBAQAogCiAJc2NzaV9ob3N0X3NldF9wcm90KHNob3N0LCBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTgogCSAgICB8IFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKTsKKwlzY3NpX2hvc3Rfc2V0X2d1YXJkKHNob3N0LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAogCS8qIGV2ZW50IHRocmVhZCAqLwogCXNucHJpbnRmKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSwgc2l6ZW9mKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSksCkBAIC01ODk0LDYgKzYxMjAsMTEgQEAKIAkvKiBjdGwgbW9kdWxlIGNhbGxiYWNrIGhhbmRsZXIgKi8KIAljdGxfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIobXB0MnNhc19jdGxfZG9uZSk7CiAKKwl0bV90cl9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3RtX3RyX2NvbXBsZXRlKTsKKwl0bV9zYXNfY29udHJvbF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKTsKKwogCW1wdDJzYXNfY3RsX2luaXQoKTsKIAogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKQEAgLTU5MjQsNiArNjE1NSw5IEBACiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihjb25maWdfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGN0bF9jYl9pZHgpOwogCisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV90cl9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwogCW1wdDJzYXNfY3RsX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggNzQyMzI0YS4uZWI5ODE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0yLDcgKzIsNyBAQAogICogU0FTIFRyYW5zcG9ydCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml90cmFuc3BvcnQuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMTIsMjUgKzIxMiwyNiBAQAogICogbXB0MnNhc190cmFuc3BvcnRfZG9uZSAtICBpbnRlcm5hbCB0cmFuc3BvcnQgbGF5ZXIgY2FsbGJhY2sgaGFuZGxlci4KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCiAgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gc2VuZGluZyBpbnRlcm5hbCBnZW5lcmF0ZWQgdHJhbnNwb3J0IGNtZHMuCiAgKiBUaGUgY2FsbGJhY2sgaW5kZXggcGFzc2VkIGlzIGBpb2MtPnRyYW5zcG9ydF9jYl9pZHhgCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK3U4CittcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJaWYgKG1waV9yZXBseSkgewogCQltZW1jcHkoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSwgbXBpX3JlcGx5LApAQCAtMjM5LDYgKzI0MCw3IEBACiAJfQogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKiByZXBvcnQgbWFudWZhY3R1cmUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KQEAgLTM2OSw2ICszNzEsOCBAQAogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOwogCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCXNhc19hZGRyZXNzX2xlID0gKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzczsKIAkqc2FzX2FkZHJlc3NfbGUgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CiAJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKQEAgLTM5Niw3ICs0MDAsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKIAkgICAgInNlbmQgdG8gc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKQEAgLTExMDYsNiArMTExMSw4IEBACiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g7CiAJbXBpX3JlcXVlc3QtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJKigodTY0ICopJm1waV9yZXF1ZXN0LT5TQVNBZGRyZXNzKSA9IChycGh5KSA/CiAJICAgIGNwdV90b19sZTY0KHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSA6CiAJICAgIGNwdV90b19sZTY0KGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyk7CkBAIC0xMTQ3LDcgKzExNTQsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgogCSAgICAic2VuZGluZyBzbXAgcmVxdWVzdFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCmluZGV4IGY4Y2I5ZGUuLjE4NDlkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaApAQCAtMjUsNiArMjUsOCBAQAogI2lmbmRlZiBfTVZfREVGU19IXwogI2RlZmluZSBfTVZfREVGU19IXwogCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMAkweDEzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xMzIwCTB4MTMyMAogCiBlbnVtIGNoaXBfZmxhdm9ycyB7CiAJY2hpcF82MzIwLApAQCAtMzIsNiArMzQsOCBAQAogCWNoaXBfNjQ4NSwKIAljaGlwXzk0ODAsCiAJY2hpcF85MTgwLAorCWNoaXBfMTMwMCwKKwljaGlwXzEzMjAKIH07CiAKIC8qIGRyaXZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKaW5kZXggODY0NmExOS4uYzc5MGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCkBAIC0zMiw2ICszMiw4IEBACiAJW2NoaXBfNjQ4NV0gPQl7IDEsIDgsIDB4ODAwLCAzMywgMzIsIDEwLCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTE4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTQ4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMwMF0gPQl7IDEsIDQsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMyMF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiB9OwogCiAjZGVmaW5lIFNPQ19TQVNfTlVNIDIKQEAgLTY1Myw2ICs2NTUsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2NDg1KSwgY2hpcF82NDg1IH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDk0ODApLCBjaGlwXzk0ODAgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4OTE4MCksIGNoaXBfOTE4MCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMCksIGNoaXBfMTMwMCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMyMCksIGNoaXBfMTMyMCB9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggNDMwMmYwNi4uMGE5N2JjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTY4NCw3ICs2ODUsNyBAQAogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJIkFkYXB0ZXIgYmVpbmcgcmVzZXQgZHVlIHRvIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCiAJLyogQ29tbWFuZCB0aW1lb3V0cyByZXN1bHQgaW4gaGFyZCByZXNldCBzZXF1ZW5jZS4gVGhlIGNvbW1hbmQgdGhhdCBnb3QKQEAgLTgxNSw4ICs4MTYsOSBAQAogCiAJaWYgKFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJcG1jcmFpZF9lcnIoImNvbW1hbmQgQ0RCWzBdID0gJXggZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwKLQkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sIGlvYXNjKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJCSAgICAiY29tbWFuZCBDREJbMF0gPSAleCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAorCQkJICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLCBpb2FzYyk7CiAJfQogCiAJLyogaWYgd2UgaGFkIGFsbG9jYXRlZCBzZW5zZSBidWZmZXJzIGZvciByZXF1ZXN0IHNlbnNlLCBjb3B5IHRoZSBzZW5zZQpAQCAtMTA2OSw3ICsxMDcxLDcgQEAKIAogCWlvYXJjYi0+ZGF0YV90cmFuc2Zlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihyY2Jfc2l6ZSk7CiAKLQlpb2FkbFswXS5mbGFncyB8PSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19SRUFEX0xBU1QpOworCWlvYWRsWzBdLmZsYWdzIHw9IElPQURMX0ZMQUdTX1JFQURfTEFTVDsKIAlpb2FkbFswXS5kYXRhX2xlbiA9IGNwdV90b19sZTMyKHJjYl9zaXplKTsKIAlpb2FkbFswXS5hZGRyZXNzID0gY3B1X3RvX2xlMzIoZG1hKTsKIApAQCAtMTU0MSwxMyArMTU0MywxMyBAQAogCiAJaWYgKHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0ID09CiAJICAgIEhPU1RSQ0JfTk9USUZJQ0FUSU9OU19MT1NUKQotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CiAKIAlpb2FzYyA9IGxlMzJfdG9fY3B1KGhjYW1fbGRuLT5lcnJvcl9sb2cuZmRfaW9hc2MpOwogCiAJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCB8fAogCQlpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVIpIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJVbml0QXR0ZW50aW9uIGR1ZSB0byBJT0EgQnVzIFJlc2V0XG4iKTsKIAkJc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KAogCQkJcGluc3RhbmNlLT5ob3N0LApAQCAtMTU4NCw3ICsxNTg2LDcgQEAKIAkgICAgYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSkgPT0gMSkgewogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpb2FzYykgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJIkhvc3QgUkNCIChDQ04pIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQlwbWNyYWlkX3NlbmRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOwpAQCAtMTYzNCw3ICsxNjM2LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiSG9zdCBSQ0IoTEROKSBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLCBpb2FzYyk7CiAJfQogCS8qIHNlbmQgbmV0bGluayBtZXNzYWdlIGZvciBIQ0FNIG5vdGlmaWNhdGlvbiBpZiBlbmFibGVkICovCkBAIC0xODIyLDcgKzE4MjQsNiBAQAogCQkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOwogCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CiAKLQogCQkJcG1jcmFpZF9pbmZvKCJmYWlsaW5nKCVkKSBDREJbMF0gPSAleCByZXN1bHQ6ICV4XG4iLAogCQkJCSAgICAgbGUzMl90b19jcHUocmVzcCkgPj4gMiwKIAkJCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLApAQCAtMjI1MCw3ICsyMjUxLDcgQEAKIAogCWlvYWRsLT5hZGRyZXNzID0gY3B1X3RvX2xlNjQoY21kLT5zZW5zZV9idWZmZXJfZG1hKTsKIAlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCWlvYWRsLT5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGwtPmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCiAJLyogcmVxdWVzdCBzZW5zZSBtaWdodCBiZSBjYWxsZWQgYXMgcGFydCBvZiBlcnJvciByZXNwb25zZSBwcm9jZXNzaW5nCiAJICogd2hpY2ggcnVucyBpbiB0YXNrbGV0cyBjb250ZXh0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IG1pZC1sYXllciBtaWdodApAQCAtMjUxNCw3ICsyNTE1LDggQEAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCWlmICghcmVzKSB7Ci0JCXBtY3JhaWRfZXJyKCJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZC0+ZGV2aWNlLAorCQkJICAgICJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0yNzUyLDggKzI3NTQsOCBAQAogCXBpbnN0YW5jZSA9CiAJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCi0JZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCi0JCSJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJICAgICJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CiAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIApAQCAtMjgyNCw3ICsyODI2LDggQEAKICAqLwogc3RhdGljIGludCBwbWNyYWlkX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JcG1jcmFpZF9lcnIoIkRvaW5nIGRldmljZSByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJICAgICJyZXNldHRpbmcgZGV2aWNlIGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX0xVTik7CkBAIC0yODMyLDcgKzI4MzUsOCBAQAogCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKLQlwbWNyYWlkX2VycigiRG9pbmcgYnVzIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkgICAgIkRvaW5nIGJ1cyByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAogCQkJCSAgICBQTUNSQUlEX1JFU0VUX0JVU19USU1FT1VULAogCQkJCSAgICBSRVNFVF9ERVZJQ0VfQlVTKTsKQEAgLTI4NDAsNyArMjg0NCw4IEBACiAKIHN0YXRpYyBpbnQgcG1jcmFpZF9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXBtY3JhaWRfZXJyKCJEb2luZyB0YXJnZXQgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCSAgICAiRG9pbmcgdGFyZ2V0IHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX1RBUkdFVCk7CkBAIC0yOTg4LDExICsyOTkzLDExIEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAKIAlpZiAobnNlZyA8IDApIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJzY3NpX21hcF9kbWEgZmFpbGVkIVxuIik7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgInNjc2lfbWFwX2RtYSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSBpZiAobnNlZyA+IFBNQ1JBSURfTUFYX0lPQURMUykgewogCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQsCiAJCQkic2cgY291bnQgaXMgKCVkKSBtb3JlIHRoYW4gYWxsb3dlZCFcbiIsIG5zZWcpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzAxMiw3ICszMDE3LDcgQEAKIAkJaW9hZGxbaV0uZmxhZ3MgPSAwOwogCX0KIAkvKiBzZXR1cCBsYXN0IGRlc2NyaXB0b3IgKi8KLQlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsW2kgLSAxXS5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAogCXJldHVybiAwOwogfQpAQCAtMzM4Miw3ICszMzg3LDcgQEAKIAl9CiAKIAkvKiBzZXR1cCB0aGUgbGFzdCBkZXNjcmlwdG9yICovCi0JaW9hZGxbaSAtIDFdLmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNDAsNyArNTA0NSw3IEBACiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAogCWlmIChyYykgewotCQlwbWNyYWlkX2VycigicG1jcmFpZDogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXN1bWU6IEVuYWJsZSBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNTA1NCw3ICs1MDU5LDcgQEAKIAkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAKIAlpZiAocmMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlc3VtZTogRmFpbGVkIHRvIHNldCBQQ0kgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGRpc2FibGVfZGV2aWNlOwogCX0KIApAQCAtNTA2Myw3ICs1MDY4LDggQEAKIAlyYyA9IHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKIAogCWlmIChyYykgewotCQlwbWNyYWlkX2VycigicmVzdW1lOiBjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicmVzdW1lOiBjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZV9ob3N0OwogCX0KQEAgLTUwODAsNyArNTA4Niw3IEBACiAJICogc3RhdGUuCiAJICovCiAJaWYgKHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZV90YXNrbGV0czsKIAl9CkBAIC01MTg3LDcgKzUxOTMsNyBAQAogCUxJU1RfSEVBRChvbGRfcmVzKTsKIAogCWlmIChwaW5zdGFuY2UtPmNmZ190YWJsZS0+ZmxhZ3MgJiBNSUNST0NPREVfVVBEQVRFX1JFUVVJUkVEKQotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIlJlcXVpcmUgbWljcm9jb2RlIGRvd25sb2FkXG4iKTsKKwkJcG1jcmFpZF9lcnIoIklPQSByZXF1aXJlcyBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOwogCiAJLyogcmVzb3VyY2UgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLgogCSAqIGluaXRfcmVzX3RhYmxlIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9iZSAodXNlci10aHJlYWQpIG9yIHJ1bnRpbWUKQEAgLTUyMjQsOCArNTIzMCw3IEBACiAJCWlmICghZm91bmQpIHsKIAogCQkJaWYgKGxpc3RfZW1wdHkoJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSkpIHsKLQkJCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKLQkJCQkJIlRvbyBtYW55IGRldmljZXMgYXR0YWNoZWRcbiIpOworCQkJCXBtY3JhaWRfZXJyKCJUb28gbWFueSBkZXZpY2VzIGF0dGFjaGVkXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNTMwOSw3ICs1MzE0LDcgQEAKIAkJY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOwogCiAJaW9hZGwgPSAmKGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbFswXSk7Ci0JaW9hZGwtPmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbC0+ZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAJaW9hZGwtPmFkZHJlc3MgPSBjcHVfdG9fbGU2NChwaW5zdGFuY2UtPmNmZ190YWJsZV9idXNfYWRkcik7CiAJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOwogCkBAIC01NDQyLDcgKzU0NDcsNyBAQAogCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKIAkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKIAl9CiAKQEAgLTU0NjYsNyArNTQ3MSw3IEBACiAJICovCiAJcG1jcmFpZF9pbmZvKCJzdGFydGluZyBJT0EgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VcbiIpOwogCWlmIChwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKSkgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKIAkJcmMgPSAxOwogCQlnb3RvIG91dF9yZWxlYXNlX2J1ZnM7CiAJfQpAQCAtNTUzNCw3ICs1NTM5LDYgQEAKIAkuc2h1dGRvd24gPSBwbWNyYWlkX3NodXRkb3duCiB9OwogCi0KIC8qKgogICogcG1jcmFpZF9pbml0IC0gbW9kdWxlIGxvYWQgZW50cnkgcG9pbnQKICAqLwpAQCAtNTU2Niw3ICs1NTcwLDYgQEAKIAkJZ290byBvdXRfdW5yZWdfY2hyZGV2OwogCX0KIAotCiAJZXJyb3IgPSBwbWNyYWlkX25ldGxpbmtfaW5pdCgpOwogCiAJaWYgKGVycm9yKQpAQCAtNTU4NCw2ICs1NTg3LDcgQEAKIAogb3V0X3VucmVnX2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocG1jcmFpZF9tYWpvciwgMCksIFBNQ1JBSURfTUFYX0FEQVBURVJTKTsKKwogb3V0X2luaXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKaW5kZXggNjE0YjNhNy4uMzQ0MWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCA0MmI3OTlhLi5lMDdiMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpZiAocmVxID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSIKIAkJCSJmb3IgcmVxdWVzdCBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJlcS0+bGVuZ3RoID0gUkVRVUVTVF9FTlRSWV9DTlRfMjRYWDsKQEAgLTYzMiw2ICs2MzIsNyBAQAogCiBxdWVfZmFpbGVkOgogCXFsYTI1eHhfZnJlZV9yZXFfcXVlKGJhc2VfdmhhLCByZXEpOworZmFpbGVkOgogCXJldHVybiAwOwogfQogCkBAIC02NTksNyArNjYwLDcgQEAKIAlpZiAocnNwID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IiCiAJCQkJIiByZXNwb25zZSBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJzcC0+bGVuZ3RoID0gUkVTUE9OU0VfRU5UUllfQ05UX01ROwpAQCAtNzI4LDYgKzcyOSw3IEBACiAKIHF1ZV9mYWlsZWQ6CiAJcWxhMjV4eF9mcmVlX3JzcF9xdWUoYmFzZV92aGEsIHJzcCk7CitmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGI2ZTAzMDcuLmRkMDk4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtMjQxLDEwICsyNDEsNyBAQAogICovCiBzdHJ1Y3Qgc2NzaV9jbW5kICpfX3Njc2lfZ2V0X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQljbWQgPSBzY3NpX2hvc3RfYWxsb2NfY29tbWFuZChzaG9zdCwgZ2ZwX21hc2spOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHNjc2lfaG9zdF9hbGxvY19jb21tYW5kKHNob3N0LCBnZnBfbWFzayk7CiAKIAlpZiAodW5saWtlbHkoIWNtZCkpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1OCw5ICsyNTUsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hvc3QtPmZyZWVfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGNtZCkgeworCQkJdm9pZCAqYnVmLCAqcHJvdDsKKwogCQkJYnVmID0gY21kLT5zZW5zZV9idWZmZXI7CisJCQlwcm90ID0gY21kLT5wcm90X3NkYjsKKwogCQkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwogCQkJY21kLT5zZW5zZV9idWZmZXIgPSBidWY7CisJCQljbWQtPnByb3Rfc2RiID0gcHJvdDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggZmI5YWYyMC4uYzQxMDNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJzZC5oIgogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgpAQCAtNjQsNiArNjUsNyBAQAogI2RlZmluZSBQQVJBTUVURVJfTElTVF9MRU5HVEhfRVJSIDB4MWEKICNkZWZpbmUgSU5WQUxJRF9PUENPREUgMHgyMAogI2RlZmluZSBBRERSX09VVF9PRl9SQU5HRSAweDIxCisjZGVmaW5lIElOVkFMSURfQ09NTUFORF9PUENPREUgMHgyMAogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFBPV0VST05fUkVTRVQgMHgyOQpAQCAtMTgwLDcgKzE4Miw3IEBACiAjZGVmaW5lIFNERUJVR19TRU5TRV9MRU4gMzIKIAogI2RlZmluZSBTQ1NJX0RFQlVHX0NBTlFVRVVFICAyNTUKLSNkZWZpbmUgU0NTSV9ERUJVR19NQVhfQ01EX0xFTiAxNgorI2RlZmluZSBTQ1NJX0RFQlVHX01BWF9DTURfTEVOIDMyCiAKIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CkBAIC0yOTYsOSArMjk4LDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkIGdldF9kYXRhX3RyYW5zZmVyX2luZm8odW5zaWduZWQgY2hhciAqY21kLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGJhLCB1bnNpZ25lZCBpbnQgKm51bSkKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCisJCQkJICAgdTMyICplaV9sYmEpCiB7CisJKmVpX2xiYSA9IDA7CisKIAlzd2l0Y2ggKCpjbWQpIHsKKwljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CisJCSpsYmEgPSAodTY0KWNtZFsxOV0gfCAodTY0KWNtZFsxOF0gPDwgOCB8CisJCQkodTY0KWNtZFsxN10gPDwgMTYgfCAodTY0KWNtZFsxNl0gPDwgMjQgfAorCQkJKHU2NCljbWRbMTVdIDw8IDMyIHwgKHU2NCljbWRbMTRdIDw8IDQwIHwKKwkJCSh1NjQpY21kWzEzXSA8PCA0OCB8ICh1NjQpY21kWzEyXSA8PCA1NjsKKworCQkqZWlfbGJhID0gKHUzMiljbWRbMjNdIHwgKHUzMiljbWRbMjJdIDw8IDggfAorCQkJKHUzMiljbWRbMjFdIDw8IDE2IHwgKHUzMiljbWRbMjBdIDw8IDI0OworCisJCSpudW0gPSAodTMyKWNtZFszMV0gfCAodTMyKWNtZFszMF0gPDwgOCB8ICh1MzIpY21kWzI5XSA8PCAxNiB8CisJCQkodTMyKWNtZFsyOF0gPDwgMjQ7CisJCWJyZWFrOworCiAJY2FzZSBXUklURV8xNjoKIAljYXNlIFJFQURfMTY6CiAJCSpsYmEgPSAodTY0KWNtZFs5XSB8ICh1NjQpY21kWzhdIDw8IDggfApAQCAtMTU4OSw3ICsxNjA3LDcgQEAKIH0KIAogc3RhdGljIGludCBwcm90X3ZlcmlmeV9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMpCisJCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMsIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlc2lkOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbDsKQEAgLTE2MzYsMTMgKzE2NTQsMjMgQEAKIAkJCXJldHVybiAweDAxOwogCQl9CiAKLQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiAmJgogCQkgICAgYmUzMl90b19jcHUoc2R0W2ldLnJlZl90YWcpICE9IChzZWN0b3IgJiAweGZmZmZmZmZmKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUkVGIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOwogCQkJZGlmX2Vycm9ycysrOwogCQkJcmV0dXJuIDB4MDM7CiAJCX0KKworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJICAgIGJlMzJfdG9fY3B1KHNkdFtpXS5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKKwkJCWRpZl9lcnJvcnMrKzsKKwkJCXJldHVybiAweDAzOworCQl9CisKKwkJZWlfbGJhKys7CiAJfQogCiAJcmVzaWQgPSBzZWN0b3JzICogODsgLyogQnl0ZXMgb2YgcHJvdGVjdGlvbiBkYXRhIHRvIGNvcHkgaW50byBzZ2wgKi8KQEAgLTE2NzAsNyArMTY5OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwLAorCQkgICAgIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKQEAgLTE2OTksNyArMTcyOCw3IEBACiAKIAkvKiBESVggKyBUMTAgRElGICovCiAJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKLQkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKIAogCQlpZiAocHJvdF9yZXQpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCBwcm90X3JldCk7CkBAIC0xNzM1LDcgKzE3NjQsNyBAQAogfQogCiBzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQorCQkJICAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycywgdTMyIGVpX2xiYSkKIHsKIAlpbnQgaSwgaiwgcmV0OwogCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNkdDsKQEAgLTE3NDksMTEgKzE3NzgsNiBAQAogCiAJc2VjdG9yID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKIAotCWlmICgoKFNDcG50LT5jbW5kWzFdID4+IDUpICYgNykgIT0gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOiBXUlBST1RFQ1QgIT0gMVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCUJVR19PTihzY3NpX3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIAlCVUdfT04oc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIApAQCAtMTgwOCw3ICsxODMyLDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gJiYKIAkJCSAgICBiZTMyX3RvX2NwdShzZHQtPnJlZl90YWcpCiAJCQkgICAgIT0gKHN0YXJ0X3NlYyAmIDB4ZmZmZmZmZmYpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xODE5LDYgKzE4NDMsMTYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAorCQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCQkgICAgYmUzMl90b19jcHUoc2R0LT5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOworCQkJCXJldCA9IDB4MDM7CisJCQkJZHVtcF9zZWN0b3IoZGFkZHIsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCiAJCQkvKiBXb3VsZCBiZSBncmVhdCB0byBjb3B5IHRoaXMgaW4gYmlnZ2VyCiAJCQkgKiBjaHVua3MuICBIb3dldmVyLCBmb3IgdGhlIHNha2Ugb2YKIAkJCSAqIGNvcnJlY3RuZXNzIHdlIG5lZWQgdG8gdmVyaWZ5IGVhY2ggc2VjdG9yCkBAIC0xODMyLDYgKzE4NjYsNyBAQAogCQkJCXNlY3RvciA9IDA7CS8qIEZvcmNlIHdyYXAgKi8KIAogCQkJc3RhcnRfc2VjKys7CisJCQllaV9sYmErKzsKIAkJCWRhZGRyICs9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CiAJCQlwcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzZF9kaWZfdHVwbGUpOwogCQl9CkBAIC0xODUzLDcgKzE4ODgsOCBAQAogfQogCiBzdGF0aWMgaW50IHJlc3Bfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyBsYmEsCi0JCSAgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCwKKwkJICAgICAgdTMyIGVpX2xiYSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlpbnQgcmV0OwpAQCAtMTg2NCw3ICsxOTAwLDcgQEAKIAogCS8qIERJWCArIFQxMCBESUYgKi8KIAlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwpAQCAtMjg3MiwxMSArMjkwOCwxMiBAQAogCiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgorCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046CiAJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmIG11c3QgYmUgMCwgMSBvciAzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGRpZiBtdXN0IGJlIDAsIDEsIDIgb3IgM1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzEyMSw2ICszMTU4LDcgQEAKIAlpbnQgbGVuLCBrOwogCXVuc2lnbmVkIGludCBudW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKKwl1MzIgZWlfbGJhOwogCWludCBlcnJzdHMgPSAwOwogCWludCB0YXJnZXQgPSBTQ3BudC0+ZGV2aWNlLT5pZDsKIAlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCA9IE5VTEw7CkBAIC0zMjU0LDE0ICszMjkyLDMwIEBACiAJY2FzZSBSRUFEXzE2OgogCWNhc2UgUkVBRF8xMjoKIAljYXNlIFJFQURfMTA6CisJCS8qIFJFQUR7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBSRUFEXzY6CityZWFkOgogCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwogCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQogCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKIAkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKQEAgLTMyODgsMTQgKzMzNDIsMzAgQEAKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgV1JJVEVfMTI6CiAJY2FzZSBXUklURV8xMDoKKwkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBXUklURV82Ogord3JpdGU6CiAJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7CiAJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCiAJCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCiAJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CkBAIC0zMzQxLDE1ICszNDExLDM4IEBACiAJCQlicmVhazsKIAkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKIAkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOworCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKIAkJZXJyc3RzID0gcmVzcF94ZHdyaXRlcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKIAkJYnJlYWs7CisJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgorCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04pIHsKKworCQkJaWYgKChjbWRbMTBdICYgMHhlMCkgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIlVucHJvdGVjdGVkIFJEL1dSIHRvIERJRiBkZXZpY2VcbiIpOworCisJCQlpZiAoY21kWzldID09IFJFQURfMzIpIHsKKwkJCQlCVUdfT04oU0NwbnQtPmNtZF9sZW4gPCAzMik7CisJCQkJZ290byByZWFkOworCQkJfQorCisJCQlpZiAoY21kWzldID09IFdSSVRFXzMyKSB7CisJCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOworCQkJCWdvdG8gd3JpdGU7CisJCQl9CisJCX0KKworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogT3Bjb2RlOiAweCV4IG5vdCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA4NzcyMDRkLi4xYjAwNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTcyNSw2ICs3MjUsOSBAQAogCQljYXNlIE5FRURTX1JFVFJZOgogCQljYXNlIEZBSUxFRDoKIAkJCWJyZWFrOworCQljYXNlIEFERF9UT19NTFFVRVVFOgorCQkJcnRuID0gTkVFRFNfUkVUUlk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJ0biA9IEZBSUxFRDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGM0NDc4MzguLjA1NDdhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogb3V0X2RldmljZV9kZXN0cm95OgogCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0RFTCk7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIG91dDoKIAlpZiAoZGlzcGxheV9mYWlsdXJlX21zZykKQEAgLTk1Nyw2ICs5NTgsNyBAQAogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZmRlNTQ1My4uNWM3ZWI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC04NjQsMTAgKzg2NCw2IEBACiAJCWdvdG8gY2xlYW5fZGV2aWNlOwogCX0KIAotCS8qIHRha2UgYSByZWZlcmVuY2UgZm9yIHRoZSBzZGV2X2RldjsgdGhpcyBpcwotCSAqIHJlbGVhc2VkIGJ5IHRoZSBzZGV2X2NsYXNzIC5yZWxlYXNlICovCi0JZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCiAJLyogY3JlYXRlIHF1ZXVlIGZpbGVzLCB3aGljaCBtYXkgYmUgd3JpdGFibGUsIGRlcGVuZGluZyBvbiB0aGUgaG9zdCAqLwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKQogCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2Rldi0+c2Rldl9nZW5kZXYsICZzZGV2X2F0dHJfcXVldWVfZGVwdGhfcncpOwpAQCAtOTE3LDYgKzkxMyw3IEBACiAKIAlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTEwNjUsNyArMTA2Miw3IEBACiAJCSAgICAgc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmc2Rldi0+c2Rldl9kZXYpOwotCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9ICZzZGV2LT5zZGV2X2dlbmRldjsKKwlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJc2Rldi0+c2Rldl9kZXYuY2xhc3MgPSAmc2Rldl9jbGFzczsKIAlkZXZfc2V0X25hbWUoJnNkZXYtPnNkZXZfZGV2LCAiJWQ6JWQ6JWQ6JWQiLAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBiOTg4ODVkZS4uYzZmNzBkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM1ODYsNiArMzU4Niw3IEBACiAKIC8qKgogICogZmNfYnNnX2hvc3RfZGlzcGF0Y2ggLSBwcm9jZXNzIGZjIGhvc3QgYnNnIHJlcXVlc3RzIGFuZCBkaXNwYXRjaCB0byBMTERECisgKiBAcToJCWZjIGhvc3QgcmVxdWVzdCBxdWV1ZQogICogQHNob3N0OglzY3NpIGhvc3QgcnBvcnQgYXR0YWNoZWQgdG8KICAqIEBqb2I6CWJzZyBqb2IgdG8gYmUgcHJvY2Vzc2VkCiAgKi8KQEAgLTM2NTUsNiArMzY1Niw3IEBACiBmYWlsX2hvc3RfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzY5Myw2ICszNjk1LDcgQEAKIAogLyoqCiAgKiBmY19ic2dfcnBvcnRfZGlzcGF0Y2ggLSBwcm9jZXNzIHJwb3J0IGJzZyByZXF1ZXN0cyBhbmQgZGlzcGF0Y2ggdG8gTExERAorICogQHE6CQlycG9ydCByZXF1ZXN0IHF1ZXVlCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCBycG9ydCBhdHRhY2hlZCB0bwogICogQHJwb3J0OglycG9ydCByZXF1ZXN0IGRlc3RpbmVkIHRvCiAgKiBAam9iOglic2cgam9iIHRvIGJlIHByb2Nlc3NlZApAQCAtMzczOSw2ICszNzQyLDcgQEAKIGZhaWxfcnBvcnRfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzc5NSw2ICszNzk5LDcgQEAKIAkJLyogY2hlY2sgaWYgd2UgaGF2ZSB0aGUgbXNnY29kZSB2YWx1ZSBhdCBsZWFzdCAqLwogCQlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8IHNpemVvZih1aW50MzJfdCkpIHsKIAkJCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9NU0c7CiAJCQlqb2ItPnJlcGx5X2xlbiA9IHNpemVvZih1aW50MzJfdCk7CiAJCQlmY19ic2dfam9iZG9uZShqb2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA4ZGQ5NmRjLi45MDkzYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTE2LDYgKzExNiw5IEBACiAgKiBvYmplY3QgYWZ0ZXIgbGFzdCBwdXQpICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNkX3JlZl9tdXRleCk7CiAKK3N0cnVjdCBrbWVtX2NhY2hlICpzZF9jZGJfY2FjaGU7CittZW1wb29sX3QgKnNkX2NkYl9wb29sOworCiBzdGF0aWMgY29uc3QgY2hhciAqc2RfY2FjaGVfdHlwZXNbXSA9IHsKIAkid3JpdGUgdGhyb3VnaCIsICJub25lIiwgIndyaXRlIGJhY2siLAogCSJ3cml0ZSBiYWNrLCBubyByZWFkIChkYWZ0KSIKQEAgLTM3MCw2ICszNzMsMzEgQEAKIAltdXRleF91bmxvY2soJnNkX3JlZl9tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3Byb3Rfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZikKK3sKKwl1bnNpZ25lZCBpbnQgcHJvdF9vcCA9IFNDU0lfUFJPVF9OT1JNQUw7CisJdW5zaWduZWQgaW50IGRpeCA9IHNjc2lfcHJvdF9zZ19jb3VudChzY21kKTsKKworCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJaWYgKGRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfU1RSSVA7CisJCWVsc2UgaWYgKCFkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX0lOU0VSVDsKKwl9IGVsc2UgeworCQlpZiAoZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKKwkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOworCX0KKworCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7CisJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIGRpZik7Cit9CisKIC8qKgogICoJc2RfaW5pdF9jb21tYW5kIC0gYnVpbGQgYSBzY3NpIChyZWFkIG9yIHdyaXRlKSBjb21tYW5kIGZyb20KICAqCWluZm9ybWF0aW9uIGluIHRoZSByZXF1ZXN0IHN0cnVjdHVyZS4KQEAgLTM4OCw2ICs0MTYsNyBAQAogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IGJsa19ycV9zZWN0b3JzKHJxKTsKIAlpbnQgcmV0LCBob3N0X2RpZjsKKwl1bnNpZ25lZCBjaGFyIHByb3RlY3Q7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MjAsMTMgKzU0OSw0OSBAQAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCiAJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOwogCWlmIChob3N0X2RpZikKLQkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CisJCXByb3RlY3QgPSAxIDw8IDU7CiAJZWxzZQotCQlTQ3BudC0+Y21uZFsxXSA9IDA7CisJCXByb3RlY3QgPSAwOwogCi0JaWYgKGJsb2NrID4gMHhmZmZmZmZmZikgeworCWlmIChob3N0X2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTikgeworCQlTQ3BudC0+Y21uZCA9IG1lbXBvb2xfYWxsb2Moc2RfY2RiX3Bvb2wsIEdGUF9BVE9NSUMpOworCisJCWlmICh1bmxpa2VseShTQ3BudC0+Y21uZCA9PSBOVUxMKSkgeworCQkJcmV0ID0gQkxLUFJFUF9ERUZFUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJU0NwbnQtPmNtZF9sZW4gPSBTRF9FWFRfQ0RCX1NJWkU7CisJCW1lbXNldChTQ3BudC0+Y21uZCwgMCwgU0NwbnQtPmNtZF9sZW4pOworCQlTQ3BudC0+Y21uZFswXSA9IFZBUklBQkxFX0xFTkdUSF9DTUQ7CisJCVNDcG50LT5jbW5kWzddID0gMHgxODsKKwkJU0NwbnQtPmNtbmRbOV0gPSAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpID8gUkVBRF8zMiA6IFdSSVRFXzMyOworCQlTQ3BudC0+Y21uZFsxMF0gPSBwcm90ZWN0IHwgKGJsa19mdWFfcnEocnEpID8gMHg4IDogMCk7CisKKwkJLyogTEJBICovCisJCVNDcG50LT5jbW5kWzEyXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA1NikgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTNdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQ4KSAmIDB4ZmYgOiAwOworCQlTQ3BudC0+Y21uZFsxNF0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDApICYgMHhmZiA6IDA7CisJCVNDcG50LT5jbW5kWzE1XSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAzMikgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTZdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAyNCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsxN10gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDE2KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzE4XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsxOV0gPSAodW5zaWduZWQgY2hhcikgYmxvY2sgJiAweGZmOworCisJCS8qIEV4cGVjdGVkIEluZGlyZWN0IExCQSAqLworCQlTQ3BudC0+Y21uZFsyMF0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzIxXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMTYpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMjJdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA4KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzIzXSA9ICh1bnNpZ25lZCBjaGFyKSBibG9jayAmIDB4ZmY7CisKKwkJLyogVHJhbnNmZXIgbGVuZ3RoICovCisJCVNDcG50LT5jbW5kWzI4XSA9ICh1bnNpZ25lZCBjaGFyKSAodGhpc19jb3VudCA+PiAyNCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsyOV0gPSAodW5zaWduZWQgY2hhcikgKHRoaXNfY291bnQgPj4gMTYpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMzBdID0gKHVuc2lnbmVkIGNoYXIpICh0aGlzX2NvdW50ID4+IDgpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMzFdID0gKHVuc2lnbmVkIGNoYXIpIHRoaXNfY291bnQgJiAweGZmOworCX0gZWxzZSBpZiAoYmxvY2sgPiAweGZmZmZmZmZmKSB7CiAJCVNDcG50LT5jbW5kWzBdICs9IFJFQURfMTYgLSBSRUFEXzY7Ci0JCVNDcG50LT5jbW5kWzFdIHw9IGJsa19mdWFfcnEocnEpID8gMHg4IDogMDsKKwkJU0NwbnQtPmNtbmRbMV0gPSBwcm90ZWN0IHwgKGJsa19mdWFfcnEocnEpID8gMHg4IDogMCk7CiAJCVNDcG50LT5jbW5kWzJdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDU2KSAmIDB4ZmYgOiAwOwogCQlTQ3BudC0+Y21uZFszXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0OCkgJiAweGZmIDogMDsKIAkJU0NwbnQtPmNtbmRbNF0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDApICYgMHhmZiA6IDA7CkBAIC01NDcsNyArNjEyLDcgQEAKIAkJCXRoaXNfY291bnQgPSAweGZmZmY7CiAKIAkJU0NwbnQtPmNtbmRbMF0gKz0gUkVBRF8xMCAtIFJFQURfNjsKLQkJU0NwbnQtPmNtbmRbMV0gfD0gYmxrX2Z1YV9ycShycSkgPyAweDggOiAwOworCQlTQ3BudC0+Y21uZFsxXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKIAkJU0NwbnQtPmNtbmRbMl0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CiAJCVNDcG50LT5jbW5kWzNdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAxNikgJiAweGZmOwogCQlTQ3BudC0+Y21uZFs0XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOwpAQCAtNTc4LDggKzY0Myw3IEBACiAKIAkvKiBJZiBESUYgb3IgRElYIGlzIGVuYWJsZWQsIHRlbGwgSEJBIGhvdyB0byBoYW5kbGUgcmVxdWVzdCAqLwogCWlmIChob3N0X2RpZiB8fCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQotCQlzZF9kaWZfb3AoU0NwbnQsIGhvc3RfZGlmLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpLAotCQkJICBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOworCQlzZF9wcm90X29wKFNDcG50LCBob3N0X2RpZik7CiAKIAkvKgogCSAqIFdlIHNob3VsZG4ndCBkaXNjb25uZWN0IGluIHRoZSBtaWRkbGUgb2YgYSBzZWN0b3IsIHNvIHdpdGggYSBkdW1iCkBAIC0xMDIzLDYgKzEwODcsNyBAQAogCWludCByZXN1bHQgPSBTQ3BudC0+cmVzdWx0OwogCXVuc2lnbmVkIGludCBnb29kX2J5dGVzID0gcmVzdWx0ID8gMCA6IHNjc2lfYnVmZmxlbihTQ3BudCk7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSBzY3NpX2Rpc2soU0NwbnQtPnJlcXVlc3QtPnJxX2Rpc2spOwogCWludCBzZW5zZV92YWxpZCA9IDA7CiAJaW50IHNlbnNlX2RlZmVycmVkID0gMDsKIApAQCAtMTA4NCw2ICsxMTQ5LDEwIEBACiAJaWYgKHJxX2RhdGFfZGlyKFNDcG50LT5yZXF1ZXN0KSA9PSBSRUFEICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCiAJCXNkX2RpZl9jb21wbGV0ZShTQ3BudCwgZ29vZF9ieXRlcyk7CiAKKwlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNka3AtPmRldmljZS0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKQorCSAgICA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJiBTQ3BudC0+Y21uZCAhPSBTQ3BudC0+cmVxdWVzdC0+Y21kKQorCQltZW1wb29sX2ZyZWUoU0NwbnQtPmNtbmQsIHNkX2NkYl9wb29sKTsKKwogCXJldHVybiBnb29kX2J5dGVzOwogfQogCkBAIC0xMjM4LDM0ICsxMzA3LDI4IEBACiAJdTggdHlwZTsKIAogCWlmIChzY3NpX2RldmljZV9wcm90ZWN0aW9uKHNkcCkgPT0gMCB8fCAoYnVmZmVyWzEyXSAmIDEpID09IDApCi0JCXR5cGUgPSAwOwotCWVsc2UKLQkJdHlwZSA9ICgoYnVmZmVyWzEyXSA+PiAxKSAmIDcpICsgMTsgLyogUF9UWVBFIDAgPSBUeXBlIDEgKi8KKwkJcmV0dXJuOworCisJdHlwZSA9ICgoYnVmZmVyWzEyXSA+PiAxKSAmIDcpICsgMTsgLyogUF9UWVBFIDAgPSBUeXBlIDEgKi8KKworCWlmICh0eXBlID09IHNka3AtPnByb3RlY3Rpb25fdHlwZSB8fCAhc2RrcC0+Zmlyc3Rfc2NhbikKKwkJcmV0dXJuOwogCiAJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gdHlwZTsKIAotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU0RfRElGX1RZUEUwX1BST1RFQ1RJT046Ci0JY2FzZSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTjoKLQljYXNlIFNEX0RJRl9UWVBFM19QUk9URUNUSU9OOgotCQlicmVhazsKLQotCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046Ci0JCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgImZvcm1hdHRlZCB3aXRoIERJRiBUeXBlIDIgIglcCi0JCQkgICJwcm90ZWN0aW9uIHdoaWNoIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4gIglcCi0JCQkgICJEaXNhYmxpbmcgZGlzayFcbiIpOwotCQlnb3RvIGRpc2FibGU7Ci0KLQlkZWZhdWx0OgotCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJmb3JtYXR0ZWQgd2l0aCB1bmtub3duICIJXAotCQkJICAicHJvdGVjdGlvbiB0eXBlICVkLiBEaXNhYmxpbmcgZGlzayFcbiIsIHR5cGUpOwotCQlnb3RvIGRpc2FibGU7CisJaWYgKHR5cGUgPiBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgeworCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJmb3JtYXR0ZWQgd2l0aCB1bnN1cHBvcnRlZCAiCVwKKwkJCSAgInByb3RlY3Rpb24gdHlwZSAldS4gRGlzYWJsaW5nIGRpc2shXG4iLCB0eXBlKTsKKwkJc2RrcC0+Y2FwYWNpdHkgPSAwOworCQlyZXR1cm47CiAJfQogCi0JcmV0dXJuOwotCi1kaXNhYmxlOgotCXNka3AtPmNhcGFjaXR5ID0gMDsKKwlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSkpCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOworCWVsc2UKKwkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2NhcGFjaXR5X2Vycm9yKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLApAQCAtMjMwMCw4ICsyMzYzLDI0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2NsYXNzOwogCisJc2RfY2RiX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNkX2V4dF9jZGIiLCBTRF9FWFRfQ0RCX1NJWkUsCisJCQkJCSAwLCAwLCBOVUxMKTsKKwlpZiAoIXNkX2NkYl9jYWNoZSkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBjYWNoZVxuIik7CisJCWdvdG8gZXJyX291dF9jbGFzczsKKwl9CisKKwlzZF9jZGJfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChTRF9NRU1QT09MX1NJWkUsIHNkX2NkYl9jYWNoZSk7CisJaWYgKCFzZF9jZGJfcG9vbCkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBwb29sXG4iKTsKKwkJZ290byBlcnJfb3V0X2NhY2hlOworCX0KKwogCXJldHVybiAwOwogCitlcnJfb3V0X2NhY2hlOgorCWttZW1fY2FjaGVfZGVzdHJveShzZF9jZGJfY2FjaGUpOworCiBlcnJfb3V0X2NsYXNzOgogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogZXJyX291dDoKQEAgLTIzMjEsNiArMjQwMCw5IEBACiAKIAlTQ1NJX0xPR19ITFFVRVVFKDMsIHByaW50aygiZXhpdF9zZDogZXhpdGluZyBzZCBkcml2ZXJcbiIpKTsKIAorCW1lbXBvb2xfZGVzdHJveShzZF9jZGJfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHNkX2NkYl9jYWNoZSk7CisKIAlzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZF90ZW1wbGF0ZS5nZW5kcnYpOwogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDg0NzRiNWJhLi5lMzc0ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtMzcsNiArMzcsMTEgQEAKICAqLwogI2RlZmluZSBTRF9MQVNUX0JVR0dZX1NFQ1RPUlMJOAogCitlbnVtIHsKKwlTRF9FWFRfQ0RCX1NJWkUgPSAzMiwJLyogRXh0ZW5kZWQgQ0RCIHNpemUgKi8KKwlTRF9NRU1QT09MX1NJWkUgPSAyLAkvKiBDREIgcG9vbCBzaXplICovCit9OworCiBzdHJ1Y3Qgc2NzaV9kaXNrIHsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRyaXZlcjsJLyogYWx3YXlzICZzZF90ZW1wbGF0ZSAqLwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwpAQCAtMTAxLDE2ICsxMDYsMTIgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQogCi1leHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICopOwogZXh0ZXJuIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQotewotfQogc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICpkaXNrKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDgyZjE0YTkuLjg4ZGE5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMyMCwxNSArMzIwLDYgQEAKIAkJZGlmID0gMDsgZGl4ID0gMTsKIAl9CiAKLQlpZiAodHlwZSkgewotCQlpZiAoZGlmKQotCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAotCQkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCQllbHNlCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCX0KLQogCWlmICghZGl4KQogCQlyZXR1cm47CiAKQEAgLTM2MCw2MiArMzUxLDYgQEAKIH0KIAogLyoKLSAqIERJRiBETUEgb3BlcmF0aW9uIG1hZ2ljIGRlY29kZXIgcmluZy4KLSAqLwotdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKLQotCXByb3Rfb3AgPSAwOwotCi0JLyogQ29udmVydCBjaGVja3N1bT8gKi8KLQlpZiAoc2NzaV9ob3N0X2dldF9ndWFyZChzY21kLT5kZXZpY2UtPmhvc3QpICE9IFNIT1NUX0RJWF9HVUFSRF9DUkMpCi0JCWNzdW1fY29udmVydCA9IDE7Ci0JZWxzZQotCQljc3VtX2NvbnZlcnQgPSAwOwotCi0JQlVHX09OKGRpZiAmJiAoc2NtZC0+Y21uZFswXSA9PSBSRUFEXzYgfHwgc2NtZC0+Y21uZFswXSA9PSBXUklURV82KSk7Ci0KLQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKLQljYXNlIFJFQURfNjoKLQljYXNlIFJFQURfMTA6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xNjoKLQkJaWYgKGRpZiAmJiBkaXgpCi0JCQlpZiAoY3N1bV9jb252ZXJ0KQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9QQVNTOwotCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9TVFJJUDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfSU5TRVJUOwotCi0JCWJyZWFrOwotCi0JY2FzZSBXUklURV82OgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBXUklURV8xMjoKLQljYXNlIFdSSVRFXzE2OgotCQlpZiAoZGlmICYmIGRpeCkKLQkJCWlmIChjc3VtX2NvbnZlcnQpCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKLQkJZWxzZSBpZiAoZGlmICYmICFkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOwotCi0JCWJyZWFrOwotCX0KLQotCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7Ci0JaWYgKGRpZikKLQkJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIHR5cGUpOwotfQotCi0vKgogICogVGhlIHZpcnR1YWwgc3RhcnQgc2VjdG9yIGlzIHRoZSBvbmUgdGhhdCB3YXMgb3JpZ2luYWxseSBzdWJtaXR0ZWQKICAqIGJ5IHRoZSBibG9jayBsYXllci4JRHVlIHRvIHBhcnRpdGlvbmluZywgTUQvRE0gY2xvbmluZywgZXRjLiB0aGUKICAqIGFjdHVhbCBwaHlzaWNhbCBzdGFydCBzZWN0b3IgaXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudC4gIFJlbWFwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDg0OGI1OTQuLjA0MGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2dfbW1hcF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNnX21tYXBfdm1fb3BzID0gewogCS5mYXVsdCA9IHNnX3ZtYV9mYXVsdCwKIH07CiAKQEAgLTEzMTcsNyArMTMxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IHNnX3JlYWQsCiAJLndyaXRlID0gc2dfd3JpdGUsCkBAIC0xNzA4LDExICsxNzA4LDYgQEAKIAlTZ19zY2F0dGVyX2hvbGQgKnJlcV9zY2hwID0gJnNycC0+ZGF0YTsKIAogCVNDU0lfTE9HX1RJTUVPVVQoNCwgcHJpbnRrKCJzZ19maW5pc2hfcmVtX3JlcTogcmVzX3VzZWQ9JWRcbiIsIChpbnQpIHNycC0+cmVzX3VzZWQpKTsKLQlpZiAoc3JwLT5yZXNfdXNlZCkKLQkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOwotCWVsc2UKLQkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOwotCiAJaWYgKHNycC0+cnEpIHsKIAkJaWYgKHNycC0+YmlvKQogCQkJcmV0ID0gYmxrX3JxX3VubWFwX3VzZXIoc3JwLT5iaW8pOwpAQCAtMTcyMCw2ICsxNzE1LDExIEBACiAJCWJsa19wdXRfcmVxdWVzdChzcnAtPnJxKTsKIAl9CiAKKwlpZiAoc3JwLT5yZXNfdXNlZCkKKwkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOworCWVsc2UKKwkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOworCiAJc2dfcmVtb3ZlX3JlcXVlc3Qoc2ZwLCBzcnApOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxOTQsOSArMjE5NCwxMSBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2FkaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3Qgc2dfcHJvY193cml0ZV9hZGlvKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpb19mb3BzID0gewotCS8qIC5vd25lciwgLnJlYWQgYW5kIC5sbHNlZWsgYWRkZWQgaW4gc2dfcHJvY19pbml0KCkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkaW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fYWRpbywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLndyaXRlID0gc2dfcHJvY193cml0ZV9hZGlvLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtMjIwNCwyMyArMjIwNiwzMiBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2RyZXNzeihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19wcm9jX3dyaXRlX2RyZXNzeihzdHJ1Y3QgZmlsZSAqZmlscCwgCiAJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJlc3N6X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmVzc3pfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZHJlc3N6LAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkud3JpdGUgPSBzZ19wcm9jX3dyaXRlX2RyZXNzeiwKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBzZ19wcm9jX3NlcV9zaG93X3ZlcnNpb24oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl92ZXJzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fdmVyc2lvbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZXZoZHIoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl9kZXZoZHIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2aGRyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZoZHJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZGV2aGRyLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIApAQCAtMjIyOSw4ICsyMjQwLDExIEBACiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcyk7CiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyB2b2lkIGRldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXYsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfc2VxX29wcyA9IHsKQEAgLTIyNDIsOCArMjI1NiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGV2c3RycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX29wZW5fZGV2c3RycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGV2c3RycywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldnN0cnNfc2VxX29wcyA9IHsKQEAgLTIyNTUsOCArMjI3MiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGVidWcoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19vcGVuX2RlYnVnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RlYnVnLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGVidWdfc2VxX29wcyA9IHsKQEAgLTIyNjksNyArMjI4OSw3IEBACiAKIHN0cnVjdCBzZ19wcm9jX2xlYWYgewogCWNvbnN0IGNoYXIgKiBuYW1lOwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOwogfTsKIAogc3RhdGljIHN0cnVjdCBzZ19wcm9jX2xlYWYgc2dfcHJvY19sZWFmX2FycltdID0gewpAQCAtMjI5NSw5ICsyMzE1LDYgQEAKIAlmb3IgKGsgPSAwOyBrIDwgbnVtX2xlYXZlczsgKytrKSB7CiAJCWxlYWYgPSAmc2dfcHJvY19sZWFmX2FycltrXTsKIAkJbWFzayA9IGxlYWYtPmZvcHMtPndyaXRlID8gU19JUlVHTyB8IFNfSVdVU1IgOiBTX0lSVUdPOwotCQlsZWFmLT5mb3BzLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlsZWFmLT5mb3BzLT5yZWFkID0gc2VxX3JlYWQ7Ci0JCWxlYWYtPmZvcHMtPmxsc2VlayA9IHNlcV9sc2VlazsKIAkJcHJvY19jcmVhdGUobGVhZi0+bmFtZSwgbWFzaywgc2dfcHJvY19zZ3AsIGxlYWYtPmZvcHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggZWI2MWY3YS4uZDZmMzQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTY4NCwxNCArNjg0LDIwIEBACiAJCWNkLT5jYXBhY2l0eSA9IDB4MWZmZmZmOwogCQlzZWN0b3Jfc2l6ZSA9IDIwNDg7CS8qIEEgZ3Vlc3MsIGp1c3QgaW4gY2FzZSAqLwogCX0gZWxzZSB7Ci0jaWYgMAotCQlpZiAoY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbigmY2QtPmNkaSwKLQkJCQkJICAgJmNkLT5jYXBhY2l0eSkpCi0jZW5kaWYKLQkJCWNkLT5jYXBhY2l0eSA9IDEgKyAoKGJ1ZmZlclswXSA8PCAyNCkgfAotCQkJCQkJICAgIChidWZmZXJbMV0gPDwgMTYpIHwKLQkJCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwKLQkJCQkJCSAgICBidWZmZXJbM10pOworCQlsb25nIGxhc3Rfd3JpdHRlbjsKKworCQljZC0+Y2FwYWNpdHkgPSAxICsgKChidWZmZXJbMF0gPDwgMjQpIHwgKGJ1ZmZlclsxXSA8PCAxNikgfAorCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwgYnVmZmVyWzNdKTsKKwkJLyoKKwkJICogUkVBRF9DQVBBQ0lUWSBkb2Vzbid0IHJldHVybiB0aGUgY29ycmVjdCBzaXplIG9uCisJCSAqIGNlcnRhaW4gVURGIG1lZGlhLiAgSWYgbGFzdF93cml0dGVuIGlzIGxhcmdlciwgdXNlCisJCSAqIGl0IGluc3RlYWQuCisJCSAqCisJCSAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY4CisJCSAqLworCQlpZiAoIWNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oJmNkLT5jZGksICZsYXN0X3dyaXR0ZW4pKQorCQkJY2QtPmNhcGFjaXR5ID0gbWF4X3QobG9uZywgY2QtPmNhcGFjaXR5LCBsYXN0X3dyaXR0ZW4pOworCiAJCXNlY3Rvcl9zaXplID0gKGJ1ZmZlcls0XSA8PCAyNCkgfAogCQkgICAgKGJ1ZmZlcls1XSA8PCAxNikgfCAoYnVmZmVyWzZdIDw8IDgpIHwgYnVmZmVyWzddOwogCQlzd2l0Y2ggKHNlY3Rvcl9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGIzM2QwNDIuLjEyZDU4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0yODU5LDExICsyODU5LDggQEAKIAkJCWlvY3RsX3Jlc3VsdCA9IHN0X2ludF9pb2N0bChTVHAsIE1UQlNGLCAxKTsKIAogCQlpZiAoY21kX2luID09IE1UU0VUQkxLIHx8IGNtZF9pbiA9PSBTRVRfREVOU19BTkRfQkxLKSB7Ci0JCQlpbnQgb2xkX2Jsb2NrX3NpemUgPSBTVHAtPmJsb2NrX3NpemU7CiAJCQlTVHAtPmJsb2NrX3NpemUgPSBhcmcgJiBNVF9TVF9CTEtTSVpFX01BU0s7CiAJCQlpZiAoU1RwLT5ibG9ja19zaXplICE9IDApIHsKLQkJCQlpZiAob2xkX2Jsb2NrX3NpemUgPT0gMCkKLQkJCQkJbm9ybWFsaXplX2J1ZmZlcihTVHAtPmJ1ZmZlcik7CiAJCQkJKFNUcC0+YnVmZmVyKS0+YnVmZmVyX2Jsb2NrcyA9CiAJCQkJICAgIChTVHAtPmJ1ZmZlciktPmJ1ZmZlcl9zaXplIC8gU1RwLT5ibG9ja19zaXplOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDIyMDk2MjAuLjczN2I0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTY0LDYgKzY0LDggQEAKIAlyZXR1cm4gKHNlcmlhbDgyNTBfcmVnLm1pbm9yIC0gNjQpICsgcG9ydC0+bGluZTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBza2lwX3R4ZW5fdGVzdDsgLyogZm9yY2Ugc2tpcCBvZiB0eGVuIHRlc3QgYXQgaW5pdCB0aW1lICovCisKIC8qCiAgKiBEZWJ1Z2dpbmcuCiAgKi8KQEAgLTEwODcsNyArMTA4OSw3IEBACiAJaWYgKCF1cC0+cG9ydC5pb2Jhc2UgJiYgIXVwLT5wb3J0Lm1hcGJhc2UgJiYgIXVwLT5wb3J0Lm1lbWJhc2UpCiAJCXJldHVybjsKIAotCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNHgsIDB4JXApOiAiLAorCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNGx4LCAweCVwKTogIiwKIAkJICAgICAgIHNlcmlhbF9pbmRleCgmdXAtPnBvcnQpLCB1cC0+cG9ydC5pb2Jhc2UsIHVwLT5wb3J0Lm1lbWJhc2UpOwogCiAJLyoKQEAgLTIxMDgsNyArMjExMCw3IEBACiAJICAgaXMgdmFyaWFibGUuIFNvLCBsZXQncyBqdXN0IGRvbid0IHRlc3QgaWYgd2UgcmVjZWl2ZQogCSAgIFRYIGlycS4gVGhpcyB3YXksIHdlJ2xsIG5ldmVyIGVuYWJsZSBVQVJUX0JVR19UWEVOLgogCSAqLwotCWlmICh1cC0+cG9ydC5mbGFncyAmIFVQRl9OT19UWEVOX1RFU1QpCisJaWYgKHNraXBfdHhlbl90ZXN0IHx8IHVwLT5wb3J0LmZsYWdzICYgVVBGX05PX1RYRU5fVEVTVCkKIAkJZ290byBkb250X3Rlc3RfdHhfZW47CiAKIAkvKgpAQCAtMzI0OCw2ICszMjUwLDkgQEAKIG1vZHVsZV9wYXJhbShucl91YXJ0cywgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5yX3VhcnRzLCAiTWF4aW11bSBudW1iZXIgb2YgVUFSVHMgc3VwcG9ydGVkLiAoMS0iIF9fTU9EVUxFX1NUUklORyhDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMpICIpIik7CiAKK21vZHVsZV9wYXJhbShza2lwX3R4ZW5fdGVzdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNraXBfdHhlbl90ZXN0LCAiU2tpcCBjaGVja2luZyBmb3IgdGhlIFRYRU4gYnVnIGF0IGluaXQgdGltZSIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQogbW9kdWxlX3BhcmFtX2FycmF5KHByb2JlX3JzYSwgdWxvbmcsICZwcm9iZV9yc2FfY291bnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9yc2EsICJQcm9iZSBJL08gcG9ydHMgZm9yIFJTQSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggZTcxMDhlNy4uYjI4YWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xNTYxLDExICsxNTYxLDE2IEBACiAJcGJuX2V4YXJfWFIxN0MxNTIsCiAJcGJuX2V4YXJfWFIxN0MxNTQsCiAJcGJuX2V4YXJfWFIxN0MxNTgsCisJcGJuX2V4YXJfaWJtX3NhdHVybiwKIAlwYm5fcGFzZW1pXzE2ODJNLAogCXBibl9uaTg0MzBfMiwKIAlwYm5fbmk4NDMwXzQsCiAJcGJuX25pODQzMF84LAogCXBibl9uaTg0MzBfMTYsCisJcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwLAogfTsKIAogLyoKQEAgLTIxNDYsNiArMjE1MSwxMyBAQAogCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAogCQkudWFydF9vZmZzZXQJPSAweDIwMCwKIAl9LAorCVtwYm5fZXhhcl9pYm1fc2F0dXJuXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJfSwKKwogCS8qCiAJICogUEEgU2VtaSBQV1JmaWNpZW50IFBBNlQtMTY4Mk0gb24tY2hpcCBVQVJUCiAJICovCkBAIC0yMTg1LDYgKzIxOTcsMzcgQEAKIAkJLnVhcnRfb2Zmc2V0CT0gMHgxMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4ODAwLAogCX0sCisJLyoKKwkgKiBBRERJLURBVEEgR21iSCBQQ0ktRXhwcmVzcyBjb21tdW5pY2F0aW9uIGNhcmRzIDxpbmZvQGFkZGktZGF0YS5jb20+CisJICovCisJW3Bibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDEsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAyLAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gNCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDgsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvZnRtb2RlbV9ibGFja2xpc3RbXSA9IHsKQEAgLTIzNDAsNyArMjM4Myw3IEBACiAJCQlicmVhazsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19QQ0kKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICV4LCBpcnEgJWQsIHR5cGUgJWRcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJTZXR1cCBQQ0kgcG9ydDogcG9ydCAlbHgsIGlycSAlZCwgdHlwZSAlZFxuIiwKIAkJICAgICAgIHNlcmlhbF9wb3J0LmlvYmFzZSwgc2VyaWFsX3BvcnQuaXJxLCBzZXJpYWxfcG9ydC5pb3R5cGUpOwogI2VuZGlmCiAKQEAgLTI2NDksNiArMjY5Miw5IEBACiAJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILAogCQlQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSwgMCwgMCwKIAkJcGJuX2IwXzhfMTg0MzIwMF8yMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfRVhBUiwgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyLAorCQlQQ0lfVkVORE9SX0lEX0lCTSwgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVCwKKwkJMCwgMCwgcGJuX2V4YXJfaWJtX3NhdHVybiB9LAogCiAJewlQQ0lfVkVORE9SX0lEX1NFQUxFVkVMLCBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1U1MzAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCkBAIC0zMDkzLDYgKzMxMzksMTIgQEAKIAl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCisJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF9idF8yXzExNTIwMCB9LAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfNF80NjA4MDAgfSwKQEAgLTM1NTYsNiArMzYwOCwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCAwMzQyMmNlLi5lNTIyNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTg2Miw3ICs4NjIsNyBAQAogCiBjb25maWcgU0VSSUFMX1VBUlRMSVRFCiAJdHJpc3RhdGUgIlhpbGlueCB1YXJ0bGl0ZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRQorCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRSB8fCBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYaWxpbnggdWFydGxpdGUgc2VyaWFsIGNvbnRyb2xsZXIuCkBAIC0xNDU4LDQgKzE0NTgsMjMgQEAKIAktLS1oZWxwLS0tCiAJQWRkIHN1cHBvcnQgZm9yIFVBUlQgY29udHJvbGxlciBvbiB0aW1iZXJkYWxlLgogCitjb25maWcgU0VSSUFMX0JDTTYzWFgKKwl0cmlzdGF0ZSAiYmNtNjN4eCBzZXJpYWwgcG9ydCBzdXBwb3J0IgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWRlcGVuZHMgb24gQkNNNjNYWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmNtNjN4eCBDUFUsIHlvdSBjYW4gZW5hYmxlIGl0cyBvbmJvYXJkCisJICBzZXJpYWwgcG9ydCBieSBlbmFibGluZyB0aGlzIG9wdGlvbnMuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmNtOTYzeHhfdWFydC4KKworY29uZmlnIFNFUklBTF9CQ002M1hYX0NPTlNPTEUKKwlib29sICJDb25zb2xlIG9uIGJjbTYzeHggc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfQkNNNjNYWD15CisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBzZXJpYWwgcG9ydCBvbiB0aGUgYmNtNjN4eCBDUFUKKwkgIHlvdSBjYW4gbWFrZSBpdCB0aGUgY29uc29sZSBieSBhbnN3ZXJpbmcgWSB0byB0aGlzIG9wdGlvbi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA5N2Y2ZmNjLi5kMjFkNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QWEEpICs9IHB4YS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1BOWDhYWFgpICs9IHBueDh4eHhfdWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBMTEwMCkgKz0gc2ExMTAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfQkNNNjNYWCkgKz0gYmNtNjN4eF91YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfQkZJTikgKz0gYmZpbl81eHgubwogb2JqLSQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSArPSBiZmluX3Nwb3J0X3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9TQU1TVU5HKSArPSBzYW1zdW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggMzU1MWM1Yy4uOWQ5NDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKEFUTUVMX1NFUklBTF9SSU5HU0laRSkpOworCUJVSUxEX0JVR19PTihBVE1FTF9TRVJJQUxfUklOR1NJWkUgJiAoQVRNRUxfU0VSSUFMX1JJTkdTSVpFIC0gMSkpOwogCiAJcG9ydCA9ICZhdG1lbF9wb3J0c1twZGV2LT5pZF07CiAJcG9ydC0+YmFja3VwX2ltciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGRhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtMCwwICsxLDg5MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBtYW55IGRyaXZlcnMgdXNpbmcgZ2VuZXJpY19zZXJpYWwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICoKKyAqICBTZXJpYWwgZHJpdmVyIGZvciBCQ002M3h4IGludGVncmF0ZWQgVUFSVC4KKyAqCisgKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgd2FzIF9ub3RfIHRlc3RlZCBzaW5jZSBJIG9ubHkgaGF2ZSBSWC9UWCBvbgorICogbXkgYm9hcmQuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CQ002M1hYX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGJjbTYzeHhfY2xrLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pcnEuaD4KKyNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lvLmg+CisKKyNkZWZpbmUgQkNNNjNYWF9OUl9VQVJUUwkxCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHBvcnRzW0JDTTYzWFhfTlJfVUFSVFNdOworCisvKgorICogcnggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqICAtIHJ4IGZpZm8gZnVsbAorICogIC0gcnggZmlmbyBhYm92ZSB0aHJlc2hvbGQKKyAqICAtIHJ4IGZpZm8gbm90IGVtcHR5IGZvciB0b28gbG9uZworICovCisjZGVmaW5lIFVBUlRfUlhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX01BU0soVUFSVF9JUl9SWFRJTUVPVVQpKQorCisjZGVmaW5lIFVBUlRfUlhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWFRJTUVPVVQpKQorCisvKgorICogdHggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqIC0gdHggZmlmbyBlbXB0eQorICogLSB0eCBmaWZvIGJlbG93IHRocmVzaG9sZAorICovCisjZGVmaW5lIFVBUlRfVFhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYVFJFU0gpKQorCisjZGVmaW5lIFVBUlRfVFhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1RYVFJFU0gpKQorCisvKgorICogZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0CisgKgorICogbWFzazogYW55IGVkZ2Ugb24gQ1RTLCBEQ0QKKyAqLworI2RlZmluZSBVQVJUX0VYVElOUF9JTlRfTUFTSwkoVUFSVF9FWFRJTlBfSVJNQVNLKFVBUlRfRVhUSU5QX0lSX0NUUykgfCBcCisJCQkJIFVBUlRfRVhUSU5QX0lSTUFTSyhVQVJUX0VYVElOUF9JUl9EQ0QpKQorCisvKgorICogaGFuZHkgdWFydCByZWdpc3RlciBhY2Nlc3NvcgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiY21fdWFydF9yZWFkbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQkgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gYmNtX3JlYWRsKHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtX3VhcnRfd3JpdGVsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJYmNtX3dyaXRlbCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNoZWNrIGlmIHVhcnQgdHggZmlmbyBpcyBlbXB0eQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJjbV91YXJ0X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwlyZXR1cm4gKHZhbCAmIFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpKSA/IDEgOiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzZXQgUlRTIGFuZCBEVFIgcGluIHN0YXRlIGFuZCBsb29wYmFjayBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9EVFJfTUFTSyB8IFVBUlRfTUNUTF9SVFNfTUFTSyk7CisJLyogaW52ZXJ0IG9mIHdyaXR0ZW4gdmFsdWUgaXMgcmVmbGVjdGVkIG9uIHRoZSBwaW4gKi8KKwlpZiAoIShtY3RybCAmIFRJT0NNX0RUUikpCisJCXZhbCB8PSBVQVJUX01DVExfRFRSX01BU0s7CisJaWYgKCEobWN0cmwgJiBUSU9DTV9SVFMpKQorCQl2YWwgfD0gVUFSVF9NQ1RMX1JUU19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfTUNUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAobWN0cmwgJiBUSU9DTV9MT09QKQorCQl2YWwgfD0gVUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+VUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byByZXR1cm4gUkksIENUUywgRENEIGFuZCBEU1IgcGluIHN0YXRlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmNtX3VhcnRfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWN0cmw7CisKKwltY3RybCA9IDA7CisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfUklfTUFTSykKKwkJbWN0cmwgfD0gVElPQ01fUkk7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0NUU19NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DVFM7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0RDRF9NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DRDsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfRFNSX01BU0spCisJCW1jdHJsIHw9IFRJT0NNX0RTUjsKKwlyZXR1cm4gbWN0cmw7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRpc2FibGUgdHggQVNBUCAodXNlZCBmb3IgZmxvdyBjb250cm9sKQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9DVExfVFhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCAmPSB+VUFSVF9UWF9JTlRfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIChyZSllbmFibGUgdHgKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCB8PSBVQVJUX1RYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsIHw9IFVBUlRfQ1RMX1RYRU5fTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzdG9wIHJ4LCBjYWxsZWQgYmVmb3JlIHBvcnQgc2h1dGRvd24KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsICY9IH5VQVJUX1JYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gZW5hYmxlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgcmVwb3J0aW5nCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHN0YXJ0L3N0b3AgZW1pdHRpbmcgYnJlYWsgY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGN0bCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAoY3RsKQorCQl2YWwgfD0gVUFSVF9DVExfWE1JVEJSS19NQVNLOworCWVsc2UKKwkJdmFsICY9IH5VQVJUX0NUTF9YTUlUQlJLX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHJldHVybiBwb3J0IHR5cGUgaW4gc3RyaW5nIGZvcm1hdAorICovCitzdGF0aWMgY29uc3QgY2hhciAqYmNtX3VhcnRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAocG9ydC0+dHlwZSA9PSBQT1JUX0JDTTYzWFgpID8gImJjbTYzeHhfdWFydCIgOiBOVUxMOworfQorCisvKgorICogcmVhZCBhbGwgY2hhcnMgaW4gcnggZmlmbyBhbmQgc2VuZCB0aGVtIHRvIGNvcmUKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZG9fcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGludCBtYXhfY291bnQ7CisKKwkvKiBsaW1pdCBudW1iZXIgb2YgY2hhciByZWFkIGluIGludGVycnVwdCwgc2hvdWxkIG5vdCBiZQorCSAqIGhpZ2hlciB0aGFuIGZpZm8gc2l6ZSBhbnl3YXkgc2luY2Ugd2UncmUgbXVjaCBmYXN0ZXIgdGhhbgorCSAqIHNlcmlhbCBwb3J0ICovCisJbWF4X2NvdW50ID0gMzI7CisJdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJZG8geworCQl1bnNpZ25lZCBpbnQgaWVzdGF0LCBjLCBjc3RhdDsKKwkJY2hhciBmbGFnOworCisJCS8qIGdldCBvdmVycnVuL2ZpZm8gZW1wdHkgaW5mb3JtYXRpb24gZnJvbSBpZXIKKwkJICogcmVnaXN0ZXIgKi8KKwkJaWVzdGF0ID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAoIShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE5PVEVNUFRZKSkpCisJCQlicmVhazsKKworCQljc3RhdCA9IGMgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKKwkJcG9ydC0+aWNvdW50LnJ4Kys7CisJCWZsYWcgPSBUVFlfTk9STUFMOworCQljICY9IDB4ZmY7CisKKwkJaWYgKHVubGlrZWx5KChjc3RhdCAmIFVBUlRfRklGT19BTllFUlJfTUFTSykpKSB7CisJCQkvKiBkbyBzdGF0cyBmaXJzdCAqLworCQkJaWYgKGNzdGF0ICYgVUFSVF9GSUZPX0JSS0RFVF9NQVNLKSB7CisJCQkJcG9ydC0+aWNvdW50LmJyaysrOworCQkJCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19QQVJFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fRlJBTUVFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKKworCQkJLyogdXBkYXRlIGZsYWcgd3J0IHJlYWRfc3RhdHVzX21hc2sgKi8KKwkJCWNzdGF0ICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fQlJLREVUX01BU0spCisJCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19GUkFNRUVSUl9NQVNLKQorCQkJCWZsYWcgPSBUVFlfRlJBTUU7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fUEFSRVJSX01BU0spCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCX0KKworCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh1bmxpa2VseShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE9WRVIpKSkgeworCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCQl9CisKKwkJaWYgKChjc3RhdCAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzaykgPT0gMCkKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgZmxhZyk7CisKKwl9IHdoaWxlICgtLW1heF9jb3VudCk7CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisvKgorICogZmlsbCB0eCBmaWZvIHdpdGggY2hhcnMgdG8gc2VuZCwgc3RvcCB3aGVuIGZpZm8gaXMgYWJvdXQgdG8gYmUgZnVsbAorICogb3Igd2hlbiBhbGwgY2hhcnMgaGF2ZSBiZWVuIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2RvX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0OworCXVuc2lnbmVkIGludCB2YWwsIG1heF9jb3VudDsKKworCWlmIChwb3J0LT54X2NoYXIpIHsKKwkJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHBvcnQtPnhfY2hhciwgVUFSVF9GSUZPX1JFRyk7CisJCXBvcnQtPmljb3VudC50eCsrOworCQlwb3J0LT54X2NoYXIgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgeworCQliY21fdWFydF9zdG9wX3R4KHBvcnQpOworCQlyZXR1cm47CisJfQorCisJeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCWdvdG8gdHhxX2VtcHR5OworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9NQ1RMX1JFRyk7CisJdmFsID0gKHZhbCAmIFVBUlRfTUNUTF9UWEZJRk9GSUxMX01BU0spID4+IFVBUlRfTUNUTF9UWEZJRk9GSUxMX1NISUZUOworCW1heF9jb3VudCA9IHBvcnQtPmZpZm9zaXplIC0gdmFsOworCisJd2hpbGUgKG1heF9jb3VudC0tKSB7CisJCXVuc2lnbmVkIGludCBjOworCisJCWMgPSB4bWl0LT5idWZbeG1pdC0+dGFpbF07CisJCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBjLCBVQVJUX0ZJRk9fUkVHKTsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJZ290byB0eHFfZW1wdHk7CisJcmV0dXJuOworCit0eHFfZW1wdHk6CisJLyogbm90aGluZyB0byBzZW5kLCBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdCAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwl2YWwgJj0gflVBUlRfVFhfSU5UX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9JUl9SRUcpOworCXJldHVybjsKK30KKworLyoKKyAqIHByb2Nlc3MgdWFydCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IGJjbV91YXJ0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgaXJxc3RhdDsKKworCXBvcnQgPSBkZXZfaWQ7CisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKworCWlycXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJaWYgKGlycXN0YXQgJiBVQVJUX1JYX0lOVF9TVEFUKQorCQliY21fdWFydF9kb19yeChwb3J0KTsKKworCWlmIChpcnFzdGF0ICYgVUFSVF9UWF9JTlRfU1RBVCkKKwkJYmNtX3VhcnRfZG9fdHgocG9ydCk7CisKKwlpZiAoaXJxc3RhdCAmIFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKSkgeworCQl1bnNpZ25lZCBpbnQgZXN0YXQ7CisKKwkJZXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0VYVElOUF9SRUcpOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfQ1RTKSkKKwkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfRENEKSkKKwkJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfRENEX01BU0spOworCX0KKworCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBlbmFibGUgcnggJiB0eCBvcGVyYXRpb24gb24gdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9lbmFibGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgfD0gKFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfCBVQVJUX0NUTF9SWEVOX01BU0spOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBkaXNhYmxlIHJ4ICYgdHggb3BlcmF0aW9uIG9uIHVhcnQKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZGlzYWJsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfAorCQkgVUFSVF9DVExfUlhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogY2xlYXIgYWxsIHVucmVhZCBkYXRhIGluIHJ4IGZpZm8gYW5kIHVuc2VudCBkYXRhIGluIHR4IGZpZm8KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZmx1c2goc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogZW1wdHkgcnggYW5kIHR4IGZpZm8gKi8KKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCB8PSBVQVJUX0NUTF9SU1RSWEZJRk9fTUFTSyB8IFVBUlRfQ1RMX1JTVFRYRklGT19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZWFkIGFueSBwZW5kaW5nIGNoYXIgdG8gbWFrZSBzdXJlIGFsbCBpcnEgc3RhdHVzIGFyZQorCSAqIGNsZWFyZWQgKi8KKwkodm9pZCliY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gaW5pdGlhbGl6ZSB1YXJ0IGFuZCBzdGFydCByeCBvcGVyYXRpb24KKyAqLworc3RhdGljIGludCBiY21fdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJLyogbWFzayBhbGwgaXJxIGFuZCBmbHVzaCBwb3J0ICovCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgMCwgVUFSVF9JUl9SRUcpOworCWJjbV91YXJ0X2ZsdXNoKHBvcnQpOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0ICovCisJKHZvaWQpYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKworCS8qIHNldCByeC90eCBmaWZvIHRocmVzaCB0byBmaWZvIGhhbGYgc2l6ZSAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfTUFTSyB8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfTUFTSyk7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfU0hJRlQ7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfU0hJRlQ7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9NQ1RMX1JFRyk7CisKKwkvKiBzZXQgcnggZmlmbyB0aW1lb3V0IHRvIDEgY2hhciB0aW1lICovCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgJj0gflVBUlRfQ1RMX1JYVE1PVVRDTlRfTUFTSzsKKwl2YWwgfD0gMSA8PCBVQVJUX0NUTF9SWFRNT1VUQ05UX1NISUZUOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZXBvcnQgYW55IGVkZ2Ugb24gZGNkIGFuZCBjdHMgKi8KKwl2YWwgPSBVQVJUX0VYVElOUF9JTlRfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfRENEX05PU0VOU0VfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfQ1RTX05PU0VOU0VfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0VYVElOUF9SRUcpOworCisJLyogcmVnaXN0ZXIgaXJxIGFuZCBlbmFibGUgcnggaW50ZXJydXB0cyAqLworCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgYmNtX3VhcnRfaW50ZXJydXB0LCAwLAorCQkJICBiY21fdWFydF90eXBlKHBvcnQpLCBwb3J0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBVQVJUX1JYX0lOVF9NQVNLLCBVQVJUX0lSX1JFRyk7CisJYmNtX3VhcnRfZW5hYmxlKHBvcnQpOworCXJldHVybiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBmbHVzaCAmIGRpc2FibGUgdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCAwLCBVQVJUX0lSX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF9mbHVzaChwb3J0KTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGFuZ2UgY3VycmVudCB1YXJ0IHNldHRpbmcKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXVuc2lnbmVkIGludCBjdGwsIGJhdWQsIHF1b3QsIGllcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIGRpc2FibGUgdWFydCB3aGlsZSBjaGFuZ2luZyBzcGVlZCAqLworCWJjbV91YXJ0X2Rpc2FibGUocG9ydCk7CisJYmNtX3VhcnRfZmx1c2gocG9ydCk7CisKKwkvKiB1cGRhdGUgQ29udHJvbCByZWdpc3RlciAqLworCWN0bCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJY3RsICY9IH5VQVJUX0NUTF9CSVRTUEVSU1lNX01BU0s7CisKKwlzd2l0Y2ggKG5ldy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWN0bCB8PSAoMCA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWN0bCB8PSAoMSA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWN0bCB8PSAoMiA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsIHw9ICgzIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwl9CisKKwljdGwgJj0gflVBUlRfQ1RMX1NUT1BCSVRTX01BU0s7CisJaWYgKG5ldy0+Y19jZmxhZyAmIENTVE9QQikKKwkJY3RsIHw9IFVBUlRfQ1RMX1NUT1BCSVRTXzI7CisJZWxzZQorCQljdGwgfD0gVUFSVF9DVExfU1RPUEJJVFNfMTsKKworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRU5fTUFTSyB8IFVBUlRfQ1RMX1RYUEFSRU5fTUFTSyk7CisJaWYgKG5ldy0+Y19jZmxhZyAmIFBBUkVOQikKKwkJY3RsIHw9IChVQVJUX0NUTF9SWFBBUkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVOX01BU0spOworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRVZFTl9NQVNLIHwgVUFSVF9DVExfVFhQQVJFVkVOX01BU0spOworCWlmIChuZXctPmNfY2ZsYWcgJiBQQVJPREQpCisJCWN0bCB8PSAoVUFSVF9DVExfUlhQQVJFVkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVWRU5fTUFTSyk7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIGN0bCwgVUFSVF9DVExfUkVHKTsKKworCS8qIHVwZGF0ZSBCYXVkd29yZCByZWdpc3RlciAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgbmV3LCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsgLyAxNik7CisJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCkgLSAxOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBxdW90LCBVQVJUX0JBVURfUkVHKTsKKworCS8qIHVwZGF0ZSBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwlpZXIgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisKKwlpZXIgJj0gflVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwlpZiAoVUFSVF9FTkFCTEVfTVMocG9ydCwgbmV3LT5jX2NmbGFnKSkKKwkJaWVyIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBpZXIsIFVBUlRfSVJfUkVHKTsKKworCS8qIHVwZGF0ZSByZWFkL2lnbm9yZSBtYXNrICovCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCWlmIChuZXctPmNfaWZsYWcgJiBJTlBDSykgeworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19GUkFNRUVSUl9NQVNLOworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwl9CisJaWYgKG5ldy0+Y19pZmxhZyAmIChCUktJTlQpKQorCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19CUktERVRfTUFTSzsKKworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CisJaWYgKG5ldy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwlpZiAobmV3LT5jX2lmbGFnICYgSUdOQlJLKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX0JSS0RFVF9NQVNLOworCWlmICghKG5ldy0+Y19jZmxhZyAmIENSRUFEKSkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBuZXctPmNfY2ZsYWcsIGJhdWQpOworCWJjbV91YXJ0X2VuYWJsZShwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNsYWltIHVhcnQgaW9tZW0KKyAqLworc3RhdGljIGludCBiY21fdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBSU0VUX1VBUlRfU0laRTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplLCAiYmNtNjN4eCIpKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcChwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwlpZiAoIXBvcnQtPm1lbWJhc2UpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHJlbGVhc2UgdWFydCBpb21lbQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZWxlYXNlX21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgUlNFVF9VQVJUX1NJWkUpOworCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRvIGFueSBwb3J0IHJlcXVpcmVkIGF1dG9jb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCWlmIChiY21fdWFydF9yZXF1ZXN0X3BvcnQocG9ydCkpCisJCQlyZXR1cm47CisJCXBvcnQtPnR5cGUgPSBQT1JUX0JDTTYzWFg7CisJfQorfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGVjayB0aGF0IHBvcnQgaW5mb3JtYXRpb24gaW4gc2VyaW5mbyBhcmUKKyAqIHN1aXRhYmxlCisgKi8KK3N0YXRpYyBpbnQgYmNtX3VhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyaW5mbykKK3sKKwlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX0JDTTYzWFgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5pcnEgIT0gc2VyaW5mby0+aXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydC0+aW90eXBlICE9IHNlcmluZm8tPmlvX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5tYXBiYXNlICE9ICh1bnNpZ25lZCBsb25nKXNlcmluZm8tPmlvbWVtX2Jhc2UpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiBzZXJpYWwgY29yZSBjYWxsYmFja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgYmNtX3VhcnRfb3BzID0geworCS50eF9lbXB0eQk9IGJjbV91YXJ0X3R4X2VtcHR5LAorCS5nZXRfbWN0cmwJPSBiY21fdWFydF9nZXRfbWN0cmwsCisJLnNldF9tY3RybAk9IGJjbV91YXJ0X3NldF9tY3RybCwKKwkuc3RhcnRfdHgJPSBiY21fdWFydF9zdGFydF90eCwKKwkuc3RvcF90eAk9IGJjbV91YXJ0X3N0b3BfdHgsCisJLnN0b3BfcngJPSBiY21fdWFydF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBiY21fdWFydF9lbmFibGVfbXMsCisJLmJyZWFrX2N0bAk9IGJjbV91YXJ0X2JyZWFrX2N0bCwKKwkuc3RhcnR1cAk9IGJjbV91YXJ0X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmNtX3VhcnRfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zCT0gYmNtX3VhcnRfc2V0X3Rlcm1pb3MsCisJLnR5cGUJCT0gYmNtX3VhcnRfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gYmNtX3VhcnRfcmVsZWFzZV9wb3J0LAorCS5yZXF1ZXN0X3BvcnQJPSBiY21fdWFydF9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0CT0gYmNtX3VhcnRfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gYmNtX3VhcnRfdmVyaWZ5X3BvcnQsCit9OworCisKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1vdXQ7CisKKwkvKiBXYWl0IHVwIHRvIDEwbXMgZm9yIHRoZSBjaGFyYWN0ZXIocykgdG8gYmUgc2VudC4gKi8KKwl0bW91dCA9IDEwMDAwOworCXdoaWxlICgtLXRtb3V0KSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAodmFsICYgVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhFTVBUWSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCS8qIFdhaXQgdXAgdG8gMXMgZm9yIGZsb3cgY29udHJvbCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocG9ydC0+ZmxhZ3MgJiBVUEZfQ09OU19GTE9XKSB7CisJCXRtb3V0ID0gMTAwMDAwMDsKKwkJd2hpbGUgKC0tdG1vdXQpIHsKKwkJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRVhUSU5QX1JFRyk7CisJCQlpZiAodmFsICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBvdXRwdXQgZ2l2ZW4gY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgY2gsIFVBUlRfRklGT19SRUcpOworfQorCisvKgorICogY29uc29sZSBjb3JlIHJlcXVlc3QgdG8gb3V0cHV0IGdpdmVuIHN0cmluZworICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsb2NrZWQ7CisKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHBvcnQtPnN5c3JxKSB7CisJCS8qIGJjbV91YXJ0X2ludGVycnVwdCgpIGFscmVhZHkgdG9vayB0aGUgbG9jayAqLworCQlsb2NrZWQgPSAwOworCX0gZWxzZSBpZiAob29wc19pbl9wcm9ncmVzcykgeworCQlsb2NrZWQgPSBzcGluX3RyeWxvY2soJnBvcnQtPmxvY2spOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJCWxvY2tlZCA9IDE7CisJfQorCisJLyogY2FsbCBoZWxwZXIgdG8gZGVhbCB3aXRoIFxyXG4gKi8KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGJjbV9jb25zb2xlX3B1dGNoYXIpOworCisJLyogYW5kIHdhaXQgZm9yIGNoYXIgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKworCWlmIChsb2NrZWQpCisJCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBjb25zb2xlIGNvcmUgcmVxdWVzdCB0byBzZXR1cCBnaXZlbiBjb25zb2xlLCBmaW5kIG1hdGNoaW5nIHVhcnQKKyAqIHBvcnQgYW5kIHNldHVwIGl0LgorICovCitzdGF0aWMgaW50IGJjbV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCWludCBiYXVkID0gOTYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKworCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBCQ002M1hYX05SX1VBUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisJaWYgKCFwb3J0LT5tZW1iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCisJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmNtNjN4eF9jb25zb2xlID0geworCS5uYW1lCQk9ICJ0dHlTIiwKKwkud3JpdGUJCT0gYmNtX2NvbnNvbGVfd3JpdGUsCisJLmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cAkJPSBiY21fY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmYmNtX3VhcnRfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9jb25zb2xlX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9jb25zb2xlKCZiY202M3h4X2NvbnNvbGUpOworCXJldHVybiAwOworfQorCitjb25zb2xlX2luaXRjYWxsKGJjbTYzeHhfY29uc29sZV9pbml0KTsKKworI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJKCZiY202M3h4X2NvbnNvbGUpCisjZWxzZQorI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFICovCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyX25hbWUJPSAiYmNtNjN4eF91YXJ0IiwKKwkuZGV2X25hbWUJPSAidHR5UyIsCisJLm1ham9yCQk9IFRUWV9NQUpPUiwKKwkubWlub3IJCT0gNjQsCisJLm5yCQk9IDEsCisJLmNvbnMJCT0gQkNNNjNYWF9DT05TT0xFLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlciBwcm9iZS9yZW1vdmUgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtX3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tZW0sICpyZXNfaXJxOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID49IEJDTTYzWFhfTlJfVUFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvcnRzW3BkZXYtPmlkXS5tZW1iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVzX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNfbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlc19pcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzX2lycSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZXJpcGgiKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9ICZwb3J0c1twZGV2LT5pZF07CisJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOworCXBvcnQtPmlvdHlwZSA9IFVQSU9fTUVNOworCXBvcnQtPm1hcGJhc2UgPSByZXNfbWVtLT5zdGFydDsKKwlwb3J0LT5pcnEgPSByZXNfaXJxLT5zdGFydDsKKwlwb3J0LT5vcHMgPSAmYmNtX3VhcnRfb3BzOworCXBvcnQtPmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7CisJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwb3J0LT5maWZvc2l6ZSA9IDE2OworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIDI7CisJY2xrX3B1dChjbGspOworCisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJaWYgKHJldCkgeworCQlrZnJlZShwb3J0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJjbV91YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJLyogbWFyayBwb3J0IGFzIGZyZWUgKi8KKwlwb3J0c1twZGV2LT5pZF0ubWVtYmFzZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwbGF0Zm9ybSBkcml2ZXIgc3R1ZmYKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtX3VhcnRfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQk9IGJjbV91YXJ0X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChiY21fdWFydF9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgPSAiYmNtNjN4eF91YXJ0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtX3VhcnRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmYmNtX3VhcnRfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQpCisJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtX3VhcnRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJjbV91YXJ0X2luaXQpOworbW9kdWxlX2V4aXQoYmNtX3VhcnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDYzPHh4IGludGVncmF0ZWQgdWFydCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCA4ZDM0OWIyMy4uMzAwY2VhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdTggKnA7CiAJaW50IGNvdW50OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJLyogSGFuZGxlIHhvbi94b2ZmICovCiAJaWYgKHBvcnQtPnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCmluZGV4IDdiZTUyZmUuLjMxZjE3MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMmQ3ZmVlY2EuLjAwMjhiNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYworKysgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCWlmIChwb3J0IDwgNCkgewogCQl0ZW1wID0gcmVhZGwoc3RvcF9wcm9jW3BvcnRdLmdsb2JhbF9jb250cm9sX3JlZyk7CiAJCXRlbXAgPQotCSAgICAJCSh0ZW1wICYgfnN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CisJCQkodGVtcCAmIH5zdGFydF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZCkgfCBzdG9wX3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkOwogCQl3cml0ZWwodGVtcCwgc3RvcF9wcm9jW3BvcnRdLmdsb2JhbF9jb250cm9sX3JlZyk7CiAKIAkJLyogd3JpdGUgZmx1c2ggKi8KQEAgLTMzNiw3ICszMzYsNyBAQAogCWlmIChwb3J0IDwgNCkgewogCQl0ZW1wID0gcmVhZGwoc3RhcnRfcHJvY1twb3J0XS5nbG9iYWxfY29udHJvbF9yZWcpOwogCQl0ZW1wID0KLQkgICAgCQkodGVtcCAmIH5zdG9wX3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkOworCQkJKHRlbXAgJiB+c3RvcF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZCkgfCBzdGFydF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZDsKIAkJd3JpdGVsKHRlbXAsIHN0YXJ0X3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAogCQkvKiB3cml0ZSBmbHVzaCAqLwpAQCAtNTA5LDggKzUwOSw4IEBACiAJCWRldl9lcnIoJmljb21fcG9ydC0+YWRhcHRlci0+cGNpX2Rldi0+ZGV2LCJQb3J0IG5vdCBvcGVydGlvbmFsXG4iKTsKIAl9CiAKLSAgICAgIGlmIChuZXdfcGFnZSAhPSBOVUxMKQotCSAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCA0MDk2LCBuZXdfcGFnZSwgdGVtcF9wY2kpOworCWlmIChuZXdfcGFnZSAhPSBOVUxMKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgNDA5NiwgbmV3X3BhZ2UsIHRlbXBfcGNpKTsKIH0KIAogc3RhdGljIGludCBzdGFydHVwKHN0cnVjdCBpY29tX3BvcnQgKmljb21fcG9ydCkKQEAgLTE0OTMsMTUgKzE0OTMsMTUgQEAKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCBpbmRleDsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfcmVnOwotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICBzdHJ1Y3QgaWNvbV9hZGFwdGVyICppY29tX2FkYXB0ZXI7Ci0gICAgICAgIHN0cnVjdCBpY29tX3BvcnQgKmljb21fcG9ydDsKKwl1bnNpZ25lZCBpbnQgY29tbWFuZF9yZWc7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgaWNvbV9hZGFwdGVyICppY29tX2FkYXB0ZXI7CisJc3RydWN0IGljb21fcG9ydCAqaWNvbV9wb3J0OwogCi0gICAgICAgIHJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0gICAgICAgIGlmIChyZXR2YWwpIHsKKwlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJEZXZpY2UgZW5hYmxlIEZBSUxFRFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAlpZiAoIChyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgImljb20iKSkpIHsKQEAgLTE1MTAsMjMgKzE1MTAsMjMgQEAKIAkJIHJldHVybiByZXR2YWw7CiAJIH0KIAotICAgICAgICBwY2lfc2V0X21hc3RlcihkZXYpOworCXBjaV9zZXRfbWFzdGVyKGRldik7CiAKLSAgICAgICAgaWYgKCAocmV0dmFsID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kX3JlZykpKSB7CisJaWYgKCAocmV0dmFsID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kX3JlZykpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiUENJIENvbmZpZyByZWFkIEZBSUxFRFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgfQorCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwKIAkJY29tbWFuZF9yZWcgfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIKICAJCXwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUik7CiAKLSAgICAgICAgaWYgKGVudC0+ZHJpdmVyX2RhdGEgPT0gQURBUFRFUl9WMSkgeworCWlmIChlbnQtPmRyaXZlcl9kYXRhID09IEFEQVBURVJfVjEpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDQsIDB4ODMwMDgzMEEpOwotCSB9IGVsc2UgeworCX0gZWxzZSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAweDQyMDA0MjAwKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsIDB4NDIwMDQyMDApOwotICAgICAgICAgfQorCX0KIAogCiAJcmV0dmFsID0gaWNvbV9hbGxvY19hZGFwdGVyKCZpY29tX2FkYXB0ZXIpOwpAQCAtMTUzNiwxMCArMTUzNiwxMCBAQAogCQkgZ290byBwcm9iZV9leGl0MDsKIAl9CiAKLQkgaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHJfcGNpID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7Ci0JIGljb21fYWRhcHRlci0+cGNpX2RldiA9IGRldjsKLQkgaWNvbV9hZGFwdGVyLT52ZXJzaW9uID0gZW50LT5kcml2ZXJfZGF0YTsKLQkgaWNvbV9hZGFwdGVyLT5zdWJzeXN0ZW1faWQgPSBlbnQtPnN1YmRldmljZTsKKwlpY29tX2FkYXB0ZXItPmJhc2VfYWRkcl9wY2kgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpY29tX2FkYXB0ZXItPnBjaV9kZXYgPSBkZXY7CisJaWNvbV9hZGFwdGVyLT52ZXJzaW9uID0gZW50LT5kcml2ZXJfZGF0YTsKKwlpY29tX2FkYXB0ZXItPnN1YnN5c3RlbV9pZCA9IGVudC0+c3ViZGV2aWNlOwogCiAKIAlyZXR2YWwgPSBpY29tX2luaXRfcG9ydHMoaWNvbV9hZGFwdGVyKTsKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAJCWdvdG8gcHJvYmVfZXhpdDE7CiAJfQogCi0JIGljb21fYWRhcHRlci0+YmFzZV9hZGRyID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMCk7CisJaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIoZGV2LCAwKTsKIAogCWlmICghaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHIpCiAJCWdvdG8gcHJvYmVfZXhpdDE7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCiAJcmV0dmFsID0gaWNvbV9sb2FkX3BvcnRzKGljb21fYWRhcHRlcik7CiAKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaWNvbV9hZGFwdGVyLT5udW1iX3BvcnRzOyBpbmRleCsrKSB7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaWNvbV9hZGFwdGVyLT5udW1iX3BvcnRzOyBpbmRleCsrKSB7CiAJCWljb21fcG9ydCA9ICZpY29tX2FkYXB0ZXItPnBvcnRfaW5mb1tpbmRleF07CiAKIAkJaWYgKGljb21fcG9ydC0+c3RhdHVzID09IElDT01fUE9SVF9BQ1RJVkUpIHsKQEAgLTE1NzksNyArMTU3OSw3IEBACiAJCQkJaWNvbV9wb3J0LT5zdGF0dXMgPSBJQ09NX1BPUlRfT0ZGOwogCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRGV2aWNlIGFkZCBmYWlsZWRcbiIpOwogCQkJIH0gZWxzZQotCQkJICAgICAgICBkZXZfaW5mbygmZGV2LT5kZXYsICJEZXZpY2UgYWRkZWRcbiIpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwgIkRldmljZSBhZGRlZFxuIik7CiAJCX0KIAl9CiAKQEAgLTE1OTUsOSArMTU5NSw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCi0gICAgICAgIHJldHVybiByZXR2YWw7Ci0KLQorCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpY29tX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCBkN2JjZDA3Li43Y2U5ZTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChzZXItPmlycSAhPSBwb3J0LT5pcnEpIHx8Ci0JICAgIChzZXItPmlvX3R5cGUgIT0gU0VSSUFMX0lPX01FTSkgfHwKKwkgICAgKHNlci0+aW9fdHlwZSAhPSBVUElPX01FTSkgfHwKIAkgICAgKHNlci0+YmF1ZF9iYXNlICE9IHBvcnQtPnVhcnRjbGspICB8fAogCSAgICAoc2VyLT5pb21lbV9iYXNlICE9ICh2b2lkICopcG9ydC0+bWFwYmFzZSkgfHwKIAkgICAgKHNlci0+aHViNiAhPSAwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jIGIvZHJpdmVycy9zZXJpYWwvcHhhLmMKaW5kZXggNjQ0M2I3Zi4uYjg2MjlkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcHhhLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcHhhLmMKQEAgLTcyNiw5ICs3MjYsMTAgQEAKIAkuY29ucwkJPSBQWEFfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzZXJpYWxfcHhhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9zdXNwZW5kX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtNzM2LDkgKzczNyw5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC03NDYsNiArNzQ3LDEyIEBACiAgICAgICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2VyaWFsX3B4YV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzZXJpYWxfcHhhX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBzZXJpYWxfcHhhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQ7CkBAIC04MjUsMTEgKzgzMiwxMiBAQAogICAgICAgICAucHJvYmUgICAgICAgICAgPSBzZXJpYWxfcHhhX3Byb2JlLAogICAgICAgICAucmVtb3ZlICAgICAgICAgPSBzZXJpYWxfcHhhX3JlbW92ZSwKIAotCS5zdXNwZW5kCT0gc2VyaWFsX3B4YV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2VyaWFsX3B4YV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJICAgICAgICAubmFtZQk9ICJweGEyeHgtdWFydCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmc2VyaWFsX3B4YV9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCA3ZjVlMjY4Li4yMTk5ZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJUFBTUiB8PSBQUENfVFhEMSB8IFBQQ19UWEQzOwogfQogCi12b2lkIF9faW5pdCBzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoc3RydWN0IHNhMTEwMF9wb3J0X2ZucyAqZm5zKQordm9pZCBfX2RldmluaXQgc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKHN0cnVjdCBzYTExMDBfcG9ydF9mbnMgKmZucykKIHsKIAlpZiAoZm5zLT5nZXRfbWN0cmwpCiAJCXNhMTEwMF9wb3BzLmdldF9tY3RybCA9IGZucy0+Z2V0X21jdHJsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggMTY4OWJkYS4uZGNjNzI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0xMjcwLDYgKzEyNzAsOSBAQAogCiAJQlVHX09OKCFrZXJuZWxfbG9ja2VkKCkpOwogCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuOworCiAJdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKQEAgLTEzMTYsOSArMTMxOSw5IEBACiAJICovCiAJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVwb3J0LT5sb2NrLCBmbGFncyk7CiAJCXVwb3J0LT5vcHMtPnN0b3BfcngodXBvcnQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwb3J0LT5sb2NrLCBmbGFncyk7CiAJCS8qCiAJCSAqIEJlZm9yZSB3ZSBkcm9wIERUUiwgbWFrZSBzdXJlIHRoZSBVQVJUIHRyYW5zbWl0dGVyCiAJCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKaW5kZXggMGY3Y2Y0Yy4uYzUwZTlmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0yMjEsMjEgKzIyMSwyNiBAQAogCQlzaW9fb3V0KHVwLCBUWFg5X1NJQkdSLCAweGZmIHwgVFhYOV9TSUJHUl9CQ0xLX1Q2KTsKIH0KIAorc3RhdGljIHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdG9fdWFydF90eHg5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCwgcG9ydCk7Cit9CisKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXNpb19tYXNrKHVwLCBUWFg5X1NJRElDUiwgVFhYOV9TSURJQ1JfVElFKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXNpb19zZXQodXAsIFRYWDlfU0lESUNSLCBUWFg5X1NJRElDUl9USUUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1cC0+cG9ydC5yZWFkX3N0YXR1c19tYXNrICY9IH5UWFg5X1NJRElTUl9SRElTOwogfQogCkBAIC0yNDYsNyArMjUxLDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfaW5pdGlhbGl6ZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgaW50IHRtb3V0ID0gMTAwMDA7CiAKIAlzaW9fb3V0KHVwLCBUWFg5X1NJRkNSLCBUWFg5X1NJRkNSX1NXUlNUKTsKQEAgLTQxNCw3ICs0MTksNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF90eHg5X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CiAKQEAgLTQyNyw3ICs0MzIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF90eHg5X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgaW50IHJldDsKIAogCS8qIG5vIG1vZGVtIGNvbnRyb2wgbGluZXMgKi8KQEAgLTQ0MCw3ICs0NDUsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCiAJCXNpb19tYXNrKHVwLCBUWFg5X1NJRkxDUiwgVFhYOV9TSUZMQ1JfUlRTU0MpOwpAQCAtNDUwLDcgKzQ1NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTQ5NCw3ICs0OTksNyBAQAogewogCXVuc2lnbmVkIGludCBpZXI7CiAJdW5zaWduZWQgY2hhciBjOwotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTUyMCw3ICs1MjUsNyBAQAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfcHV0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIGMpCiB7CiAJdW5zaWduZWQgaW50IGllcjsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCiAJLyoKIAkgKglGaXJzdCBzYXZlIHRoZSBJRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCkBAIC01NTEsNyArNTU2LDcgQEAKIAogc3RhdGljIGludCBzZXJpYWxfdHh4OV9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWw7CiAKQEAgLTU5Niw3ICs2MDEsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCkBAIC02MzYsNyArNjQxLDcgQEAKIHNlcmlhbF90eHg5X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKIAkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgaW50IGN2YWwsIGZjciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgYmF1ZCwgcXVvdDsKQEAgLTgxNCwxOSArODE5LDE5IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2VyaWFsX3R4eDlfcmVsZWFzZV9yZXNvdXJjZSh1cCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsX3R4eDlfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlyZXR1cm4gc2VyaWFsX3R4eDlfcmVxdWVzdF9yZXNvdXJjZSh1cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCB1ZmxhZ3MpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTg5Nyw3ICs5MDIsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAl3YWl0X2Zvcl94bWl0cih1cCk7CiAJc2lvX291dCh1cCwgVFhYOV9TSVRGSUZPLCBjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDg1MTE5ZmIuLjY0OThiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMTQzLDcgKzExNDMsNyBAQAogCXdoaWxlICgoc2NpX2luKHBvcnQsIFNDeFNSKSAmIGJpdHMpICE9IGJpdHMpCiAJCWNwdV9yZWxheCgpOwogCi0JaWYgKHNjaV9wb3J0LT5kaXNhYmxlKTsKKwlpZiAoc2NpX3BvcnQtPmRpc2FibGUpCiAJCXNjaV9wb3J0LT5kaXNhYmxlKHBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NmaS9zZmlfY29yZS5jIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwppbmRleCBkM2I0OTY4Li5iMjA0YTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCisrKyBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKQEAgLTkwLDcgKzkwLDExIEBACiAgKi8KIHN0YXRpYyB1MzIgc2ZpX3VzZV9pb3JlbWFwIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNmaV9tYXBfbWVtb3J5KHU2NCBwaHlzLCB1MzIgc2l6ZSkKKy8qCisgKiBzZmlfdW4vbWFwX21lbW9yeSBjYWxscyBlYXJseV9pb3JlbWFwL2lvdW5tYXAgd2hpY2ggaXMgYSBfX2luaXQgZnVuY3Rpb24KKyAqIGFuZCBpbnRyb2R1Y2VzIHNlY3Rpb24gbWlzbWF0Y2guIFNvIHVzZSBfX3JlZiB0byBtYWtlIGl0IGNhbG0uCisgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX3JlZiBzZmlfbWFwX21lbW9yeSh1NjQgcGh5cywgdTMyIHNpemUpCiB7CiAJaWYgKCFwaHlzIHx8ICFzaXplKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEwMSw3ICsxMDUsNyBAQAogCQlyZXR1cm4gZWFybHlfaW9yZW1hcChwaHlzLCBzaXplKTsKIH0KIAotc3RhdGljIHZvaWQgc2ZpX3VubWFwX21lbW9yeSh2b2lkIF9faW9tZW0gKnZpcnQsIHUzMiBzaXplKQorc3RhdGljIHZvaWQgX19yZWYgc2ZpX3VubWFwX21lbW9yeSh2b2lkIF9faW9tZW0gKnZpcnQsIHUzMiBzaXplKQogewogCWlmICghdmlydCB8fCAhc2l6ZSkKIAkJcmV0dXJuOwpAQCAtMTI1LDcgKzEyOSw3IEBACiAgKiBzZmlfdmVyaWZ5X3RhYmxlKCkKICAqIFNhbml0eSBjaGVjayB0YWJsZSBsZW5naCwgY2FsY3VsYXRlIGNoZWNrc3VtCiAgKi8KLXN0YXRpYyBfX2luaXQgaW50IHNmaV92ZXJpZnlfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQorc3RhdGljIGludCBzZmlfdmVyaWZ5X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKIHsKIAogCXU4IGNoZWNrc3VtID0gMDsKQEAgLTIxMywxMiArMjE3LDE3IEBACiAgKiAgICB0aGUgbWFwcGVkIHZpcnQgYWRkcmVzcyB3aWxsIGJlIHJldHVybmVkLCBhbmQgdGhlIHZpcnQgc3BhY2UKICAqICAgIHdpbGwgYmUgcmVsZWFzZWQgYnkgY2FsbCBzZmlfcHV0X3RhYmxlKCkgbGF0ZXIKICAqCisgKiBUaGlzIHR3byBjYXNlcyBhcmUgZnJvbSB0d28gZGlmZmVyZW50IGZ1bmN0aW9ucyB3aXRoIHR3byBkaWZmZXJlbnQKKyAqIHNlY3Rpb25zIGFuZCBjYXVzZXMgc2VjdGlvbiBtaXNtYXRjaCB3YXJuaW5nLiBTbyB1c2UgX19yZWYgdG8gdGVsbAorICogbW9kcG9zdCBub3QgdG8gbWFrZSBhbnkgbm9pc2UuCisgKgogICogUmV0dXJuIHZhbHVlOgogICoJTlVMTDoJCQl3aGVuIGNhbid0IGZpbmQgYSB0YWJsZSBtYXRjaGluZyB0aGUga2V5CiAgKglFUlJfUFRSKGVycm9yKToJCWVycm9yIHZhbHVlCiAgKgl2aXJ0IHRhYmxlIGFkZHJlc3M6CXdoZW4gYSBtYXRjaGVkIHRhYmxlIGlzIGZvdW5kCiAgKi8KLXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfY2hlY2tfdGFibGUodTY0IHBhLCBzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQorc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKgorIF9fcmVmIHNmaV9jaGVja190YWJsZSh1NjQgcGEsIHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCiB7CiAJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoOwogCXZvaWQgKnJldCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IDZkN2EzZjguLjIxYTExODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNyw3ICsxNyw3IEBACiBvYmotJChDT05GSUdfU1BJX0FVMTU1MCkJCSs9IGF1MTU1MF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9CVVRURVJGTFkpCQkrPSBzcGlfYnV0dGVyZmx5Lm8KIG9iai0kKENPTkZJR19TUElfR1BJTykJCQkrPSBzcGlfZ3Bpby5vCi1vYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBteGNfc3BpLm8KK29iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubwogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KIG9iai0kKENPTkZJR19TUElfUFhBMlhYKQkJKz0gcHhhMnh4X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX09NQVBfVVdJUkUpCQkrPSBvbWFwX3V3aXJlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCBjMGY5NTBhNy4uZmY1YmJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJR0VOX01BU0tfQklUUyhTU1BfREFUQV9CSVRTXzEyLCBTU1BfQ1IwX01BU0tfRFNTLCAwKQl8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9NSUNST1dJUkVfQ0hBTk5FTF9GVUxMX0RVUExFWCwgU1NQX0NSMF9NQVNLX0hBTEZEVVAsIDUpIHwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19QT0xfSURMRV9MT1csIFNTUF9DUjBfTUFTS19TUE8sIDYpIHwgXAotCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19GQUxMSU5HX0VER0UsIFNTUF9DUjBfTUFTS19TUEgsIDcpIHwgXAorCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19TRUNPTkRfRURHRSwgU1NQX0NSMF9NQVNLX1NQSCwgNykgfCBcCiAJR0VOX01BU0tfQklUUyhOTURLX1NTUF9ERUZBVUxUX0NMS1JBVEUsIFNTUF9DUjBfTUFTS19TQ1IsIDgpIHwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0JJVFNfOCwgU1NQX0NSMF9NQVNLX0NTUywgMTYpCXwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksIFNTUF9DUjBfTUFTS19GUkYsIDIxKSBcCkBAIC0xMjQ3LDggKzEyNDcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNoaXBfaW5mby0+aWZhY2UgPT0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEkpIHsKLQkJaWYgKChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX1JJU0lOR19FREdFKQotCQkgICAgJiYgKGNoaXBfaW5mby0+Y2xrX3BoYXNlICE9IFNTUF9DTEtfRkFMTElOR19FREdFKSkgeworCQlpZiAoKGNoaXBfaW5mby0+Y2xrX3BoYXNlICE9IFNTUF9DTEtfRklSU1RfRURHRSkKKwkJICAgICYmIChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX1NFQ09ORF9FREdFKSkgewogCQkJZGV2X2VycihjaGlwX2luZm8tPmRldiwKIAkJCQkiQ2xvY2sgUGhhc2UgaXMgY29uZmlndXJlZCBpbmNvcnJlY3RseVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0ODUsNyArMTQ4NSw3IEBACiAJCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU18xMjsKIAkJY2hpcF9pbmZvLT5yeF9sZXZfdHJpZyA9IFNTUF9SWF8xX09SX01PUkVfRUxFTTsKIAkJY2hpcF9pbmZvLT50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DOwotCQljaGlwX2luZm8tPmNsa19waGFzZSA9IFNTUF9DTEtfRkFMTElOR19FREdFOworCQljaGlwX2luZm8tPmNsa19waGFzZSA9IFNTUF9DTEtfU0VDT05EX0VER0U7CiAJCWNoaXBfaW5mby0+Y2xrX3BvbCA9IFNTUF9DTEtfUE9MX0lETEVfTE9XOwogCQljaGlwX2luZm8tPmN0cmxfbGVuID0gU1NQX0JJVFNfODsKIAkJY2hpcF9pbmZvLT53YWl0X3N0YXRlID0gU1NQX01XSVJFX1dBSVRfWkVSTzsKQEAgLTE4MjYsNyArMTgyNiw3IEBACiAJCSAqIFNUIE1pY3JvIGRlcml2YXRpdmUsIHRoaXMgaGFzIDMyYml0IHdpZGUKIAkJICogYW5kIDMyIGxvY2F0aW9ucyBkZWVwIFRYL1JYIEZJRk8KIAkJICovCi0JCS5pZAk9IDB4MDAxMDgwMjIsCisJCS5pZAk9IDB4MDEwODAwMjIsCiAJCS5tYXNrCT0gMHhmZmZmZmZmZiwKIAkJLmRhdGEJPSAmdmVuZG9yX3N0LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9teGNfc3BpLmMgYi9kcml2ZXJzL3NwaS9teGNfc3BpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNDQ3MjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zcGkvbXhjX3NwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvc3BpLmg+Ci0KLSNkZWZpbmUgRFJJVkVSX05BTUUgInNwaV9pbXgiCi0KLSNkZWZpbmUgTVhDX0NTUElSWERBVEEJCTB4MDAKLSNkZWZpbmUgTVhDX0NTUElUWERBVEEJCTB4MDQKLSNkZWZpbmUgTVhDX0NTUElDVFJMCQkweDA4Ci0jZGVmaW5lIE1YQ19DU1BJSU5UCQkweDBjCi0jZGVmaW5lIE1YQ19SRVNFVAkJMHgxYwotCi0vKiBnZW5lcmljIGRlZmluZXMgdG8gYWJzdHJhY3QgZnJvbSB0aGUgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dHMgKi8KLSNkZWZpbmUgTVhDX0lOVF9SUgkoMSA8PCAwKSAvKiBSZWNlaXZlIGRhdGEgcmVhZHkgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1YQ19JTlRfVEUJKDEgPDwgMSkgLyogVHJhbnNtaXQgRklGTyBlbXB0eSBpbnRlcnJ1cHQgKi8KLQotc3RydWN0IG14Y19zcGlfY29uZmlnIHsKLQl1bnNpZ25lZCBpbnQgc3BlZWRfaHo7Ci0JdW5zaWduZWQgaW50IGJwdzsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQlpbnQgY3M7Ci19OwotCi1zdHJ1Y3QgbXhjX3NwaV9kYXRhIHsKLQlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKLQotCXN0cnVjdCBjb21wbGV0aW9uIHhmZXJfZG9uZTsKLQl2b2lkICpiYXNlOwotCWludCBpcnE7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGxvbmcgc3BpX2NsazsKLQlpbnQgKmNoaXBzZWxlY3Q7Ci0KLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0Jdm9pZCAoKnR4KShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOwotCXZvaWQgKCpyeCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQl2b2lkICpyeF9idWY7Ci0JY29uc3Qgdm9pZCAqdHhfYnVmOwotCXVuc2lnbmVkIGludCB0eGZpZm87IC8qIG51bWJlciBvZiB3b3JkcyBwdXNoZWQgaW4gdHggRklGTyAqLwotCi0JLyogU29DIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwotCXZvaWQgKCppbnRjdHJsKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIGludCk7Ci0JaW50ICgqY29uZmlnKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIHN0cnVjdCBteGNfc3BpX2NvbmZpZyAqKTsKLQl2b2lkICgqdHJpZ2dlcikoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQlpbnQgKCpyeF9hdmFpbGFibGUpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci19OwotCi0jZGVmaW5lIE1YQ19TUElfQlVGX1JYKHR5cGUpCQkJCQkJXAotc3RhdGljIHZvaWQgbXhjX3NwaV9idWZfcnhfIyN0eXBlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIGludCB2YWwgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElSWERBVEEpOwlcCi0JCQkJCQkJCQlcCi0JaWYgKG14Y19zcGktPnJ4X2J1ZikgewkJCQkJCVwKLQkJKih0eXBlICopbXhjX3NwaS0+cnhfYnVmID0gdmFsOwkJCQlcCi0JCW14Y19zcGktPnJ4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAotCX0JCQkJCQkJCVwKLX0KLQotI2RlZmluZSBNWENfU1BJX0JVRl9UWCh0eXBlKQkJCQkJCVwKLXN0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3R4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAotewkJCQkJCQkJCVwKLQl0eXBlIHZhbCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAobXhjX3NwaS0+dHhfYnVmKSB7CQkJCQkJXAotCQl2YWwgPSAqKHR5cGUgKilteGNfc3BpLT50eF9idWY7CQkJCVwKLQkJbXhjX3NwaS0+dHhfYnVmICs9IHNpemVvZih0eXBlKTsJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCW14Y19zcGktPmNvdW50IC09IHNpemVvZih0eXBlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElUWERBVEEpOwkJCVwKLX0KLQotTVhDX1NQSV9CVUZfUlgodTgpCi1NWENfU1BJX0JVRl9UWCh1OCkKLU1YQ19TUElfQlVGX1JYKHUxNikKLU1YQ19TUElfQlVGX1RYKHUxNikKLU1YQ19TUElfQlVGX1JYKHUzMikKLU1YQ19TUElfQlVGX1RYKHUzMikKLQotLyogRmlyc3QgZW50cnkgaXMgcmVzZXJ2ZWQsIHNlY29uZCBlbnRyeSBpcyB2YWxpZCBvbmx5IGlmIFNESENfU1BJRU4gaXMgc2V0Ci0gKiAod2hpY2ggaXMgY3VycmVudGx5IG5vdCB0aGUgY2FzZSBpbiB0aGlzIGRyaXZlcikKLSAqLwotc3RhdGljIGludCBteGNfY2xrZGl2c1tdID0gezAsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMjQsIDMyLCA0OCwgNjQsIDk2LCAxMjgsIDE5MiwKLQkyNTYsIDM4NCwgNTEyLCA3NjgsIDEwMjR9OwotCi0vKiBNWDIxLCBNWDI3ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzEodW5zaWduZWQgaW50IGZpbiwKLQkJdW5zaWduZWQgaW50IGZzcGkpCi17Ci0JaW50IGksIG1heDsKLQotCWlmIChjcHVfaXNfbXgyMSgpKQotCQltYXggPSAxODsKLQllbHNlCi0JCW1heCA9IDE2OwotCi0JZm9yIChpID0gMjsgaSA8IG1heDsgaSsrKQotCQlpZiAoZnNwaSAqIG14Y19jbGtkaXZzW2ldID49IGZpbikKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIG1heDsKLX0KLQotLyogTVgxLCBNWDMxLCBNWDM1ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzIodW5zaWduZWQgaW50IGZpbiwKLQkJdW5zaWduZWQgaW50IGZzcGkpCi17Ci0JaW50IGksIGRpdiA9IDQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCWlmIChmc3BpICogZGl2ID49IGZpbikKLQkJCXJldHVybiBpOwotCQlkaXYgPDw9IDE7Ci0JfQotCi0JcmV0dXJuIDc7Ci19Ci0KLSNkZWZpbmUgTVgzMV9JTlRSRUdfVEVFTgkoMSA8PCAwKQotI2RlZmluZSBNWDMxX0lOVFJFR19SUkVOCSgxIDw8IDMpCi0KLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgMCkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMSkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgMikKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QSEEJKDEgPDwgNSkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU0NUTAkoMSA8PCA2KQotI2RlZmluZSBNWDMxX0NTUElDVFJMX1NTUE9MCSgxIDw8IDcpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQJOAotI2RlZmluZSBNWDM1X0NTUElDVFJMX0JMX1NISUZUCTIwCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQJMjQKLSNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9DU19TSElGVAkxMgotI2RlZmluZSBNWDMxX0NTUElDVFJMX0RSX1NISUZUCTE2Ci0KLSNkZWZpbmUgTVgzMV9DU1BJU1RBVFVTCQkweDE0Ci0jZGVmaW5lIE1YMzFfU1RBVFVTX1JSCQkoMSA8PCAzKQotCi0vKiBUaGVzZSBmdW5jdGlvbnMgYWxzbyB3b3JrIGZvciB0aGUgaS5NWDM1LCBidXQgYmUgYXdhcmUgdGhhdAotICogdGhlIGkuTVgzNSBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0IGZvciBiaXRzCi0gKiB3ZSBkbyBub3QgdXNlIGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkIG14MzFfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCB2YWwgPSAwOwotCi0JaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCi0JCXZhbCB8PSBNWDMxX0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgzMV9JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MzFfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgzMV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMzFfQ1NQSUNUUkxfRU5BQkxFIHwgTVgzMV9DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDMxX0NTUElDVFJMX0RSX1NISUZUOwotCi0JaWYgKGNwdV9pc19teDMxKCkpCi0JCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDMxX0NTUElDVFJMX0JDX1NISUZUOwotCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpIHsKLQkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzVfQ1NQSUNUUkxfQkxfU0hJRlQ7Ci0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTQ1RMOwotCX0KLQotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUEhBOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUE9MOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1NfSElHSCkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NQT0w7Ci0JaWYgKGNvbmZpZy0+Y3MgPCAwKSB7Ci0JCWlmIChjcHVfaXNfbXgzMSgpKQotCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0JCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpCi0JCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgzNV9DU1BJQ1RSTF9DU19TSElGVDsKLQl9Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MzFfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWDMxX0NTUElTVEFUVVMpICYgTVgzMV9TVEFUVVNfUlI7Ci19Ci0KLSNkZWZpbmUgTVgyN19JTlRSRUdfUlIJCSgxIDw8IDQpCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1RFRU4JKDEgPDwgOSkKLSNkZWZpbmUgTVgyN19JTlRSRUdfUlJFTgkoMSA8PCAxMykKLQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1BPTAkoMSA8PCA1KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1BIQQkoMSA8PCA2KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1NTUE9MCSgxIDw8IDgpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfWENICSgxIDw8IDkpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDEwKQotI2RlZmluZSBNWDI3X0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMSkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9EUl9TSElGVAkxNAotI2RlZmluZSBNWDI3X0NTUElDVFJMX0NTX1NISUZUCTE5Ci0KLXN0YXRpYyB2b2lkIG14MjdfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCB2YWwgPSAwOwotCi0JaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCi0JCXZhbCB8PSBNWDI3X0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgyN19JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MjdfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN19jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMjdfQ1NQSUNUUkxfRU5BQkxFIHwgTVgyN19DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMShteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDI3X0NTUElDVFJMX0RSX1NISUZUOwotCXJlZyB8PSBjb25maWctPmJwdyAtIDE7Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BIQTsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BPTDsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1NTUE9MOwotCWlmIChjb25maWctPmNzIDwgMCkKLQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMjdfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MjdfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCkgJiBNWDI3X0lOVFJFR19SUjsKLX0KLQotI2RlZmluZSBNWDFfSU5UUkVHX1JSCQkoMSA8PCAzKQotI2RlZmluZSBNWDFfSU5UUkVHX1RFRU4JCSgxIDw8IDgpCi0jZGVmaW5lIE1YMV9JTlRSRUdfUlJFTgkJKDEgPDwgMTEpCi0KLSNkZWZpbmUgTVgxX0NTUElDVFJMX1BPTAkoMSA8PCA0KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgOCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX0VOQUJMRQkoMSA8PCA5KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEwKQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfRFJfU0hJRlQJMTMKLQotc3RhdGljIHZvaWQgbXgxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgxX0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgxX0lOVFJFR19SUkVOOwotCi0Jd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKTsKLX0KLQotc3RhdGljIHZvaWQgbXgxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMV9DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX2NvbmZpZyhzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLAotCQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKmNvbmZpZykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnID0gTVgxX0NTUElDVFJMX0VOQUJMRSB8IE1YMV9DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDFfQ1NQSUNUUkxfRFJfU0hJRlQ7Ci0JcmVnIHw9IGNvbmZpZy0+YnB3IC0gMTsKLQotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKLQkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QSEE7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQotCQlyZWcgfD0gTVgxX0NTUElDVFJMX1BPTDsKLQotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgxX0lOVFJFR19SUjsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19hY3RpdmUpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXVuc2lnbmVkIGludCBjcyA9IDA7Ci0JaW50IGdwaW8gPSBteGNfc3BpLT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOwotCXN0cnVjdCBteGNfc3BpX2NvbmZpZyBjb25maWc7Ci0KLQlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCWNzID0gMTsKLQotCWlmIChpc19hY3RpdmUgPT0gQklUQkFOR19DU19JTkFDVElWRSkgewotCQlpZiAoZ3BpbyA+PSAwKQotCQkJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWNzKTsKLQkJcmV0dXJuOwotCX0KLQotCWNvbmZpZy5icHcgPSBzcGktPmJpdHNfcGVyX3dvcmQ7Ci0JY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7Ci0JY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7Ci0JY29uZmlnLmNzID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKLQotCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgKi8KLQlpZiAoY29uZmlnLmJwdyA8PSA4KSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTg7Ci0JCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTg7Ci0JfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDE2KSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTE2OwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UxNjsKLQl9IGVsc2UgaWYgKGNvbmZpZy5icHcgPD0gMzIpIHsKLQkJbXhjX3NwaS0+cnggPSBteGNfc3BpX2J1Zl9yeF91MzI7Ci0JCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTMyOwotCX0gZWxzZQotCQlCVUcoKTsKLQotCWlmIChncGlvID49IDApCi0JCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGNzKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9wdXNoKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0Jd2hpbGUgKG14Y19zcGktPnR4ZmlmbyA8IDgpIHsKLQkJaWYgKCFteGNfc3BpLT5jb3VudCkKLQkJCWJyZWFrOwotCQlteGNfc3BpLT50eChteGNfc3BpKTsKLQkJbXhjX3NwaS0+dHhmaWZvKys7Ci0JfQotCi0JbXhjX3NwaS0+dHJpZ2dlcihteGNfc3BpKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG14Y19zcGlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gZGV2X2lkOwotCi0Jd2hpbGUgKG14Y19zcGktPnJ4X2F2YWlsYWJsZShteGNfc3BpKSkgewotCQlteGNfc3BpLT5yeChteGNfc3BpKTsKLQkJbXhjX3NwaS0+dHhmaWZvLS07Ci0JfQotCi0JaWYgKG14Y19zcGktPmNvdW50KSB7Ci0JCW14Y19zcGlfcHVzaChteGNfc3BpKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWlmIChteGNfc3BpLT50eGZpZm8pIHsKLQkJLyogTm8gZGF0YSBsZWZ0IHRvIHB1c2gsIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciByeCBkYXRhLAotCQkgKiBlbmFibGUgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfUlIpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKLQljb21wbGV0ZSgmbXhjX3NwaS0+eGZlcl9kb25lKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAotCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQotewotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOwotCi0JY29uZmlnLmJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOwotCWNvbmZpZy5zcGVlZF9oeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKLQljb25maWcubW9kZSA9IHNwaS0+bW9kZTsKLQotCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Y19zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKLQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0KLQlteGNfc3BpLT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOwotCW14Y19zcGktPnJ4X2J1ZiA9IHRyYW5zZmVyLT5yeF9idWY7Ci0JbXhjX3NwaS0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOwotCW14Y19zcGktPnR4ZmlmbyA9IDA7Ci0KLQlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlteGNfc3BpX3B1c2gobXhjX3NwaSk7Ci0KLQlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfVEUpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmbXhjX3NwaS0+eGZlcl9kb25lKTsKLQotCXJldHVybiB0cmFuc2Zlci0+bGVuOwotfQotCi1zdGF0aWMgaW50IG14Y19zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKLQkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKLQotCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCi0JCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOwotCi0JbXhjX3NwaV9jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG14Y19zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOwotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgaSwgcmV0OwotCi0JbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFteGNfcGxhdGZvcm1faW5mbykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgdGhlIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXhjX3NwaV9kYXRhKSk7Ci0JaWYgKCFtYXN0ZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKLQotCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7Ci0KLQlteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKLQlteGNfc3BpLT5jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPmNoaXBzZWxlY3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7Ci0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlyZXQgPSBncGlvX3JlcXVlc3QobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSwgRFJJVkVSX05BTUUpOwotCQlpZiAocmV0KSB7Ci0JCQlpLS07Ci0JCQl3aGlsZSAoaSA+IDApCi0JCQkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKLQkJCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaS0tXSk7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3MiKTsKLQkJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7Ci0JCX0KLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIDEpOwotCX0KLQotCW14Y19zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IG14Y19zcGlfY2hpcHNlbGVjdDsKLQlteGNfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gbXhjX3NwaV9zZXR1cHhmZXI7Ci0JbXhjX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBteGNfc3BpX3RyYW5zZmVyOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5zZXR1cCA9IG14Y19zcGlfc2V0dXA7Ci0JbXhjX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmNsZWFudXAgPSBteGNfc3BpX2NsZWFudXA7Ci0KLQlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBwbGF0Zm9ybSByZXNvdXJjZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2dwaW9fZnJlZTsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2dwaW9fZnJlZTsKLQl9Ci0KLQlteGNfc3BpLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghbXhjX3NwaS0+YmFzZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9yZWxlYXNlX21lbTsKLQl9Ci0KLQlteGNfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghbXhjX3NwaS0+aXJxKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2lvdW5tYXA7Ci0JfQotCi0JcmV0ID0gcmVxdWVzdF9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpX2lzciwgMCwgRFJJVkVSX05BTUUsIG14Y19zcGkpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGlycSVkOiAlZFxuIiwgbXhjX3NwaS0+aXJxLCByZXQpOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQotCWlmIChjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MzFfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgzMV9jb25maWc7Ci0JCW14Y19zcGktPnRyaWdnZXIgPSBteDMxX3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MzFfcnhfYXZhaWxhYmxlOwotCX0gZWxzZSAgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkgewotCQlteGNfc3BpLT5pbnRjdHJsID0gbXgyN19pbnRjdHJsOwotCQlteGNfc3BpLT5jb25maWcgPSBteDI3X2NvbmZpZzsKLQkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MjdfdHJpZ2dlcjsKLQkJbXhjX3NwaS0+cnhfYXZhaWxhYmxlID0gbXgyN19yeF9hdmFpbGFibGU7Ci0JfSBlbHNlIGlmIChjcHVfaXNfbXgxKCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MV9pbnRjdHJsOwotCQlteGNfc3BpLT5jb25maWcgPSBteDFfY29uZmlnOwotCQlteGNfc3BpLT50cmlnZ2VyID0gbXgxX3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MV9yeF9hdmFpbGFibGU7Ci0JfSBlbHNlCi0JCUJVRygpOwotCi0JbXhjX3NwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKLQlpZiAoSVNfRVJSKG14Y19zcGktPmNsaykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIobXhjX3NwaS0+Y2xrKTsKLQkJZ290byBvdXRfZnJlZV9pcnE7Ci0JfQotCi0JY2xrX2VuYWJsZShteGNfc3BpLT5jbGspOwotCW14Y19zcGktPnNwaV9jbGsgPSBjbGtfZ2V0X3JhdGUobXhjX3NwaS0+Y2xrKTsKLQotCWlmICghY3B1X2lzX214MzEoKSB8fCAhY3B1X2lzX214MzUoKSkKLQkJd3JpdGVsKDEsIG14Y19zcGktPmJhc2UgKyBNWENfUkVTRVQpOwotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKLQotCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZteGNfc3BpLT5iaXRiYW5nKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImJpdGJhbmcgc3RhcnQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X2Nsa19wdXQ7Ci0JfQotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwotCi1vdXRfY2xrX3B1dDoKLQljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOwotCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKLW91dF9mcmVlX2lycToKLQlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOwotb3V0X2lvdW5tYXA6Ci0JaW91bm1hcChteGNfc3BpLT5iYXNlKTsKLW91dF9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLW91dF9ncGlvX2ZyZWU6Ci0JZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKLQkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKLQkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ldKTsKLW91dF9tYXN0ZXJfcHV0OgotCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Ci0Ja2ZyZWUobWFzdGVyKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBteGNfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlpbnQgaTsKLQotCXNwaV9iaXRiYW5nX3N0b3AoJm14Y19zcGktPmJpdGJhbmcpOwotCi0Jd3JpdGVsKDAsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCWNsa19kaXNhYmxlKG14Y19zcGktPmNsayk7Ci0JY2xrX3B1dChteGNfc3BpLT5jbGspOwotCWZyZWVfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaSk7Ci0JaW91bm1hcChteGNfc3BpLT5iYXNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCi0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7Ci0KLQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCi0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJICAgfSwKLQkucHJvYmUgPSBteGNfc3BpX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChteGNfc3BpX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteGNfc3BpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBteGNfc3BpX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChteGNfc3BpX2luaXQpOwotbW9kdWxlX2V4aXQobXhjX3NwaV9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggMzFkZDU2Zi4uYzhjMmI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTY2OCwxMCArMTY2OCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBweGEyeHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTE2ODQsOSArMTY4Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTE3MDMsMjYgKzE3MDIsMjkgQEAKIAkvKiBTdGFydCB0aGUgcXVldWUgcnVubmluZyAqLwogCXN0YXR1cyA9IHN0YXJ0X3F1ZXVlKGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBxdWV1ZSAoJWQpXG4iLCBzdGF0dXMpOworCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHB4YTJ4eF9zcGlfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHB4YTJ4eF9zcGlfcmVzdW1lIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9zcGlfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhMnh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X3NwaV9yZXN1bWUsCit9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJweGEyeHgtc3BpIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInB4YTJ4eC1zcGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YTJ4eF9zcGlfcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucmVtb3ZlID0gcHhhMnh4X3NwaV9yZW1vdmUsCiAJLnNodXRkb3duID0gcHhhMnh4X3NwaV9zaHV0ZG93biwKLQkuc3VzcGVuZCA9IHB4YTJ4eF9zcGlfc3VzcGVuZCwKLQkucmVzdW1lID0gcHhhMnh4X3NwaV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfc3BpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMyMmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJzcGlfaW14IgorCisjZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCisjZGVmaW5lIE1YQ19DU1BJVFhEQVRBCQkweDA0CisjZGVmaW5lIE1YQ19DU1BJQ1RSTAkJMHgwOAorI2RlZmluZSBNWENfQ1NQSUlOVAkJMHgwYworI2RlZmluZSBNWENfUkVTRVQJCTB4MWMKKworLyogZ2VuZXJpYyBkZWZpbmVzIHRvIGFic3RyYWN0IGZyb20gdGhlIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzICovCisjZGVmaW5lIE1YQ19JTlRfUlIJKDEgPDwgMCkgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCAqLworI2RlZmluZSBNWENfSU5UX1RFCSgxIDw8IDEpIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisKK3N0cnVjdCBzcGlfaW14X2NvbmZpZyB7CisJdW5zaWduZWQgaW50IHNwZWVkX2h6OworCXVuc2lnbmVkIGludCBicHc7CisJdW5zaWduZWQgaW50IG1vZGU7CisJaW50IGNzOworfTsKKworc3RydWN0IHNwaV9pbXhfZGF0YSB7CisJc3RydWN0IHNwaV9iaXRiYW5nIGJpdGJhbmc7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2RvbmU7CisJdm9pZCAqYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHNwaV9jbGs7CisJaW50ICpjaGlwc2VsZWN0OworCisJdW5zaWduZWQgaW50IGNvdW50OworCXZvaWQgKCp0eCkoc3RydWN0IHNwaV9pbXhfZGF0YSAqKTsKKwl2b2lkICgqcngpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJdm9pZCAqcnhfYnVmOworCWNvbnN0IHZvaWQgKnR4X2J1ZjsKKwl1bnNpZ25lZCBpbnQgdHhmaWZvOyAvKiBudW1iZXIgb2Ygd29yZHMgcHVzaGVkIGluIHR4IEZJRk8gKi8KKworCS8qIFNvQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwl2b2lkICgqaW50Y3RybCkoc3RydWN0IHNwaV9pbXhfZGF0YSAqLCBpbnQpOworCWludCAoKmNvbmZpZykoc3RydWN0IHNwaV9pbXhfZGF0YSAqLCBzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKik7CisJdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJaW50ICgqcnhfYXZhaWxhYmxlKShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworfTsKKworI2RlZmluZSBNWENfU1BJX0JVRl9SWCh0eXBlKQkJCQkJCVwKK3N0YXRpYyB2b2lkIHNwaV9pbXhfYnVmX3J4XyMjdHlwZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJUlhEQVRBKTsJXAorCQkJCQkJCQkJXAorCWlmIChzcGlfaW14LT5yeF9idWYpIHsJCQkJCQlcCisJCSoodHlwZSAqKXNwaV9pbXgtPnJ4X2J1ZiA9IHZhbDsJCQkJXAorCQlzcGlfaW14LT5yeF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgTVhDX1NQSV9CVUZfVFgodHlwZSkJCQkJCQlcCitzdGF0aWMgdm9pZCBzcGlfaW14X2J1Zl90eF8jI3R5cGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSB2YWwgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHNwaV9pbXgtPnR4X2J1ZikgewkJCQkJCVwKKwkJdmFsID0gKih0eXBlICopc3BpX2lteC0+dHhfYnVmOwkJCQlcCisJCXNwaV9pbXgtPnR4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlzcGlfaW14LT5jb3VudCAtPSBzaXplb2YodHlwZSk7CQkJCQlcCisJCQkJCQkJCQlcCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJVFhEQVRBKTsJCQlcCit9CisKK01YQ19TUElfQlVGX1JYKHU4KQorTVhDX1NQSV9CVUZfVFgodTgpCitNWENfU1BJX0JVRl9SWCh1MTYpCitNWENfU1BJX0JVRl9UWCh1MTYpCitNWENfU1BJX0JVRl9SWCh1MzIpCitNWENfU1BJX0JVRl9UWCh1MzIpCisKKy8qIEZpcnN0IGVudHJ5IGlzIHJlc2VydmVkLCBzZWNvbmQgZW50cnkgaXMgdmFsaWQgb25seSBpZiBTREhDX1NQSUVOIGlzIHNldAorICogKHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdGhlIGNhc2UgaW4gdGhpcyBkcml2ZXIpCisgKi8KK3N0YXRpYyBpbnQgbXhjX2Nsa2RpdnNbXSA9IHswLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsCisJMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0fTsKKworLyogTVgyMSwgTVgyNyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzcGlfaW14X2Nsa2Rpdl8xKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBtYXg7CisKKwlpZiAoY3B1X2lzX214MjEoKSkKKwkJbWF4ID0gMTg7CisJZWxzZQorCQltYXggPSAxNjsKKworCWZvciAoaSA9IDI7IGkgPCBtYXg7IGkrKykKKwkJaWYgKGZzcGkgKiBteGNfY2xrZGl2c1tpXSA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKworCXJldHVybiBtYXg7Cit9CisKKy8qIE1YMSwgTVgzMSwgTVgzNSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzcGlfaW14X2Nsa2Rpdl8yKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBkaXYgPSA0OworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpZiAoZnNwaSAqIGRpdiA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKwkJZGl2IDw8PSAxOworCX0KKworCXJldHVybiA3OworfQorCisjZGVmaW5lIE1YMzFfSU5UUkVHX1RFRU4JKDEgPDwgMCkKKyNkZWZpbmUgTVgzMV9JTlRSRUdfUlJFTgkoMSA8PCAzKQorCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfWENICSgxIDw8IDIpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NDVEwJKDEgPDwgNikKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU1BPTAkoMSA8PCA3KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX0JDX1NISUZUCTgKKyNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVAkyMAorI2RlZmluZSBNWDMxX0NTUElDVFJMX0NTX1NISUZUCTI0CisjZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQJMTIKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9EUl9TSElGVAkxNgorCisjZGVmaW5lIE1YMzFfQ1NQSVNUQVRVUwkJMHgxNAorI2RlZmluZSBNWDMxX1NUQVRVU19SUgkJKDEgPDwgMykKKworLyogVGhlc2UgZnVuY3Rpb25zIGFsc28gd29yayBmb3IgdGhlIGkuTVgzNSwgYnV0IGJlIGF3YXJlIHRoYXQKKyAqIHRoZSBpLk1YMzUgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dCBmb3IgYml0cworICogd2UgZG8gbm90IHVzZSBoZXJlLgorICovCitzdGF0aWMgdm9pZCBteDMxX2ludGN0cmwoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgzMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMzFfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDMxX3RyaWdnZXIoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MzFfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDMxX0NTUElDVFJMX0VOQUJMRSB8IE1YMzFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzIoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgzMV9DU1BJQ1RSTF9EUl9TSElGVDsKKworCWlmIChjcHVfaXNfbXgzMSgpKQorCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVDsKKwllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7CisJCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDM1X0NTUElDVFJMX0JMX1NISUZUOworCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU0NUTDsKKwl9CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BPTDsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTUE9MOworCWlmIChjb25maWctPmNzIDwgMCkgeworCQlpZiAoY3B1X2lzX214MzEoKSkKKwkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDMxX0NTUElDVFJMX0NTX1NISUZUOworCQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKQorCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQ7CisJfQorCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDMxX3J4X2F2YWlsYWJsZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXJldHVybiByZWFkbChzcGlfaW14LT5iYXNlICsgTVgzMV9DU1BJU1RBVFVTKSAmIE1YMzFfU1RBVFVTX1JSOworfQorCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSCQkoMSA8PCA0KQorI2RlZmluZSBNWDI3X0lOVFJFR19URUVOCSgxIDw8IDkpCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSRU4JKDEgPDwgMTMpCisKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QT0wJKDEgPDwgNSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QSEEJKDEgPDwgNikKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9TU1BPTAkoMSA8PCA4KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX1hDSAkoMSA8PCA5KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX0VOQUJMRQkoMSA8PCAxMCkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTEpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQJMTQKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9DU19TSElGVAkxOQorCitzdGF0aWMgdm9pZCBteDI3X2ludGN0cmwoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgyN19JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMjdfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDI3X3RyaWdnZXIoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MjdfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDI3X0NTUElDVFJMX0VOQUJMRSB8IE1YMjdfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzEoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgyN19DU1BJQ1RSTF9EUl9TSElGVDsKKwlyZWcgfD0gY29uZmlnLT5icHcgLSAxOworCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QT0w7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9TU1BPTDsKKwlpZiAoY29uZmlnLT5jcyA8IDApCisJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDI3X0NTUElDVFJMX0NTX1NISUZUOworCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI3X3J4X2F2YWlsYWJsZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXJldHVybiByZWFkbChzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgyN19JTlRSRUdfUlI7Cit9CisKKyNkZWZpbmUgTVgxX0lOVFJFR19SUgkJKDEgPDwgMykKKyNkZWZpbmUgTVgxX0lOVFJFR19URUVOCQkoMSA8PCA4KQorI2RlZmluZSBNWDFfSU5UUkVHX1JSRU4JCSgxIDw8IDExKQorCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfWENICSgxIDw8IDgpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgOSkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX0RSX1NISUZUCTEzCisKK3N0YXRpYyB2b2lkIG14MV9pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMV9JTlRSRUdfUlJFTjsKKworCXdyaXRlbCh2YWwsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUlOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MV90cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MV9jb25maWcoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwKKwkJc3RydWN0IHNwaV9pbXhfY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IE1YMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzIoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgxX0NTUElDVFJMX0RSX1NISUZUOworCXJlZyB8PSBjb25maWctPmJwdyAtIDE7CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QT0w7CisKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MV9yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMV9JTlRSRUdfUlI7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9pbXhfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlpbnQgZ3BpbyA9IHNwaV9pbXgtPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07CisJaW50IGFjdGl2ZSA9IGlzX2FjdGl2ZSAhPSBCSVRCQU5HX0NTX0lOQUNUSVZFOworCWludCBkZXZfaXNfbG93YWN0aXZlID0gIShzcGktPm1vZGUgJiBTUElfQ1NfSElHSCk7CisKKwlpZiAoZ3BpbyA8IDApCisJCXJldHVybjsKKworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGRldl9pc19sb3dhY3RpdmUgXiBhY3RpdmUpOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X3B1c2goc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl3aGlsZSAoc3BpX2lteC0+dHhmaWZvIDwgOCkgeworCQlpZiAoIXNwaV9pbXgtPmNvdW50KQorCQkJYnJlYWs7CisJCXNwaV9pbXgtPnR4KHNwaV9pbXgpOworCQlzcGlfaW14LT50eGZpZm8rKzsKKwl9CisKKwlzcGlfaW14LT50cmlnZ2VyKHNwaV9pbXgpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3BpX2lteF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBkZXZfaWQ7CisKKwl3aGlsZSAoc3BpX2lteC0+cnhfYXZhaWxhYmxlKHNwaV9pbXgpKSB7CisJCXNwaV9pbXgtPnJ4KHNwaV9pbXgpOworCQlzcGlfaW14LT50eGZpZm8tLTsKKwl9CisKKwlpZiAoc3BpX2lteC0+Y291bnQpIHsKKwkJc3BpX2lteF9wdXNoKHNwaV9pbXgpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKHNwaV9pbXgtPnR4ZmlmbykgeworCQkvKiBObyBkYXRhIGxlZnQgdG8gcHVzaCwgYnV0IHN0aWxsIHdhaXRpbmcgZm9yIHJ4IGRhdGEsCisJCSAqIGVuYWJsZSByZWNlaXZlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdC4KKwkJICovCisJCXNwaV9pbXgtPmludGN0cmwoc3BpX2lteCwgTVhDX0lOVF9SUik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIDApOworCWNvbXBsZXRlKCZzcGlfaW14LT54ZmVyX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfc2V0dXB4ZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBzcGlfaW14X2NvbmZpZyBjb25maWc7CisKKwljb25maWcuYnB3ID0gdCA/IHQtPmJpdHNfcGVyX3dvcmQgOiBzcGktPmJpdHNfcGVyX3dvcmQ7CisJY29uZmlnLnNwZWVkX2h6ICA9IHQgPyB0LT5zcGVlZF9oeiA6IHNwaS0+bWF4X3NwZWVkX2h6OworCWNvbmZpZy5tb2RlID0gc3BpLT5tb2RlOworCWNvbmZpZy5jcyA9IHNwaV9pbXgtPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07CisKKwlpZiAoIWNvbmZpZy5zcGVlZF9oeikKKwkJY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisJaWYgKCFjb25maWcuYnB3KQorCQljb25maWcuYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOworCWlmICghY29uZmlnLnNwZWVkX2h6KQorCQljb25maWcuc3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKKworCS8qIEluaXRpYWxpemUgdGhlIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgKi8KKwlpZiAoY29uZmlnLmJwdyA8PSA4KSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTg7CisJCXNwaV9pbXgtPnR4ID0gc3BpX2lteF9idWZfdHhfdTg7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDE2KSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTE2OworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3UxNjsKKwl9IGVsc2UgaWYgKGNvbmZpZy5icHcgPD0gMzIpIHsKKwkJc3BpX2lteC0+cnggPSBzcGlfaW14X2J1Zl9yeF91MzI7CisJCXNwaV9pbXgtPnR4ID0gc3BpX2lteF9idWZfdHhfdTMyOworCX0gZWxzZQorCQlCVUcoKTsKKworCXNwaV9pbXgtPmNvbmZpZyhzcGlfaW14LCAmY29uZmlnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlzcGlfaW14LT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOworCXNwaV9pbXgtPnJ4X2J1ZiA9IHRyYW5zZmVyLT5yeF9idWY7CisJc3BpX2lteC0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOworCXNwaV9pbXgtPnR4ZmlmbyA9IDA7CisKKwlpbml0X2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlzcGlfaW14X3B1c2goc3BpX2lteCk7CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIE1YQ19JTlRfVEUpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJldHVybiB0cmFuc2Zlci0+bGVuOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCisJcHJfZGVidWcoIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKKwkJIHNwaS0+bW9kZSwgc3BpLT5iaXRzX3Blcl93b3JkLCBzcGktPm1heF9zcGVlZF9oeik7CisKKwlpZiAoZ3BpbyA+PSAwKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpbywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CisKKwlzcGlfaW14X2NoaXBzZWxlY3Qoc3BpLCBCSVRCQU5HX0NTX0lOQUNUSVZFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKK30KKworc3RhdGljIGludCBfX2luaXQgc3BpX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfaW14X21hc3RlciAqbXhjX3BsYXRmb3JtX2luZm87CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpLCByZXQ7CisKKwlteGNfcGxhdGZvcm1faW5mbyA9IChzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIW14Y19wbGF0Zm9ybV9pbmZvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCB0aGUgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBzcGlfaW14X2RhdGEpKTsKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IG14Y19wbGF0Zm9ybV9pbmZvLT5udW1fY2hpcHNlbGVjdDsKKworCXNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCXNwaV9pbXgtPmNoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+Y2hpcHNlbGVjdDsKKworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPCAwKQorCQkJY29udGludWU7CisJCXJldCA9IGdwaW9fcmVxdWVzdChzcGlfaW14LT5jaGlwc2VsZWN0W2ldLCBEUklWRVJfTkFNRSk7CisJCWlmIChyZXQpIHsKKwkJCWktLTsKKwkJCXdoaWxlIChpID4gMCkKKwkJCQlpZiAoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSA+PSAwKQorCQkJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpLS1dKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBjcyBncGlvcyIpOworCQkJZ290byBvdXRfbWFzdGVyX3B1dDsKKwkJfQorCX0KKworCXNwaV9pbXgtPmJpdGJhbmcuY2hpcHNlbGVjdCA9IHNwaV9pbXhfY2hpcHNlbGVjdDsKKwlzcGlfaW14LT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gc3BpX2lteF9zZXR1cHhmZXI7CisJc3BpX2lteC0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBzcGlfaW14X3RyYW5zZmVyOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5zZXR1cCA9IHNwaV9pbXhfc2V0dXA7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXItPmNsZWFudXAgPSBzcGlfaW14X2NsZWFudXA7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfQ1NfSElHSDsKKworCWluaXRfY29tcGxldGlvbigmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHBsYXRmb3JtIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZ3Bpb19mcmVlOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfZ3Bpb19mcmVlOworCX0KKworCXNwaV9pbXgtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFzcGlfaW14LT5iYXNlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlbGVhc2VfbWVtOworCX0KKworCXNwaV9pbXgtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFzcGlfaW14LT5pcnEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShzcGlfaW14LT5pcnEsIHNwaV9pbXhfaXNyLCAwLCBEUklWRVJfTkFNRSwgc3BpX2lteCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaXJxJWQ6ICVkXG4iLCBzcGlfaW14LT5pcnEsIHJldCk7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJaWYgKGNwdV9pc19teDMxKCkgfHwgY3B1X2lzX214MzUoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgzMV9pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDMxX2NvbmZpZzsKKwkJc3BpX2lteC0+dHJpZ2dlciA9IG14MzFfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgzMV9yeF9hdmFpbGFibGU7CisJfSBlbHNlICBpZiAoY3B1X2lzX214MjcoKSB8fCBjcHVfaXNfbXgyMSgpKSB7CisJCXNwaV9pbXgtPmludGN0cmwgPSBteDI3X2ludGN0cmw7CisJCXNwaV9pbXgtPmNvbmZpZyA9IG14MjdfY29uZmlnOworCQlzcGlfaW14LT50cmlnZ2VyID0gbXgyN190cmlnZ2VyOworCQlzcGlfaW14LT5yeF9hdmFpbGFibGUgPSBteDI3X3J4X2F2YWlsYWJsZTsKKwl9IGVsc2UgaWYgKGNwdV9pc19teDEoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgxX2ludGN0cmw7CisJCXNwaV9pbXgtPmNvbmZpZyA9IG14MV9jb25maWc7CisJCXNwaV9pbXgtPnRyaWdnZXIgPSBteDFfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgxX3J4X2F2YWlsYWJsZTsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwlzcGlfaW14LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoc3BpX2lteC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihzcGlfaW14LT5jbGspOworCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CisKKwljbGtfZW5hYmxlKHNwaV9pbXgtPmNsayk7CisJc3BpX2lteC0+c3BpX2NsayA9IGNsa19nZXRfcmF0ZShzcGlfaW14LT5jbGspOworCisJaWYgKCFjcHVfaXNfbXgzMSgpIHx8ICFjcHVfaXNfbXgzNSgpKQorCQl3cml0ZWwoMSwgc3BpX2lteC0+YmFzZSArIE1YQ19SRVNFVCk7CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIDApOworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJnNwaV9pbXgtPmJpdGJhbmcpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYml0YmFuZyBzdGFydCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfY2xrX3B1dDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicHJvYmVkXG4iKTsKKworCXJldHVybiByZXQ7CisKK291dF9jbGtfcHV0OgorCWNsa19kaXNhYmxlKHNwaV9pbXgtPmNsayk7CisJY2xrX3B1dChzcGlfaW14LT5jbGspOworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKHNwaV9pbXgtPmlycSwgc3BpX2lteCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHNwaV9pbXgtPmJhc2UpOworb3V0X3JlbGVhc2VfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworb3V0X2dwaW9fZnJlZToKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQorCQlpZiAoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSA+PSAwKQorCQkJZ3Bpb19mcmVlKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0pOworb3V0X21hc3Rlcl9wdXQ6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlrZnJlZShtYXN0ZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNwaV9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCBpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmc3BpX2lteC0+Yml0YmFuZyk7CisKKwl3cml0ZWwoMCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJY2xrX2Rpc2FibGUoc3BpX2lteC0+Y2xrKTsKKwljbGtfcHV0KHNwaV9pbXgtPmNsayk7CisJZnJlZV9pcnEoc3BpX2lteC0+aXJxLCBzcGlfaW14KTsKKwlpb3VubWFwKHNwaV9pbXgtPmJhc2UpOworCisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCWdwaW9fZnJlZShzcGlfaW14LT5jaGlwc2VsZWN0W2ldKTsKKworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaV9pbXhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IHNwaV9pbXhfcHJvYmUsCisJLnJlbW92ZSA9IF9fZXhpdF9wKHNwaV9pbXhfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaV9pbXhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNwaV9pbXhfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcGlfaW14X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNwaV9pbXhfaW5pdCk7Cittb2R1bGVfZXhpdChzcGlfaW14X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNQSSBNYXN0ZXIgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMgYi9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCmluZGV4IGQ4NzFkYzIuLjI1NTJiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmc3MtPmRvbmUpOwogCiAJaWYgKCFidXN5X3dhaXQocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApICYgQk1fU1NQX0NUUkwwX1JVTikpCi0JCXN0YXR1cyA9IEVUSU1FRE9VVDsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAogCWlmICghZG1hX2J1ZikKIAkJZG1hX3VubWFwX3NpbmdsZShzcy0+bWFzdGVyX2Rldiwgc3BpX2J1Zl9kbWEsIGxlbiwgZGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaWRldi5jIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKaW5kZXggZjkyMWJkMS4uNWQyMzk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpZGV2LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKQEAgLTUzNyw3ICs1MzcsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwaWRldl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BpZGV2X2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLyogUkVWSVNJVCBzd2l0Y2ggdG8gYWlvIHByaW1pdGl2ZXMsIHNvIHRoYXQgdXNlcnNwYWNlCiAJICogZ2V0cyBtb3JlIGNvbXBsZXRlIEFQSSBjb3ZlcmFnZS4gIEl0J2xsIHNpbXBsaWZ5IHRoaW5ncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA5YTRkZDU5Li5kMjFiMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNTksOCArNTksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2NoL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZyIKQEAgLTk1LDggKzkzLDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWciCkBAIC0xMjksNyArMTI1LDUgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZyIKLQogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCAxMDRmMmY4Li44Y2JmMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw2IEBACiBvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KIG9iai0kKENPTkZJR19FQ0hPKQkJKz0gZWNoby8KIG9iai0kKENPTkZJR19QT0NIKQkJKz0gcG9jaC8KLW9iai0kKENPTkZJR19BR05YKQkJKz0gYWdueC8KIG9iai0kKENPTkZJR19PVFVTKQkJKz0gb3R1cy8KIG9iai0kKENPTkZJR19SVDI4NjApCQkrPSBydDI4NjAvCiBvYmotJChDT05GSUdfUlQyODcwKQkJKz0gcnQyODcwLwpAQCAtMzAsNyArMjksNiBAQAogb2JqLSQoQ09ORklHX0FORFJPSUQpCQkrPSBkcmVhbS8KIG9iai0kKENPTkZJR19EU1QpCQkrPSBkc3QvCiBvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KLW9iai0kKENPTkZJR19TVExDNDVYWCkJCSs9IHN0bGM0NXh4Lwogb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwogb2JqLSQoQ09ORklHX1BMQU45QVVUSCkJCSs9IHA5YXV0aC8KQEAgLTQ2LDQgKzQ0LDMgQEAKIG9iai0kKENPTkZJR19SQVJfUkVHSVNURVIpCSs9IHJhci8KIG9iai0kKENPTkZJR19EWF9TRVApCQkrPSBzZXAvCiBvYmotJChDT05GSUdfSUlPKQkJKz0gaWlvLwotb2JqLSQoQ09ORklHX0NPV0xPT1ApCQkrPSBjb3dsb29wLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDM1NDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotY29uZmlnIEFHTlgKLQl0cmlzdGF0ZSAiV2lyZWxlc3MgQWlyZ28gQUdOWCBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBNQUM4MDIxMQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgQWlyZ28gQUdOWDAwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjE2NTY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1vYmotJChDT05GSUdfQUdOWCkJKz0gYWdueC5vCi0KLWFnbngtb2JqcyA6PQlyZi5vCVwKLQkJcGNpLm8JXAotCQl4bWl0Lm8JXAotCQl0YWJsZS5vCVwKLQkJc3RhLm8JXAotCQlwaHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmVjNzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTIwMDggNy8xOAotCi1UaGUgUlggaGFzIGNhbid0IHJlY2VpdmUgT0ZETSBwYWNrZXQgY29ycmVjdGx5LAotR3Vlc3MgaXQgbmVlZCBiZSBkbyBSWCBjYWxpYnJhdGUuCi0KLQotYmVmb3JlIDIwMDggMy8xCi0KLTE6IFRoZSBSWCBnZXQgdG9vIG11Y2ggIkNSQyBmYWlsZWQiIHBha2V0cywgaXQgbWFrZSB0aGUgY2FyZCB3b3JrIHZlcnkgdW5zdGFibGUsCi0yOiBBZnRlciBydW5uaW5nIGEgd2hpbGUsIHRoZSBjYXJkIHdpbGwgZ2V0IGluZmluaXR5ICJSWCBGcmFtZSIgYW5kICJFcnJvciIKLWludGVycnVwdCwgbm90IGtub3cgdGhlIHJvb3QgcmVhc29uIHNvIGZhciwgdHJ5IHRvIGZpeCBpdAotMzogVXNpbmcgdHdvIHR4IHF1ZXVlIHR4ZCBhbmQgdHhtIGJ1dCBub3Qgb25seSB0eG0uCi00OiBTZXQgdGhlIGhkciBjb3JyZWN0bHkuCi01OiBUcnkgdG8gZG8gcmVjYWxpYnJhdGUgY29ycmV2dGx5Ci02OiBUbyBzdXBwb3J0IEcgbW9kZSBpbiBmdXR1cmUKLTc6IEZpeCB0aGUgbWFjIGFkZHJlc3MgY2FuJ3QgYmUgcmVhZGVkIGFuZCBzZXQgY29ycmVjdGx5IGluIEJFIG1hY2hpbmUuCi04OiBGaXggaW5jbHVkZSBhbmQgZXhjbHVkZSBGQ1MgaW4gcHJvbWlzb3VzIG1vZGUgYW5kIG1hbmFnZSBtb2RlCi05OiBVc2luZyBzdGFfbm90aWZ5IHRvIG5vdGljZSBzdGEgY2hhbmdlCi0xMDogVHVybiBvbiBmcmFtZSByZWNlcHRpb24gYXQgdGhlIGVuZCBvZiBzdGFydAotMTE6IEd1ZXNzIHRoZSBjYXJkIHN1cHBvcnQgSFdfTVVMVElDQVNUX0ZJTFRFUgotMTI6IFRoZSB0eCBwcm9jZXNzIHNob3VsZCBiZSBpbXBsbWVudCBhdG9taWM/Ci0xMzogVXNpbmcgbWFjODAyMTEgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgVFgmUlggTEVELgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYzZDI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0jaWZuZGVmIEFHTlhfSF8KLSNkZWZpbmUgQUdOWF9IXwotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgInhtaXQuaCIKLQotI2RlZmluZSBQRlgJCQkJS0JVSUxEX01PRE5BTUUgIjogIgotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3JlYWQzMih2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBvZmZzZXQpCi17Ci0JcmV0dXJuIGlvcmVhZDMyKG1lbV9yZWdpb24gKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF93cml0ZTMyKHZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbiwgdTMyIG9mZnNldCwgdTMyIHZhbCkKLXsKLQlpb3dyaXRlMzIodmFsLCBtZW1fcmVnaW9uICsgb2Zmc2V0KTsKLX0KLQotLyogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhZ254X3JhdGVzXzgwMjExYltdID0geyAqLwotLyogCXsgLnJhdGUgPSAxMCwgKi8KLS8qIAkgIC52YWwgPSAweGEsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0sgfSwgKi8KLS8qIAl7IC5yYXRlID0gMjAsICovCi0vKiAJICAudmFsID0gMHgxNCwgKi8KLS8qIAkgIC5od192YWx1ZSA9IC0weDE0LCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwgKi8KLS8qIAl7IC5yYXRlID0gNTUsICovCi0vKiAJICAudmFsID0gMHgzNywgKi8KLS8qIAkgIC52YWwyID0gLTB4MzcsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9LCAqLwotLyogCXsgLnJhdGUgPSAxMTAsICovCi0vKiAJICAudmFsID0gMHg2ZSwgKi8KLS8qIAkgIC52YWwyID0gLTB4NmUsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9ICovCi0vKiB9OyAqLwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYWdueF9yYXRlc184MDIxMWdbXSA9IHsKLS8qIAl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCi0vKiAJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotLyogCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLS8qIAl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMSwgfSwKLQl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDIsIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDQsfSwKLQotCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMHhCLCB9LAotCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMHhGLCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4QSB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4RSwgfSwKLS8qCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4ZCwgfSwgKi8KLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSAweEQsIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMHg4LCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDB4QywgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYWdueF9jaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwKLX07Ci0KLSNkZWZpbmUgTlVNX0RSSVZFX01PREVTCTIKLS8qIEFnbnggb3BlcmF0ZSBtb2RlICovCi1lbnVtIHsKLQlBR05YX01PREVfODAyMTFBLAotCUFHTlhfTU9ERV84MDIxMUFfT09CLAotCUFHTlhfTU9ERV84MDIxMUFfTUlNTywKLQlBR05YX01PREVfODAyMTFCX1NIT1JULAotCUFHTlhfTU9ERV84MDIxMUJfTE9ORywKLQlBR05YX01PREVfODAyMTFHLAotCUFHTlhfTU9ERV84MDIxMUdfT09CLAotCUFHTlhfTU9ERV84MDIxMUdfTUlNTywKLX07Ci0KLWVudW0gewotCUFHTlhfVU5JTklULAotCUFHTlhfU1RBUlQsCi0JQUdOWF9TVE9QLAotfTsKLQotc3RydWN0IGFnbnhfcHJpdiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCXVuc2lnbmVkIGludCBpbml0X3N0YXR1czsKLQotCXZvaWQgX19pb21lbSAqY3RsOwkvKiBwb2ludGVyIHRvIGJhc2UgcmFtIGFkZHJlc3MgKi8KLQl2b2lkIF9faW9tZW0gKmRhdGE7CS8qIHBvaW50ZXIgdG8gbWVtIHJlZ2lvbiAjMiAqLwotCi0Jc3RydWN0IGFnbnhfcmluZyByeDsKLQlzdHJ1Y3QgYWdueF9yaW5nIHR4bTsKLQlzdHJ1Y3QgYWdueF9yaW5nIHR4ZDsKLQotCS8qIE5lZWQgdm9sYXRpbGU/ICovCi0JdTMyIGlycV9zdGF0dXM7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7IC8qIFBlcmlvZGljIHRhc2tzIGxpa2UgcmVjYWxpYnJhdGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBzdGF0czsKLQotCS8qIHVuc2lnbmVkIGludCBwaHltb2RlOyAqLwotCWludCBtb2RlOwotCWludCBjaGFubmVsOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQl1OCByZXZpZDsKLQotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKLX07Ci0KLQotI2RlZmluZSBBR05YX0NIQUlOU19NQVgJNgotI2RlZmluZSBBR05YX1BFUklPRElDX0RFTEFZIDYwMDAwIC8qIHVuaXQ6IG1zICovCi0jZGVmaW5lIExPQ0FMX1NUQUlECTAJLyogdGhlIHN0YXRpb24gZW50cnkgZm9yIHRoZSBjYXJkIGl0c2VsZiAqLwotI2RlZmluZSBCU1NJRF9TVEFJRAkxCS8qIHRoZSBzdGF0aW9uIGVudHJ5IGZvciB0aGUgYnNzc2lkIEFQICovCi0jZGVmaW5lCXNwaV9kZWxheSgpCXVkZWxheSg0MCkKLSNkZWZpbmUgZWVwcm9tX2RlbGF5KCkJdWRlbGF5KDQwKQotI2RlZmluZQlyb3V0aW5nX3RhYmxlX2RlbGF5KCkJdWRlbGF5KDUwKQotCi0vKiBQRFUgcG9vbCBNRU0gcmVnaW9uICMyICovCi0jZGVmaW5lIEFHTlhfUERVUE9PTAkJMHg0MDAwMAkvKiBQRFUgcG9vbCAqLwotI2RlZmluZSBBR05YX1BEVVBPT0xfU0laRQkweDgwMDAJLyogUERVIHBvb2wgc2l6ZSovCi0jZGVmaW5lIEFHTlhfUERVX1RYX1dRCQkweDQxMDAwCS8qIFBEVSBsaXN0IFRYIHdvcmtxdWV1ZSAqLwotI2RlZmluZSBBR05YX1BEVV9GUkVFCQkweDQxODAwCS8qIEZyZWUgUG9vbCAqLwotI2RlZmluZSBQRFVfU0laRQkJMHg4MAkvKiBGcmVlIFBvb2wgbm9kZSBzaXplICovCi0jZGVmaW5lIFBEVV9GUkVFX0NOVAkJMHhkMCAvKiBGcmVlIHBvb2wgbm9kZSBjb3VudCAqLwotCi0KLS8qIFJGIHN0dWZmcyAqLwotZXh0ZXJuIHZvaWQgcmZfY2hpcHNfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIHNwaV9yY193cml0ZSh2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KTsKLWV4dGVybiB2b2lkIGNhbGlicmF0ZV9vc2NpbGxhdG9yKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgZG9fY2FsaWJyYXRpb24oc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBhbnRlbm5hX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIF9fYW50ZW5uYV9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBwcmludF9vZmZzZXRzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBhZ254X3NldF9jaGFubmVsKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKTsKLQotCi0jZW5kaWYgLyogQUdOWF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDdmMzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxNiArMCwwIEBACi0jaWZuZGVmIEFHTlhfREVCVUdfSF8KLSNkZWZpbmUgQUdOWF9ERUJVR19IXwotCi0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgInhtaXQuaCIKLQotI2RlZmluZSBBR05YX1RSQUNFICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgUEZYICJmdW5jdGlvbjolcyBsaW5lOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pCi0KLSNkZWZpbmUgUFJJTlRLX0xFMTYocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS40eFxuIiwgbGUxNl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0xFMzIocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS44eFxuIiwgbGUzMl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX1U4KHByZWZpeCwgdmFyKSAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS4yeFxuIiwgdmFyKQotI2RlZmluZSBQUklOVEtfQkUxNihwcmVmaXgsIHZhcikJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjdmFyICIgMHglLjR4XG4iLCBiZTE2X3RvX2NwdSh2YXIpKQotI2RlZmluZSBQUklOVEtfQkUzMihwcmVmaXgsIHZhcikJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjdmFyICIgMHglLjh4XG4iLCBiZTMyX3RvX2NwdSh2YXIpKQotI2RlZmluZSBQUklOVEtfQklUUyhwcmVmaXgsIGZpZWxkKSAgICAJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjZmllbGQgIjogMHgleFxuIiwgKHJlZyAmIGZpZWxkKSA+PiBmaWVsZCMjX1NISUZUKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9idWcoY2hhciAqcmVhc29uKQotewotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzXG4iLCByZWFzb24pOwotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9kZXNjKHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MpCi17Ci0JdTMyIHJlZyA9IGJlMzJfdG9fY3B1KGRlc2MtPmZyYWcpOwotCi0JUFJJTlRLX0JJVFMoREVTQywgUEFDS0VUX0xFTik7Ci0KLQlpZiAocmVnICYgRklSU1RfRlJBRykgewotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9QQUNLRVRfTUFTSyk7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX1JFU0VSVjIpOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9US0lQX0VSUk9SKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfVEtJUF9QQUNLRVQpOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9SRVNFUlYxKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfRlJBR19MRU4pOwotCX0gZWxzZSB7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9SRVNFUlYyKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1RLSVBfRVJST1IpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfVEtJUF9QQUNLRVQpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfUkVTRVJWMSk7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9GUkFHX0xFTik7Ci0JfQotCi0JUFJJTlRLX0JJVFMoREVTQywgRklSU1RfRlJBRyk7Ci0JUFJJTlRLX0JJVFMoREVTQywgTEFTVF9GUkFHKTsKLQlQUklOVEtfQklUUyhERVNDLCBPV05FUik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfaWVlZTgwMjExYl9waHlfaGRyKF9fYmUzMiBfMTFiMCwgX19iZTMyIF8xMWIxKQotewotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQl1MzIgcmVnOwotCWludCBpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcwKTsKLQlQUklOVEtfQklUUyhIRFIsIFJUUyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBNVUxUSUNBU1QpOwotCVBSSU5US19CSVRTKEhEUiwgQUNLKTsKLQlQUklOVEtfQklUUyhIRFIsIFRNKTsKLQlQUklOVEtfQklUUyhIRFIsIFJFTEFZKTsKLQlQUklOVEtfQklUUyhIRFIsIFJFVklTRURfRkNTKTsKLQlQUklOVEtfQklUUyhIRFIsIE5FWFRfQlVGRkVSX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcxKTsKLQlQUklOVEtfQklUUyhIRFIsIE1BQ19IRFJfTEVOKTsKLQlQUklOVEtfQklUUyhIRFIsIERVUkFUSU9OX09WRVJJREUpOwotCVBSSU5US19CSVRTKEhEUiwgUEhZX0hEUl9PVkVSSURFKTsKLQlQUklOVEtfQklUUyhIRFIsIENSQ19GQUlMKTsKLQlQUklOVEtfQklUUyhIRFIsIFNFUVVFTkNFX05VTUJFUik7Ci0JUFJJTlRLX0JJVFMoSERSLCBCVUZGX0hFQURfQUREUik7Ci0KLQlyZWcgPSBiZTMyX3RvX2NwdShoZHItPnJlZzIpOwotCVBSSU5US19CSVRTKEhEUiwgUERVX0NPVU5UKTsKLQlQUklOVEtfQklUUyhIRFIsIFdFUF9LRVkpOwotCVBSSU5US19CSVRTKEhEUiwgVVNFU19XRVBfS0VZKTsKLQlQUklOVEtfQklUUyhIRFIsIEtFRVBfQUxJVkUpOwotCVBSSU5US19CSVRTKEhEUiwgQlVGRl9UQUlMX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWczKTsKLQlQUklOVEtfQklUUyhIRFIsIENUU18xMUcpOwotCVBSSU5US19CSVRTKEhEUiwgUlRTXzExRyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBGUkFHX1NJWkUpOwotCVBSSU5US19CSVRTKEhEUiwgUEFZTE9BRF9MRU4pOwotCVBSSU5US19CSVRTKEhEUiwgRlJBR19OVU0pOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWc0KTsKLQlQUklOVEtfQklUUyhIRFIsIFJFTEFZX1NUQUlEKTsKLQlQUklOVEtfQklUUyhIRFIsIFNUQVRJT05fSUQpOwotCVBSSU5US19CSVRTKEhEUiwgV09SS1FVRVVFX0lEKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnNSk7Ci0JLyogcHJpbnRmIHRoZSByb3V0ZSBmbGFnICovCi0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9IT1NUKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX0NBUkRfQ1BVKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX0VOQ1JZUFRJT04pOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfVFgpOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfUlgxKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1JYMik7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9DT01QUkVTU0lPTik7Ci0KLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExZzApOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5fMTFnMSk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWIwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExYjEpOwotCi0JZHVtcF9pZWVlODAyMTFiX3BoeV9oZHIoaGRyLT5fMTFiMCwgaGRyLT5fMTFiMSk7Ci0KLQkvKiBGaXhtZSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkci0+bWFjX2hkcik7IGkrKykgewotCQlpZiAoaSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJJRUVFODAyMTEgSERSOiAiKTsKLQkJcHJpbnRrKCIlLjJ4ICIsIGhkci0+bWFjX2hkcltpXSk7Ci0JCWlmIChpICsgMSA9PSBBUlJBWV9TSVpFKGhkci0+bWFjX2hkcikpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ0c19kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPmxhc3RfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5zZWNfbGFzdF9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPm90aGVyX2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+dHhfb3RoZXJfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5sYXN0XzExZ19sZW4pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5vdGhlcl8xMWdfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+bGFzdF8xMWJfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+b3RoZXJfMTFiX2xlbik7Ci0KLQkvKiBGSVhNRSAqLwotCXJlZyA9IGJlMTZfdG9fY3B1KGhkci0+cmVnNik7Ci0JUFJJTlRLX0JJVFMoSERSLCBNQkYpOwotCVBSSU5US19CSVRTKEhEUiwgUlNWRDQpOwotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4X2ZyYWdfc3RhdCk7Ci0KLQlQUklOVEtfQkUzMihIRFIsIGhkci0+dGltZV9zdGFtcCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnBoeV9zdGF0c19oaSk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnBoeV9zdGF0c19sbyk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPm1pY19rZXkwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+bWljX2tleTEpOwotfSAvKiBhZ254X3ByaW50X2hkciAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3J4X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQlhZ254X3ByaW50X2hkcihoZHIpOwotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4LnJ4X3BhY2tldF9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4LnJlcGxheV9jbnQpOwotCi0JUFJJTlRLX1U4KEhEUiwgaGRyLT5yeF9jaGFubmVsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfdHhfaGRyKHN0cnVjdCBhZ254X2hkciAqaGRyKQotewotCWFnbnhfcHJpbnRfaGRyKGhkcik7Ci0KLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LmxvbmdfcmV0cnlfbGltaXQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHguc2hvcnRfcmV0cnlfbGltaXQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHgubG9uZ19yZXRyeV9jbnQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHguc2hvcnRfcmV0cnlfY250KTsKLQotCVBSSU5US19VOChIRFIsIGhkci0+cnhfY2hhbm5lbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWdueF9wcmludF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0KLQlnZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgc3RhX2lkeCk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdShwb3dlci5yZWcpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgU0lHTkFMKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFJBVEUpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgVElGUyk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBFRENGKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIENIQU5ORUxfQk9ORCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBQSFlfTU9ERSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBQT1dFUl9MRVZFTCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBOVU1fVFJBTlNNSVRURVJTKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hZ254X3ByaW50X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCkKLXsKLQlzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgdHhfd3E7Ci0JdTMyIHJlZzsKLQotCWdldF9zdGFfdHhfd3EocHJpdiwgJnR4X3dxLCBzdGFfaWR4LCB3cV9pZHgpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBUQUlMX1BPSU5URVIpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9QT0lOVEVSX0xPVyk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0eF93cS5yZWczKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfUE9JTlRFUl9ISUdIKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEFDS19QT0lOVEVSX0xPVyk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0eF93cS5yZWcxKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEFDS19QT0lOVEVSX0hJR0gpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9USU1PVVRfVEFJTF9QQUNLX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlQpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMik7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfVElNT1VUX1dJTl9MSU1fRlJBR19DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgV09SS19RVUVVRV9BQ0tfVFlQRSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBXT1JLX1FVRVVFX1ZBTElEKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfc3RhX3RyYWZmaWMoc3RydWN0IGFnbnhfc3RhX3RyYWZmaWMgKnRyYWZmaWMpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHRyYWZmaWMtPnJlZzApOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBBQ0tfVElNT1VUX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFRSQUZGSUNfQUNLX1RZUEUpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBORVdfUEFDS0VUKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgVFJBRkZJQ19WQUxJRCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFJYX0hEUl9ERVNDX1BPSU5URVIpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHJhZmZpYy0+cmVnMSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFJYX1BBQ0tFVF9USU1FU1RBTVApOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBUUkFGRklDX1JFU0VSVkVEKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgU1YpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9TRVFVRU5DRV9OVU0pOwotCi0JUFJJTlRLX0xFMzIoU1RBX1RSQUZGSUMsIHRyYWZmaWMtPnR4X3JlcGxheV9jbnRfbG93KTsKLQotCVBSSU5US19MRTE2KFNUQV9UUkFGRklDLCB0cmFmZmljLT50eF9yZXBsYXlfY250X2hpZ2gpOwotCVBSSU5US19MRTE2KFNUQV9UUkFGRklDLCB0cmFmZmljLT5yeF9yZXBsYXlfY250X2hpZ2gpOwotCi0JUFJJTlRLX0xFMzIoU1RBX1RSQUZGSUMsIHRyYWZmaWMtPnJ4X3JlcGxheV9jbnRfbG93KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YSBzdGF0aW9uOwotCXN0cnVjdCBhZ254X3N0YSAqc3RhID0gJnN0YXRpb247Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWdldF9zdGEocHJpdiwgc3RhLCBzdGFfaWR4KTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCVBSSU5US19MRTMyKFNUQSwgc3RhLT50eF9zZXNzaW9uX2tleXNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCVBSSU5US19MRTMyKFNUQSwgc3RhLT5yeF9zZXNzaW9uX2tleXNbaV0pOwotCi0JcmVnID0gbGUzMl90b19jcHUoc3RhLT5yZWcpOwotCVBSSU5US19CSVRTKFNUQSwgSURfMSk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBJRF8wKTsKLQlQUklOVEtfQklUUyhTVEEsIEVOQUJMRV9DT05DQVRFTkFUSU9OKTsKLQlQUklOVEtfQklUUyhTVEEsIEVOQUJMRV9ERUNPTVBSRVNTSU9OKTsKLQlQUklOVEtfQklUUyhTVEEsIFNUQV9SRVNFUlZFRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFQVApOwotCVBSSU5US19CSVRTKFNUQSwgRURfTlVMTCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkNSWVBUSU9OX1BPTElDWSk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBERUZJTkVEX0tFWV9JRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBGSVhFRF9LRVkpOwotCVBSSU5US19CSVRTKFNUQSwgS0VZX1ZBTElEKTsKLQlQUklOVEtfQklUUyhTVEEsIFNUQVRJT05fVkFMSUQpOwotCi0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnR4X2Flc19ibGtzX3VuaWNhc3QpOwotCVBSSU5US19MRTMyKFNUQSwgc3RhLT5yeF9hZXNfYmxrc191bmljYXN0KTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfZm9ybWF0X2Vycl91bmljYXN0X2NudCk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFlc19yZXBsYXlfdW5pY2FzdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2RlY3J5cHRfZXJyX3VuaWNhc3QpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfZGVjcnlwdF9lcnJfZGVmYXVsdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+c2luZ2xlX3JldHJ5X3BhY2tldHMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5mYWlsZWRfdHhfcGFja2V0cyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+bXV0aV9yZXRyeV9wYWNrZXRzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWNrX3RpbWVvdXRzKTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5mcmFnX3R4X2NudCk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnJ0c19icnFfc2VudCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHhfcGFja2V0cyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmN0c19iYWNrX3RpbWVvdXQpOwotCi0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19oaWdoKTsKLQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cGh5X3N0YXRzX2xvdyk7Ci0KLQkvKiBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSAqLwotCWFnbnhfcHJpbnRfc3RhX3RyYWZmaWMoc3RhLT50cmFmZmljICsgMCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczBfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczFfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczJfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczNfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczRfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczVfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczZfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczdfZnJhZ19zdWNjZXNzKTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5udW1fZnJhZ19ub25fcHJpbWVfcmF0ZXMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hY2tfdGltZW91dF9ub25fcHJpbWVfcmF0ZXMpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2llZWU4MDIxMV9oZHIoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY2hhciAqdGFnKQotewotCXUxNiBmY3RsOwotCWludCBoZHJsZW47Ci0KLQlmY3RsID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCXByaW50ayhQRlggIiVzIERBVEEgIiwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlwcmludGsoUEZYICIlcyBDVEwgIiwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJcHJpbnRrKFBGWCAiJXMgTUdNVCAiLCB0YWcpOwotCQlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFTU09DX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBU1NPQ19SRVNQICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBSRUFTU09DX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFJFQVNTT0NfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFBST0JFX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBQUk9CRV9SRVNQICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQkJCXByaW50aygiU3ViVHlwZTogQkVBQ09OICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FUSU06Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFUSU0gIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCQlwcmludGsoIlN1YlR5cGU6IERJU0FTU09DICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFVVEggIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBERUFVVEggIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBQ1RJT04gIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiU3ViVHlwZTogVW5rbm93XG4iKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoUEZYICIlcyBQYWNrZXQgdHlwZTogVW5rbm93XG4iLCB0YWcpOwotCX0KLQotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7Ci0KLQlpZiAoaGRybGVuID49IDQpCi0JCXByaW50aygiRkM9MHglMDR4IERVUj0weCUwNHgiLAotCQkgICAgICAgZmN0bCwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCkpOwotCWlmIChoZHJsZW4gPj0gMTApCi0JCXByaW50aygiIEExPSVwTSIsIGhkci0+YWRkcjEpOwotCWlmIChoZHJsZW4gPj0gMTYpCi0JCXByaW50aygiIEEyPSVwTSIsIGhkci0+YWRkcjIpOwotCWlmIChoZHJsZW4gPj0gMjQpCi0JCXByaW50aygiIEEzPSVwTSIsIGhkci0+YWRkcjMpOwotCWlmIChoZHJsZW4gPj0gMzApCi0JCXByaW50aygiIEE0PSVwTSIsIGhkci0+YWRkcjQpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfdHhtX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxZTg7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJUWE06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIGkpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3J4bV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTA4OyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUlhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyAweDIwMDAgKyBpKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9ibV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4OTA7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJCTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyYzAwICsgaSkpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfY2lyX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0gMHhiODsgaSArPSA0KQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkNJUjogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgzMDAwICsgaSkpOwotfQotCi0jZW5kaWYgLyogQUdOWF9ERUJVR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiNTQ4OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDYzNSArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAieG1pdC5oIgotI2luY2x1ZGUgInBoeS5oIgotCi1NT0RVTEVfQVVUSE9SKCJMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBaXJnbyBNSU1PIFBDSSB3aXJlbGVzcyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFnbnhfcGNpX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTdjYiwgMHgwMDAxKSB9LAkvKiBCZWtsaW4gRjVkODAxMCwgTmV0Z2VhciBXR001MTEgZXRjICovCi0JeyBQQ0lfREVWSUNFKDB4MTdjYiwgMHgwMDAyKSB9LAkvKiBOZXRnZWFyIFdwbnQ1MTEgKi8KLQl7IDAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFnbnhfcGNpX2lkX3RibCk7Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfaW50ZXJydXB0X2FjayhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgKnJlYXNvbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfUlgpIHsKLQkJLyogTWFyayBjb21wbGV0ZSBSWCAqLwotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci0JCXJlZyB8PSAweDQ7Ci0JCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLQkJLyogZGlzYWJsZSBSeCBpbnRlcnJ1cHQgKi8KLQl9Ci0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfVFgpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKLQkJaWYgKHJlZyAmIDB4NCkgewotCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKLQkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYRDsKLQkJfQotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCQlpZiAocmVnICYgMHg0KSB7Ci0JCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCQkJKnJlYXNvbiB8PSBBR05YX1NUQVRfVFhNOwotCQl9Ci0JfQotI2lmIDAKLQlpZiAoKnJlYXNvbiAmIEFHTlhfU1RBVF9YKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJLyogRklYTUUgcmVpbml0IGludGVycnVwdCBtYXNrICovCi0JCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOwotCQlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKDB4ODAwLCBjdGwgKyBBR05YX0NJUl9CTEtDVEwpOwotCX0KLSNlbmRpZgotfSAvKiBhZ254X2ludGVycnVwdF9hY2sgKi8KLQotc3RhdGljIGlycXJldHVybl90IGFnbnhfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCXUzMiBpcnFfcmVhc29uOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotLyoJcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0IGEgaW50ZXJydXB0ICVzXG4iLCBfX2Z1bmNfXyk7ICovCi0KLQlpZiAocHJpdi0+aW5pdF9zdGF0dXMgIT0gQUdOWF9TVEFSVCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBGaVhNRSAgSGVyZSBoYXMgbm8gbG9jaywgSXMgdGhpcyB3aWxsIGxlYWQgdG8gcmFjZT8gKi8KLQlpcnFfcmVhc29uID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsKLQlpZiAoIShpcnFfcmVhc29uICYgMHg3KSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBJUlFfSEFORExFRDsKLQlwcml2LT5pcnFfc3RhdHVzID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0KLS8qCXByaW50ayhQRlggIkludGVycnVwdCByZWFzb24gaXMgMHgleFxuIiwgaXJxX3JlYXNvbik7ICovCi0JLyogTWFrZSBzdXJlIHRoZSB0eG0gYW5kIHR4ZCBmbGFncyBkb24ndCBjb25mbGljdCB3aXRoIG90aGVyIHVua25vd24KLQkgICBpbnRlcnJ1cHQgZmxhZywgbWF5YmUgaXMgbm90IG5lY2Vzc2FyeSAqLwotCWlycV9yZWFzb24gJj0gMHhGOwotCi0JZGlzYWJsZV9yeF9pbnRlcnJ1cHQocHJpdik7Ci0JLyogVE9ETyBNYWtlIHN1cmUgdGhlIGNhcmQgZmluaXNoZWQgaW5pdGlhbGl6ZWQgKi8KLQlhZ254X2ludGVycnVwdF9hY2socHJpdiwgJmlycV9yZWFzb24pOwotCi0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfUlgpCi0JCWhhbmRsZV9yeF9pcnEocHJpdik7Ci0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhEKQotCQloYW5kbGVfdHhkX2lycShwcml2KTsKLQlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWE0pCi0JCWhhbmRsZV90eG1faXJxKHByaXYpOwotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1gpCi0JCWhhbmRsZV9vdGhlcl9pcnEocHJpdik7Ci0KLQllbmFibGVfcnhfaW50ZXJydXB0KHByaXYpOwotb3V0OgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfSAvKiBhZ254X2ludGVycnVwdF9oYW5kbGVyICovCi0KLQotLyogRklYTUUgKi8KLXN0YXRpYyBpbnQgYWdueF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gX2FnbnhfdHgoZGV2LT5wcml2LCBza2IpOwotfSAvKiBhZ254X3R4ICovCi0KLQotc3RhdGljIGludCBhZ254X2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEF0dGVudGlvbiEgZGlyZWN0bHkgcmVhZCB0aGUgTUFDIG9yIG90aGVyIGRhdGUgZnJvbSBFRVBST00gd2lsbAotCSBsZWFkIHRvIGNhcmRidXMoV0dNNTExKSBsb2NrIHVwIHdoZW4gd3JpdGUgdG8gUE0gUExMIHJlZ2lzdGVyICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NDQpOwotCXVkZWxheSg0MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NGMpOwotCXVkZWxheSg1MCk7Ci0JLyogR2V0IHRoZSBtYWMgYWRkcmVzcyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ0KTsKLQl1ZGVsYXkoNDApOwotCi0JLyogSEFDSyAqLwotCXJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0JcHJpdi0+bWFjX2FkZHJbMF0gPSAoKHU4ICopJnJlZylbMl07Ci0JcHJpdi0+bWFjX2FkZHJbMV0gPSAoKHU4ICopJnJlZylbM107Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NDgpOwotCXVkZWxheSg1MCk7Ci0JKigodTMyICopKHByaXYtPm1hY19hZGRyICsgMikpID0gY3B1X3RvX2xlMzIocmVnKTsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5tYWNfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInJlYWQgbWFjICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiSW52YWxpZCBod2FkZHIhIFVzaW5nIHJhbmRvbSBod2FkZHJcbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihwcml2LT5tYWNfYWRkcik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19IC8qIGFnbnhfZ2V0X21hY19hZGRyZXNzICovCi0KLXN0YXRpYyBpbnQgYWdueF9hbGxvY19yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXVuc2lnbmVkIGludCBsZW47Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEFsbG9jYXRlIFJYL1RYTS9UWEQgcmluZ3MgaW5mbyAqLwotCXByaXYtPnJ4LnNpemUgPSBBR05YX1JYX1JJTkdfU0laRTsKLQlwcml2LT50eG0uc2l6ZSA9IEFHTlhfVFhNX1JJTkdfU0laRTsKLQlwcml2LT50eGQuc2l6ZSA9IEFHTlhfVFhEX1JJTkdfU0laRTsKLQotCWxlbiA9IHByaXYtPnJ4LnNpemUgKyBwcml2LT50eG0uc2l6ZSArIHByaXYtPnR4ZC5zaXplOwotCi0vKglwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9LRVJORUwpOyAqLwotCXByaXYtPnJ4LmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSAqIGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFwcml2LT5yeC5pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQlwcml2LT50eG0uaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBwcml2LT5yeC5zaXplOwotCXByaXYtPnR4ZC5pbmZvID0gcHJpdi0+dHhtLmluZm8gKyBwcml2LT50eG0uc2l6ZTsKLQotCS8qIEFsbG9jYXRlIFJYL1RYTS9UWEQgZGVzY3JpcHRvcnMgKi8KLQlwcml2LT5yeC5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogbGVuLAotCQkJCQkgICAgICZwcml2LT5yeC5kbWEpOwotCWlmICghcHJpdi0+cnguZGVzYykgewotCQlrZnJlZShwcml2LT5yeC5pbmZvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdi0+dHhtLmRlc2MgPSBwcml2LT5yeC5kZXNjICsgcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eG0uZG1hID0gcHJpdi0+cnguZG1hICsgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eGQuZGVzYyA9IHByaXYtPnR4bS5kZXNjICsgcHJpdi0+dHhtLnNpemU7Ci0JcHJpdi0+dHhkLmRtYSA9IHByaXYtPnR4bS5kbWEgKyBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykgKiBwcml2LT50eG0uc2l6ZTsKLQotCXJldHVybiAwOwotfSAvKiBhZ254X2FsbG9jX3JpbmdzICovCi0KLXN0YXRpYyB2b2lkIHJpbmdzX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgbGVuID0gcHJpdi0+cnguc2l6ZSArIHByaXYtPnR4bS5zaXplICsgcHJpdi0+dHhkLnNpemU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlBR05YX1RSQUNFOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlrZnJlZShwcml2LT5yeC5pbmZvKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIGxlbiwKLQkJCSAgICBwcml2LT5yeC5kZXNjLCBwcml2LT5yeC5kbWEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkIGFnbnhfcGVyaW9kaWNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZ254X3ByaXYsIHBlcmlvZGljX3dvcmsud29yayk7Ci0vKgl1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwotCXVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0KLQkvKiBmaXhtZTogdXNpbmcgbXV0ZXg/PyAqLwotLyoJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KLQotCS8qIFRPRE8gUmVjYWxpYnJhdGUqLwotLyoJY2FsaWJyYXRlX29zY2lsbGF0b3IocHJpdik7ICovCi0vKglhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsgKi8KLS8qCWFnbnhfc2VuZF9wYWNrZXQocHJpdiwgOTk3KTsgKi8KLQkvKiBGSVhNRSAqLwotLyogCWlmIChkZWJ1ZyA9PSAzKSAqLwotLyogICAgICAgICAgICAgICAgIGRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsgKi8KLS8qIAllbHNlICovCi0JZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOwotLyoJZGVsYXkgPSByb3VuZF9qaWZmaWVzKEhaICogMTUpOyAqLwotCi0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7Ci0KLS8qCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGFnbnhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JLyogdW5zaWduZWQgbG9uZyBkZWxheTsgKi8KLQlpbnQgZXJyID0gMDsKLQlBR05YX1RSQUNFOwotCi0JZXJyID0gYWdueF9hbGxvY19yaW5ncyhwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGFsbG9jIFJYL1RYTS9UWEQgcmluZ3NcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmYWdueF9pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCSAgSVJRRl9TSEFSRUQsICJhZ254X3BjaSIsIGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOwotCQlyaW5nc19mcmVlKHByaXYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLS8qCW1kZWxheSg1MDApOyAqLwotCi0JbWlnaHRfc2xlZXAoKTsKLQlhZ254X2h3X2luaXQocHJpdik7Ci0KLS8qCW1kZWxheSg1MDApOyAqLwotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlwcml2LT5pbml0X3N0YXR1cyA9IEFHTlhfU1RBUlQ7Ci0vKiAgICAgICAgIElOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5wZXJpb2RpY193b3JrLCBhZ254X3BlcmlvZGljX3dvcmtfaGFuZGxlcik7ICovCi0vKiAJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOyAqLwotLyogICAgICAgICBxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsgKi8KLW91dDoKLQlyZXR1cm4gZXJyOwotfSAvKiBhZ254X3N0YXJ0ICovCi0KLXN0YXRpYyB2b2lkIGFnbnhfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1NUT1A7Ci0JLyogbWFrZSBzdXJlIGhhcmR3YXJlIHdpbGwgbm90IGdlbmVyYXRlIGlycSAqLwotCWFnbnhfaHdfcmVzZXQocHJpdik7Ci0JZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBkZXYpOwotLyoJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOyAqLwotLyoJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wZXJpb2RpY193b3JrKTsgKi8KLQl1bmZpbGxfcmluZ3MocHJpdik7Ci0JcmluZ3NfZnJlZShwcml2KTsKLX0KLQotc3RhdGljIGludCBhZ254X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKLQlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogRklYTUUgbmVlZCBwcml2IGxvY2s/ICovCi0JaWYgKGNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkgewotCQlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKLQkJYWdueF9zZXRfY2hhbm5lbChwcml2LCBwcml2LT5jaGFubmVsKTsKLQl9Ci0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFnbnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkJCQkgIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCWlmICghKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlpZiAobWVtY21wKGNvbmYtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7Ci0JCWFnbnhfc2V0X2Jzc2lkKHByaXYsIGNvbmYtPmJzc2lkKTsKLQkJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQloYXNoX3dyaXRlKHByaXYsIGNvbmYtPmJzc2lkLCBCU1NJRF9TVEFJRCk7Ci0JCXN0YV9pbml0KHByaXYsIEJTU0lEX1NUQUlEKTsKLQkJLyogRklYTUUgbmVlZGVkPyAqLwotCQlzdGFfcG93ZXJfaW5pdChwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fTVRTTSwgMHhmZiAmIH4weDEpOwotCX0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci19IC8qIGFnbnhfYnNzX2luZm9fY2hhbmdlZCAqLwotCi0KLXN0YXRpYyB2b2lkIGFnbnhfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQotewotCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOwotCi0JKnRvdGFsX2ZsYWdzID0gbmV3X2ZsYWdzOwotCS8qIFRPRE8gKi8KLX0KLQotc3RhdGljIGludCBhZ254X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkvKiBGSVhNRSAqLwotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXN3aXRjaCAoY29uZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWdueF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIFRPRE8gKi8KLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLX0KLQotc3RhdGljIGludCBhZ254X2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkvKiBUT0RPICEhICovCi0JbWVtY3B5KHN0YXRzLCAmcHJpdi0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU2NCBhZ254X2dldF90c2Z0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9ICgoc3RydWN0IGFnbnhfcHJpdiAqKWRldi0+cHJpdiktPmN0bDsKLQl1MzIgdHNmdGw7Ci0JdTY0IHRzZnQ7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZJWE1FICovCi0JdHNmdGwgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9USU1FU1RBTVBMTyk7Ci0JdHNmdCA9IGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX1RJTUVTVEFNUEhJKTsKLQl0c2Z0IDw8PSAzMjsKLQl0c2Z0IHw9IHRzZnRsOwotCi0JcmV0dXJuIHRzZnQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGSVhNRSBub3cgd2UganVzdCB1c2luZyB0eGQgcXVldWUsIGJ1dCBzaG91bGQgdXNpbmcgdHhtIHF1ZXVlIHRvbyAqLwotCXN0YXRzWzBdLmxlbiA9IChwcml2LT50eGQuaWR4IC0gcHJpdi0+dHhkLmlkeF9zZW50KSAvIDI7Ci0Jc3RhdHNbMF0ubGltaXQgPSBwcml2LT50eGQuc2l6ZSAtIDI7Ci0Jc3RhdHNbMF0uY291bnQgPSBwcml2LT50eGQuaWR4IC8gMjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYWdueF9vcHMgPSB7Ci0JLnR4CQkJPSBhZ254X3R4LAotCS5zdGFydAkJCT0gYWdueF9zdGFydCwKLQkuc3RvcAkJCT0gYWdueF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IGFnbnhfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IGFnbnhfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnCQkJPSBhZ254X2NvbmZpZywKLQkuYnNzX2luZm9fY2hhbmdlZAk9IGFnbnhfYnNzX2luZm9fY2hhbmdlZCwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IGFnbnhfY29uZmlndXJlX2ZpbHRlciwKLQkuZ2V0X3N0YXRzCQk9IGFnbnhfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYWdueF9nZXRfdHhfc3RhdHMsCi0JLmdldF90c2YJCT0gYWdueF9nZXRfdHNmdAotfTsKLQotc3RhdGljIHZvaWQgX19kZXZleGl0IGFnbnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdjsKLQlBR05YX1RSQUNFOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQlwcml2ID0gZGV2LT5wcml2OwotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+Y3RsKTsKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5kYXRhKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFnbnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwotCXN0cnVjdCBhZ254X3ByaXYgKnByaXY7Ci0JaW50IGVycjsKLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIHBjaSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImFnbngtcGNpIik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZXNlcnZlIFBDSSByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpIHx8Ci0JICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfZnJlZV9yZWc7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJmFnbnhfb3BzKTsKLQlpZiAoIWRldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9yZWc7Ci0JfQotCXByaXYgPSBkZXYtPnByaXY7Ci0JbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwotCXByaXYtPnBkZXYgPSBwZGV2OwotCXByaXYtPmh3ID0gZGV2OwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlwcml2LT5pbml0X3N0YXR1cyA9IEFHTlhfVU5JTklUOwotCi0JcHJpdi0+Y3RsID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwotLyoJZGV2X2RiZygmcGRldi0+ZGV2LCAiTUVNMSBtYXBwZWQgYWRkcmVzcyBpcyAweCVwXG4iLCBwcml2LT5jdGwpOyAqLwotCWlmICghcHJpdi0+Y3RsKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQotCXByaXYtPmRhdGEgPSBwY2lfaW9tYXAocGRldiwgMSwgMCk7Ci0JaWYgKCFwcml2LT5kYXRhKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfaW91bm1hcDI7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmcHJpdi0+cmV2aWQpOwotCi0JcHJpdi0+YmFuZC5jaGFubmVscyAgID0gKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqKWFnbnhfY2hhbm5lbHM7Ci0JcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZ254X2NoYW5uZWxzKTsKLQlwcml2LT5iYW5kLmJpdHJhdGVzICAgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlICopYWdueF9yYXRlc184MDIxMWc7Ci0JcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhZ254X3JhdGVzXzgwMjExZyk7Ci0KLQkvKiBJbml0IGllZWU4MDIuMTEgZGV2ICAqLwotCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJnBkZXYtPmRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpOwotCi0JLyogRklYTUUgSXQgb25seSBpbmNsdWRlIEZDUyBpbiBwcm9taW91cyBtb2RlIGJ1dCBub3QgbWFuYWdlIG1vZGUgKi8KLS8qICAgICAgZGV2LT5mbGFncyA9ICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOyAqLwotCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7Ci0JZGV2LT5tYXhfc2lnbmFsID0gMTAwOwotCS8qIEZJWE1FICovCi0JZGV2LT5xdWV1ZXMgPSAxOwotCi0JYWdueF9nZXRfbWFjX2FkZHJlc3MocHJpdik7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHByaXYtPm1hY19hZGRyKTsKLQotLyogCS9cKiBGSVhNRSAqXC8gKi8KLS8qIAlmb3IgKGkgPSAxOyBpIDwgTlVNX0RSSVZFX01PREVTOyBpKyspIHsgKi8KLS8qIAkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShkZXYsICZwcml2LT5tb2Rlc1tpXSk7ICovCi0vKiAJCWlmIChlcnIpIHsgKi8KLS8qIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IHJlZ2lzdGVyIGh3bW9kZVxuIik7ICovCi0vKiAJCQlnb3RvICBlcnJfaW91bm1hcDsgKi8KLS8qIAkJfSAqLwotLyogCX0gKi8KLQotCXByaXYtPmNoYW5uZWwgPSAxOwotCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7Ci0KLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIGhhcmR3YXJlXG4iKTsKLQkJZ290byBlcnJfaW91bm1hcDsKLQl9Ci0KLQlhZ254X2h3X3Jlc2V0KHByaXYpOwotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiBod2FkZHIgJXBNLCBSZXYgMHglMDJ4XG4iLAotCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQlkZXYtPndpcGh5LT5wZXJtX2FkZHIsIHByaXYtPnJldmlkKTsKLQlyZXR1cm4gMDsKLQotIGVycl9pb3VubWFwOgotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmRhdGEpOwotCi0gZXJyX2lvdW5tYXAyOgotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmN0bCk7Ci0KLSBlcnJfZnJlZV9kZXY6Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci0KLSBlcnJfZnJlZV9yZWc6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlyZXR1cm4gZXJyOwotfSAvKiBhZ254X3BjaV9wcm9iZSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBhZ254X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUFHTlhfVFJBQ0U7Ci0KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKLQlhZ254X3N0b3AoZGV2KTsKLQotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFnbnhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JQUdOWF9UUkFDRTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCWFnbnhfc3RhcnQoZGV2KTsKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGFnbnhfcGNpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBhZ254X3BjaV9yZXN1bWUgTlVMTAotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFnbnhfcGNpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYWdueC1wY2kiLAotCS5pZF90YWJsZQk9IGFnbnhfcGNpX2lkX3RibCwKLQkucHJvYmUJCT0gYWdueF9wY2lfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZ254X3BjaV9yZW1vdmUpLAotCS5zdXNwZW5kCT0gYWdueF9wY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFnbnhfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFnbnhfcGNpX2luaXQodm9pZCkKLXsKLQlBR05YX1RSQUNFOwotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhZ254X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWdueF9wY2lfZXhpdCh2b2lkKQotewotCUFHTlhfVFJBQ0U7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ254X3BjaV9kcml2ZXIpOwotfQotCi0KLW1vZHVsZV9pbml0KGFnbnhfcGNpX2luaXQpOwotbW9kdWxlX2V4aXQoYWdueF9wY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFjYTg2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYwICswLDAgQEAKLS8qKgotICogQWlyZ28gTUlNTyB3aXJlbGVzcyBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgTGkgWWFuQm8gPGRyZWFtZmx5MjgxQGdtYWlsLmNvbT4KLQotICogVGhhbmtzIGZvciBKZWZmIFdpbGxpYW1zIDxhbmdlbGJhbmVAZ21haWwuY29tPiBkbyByZXZlcnNlIGVuZ2luZWVyCi0gKiB3b3JrcyBhbmQgcHVibGlzaGVkIHRoZSBTUEVDUyBhdCBodHRwOi8vYWlyZ28ud2R3Y29uc3VsdGluZy5uZXQvbXltb2luCi0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAidGFibGUuaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJ4bWl0LmgiCi0KLXU4IHJlYWRfZnJvbV9lZXByb20oc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTE2IGFkZHJlc3MpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jc3RydWN0IGFnbnhfZWVwcm9tIGNtZDsKLQl1MzIgcmVnOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuY21kID0gRUVQUk9NX0NNRF9SRUFEIDw8IEFHTlhfRUVQUk9NX0NPTU1BTkRfU0hJRlQ7Ci0JY21kLmFkZHJlc3MgPSBhZGRyZXNzOwotCS8qIFZlcmlmeSB0aGF0IHRoZSBTdGF0dXMgYml0IGlzIGNsZWFyICovCi0JLyogUmVhZCBDb21tYW5kIGFuZCBBZGRyZXNzIGFyZSB3cml0dGVuIHRvIHRoZSBTZXJpYWwgSW50ZXJmYWNlICovCi0JaW93cml0ZTMyKCooX19sZTMyICopJmNtZCwgY3RsICsgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkvKiBXYWl0IGZvciB0aGUgU3RhdHVzIGJpdCB0byBjbGVhciBhZ2FpbiAqLwotCWVlcHJvbV9kZWxheSgpOwotCS8qIFJlYWQgZnJvbSBEYXRhICovCi0JcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQotCWNtZCA9ICooc3RydWN0IGFnbnhfZWVwcm9tICopJnJlZzsKLQotCXJldHVybiBjbWQuZGF0YTsKLX0KLQotc3RhdGljIGludCBjYXJkX2Z1bGxfcmVzZXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMLCAweDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWlubGluZSB2b2lkIGVuYWJsZV9wb3dlcl9zYXZpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gfjB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotfQotCi1pbmxpbmUgdm9pZCBkaXNhYmxlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLX0KLQotCi12b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0JLyogRklYTUUgRGlzYWJsZSB0aGUgcmVjZWl2ZXIgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4MCk7Ci0JLyogU2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JLyogUmVzZXQgZ2FpbiBjb250cm9sIHJlc2V0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLX0KLQotCi0vKiBGaXhtZSB0aGlzIHNob3VsZSBiZSBkaXNhYmxlIFJYLCBhYm92ZSBpcyBlbmFibGUgUlggKi8KLXZvaWQgZW5hYmxlX3JlY2VpdmVyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIFNldCBhZGFwdGl2ZSBnYWluIGNvbnRyb2wgZGlzY292ZXJ5IG1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0JLyogU2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JLyogQ2xlYXIgZ2FpbiBjb250cm9sIHJlc2V0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjX2FkZHJlc3Nfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTggKm1hY19hZGRyID0gcHJpdi0+bWFjX2FkZHI7Ci0JdTMyIHJlZzsKLQotCS8qIEZJWE1FICovCi0JcmVnID0gKG1hY19hZGRyWzBdIDw8IDI0KSB8IChtYWNfYWRkclsxXSA8PCAxNikgfCBtYWNfYWRkclsyXSA8PCA4IHwgbWFjX2FkZHJbM107Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fTUFDSEkpOwotCXJlZyA9IChtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0xPKTsKLX0KLQotc3RhdGljIHZvaWQgcmVjZWl2ZXJfYnNzaWRfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLQkvKiBGSVhNRSAqLwotCXJlZyA9IGJzc2lkWzBdIDw8IDI0IHwgKGJzc2lkWzFdIDw8IDE2KSB8IChic3NpZFsyXSA8PCA4KSB8IGJzc2lkWzNdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lESEkpOwotCXJlZyA9IChic3NpZFs0XSA8PCA4KSB8IGJzc2lkWzVdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lETE8pOwotCi0JLyogRW5hYmxlIHRoZSByZWNlaXZlciAqLwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCS8qIENsZWFyIHRoZSBUU0YgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UU0ZMTywgMHgwKTsgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UU0ZISSwgMHgwKTsgKi8KLQkvKiBDbGVhciB0aGUgVEJUVCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RCVFRMTywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UQlRUSEksIDB4MCk7Ci0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLX0gLyogcmVjZWl2ZXJfYnNzaWRfc2V0ICovCi0KLXN0YXRpYyB2b2lkIGJhbmRfbWFuYWdlbWVudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1MzIgcmVnOwotCWludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYV0FERFIsIEFHTlhfUERVX1RYX1dRKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9BRERSV0lOLCAweDApOwotCW1lbXNldF9pbyhkYXRhICsgQUdOWF9QRFVQT09MLCAweDAsIEFHTlhfUERVUE9PTF9TSVpFKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCAweDIwMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NJUERVV0NOVCwgMHg0MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9TUFBEVVdDTlQsIDB4Mik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9SRlBQRFVXQ05ULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkhQUERVV0NOVCwgMHgyMik7Ci0KLQkvKiBGSVhNRSBJbml0aWFsaXplIHRoZSBGcmVlIFBvb2wgTGlua2VkIExpc3QgKi8KLQkvKiAgICAxLiBXcml0ZSB0aGUgQWRkcmVzcyBvZiB0aGUgTmV4dCBOb2RlICgoMHg0MTgwMCArIG5vZGUqc2l6ZSkvc2l6ZSkKLQkgICAgICB0byB0aGUgZmlyc3Qgd29yZCBvZiBlYWNoIG5vZGUuICAqLwotCWZvciAoaSA9IDA7IGkgPCBQRFVfRlJFRV9DTlQ7IGkrKykgewotCQlpb3dyaXRlMzIoKEFHTlhfUERVX0ZSRUUgKyAoaSsxKSpQRFVfU0laRSkvUERVX1NJWkUsCi0JCQkgIGRhdGEgKyBBR05YX1BEVV9GUkVFICsgKFBEVV9TSVpFICogaSkpOwotCQkvKiBUaGUgbGFzdCBub2RlIHNob3VsZCBiZSBzZXQgdG8gMHgwICovCi0JCWlmICgoaSArIDEpID09IFBEVV9GUkVFX0NOVCkKLQkJCW1lbXNldF9pbyhkYXRhICsgQUdOWF9QRFVfRlJFRSArIChQRFVfU0laRSAqIGkpLAotCQkJCSAgMHgwLCBQRFVfU0laRSk7Ci0JfQotCi0JLyogSGVhZCBpcyBGaXJzdCBQb29sIGFkZHJlc3MgKDB4NDE4MDApIC8gc2l6ZSAoMHg4MCkgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0ZQTEhQLCBBR05YX1BEVV9GUkVFL1BEVV9TSVpFKTsKLQkvKiBUYWlsIGlzIExhc3QgUG9vbCBBZGRyZXNzICgweDQ3ZjgwKSAvIHNpemUgKDB4ODApICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9GUExUUCwgMHg0N2Y4MC9QRFVfU0laRSk7Ci0JLyogQ291bnQgaXMgTnVtYmVyIG9mIE5vZGVzIGluIHRoZSBQb29sICgweGQwKSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fRlBDTlQsIFBEVV9GUkVFX0NOVCk7Ci0KLQkvKiBTdGFydCBhbGwgd29ya3F1ZXVlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DSVdRQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVUxXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVUhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVVRYV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVSWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BSWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BUWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkZQV0NUTCwgMHg4MDAwMCk7Ci0KLQkvKiBFbmFibGUgdGhlIEJhbmQgTWFuYWdlbWVudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9CTV9CTUNUTCk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCByZWcpOwotfSAvKiBiYW5kX21hbmFnbWVudF9pbml0ICovCi0KLQotc3RhdGljIHZvaWQgc3lzdGVtX2l0Zl9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fVEVTVFBIWSwgMHgxMWUxNDNhKTsKLQotCWlmIChwcml2LT5yZXZpZCA9PSAwKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSk7Ci0JCXJlZyB8PSAweDExOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCByZWcpOwotCX0KLQkvKiA/Pz8gV2hhdCBpcyB0aGF0IG1lYW5zPyBpdCBzaG91bGQgZGlmZmVyZW5jZSBmb3IgZGlmZmVyaWNlIHR5cGUKLQkgb2YgY2FyZHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4ZmZmODEwMDYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT0lOLCAweDFmMDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT0lOKTsKLX0KLQotc3RhdGljIHZvaWQgZW5jcnlwdGlvbl9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTEsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9XRVBLRVkyLCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX0NDTVJFQ1RMLCAweDgpOwotfQotCi1zdGF0aWMgdm9pZCB0eF9tYW5hZ2VtZW50X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZpbGwgb3V0IHRoZSBDb21wdXRhdGlvbmFsRW5naW5lTG9va3VwVGFibGUKLQkgKiBzdGFydGluZyBhdCBtZW1vcnkgIzIgb2Zmc2V0IDB4ODAwCi0JICovCi0JdHhfZW5naW5lX2xvb2t1cF90YmxfaW5pdChwcml2KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4MTAwMCwgMCwgMHhmZTApOwotCS8qIEVuYWJsZSBUcmFuc21pc3Npb24gTWFuYWdlbWVudCBGdW5jdGlvbnMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9FVE1GLCAweDNmZik7Ci0JLyogV3JpdGUgMHgzZiB0byBUcmFuc21pc3Npb24gVGVtcGxhdGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UWFRFTVAsIDB4M2YpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDIpCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NJRlNQSUZTLCAweDFlMTQwYTBiKTsKLQllbHNlCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NJRlNQSUZTLCAweDFlMTkwYTBiKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweGZmMDA7Ci0JcmVnIHw9IDB4YjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUywgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTKTsKLQlyZWcgJj0gMHhmZmZmMDBmZjsKLQlyZWcgfD0gMHhhMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JLyogRW5hYmxlIFRJRlMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIDB4NDAwMDApOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4NTEwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZKTsKLQlyZWcgJj0gMHhmZjAwZmZmZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4MDBmZmZmZmY7Ci0JcmVnIHw9IDB4MWMwMDAwMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVkpOwotCXJlZyAmPSAweDAwZmZmZmZmOwotCXJlZyB8PSAweDAxMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSwgcmVnKTsKLQotCS8qICMgU2V0IERJRiAwLTEsMi0zLDQtNSw2LTcgdG8gZGVmYXVsdHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUYwMSwgMHgzMjFkMzIxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGMjMsIDB4MzIxZDMyMWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0RJRjQ1LCAweDMyMWQzMjFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUY2NywgMHgzMjFkMzIxZCk7Ci0KLQkvKiBNYXggQWNrIHRpbWVvdXQgbGltaXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhBQ0tUSU0sIDB4MWUxOSk7Ci0JLyogTWF4IFJYIERhdGEgVGltZW91dCBjb3VudCwgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWFJYVElNRSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4ZmY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTUFYUlhUSU1FLCByZWcpOwotCi0JLyogQ0YgcG9sbCBSWCBUaW1lb3V0IGNvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjsKLQlyZWcgfD0gMHhmZjAwMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0KLQkvKiBNYXggVGltZW91dCBFeGNlZWRlZCBjb3VudCwgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWFRJTU9VVCk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4MTkwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWFRJTU9VVCwgcmVnKTsKLQotCS8qIENGIGFjayB0aW1lb3V0IGxpbWl0IGZvciAxMWIgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NGQUNLVDExQik7Ci0JcmVnICY9IDB4ZmYwMDsKLQlyZWcgfD0gMHgxZTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DRkFDS1QxMUIsIHJlZyk7Ci0KLQkvKiBNYXggQ0YgUG9sbCBUaW1lb3V0IENvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4MTk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0JLyogQ0YgUG9sbCBSWCBUaW1lb3V0IENvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4MWU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0KLQkvKiAjIHdyaXRlIGRlZmF1bHQgdG8gKi8KLQkvKiAgICAxLiBTY2hlZHVsZSBFbXB0eSBDb3VudCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NDSEVNUENOVCwgMHg1KTsKLQkvKiAgICAyLiBDRlAgUGVyaW9kIENvdW50ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQRVJDTlQsIDB4MSk7Ci0JLyogICAgMy4gQ0ZQIE1EViAgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DRlBNRFYsIDB4MTAwMDApOwotCi0JLyogUHJvYmUgRGVsYXkgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4NDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSwgcmVnKTsKLQotCS8qIE1heCBDQ0EgY291bnQgU2xvdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fTUFYQ0NBQ05UU0xPVCk7Ci0JcmVnICY9IDB4ZmZmZjAwZmY7Ci0JcmVnIHw9IDB4OTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWENDQUNOVFNMT1QsIHJlZyk7Ci0KLQkvKiBTbG90IGxpbWl0LzEgbXNlYyBMaW1pdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fU0xPVExJTUlUKTsKLQlyZWcgJj0gMHhmZjAwZmZmZjsKLQlyZWcgfD0gMHgxNDAwNzc7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xPVExJTUlULCByZWcpOwotCi0JLyogIyBTZXQgQ1cgIygwLTcpIHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzAsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzEsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzIsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzMsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzQsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzUsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzYsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzcsIDB4ZmYwMDA3KTsKLQotCS8qICMgU2V0IFNob3J0L0xvbmcgbGltaXQgIygwLTcpIHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTAsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTEsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTIsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTMsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTQsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTUsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTYsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTcsICAweGEwMDBhKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgfD0gMHgxNDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgcmVnKTsKLQkvKiBXYWl0IGZvciBiaXQgMCBpbiBDb250cm9sIFJlZyB0byBjbGVhciAgKi8KLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQkvKiBPciAweDE4MDAwIHRvIENvbnRyb2wgcmVnICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyB8PSAweDE4MDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgcmVnKTsKLQkvKiBXYWl0IGZvciBiaXQgMCBpbiBDb250cm9sIFJlZyB0byBjbGVhciAqLwotCXVkZWxheSg4MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCi0JLyogU2V0IExpc3RlbiBJbnRlcnZhbCBDb3VudCB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTElTSU5URVJDTlQsIDB4MSk7Ci0JLyogU2V0IERUSU0gcGVyaW9kIGNvdW50IHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9EVElNUEVSSUNOVCwgMHgyMDAwKTsKLX0gLyogdHhfbWFuYWdlbWVudF9pbml0ICovCi0KLXN0YXRpYyB2b2lkIHJ4X21hbmFnZW1lbnRfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBSb3V0aW5nIFRhYmxlICovCi0Jcm91dGluZ190YWJsZV9pbml0KHByaXYpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDMpIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc0LCAweDFmMTcxNzEwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc4LCAweDEwMTAwZDBkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDdjLCAweDExMTExMDEwKTsKLQl9IGVsc2UgewotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9ERUxBWTExLCAweDApOwotCX0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDgxOTVlMDApOwotfQotCi0KLXN0YXRpYyB2b2lkIGFnbnhfdGltZXJfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLS8qIAkvXCogV3JpdGUgMHgyNDlmMDAgKHRpY2sgZHVyYXRpb24/KSB0byBUaW1lciAxICpcLyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTUVSMSwgMHgyNDlmMDApOyAqLwotLyogCS9cKiBXcml0ZSAweGUyIHRvIFRpbWVyIDEgQ29udHJvbCAqXC8gKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU0xQ1RMLCAweGUyKTsgKi8KLQotCS8qIFdyaXRlIDB4MjQ5ZjAwICh0aWNrIGR1cmF0aW9uPykgdG8gVGltZXIgMSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTUVSMSwgMHgwKTsKLQkvKiBXcml0ZSAweGUyIHRvIFRpbWVyIDEgQ29udHJvbCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTTFDVEwsIDB4MCk7Ci0KLQlpb3dyaXRlMzIoMHhGRkZGRkZGRiwgcHJpdi0+Y3RsICsgQUdOWF9UWE1fQkVBQ09OX0NUTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvd2VyX21hbmFnZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9NQUNNU1csIDB4MWYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUkZDVEwsIDB4MWYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gMHhmMDBmOwotCXJlZyB8PSAweGEwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0KLQlpZiAocHJpdi0+cmV2aWQgPj0gMykgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JCXJlZyB8PSAweDE4OwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIHJlZyk7Ci0JfQotfSAvKiBwb3dlcl9tYW5hZ2VfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIGdhaW5fY3RsY250X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9UUkFDTlQ1LCAweDExOSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNiwgMHgxMTgpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDcsIDB4MTE3KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gfjB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgwKTsKLQotCS8qIEZJWE1FIFdyaXRlIHRoZSBpbml0aWFsIFN0YXRpb24gRGVzY3JpcHRvciBmb3IgdGhlIGNhcmQgKi8KLQlzdGFfaW5pdChwcml2LCBMT0NBTF9TVEFJRCk7Ci0Jc3RhX2luaXQocHJpdiwgQlNTSURfU1RBSUQpOwotCi0JLyogRW5hYmxlIHN0YWlvbiAwIGFuZCAxIGNhbiBkbyBUWCAqLwotCS8qIEl0IHNlZW1lZCBpZiB3ZSBzZXQgb3RoZXIgYml0IHRvIDEgdGhlIGJpdCAwIHdpbGwKLQkgICBiZSBhdXRvIGNoYW5nZSB0byAwICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFRPUEVFUiwgMHgyIHwgMHgxKTsKLS8qCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MSk7ICovCi19IC8qIGdhaW5fY3RsY250X2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBwaHlfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JLyogTG9hZCBJbml0aWFsR2FpblRhYmxlICovCi0JZ2Fpbl90YWJsZV9pbml0KHByaXYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgyMDAwMDAwKTsKLQotCS8qIENsZWFyIHRoZSBmb2xsb3dpbmcgb2Zmc2V0cyBpbiBNZW1vcnkgUmFuZ2UgIzI6ICovCi0JbWVtc2V0X2lvKGRhdGEgKyAweDUwNDAsIDAsIDB4YSAqIDQpOwotCW1lbXNldF9pbyhkYXRhICsgMHg1MDgwLCAwLCAweGEgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NTBjMCwgMCwgMHhhICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDU0MDAsIDAsIDB4ODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NjAwMCwgMCwgMHgyODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NzAwMCwgMCwgMHgyODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4ODAwMCwgMCwgMHgyODAgKiA0KTsKLQotCS8qIEluaXRpYWxpemUgdGhlIEZvbGxvd2luZyBSZWdpc3RlcnMgQWNjb3JkaW5nIHRvIFBDSSBSZXZpc2lvbiBJRCAqLwotCWlmIChwcml2LT5yZXZpZCA9PSAwKSB7Ci0JCS8qIGZpeG1lIHRoZSBwYXJ0IGhhc24ndCBiZWVuIHVwZGF0ZSBidXQgYmVsb3cgaGFzIGJlZW4gdXBkYXRlCi0JCSAgIGJhc2VkIG9uIFdHTTUxMSAqLwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgxZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMiwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBME9WRSwgMHgxMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTFPVkUsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAweDY0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEFMLCAweDRiKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDB4NGIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9EVU5TQVQsIDB4MTQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9EU0FULCAweDI0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREZJUkNBTCwgMHg4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUEsIDB4MWEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ER0NUTDExQiwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTklOSVQsIDB4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RITk9TSUcsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPQVJTVEVQLCAweDcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQSwgMHgyOCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJRlNUMTFCLCAweDI4KTsKLQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9DV0RFVEVDKTsKLQkJcmVnIHw9IDB4MTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ1dERVRFQywgcmVnKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgzOCwgMHgxZSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTElTVEFOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05NRUFTQU5ULCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQ0FQVEFOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUEsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFCLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFBLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFCLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USExFVkRSTywgMHgxMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQSwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFCLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSVElNRSwgMHgxOTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDB4NzgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDB4MWMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSRFJPUCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDRCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUE9XRElGRiwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEVTVEJVUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCAweDFmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhKVU1QLCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dFUiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dDTElQLCAweDMwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUlgxMUJQT1dNSU4sIDB4MTkpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE0YywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNTAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwMCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5NDBjLCAweDZmZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQyOCwgMHhhMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzA0LCAweDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzBjLCAweDdmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzM0LCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGMwMDAsIDB4MzhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxOCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNjAwMCwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzU0LCAweGEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjMWMsIDB4NSk7Ci0JfSBlbHNlIGlmIChwcml2LT5yZXZpZCA+IDApIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MjEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9BSUNDSEEwT1ZFLCAweDExKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBMU9WRSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFVOU0FULCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFNBVCwgMHgyNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RGSVJDQUwsIDB4OCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFBLCAweDFhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5JTklULCAweGQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USE5PU0lHLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT0FSU1RFUCwgMHg3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUEsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQiwgMHgyOCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NXREVURUMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMzgsIDB4MWUpOwotLyoJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsqLwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUEsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUDExQiwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQUlgxMUEsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFCLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhMRVZEUk8sIDB4MTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhSWFRJTUUxMUEsIDB4MWFkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFCLCAweGExMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPUlJUSU1FLCAweDE5MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPUlJEUk9QLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENELCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENTLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhQT1dESUZGLCAweDQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9URVNUQlVTLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEpVTVAsIDB4MWUpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFBPV0VSLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFBPV0NMSVAsIDB4MmEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCAweDNjKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhSWDExQlBPV01JTiwgMHgxOSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMTRjLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE1MCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9XQVRDSERPRywgMHgzNyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwMCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5NDBjLCAweDZmZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQyOCwgMHhhMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzA0LCAweDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzBjLCAweDdmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzM0LCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGMwMDAsIDB4MzhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxNCwgMHgxMDAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxOCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNjAwMCwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzU0LCAweGEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjMWMsIDB4NTApOwotCX0gZWxzZSBpZiAocHJpdi0+cmV2aWQgPiAxKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHhlYzE4KTsKLQkJcmVnIHw9IDB4ODsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzE4LCByZWcpOwotCX0KLQotCS8qIFdyaXRlIHRoZSBUWCBGaXIgQ29lZmZpY2llbnQgVGFibGUgKi8KLQl0eF9maXJfdGFibGVfaW5pdChwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUExMQ1RMKTsKLQlyZWcgfD0gMHgxOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCByZWcpOwotCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDFhMDMwKTsgKi8KLS8qIAlyZWcgJj0gfjB4NDsgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCAweDFhMDMwLCByZWcpOyAqLwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNCwgMHgxMTMpOwotfSAvKiBwaHlfaW5pdCAqLwotCi1zdGF0aWMgdm9pZCBjaGlwX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQliYW5kX21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXJmX2NoaXBzX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIFBIWSAqLwotCXBoeV9pbml0KHByaXYpOwotCi0JZW5jcnlwdGlvbl9pbml0KHByaXYpOwotCi0JdHhfbWFuYWdlbWVudF9pbml0KHByaXYpOwotCi0JcnhfbWFuYWdlbWVudF9pbml0KHByaXYpOwotCi0JcG93ZXJfbWFuYWdlX2luaXQocHJpdik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBUaW1lcnMgKi8KLQlhZ254X3RpbWVyX2luaXQocHJpdik7Ci0KLQkvKiBXcml0ZSAweGMzOTBiZjkgdG8gSW50ZXJydXB0IE1hc2sgKERpc2FibGUgVFgpICovCi0JcmVnID0gMHhjMzkwYmY5ICYgfklSUV9UWF9CRUFDT047Ci0JcmVnICY9IH5JUlFfVFhfRElTQUJMRTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0lOVF9NQVNLLCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCXJlZyB8PSAweDgwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIHJlZyk7Ci0KLQkvKiBzZXQgaXQgd2hlbiBuZWVkIGdldCBtdWx0aWNhc3QgZW5hYmxlPyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fTVRTTSwgMHhmZik7Ci19IC8qIGNoaXBfaW5pdCAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgxMCB8IDB4Mik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgxMCB8IDB4Mik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2xlYXJuX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDgpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9zY2FuX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCS8qIGFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MjEwKTsqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTApOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9tYW5hZ2VkX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9hZGhvY19tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgwKTsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkIHVua25vd19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDAsIDB4M2UpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0LCAweGIyKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4OCwgMHgxNDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHhjLCAweDFDMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDEwLCAweDFGRik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDE0LCAweDFERCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDE4LCAweDE1Rik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDFjLCAweEExKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjAsIDB4M0U3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjQsIDB4MzZCKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjgsIDB4MzQ4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MmMsIDB4MzdEKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzAsIDB4M0RFKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzQsIDB4MzYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgzOCwgMHg2NCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDNjLCAweDU3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDAsIDB4MjMpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0NCwgMHgzRUQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0OCwgMHgzQzkpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0YywgMHgzQ0EpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1MCwgMHgzRTcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1NCwgMHg4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTgsIDB4MUYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1YywgMHgxYSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgY2FyZF9pbnRlcmZhY2VfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXU4IGJzc2lkW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIENsZWFyIFJYIENvbnRyb2wgYW5kIEVuYWJsZSBSWCBxdWV1ZXMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgMHg4KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogRG8gYSBmdWxsIHJlc2V0IG9mIHRoZSBjYXJkICovCi0JY2FyZF9mdWxsX3Jlc2V0KHByaXYpOwotCW1pZ2h0X3NsZWVwKCk7Ci0KLQkvKiBDaGVjayBhbmQgc2V0IENhcmQgRW5kaWFubmVzcyAqLwotCXJlZyA9IGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX0VORElBTik7Ci0JLyogVE9ETyBJZiBub3QgMHhCM0IyQjFCMCBzZXQgdG8gMHhCM0IyQjFCMCAqLwotCXByaW50ayhLRVJOX0lORk8gUEZYICJDSVJfRU5ESUFOIGlzICV4XG4iLCByZWcpOwotCi0KLQkvKiBDb25maWcgdGhlIGVlcHJvbSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURiwgMHg3MDAwMDg2KTsKLQl1ZGVsYXkoMTApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDgwMDAwMDMzKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCi0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTik7Ci0JdWRlbGF5KDEwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQkvKiBEdW1wIHRoZSBlZXByb20gKi8KLQlkbyB7Ci0JCWNoYXIgZWVwcm9tWzB4MTAwMDAwLzB4MTAwXTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwMDA7IGkgKz0gMHgxMDApIHsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURiwgMHgzMDAwMDAwICsgaSk7Ci0JCQl1ZGVsYXkoMTMpOwotCQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYpOwotCQkJdWRlbGF5KDcwKTsKLQkJCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkJCWVlcHJvbVtpLzB4MTAwXSA9IHJlZyAmIDB4RkY7Ci0JCQl1ZGVsYXkoMTApOwotCQl9Ci0JCXByaW50X2hleF9kdW1wX2J5dGVzKFBGWCAiRUVQUk9NOiAiLCBEVU1QX1BSRUZJWF9OT05FLCBlZXByb20sCi0JCQkJICAgICBBUlJBWV9TSVpFKGVlcHJvbSkpOwotCX0gd2hpbGUgKDApOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gaW50ZXJmYWNlICovCi0Jc3lzdGVtX2l0Zl9pbml0KHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBDaGlwIEluaXRpYWxpemF0aW9uIChQb2xhcmlzKSAqLwotCWNoaXBfaW5pdChwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogQ2FsaWJyYXRlIHRoZSBhbnRlbm5hZSAqLwotCWFudGVubmFfY2FsaWJyYXRlKHByaXYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyAmPSB+MHg0MDsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCAweDEpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0JNX0JNQ1RMKTsKLQlyZWcgfD0gMHg4MDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQk1DVEwsIHJlZyk7Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSk7Ci0JcmVnIHw9IDB4MjAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIHJlZyk7Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBJbml0aWFsaXplIEdhaW4gQ29udHJvbCBDb3VudHMgKi8KLQlnYWluX2N0bGNudF9pbml0KHByaXYpOwotCi0JLyogV3JpdGUgSW5pdGlhbCBTdGF0aW9uIFBvd2VyIFRlbXBsYXRlIGZvciB0aGlzIHN0YXRpb24oIzApICovCi0Jc3RhX3Bvd2VyX2luaXQocHJpdiwgTE9DQUxfU1RBSUQpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBJbml0aWFsaXplIHRoZSByeCx0ZCx0bSByaW5ncywgZm9yIGVhY2ggbm9kZSBpbiB0aGUgcmluZyAqLwotCWZpbGxfcmluZ3MocHJpdik7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIDB4ODAwMDAwMzMpOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHhjKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIDB4MCk7Ci0KLQkvKiBGSVhNRSBJbml0aWFsaXplIHRoZSB0cmFuc21pdCBjb250cm9sIHJlZ2lzdGVyICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCAweDE5NGMxKTsKLQotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogRklYTUUgU2V0IHRoZSBSZWNlaXZlIENvbnRyb2wgTWFjIEFkZHJlc3MgdG8gY2FyZCBhZGRyZXNzICovCi0JbWFjX2FkZHJlc3Nfc2V0KHByaXYpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogU2V0IHRoZSByZWNpZXZlIHJlcXVlc3QgcmF0ZSAqLwotCS8qIEZJWE1FIEVuYWJsZSB0aGUgcmVxdWVzdCAqLwotCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KLQkvKiBTZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDg4MTk1ZTAwKTsgKi8KLS8qCWVuYWJsZV9yZWNlaXZlcihwcml2KTsgKi8KLQotCS8qIFNldCB0aGUgUmVjZWl2ZXIgQlNTSUQgKi8KLQlyZWNlaXZlcl9ic3NpZF9zZXQocHJpdiwgYnNzaWQpOwotCi0JLyogRklYTUUgU2V0IHRvIG1hbmFnZWQgbW9kZSAqLwotCXNldF9tYW5hZ2VkX21vZGUocHJpdik7Ci0vKglzZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2KTsgKi8KLS8qCXNldF9zY2FuX21vZGUocHJpdik7ICovCi0vKglzZXRfbGVhcm5fbW9kZShwcml2KTsgKi8KLS8qCXNldF9wcm9taXNfYW5kX21hbmFnZWQocHJpdik7ICovCi0vKglzZXRfYWRob2NfbW9kZShwcml2KTsgKi8KLQotCS8qIFNldCB0aGUgcmVjaWV2ZSByZXF1ZXN0IHJhdGUgKi8KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHgwODAwMDAwMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFKTsKLQkvKiBTZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCi0JcmVnIHw9IDB4MDAxOTVlMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgcmVnKTsKLQotCS8qIENvbmZpZ3VyZSB0aGUgUlggYW5kIFRYIGludGVycnVwdCAqLwotCXJlZyA9IEVOQUJMRV9SWF9JTlRFUlJVUFQgfCBSWF9DQUNIRV9MSU5FIHwgRlJBR19MRU5fMjA0OCB8IEZSQUdfQkU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDRkcsIHJlZyk7Ci0JLyogRklYTUUgKi8KLQlyZWcgPSBFTkFCTEVfVFhfSU5URVJSVVBUIHwgVFhfQ0FDSEVfTElORSB8IEZSQUdfTEVOXzIwNDggfCBGUkFHX0JFOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYQ0ZHLCByZWcpOwotCi0JLyogRW5hYmxlIFJYIFRYIEludGVycnVwdHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgMHg4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhNQ1RMLCAweDgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWERDVEwsIDB4ODApOwotCi0JLyogRklYTUUgU2V0IHRoZSBtYXN0ZXIgY29udHJvbCBpbnRlcnJ1cHQgaW4gYmxvY2sgY29udHJvbCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCwgMHg4MDApOwotCi0JLyogRW5hYmxlIFJYIGFuZCBUWCBxdWV1ZXMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1JYQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ1RMLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfVFhNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1RYRENUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWERDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQsIDB4NSk7Ci0JLyogRklYTUUgKi8KLQkvKiAgdW5rbm93X3JlZ2lzdGVyX3dyaXRlKHByaXYpOyAqLwotCS8qIFVwZGF0ZSBsb2NhbCBjYXJkIGhhc2ggZW50cnkgKi8KLQloYXNoX3dyaXRlKHByaXYsIHByaXYtPm1hY19hZGRyLCBMT0NBTF9TVEFJRCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JLyogRklYTUUgKi8KLQlhZ254X3NldF9jaGFubmVsKHByaXYsIDEpOwotCW1pZ2h0X3NsZWVwKCk7Ci19IC8qIGFnbnhfY2FyZF9pbnRlcmZhY2VfaW5pdCAqLwotCi0KLXZvaWQgYWdueF9od19pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JQUdOWF9UUkFDRTsKLQltaWdodF9zbGVlcCgpOwotCWNhcmRfaW50ZXJmYWNlX2luaXQocHJpdik7Ci19Ci0KLWludCBhZ254X2h3X3Jlc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIGNhcmRfZnVsbF9yZXNldChwcml2KTsKLX0KLQotaW50IGFnbnhfc2V0X3NzaWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQlBR05YX1RSQUNFOwotCXJldHVybiAwOwotfQotCi12b2lkIGFnbnhfc2V0X2Jzc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCkKLXsKLQlyZWNlaXZlcl9ic3NpZF9zZXQocHJpdiwgYnNzaWQpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1NWYwNTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDkgKzAsMCBAQAotI2lmbmRlZiBBR05YX1BIWV9IXwotI2RlZmluZSBBR05YX1BIWV9IXwotCi0jaW5jbHVkZSAiYWdueC5oIgotCi0vKiBUcmFuc21pc3Npb24gTWFuYWdtZW50IFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX1RYTV9CQVNFCQkweDAwMDAKLSNkZWZpbmUgQUdOWF9UWE1fQ1RMCQkweDAwMDAJLyogY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1RYTV9FVE1GCQkweDAwMDQgLyogZW5hYmxlIHRyYW5zbWlzc2lvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBBR05YX1RYTV9UWFRFTVAJCTB4MDAwOCAvKiB0cmFuc21pc3Npb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUkVUUllTVEFJRAkweDAwMGMgLyogUmV0cnkgU3RhdGlvbiBJRCAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBMTwkJMHgwMDEwCS8qIFRpbWVzdGFtcCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBISQkJMHgwMDE0CS8qIFRpbWVzdGFtcCBIaSAqLwotI2RlZmluZSBBR05YX1RYTV9UWERFTEFZCTB4MDAxOCAgLyogdHggZGVsYXkgKi8KLSNkZWZpbmUgQUdOWF9UWE1fVEJUVExPCQkweDAwMjAJLyogdGJ0dCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9UQlRUSEkJCTB4MDAyNAkvKiB0YnR0IEhpICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUlOVEVSCTB4MDAyOCAvKiBCZWFjb24gSW50ZXJ2YWwgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTkFWCQkweDAwMzAgLyogTkFWICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE1EVgkJMHgwMDM0IC8qIENGUCBNRFYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZQRVJDTlQJMHgwMDM4IC8qIENGUCBwZXJpb2QgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUFJPQkRFTEFZCTB4MDAzYyAvKiBwcm9iZSBkZWxheSAqLwotI2RlZmluZSBBR05YX1RYTV9MSVNJTlRFUkNOVAkweDAwNDAgLyogbGlzdGVuIGludGVydmFsIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX0RUSU1QRVJJQ05UCTB4MDA0YyAvKiBEVElNIHBlcmlvZCBjb3VudCAqLwotCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTl9DVEwJMHgwMDVjIC8qIGJlYWNvbiBjb250cm9sICovCi0KLSNkZWZpbmUgQUdOWF9UWE1fU0NIRU1QQ05UCTB4MDA3YyAvKiBzY2hlZHVsZSBlbXB0eSBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhUSU1PVVQJMHgwMDg0IC8qIG1heCB0aW1lb3V0IGV4Y2VlZCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhDRlBUSU0JMHgwMDg4IC8qIG1heCBDRiBwb2xsIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTUFYUlhUSU1FCTB4MDA4YyAvKiBtYXggUlggdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhBQ0tUSU0JMHgwMDkwCS8qIG1heCBBQ0sgdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9ESUYwMQkJMHgwMGEwIC8qIERJRiAwLTEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fRElGMjMJCTB4MDBhNCAvKiBESUYgMi0zICovCi0jZGVmaW5lIEFHTlhfVFhNX0RJRjQ1CQkweDAwYTggLyogRElGIDQtNSAqLwotI2RlZmluZSBBR05YX1RYTV9ESUY2NwkJMHgwMGFjIC8qIERJRiA2LTcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0lGU1BJRlMJMHgwMGIwIC8qIFNJRlMvUElGUyAqLwotI2RlZmluZSBBR05YX1RYTV9USUZTRUlGUwkweDAwYjQgLyogVElGUy9FSUZTICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWENDQUNOVFNMT1QJMHgwMGI4IC8qIG1heCBDQ0EgY291bnQgc2xvdCAqLwotI2RlZmluZSBBR05YX1RYTV9TTE9UTElNSVQJMHgwMGJjIC8qIHNsb3QgbGltaXQvMSBtc2VjIGxpbWl0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE9MTFJYVElNCTB4MDBmMCAvKiBDRiBwb2xsIFJYIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZBQ0tUMTFCCTB4MDBmNCAvKiBDRiBhY2sgdGltZW91dCBsaW1pdCBmb3IgMTFiICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMAkJMHgwMTAwIC8qIENXIDAgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0wCTB4MDEwOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAwICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMQkJMHgwMTIwIC8qIENXIDEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0xCTB4MDEyOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAxICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMgkJMHgwMTQwIC8qIENXIDIgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0yCTB4MDE0OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAyICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMwkJMHgwMTYwIC8qIENXIDMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0zCTB4MDE2OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAzICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNAkJMHgwMTgwIC8qIENXIDQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU00CTB4MDE4OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNQkJMHgwMWEwIC8qIENXIDUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU01CTB4MDFhOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA1ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNgkJMHgwMWMwIC8qIENXIDYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU02CTB4MDFjOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA2ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNwkJMHgwMWUwIC8qIENXIDcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU03CTB4MDFlOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA3ICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTlRFTVAgICAgIDB4MTAwMAkvKiBiZWFjb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU1RBUE9XVEVNUAkweDFhMDAgLyogIFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgKi8KLQotLyogUmVjZWl2ZSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfUlhNX0JBU0UJCTB4MjAwMAotI2RlZmluZSBBR05YX1JYTV9SRVFSQVRFCTB4MjAwMAkvKiByZXF1ZXN0ZWQgcmF0ZSAqLwotI2RlZmluZSBBR05YX1JYTV9NQUNISQkJMHgyMDA0CS8qIGZpcnN0IDQgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fTUFDTE8JCTB4MjAwOAkvKiBsYXN0IDIgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURISQkweDIwMGMJLyogYnNzaWQgaGkgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURMTwkweDIwMTAJLyogYnNzaWQgbG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9DTURfRkxBRwkweDIwMTQJLyogRmxhZ3MgZm9yIHRoZSBSWCBIYXNoIENvbW1hbmQgRGVmYXVsdDowICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gJMHgyMDE4CS8qIFRoZSBIaWdoIGhhbGYgb2YgdGhlIEhhc2ggQ29tbWFuZCAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0NNRF9MT1cJMHgyMDFjCS8qIFRoZSBMb3cgaGFsZiBvZiB0aGUgSGFzaCBDb21tYW5kICovCi0jZGVmaW5lIEFHTlhfUlhNX1JPVVRBQgkJMHgyMDIwCS8qIHJvdXRpbmcgdGFibGUgKi8KLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1NISUZUCTI0Ci0jZGVmaW5lCQlST1VUQUJfVFlQRV9TSElGVAkyOAotI2RlZmluZQkJUk9VVEFCX1NUQVRVU19TSElGVAkzMAotI2RlZmluZQkJUk9VVEFCX1JXX1NISUZUCQkzMQotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0RST1AJMHhmMDAwMDAgLyogRHJvcCAqLwotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0NQVQkweDQwMDAwMCAvKiBDUFUgKi8KLSNkZWZpbmUJCVJPVVRBQl9ST1VURV9FTkNSWQkweDUwMDgwMCAvKiBFbmNyeXB0aW9uICovCi0jZGVmaW5lCQlST1VUQUJfUk9VVEVfUkZQCTB4ODAwMDAwIC8qIFJGUCAqLwotCi0jZGVmaW5lCQlST1VUQUJfVFlQRV9NQU5BRwkweDAgLyogTWFuYWdlbWVudCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfQ1RMCQkweDEgLyogQ29udHJvbCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfREFUQQkweDIgLyogRGF0YSAqLwotCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9EQVRBCQkweDAKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX0RBVEFBQ0sJCTB4MQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTEwJCTB4MgotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTExBQ0sJMHgzCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMCQkweDQgLyogTlVMTCAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfTlVMTEFDSwkJMHg1Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTAkJMHg2Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTEFDSwkweDcKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEEJCTB4OCAvKiBRT1MgREFUQSAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDSwkweDkKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEFQT0xMCTB4YQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDS1BPTEwJMHhiCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMCQkweGMKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0sJMHhkCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTAkweGUKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMQUNLCTB4ZgotI2RlZmluZSBBR05YX1JYTV9ERUxBWTExCSAgIDB4MjAyNAkvKiBkZWxheSAxMShBQikgKi8KLSNkZWZpbmUgQUdOWF9SWE1fU09GX0NOVAkgICAweDIwMjgJLyogU09GIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0ZSQUdfQ05UCSAgIDB4MjAyYwkvKiBGcmFnbWVudCBDb3VudCovCi0jZGVmaW5lIEFHTlhfUlhNX0ZDU19DTlQJICAgMHgyMDMwCS8qIEZDUyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9CU1NJRF9NSVNTX0NOVAkgICAweDIwMzQJLyogQlNTSUQgTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9QRFVfRVJSX0NOVAkgICAweDIwMzgJLyogUERVIEVycm9yIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0RFU1RfTUlTU19DTlQJICAgMHgyMDNDCS8qIERlc3RpbmF0aW9uIE1pc3MgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fRFJPUF9DTlQJICAgMHgyMDQwCS8qIERyb3AgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQUJPUlRfQ05UCSAgIDB4MjA0NAkvKiBBYm9ydCBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9SRUxBWV9DTlQJICAgMHgyMDQ4CS8qIFJlbGF5IENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfTUlTU19DTlQJICAgMHgyMDRjCS8qIEhhc2ggTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9TQV9ISQkJICAgMHgyMDUwCS8qIEFkZHJlc3Mgb2YgcmVjZWl2ZWQgcGFja2V0IEhpICovCi0jZGVmaW5lIEFHTlhfUlhNX1NBX0xPCQkgICAweDIwNTQJLyogQWRkcmVzcyBvZiByZWNlaXZlZCBwYWNrZXQgTG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9EVU1QX0xTVAkgICAweDIxMDAJLyogQ29udGFpbnMgSGFzaCBEYXRhICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfRFVNUF9NU1QJICAgMHgyMTA0CS8qIENvbnRhaW5zIEhhc2ggRGF0YSAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSAgICAweDIxMDgJLyogVGhlIFN0YXRpb24gSUQgdG8gZHVtcCAqLwotCi0KLS8qIEVuY3J5cHRpb24gTWFuYWdtZW50ICovCi0jZGVmaW5lIEFHTlhfRU5DUllfQkFTRQkJMHgyNDAwCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMAkweDI0NDAgLyogd2VwIGtleSAjMCAqLwotI2RlZmluZSBBR05YX0VOQ1JZX1dFUEtFWTEJMHgyNDQ0IC8qIHdlcCBrZXkgIzEgKi8KLSNkZWZpbmUgQUdOWF9FTkNSWV9XRVBLRVkyCTB4MjQ0OCAvKiB3ZXAga2V5ICMyICovCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMwkweDI0NGMgLyogd2VwIGtleSAjMyAqLwotI2RlZmluZSBBR05YX0VOQ1JZX0NDTVJFQ1RMCTB4MjQ2MCAvKiBjY20gcmVwbGF5IGNvbnRyb2wgKi8KLQotCi0vKiBCYW5kIE1hbmFnZW1lbnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fQkFTRQkJMHgyYzAwCi0jZGVmaW5lIEFHTlhfQk1fQk1DVEwJCTB4MmMwMCAgLyogYmFuZCBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9UWFdBRERSCQkweDJjMTggIC8qIHR4IHdvcmtxdWV1ZSBhZGRyZXNzIHN0YXJ0ICovCi0jZGVmaW5lIEFHTlhfQk1fVFhUT1BFRVIJMHgyYzI0CS8qIHRyYW5zbWl0IHRvIHBlZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMSFAJCTB4MmMyYyAgLyogZnJlZSBwb29sIGxpc3QgaGVhZCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMVFAJCTB4MmMzMCAgLyogZnJlZSBwb29sIGxpc3QgdGFpbCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBDTlQJCTB4MmMzNCAgLyogZnJlZSBwb29sIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfQk1fQ0lQRFVXQ05UCTB4MmMzOCAgLyogY2FyZCBpbnRlcmZhY2UgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX1NQUERVV0NOVAkweDJjM2MgIC8qIHNwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SRlBQRFVXQ05UCTB4MmM0MCAgLyogcmZwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SSFBQRFVXQ05UCTB4MmM0NCAgLyogcmhwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9DSVdRQ1RMCQkweDJjNDggLyogQ2FyZCBJbnRlcmZhY2UgV29ya1F1ZXVlIENvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVUWFdDVEwJMHgyYzUwICAvKiBjcHUgdHggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVSWFdDVEwJMHgyYzU4ICAvKiBjcHUgcnggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVMV0NUTAkweDJjNjAgLyogY3B1IGxvdyB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVUhXQ1RMCTB4MmM2OCAvKiBjcHUgaGlnaCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQVFhXQ1RMCTB4MmM3MCAvKiBzcCB0eCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQUlhXQ1RMCTB4MmM3OCAvKiBzcCByeCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1JGUFdDVEwJCTB4MmM4MCAvKiBSRlAgd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9NVFNNCQkweDJjOTAgLyogTXVsdGljYXN0IFRyYW5zbWl0IFN0YXRpb24gTWFzayAqLwotCi0vKiBDYXJkIEludGVyZmFjZSBSZWdpc3RlcnMgKDMyYml0cykgKi8KLSNkZWZpbmUgQUdOWF9DSVJfQkFTRQkJMHgzMDAwCi0jZGVmaW5lIEFHTlhfQ0lSX0JMS0NUTAkJMHgzMDAwCS8qIGJsb2NrIGNvbnRyb2wqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYCTB4MQotI2RlZmluZQkJQUdOWF9TVEFUX1JYCTB4MgotI2RlZmluZQkJQUdOWF9TVEFUX1gJMHg0Ci0vKiBCZWxvdyB0d28gaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgc2V0IGJ5IG91ciBidXQgbm90IENQVSBvciB0aGUgY2FyZCAqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYRAkweDEwCi0jZGVmaW5lCQlBR05YX1NUQVRfVFhNCTB4MjAKLQotI2RlZmluZSBBR05YX0NJUl9BRERSV0lOCTB4MzAwNAkvKiBBZGRyZXNzYWJsZSBXaW5kb3dzKi8KLSNkZWZpbmUgQUdOWF9DSVJfRU5ESUFOCQkweDMwMDggIC8qIGNhcmQgZW5kaWFubmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9TRVJJQUxJVEYJMHgzMDIwCS8qIHNlcmlhbCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDRkcJCTB4MzA0MAkvKiByZWNlaXZlIGNvbmZpZyAqLwotI2RlZmluZQkJRU5BQkxFX1JYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlSWF9DQUNIRV9MSU5FCSAgICAweDgKLS8qIHRoZSBSWCBmcmFnbWVudCBsZW5ndGggKi8KLSNkZWZpbmUJCUZSQUdfTEVOXzI1NgkweDAgLyogMjU2QiAqLwotI2RlZmluZQkJRlJBR19MRU5fNTEyCTB4MQotI2RlZmluZQkJRlJBR19MRU5fMTAyNAkweDIKLSNkZWZpbmUJCUZSQUdfTEVOXzIwNDgJMHgzCi0jZGVmaW5lCQlGUkFHX0JFCQkweDEwCi0jZGVmaW5lIEFHTlhfQ0lSX1JYQ1RMCQkweDMwNTAJLyogcmVjZWl2ZSBjb250cm9sICovCi0vKiBtZW1vcnkgYWRkcmVzcywgY2hpcHNpZGUgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTVNUQVJUCTB4MzA1NAkvKiByZWNlaXZlIGNsaWVudCBtZW1vcnkgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTUVORAkweDMwNTgJLyogcmVjZWl2ZSBjbGllbnQgbWVtb3J5IGVuZCAqLwotLyogbWVtb3J5IGFkZHJlc3MsIHBjaSAqLwotI2RlZmluZSBBR05YX0NJUl9SWEhPU1RBRERSCTB4MzA2MAkvKiByZWNlaXZlIGhvc3RzaWRlIGFkZHJlc3MgKi8KLS8qIG1lbW9yeSBhZGRyZXNzLCBjaGlwc2lkZSAqLwotI2RlZmluZSBBR05YX0NJUl9SWENMSUFERFIJMHgzMDY0CS8qIHJlY2VpdmUgY2xpZW50c2lkZSBhZGRyZXNzICovCi0jZGVmaW5lIEFHTlhfQ0lSX1JYRE1BQ1RMCTB4MzA2OAkvKiByZWNlaXZlIGRtYSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYQ0ZHCQkweDMwODAJLyogdHJhbnNtaXQgY29uZmlnICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYTUNUTAkJMHgzMDkwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgQ29udHJvbCAqLwotI2RlZmluZQkJRU5BQkxFX1RYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlUWF9DQUNIRV9MSU5FCSAgICAweDgKLSNkZWZpbmUgQUdOWF9DSVJfVFhNU1RBUlQJMHgzMDk0IC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgU3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNRU5ECQkweDMwOTggLyogVHJhbnNtaXQgTWFuYWdlbWVudCBFbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEQ1RMCQkweDMwYTAJLyogdHJhbnNtaXQgZGF0YSBjb250cm9sICovCi0vKiBtZW1lb3J5IGFkZHJlc3MsIGNoaXBzZXQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEU1RBUlQJMHgzMGE0CS8qIHRyYW5zbWl0IGRhdGEgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhERU5ECQkweDMwYTgJLyogdHJhbnNtaXQgZGF0YSBlbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNSEFERFIJMHgzMGIwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgSG9zdHNpZGUgQWRkcmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9UWE1DQUREUgkweDMwYjQgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBDbGllbnRzaWRlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhETUFDVEwJMHgzMGI4CS8qIHRyYW5zbWl0IGRtYSBjb250cm9sICovCi0KLQotLyogUG93ZXIgTWFuYWdtZW50IFVuaXQgKi8KLSNkZWZpbmUgQUdOWF9QTV9CQVNFCQkweDNjMDAKLSNkZWZpbmUgQUdOWF9QTV9QTUNUTAkJMHgzYzAwCS8qIFBNIENvbnRyb2wqLwotI2RlZmluZSBBR05YX1BNX01BQ01TVwkJMHgzYzA4IC8qIE1BQyBNYW51YWwgU2xvdyBXb3JrIEVuYWJsZSAqLwotI2RlZmluZSBBR05YX1BNX1JGQ1RMCQkweDNjMGMgLyogUkYgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1BNX1BIWU1XCQkweDNjMTQJLyogUGh5IE1hbm5hbCBXb3JrICovCi0jZGVmaW5lIEFHTlhfUE1fU09GVFJTVAkJMHgzYzE4CS8qIFBNVSBTb2Z0IFJlc2V0ICovCi0jZGVmaW5lIEFHTlhfUE1fUExMQ1RMCQkweDNjMWMJLyogUE1VIFBMTCBjb250cm9sKi8KLSNkZWZpbmUgQUdOWF9QTV9URVNUUEhZCQkweDNjMjQgLyogUE1VIFRlc3QgUGh5ICovCi0KLQotLyogSW50ZXJydXB0IENvbnRyb2wgaW50ZXJmYWNlICovCi0jZGVmaW5lIEFHTlhfSU5UX0JBU0UJCTB4NDAwMAotI2RlZmluZSBBR05YX0lOVF9TVEFUCQkweDQwMDAJLyogaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBBR05YX0lOVF9NQVNLCQkweDQwMGMJLyogaW50ZXJydXB0IG1hc2sgKi8KLS8qIEZJWE1FICovCi0jZGVmaW5lCQlJUlFfVFhfQkVBQ09OCTB4MQkvKiBUWCBCZWFjb24gKi8KLSNkZWZpbmUJCUlSUV9UWF9SRVRSWQkweDgJLyogVFggUmV0cnkgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfQUNUSVZJVFkJMHgxMAkvKiBUWCBBY3Rpdml0eSAqLwotI2RlZmluZQkJSVJRX1JYX0FDVElWSVRZCTB4MjAJLyogUlggQWN0aXZpdHkgKi8KLS8qIEZJWE1FIEkgZ3Vlc3MgdGhhdCBpbnN0ZWFkIFJYIGEgbm9uZSBleGlzdCBzdGFpb24ncyBwYWNrZXQgb3IKLSAgIHRoZSBzdGF0aW9uIGhhc24ndCBiZWVuIGluaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9YCTB4NDAKLSNkZWZpbmUJCUlSUV9SWF9ZCTB4ODAJLyogUlggPyAqLwotI2RlZmluZQkJSVJRX1JYX0hBU0hISVQJMHgxMDAJLyogUlggSGFzaCBIaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9GUkFNRQkweDIwMAkvKiBSWCBGcmFtZSAqLwotI2RlZmluZQkJSVJRX0VSUl9JTlQJMHg0MDAJLyogRXJyb3IgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfUVVFX0ZVTEwJMHg4MDAJLyogVFggV29ya3F1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUJCUlSUV9CQU5ETUFOX0VSUgkweDEwMDAwCS8qIEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yICovCi0jZGVmaW5lCQlJUlFfVFhfRElTQUJMRQkweDIwMDAwCS8qIFRYIERpc2FibGUgKi8KLSNkZWZpbmUJCUlSUV9SWF9JVkFTRVNLRVkgMHg4MDAwMCAvKiBSWCBJbnZhbGlkIFNlc3Npb24gS2V5ICovCi0jZGVmaW5lCQlJUlFfUlhfS0VZSURNSVMJMHgxMDAwMDAgLyogUlgga2V5IElEIE1pc21hdGNoICovCi0jZGVmaW5lCQlJUlFfUkVQX1RISElUCTB4MjAwMDAwIC8qIFJlcGxheSBUaHJlc2hvbGQgSGl0ICovCi0jZGVmaW5lCQlJUlFfVElNRVIxCTB4NDAwMDAwMCAvKiBUaW1lcjEgKi8KLSNkZWZpbmUJCUlSUV9USU1FUl9DTlQJMHgxMDAwMDAwMCAvKiBUaW1lciBDb3VudCAqLwotI2RlZmluZQkJSVJRX1BIWV9GQVNUSU5UIDB4MjAwMDAwMDAgLyogUGh5IEZhc3QgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfUEhZX1NMT1dJTlQJMHg0MDAwMDAwMCAvKiBQaHkgU2xvdyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9PVEhFUgkweDgwMDAwMDAwIC8qIFVua25vdyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUFHTlhfSVJRX0FMTCAgIAkweGZmZmZmZmZmCi0KLS8qIFN5c3RlbSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfQkFTRQkweDQ0MDAKLSNkZWZpbmUgQUdOWF9TWVNJVEZfU1lTTU9ERQkweDQ0MDAJLyogc3lzdGVtIG1vZGUgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfR1BJT0lOCTB4NDQxMCAvKiBHUElPIEluICovCi0vKiBQSU4gbGluZXMgZm9yIGxlZHM/ICovCi0jZGVmaW5lIEFHTlhfU1lTSVRGX0dQSU9VVAkweDQ0MTQJLyogR1BJTyBPdXQgKi8KLQotLyogVGltZXIgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1RJTUNUTF9USU1FUjEJMHg0ODAwIC8qIFRpbWVyIDEgKi8KLSNkZWZpbmUgQUdOWF9USU1DVExfVElNMUNUTAkweDQ4MDggLyogVGltZXIgMSBDb250cm9sICovCi0KLQotLyogQW50ZW5uYSBDYWxpYnJhdGlvbiBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfQkFTRQkJMHg1MDAwCi0jZGVmaW5lIEFHTlhfQUNJX01PREUJCTB4NTAwMCAvKiBNb2RlICovCi0jZGVmaW5lIEFHTlhfQUNJX01FQVNVUkUJMHg1MDA0IC8qIE1lYXN1cmUgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfU0VMQ0hBSU4JMHg1MDA4IC8qIFNlbGVjdCBDaGFpbiAqLwotI2RlZmluZSBBR05YX0FDSV9MRU4JCTB4NTAwYyAvKiBMZW5ndGggKi8KLSNkZWZpbmUgQUdOWF9BQ0lfVElNRVIxCQkweDUwMTggLyogVGltZXIgMSAqLwotI2RlZmluZSBBR05YX0FDSV9USU1FUjIJCTB4NTAxYyAvKiBUaW1lciAyICovCi0jZGVmaW5lIEFHTlhfQUNJX09GRlNFVAkJMHg1MDIwIC8qIE9mZnNldCAqLwotI2RlZmluZSBBR05YX0FDSV9TVEFUVVMJCTB4NTAzMCAvKiBTdGF0dXMgKi8KLSNkZWZpbmUJCUNBTElfSURMRQkweDAKLSNkZWZpbmUJCUNBTElfRE9ORQkweDEKLSNkZWZpbmUJCUNBTElfQlVTWQkweDIKLSNkZWZpbmUJCUNBTElfRVJSCTB4MwotI2RlZmluZSBBR05YX0FDSV9BSUNDSEEwT1ZFCTB4NTAzNCAvKiBBSUMgQ2hhbm5lbCAwIE92ZXJyaWRlICovCi0jZGVmaW5lIEFHTlhfQUNJX0FJQ0NIQTFPVkUJMHg1MDM4IC8qIEFJQyBDaGFubmVsIDEgT3ZlcnJpZGUgKi8KLQotLyogR2FpbiBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX0dDUl9CQVNFCQkweDkwMDAKLS8qIHRocmVzaG9sZCBvZiBwcmltYXJ5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhEMEEJCTB4OTAwMAkvKiB0aHJlc2hvbGQ/IEQwIEEgKi8KLS8qIGxvdyB0aHJlc2hvbGQgb2YgcHJpbWFyeSBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIRDBBTAkJMHg5MDA0CS8qIHRocmVzaG9sZD8gRDAgQSBsb3cgKi8KLS8qIHRocmVzaG9sZCBvZiBzZWNvbmRhcnkgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQgkJMHg5MDA4CS8qIHRocmVzaG9sZD8gRDBfQiAqLwotI2RlZmluZSBBR05YX0dDUl9EVU5TQVQJCTB4OTAwYyAvKiBkIHVuc2F0dXJhdGVkICovCi0jZGVmaW5lIEFHTlhfR0NSX0RTQVQJCTB4OTAxMCAvKiBkIHNhdHVyYXRlZCAqLwotI2RlZmluZSBBR05YX0dDUl9ERklSQ0FMCTB4OTAxNCAvKiBEIEZpci9DYWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfREdDVEwxMUEJMHg5MDE4IC8qIGQgZ2FpbiBjb250cm9sIDExYSAqLwotI2RlZmluZSBBR05YX0dDUl9ER0NUTDExQgkweDkwMWMgLyogZCBnYWluIGNvbnRyb2wgMTFiICovCi0vKiBzdHJlbmd0aCBvZiBnYWluICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5JTklUCTB4OTAyMAkvKiBnYWluIGluaXRpYWxpemF0aW9uICovCi0jZGVmaW5lIEFHTlhfR0NSX1RITk9TSUcJMHg5MDI0IC8qIHRocmVob2xkIG5vIHNpZ25hbCAqLwotI2RlZmluZSBBR05YX0dDUl9DT0FSU1RFUAkweDkwMjggLyogY29hcnNlIHN0ZXBwaW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFBCTB4OTAyYyAvKiBzaWZ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFCCTB4OTAzMCAvKiBzaWZ4IHRpbWUgMTFiICovCi0jZGVmaW5lIEFHTlhfR0NSX0NXREVURUMJMHg5MDM0IC8qIGN3IGRldGVjdGlvbiAqLwotI2RlZmluZSBBR05YX0dDUl8wWDM4CQkweDkwMzggLyogPz8/PyAqLwotI2RlZmluZSBBR05YX0dDUl9CT0FDVAkJMHg5MDNjCS8qIEJPIEFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0lOQUNUCTB4OTA0MAkvKiBCTyBJbmFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0RZTkEJCTB4OTA0NAkvKiBCTyBkeW5hbWljICovCi0vKiA4MDIuMTEgbW9kZShhLGIsZykgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfRElTQ09WTU9ECTB4OTA0OAkvKiBkaXNjb3ZlcnkgbW9kZSAqLwotI2RlZmluZSBBR05YX0dDUl9OTElTVEFOVAkweDkwNGMJLyogbnVtYmVyIG9mIGxpc3RlbmluZyBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX05BQ1RJQU5UCTB4OTA1MAkvKiBudW1iZXIgb2YgYWN0aXZlIGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk1FQVNBTlQJMHg5MDU0CS8qIG51bWJlciBvZiBtZWFzdXJpbmcgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9OQ0FQVEFOVAkweDkwNTgJLyogbnVtYmVyIG9mIGNhcHR1cmUgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USENBUDExQQkweDkwNWMgLyogdGhyZXNob2xkIGNhcHR1cmUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQMTFCCTB4OTA2MCAvKiB0aHJlc2hvbGQgY2FwdHVyZSAxMWIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDQVBSWDExQQkweDkwNjQgLyogdGhyZXNob2xkIGNhcHR1cmUgcnggMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQUlgxMUIJMHg5MDY4IC8qIHRocmVzaG9sZCBjYXB0dXJlIHJ4IDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9USExFVkRSTwkweDkwNmMgLyogdGhyZXNob2xkIGxldmVsIGRyb3AgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTlNFVDAJMHg5MDcwIC8qIEdhaW5zZXQgMCAqLwotI2RlZmluZSBBR05YX0dDUl9HQUlOU0VUMQkweDkwNzQgLyogR2FpbnNldCAxICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVQyCTB4OTA3OCAvKiBHYWluc2V0IDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUlhUSU1FMTFBCTB4OTA3YyAvKiBtYXhpbXVtIHJ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX01BWFJYVElNRTExQgkweDkwODAgLyogbWF4aW11bSByeCB0aW1lIDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9DT1JSVElNRQkweDkwODQgLyogY29ycmVjdGlvbiB0aW1lICovCi0vKiByZXNldCB0aGUgc3Vic3lzdGVtLCAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAqLwotI2RlZmluZSBBR05YX0dDUl9SU1RHQ1RMCTB4OTA4OAkvKiByZXNldCBnYWluIGNvbnRyb2wgKi8KLS8qIGNoYW5uZWwgcmVjZWl2aW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYQ0hBTkVMCTB4OTA4YwkvKiByZWNlaXZlIGNoYW5uZWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk9JU0UwCQkweDkwOTAgLyogTm9pc2UgMCAqLwotI2RlZmluZSBBR05YX0dDUl9OT0lTRTEJCTB4OTA5NCAvKiBOb2lzZSAxICovCi0jZGVmaW5lIEFHTlhfR0NSX05PSVNFMgkJMHg5MDk4IC8qIE5vaXNlIDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lHSFRICQkweDkwOWMJLyogU2lnbmFsIEhpZ2ggVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJR0xUSAkJMHg5MGEwCS8qIFNpZ25hbCBMb3cgVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX0NPUlJEUk9QCTB4OTBhNCAvKiBjb3JyZWN0aW9uIGRyb3AgKi8KLS8qIHRocmVzaG9sZCBvZiB0ZXJ0aWF5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDRAkJMHg5MGE4CS8qIHRocmVzaG9sZD8gQ0QgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDUwkJMHg5MGFjCS8qIHRocmVzaG9sZD8gQ1MgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUE9XRElGRgkweDkwYjggLyogbWF4aW11bSBwb3dlciBkaWZmZXJlbmNlICovCi0jZGVmaW5lIEFHTlhfR0NSX1RSQUNOVDQJMHg5MGVjIC8qIFRyYW5zaXRpb24gQ291bnQgNCAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ1ICAgICAgCTB4OTBmMAkvKiB0cmFuc2l0aW9uIGNvdW50IDUgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVFJBQ05UNiAgICAgICAJMHg5MGY0CS8qIHRyYW5zaXRpb24gY291bnQgNiAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ3ICAgICAgIAkweDkwZjgJLyogdHJhbnNpdGlvbiBjb3V0biA3ICovCi0jZGVmaW5lIEFHTlhfR0NSX1RFU1RCVVMJMHg5MTFjIC8qIHRlc3QgYnVzICovCi0jZGVmaW5lIEFHTlhfR0NSX0NIQUlOTlVNCTB4OTEyMCAvKiBOdW1iZXIgb2YgQ2hhaW5zICovCi0jZGVmaW5lIEFHTlhfR0NSX0FOVENGRwkJMHg5MTI0CS8qIEFudGVubmEgQ29uZmlnICovCi0jZGVmaW5lIEFHTlhfR0NSX1RISlVNUAkJMHg5MTJjIC8qIHRocmVob2xkIGp1bXAgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhQT1dFUgkweDkxMzAgLyogdGhyZXNob2xkIHBvd2VyICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIUE9XQ0xJUAkweDkxMzQgLyogdGhyZXNob2xkIHBvd2VyIGNsaXAqLwotI2RlZmluZSBBR05YX0dDUl9GT1JDRUNUTENMSwkweDkxMzggLyogRm9yY2UgR2FpbiBDb250cm9sIENsb2NrICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVRXUklURQkweDkxM2MgLyogR2FpbnNldCBXcml0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQlRGRVNUCTB4OTE0MAkvKiB0aHJlc2hvbGQgZDAgYiB0ZiBlc3RpbWF0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USFJYMTFCUE9XTUlOCTB4OTE0NAkvKiB0aHJlc2hvbGQgcnggMTFiIHBvd2VyIG1pbmltdW0gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfMFgxNGMJCTB4OTE0YyAvKiA/PyAqLwotI2RlZmluZSBBR05YX0dDUl8wWDE1MAkJMHg5MTUwIC8qID8/ICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYT1ZFUklERQkweDkxOTQJLyogcmVjaWV2ZSBvdmVycmlkZSAqLwotI2RlZmluZSBBR05YX0dDUl9XQVRDSERPRwkweDkxYjAJLyogd2F0Y2hkb2cgdGltZW91dCAqLwotCi0KLS8qIFNwaSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TUElfQkFTRQkJMHhkYzAwCi0jZGVmaW5lIEFHTlhfU1BJX0NGRwkJMHhkYzAwIC8qIHNwaSBjb25maWd1cmF0aW9uICovCi0vKiBPbmx5IGFjY2VwdCAxNiBiaXRzICovCi0jZGVmaW5lIEFHTlhfU1BJX1dNU1cJCTB4ZGMwNAkvKiB3cml0ZSBtb3N0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIE9ubHkgYWNjZXB0IDE2IGJpdHMgKi8KLSNkZWZpbmUgQUdOWF9TUElfV0xTVwkJMHhkYzA4CS8qIHdyaXRlIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLSNkZWZpbmUgQUdOWF9TUElfQ1RMCQkweGRjMGMJLyogc3BpIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9TUElfUk1TVwkJMHhkYzEwIC8qIHJlYWQgbW9zdCBzaWduaWZpY2FudCB3b3JkICovCi0jZGVmaW5lIEFHTlhfU1BJX1JMU1cJCTB4ZGMxNCAvKiByZWFkIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIFNQSSBDb250cm9sIE1hc2sgKi8KLSNkZWZpbmUJCVNQSV9SRUFEX0NUTAkJMHg0MDAwIC8qIHJlYWQgY29udHJvbCAqLwotI2RlZmluZQkJU1BJX0JVU1lfQ1RMCQkweDgwMDAgLyogYnVzeSBjb250cm9sICovCi0vKiBSRiBhbmQgc3ludGggY2hpcHMgaW4gc3BpICovCi0jZGVmaW5lCQlSRl9DSElQMAkweDQwMAotI2RlZmluZQkJUkZfQ0hJUDEJMHg4MDAKLSNkZWZpbmUJCVJGX0NISVAyCTB4MTAwMAotI2RlZmluZQkJU1lOVEhfQ0hJUAkweDIwMDAKLQotLyogVW5rbm93biByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1VOS05PV05fQkFTRQkweDc4MDAKLQotLyogRklYTUUgTW9uaXRvckdhaW4gKi8KLSNkZWZpbmUgQUdOWF9NT05HQ1JfQkFTRQkweDEyMDAwCi0KLS8qIEdhaW4gVGFibGUgKi8KLSNkZWZpbmUgQUdOWF9HQUlOX1RBQkxFCQkweDEyNDAwCi0KLS8qIFRoZSBpbml0aWFsIEZJUiBjb2VmZmljaWVudCB0YWJsZSAqLwotI2RlZmluZSBBR05YX0ZJUl9CQVNFCQkweDE5ODA0Ci0KLSNkZWZpbmUgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTAkweDgwMAotCi0vKiBlZXByb20gY29tbWFuZHMgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9OVUxMCQkweDAgLyogTlVMTCAqLwotI2RlZmluZSBFRVBST01fQ01EX1dSSVRFCTB4MiAvKiB3cml0ZSAqLwotI2RlZmluZSBFRVBST01fQ01EX1JFQUQJCTB4MyAvKiByZWFkICovCi0jZGVmaW5lIEVFUFJPTV9DTURfU1RBVFVTUkVBRAkweDUgLyogc3RhdHVzIHJlZ2lzdGVyIHJlYWQgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9XUklURUVOQUJMRQkweDYgLyogd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lIEVFUFJPTV9DTURfQ09ORklHVVJFCTB4NyAvKiBjb25maWd1cmUgKi8KLQotI2RlZmluZSBFRVBST01fREFUQUZPUkNPRklHVVJFCTB4NiAvKiA/Pz8gKi8KLQotLyogZWVwcm9tIGFkZHJlc3MgKi8KLSNkZWZpbmUgRUVQUk9NX0FERFJfU1VCVklECTB4MCAvKiBTdWIgVmVuZG9yIElEICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX1NVQlNJRAkweDIgLyogU3ViIFN5c3RlbSBJRCAqLwotI2RlZmluZSBFRVBST01fQUREUl9NQUNBRERSCTB4MTQ2IC8qIE1BQyBBZGRyZXNzICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX0xPVFlQRQkweDE0ZiAvKiBMTyB0eXBlICovCi0KLXN0cnVjdCBhZ254X2VlcHJvbSB7Ci0JdTggZGF0YTsJLyogZGF0ZSAqLwotCXUxNiBhZGRyZXNzOwkvKiBhZGRyZXNzIGluIEVFUFJPTSAqLwotCXU4IGNtZDsJCS8qIGNvbW1hbmQsIHVua25vd24sIHN0YXR1cyAqLwotfSAgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIEFHTlhfRUVQUk9NX0NPTU1BTkRfU0hJRlQJNQotI2RlZmluZSBBR05YX0VFUFJPTV9DT01NQU5EX1NUQVQJMHgwMQotCi12b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXU4IHJlYWRfZnJvbV9lZXByb20oc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTE2IGFkZHJlc3MpOwotdm9pZCBhZ254X2h3X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1pbnQgYWdueF9od19yZXNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBhZ254X3NldF9zc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwotdm9pZCBhZ254X3NldF9ic3NpZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwotdm9pZCBlbmFibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBkaXNhYmxlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgY2FsaWJyYXRlX2FudGVubmFfcGVyaW9kKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNlbmRpZiAvKiBBR05YX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTQ1N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYworKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInRhYmxlLmgiCi0KLS8qIEZJWE1FISAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwaV93cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3csCi0JCSAgICAgIHUxNiBzaXplLCB1MzIgY29udHJvbCkKLXsKLQl1MzIgcmVnOwotCXUzMiBsc3cgPSBzdyAmIDB4ZmZmZjsJCS8qIGxvd2VyIDE2IGJpdHMgb2Ygc3cqLwotCXUzMiBtc3cgPSBzdyA+PiAxNjsJCS8qIGhpZ2ggMTYgYml0cyBvZiBzdyAqLwotCi0JLyogRklYTUUgV3JpdGUgTW9zdCBTaWduaWZpY2FudCBXb3JkIG9mIHRoZSAzMmJpdCBkYXRhIHRvIE1TVyAqLwotCS8qIEZJWE1FIEFuZCBMZWFzdCBTaWduaWZpY2FudCBXb3JkIHRvIExTVyAqLwotCWlvd3JpdGUzMigobHN3KSwgcmVnaW9uICsgQUdOWF9TUElfV0xTVyk7Ci0JaW93cml0ZTMyKChtc3cpLCByZWdpb24gKyBBR05YX1NQSV9XTVNXKTsKLQlyZWcgPSBjaGlwX2lkcyB8IHNpemUgfCBjb250cm9sOwotCS8qIFdyaXRlIGNoaXAgaWQocyksIHdyaXRlIHNpemUgYW5kIGJ1c3kgY29udHJvbCB0byBDb250cm9sIFJlZ2lzdGVyICovCi0JaW93cml0ZTMyKChyZWcpLCByZWdpb24gKyBBR05YX1NQSV9DVEwpOwotCS8qIFdhaXQgZm9yIEJ1c3kgY29udHJvbCB0byBjbGVhciAqLwotCXNwaV9kZWxheSgpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFN5bnRoIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfc3lfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4MTUgaXMgYSBtYWdpYyB2YWx1ZSovCi0Jc3BpX3dyaXRlKHJlZ2lvbiwgY2hpcF9pZHMsIHN3LCAweDE1LCBTUElfQlVTWV9DVEwpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFJGIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfcmZfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZCBpcyBhIG1hZ2ljIHZhbHVlKi8KLQlzcGlfd3JpdGUocmVnaW9uLCBjaGlwX2lkcywgc3csIDB4ZCwgU1BJX0JVU1lfQ1RMKTsKLX0gLyogc3BpX3JmX3dyaXRlICovCi0KLS8qCi0gKiBXcml0ZSB0byBTUEkgd2l0aCBSZWFkIENvbnRyb2wgYml0IHNldAotICovCi1pbmxpbmUgdm9pZCBzcGlfcmNfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZTUgaXMgYSBtYWdpYyB2YWx1ZSAqLwotCXNwaV93cml0ZShyZWdpb24sIGNoaXBfaWRzLCBzdywgMHhlNSwgU1BJX0JVU1lfQ1RMfFNQSV9SRUFEX0NUTCk7Ci19Ci0KLS8qIEdldCB0aGUgYWN0aXZlIGNoYWlucydzIGNvdW50ICovCi1zdGF0aWMgaW50IGdldF9hY3RpdmVfY2hhaW5zKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IG51bSA9IDA7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjEpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKHJlZyA9PSAxKQotCQludW0rKzsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDIxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmIChyZWcgPT0gMSkKLQkJbnVtKys7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyMSk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQlpZiAocmVnID09IDEpCi0JCW51bSsrOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKDB4MzMgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0KLQlyZXR1cm4gbnVtOwotfSAvKiBnZXRfYWN0aXZlX2NoYWlucyAqLwotCi12b2lkIHJmX2NoaXBzX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCWludCBudW07Ci0JQUdOWF9UUkFDRTsKLQotCWlmIChwcml2LT5yZXZpZCA9PSAxKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQkJcmVnIHw9IDB4ODsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCX0KLQotCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gMjAwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MzsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDUwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMTAxKTsKLQotCW51bSA9IGdldF9hY3RpdmVfY2hhaW5zKHByaXYpOwotCXByaW50ayhLRVJOX0lORk8gUEZYICJBY3RpdmUgY2hhaW5zIGFyZSAlZFxuIiwgbnVtKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxOTA4KTsKLX0gLyogcmZfY2hpcHNfaW5pdCAqLwotCi0KLXN0YXRpYyB1MzIgY2hhbm5lbF90YmxbMTVdWzldID0gewotCXswLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0JezEsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYTQsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsyLCAgMHgwMCwgMHgwMCwgMHg2MTUsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7MywgIDB4MDAsIDB4MDAsIDB4NjFhLCAweDAwLCAweDFhZSwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezQsICAweDAwLCAweDAwLCAweDYxZiwgMHgwMCwgMHgxYWUsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs1LCAgMHgwMCwgMHgwMCwgMHg2MjQsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7NiwgIDB4MDAsIDB4MDAsIDB4NjFmLCAweDAwLCAweDFiMywgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezcsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYjMsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs4LCAgMHgwMCwgMHgwMCwgMHg2MjksIDB4MDAsIDB4MWIzLCAweDI4LCAweDAwLCAweDFlfSwKLQl7OSwgIDB4MDAsIDB4MDAsIDB4NjI0LCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEwLCAweDAwLCAweDAwLCAweDYyOSwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxMSwgMHgwMCwgMHgwMCwgMHg2MmUsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLQl7MTIsIDB4MDAsIDB4MDAsIDB4NjMzLCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEzLCAweDAwLCAweDAwLCAweDYyOCwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxNCwgMHgwMCwgMHgwMCwgMHg2NDQsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkCi1jaGFubmVsX3RibF93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJlZ19udW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGNoYW5uZWxfdGJsW2NoYW5uZWxdW3JlZ19udW1dOwotCXJlZyA8PD0gNDsKLQlyZWcgfD0gcmVnX251bTsKLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBzeW50aF9mcmVxX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIFNldCB0aGUgQ2xvY2sgYml0cyB0byA1ME5TICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwotCXJlZyAmPSB+MHhGOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotCi0JLyogV3JpdGUgMHgwMGMwIHRvIExTVyBhbmQgMHgzIHRvIE1TVyBvZiBTeW50aCBDaGlwICovCi0Jc3BpX3N5X3dyaXRlKGN0bCwgU1lOVEhfQ0hJUCwgMHgzMDBjMCk7Ci0KLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCAweDMyKTsKLQotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDEpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMyBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDMpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNiBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDYpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDUpOwotCS8qICMgV3JpdGUgdG8gcmVnaXN0ZXIgOCBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDgpOwotCi0JLyogRklYTUUgQ2xlYXIgdGhlIGNsb2NrIGJpdHMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotfSAvKiBzeW50aF9jaGlwX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBhbnRlbm5hX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgaW50IG51bV9hbnRlbm5hKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3dpdGNoIChudW1fYW50ZW5uYSkgewotCWNhc2UgMToKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDEpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgNyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMCk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDkwKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCA4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAxNik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9JTkFDVCwgMzYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgNzApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMzIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05MSVNUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQUNUSUFOVCwgMyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05DQVBUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCAzMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCA3MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDcwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDQ4KTsKLS8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vdyBhbnRlbm5hIG51bWJlclxuIik7Ci0JfQotfSAvKiBhbnRlbm5hX2luaXQgKi8KLQotc3RhdGljIHZvaWQgY2hhaW5fdXBkYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiBjaGFpbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCWlmIChyZWcgPT0gMHg0KQotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JZWxzZSBpZiAocmVnICE9IDB4MCkKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOwotCWVsc2UgewotCQlpZiAoY2hhaW4gPT0gMyB8fCBjaGFpbiA9PSA2KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMDA1KTsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHg4MjQpOwotCQl9IGVsc2UgaWYgKGNoYWluID09IDEpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCByZWd8MHgxMDAwKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDQpOwotCQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGMzNik7Ci0JCX0KLQl9Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSAwOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlpZiAoY2hhaW4gPT0gNiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAyKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEwMDUpOwotCQl9IGVsc2UgaWYgKGNoYWluIDwgMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMik7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoY2hhaW4gPT0gMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMjAxKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSAyKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDApOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIDB4MTIwMSk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMSkgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAwKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDEpOwotCQl9IGVsc2UgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAxKTsKLQkJfQotCX0KLX0gLyogY2hhaW5fdXBkYXRlICovCi0KLXN0YXRpYyB2b2lkIGFudGVubmFfY29uZmlnKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JLyogV3JpdGUgMHgwIHRvIHRoZSBUWCBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgRW5hYmxlIGJpdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgJj0gfjB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0KLQkvKiBGSVhNRSAqLwotCS8qIFNldCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIG51bWJlciBvZiBBbnRlbm5hZSAqLwotCWFudGVubmFfaW5pdChwcml2LCAzKTsKLQotCS8qIEZJWE1FIFVwZGF0ZSBQb3dlciBUZW1wbGF0ZXMgZm9yIGN1cnJlbnQgdmFsaWQgU3RhdGlvbnMgKi8KLQkvKiBzdGFfcG93ZXJfaW5pdChwcml2LCAwKTsqLwotCi0JLyogRklYTUUgdGhlIG51bWJlciBvZiBjaGFpbnMgc2hvdWxkIGdldCBmcm9tIGVlcHJvbSovCi0JY2hhaW5fdXBkYXRlKHByaXYsIEFHTlhfQ0hBSU5TX01BWCk7Ci19IC8qIGFudGVubmFfY29uZmlnICovCi0KLXZvaWQgY2FsaWJyYXRlX29zY2lsbGF0b3Ioc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgfD0gMHgxMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQkvKiAoUmVzaWR1YWwgREMgQ2FsaWJyYXRpb24pIHRvIENhbGlicmF0aW9uIE1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDIpOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTAwNCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweDNmZik7Ci0JLyogKFRYIExPIENhbGlicmF0aW9uKSB0byBDYWxpYnJhdGlvbiBNb2RlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHg0KTsKLQotCWRvIHsKLQkJdTMyICByZWcxLCByZWcyLCByZWczOwotCQkvKiBFbmFibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZW5hYmxlX3Bvd2VyX3NhdmluZyhwcml2KTsKLQkJLyogU2F2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB0byByZXN0b3JlICovCi0JCXJlZzEgPSBpb3JlYWQzMihjdGwgKyAweDExMDAwKTsKLQkJcmVnMiA9IGlvcmVhZDMyKGN0bCArIDB4ZWM1MCk7Ci0JCXJlZzMgPSBpb3JlYWQzMihjdGwgKyAweGVjNTQpOwotCQl3bWIoKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDAwLCAweGNmZGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIDB4NzApOwotCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwMCwgcmVnMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgcmVnMyk7Ci0JCS8qIERpc2FibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZGlzYWJsZV9wb3dlcl9zYXZpbmcocHJpdik7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAwKTsKLX0gLyogY2FsaWJyYXRlX29zY2lsbGF0b3IgKi8KLQotCi1zdGF0aWMgdm9pZCByYWRpb19jaGFubmVsX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1bnNpZ25lZCBpbnQgZnJlcSA9IHByaXYtPmJhbmQuY2hhbm5lbHNbY2hhbm5lbCAtIDFdLmNlbnRlcl9mcmVxOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCS8qIFNldCBTUEkgQ2xvY2sgdG8gNTAgTnMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBDbGVhciB0aGUgRGlzYWJsZSBUeCBpbnRlcnJ1cHQgYml0IGluIEludGVycnVwdCBNYXNrICovCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0lOVF9NQVNLKTsgKi8KLS8qIAlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQkvKiBCYW5kIFNlbGVjdGlvbiAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgcmVnKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgU2lMYWJzIENoaXAgRnJlcXVlbmN5ICovCi0Jc3ludGhfZnJlcV9zZXQocHJpdiwgY2hhbm5lbCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDIwMDA5OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTEwMCk7Ci0KLQkvKiBMb2FkIHRoZSBNb25pdG9yR2FpbiBUYWJsZSAqLwotCW1vbml0b3JfZ2Fpbl90YWJsZV9pbml0KHByaXYpOwotCi0JLyogTG9hZCB0aGUgVFggRmlyIHRhYmxlICovCi0JdHhfZmlyX3RhYmxlX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDIyKTsKLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHhmZik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyB8PSAweDRmOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDgsIDB4MSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwYywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDA4LCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHhjKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxMCwgMHg2ZSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxNCwgMHg2Yyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQW50ZW5uYSAqLwotCS8qIGFudGVubmFfY2FsaWJyYXRlKHByaXYpOyAqLwotCS8qIENhbGlicmF0ZSB0aGUgVHhMb2NhbE9zY2lsbGF0b3IgKi8KLQljYWxpYnJhdGVfb3NjaWxsYXRvcihwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOSU5JVCwgMHhhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENELCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxOCwgMHhiKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4MCk7Ci0KLQkvKiBXcml0ZSBGcmVxdWVuY3kgdG8gR2FpbiBDb250cm9sIENoYW5uZWwgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWENIQU5FTCwgZnJlcSk7Ci0JLyogV3JpdGUgMHgxNDAwMDAvRnJlcSB0byAweDljMDggKi8KLQlyZWcgPSAweDE0MDAwMC9mcmVxOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwOCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNUKTsKLQlyZWcgJj0gfjB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnICY9IH4weDIwMDA5OwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDApOwotCi0vKiBGSVhNRSBBY2NvcmRpbmcgdG8gTnVtYmVyIG9mIENoYWluczogKi8KLQotLyogCQkJICAgMS4gMTogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwcyAxICsyICAqLwotLyogCQkJICAgMi4gMjogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgKi8KLS8qICAgICAgICAgIDMuIFdyaXRlIDB4MTIwMSB0byBSRiBDaGlwIDEgICovCi0vKiAJCQkgICAzLiAzOiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAxIHRvIFJGIENoaXAgMSArIDIgICovCi0vKiAJCQkgICA0LiA0OiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCArIDEgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgICovCi0KLS8qIAkJCSAgIDUuIDY6ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTIwMSk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIERpc2FibGUgVHggaW50ZXJydXB0IGJpdCBpbiBJbnRlcnJ1cHQgTWFzawotCSAgIChPciAweDIwMDAwIHRvIEludGVycnVwdCBNYXNrKSAqLwotLyogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9JTlRfTUFTSyk7ICovCi0vKiAJcmVnIHw9IElSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIEFudGVubmEgKi8KLQlhbnRlbm5hX2NvbmZpZyhwcml2KTsKLQotCS8qIFdyaXRlIDB4MCB0byBEaXNjb3ZlcnkgTW9kZSBFbmFibGUgZGV0ZWN0IEcsIEIsIEEgcGFja2V0PyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUpOwotCXJlZyB8PSAweDgwMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDApOwotCi0JLyogZW5hYmxlIHJhZGlvIG9uIGFuZCB0aGUgcG93ZXIgTEVEICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQpOwotCXJlZyAmPSB+MHgxOwotCXJlZyB8PSAweDI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCByZWcpOwotfSAvKiByYWRpb19jaGFubmVsX3NldCAqLwotCi1zdGF0aWMgdm9pZCBiYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTcwMCk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MCk7Ci0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjcpOwotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDI3KTsKLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X29mZnNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgY2hhaW4pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIG9mZnNldDsKLQotCWlvd3JpdGUzMigoY2hhaW4pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JdWRlbGF5KDEwKTsKLQlvZmZzZXQgPSAoaW9yZWFkMzIoY3RsICsgQUdOWF9BQ0lfT0ZGU0VUKSk7Ci0JcHJpbnRrKFBGWCAiQ2hhaW4gaXMgMHgleCwgT2Zmc2V0IGlzIDB4JXhcbiIsIGNoYWluLCBvZmZzZXQpOwotfQotCi12b2lkIHByaW50X29mZnNldHMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQlwcmludF9vZmZzZXQocHJpdiwgMCk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDQpOwotCXByaW50X29mZnNldChwcml2LCAxKTsKLQlwcmludF9vZmZzZXQocHJpdiwgNSk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDIpOwotCXByaW50X29mZnNldChwcml2LCA2KTsKLX0KLQotCi1zdHJ1Y3QgY2hhaW5zIHsKLQl1MzIgY2FsaTsJCS8qIGNhbGlicmF0ZSAgdmFsdWUqLwotCi0jZGVmaW5lICBORUVEX0NBTElCUkFURQkJMAotI2RlZmluZSAgU1VDQ0VTU19DQUxJQlJBVEUJMQotCWludCBzdGF0dXM7Ci19OwotCi1zdGF0aWMgdm9pZCBjaGFpbl9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAotCQkJICAgIHVuc2lnbmVkIGludCBudW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIGNhbGlicmEgPSBjaGFpbnNbbnVtXS5jYWxpOwotCi0JaWYgKG51bSA8IDMpCi0JCWNhbGlicmEgfD0gMHgxNDAwOwotCWVsc2UKLQkJY2FsaWJyYSB8PSAweDE1MDA7Ci0KLQlzd2l0Y2ggKG51bSkgewotCWNhc2UgMDoKLQljYXNlIDQ6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCBjYWxpYnJhKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCWNhc2UgNToKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIGNhbGlicmEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JY2FzZSA2OgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgY2FsaWJyYSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0gLyogY2hhaW5fY2FsaWJyYXRlICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY2FsaWJyZXRlX3ZhbHVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBjaGFpbnMgKmNoYWlucywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bSkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgb2Zmc2V0OwotCi0JaW93cml0ZTMyKChudW0pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JLyogRklYTUUgKi8KLQl1ZGVsYXkoMTApOwotCW9mZnNldCA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9PRkZTRVQpKTsKLQotCWlmIChvZmZzZXQgPCAweGYpIHsKLQkJY2hhaW5zW251bV0uc3RhdHVzID0gU1VDQ0VTU19DQUxJQlJBVEU7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobnVtID09IDAgfHwgbnVtID09IDEgfHwgbnVtID09IDIpIHsKLQkJaWYgKDAgPT0gY2hhaW5zW251bV0uY2FsaSkKLQkJCWNoYWluc1tudW1dLmNhbGkgPSAweGZmOwotCQllbHNlCi0JCQljaGFpbnNbbnVtXS5jYWxpLS07Ci0JfSBlbHNlCi0JCWNoYWluc1tudW1dLmNhbGkrKzsKLQotCWNoYWluc1tudW1dLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsaWJyYV9kZWxheShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGkgPSAxMDA7Ci0KLQl3bWIoKTsKLQl3aGlsZSAoLS1pKSB7Ci0JCXJlZyA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9TVEFUVVMpKTsKLQkJaWYgKHJlZyA9PSAweDQwMDApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9Ci0JaWYgKCFpKQotCQlwcmludGsoUEZYICJjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOwotfQotCi12b2lkIGRvX2NhbGlicmF0aW9uKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jc3RydWN0IGNoYWlucyBjaGFpbnNbN107Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0JQUdOWF9UUkFDRTsKLQotCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJaWYgKGkgPT0gMykKLQkJCWNvbnRpbnVlOwotCi0JCWNoYWluc1tpXS5jYWxpID0gMHg3ZjsKLQkJY2hhaW5zW2ldLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotCX0KLQotCS8qIEZJWE1FIDB4MzAwIGlzIGEgbWFnaWMgbnVtYmVyICovCi0JZm9yIChqID0gMDsgaiA8IDB4MzAwOyBqKyspIHsKLQkJaWYgKGNoYWluc1swXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1sxXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1syXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s0XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s1XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s2XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUpCi0JCQlicmVhazsKLQotCQkvKiBBdHRlbnRpb24sIHRoZXJlIGlzIG5vIGNoYWluIDMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQkJCWlmIChjaGFpbnNbaV0uc3RhdHVzID09IE5FRURfQ0FMSUJSQVRFKQotCQkJCWNoYWluX2NhbGlicmF0ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JCS8qIFdyaXRlIDB4MSB0byBDYWxpYnJhdGlvbiBNZWFzdXJlICovCi0JCWlvd3JpdGUzMigoMHgxKSwgY3RsICsgQUdOWF9BQ0lfTUVBU1VSRSk7Ci0JCWNhbGlicmFfZGVsYXkocHJpdik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQotCQkJZ2V0X2NhbGlicmV0ZV92YWx1ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JfQotCXByaW50ayhQRlggIkNsaWJyYXRlIHRpbWVzIGlzICVkXG4iLCBqKTsKLQlwcmludF9vZmZzZXRzKHByaXYpOwotfSAvKiBkb19jYWxpYnJhdGlvbiAqLwotCi12b2lkIGFudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDB4Myk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDB4MWYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0lOQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDB4MjApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAweDY0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCAweDQ2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCAweDNjKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMHgzMCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JLyogRml4bWUgKi8KLQl1ZGVsYXkoODApOwotCS8qICAgIDEuIFNob3VsZCByZWFkIDB4MCAgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JdWRlbGF5KDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwNSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4MWMwMDAwMzI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDAwMDNmMDc7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4NDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGZmOCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ0hBSU5OVU0sIDB4Nik7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxOTg3NCwgMHgwKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxNzAwKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQmFzZUJhbmRGaWx0ZXIgKi8KLQliYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShwcml2KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDIpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIDB4MWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMiwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCi0JLyogTWVhc3VyZSBDYWxpYnJhdGlvbiAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01FQVNVUkUsIDB4MSk7Ci0JY2FsaWJyYV9kZWxheShwcml2KTsKLQotCS8qIGRvIGNhbGlicmF0aW9uICovCi0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHhmKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDApOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDApOwotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIGFudGVubmFfY2FsaWJyYXRlICovCi0KLXZvaWQgX19hbnRlbm5hX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQkvKiBDYWxpYnJhdGUgdGhlIEJhc2VCYW5kRmlsdGVyICovCi0JLyogYmFzZV9iYW5kX2ZpbHRlcl9jYWxpYnJhdGUocHJpdik7ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMik7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQwLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIDB4MWQpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCS8qIE1lYXN1cmUgQ2FsaWJyYXRpb24gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NRUFTVVJFLCAweDEpOwotCWNhbGlicmFfZGVsYXkocHJpdik7Ci0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIpOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIHJlZyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMHgwKTsKLQotCS8qIFdyaXRlIDB4MyBHYWluIENvbnRyb2wgRGlzY292ZXJ5IE1vZGUgKi8KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci19Ci0KLWludCBhZ254X3NldF9jaGFubmVsKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCUFHTlhfVFJBQ0U7Ci0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGFubmVsIGlzICVkICVzXG4iLCBjaGFubmVsLCBfX2Z1bmNfXyk7Ci0JcmFkaW9fY2hhbm5lbF9zZXQocHJpdiwgY2hhbm5lbCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTdkYjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLQotdm9pZCBoYXNoX3JlYWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyIHJlZ2hpLCB1MzIgcmVnbG8sIHU4IHN0YV9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQotCXJlZ2xvICY9IDB4RkZGRjsKLQlyZWdsbyB8PSAweDMwMDAwMDAwOwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXByaW50ayhQRlggIlJYIGhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwotfQotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZ2hpLCByZWdsbzsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVcGRhdGUgaGFzaCB0YWJsZTogSW52YWxpZCBod2FkZHIhXG4iKTsKLQotCXJlZ2hpID0gbWFjX2FkZHJbMF0gPDwgMjQgfCBtYWNfYWRkclsxXSA8PCAxNiB8IG1hY19hZGRyWzJdIDw8IDggfCBtYWNfYWRkclszXTsKLQlyZWdsbyA9IG1hY19hZGRyWzRdIDw8IDggfCBtYWNfYWRkcls1XTsKLQlyZWdsbyB8PSAweDEwMDAwMDAwOwkvKiBTZXQgaGFzaCBjb21tbWFuZCAqLwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpZiAoIShyZWdsbyAmIDB4ODAwMDAwMDApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVXBkYXRlIGhhc2ggdGFibGUgZmFpbGVkXG4iKTsKLX0KLQotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JcmVnbG8gJj0gMHhGRkZGOwotCXJlZ2xvIHw9IDB4MjAwMDAwMDA7Ci0JcmVnbG8gfD0gMHg0MDAwMDAwMDsJLyogU2V0IHN0YXR1cyBidXN5ICovCi0JcmVnbG8gfD0gc3RhX2lkIDw8IDE2OwotCi0JaW93cml0ZTMyKDAsIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0KLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0KLX0KLQotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWdoaSwgcmVnbG87Ci0KLQlyZWdsbyA9IDB4NDAwMDAwMDA7ICAJLyogc3RhdHVzIGJpdCAqLwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpb3dyaXRlMzIoc3RhX2lkIDw8IDE2LCBjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSk7Ci0KLQl1ZGVsYXkoODApOwotCi0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlwcmludGsoUEZYICJoYXNoIGZsYWcgaXMgOiAlLjh4XG4iLCByZWdoaSk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfTVNUKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9MU1QpOwotCXByaW50ayhQRlggImhhc2ggZHVtcCBtc3QgbHN0OiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBKTsKLQlwcmludGsoUEZYICJoYXNoIGR1bXAgZGF0YTogJS44eFxuIiwgcmVnaGkpOwotfQotCi12b2lkIGdldF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3Bvd2VyICpwb3dlciwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JbWVtY3B5X2Zyb21pbyhwb3dlciwgY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKLQkJICAgICAgc2l6ZW9mKCpwb3dlcikpOwotfQotCi1pbmxpbmUgdm9pZAotc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQkvKiBGSVhNRSAgIDIuIFdyaXRlIFRlbXBsYXRlIHRvIG9mZnNldCArIHN0YXRpb24gbnVtYmVyICAqLwotCW1lbWNweV90b2lvKGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCi0JCSAgICBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOwotfQotCi0KLXZvaWQgZ2V0X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgKnR4X3dxLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCW1lbWNweV9mcm9taW8odHhfd3EsIGRhdGEgKyBBR05YX1BEVV9UWF9XUSArIHNpemVvZigqdHhfd3EpICogU1RBX1RYX1dRX05VTSAqIHN0YV9pZHggKwotCQkgICAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgIHNpemVvZigqdHhfd3EpKTsKLQotfQotCi1pbmxpbmUgdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JbWVtY3B5X3RvaW8oZGF0YSArIEFHTlhfUERVX1RYX1dRICsgc2l6ZW9mKCp0eF93cSkgKiBTVEFfVFhfV1FfTlVNICogc3RhX2lkeCArCi0JCSAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgdHhfd3EsIHNpemVvZigqdHhfd3EpKTsKLX0KLQotCi12b2lkIGdldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfZnJvbWlvKHN0YSwgZGF0YSArIEFHTlhfUERVUE9PTCArIHNpemVvZigqc3RhKSAqIHN0YV9pZHgsCi0JCSAgICAgIHNpemVvZigqc3RhKSk7Ci19Ci0KLWlubGluZSB2b2lkIHNldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKLQkJICAgIHN0YSwgc2l6ZW9mKCpzdGEpKTsKLX0KLQotLyogRklYTUUgKi8KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCW1lbXNldCgmcG93ZXIsIDAsIHNpemVvZihwb3dlcikpOwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMHgxKTsKLQlwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBzdGFfaWR4KTsKLQl1ZGVsYXkoNDApOwotfSAvKiBhZGRfcG93ZXJfdGVtcGxhdGUgKi8KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotc3RhdGljIHZvaWQgc3RhX3R4X3dvcmtxdWV1ZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YV90eF93cSB0eF93cTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBpOwotCi0JbWVtc2V0KCZ0eF93cSwgMCwgc2l6ZW9mKHR4X3dxKSk7Ci0KLQlyZWcgPSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfVkFMSUQsIFdPUktfUVVFVUVfVkFMSURfU0hJRlQsIDEpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDEpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMCk7ICovCi0JdHhfd3EucmVnMiB8PSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogU3VwcG9zZSBhbGwgOCB0cmFmZmljIGNsYXNzIGFyZSB1c2VkICovCi0JZm9yIChpID0gMDsgaSA8IFNUQV9UWF9XUV9OVU07IGkrKykKLQkJc2V0X3N0YV90eF93cShwcml2LCAmdHhfd3EsIHN0YV9pZHgsIGkpOwotfSAvKiBzdGFfdHhfd29ya3F1ZXVlX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBzdGFfdHJhZmZpY19pbml0KHN0cnVjdCBhZ254X3N0YV90cmFmZmljICp0cmFmZmljKQotewotCXUzMiByZWc7Ci0JbWVtc2V0KHRyYWZmaWMsIDAsIHNpemVvZigqdHJhZmZpYykpOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhORVdfUEFDS0VULCBORVdfUEFDS0VUX1NISUZULCAxKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX1ZBTElELCBUUkFGRklDX1ZBTElEX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfQUNLX1RZUEUsIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQsIDEpOyAqLwotCXRyYWZmaWMtPnJlZzAgPSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogCTMuIHNldHRpbmcgUlggU2VxdWVuY2UgTnVtYmVyIHRvIDQwOTUgKi8KLQlyZWcgPSBhZ254X3NldF9iaXRzKFJYX1NFUVVFTkNFX05VTSwgUlhfU0VRVUVOQ0VfTlVNX1NISUZULCA0MDk1KTsKLQl0cmFmZmljLT5yZWcxID0gY3B1X3RvX2xlMzIocmVnKTsKLX0KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotdm9pZCBzdGFfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQkvKiBGSVhNRSB0aGUgbGVuZ3RoIG9mIHN0YSBpcyAyNTYgYnl0ZXMgSXMgdGhhdAotCSAqIGRhbmdlcm91cyB0byBzdGFjayBvdmVyZmxvdz8gKi8KLQlzdHJ1Y3QgYWdueF9zdGEgc3RhOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQltZW1zZXQoJnN0YSwgMCwgc2l6ZW9mKHN0YSkpOwotCS8qIFNldCB2YWxpZCB0byAxICovCi0JcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX1ZBTElELCBTVEFUSU9OX1ZBTElEX1NISUZULCAxKTsKLQkvKiBTZXQgRW5hYmxlIENvbmNhdGVuYXRpb24gdG8gMCAoPykgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhFTkFCTEVfQ09OQ0FURU5BVElPTiwgRU5BQkxFX0NPTkNBVEVOQVRJT05fU0hJRlQsIDApOwotCS8qIFNldCBFbmFibGUgRGVjb21wcmVzc2lvbiB0byAwICg/KSAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKEVOQUJMRV9ERUNPTVBSRVNTSU9OLCBFTkFCTEVfREVDT01QUkVTU0lPTl9TSElGVCwgMCk7Ci0Jc3RhLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQkvKiBJbml0aWFsaXplIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlcyBieTogKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlzdGFfdHJhZmZpY19pbml0KHN0YS50cmFmZmljICsgaSk7Ci0KLQlzZXRfc3RhKHByaXYsICZzdGEsIHN0YV9pZHgpOwotCXN0YV90eF93b3JrcXVldWVfaW5pdChwcml2LCBzdGFfaWR4KTsKLX0gLyogc3RhX2Rlc2NyaXB0b3JfaW5pdCAqLwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTA0ZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotI2lmbmRlZiBBR05YX1NUQV9IXwotI2RlZmluZSBBR05YX1NUQV9IXwotCi0jZGVmaW5lIFNUQV9UWF9XUV9OVU0JOAkvKiBUaGUgbnVtYmVyIG9mIFRYIHdvcmtxdWV1ZSBvbmUgU1RBIGhhcyAqLwotCi1zdHJ1Y3QgYWdueF9oYXNoX2NtZCB7Ci0JX19iZTMyIGNtZGhpOwotI2RlZmluZSBNQUNMTwkJMHhGRkZGMDAwMAotI2RlZmluZSBNQUNMT19TSElGVAkxNgotI2RlZmluZSBTVEFfSUQJCTB4MDAwMEZGRjAKLSNkZWZpbmUgU1RBX0lEX1NISUZUCTQKLSNkZWZpbmUgQ01ECQkweDAwMDAwMDBDCi0jZGVmaW5lIENNRF9TSElGVAkyCi0jZGVmaW5lIFNUQVRVUwkJMHgwMDAwMDAwMgotI2RlZmluZSBTVEFUVVNfU0hJRlQJMQotI2RlZmluZSBQQVNTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFBBU1NfU0hJRlQJMQotCV9fYmUzMiBjbWRsbzsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLS8qCi0gKiBTdGF0aW9uIFBvd2VyIFRlbXBsYXRlCi0gKiBGSVhNRSBKdXN0IGZvciBhZ24xMDAgeWV0Ci0gKi8KLXN0cnVjdCBhZ254X3N0YV9wb3dlciB7Ci0JX19sZTMyIHJlZzsKLSNkZWZpbmUgU0lHTkFMCQkJMHgwMDAwMDBGRiAvKiBzaWduYWwgKi8KLSNkZWZpbmUgU0lHTkFMX1NISUZUCQkwCi0jZGVmaW5lIFJBVEUJCQkweDAwMDAwRjAwCi0jZGVmaW5lIFJBVEVfU0hJRlQJCTgKLSNkZWZpbmUgVElGUwkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgVElGU19TSElGVAkJMTIKLSNkZWZpbmUgRURDRgkJCTB4MDAwMDIwMDAKLSNkZWZpbmUgRURDRl9TSElGVAkJMTMKLSNkZWZpbmUgQ0hBTk5FTF9CT05ECQkweDAwMDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfQk9ORF9TSElGVAkxNAotI2RlZmluZSBQSFlfTU9ERQkJMHgwMDAzODAwMAotI2RlZmluZSBQSFlfTU9ERV9TSElGVAkJMTUKLSNkZWZpbmUgUE9XRVJfTEVWRUwJCTB4MDA3QzAwMDAKLSNkZWZpbmUgUE9XRVJfTEVWRUxfU0hJRlQJMTgKLSNkZWZpbmUgTlVNX1RSQU5TTUlUVEVSUwkweDAwODAwMDAwCi0jZGVmaW5lIE5VTV9UUkFOU01JVFRFUlNfU0hJRlQJMjMKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0vKgotICogVFggV29ya3F1ZXVlIERlc2NyaXB0b3IKLSAqLwotc3RydWN0IGFnbnhfc3RhX3R4X3dxIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPVwkweEZGMDAwMDAwIC8qIEhlYWQgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPV19TSElGVAkyNAotI2RlZmluZSBUQUlMX1BPSU5URVIJCTB4MDBGRkZGRkYgLyogVGFpbCBwb2ludGVyICovCi0jZGVmaW5lIFRBSUxfUE9JTlRFUl9TSElGVAkwCi0KLQlfX2xlMzIgcmVnMzsKLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XCSAgICAgICAgMHhGRkZGMDAwMAkvKiBBQ0sgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XX1NISUZUCTE2Ci0jZGVmaW5lIEhFQURfUE9JTlRFUl9ISUdICTB4MDAwMEZGRkYJLyogSGVhZCBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0hJR0hfU0hJRlQJMAotCi0JX19sZTMyIHJlZzE7Ci0vKiBBQ0sgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlQJMHhGRkYwMDAwMAotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlRfU0hJRlQJMjAKLS8qIEhlYWQgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9UQUlMX1BBQ0tfQ05UCTB4MDAwRkZGMDAKLSNkZWZpbmUgSEVBRF9USU1PVVRfVEFJTF9QQUNLX0NOVF9TSElGVAk4Ci0jZGVmaW5lIEFDS19QT0lOVEVSX0hJR0gJICAgICAgICAweDAwMDAwMEZGIC8qIEFDSyBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfSElHSF9TSElGVAkJMAotCi0JX19sZTMyIHJlZzI7Ci0jZGVmaW5lIFdPUktfUVVFVUVfVkFMSUQJCTB4ODAwMDAwMDAgLyogdmFsaWQgKi8KLSNkZWZpbmUgV09SS19RVUVVRV9WQUxJRF9TSElGVAkJMzEKLSNkZWZpbmUgV09SS19RVUVVRV9BQ0tfVFlQRQkJMHg0MDAwMDAwMCAvKiBBQ0sgdHlwZSAqLwotI2RlZmluZSBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZUCTMwCi0vKiBIZWFkIHRpbWVvdXQgd2luZG93IGxpbWl0IGZyYWdtZW50YXRpb24gY291bnQgKi8KLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9GUkFHX0NOVAkweDNGRkYwMDAwCi0jZGVmaW5lIEhFQURfVElNT1VUX1dJTl9MSU1fRlJBR19DTlRfU0hJRlQJMTYKLS8qIEhlYWQgdGltZW91dCB3aW5kb3cgbGltaXQgYnl0ZSBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UCTB4MDAwMEZGRkYKLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9CWVRFX0NOVF9TSElGVAkgMAotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyoKLSAqIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlCi0gKi8KLXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgQUNLX1RJTU9VVF9DTlQJCTB4RkY4MDAwMDAgLyogQUNLIFRpbWVvdXQgQ291bnRzICovCi0jZGVmaW5lIEFDS19USU1PVVRfQ05UX1NISUZUCTIzCi0jZGVmaW5lIFRSQUZGSUNfQUNLX1RZUEUJMHgwMDYwMDAwMCAvKiBBQ0sgVHlwZSAqLwotI2RlZmluZSBUUkFGRklDX0FDS19UWVBFX1NISUZUCTIxCi0jZGVmaW5lIE5FV19QQUNLRVQJCTB4MDAxMDAwMDAgLyogTmV3IFBhY2tldCAgKi8KLSNkZWZpbmUgTkVXX1BBQ0tFVF9TSElGVAkyMAotI2RlZmluZSBUUkFGRklDX1ZBTElECQkweDAwMDgwMDAwIC8qIFZhbGlkICovCi0jZGVmaW5lIFRSQUZGSUNfVkFMSURfU0hJRlQJMTkKLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUgkweDAwMDdGRkZGIC8qIFJYIEhlYWRlciBEZXNjcmlwdGVyIHBvaW50ZXIgKi8KLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUl9TSElGVAkgMAotCi0JX19sZTMyIHJlZzE7Ci0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVAJMHhGRkZGMDAwMCAvKiBSWCBQYWNrZXQgVGltZXN0YW1wICovCi0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVBfU0hJRlQJMTYKLSNkZWZpbmUgVFJBRkZJQ19SRVNFUlZFRAkweDAwMDBFMDAwIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIFRSQUZGSUNfUkVTRVJWRURfU0hJRlQgIDEzCi0jZGVmaW5lIFNWCQkJMHgwMDAwMTAwMCAvKiBzdiAqLwotI2RlZmluZSBTVl9TSElGVAkJMTIKLSNkZWZpbmUgUlhfU0VRVUVOQ0VfTlVNCQkweDAwMDAwRkZGIC8qIFJYIFNlcXVlbmNlIE51bWJlciAqLwotI2RlZmluZSBSWF9TRVFVRU5DRV9OVU1fU0hJRlQJMAotCi0JX19sZTMyIHR4X3JlcGxheV9jbnRfbG93OyAvKiBUWCBSZXBsYXkgQ291bnRlciBMb3cgKi8KLQotCV9fbGUxNiB0eF9yZXBsYXlfY250X2hpZ2g7IC8qIFRYIFJlcGxheSBDb3VudGVyIEhpZ2ggKi8KLQlfX2xlMTYgcnhfcmVwbGF5X2NudF9oaWdoOyAvKiBSWCBSZXBsYXkgQ291bnRlciBIaWdoICovCi0KLQlfX2JlMzIgcnhfcmVwbGF5X2NudF9sb3c7IC8qIFJYIFJlcGxheSBDb3VudGVyIExvdyAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qCi0gKiBTdGF0aW9uIERlc2NyaXB0b3JzCi0gKi8KLXN0cnVjdCBhZ254X3N0YSB7Ci0JX19sZTMyIHR4X3Nlc3Npb25fa2V5c1s0XTsgLyogVHJhbnNtaXQgU2Vzc2lvbiBLZXkgKDAtMykgKi8KLQlfX2xlMzIgcnhfc2Vzc2lvbl9rZXlzWzRdOyAvKiBSZWNlaXZlIFNlc3Npb24gS2V5ICgwLTMpICovCi0KLQlfX2xlMzIgcmVnOwotI2RlZmluZSBJRF8xCQkJMHhDMDAwMDAwMCAvKiBpZCAxICovCi0jZGVmaW5lIElEXzFfU0hJRlQJCTMwCi0jZGVmaW5lIElEXzAJCQkweDMwMDAwMDAwIC8qIGlkIDAgKi8KLSNkZWZpbmUgSURfMF9TSElGVAkJMjgKLSNkZWZpbmUgRU5BQkxFX0NPTkNBVEVOQVRJT04JMHgwRkYwMDAwMCAvKiBFbmFibGUgY29uY2F0ZW5hdGlvbiAqLwotI2RlZmluZSBFTkFCTEVfQ09OQ0FURU5BVElPTl9TSElGVAkyMAotI2RlZmluZSBFTkFCTEVfREVDT01QUkVTU0lPTgkweDAwMEZGMDAwIC8qIEVuYWJsZSBkZWNvbXByZXNzaW9uICovCi0jZGVmaW5lIEVOQUJMRV9ERUNPTVBSRVNTSU9OX1NISUZUCTEyCi0jZGVmaW5lIFNUQV9SRVNFUlZFRAkJMHgwMDAwMEMwMCAvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBTVEFfUkVTRVJWRURfU0hJRlQJMTAKLSNkZWZpbmUgRUFQCQkJMHgwMDAwMDIwMCAvKiBFQVAgKi8KLSNkZWZpbmUgRUFQX1NISUZUCQk5Ci0jZGVmaW5lIEVEX05VTEwJCQkweDAwMDAwMTAwIC8qIEVEIE5VTEwgKi8KLSNkZWZpbmUgRURfTlVMTF9TSElGVAkJOAotI2RlZmluZSBFTkNSWVBUSU9OX1BPTElDWQkweDAwMDAwMEUwIC8qIEVuY3J5cHRpb24gUG9saWN5ICovCi0jZGVmaW5lIEVOQ1JZUFRJT05fUE9MSUNZX1NISUZUIDUKLSNkZWZpbmUgREVGSU5FRF9LRVlfSUQJCTB4MDAwMDAwMTggLyogRGVmaW5lZCBLZXkgSUQgKi8KLSNkZWZpbmUgREVGSU5FRF9LRVlfSURfU0hJRlQJMwotI2RlZmluZSBGSVhFRF9LRVkJCTB4MDAwMDAwMDQgLyogRml4ZWQgS2V5ICovCi0jZGVmaW5lIEZJWEVEX0tFWV9TSElGVAkJMgotI2RlZmluZSBLRVlfVkFMSUQJCTB4MDAwMDAwMDIgLyogS2V5IFZhbGlkICovCi0jZGVmaW5lIEtFWV9WQUxJRF9TSElGVAkJMQotI2RlZmluZSBTVEFUSU9OX1ZBTElECQkweDAwMDAwMDAxIC8qIFN0YXRpb24gVmFsaWQgKi8KLSNkZWZpbmUgU1RBVElPTl9WQUxJRF9TSElGVAkwCi0KLQlfX2xlMzIgdHhfYWVzX2Jsa3NfdW5pY2FzdDsgLyogVFggQUVTIEJsa3MgVW5pY2FzdCAqLwotCV9fbGUzMiByeF9hZXNfYmxrc191bmljYXN0OyAvKiBSWCBBRVMgQmxrcyBVbmljYXN0ICovCi0KLQlfX2xlMTYgYWVzX2Zvcm1hdF9lcnJfdW5pY2FzdF9jbnQ7IC8qIEFFUyBGb3JtYXQgRXJyb3IgVW5pY2FzdCBDb3VudHMgKi8KLQlfX2xlMTYgYWVzX3JlcGxheV91bmljYXN0OyAvKiBBRVMgUmVwbGF5IFVuaWNhc3QgKi8KLQotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfdW5pY2FzdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgVW5pY2FzdCAqLwotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfZGVmYXVsdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgZGVmYXVsdCAqLwotCi0JX19sZTE2IHNpbmdsZV9yZXRyeV9wYWNrZXRzOyAvKiBTaW5nbGUgUmV0cnkgUGFja2V0cyAqLwotCV9fbGUxNiBmYWlsZWRfdHhfcGFja2V0czsgLyogRmFpbGVkIFR4IFBhY2tldHMgKi8KLQotCV9fbGUxNiBtdXRpX3JldHJ5X3BhY2tldHM7IC8qIE11bHRpcGxlIFJldHJ5IFBhY2tldHMgKi8KLQlfX2xlMTYgYWNrX3RpbWVvdXRzOwkvKiBBQ0sgVGltZW91dHMgKi8KLQotCV9fbGUxNiBmcmFnX3R4X2NudDsJLyogRnJhZ21lbnQgVFggQ291bnRzICovCi0JX19sZTE2IHJ0c19icnFfc2VudDsJLyogUlRTIEJycSBTZW50ICovCi0KLQlfX2xlMTYgdHhfcGFja2V0czsJLyogVFggUGFja2V0cyAqLwotCV9fbGUxNiBjdHNfYmFja190aW1lb3V0OyAvKiBDVFMgQmFjayBUaW1lb3V0ICovCi0KLQlfX2xlMzIgcGh5X3N0YXRzX2hpZ2g7CS8qIFBIWSBTdGF0cyBIaWdoICovCi0JX19sZTMyIHBoeV9zdGF0c19sb3c7CS8qIFBIWSBTdGF0cyBMb3cgKi8KLQotCXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHRyYWZmaWNbOF07CS8qIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlICg4KSAqLwotCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAwIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczFfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDEgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzMl9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgMiBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MzX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAzIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczRfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDQgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzNV9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgNSBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3M2X2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyA2IEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczdfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDcgRnJhZ21lbnQgU3VjY2VzcyAqLwotCi0JX19sZTE2IG51bV9mcmFnX25vbl9wcmltZV9yYXRlczsgLyogbnVtYmVyIG9mIEZyYWdtZW50cyBmb3Igbm9uLXByaW1lIHJhdGVzICovCi0JX19sZTE2IGFja190aW1lb3V0X25vbl9wcmltZV9yYXRlczsgLyogQUNLIFRpbWVvdXQgZm9yIG5vbi1wcmltZSByYXRlcyAqLwotCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF9iZWFjb25faGRyIHsKLQlzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgcG93ZXI7IC8qIFR4IFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgICovCi0JdTggcGh5X2hkcls2XTsJCS8qIFBIWSBIZHIgKi8KLQl1OCBmcmFtZV9sZW5fbG87CS8qIEZyYW1lIExlbmd0aCBMbyAqLwotCXU4IGZyYW1lX2xlbl9oaTsJLyogRnJhbWUgTGVuZ3RoIEhpICovCi0JdTggbWFjX2hkclsyNF07CQkvKiBNQUMgSGVhZGVyICovCi0JLyogRklYTUUgKi8KLQkvKiA4MDIuMTEoYWJnKSBiZWFjb24gKi8KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKTsKLXZvaWQgaGFzaF9yZWFkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiByZWdoaSwgdTMyIHJlZ2xvLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKTsKLQotdm9pZCBnZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsIHVuc2lnbmVkIGludCBzdGFfaWR4KTsKLXZvaWQgc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci12b2lkIGdldF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3R4X3dxICp0eF93cSwKLQkJICAgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpOwotdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KTsKLXZvaWQgZ2V0X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGEgKnN0YSwgdW5zaWduZWQgaW50IHN0YV9pZHgpOwotdm9pZCBzZXRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YSAqc3RhLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci0KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG51bSk7Ci12b2lkIHN0YV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBudW0pOwotCi0jZW5kaWYgLyogQUdOWF9TVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTJmZWY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCB1MzIKLXR4X2Zpcl90YWJsZVtdID0geyAweDE5LCAweDVkLCAweGNlLCAweDE1MSwgMHgxYzMsIDB4MWZmLCAweDFlYSwgMHgxN2MsIDB4Y2YsCi0JCSAgIDB4MTksIDB4MzhlLCAweDM1MCwgMHgzNjIsIDB4M2FkLCAweDUsIDB4NDQsIDB4NTksIDB4NDksCi0JCSAgIDB4MjEsIDB4M2Y3LCAweDNlMCwgMHgzZTMsIDB4M2YzLCAweDAgfTsKLQotdm9pZCB0eF9maXJfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfZmlyX3RhYmxlKTsgaSsrKQotCQlpb3dyaXRlMzIodHhfZmlyX3RhYmxlW2ldLCBjdGwgKyBBR05YX0ZJUl9CQVNFICsgaSo0KTsKLX0gLyogZmlyX3RhYmxlX3NldHVwICovCi0KLQotc3RhdGljIGNvbnN0IHUzMgotZ2Fpbl90YWJsZVtdID0geyAweDgsIDB4OCwgMHhmLCAweDEzLCAweDE3LCAweDFiLCAweDFmLCAweDIzLCAweDI3LCAweDJiLAotCQkgMHgyZiwgMHgzMywgMHgzNywgMHgzYiwgMHgzZiwgMHg0MywgMHg0NywgMHg0YiwgMHg0ZiwKLQkJIDB4NTMsIDB4NTcsIDB4NWIsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsCi0JCSAweDVmLCAweDVmLCAweDVmLCAweDVmIH07Ci0KLXZvaWQgZ2Fpbl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnYWluX3RhYmxlKTsgaSsrKSB7Ci0JCWlvd3JpdGUzMihnYWluX3RhYmxlW2ldLCBjdGwgKyBBR05YX0dBSU5fVEFCTEUgKyBpKjQpOwotCQlpb3dyaXRlMzIoZ2Fpbl90YWJsZVtpXSwgY3RsICsgQUdOWF9HQUlOX1RBQkxFICsgaSo0ICsgMHg4MCk7Ci0JfQotfSAvKiBnYWluX3RhYmxlX2luaXQgKi8KLQotdm9pZCBtb25pdG9yX2dhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDB4NDQ7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4NDQ7IGkgPCAweDY0OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDY0OyBpIDwgMHg5NDsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHg5NDsgaSA8IDB4ZGM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4ZGM7IGkgPCAweDE0ODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxNDg7IGkgPCAweDFlODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxZTg7IGkgPD0gMHgxZmM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotfSAvKiBtb25pdG9yX2dhaW5fdGFibGVfaW5pdCAqLwotCi0KLXZvaWQgcm91dGluZ190YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IHR5cGUsIHN1YnR5cGU7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgMHgzOyB0eXBlKyspIHsKLQkJZm9yIChzdWJ0eXBlID0gMDsgc3VidHlwZSA8IDB4MTA7IHN1YnR5cGUrKykgewotCQkJLyogMS4gU2V0IFJvdXRpbmcgdGFibGUgdG8gUi9XIGFuZCB0byBSZXR1cm4gc3RhdHVzIG9uIFJlYWQgKi8KLQkJCXJlZyA9ICh0eXBlIDw8IFJPVVRBQl9UWVBFX1NISUZUKSB8Ci0JCQkJKHN1YnR5cGUgPDwgUk9VVEFCX1NVQlRZUEVfU0hJRlQpOwotCQkJcmVnIHw9ICgxIDw8IFJPVVRBQl9SV19TSElGVCkgfCAoMSA8PCBST1VUQUJfU1RBVFVTX1NISUZUKTsKLQkJCWlmICh0eXBlID09IFJPVVRBQl9UWVBFX0RBVEEpIHsKLQkJCQkvKiBOVUxMIGdvZXMgdG8gUkZQICovCi0JCQkJaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTCkKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX1JGUDsgKi8KLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7Ci0JCQkJLyogUU9TIE5VTEwgZ29lcyB0byBDUFUgKi8KLQkJCQllbHNlIGlmIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTEwpCi0JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwotCQkJCS8qIEFsbCBEYXRhIGFuZCBRT1MgZGF0YSBzdWJ0eXBlcyBnbyB0byBFbmNyeXB0aW9uICovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9EQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFQT0xMQUNLKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0tQT0xMKSkKLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9FTkNSWTsKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsgKi8KLQkJCQkvKkRyb3AgTlVMTCBhbmQgUU9TIE5VTEwgYWNrLCBwb2xsIGFuZCBwb2xsIGFjayovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTEFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTFBPTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTEFDSykpCi0vKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9EUk9QOyAqLwotCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVnIHw9IChST1VUQUJfUk9VVEVfQ1BVKTsKLQkJCX0KLQkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX1JPVVRBQik7Ci0JCQkvKiBDaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgc3RhdHVzIGJpdCBjbGVhcmVkICovCi0JCQlyb3V0aW5nX3RhYmxlX2RlbGF5KCk7Ci0JCX0KLQl9Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotfSAvKiByb3V0aW5nX3RhYmxlX2luaXQgKi8KLQotdm9pZCB0eF9lbmdpbmVfbG9va3VwX3RibF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gMjg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4YjAwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAzMjsgaSA8PSAxMjA7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgxZTU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhiMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSAxMjg7IGkgPD0gMTU2OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gMTYwOyBpIDw9IDI0ODsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDE4NTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLQotCWZvciAoaSA9IDI1NjsgaSA8PSAyODQ7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4OTgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAyODg7IGkgPD0gMzc2OyBpICs9IDgpIHsKLQkJaW93cml0ZTMyKDB4MWE1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQkJaW93cml0ZTMyKDB4MTg1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpICsgNCk7Ci0JfQotCi0JZm9yIChpID0gNTEyOyBpIDw9IDU0MDsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCWZvciAoaSA9IDU0NDsgaSA8PSA2MzI7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgyMDU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSA2NDA7IGkgPD0gNjY4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gNjcyOyBpIDw9IDc2NDsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDIyNTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjI2YjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgQUdOWF9UQUJMRV9IXwotI2RlZmluZSBBR05YX1RBQkxFX0hfCi0KLXZvaWQgdHhfZmlyX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGdhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgbW9uaXRvcl9nYWluX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHJvdXRpbmdfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgdHhfZW5naW5lX2xvb2t1cF90YmxfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLQotI2VuZGlmIC8qIEFHTlhfVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkYjQxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzYgKzAsMCBAQAotLyoqCi0gKiBBaXJnbyBNSU1PIHdpcmVsZXNzIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPgotCi0gKiBUaGFua3MgZm9yIEplZmYgV2lsbGlhbXMgPGFuZ2VsYmFuZUBnbWFpbC5jb20+IGRvIHJldmVyc2UgZW5naW5lZXIKLSAqIHdvcmtzIGFuZCBwdWJsaXNoZWQgdGhlIFNQRUNTIGF0IGh0dHA6Ly9haXJnby53ZHdjb25zdWx0aW5nLm5ldC9teW1vaW4KLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlICJhZ254LmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotdW5zaWduZWQgaW50IHJ4X2ZyYW1lX2NudDsKLS8qIHVuc2lnbmVkIGludCBsb2NhbF90eF9zZW50X2NudCA9IDA7ICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3J4X2VuZ2luZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWlvd3JpdGUzMigweDEwMCwgY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCS8qIFdhaXQgZm9yIFJYIENvbnRyb2wgdG8gaGF2ZSB0aGUgRGlzYWJsZSBSeCBJbnRlcnJ1cHQgKDB4MTAwKSBzZXQgKi8KLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcnhfZW5naW5lKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW93cml0ZTMyKDB4ODAsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLWlubGluZSB2b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcnhfZW5naW5lKHByaXYpOwotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQlyZWcgJj0gfjB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLX0KLQotaW5saW5lIHZvaWQgZW5hYmxlX3J4X2ludGVycnVwdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENGRyk7Ci0JcmVnIHw9IDB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQllbmFibGVfcnhfZW5naW5lKHByaXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnhfZGVzY19pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZHgpCi17Ci0Jc3RydWN0IGFnbnhfZGVzYyAqZGVzYyA9IHByaXYtPnJ4LmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpZHg7Ci0KLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0KLQlpbmZvLT5kbWFfbGVuID0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcik7Ci0JaW5mby0+c2tiID0gZGV2X2FsbG9jX3NrYihpbmZvLT5kbWFfbGVuKTsKLQlpZiAoaW5mby0+c2tiID09IE5VTEwpCi0JCWFnbnhfYnVnKCJyZWZpbGwgZXJyIik7Ci0KLQlpbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihpbmZvLT5za2IpLAotCQkJCSAgICAgICBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JlaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JLyogQ2F1c2UgaWVlZTgwMjExIHdpbGwgZnJlZSB0aGUgc2tiIGJ1ZmZlciwgc28gd2UgbmVlZG4ndCB0byBmcmVlIGl0IGFnYWluPyEgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JcnhfZGVzY19pbml0KHByaXYsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JldXNpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+cnguZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+cnguaW5mbyArIGlkeDsKLQotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ4X2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT5yeC5kZXNjICsgaWR4OwotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLCBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWlmIChpbmZvLT5za2IpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX190eF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MsIHN0cnVjdCBhZ254X2luZm8gKmluZm8pCi17Ci0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQkvKiBUT0RPIG1ha2Ugc3VyZSBtYXBwaW5nLCBza2IgYW5kIGxlbiBhcmUgY29uc2lzdGVuY3kgKi8KLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLAotCQkJCSBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4bV9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhtLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4bS5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4ZF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhkLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4ZC5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLWludCBmaWxsX3JpbmdzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JcHJpdi0+dHhkLmlkeF9zZW50ID0gcHJpdi0+dHhtLmlkeF9zZW50ID0gMDsKLQlwcml2LT5yeC5pZHggPSBwcml2LT50eG0uaWR4ID0gcHJpdi0+dHhkLmlkeCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnguc2l6ZTsgaSsrKQotCQlyeF9kZXNjX2luaXQocHJpdiwgaSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4bS5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4bS5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4bS5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4ZC5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4ZC5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4ZC5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIGNhcmQgUlggVFhNIGFuZCBUWEQgYWRkcmVzcyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ01TVEFSVCwgcHJpdi0+cnguZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENNRU5ELCBwcml2LT50eG0uZG1hKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTVNUQVJULCBwcml2LT50eG0uZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWE1FTkQsIHByaXYtPnR4ZC5kbWEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEU1RBUlQsIHByaXYtPnR4ZC5kbWEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYREVORCwgcHJpdi0+dHhkLmRtYSArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+dHhkLnNpemUpOwotCi0JLyogRklYTUUgUmVsaW5xdWlzaCBjb250cm9sIG9mIHJpbmdzIHRvIGNhcmQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JcmVnICY9IH4weDgwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIHJlZyk7Ci0JcmV0dXJuIDA7Ci19IC8qIGZpbGxfcmluZ3MgKi8KLQotdm9pZCB1bmZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4LnNpemU7IGkrKykKLQkJcnhfZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eG0uc2l6ZTsgaSsrKQotCQl0eG1fZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eGQuc2l6ZTsgaSsrKQotCQl0eGRfZGVzY19mcmVlKHByaXYsIGkpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBFeHRyYWN0IHRoZSBiaXRyYXRlIG91dCBvZiBhIENDSyBQTENQIGhlYWRlci4KLSAgIGNvcHkgZnJvbSBiY200M3h4IGRyaXZlciAqLwotc3RhdGljIGlubGluZSB1OCBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKF9fYmUzMiAqcGh5aGRyXzExYikKLXsKLQkvKiBGSVhNRSAqLwotCXN3aXRjaCAoKih1OCAqKXBoeWhkcl8xMWIpIHsKLQljYXNlIDB4MEE6Ci0JCXJldHVybiAwOwotCWNhc2UgMHgxNDoKLQkJcmV0dXJuIDE7Ci0JY2FzZSAweDM3OgotCQlyZXR1cm4gMjsKLQljYXNlIDB4NkU6Ci0JCXJldHVybiAzOwotCX0KLQlhZ254X2J1ZygiV3JvbmcgcGxjcCByYXRlIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZJWE1FICovCi1zdGF0aWMgaW5saW5lIHU4IGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKF9fYmUzMiAqcGh5aGRyXzExZykKLXsKLQl1OCByYXRlID0gKih1OCAqKXBoeWhkcl8xMWcgJiAweEY7Ci0KLQlwcmludGsoUEZYICJHIG1vZGUgcmF0ZSBpcyAweCV4XG4iLCByYXRlKTsKLQlyZXR1cm4gcmF0ZTsKLX0KLQotLyogRklYTUUgKi8KLXN0YXRpYyB2b2lkIGdldF9yeF9zdGF0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9oZHIgKmhkciwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1OCAqcnNzaTsKLQl1MzIgbm9pc2U7Ci0JLyogRklYTUUganVzdCBmb3IgdGVzdCAqLwotCWludCBzbnIgPSA0MDsJCS8qIHNpZ25hbC10by1ub2lzZSByYXRpbyAqLwotCi0JbWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpOwotCS8qIFJTU0kgKi8KLQlyc3NpID0gKHU4ICopJmhkci0+cGh5X3N0YXRzX2xvOwotLyoJc3RhdC0+c3NpID0gKHJzc2lbMF0gKyByc3NpWzFdICsgcnNzaVsyXSkgLyAzOyAqLwotCS8qIE5vaXNlICovCi0Jbm9pc2UgPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTApOwotCW5vaXNlICs9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMSk7Ci0Jbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UyKTsKLQlzdGF0LT5ub2lzZSA9IG5vaXNlIC8gMzsKLQkvKiBTaWduYWwgcXVhbGl0eSAqLwotLyoJc25yID0gc3RhdC0+c3NpIC0gc3RhdC0+bm9pc2U7ICovCi0JaWYgKHNuciA+PSAwICYmIHNuciA8IDQwKQotCQlzdGF0LT5zaWduYWwgPSA1ICogc25yIC8gMjsKLQllbHNlIGlmIChzbnIgPj0gNDApCi0JCXN0YXQtPnNpZ25hbCA9IDEwMDsKLQllbHNlCi0JCXN0YXQtPnNpZ25hbCA9IDA7Ci0KLQotCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0JCXN0YXQtPnJhdGVfaWR4ID0gYWdueF9wbGNwX2dldF9iaXRyYXRlX2NjaygmaGRyLT5fMTFiMCk7Ci0JfSBlbHNlIGlmICghaGRyLT5fMTFiMCAmJiBoZHItPl8xMWcwKSB7Ci0JCXByaW50ayhQRlggIlJYOiBGb3VuZCBHIG1vZGUgcGFja2V0XG4iKTsKLQkJc3RhdC0+cmF0ZV9pZHggPSBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCk7Ci0JfSBlbHNlCi0JCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwotCi0KLQlzdGF0LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlzdGF0LT5mcmVxID0gYWdueF9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7Ci0vKglzdGF0LT5hbnRlbm5hID0gMzsKLQlzdGF0LT5tYWN0aW1lID0gYmUzMl90b19jcHUoaGRyLT50aW1lX3N0YW1wKTsKLQlzdGF0LT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbWJpbmVfaGRyX2ZyYWcoc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWVoZHIsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTE2IGZjdGw7Ci0JdW5zaWduZWQgaW50IGhkcmxlbjsKLQotCWZjdGwgPSBsZTE2X3RvX2NwdShpZWVlaGRyLT5mcmFtZV9jb250cm9sKTsKLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwotCS8qIEZJWE1FICovCi0JaWYgKGhkcmxlbiA8ICgyKzIrNikvKm1pbmltdW0gaGRyKi8gfHwKLQkgICAgaGRybGVuID4gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaGRyIGxlbiBpcyAlZFxuIiwgaGRybGVuKTsKLQkJYWdueF9idWcoIldyb25nIGllZWU4MDIxMSBoZHIgZGV0ZWN0ZWQiKTsKLQl9Ci0Jc2tiX3B1c2goc2tiLCBoZHJsZW4pOwotCW1lbWNweShza2ItPmRhdGEsIGllZWVoZHIsIGhkcmxlbik7Ci19IC8qIGNvbWJpbmVfaGRyX2ZyYWcgKi8KLQotc3RhdGljIGlubGluZSBpbnQgYWdueF9wYWNrZXRfY2hlY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfaGRyICphZ254aGRyLAotCQkJCSAgICB1bnNpZ25lZCBwYWNrZXRfbGVuKQotewotCWlmIChhZ254X2dldF9iaXRzKENSQ19GQUlMLCBDUkNfRkFJTF9TSElGVCwgYmUzMl90b19jcHUoYWdueGhkci0+cmVnMSkpID09IDEpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IENSQyBjaGVjayBmYWlsXG4iKTsKLQkJZ290byBkcm9wOwotCX0KLQlpZiAocGFja2V0X2xlbiA+IDIwNDgpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IFRvbyBsb25nIHBhY2tldCBkZXRlY3RlZFxuIik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBGSVhNRSBKdXN0IHVzYWJsZSBmb3IgUHJvbWlvdXMgTW9kZSwgZm9yIE1hbmFnZSBtb2RlIGV4Y2x1ZGUgRkNTICovCi0vKiAJaWYgKHBhY2tldF9sZW4gLSBzaXplb2YoKmFnbnhoZHIpIDwgRkNTX0xFTikgeyAqLwotLyogCQlwcmludGsoUEZYICJSWDogVG9vIHNob3J0IHBhY2tldCBkZXRlY3RlZFxuIik7ICovCi0vKiAJCWdvdG8gZHJvcDsgKi8KLS8qIAl9ICovCi0JcmV0dXJuIDA7Ci1kcm9wOgotCXByaXYtPnN0YXRzLmRvdDExRkNTRXJyb3JDb3VudCsrOwotCXJldHVybiAtMTsKLX0KLQotdm9pZCBoYW5kbGVfcnhfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGludCBsZW47Ci0vKglBR05YX1RSQUNFOyAqLwotCi0JZG8gewotCQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjOwotCQl1MzIgZnJhZzsKLQkJc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkJc3RydWN0IGFnbnhfaGRyICpoZHI7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGludCBpID0gcHJpdi0+cnguaWR4ICUgcHJpdi0+cnguc2l6ZTsKLQotCQlkZXNjID0gcHJpdi0+cnguZGVzYyArIGk7Ci0JCWZyYWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQkJaWYgKGZyYWcgJiBPV05FUikKLQkJCWJyZWFrOwotCi0JCWluZm8gPSBwcml2LT5yeC5pbmZvICsgaTsKLQkJc2tiID0gaW5mby0+c2tiOwotCQloZHIgPSAoc3RydWN0IGFnbnhfaGRyICopKHNrYi0+ZGF0YSk7Ci0KLQkJbGVuID0gKGZyYWcgJiBQQUNLRVRfTEVOKSA+PiBQQUNLRVRfTEVOX1NISUZUOwotCQlpZiAoYWdueF9wYWNrZXRfY2hlY2socHJpdiwgaGRyLCBsZW4pID09IC0xKSB7Ci0JCQlyeF9kZXNjX3JldXNpbmcocHJpdiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlza2JfcHV0KHNrYiwgbGVuKTsKLQotCQlkbyB7Ci0JCQkJdTE2IGZjdGw7Ci0JCQlmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciktPmZyYW1lX2NvbnRyb2wpOwotCQkJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pLyogJiYgIShmY3RsICYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpICovCi0JCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciwgIlJYIik7Ci0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0vKgkJCWludCBqOwotCQkJdTE2IGZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKQotCQkJCQkgICAgICAgLT5mcmFtZV9jb250cm9sKTsKLQkJCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gIElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7Ci0JCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsKLQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOwotCQkJfSAqLwotCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCBza2IpOwotCQl9IGVsc2UgaWYgKCFoZHItPl8xMWIwICYmIGhkci0+XzExZzApIHsKLS8qCQkJaW50IGo7ICovCi0JCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOwotCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOwotCi0JCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogUlhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4gKyA4KTsKLQotLyoJCQlpZiAoYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oJmhkci0+XzExZzApID09IDApICovCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCi0JCQkJCSAoKHZvaWQgKikmaGRyLT5tYWNfaGRyKSwgc2tiKTsKLS8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSwgIlJYIEciKTsgKi8KLQkJfSBlbHNlCi0JCQlhZ254X2J1ZygiVW5rbm93biBwYWNrZXRzIHR5cGUiKTsKLQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IpOwotCQlyeF9kZXNjX3JlaW5pdChwcml2LCBpKTsKLQotCX0gd2hpbGUgKHByaXYtPnJ4LmlkeCsrKTsKLX0gLyogaGFuZGxlX3J4X2lycSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3R4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSByaW5nLT5pZHhfc2VudDsgaWR4IDwgcmluZy0+aWR4OyBpZHgrKykgewotCQl1bnNpZ25lZCBpbnQgaSA9IGlkeCAlIHJpbmctPnNpemU7Ci0JCXUzMiAgZnJhZzsKLQotCQlkZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JCWluZm8gPSByaW5nLT5pbmZvICsgaTsKLQotCQlmcmFnID0gYmUzMl90b19jcHUoZGVzYy0+ZnJhZyk7Ci0JCWlmIChmcmFnICYgT1dORVIpIHsKLQkJCWlmIChpbmZvLT50eXBlID09IEhFQURFUikKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlhZ254X2J1ZygiVFggZXJyb3IiKTsKLQkJfQotCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgaW5mby0+bWFwcGluZywgaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJZG8gewotLyoJCQlpbnQgajsgKi8KLQkJCXNpemVfdCBsZW47Ci0JCQlsZW4gPSBpbmZvLT5za2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpICsgaW5mby0+aGRyX2xlbjsKLS8qCQkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJCWFnbnhfcHJpbnRfZGVzYyhkZXNjKTsgKi8KLQkJCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8qCQkJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopaW5mby0+c2tiLT5kYXRhKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyoJCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIDApOyAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7ICovCi0JCQkJfQotLyoJCQl9ICovCi0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlkdW1wX3R4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX3J4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX2JtX3JlZ2lzdGVycyhwcml2KTsKLQkJCWR1bXBfY2lyX3JlZ2lzdGVycyhwcml2KTsgKi8KLQkJfQotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOyAqLwotCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGkgPSBJRUVFODAyMTFfU0tCX0NCKGluZm8tPnNrYik7Ci0KLQkJCXNrYl9wdWxsKGluZm8tPnNrYiwgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGluZm8tPnNrYiwgaW5mby0+aGRyX2xlbiksICZpbmZvLT5oZHIsIGluZm8tPmhkcl9sZW4pOwotCi0vKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilpbmZvLT5za2ItPmRhdGEsICJUWF9IQU5ETEUiKTsgKi8KLS8qIAkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9IQU5ETEU6ICIsIERVTVBfUFJFRklYX05PTkUsICovCi0vKiAJCQkJCSAgICAgaW5mby0+c2tiLT5kYXRhLCBpbmZvLT5za2ItPmxlbik7ICovCi0KLQkJCWlmICghKHR4aS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCi0JCQkJdHhpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0KLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiKTsKLQotCi0vKiAJCQkJaW5mby0+dHhfc3RhdHVzLnF1ZXVlX251bWJlciA9IChyaW5nLT5zaXplIC0gaSkgLyAyOyAqLwotLyogCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiLCAmKGluZm8tPnR4X3N0YXR1cykpOyAqLwotLyogCQkJfSBlbHNlICovCi0vKiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW5mby0+c2tiKTsgKi8KLQkJfQotCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci0JCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQl9Ci0KLQlyaW5nLT5pZHhfc2VudCA9IGlkeDsKLQkvKiBUT0RPIGZpbGwgdGhlIHByaXYtPmxvd19sZXZlbF9zdGF0cyAqLwotCi0JLyogaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIDApOyAqLwotfQotCi12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JaGFuZGxlX3R4X2lycShwcml2LCAmcHJpdi0+dHhtKTsKLX0KLQotdm9pZCBoYW5kbGVfdHhkX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCWhhbmRsZV90eF9pcnEocHJpdiwgJnByaXYtPnR4ZCk7Ci19Ci0KLXZvaWQgaGFuZGxlX290aGVyX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotLyoJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7ICovCi0JdTMyIHN0YXR1cyA9IHByaXYtPmlycV9zdGF0dXM7Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWlmIChzdGF0dXMgJiBJUlFfVFhfQkVBQ09OKSB7Ci0JCWlvd3JpdGUzMihJUlFfVFhfQkVBQ09OLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gY29udHJvbCBpcyAwWCUuOFhcbiIsIGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX0JFQUNPTl9DVEwpKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gcnggZnJhbWUgbnVtOiAlZFxuIiwgcnhfZnJhbWVfY250KTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9UWF9SRVRSWSkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9SRVRSWVNUQUlEKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBSZXRyeSwgUkVUUlkgU1RBIElEIGlzICV4XG4iLCByZWcpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFRYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFJYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX1gpCi0JCXByaW50ayhQRlggIklSUTogUlggWFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9ZKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlyZWcgJj0gfklSUV9SWF9ZOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9ZLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBZXG4iKTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9IQVNISElUKSAgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJcmVnICY9IH5JUlFfUlhfSEFTSEhJVDsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCWlvd3JpdGUzMihJUlFfUlhfSEFTSEhJVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggSGFzaCBIaXRcbiIpOwotCi0JfQotCWlmIChzdGF0dXMgJiBJUlFfUlhfRlJBTUUpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCXJlZyAmPSB+SVJRX1JYX0ZSQU1FOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9GUkFNRSwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggRnJhbWVcbiIpOwotCQlyeF9mcmFtZV9jbnQrKzsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9FUlJfSU5UKSB7Ci0JCWlvd3JpdGUzMihJUlFfRVJSX0lOVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0vKgkJYWdueF9od19yZXNldChwcml2KTsgKi8KLQkJcHJpbnRrKFBGWCAiSVJROiBFcnJvciBJbnRlcnJ1cHRcbiIpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX1FVRV9GVUxMKQotCQlwcmludGsoUEZYICJJUlE6IFRYIFdvcmtxdWV1ZSBGdWxsXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX0JBTkRNQU5fRVJSKQotCQlwcmludGsoUEZYICJJUlE6IEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1RYX0RJU0FCTEUpCi0JCXByaW50ayhQRlggIklSUTogVFggRGlzYWJsZVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9JVkFTRVNLRVkpCi0JCXByaW50ayhQRlggIklSUTogUlggSW52YWxpZCBTZXNzaW9uIEtleVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SRVBfVEhISVQpCi0JCXByaW50ayhQRlggIklSUTogUmVwbGF5IFRocmVzaG9sZCBIaXRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfVElNRVIxKQotCQlwcmludGsoUEZYICJJUlE6IFRpbWVyMVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9USU1FUl9DTlQpCi0JCXByaW50ayhQRlggIklSUTogVGltZXIgQ291bnRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUEhZX0ZBU1RJTlQpCi0JCXByaW50ayhQRlggIklSUTogUGh5IEZhc3QgSW50ZXJydXB0XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1BIWV9TTE9XSU5UKQotCQlwcmludGsoUEZYICJJUlE6IFBoeSBTbG93IEludGVycnVwdFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9PVEhFUikKLQkJcHJpbnRrKFBGWCAiSVJROiAweDgwMDAwMDAwXG4iKTsKLX0gLyogaGFuZGxlX290aGVyX2lycSAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByb3V0ZV9mbGFnX3NldChzdHJ1Y3QgYWdueF9oZHIgKnR4aGRyKQotewotLyoJdTMyIHJlZyA9IDA7ICovCi0KLQkvKiBGSVhNRSAqLwotLyoJcmVnID0gKDB4NyA8PCBST1VURV9DT01QUkVTU0lPTl9TSElGVCkgJiBST1VURV9DT01QUkVTU0lPTjsgKi8KLS8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIocmVnKTsgKi8KLQl0eGhkci0+cmVnNSA9ICgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCk7Ci0vKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKCgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCkpOyAqLwotLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigweDcgPDwgMHgwKTsgKi8KLX0KLQotLyogUmV0dXJuIDAgaWYgbm8gbWF0Y2ggKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9wb3dlcl9sZXZlbCh1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGFudGVubmFzX251bSkKLXsKLQl1bnNpZ25lZCBpbnQgcG93ZXJfbGV2ZWw7Ci0KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDEwOgotCWNhc2UgMjA6Ci0JY2FzZSA1NToKLQljYXNlIDYwOgotCWNhc2UgOTA6Ci0JY2FzZSAxMjA6Ci0JCXBvd2VyX2xldmVsID0gMjI7Ci0JCWJyZWFrOwotCi0JY2FzZSAxODA6Ci0JCXBvd2VyX2xldmVsID0gMTk7Ci0JCWJyZWFrOwotCi0JY2FzZSAyNDA6Ci0JCXBvd2VyX2xldmVsID0gMTg7Ci0JCWJyZWFrOwotCi0JY2FzZSAzNjA6Ci0JCXBvd2VyX2xldmVsID0gMTY7Ci0JCWJyZWFrOwotCi0JY2FzZSA0ODA6Ci0JCXBvd2VyX2xldmVsID0gMTU7Ci0JCWJyZWFrOwotCi0JY2FzZSA1NDA6Ci0JCXBvd2VyX2xldmVsID0gMTQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFnbnhfYnVnKCJFcnJvciByYXRlIHNldHRpbmdcbiIpOwotCX0KLQotCWlmIChwb3dlcl9sZXZlbCAmJiAoYW50ZW5uYXNfbnVtID09IDIpKQotCQlwb3dlcl9sZXZlbCAtPSAzOwotCi0JcmV0dXJuIHBvd2VyX2xldmVsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9hZ254X2hkcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9pbmZvICp0eF9pbmZvKQotewotCXN0cnVjdCBhZ254X2hkciAqdHhoZHIgPSAoc3RydWN0IGFnbnhfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCXNpemVfdCBsZW47Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmdHhfaW5mby0+aGRyKTsKLQl1MzIgcmVnOwotCi0JbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7Ci0KLS8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgTE9DQUxfU1RBSUQpOyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgQlNTSURfU1RBSUQpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktRVUVVRV9JRCwgV09SS1FVRVVFX0lEX1NISUZULCAwKTsKLQl0eGhkci0+cmVnNCA9IGNwdV90b19iZTMyKHJlZyk7Ci0KLQkvKiBTZXQgdGhlIEhhcmR3YXJlIFNlcXVlbmNlIE51bWJlciB0byAxPyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDApOwotLyoJcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoTUFDX0hEUl9MRU4sIE1BQ19IRFJfTEVOX1NISUZULCB0eF9pbmZvLT5oZHJfbGVuKTsKLQl0eGhkci0+cmVnMSA9IGNwdV90b19iZTMyKHJlZyk7Ci0JLyogU2V0IHRoZSBhZ254X2hkcidzIE1BQyBoZWFkZXIgKi8KLQltZW1jcHkodHhoZHItPm1hY19oZHIsICZ0eF9pbmZvLT5oZHIsIHR4X2luZm8tPmhkcl9sZW4pOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMSk7Ci0vKglyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAwKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMCk7Ci0vKglyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkVMQVksIFJFTEFZX1NISUZULCAwKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUTSwgVE1fU0hJRlQsIDApOwotCXR4aGRyLT5yZWcwID0gY3B1X3RvX2JlMzIocmVnKTsKLQotCS8qIFNldCB0aGUgbG9uZyBhbmQgc2hvcnQgcmV0cnkgbGltaXRzICovCi0JdHhoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCXR4aGRyLT50eC5sb25nX3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCi0JLyogRklYTUUgKi8KLQlsZW4gPSB0eF9pbmZvLT5za2ItPmxlbiAtIHNpemVvZigqdHhoZHIpICsgdHhfaW5mby0+aGRyX2xlbiArIEZDU19MRU47Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKQotCQlsZW4gKz0gODsKLQlsZW4gPSAyMzk4OwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRlJBR19TSVpFLCBGUkFHX1NJWkVfU0hJRlQsIGxlbik7Ci0JbGVuID0gdHhfaW5mby0+c2tiLT5sZW4gLSBzaXplb2YoKnR4aGRyKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhQQVlMT0FEX0xFTiwgUEFZTE9BRF9MRU5fU0hJRlQsIGxlbik7Ci0JdHhoZHItPnJlZzMgPSBjcHVfdG9fYmUzMihyZWcpOwotCi0Jcm91dGVfZmxhZ19zZXQodHhoZHIpOwotfSAvKiBmaWxsX2hkciAqLwotCi1zdGF0aWMgdm9pZCB0eG1fcG93ZXJfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpKQotewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsKLQl1MzIgcmVnOwotCi0JLyogRklYTUUgKi8KLQlpZiAodHhpLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApIHsKLQkJLyogRm9yIEIgbW9kZSBTaG9ydCBQcmVhbWJsZSAqLwotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9TSE9SVCk7Ci0vKgkJY29udHJvbC0+dHhfcmF0ZSA9IC1jb250cm9sLT50eF9yYXRlOyAqLwotCX0gZWxzZQotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExRyk7Ci0vKgkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfTE9ORyk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoU0lHTkFMLCBTSUdOQUxfU0hJRlQsIDB4Qik7Ci0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkFURSwgUkFURV9TSElGVCwgMHhCKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMTUpOyAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMjApOwotCS8qIGlmIHJhdGUgPCAxMU0gc2V0IGl0IHRvIDAgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhOVU1fVFJBTlNNSVRURVJTLCBOVU1fVFJBTlNNSVRURVJTX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKEVEQ0YsIEVEQ0ZfU0hJRlQsIDEpOyAqLwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVElGUywgVElGU19TSElGVCwgMSk7ICovCi0KLQlwb3dlci5yZWcgPSByZWc7Ci0vKglwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOyAqLwotCi0vKglzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgTE9DQUxfU1RBSUQpOyAqLwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBCU1NJRF9TVEFJRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHR4X3BhY2tldF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuc2lnbmVkIGludCBpZWVlX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JaWYgKHNrYi0+bGVuID4gMjA0OCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJsZW5ndGggaXMgJWRcbiIsIHNrYi0+bGVuKTsKLQkJYWdueF9idWcoIlRvbyBsb25nIFRYIHNrYiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCS8qIEZJWE1FICovCi0JaWYgKHNrYi0+bGVuID09IGllZWVfbGVuKSB7Ci0JCXByaW50ayhQRlggIkEgc3RyYW5nZSBUWCBwYWNrZXRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JCS8qIHR4X2ZhaWxlX2lycXNhZmUoKTsgKi8KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IGFnbnhfcmluZyAqcmluZykKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpoZHJfZGVzYywgKmZyYWdfZGVzYzsKLQlzdHJ1Y3QgYWdueF9pbmZvICpoZHJfaW5mbywgKmZyYWdfaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRoZSBSWCBpbnRlcnJ1cHQgbmVlZCBiZSBEaXNhYmxlIHVudGlsIHRoaXMgVFggcGFja2V0Ci0JICAgaXMgaGFuZGxlZCBpbiB0aGUgbmV4dCB0eCBpbnRlcnJ1cHQgKi8KLQlkaXNhYmxlX3J4X2ludGVycnVwdChwcml2KTsKLQotCWkgPSByaW5nLT5pZHg7Ci0JcmluZy0+aWR4ICs9IDI7Ci0vKiAgIAlpZiAocHJpdi0+dHhtX2lkeCAtIHByaXYtPnR4bV9pZHhfc2VudCA9PSBBR05YX1RYTV9SSU5HX1NJWkUgLSAyKSAqLwotLyogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgMCk7ICovCi0KLQkvKiBTZXQgYWdueCBoZWFkZXIncyBpbmZvIGFuZCBkZXNjICovCi0JaSAlPSByaW5nLT5zaXplOwotCWhkcl9kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JaGRyX2luZm8gPSByaW5nLT5pbmZvICsgaTsKLQloZHJfaW5mby0+aGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JbWVtY3B5KCZoZHJfaW5mby0+aGRyLCBza2ItPmRhdGEsIGhkcl9pbmZvLT5oZHJfbGVuKTsKLQotCS8qIEFkZCB0aGUgYWdueCBoZWFkZXIgdG8gdGhlIGZyb250IG9mIHRoZSBTS0IgKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpIC0gaGRyX2luZm8tPmhkcl9sZW4pOwotCi0JaGRyX2luZm8tPnR4aSA9IHR4aTsKLQloZHJfaW5mby0+ZG1hX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpOwotCWhkcl9pbmZvLT5za2IgPSBza2I7Ci0JaGRyX2luZm8tPnR5cGUgPSBIRUFERVI7Ci0JZmlsbF9hZ254X2hkcihwcml2LCBoZHJfaW5mbyk7Ci0JaGRyX2luZm8tPm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgIGhkcl9pbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlkbyB7Ci0JCXUzMiBmcmFnID0gMDsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKEZJUlNUX0ZSQUcsIEZJUlNUX0ZSQUdfU0hJRlQsIDEpOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoTEFTVF9GUkFHLCBMQVNUX0ZSQUdfU0hJRlQsIDApOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoUEFDS0VUX0xFTiwgUEFDS0VUX0xFTl9TSElGVCwgc2tiLT5sZW4pOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBR19MRU4sIEZJUlNUX0ZSQUdfTEVOX1NISUZULCAxKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKE9XTkVSLCBPV05FUl9TSElGVCwgMSk7Ci0JCWhkcl9kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JaGRyX2Rlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoaGRyX2luZm8tPm1hcHBpbmcpOwotCi0KLQkvKiBTZXQgRnJhZydzIGluZm8gYW5kIGRlc2MgKi8KLQlpID0gKGkgKyAxKSAlIHJpbmctPnNpemU7Ci0JZnJhZ19kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JZnJhZ19pbmZvID0gcmluZy0+aW5mbyArIGk7Ci0JbWVtY3B5KGZyYWdfaW5mbywgaGRyX2luZm8sIHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSk7Ci0JZnJhZ19pbmZvLT50eXBlID0gUEFDS0VUOwotCWZyYWdfaW5mby0+ZG1hX2xlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW47Ci0JZnJhZ19pbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhICsgaGRyX2luZm8tPmRtYV9sZW4sCi0JCQkJCSAgICBmcmFnX2luZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWRvIHsKLQkJdTMyIGZyYWcgPSAwOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBRywgRklSU1RfRlJBR19TSElGVCwgMCk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhMQVNUX0ZSQUcsIExBU1RfRlJBR19TSElGVCwgMSk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhQQUNLRVRfTEVOLCBQQUNLRVRfTEVOX1NISUZULCBza2ItPmxlbik7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhTVUJfRlJBR19MRU4sIFNVQl9GUkFHX0xFTl9TSElGVCwgZnJhZ19pbmZvLT5kbWFfbGVuKTsKLQkJZnJhZ19kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JZnJhZ19kZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGZyYWdfaW5mby0+bWFwcGluZyk7Ci0KLQl0eG1fcG93ZXJfc2V0KHByaXYsIHR4aSk7Ci0KLS8qCWRvIHsgKi8KLS8qCQlpbnQgajsgKi8KLS8qCQlzaXplX3QgbGVuOyAqLwotLyoJCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW4gKyBoZHJfaW5mby0+aGRyX2xlbjsgICovCi0vKgkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGhkcl9kZXNjKTsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGZyYWdfZGVzYyk7ICovCi0vKgkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilza2ItPmRhdGEpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCBqKTsgKi8KLS8qCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7ICovCi0vKgkJCX0gKi8KLS8qCX0gd2hpbGUgKDApOyAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogRklYTUUgdWdseSBjb2RlICovCi0JLyogVHJpZ2dlciBUWE0gKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCX0gd2hpbGUgKDApOwotCi0JLyogVHJpZ2dlciBUWEQgKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpOwotCX0gd2hpbGUgKDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfYWdueF90eChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXUxNiBmY3RsOwotCi0JaWYgKHR4X3BhY2tldF9jaGVjayhza2IpKQotCQlyZXR1cm4gMDsKLQotLyoJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KLS8qCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsgKi8KLQotCWZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKLQotCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eGQpOwotCWVsc2UKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eG0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FjNDE1Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotI2lmbmRlZiBBR05YX1hNSVRfSF8KLSNkZWZpbmUgQUdOWF9YTUlUX0hfCi0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotc3RydWN0IGFnbnhfcHJpdjsKLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9zZXRfYml0cyh1MzIgbWFzaywgdTggc2hpZnQsIHUzMiB2YWx1ZSkKLXsKLQlyZXR1cm4gKHZhbHVlIDw8IHNoaWZ0KSAmIG1hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGFnbnhfZ2V0X2JpdHModTMyIG1hc2ssIHU4IHNoaWZ0LCB1MzIgdmFsdWUpCi17Ci0JcmV0dXJuICh2YWx1ZSAmIG1hc2spID4+IHNoaWZ0OwotfQotCi0KLXN0cnVjdCBhZ254X3J4IHsKLQlfX2JlMTYgcnhfcGFja2V0X2R1cmF0aW9uOyAvKiAgUlggUGFja2V0IER1cmF0aW9uICovCi0JX19iZTE2IHJlcGxheV9jbnQ7CS8qIFJlcGxheSBDb3VudCAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotc3RydWN0IGFnbnhfdHggewotCXU4IGxvbmdfcmV0cnlfbGltaXQ7IC8qIExvbmcgUmV0cnkgTGltaXQgKi8KLQl1OCBzaG9ydF9yZXRyeV9saW1pdDsgLyogU2hvcnQgUmV0cnkgTGltaXQgKi8KLQl1OCBsb25nX3JldHJ5X2NudDsJLyogTG9uZyBSZXRyeSBDb3VudCAqLwotCXU4IHNob3J0X3JldHJ5X2NudDsgLyogU2hvcnQgUmV0cnkgQ291bnQgKi8KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLS8qIENvcHkgZnJvbSBiY200M3h4ICovCi0jZGVmaW5lIFA0RF9CWVQzUyhtYWdpYywgbnJfYnl0ZXMpICAgICAgdTggX19wNGRkaW5nIyNtYWdpY1tucl9ieXRlc10KLSNkZWZpbmUgUDREX0JZVEVTKGxpbmUsIG5yX2J5dGVzKSAgICAgICBQNERfQllUM1MobGluZSwgbnJfYnl0ZXMpCi0jZGVmaW5lIFBBRF9CWVRFUyhucl9ieXRlcykgICAgICAgICAgICAgUDREX0JZVEVTKF9fTElORV9fLCBucl9ieXRlcykKLQotI2RlZmluZSBQNERfQklUM1MobWFnaWMsIG5yX2JpdHMpICAgICAgIF9fYmUzMiBfX3BhZGRpbmcjI21hZ2ljOm5yX2JpdHMKLSNkZWZpbmUgUDREX0JJVFMobGluZSwgbnJfYml0cykgICAgICAgICBQNERfQklUM1MobGluZSwgbnJfYml0cykKLSNkZWZpbmUgUEFEX0JJVFMobnJfYml0cykJICAgICAgICBQNERfQklUUyhfX0xJTkVfXywgbnJfYml0cykKLQotCi1zdHJ1Y3QgYWdueF9oZHIgewotCV9fYmUzMiByZWcwOwotI2RlZmluZSBSVFMJCSAgICAgICAgMHg4MDAwMDAwMCAvKiBSVFMgKi8KLSNkZWZpbmUgUlRTX1NISUZUCQkzMQotI2RlZmluZSBNVUxUSUNBU1QJICAgICAgICAweDQwMDAwMDAwIC8qIG11bHRpY2FzdCAqLwotI2RlZmluZSBNVUxUSUNBU1RfU0hJRlQJCTMwCi0jZGVmaW5lIEFDSwkJCTB4MzAwMDAwMDAgLyogQUNLICovCi0jZGVmaW5lIEFDS19TSElGVAkJMjgKLSNkZWZpbmUgVE0JCQkweDA4MDAwMDAwIC8qIFRNICovCi0jZGVmaW5lIFRNX1NISUZUCQkyNwotI2RlZmluZSBSRUxBWQkJCTB4MDQwMDAwMDAgLyogUmVsYXkgKi8KLSNkZWZpbmUgUkVMQVlfU0hJRlQJCTI2Ci0vKiAJUEFEX0JJVFMoNCk7ICovCi0jZGVmaW5lIFJFVklTRURfRkNTCQkweDAwMzgwMDAwIC8qIHJldmlzZWQgRkNTICovCi0jZGVmaW5lIFJFVklTRURfRkNTX1NISUZUCTE5Ci0jZGVmaW5lIE5FWFRfQlVGRkVSX0FERFIJMHgwMDA3RkZGRiAvKiBOZXh0IEJ1ZmZlciBBZGRyZXNzICovCi0jZGVmaW5lIE5FWFRfQlVGRkVSX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzE7Ci0jZGVmaW5lIE1BQ19IRFJfTEVOCQkweEZDMDAwMDAwIC8qIE1BQyBIZWFkZXIgTGVuZ3RoICAqLwotI2RlZmluZSBNQUNfSERSX0xFTl9TSElGVAkyNgotI2RlZmluZSBEVVJBVElPTl9PVkVSSURFCTB4MDIwMDAwMDAgLyogRHVyYXRpb24gT3ZlcnJpZGUgKi8KLSNkZWZpbmUgRFVSQVRJT05fT1ZFUklERV9TSElGVAkyNQotI2RlZmluZSBQSFlfSERSX09WRVJJREUJCTB4MDEwMDAwMDAgLyogUEhZIEhlYWRlciBPdmVycmlkZSAqLwotI2RlZmluZSBQSFlfSERSX09WRVJJREVfU0hJRlQJMjQKLSNkZWZpbmUgQ1JDX0ZBSUwJCTB4MDA4MDAwMDAgLyogQ1JDIGZhaWwgKi8KLSNkZWZpbmUgQ1JDX0ZBSUxfU0hJRlQJCTIzCi0vKglQQURfQklUUygxKTsgKi8KLSNkZWZpbmUgU0VRVUVOQ0VfTlVNQkVSCQkweDAwMjAwMDAwIC8qIFNlcXVlbmNlIE51bWJlciAqLwotI2RlZmluZSBTRVFVRU5DRV9OVU1CRVJfU0hJRlQJMjEKLS8qCVBBRF9CSVRTKDIpOyAqLwotI2RlZmluZSBCVUZGX0hFQURfQUREUgkJMHgwMDA3RkZGRiAvKiBCdWZmZXIgSGVhZCBBZGRyZXNzICovCi0jZGVmaW5lIEJVRkZfSEVBRF9BRERSX1NISUZUCTAKLQotCV9fYmUzMiByZWcyOwotI2RlZmluZSBQRFVfQ09VTlQJCTB4RkMwMDAwMDAgLyogUERVIENvdW50ICovCi0jZGVmaW5lIFBEVV9DT1VOVF9TSElGVAkJMjYKLS8qIAlQQURfQklUUygzKTsgKi8KLSNkZWZpbmUgV0VQX0tFWQkJCTB4MDA2MDAwMDAgLyogV0VQIEtleSAjICovCi0jZGVmaW5lIFdFUF9LRVlfU0hJRlQJCTIxCi0jZGVmaW5lIFVTRVNfV0VQX0tFWQkJMHgwMDEwMDAwMCAvKiBVc2VzIFdFUCBLZXkgKi8KLSNkZWZpbmUgVVNFU19XRVBfS0VZX1NISUZUCTIwCi0jZGVmaW5lIEtFRVBfQUxJVkUJCTB4MDAwODAwMDAgLyogS2VlcCBhbGl2ZSAqLwotI2RlZmluZSBLRUVQX0FMSVZFX1NISUZUCTE5Ci0jZGVmaW5lIEJVRkZfVEFJTF9BRERSCQkweDAwMDdGRkZGIC8qIEJ1ZmZlciBUYWlsIEFkZHJlc3MgKi8KLSNkZWZpbmUgQlVGRl9UQUlMX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzM7Ci0jZGVmaW5lIENUU18xMUcJCQkweDgwMDAwMDAwCS8qIENUUyBpbiAxMWcgKi8KLSNkZWZpbmUgQ1RTXzExR19TSElGVAkJMzEKLSNkZWZpbmUgUlRTXzExRwkJCTB4NDAwMDAwMDAJLyogUlRTIGluIDExZyAqLwotI2RlZmluZSBSVFNfMTFHX1NISUZUCQkzMAotLyogUEFEX0JJVFMoMik7ICovCi0jZGVmaW5lIEZSQUdfU0laRQkJMHgwRkZGMDAwMAkvKiBmcmFnbWVudCBzaXplICovCi0jZGVmaW5lIEZSQUdfU0laRV9TSElGVAkJMTYKLSNkZWZpbmUgUEFZTE9BRF9MRU4JCTB4MDAwMEZGRjAJLyogcGF5bG9hZCBsZW5ndGggKi8KLSNkZWZpbmUgUEFZTE9BRF9MRU5fU0hJRlQJNAotI2RlZmluZSBGUkFHX05VTQkJMHgwMDAwMDAwRgkvKiBudW1iZXIgb2YgZnJhZ3MgKi8KLSNkZWZpbmUgRlJBR19OVU1fU0hJRlQJCTAKLQotCV9fYmUzMiByZWc0OwotLyogCVBBRF9CSVRTKDQpOyAqLwotI2RlZmluZSBSRUxBWV9TVEFJRAkJMHgwRkZGMDAwMCAvKiByZWxheVN0YWxkICovCi0jZGVmaW5lIFJFTEFZX1NUQUlEX1NISUZUCTE2Ci0jZGVmaW5lIFNUQVRJT05fSUQJCTB4MDAwMEZGRjAgLyogU3RhdGlvbiBJRCAqLwotI2RlZmluZSBTVEFUSU9OX0lEX1NISUZUCTQKLSNkZWZpbmUgV09SS1FVRVVFX0lECQkweDAwMDAwMDBGIC8qIFdvcmtxdWV1ZSBJRCAqLwotI2RlZmluZSBXT1JLUVVFVUVfSURfU0hJRlQJMAotCi0JLyogRklYTUUgdGhpcyByZWdpc3RlciBtYXliZSBpcyBMRT8gKi8KLQlfX2JlMzIgcmVnNTsKLS8qIAlQQURfQklUUyg0KTsgKi8KLSNkZWZpbmUgUk9VVEVfSE9TVAkJMHgwRjAwMDAwMAotI2RlZmluZSBST1VURV9IT1NUX1NISUZUCTI0Ci0jZGVmaW5lIFJPVVRFX0NBUkRfQ1BVCQkweDAwRjAwMDAwCi0jZGVmaW5lIFJPVVRFX0NBUkRfQ1BVX1NISUZUCTIwCi0jZGVmaW5lIFJPVVRFX0VOQ1JZUFRJT04JMHgwMDBGMDAwMAotI2RlZmluZSBST1VURV9FTkNSWVBUSU9OX1NISUZUCTE2Ci0jZGVmaW5lIFJPVVRFX1RYCQkweDAwMDBGMDAwCi0jZGVmaW5lIFJPVVRFX1RYX1NISUZUCQkxMgotI2RlZmluZSBST1VURV9SWDEJCTB4MDAwMDBGMDAKLSNkZWZpbmUgUk9VVEVfUlgxX1NISUZUCQk4Ci0jZGVmaW5lIFJPVVRFX1JYMgkJMHgwMDAwMDBGMAotI2RlZmluZSBST1VURV9SWDJfU0hJRlQJCTQKLSNkZWZpbmUgUk9VVEVfQ09NUFJFU1NJT04JMHgwMDAwMDAwRgotI2RlZmluZSBST1VURV9DT01QUkVTU0lPTl9TSElGVCAwCi0KLQlfX2JlMzIgXzExZzA7CQkJLyogMTFnICovCi0JX19iZTMyIF8xMWcxOwkJCS8qIDExZyAqLwotCV9fYmUzMiBfMTFiMDsJCQkvKiAxMWIgKi8KLQlfX2JlMzIgXzExYjE7CQkJLyogMTFiICovCi0JdTggbWFjX2hkclszMl07CQkJLyogTUFDIGhlYWRlciAqLwotCi0JX19iZTE2IHJ0c19kdXJhdGlvbjsJCS8qIFJUUyBkdXJhdGlvbiAqLwotCV9fYmUxNiBsYXN0X2R1cmF0aW9uOwkJLyogTGFzdCBkdXJhdGlvbiAqLwotCV9fYmUxNiBzZWNfbGFzdF9kdXJhdGlvbjsJLyogU2Vjb25kIHRvIExhc3QgZHVyYXRpb24gKi8KLQlfX2JlMTYgb3RoZXJfZHVyYXRpb247CQkvKiBPdGhlciBkdXJhdGlvbiAqLwotCV9fYmUxNiB0eF9sYXN0X2R1cmF0aW9uOwkvKiBUWCBMYXN0IGR1cmF0aW9uICovCi0JX19iZTE2IHR4X290aGVyX2R1cmF0aW9uOwkvKiBUWCBPdGhlciBEdXJhdGlvbiAqLwotCV9fYmUxNiBsYXN0XzExZ19sZW47CQkvKiBMZW5ndGggb2YgbGFzdCAxMWcgKi8KLQlfX2JlMTYgb3RoZXJfMTFnX2xlbjsJCS8qIExlbmdodCBvZiBvdGhlciAxMWcgKi8KLQotCV9fYmUxNiBsYXN0XzExYl9sZW47CQkvKiBMZW5ndGggb2YgbGFzdCAxMWIgKi8KLQlfX2JlMTYgb3RoZXJfMTFiX2xlbjsJCS8qIExlbmdodCBvZiBvdGhlciAxMWIgKi8KLQotCi0JX19iZTE2IHJlZzY7Ci0jZGVmaW5lIE1CRgkJCTB4RjAwMCAvKiBtYmYgKi8KLSNkZWZpbmUgTUJGX1NISUZUCQkxMgotI2RlZmluZSBSU1ZENAkJCTB4MEZGRiAvKiByc3ZkNCAqLwotI2RlZmluZSBSU1ZENF9TSElGVAkJMAotCi0JX19iZTE2IHJ4X2ZyYWdfc3RhdDsJLyogUlggZnJhZ21lbnRhdGlvbiBzdGF0dXMgKi8KLQotCV9fYmUzMiB0aW1lX3N0YW1wOwkvKiBUaW1lU3RhbXAgKi8KLQlfX2JlMzIgcGh5X3N0YXRzX2hpOwkvKiBQSFkgc3RhdHMgaGkgKi8KLQlfX2JlMzIgcGh5X3N0YXRzX2xvOwkvKiBQSFkgc3RhdHMgbG8gKi8KLQlfX2JlMzIgbWljX2tleTA7CS8qIE1JQyBrZXkgMCAqLwotCV9fYmUzMiBtaWNfa2V5MTsJLyogTUlDIGtleSAxICovCi0KLQl1bmlvbiB7CQkJLyogUlgvVFggVW5pb24gKi8KLQkJc3RydWN0IGFnbnhfcnggcng7Ci0JCXN0cnVjdCBhZ254X3R4IHR4OwotCX07Ci0KLQl1OCByeF9jaGFubmVsOwkJLyogUmVjaWV2ZSBDaGFubmVsICovCi0JUEFEX0JZVEVTKDMpOwotCi0JdTggcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF9kZXNjIHsKLSNkZWZpbmUgUEFDS0VUX0xFTgkJMHhGRkYwMDAwMAotI2RlZmluZSBQQUNLRVRfTEVOX1NISUZUCTIwCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgRklSU1RfUEFDS0VUX01BU0sJMHgwMDA4MDAwMAotI2RlZmluZSBGSVJTVF9QQUNLRVRfTUFTS19TSElGVAkxOQotI2RlZmluZSBGSVJTVF9SRVNFUlYyCQkweDAwMDQwMDAwCi0jZGVmaW5lIEZJUlNUX1JFU0VSVjJfU0hJRlQJMTgKLSNkZWZpbmUgRklSU1RfVEtJUF9FUlJPUgkweDAwMDIwMDAwCi0jZGVmaW5lIEZJUlNUX1RLSVBfRVJST1JfU0hJRlQJMTcKLSNkZWZpbmUgRklSU1RfVEtJUF9QQUNLRVQJMHgwMDAxMDAwMAotI2RlZmluZSBGSVJTVF9US0lQX1BBQ0tFVF9TSElGVAkxNgotI2RlZmluZSBGSVJTVF9SRVNFUlYxCQkweDAwMDBGMDAwCi0jZGVmaW5lIEZJUlNUX1JFU0VSVjFfU0hJRlQJMTIKLSNkZWZpbmUgRklSU1RfRlJBR19MRU4JCTB4MDAwMDBGRjgKLSNkZWZpbmUgRklSU1RfRlJBR19MRU5fU0hJRlQJMwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFNVQl9SRVNFUlYyCQkweDAwMGMwMDAwCi0jZGVmaW5lIFNVQl9SRVNFUlYyX1NISUZUCTE4Ci0jZGVmaW5lIFNVQl9US0lQX0VSUk9SCQkweDAwMDIwMDAwCi0jZGVmaW5lIFNVQl9US0lQX0VSUk9SX1NISUZUCTE3Ci0jZGVmaW5lIFNVQl9US0lQX1BBQ0tFVAkJMHgwMDAxMDAwMAotI2RlZmluZSBTVUJfVEtJUF9QQUNLRVRfU0hJRlQJMTYKLSNkZWZpbmUgU1VCX1JFU0VSVjEJCTB4MDAwMDgwMDAKLSNkZWZpbmUgU1VCX1JFU0VSVjFfU0hJRlQJMTUKLSNkZWZpbmUgU1VCX0ZSQUdfTEVOCQkweDAwMDA3RkY4Ci0jZGVmaW5lIFNVQl9GUkFHX0xFTl9TSElGVAkzCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgRklSU1RfRlJBRwkJMHgwMDAwMDAwNAotI2RlZmluZSBGSVJTVF9GUkFHX1NISUZUCTIKLSNkZWZpbmUgTEFTVF9GUkFHCQkweDAwMDAwMDAyCi0jZGVmaW5lIExBU1RfRlJBR19TSElGVAkJMQotI2RlZmluZSBPV05FUgkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgT1dORVJfU0hJRlQJCTAKLQlfX2JlMzIgZnJhZzsKLQlfX2JlMzIgZG1hX2FkZHI7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotZW51bSB7SEVBREVSLCBQQUNLRVR9OwotCi1zdHJ1Y3QgYWdueF9pbmZvIHsKLSAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSAgICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nOwotCXUzMiBkbWFfbGVuOwkJLyogZG1hIGJ1ZmZlciBsZW4gICovCi0JLyogQmVsb3cgZmllbGRzIG9ubHkgdXNmdWwgZm9yIHR4ICovCi0JdTMyIGhkcl9sZW47CQkvKiBpZWVlODAyMTEgaGVhZGVyIGxlbmd0aCAqLwotCXVuc2lnbmVkIGludCB0eXBlOwotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKLSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyOwotfTsKLQotCi1zdHJ1Y3QgYWdueF9yaW5nIHsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjOwotCWRtYV9hZGRyX3QgZG1hOwotCXN0cnVjdCBhZ254X2luZm8gKmluZm87Ci0JLyogV2lsbCBsZWFkIHRvIG92ZXJmbG93IHdoZW4gc2VudCBwYWNrZXQgbnVtYmVyIGVub3VnaD8gKi8KLQl1bnNpZ25lZCBpbnQgaWR4OwotCXVuc2lnbmVkIGludCBpZHhfc2VudDsJCS8qIG9ubHkgdXNmdWwgZm9yIHR4ZCBhbmQgdHhtICovCi0JdW5zaWduZWQgaW50IHNpemU7Ci19OwotCi0jZGVmaW5lIEFHTlhfUlhfUklOR19TSVpFCTEyOAotI2RlZmluZSBBR05YX1RYRF9SSU5HX1NJWkUJMjU2Ci0jZGVmaW5lIEFHTlhfVFhNX1JJTkdfU0laRQkxMjgKLQotdm9pZCBkaXNhYmxlX3J4X2ludGVycnVwdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgZW5hYmxlX3J4X2ludGVycnVwdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBmaWxsX3JpbmdzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCB1bmZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV9yeF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV90eGRfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBoYW5kbGVfdHhtX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX290aGVyX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBfYWdueF90eChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLSNlbmRpZiAvKiBBR05YX1hNSVRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCmluZGV4IDI0NzE5NDkuLmViNjc1NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAogY29uZmlnIEFORFJPSUQKIAlib29sICJBbmRyb2lkIERyaXZlcnMiCisJZGVwZW5kcyBvbiBCUk9LRU4KIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdmFyaW91cyBkcml2ZXJzIG5lZWRlZCBvbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwppbmRleCA5NGM1ZDI3Li5jZGEyNmJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogc3RhdGljIHVuc2lnbmVkIGludCBiM2RmZ19uYnVmID0gMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCmluZGV4IGFmNzIzY2IuLmQ2M2M4ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKQEAgLTEsNyArMSw3IEBACiBjb25maWcgQ09NRURJCiAJdHJpc3RhdGUgIkRhdGEgYWNxdWlzaXRpb24gc3VwcG9ydCAoY29tZWRpKSIKIAlkZWZhdWx0IE4KLQlkZXBlbmRzIG9uIG0KKwlkZXBlbmRzIG9uIG0gJiYgKFBDSSB8fCBQQ01DSUEgfHwgUENDQVJEIHx8IFVTQikKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgZGF0YSBhY3F1aXNpdGlvbiBkZXZpY2VzCiAJICBmb3IgTGludXguCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKaW5kZXggZjU0YmI5Yi4uYWFhZDc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwpAQCAtMjMzNyw3ICsyMzM3LDcgQEAKIAl9CiAKIAlEUFJJTlRLKCJjb21lZGklaSBzdWJkICVkIGJ1ZmZlciByZXNpemVkIHRvICVpIGJ5dGVzXG4iLAotCQlkZXYtPm1pbm9yLCBzIC0gZGV2LT5zdWJkZXZpY2VzLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOworCQlkZXYtPm1pbm9yLCAoaW50KShzIC0gZGV2LT5zdWJkZXZpY2VzKSwgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYwppbmRleCAxMmQxMmI0Li44MGMwZGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYwpAQCAtNzQ0LDcgKzc0NCw3IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAqLwogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwppbmRleCA0ZDEwYmMzLi4wOWU2ZTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCkBAIC01Myw3ICs1Myw4IEBACiAgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KICAqLwogc3RydWN0IHBjaWRpb19ib2FyZCB7Ci0JY29uc3QgY2hhciAqbmFtZTsJLyogIGFubWUgb2YgdGhlIGJvYXJkICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogIG5hbWUgb2YgdGhlIGJvYXJkICovCisJaW50IGRldl9pZDsKIAlpbnQgbl84MjU1OwkJLyogIG51bWJlciBvZiA4MjU1IGNoaXBzIG9uIGJvYXJkICovCiAKIAkvKiAgaW5kaWNlcyBvZiBiYXNlIGFkZHJlc3MgcmVnaW9ucyAqLwpAQCAtNjQsMTggKzY1LDIxIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaWRpb19ib2FyZCBwY2lkaW9fYm9hcmRzW10gPSB7CiAJewogCSAubmFtZSA9ICJwY2ktZGlvMjQiLAorCSAuZGV2X2lkID0gMHgwMDI4LAogCSAubl84MjU1ID0gMSwKIAkgLnBjaWNvbnRyb2xlcl9iYWRyaW5kZXggPSAxLAogCSAuZGlvcmVnc19iYWRyaW5kZXggPSAyLAogCSB9LAogCXsKIAkgLm5hbWUgPSAicGNpLWRpbzI0aCIsCisJIC5kZXZfaWQgPSAweDAwMTQsCiAJIC5uXzgyNTUgPSAxLAogCSAucGNpY29udHJvbGVyX2JhZHJpbmRleCA9IDEsCiAJIC5kaW9yZWdzX2JhZHJpbmRleCA9IDIsCiAJIH0sCiAJewogCSAubmFtZSA9ICJwY2ktZGlvNDhoIiwKKwkgLmRldl9pZCA9IDB4MDAwYiwKIAkgLm5fODI1NSA9IDIsCiAJIC5wY2ljb250cm9sZXJfYmFkcmluZGV4ID0gMCwKIAkgLmRpb3JlZ3NfYmFkcmluZGV4ID0gMSwKQEAgLTIwNiw3ICsyMTAsNyBAQAogCQkJY29udGludWU7CiAJCS8qICBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUocGNpZGlvX2JvYXJkcyk7IGluZGV4KyspIHsKLQkJCWlmIChwY2lkaW9fcGNpX3RhYmxlW2luZGV4XS5kZXZpY2UgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQlpZiAocGNpZGlvX2JvYXJkc1tpbmRleF0uZGV2X2lkICE9IHBjaWRldi0+ZGV2aWNlKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiAgd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwppbmRleCAxNGJmMjliLi4wZDJjMmViMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtNTE1LDYgKzUxNSw3IEBACiB7CiAJc3RydWN0IHBvbGxfZGVsYXlfdCByZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CiAJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnAgPSBzLT5wcml2YXRlOworCWludCBpOwogCiAJaWYgKHApIHsKIAkJdm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsID0gcC0+Y2hhbm5lbDsKQEAgLTU3MCwxOCArNTcxLDExIEBACiAJCQkJCSAgICAgICBwLT5zZXJpYWxfbm8pOwogCiAJCQkJCS8qICBUcmFuc2Zvcm1hdGlvbiBhbGwgemVyb3MgKi8KLQkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua19hbW91bnQgPSAwOwotCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX2Ftb3VudCA9IDA7Ci0JCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfdHlwZSA9Ci0JCQkJCSAgICAoZW51bSBsaW5rX3R5cGVzKTA7Ci0JCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfYW1vdW50ID0gMDsKLQkJCQkJdHJhbnNmLmxpbmtbM10ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbM10ubGlua19hbW91bnQgPSAwOworCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cmFuc2YubGluayk7IGkrKykgeworCQkJCQkJdHJhbnNmLmxpbmtbaV0ubGlua190eXBlID0KKwkJCQkJCQkoZW51bSBsaW5rX3R5cGVzKTA7CisJCQkJCQl0cmFuc2YubGlua1tpXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCX0KIAogCQkJCQlzZXRfdHJhbnNmb3JtcyhjaGFubmVsLCB0cmFuc2YsIDApOwogCQkJCQl1c2VfdHJhbnNmb3JtKGNoYW5uZWwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCmluZGV4IDJjZGE3YWQuLjgwZTE5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKQEAgLTUxLDYgKzUxLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCiAjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggNmIxMThjMS4uYmJmNzVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC00MTgsMTUgKzQxOCwxNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAliYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAlmb3IgKGogPSAwOyBqIDwgbWF4X3BvcnRzX3Blcl9iaXRmaWVsZDsgKytqKSB7CisJCWNvbnN0IHVuc2lnbmVkIHBvcnRfb2Zmc2V0ID0gbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoYmFzZV9iaXRmaWVsZF9jaGFubmVsKSArIGo7CiAJCWNvbnN0IHVuc2lnbmVkIHBvcnQgPQotCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArCi0JCSAgICBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKKwkJICAgIHNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKyBwb3J0X29mZnNldDsKIAkJdW5zaWduZWQgYmFzZV9wb3J0X2NoYW5uZWw7CiAJCXVuc2lnbmVkIHBvcnRfbWFzaywgcG9ydF9kYXRhLCBwb3J0X3JlYWRfYml0czsKIAkJaW50IGJpdHNoaWZ0OwogCQlpZiAocG9ydCA+PSBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKSkKIAkJCWJyZWFrOwotCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnRfb2Zmc2V0ICogbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKIAkJcG9ydF9tYXNrID0gZGF0YVswXTsKIAkJcG9ydF9kYXRhID0gZGF0YVsxXTsKIAkJYml0c2hpZnQgPSBiYXNlX3BvcnRfY2hhbm5lbCAtIGJhc2VfYml0ZmllbGRfY2hhbm5lbDsKQEAgLTQ1Nyw2ICs0NTcsMTIgQEAKIAkJcG9ydF9yZWFkX2JpdHMgPQogCQkgICAgcmVhZGIocHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfRGF0YShwb3J0KSk7CiAvKiBwcmludGsoInJlYWQgMHgleCBmcm9tIHBvcnQgJWlcbiIsIHBvcnRfcmVhZF9iaXRzLCBwb3J0KTsgKi8KKwkJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfRE8gJiYgYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpIHsKKwkJCS8qIE91dHB1dHMgaW52ZXJ0ZWQsIHNvIGludmVydCB2YWx1ZSByZWFkIGJhY2sgZnJvbQorCQkJICogRE8gc3ViZGV2aWNlLiAgKERvZXMgbm90IGFwcGx5IHRvIGJvYXJkcyB3aXRoIERJTworCQkJICogc3ViZGV2aWNlLikgKi8KKwkJCXBvcnRfcmVhZF9iaXRzIF49IDB4RkY7CisJCX0KIAkJaWYgKGJpdHNoaWZ0ID4gMCkgewogCQkJcG9ydF9yZWFkX2JpdHMgPDw9IGJpdHNoaWZ0OwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKaW5kZXggNmE3Nzk3Ni4uZWMzMWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKaW5kZXggYjA2ZTgxYy4uMDcwMGE4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKaW5kZXggNTdhZWNmYS4uYTMwNTNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0ZPUkNFRF9QVUxTRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9GT1JDRURfUFVMU0U7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEIHwgSVJRX1BVTFNFX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKaW5kZXggZTNmZmIwNi4uNzUzZWUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCkBAIC02Miw2ICs2Miw3IEBACiAvKiAjZGVmaW5lIERFQlVHX1NUQVRVU19CICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIjgyNTUuaCIKICNpbmNsdWRlICJtaXRlLmgiCiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKaW5kZXggYjczMjI5Ni4uOWFlZjg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpAQCAtMjczLDcgKzI3Myw3IEBACiB7CiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMTY7Ci0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwppbmRleCA1MmIyZWNhLi5kNTQ0Njk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCkBAIC03MCw2ICs3MCw3IEBACiAvKiAjZGVmaW5lIERFQlVHX0ZMQUdTICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCiAjaW5jbHVkZSAibWl0ZS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCmluZGV4IDE5ZDg3NTUuLjI0YzhiOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKQEAgLTI5LDcgKzI5LDcgQEAKICAgUENJLU1JTy0xNlhFLTEwLCBQWEktNjAzMEUsIFBDSS1NSU8tMTZFLTEsIFBDSS1NSU8tMTZFLTQsIFBDSS02MDE0LCBQQ0ktNjA0MEUsCiAgIFBYSS02MDQwRSwgUENJLTYwMzBFLCBQQ0ktNjAzMUUsIFBDSS02MDMyRSwgUENJLTYwMzNFLCBQQ0ktNjA3MUUsIFBDSS02MDIzRSwKICAgUENJLTYwMjRFLCBQQ0ktNjAyNUUsIFBYSS02MDI1RSwgUENJLTYwMzRFLCBQQ0ktNjAzNUUsIFBDSS02MDUyRSwKLSAgUENJLTYxMTAsIFBDSS02MTExLCBQQ0ktNjIyMCwgUENJLTYyMjEsIFBDSS02MjI0LCBQWEktNjIyNCwgUENJLTYyMjUsCisgIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LCBQWEktNjIyNSwKICAgUENJLTYyMjksIFBDSS02MjUwLCBQQ0ktNjI1MSwgUENJZS02MjUxLCBQQ0ktNjI1NCwgUENJLTYyNTksIFBDSWUtNjI1OSwKICAgUENJLTYyODAsIFBDSS02MjgxLCBQWEktNjI4MSwgUENJLTYyODQsIFBDSS02Mjg5LAogICBQQ0ktNjcxMSwgUFhJLTY3MTEsIFBDSS02NzEzLCBQWEktNjcxMywKQEAgLTE3OSw2ICsxNzksNyBAQAogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTBkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgeworCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTdmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MWJjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewogCVBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTdkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgewpAQCAtOTUzLDYgKzk1NCwyNSBAQAogCSAuaGFzXzgyNTUgPSAwLAogCSB9LAogCXsKKwkgLmRldmljZV9pZCA9IDB4NzE2ZCwKKwkgLm5hbWUgPSAicHhpLTYyMjUiLAorCSAubl9hZGNoYW4gPSA4MCwKKwkgLmFkYml0cyA9IDE2LAorCSAuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJIC5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkgLmFpX3NwZWVkID0gNDAwMCwKKwkgLm5fYW9jaGFuID0gMiwKKwkgLmFvYml0cyA9IDE2LAorCSAuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJIC5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyMnhfYW8sCisJIC5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCSAuYW9fdW5pcG9sYXIgPSAwLAorCSAuYW9fc3BlZWQgPSAxMjAwLAorCSAubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCSAuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkgLmhhc184MjU1ID0gMCwKKwl9LAorCXsKIAkgLmRldmljZV9pZCA9IDB4NzBhYSwKIAkgLm5hbWUgPSAicGNpLTYyMjkiLAogCSAubl9hZGNoYW4gPSAzMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwppbmRleCBmNjNiZGMzLi4zNDRiODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IGRhcXBfaW50ZXJydXB0OwogCWxpbmstPmlycS5JbnN0YW5jZSA9IGxvY2FsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKaW5kZXggYjg5ZTFlYy4uMDdjMjFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCkBAIC00Myw2ICs0Myw3IEBACiAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNkZWZpbmUgUzUyNl9TSVpFIDY0CiAKQEAgLTExMyw2ICsxMTQsNyBAQAogfTsKIAogc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHsKKyNpZiBkZWZpbmVkIChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiAJdW5zaWduZWQgc2hvcnQgY291dFNvdXJjZToxOwogCXVuc2lnbmVkIHNob3J0IGNvdXRQb2xhcml0eToxOwogCXVuc2lnbmVkIHNob3J0IGF1dG9Mb2FkUmVzZXRSY2FwOjM7CkBAIC0xMjQsMTIgKzEyNiwyNyBAQAogCXVuc2lnbmVkIHNob3J0IG91dHB1dFJlZ0xhdGNoQ3RybDoxOwogCXVuc2lnbmVkIHNob3J0IHByZWxvYWRSZWdTZWw6MTsKIAl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDoxOworICNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkOjE7CisJdW5zaWduZWQgc2hvcnQgcHJlbG9hZFJlZ1NlbDoxOworCXVuc2lnbmVkIHNob3J0IG91dHB1dFJlZ0xhdGNoQ3RybDoxOworCXVuc2lnbmVkIHNob3J0IGNvdW50RGlyQ3RybDoxOworCXVuc2lnbmVkIHNob3J0IGNvdW50RGlyOjE7CisJdW5zaWduZWQgc2hvcnQgY2xvY2tTb3VyY2U6MjsKKwl1bnNpZ25lZCBzaG9ydCBjdEVuYWJsZUN0cmw6MjsKKwl1bnNpZ25lZCBzaG9ydCBod0N0RW5hYmxlU291cmNlOjI7CisJdW5zaWduZWQgc2hvcnQgYXV0b0xvYWRSZXNldFJjYXA6MzsKKwl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3V0U291cmNlOjE7CisjZWxzZQorI2Vycm9yIFVua25vd24gYml0IGZpZWxkIG9yZGVyCisjZW5kaWYKIH07CiAKLXVuaW9uIHsKK3VuaW9uIGNtUmVnIHsKIAlzdHJ1Y3QgY291bnRlcl9tb2RlX3JlZ2lzdGVyX3QgcmVnOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwotfSBjbVJlZzsKK307CiAKICNkZWZpbmUgTUFYX0dQQ1RfQ09ORklHX0RBVEEgNgogCkBAIC0yODUsNiArMzAyLDcgQEAKIAlpbnQgaSwgbjsKIC8qIHNob3J0IHZhbHVlOyAqLwogLyogaW50IHN1YmRldl9jaGFubmVsID0gMDsgKi8KKwl1bmlvbiBjbVJlZyBjbVJlZzsKIAogCXByaW50aygiY29tZWRpJWQ6IHM1MjY6ICIsIGRldi0+bWlub3IpOwogCkBAIC0zNzUsNyArMzkzLDcgQEAKIAlpZiAodGhpc2JvYXJkLT5oYXZlX2RpbykgewogCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOwogCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7Ci0JCXMtPm5fY2hhbiA9IDI7CisJCXMtPm5fY2hhbiA9IDg7CiAJCXMtPm1heGRhdGEgPSAxOwogCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOwogCQlzLT5pbnNuX2JpdHMgPSBzNTI2X2Rpb19pbnNuX2JpdHM7CkBAIC00MzUsMTEgKzQ1MywxMSBAQAogCXVkZWxheSgxMDAwKTsKIAlwcmludGsoIlJlYWQgYmFjayBtb2RlIHJlZz0weCUwNHhcbiIsIGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKSk7CiAKLQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkICovCisJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLwogLyogdmFsdWUgPSAoc2hvcnQpICgweDU1KTsgKi8KIC8qIG91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgbikpOyAqLwogCi0JLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGxvdyB3b3JkICovCisJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGxvdyB3b3JkICovCiAvKiB2YWx1ZSA9IChzaG9ydCkoMHhhYTU1KTsgKi8KIC8qIG91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgbikpOyAqLwogCkBAIC01MTYsNiArNTM0LDcgQEAKIAlpbnQgc3ViZGV2X2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLyogIFVucGFjayBjaGFuc3BlYyAqLwogCWludCBpOwogCXNob3J0IHZhbHVlOworCXVuaW9uIGNtUmVnIGNtUmVnOwogCiAvKiBwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9DT05GSUc6IENvbmZpZ3VyaW5nIENoYW5uZWwgJWRcbiIsIHN1YmRldl9jaGFubmVsKTsgKi8KIApAQCAtNTY4LDE5ICs1ODcsOCBAQAogCiAjaWYgMQogCQkvKiAgU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlciAqLwotCQljbVJlZy5yZWcuY291dFNvdXJjZSA9IDA7CS8qICBvdXQgUkNBUCAqLwotCQljbVJlZy5yZWcuY291dFBvbGFyaXR5ID0gMDsJLyogIFBvbGFyaXR5IGludmVydGVkICovCi0JCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9IDA7CS8qICBBdXRvIGxvYWQgZGlzYWJsZWQgKi8KLQkJY21SZWcucmVnLmh3Q3RFbmFibGVTb3VyY2UgPSAyOwkvKiAgTk9UIFJDQVAgKi8KLQkJY21SZWcucmVnLmN0RW5hYmxlQ3RybCA9IDE7CS8qICAxOiBTb2Z0d2FyZSwgID4xIDogSGFyZHdhcmUgKi8KLQkJY21SZWcucmVnLmNsb2NrU291cmNlID0gMzsJLyogIHg0ICovCi0JCWNtUmVnLnJlZy5jb3VudERpciA9IDA7CS8qICB1cCAqLwotCQljbVJlZy5yZWcuY291bnREaXJDdHJsID0gMDsJLyogIHF1YWRyYXR1cmUgKi8KLQkJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybCA9IDA7CS8qICBsYXRjaCBvbiByZWFkICovCi0JCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwotCQljbVJlZy5yZWcucmVzZXJ2ZWQgPSAwOworCQljbVJlZy52YWx1ZSA9IGluc24tPmRhdGFbMV0gJiAweEZGRkY7CiAKLQkJLyogIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgKi8KIC8qIHByaW50aygiczUyNjogQ291bnRlciBNb2RlIHJlZ2lzdGVyPSV4XG4iLCBjbVJlZy52YWx1ZSk7ICovCiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIApAQCAtNjE1LDExICs2MjMsMTEgQEAKIAkJY21SZWcudmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMV0gJiAweEZGRkYpOwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgaGlnaCB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KSgoaW5zbi0+ZGF0YVsyXSA+PiAxNikgJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIApAQCAtNjUzLDExICs2NjEsMTEgQEAKIAkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvKiAgUFIwICovCiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KSgoaW5zbi0+ZGF0YVsyXSA+PiAxNikgJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgbG93IHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDAgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTY2NiwxNyArNjc0LDE3IEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMTsJLyogIFBSMSAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbM10gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAxIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCiAJCS8qICBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyICovCi0JCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKLQkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJaWYgKGluc24tPmRhdGFbNF0gIT0gMCkgeworCQkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbNF0gJiAweEZGRkYpOwogCQkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwogCQl9CiAJCWJyZWFrOwpAQCAtNjk4LDExICs3MDYsMTEgQEAKIAkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvKiAgUFIwICovCiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KSgoaW5zbi0+ZGF0YVsyXSA+PiAxNikgJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgbG93IHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDAgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTcxMSwxNyArNzE5LDE3IEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMTsJLyogIFBSMSAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbM10gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAxIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCiAJCS8qICBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyICovCi0JCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKLQkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJaWYgKGluc24tPmRhdGFbNF0gIT0gMCkgeworCQkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbNF0gJiAweEZGRkYpOwogCQkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwogCQl9CiAJCWJyZWFrOwpAQCAtNzQxLDYgKzc0OSw3IEBACiB7CiAJaW50IHN1YmRldl9jaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qICBVbnBhY2sgY2hhbnNwZWMgKi8KIAlzaG9ydCB2YWx1ZTsKKwl1bmlvbiBjbVJlZyBjbVJlZzsKIAogCXByaW50aygiczUyNjogR1BDVF9JTlNOX1dSSVRFIG9uIGNoYW5uZWwgJWRcbiIsIHN1YmRldl9jaGFubmVsKTsKIAljbVJlZy52YWx1ZSA9IGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CkBAIC03NzUsOSArNzg0LDggQEAKIAkJCShkZXZwcml2LT5zNTI2X2dwY3RfY29uZmlnW3N1YmRldl9jaGFubmVsXSkuZGF0YVsxXSA9CiAJCQkgICAgaW5zbi0+ZGF0YVsxXTsKIAkJfSBlbHNlIHsKLQkJCXByaW50aygiJWQgXHQgJWRcbiIsIGluc24tPmRhdGFbMV0sIGluc24tPmRhdGFbMl0pOwotCQkJcHJpbnRrCi0JCQkgICAgKCJzNTI2OiBJTlNOX1dSSVRFOiBQVEc6IFByb2JsZW0gd2l0aCBQdWxzZSBwYXJhbXNcbiIpOworCQkJcHJpbnRrKCJzNTI2OiBJTlNOX1dSSVRFOiBQVEc6IFByb2JsZW0gd2l0aCBQdWxzZSBwYXJhbXMgLT4gJWQgJWRcbiIsCisJCQkJaW5zbi0+ZGF0YVswXSwgaW5zbi0+ZGF0YVsxXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05NDksNyArOTU3LDcgQEAKIAlkYXRhWzFdID0gaW53KEFERFJfUkVHKFJFR19ESU8pKSAmIDB4RkY7CS8qICBsb3cgOCBiaXRzIGFyZSB0aGUgZGF0YSAqLwogCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCiAJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLwotCS8qIGRhdGFbMV09cy0+c3RhdGU7ICovCisJLyogZGF0YVsxXT1zLT5zdGF0ZSAmIDB4RkY7ICovCiAKIAlyZXR1cm4gMjsKIH0KQEAgLTk1OSwyOCArOTY3LDMzIEBACiAJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKLQlzaG9ydCB2YWx1ZTsKKwlpbnQgZ3JvdXAsIG1hc2s7CiAKIAlwcmludGsoIlM1MjYgRElPIGluc25fY29uZmlnXG4iKTsKIAotCWlmIChpbnNuLT5uICE9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsdWUgPSBpbncoQUREUl9SRUcoUkVHX0RJTykpOwotCiAJLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCiAJICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYwogCSAqIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQsIGFuZCBkYXRhWzBdIGNvbnRhaW5zIHRoZQogCSAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLwogCi0JaWYgKGRhdGFbMF0gPT0gQ09NRURJX09VVFBVVCkgewotCQl2YWx1ZSB8PSAxIDw8IChjaGFuICsgMTApOwkvKiAgYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZSAqLwotCQlzLT5pb19iaXRzIHw9ICgweEYgPDwgY2hhbik7Ci0JfSBlbHNlIHsKLQkJdmFsdWUgJj0gfigxIDw8IChjaGFuICsgMTApKTsJLyogIDEgaXMgb3V0cHV0LCAwIGlzIGlucHV0LiAqLwotCQlzLT5pb19iaXRzICY9IH4oMHhGIDw8IGNoYW4pOworCWdyb3VwID0gY2hhbiA+PiAyOworCW1hc2sgPSAweEYgPDwgKGdyb3VwIDw8IDIpOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+c3RhdGUgfD0gMSA8PCAoZ3JvdXAgKyAxMCk7ICAvLyBiaXQgMTAvMTEgc2V0IHRoZSBncm91cCAxLzIncyBtb2RlCisJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPnN0YXRlICY9IH4oMSA8PCAoZ3JvdXAgKyAxMCkpOy8vIDEgaXMgb3V0cHV0LCAwIGlzIGlucHV0LgorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9IChzLT5pb19iaXRzICYgbWFzaykgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jb3V0dyh2YWx1ZSwgQUREUl9SRUcoUkVHX0RJTykpOworCW91dHcocy0+c3RhdGUsIEFERFJfUkVHKFJFR19ESU8pKTsKIAogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKaW5kZXggYTIxOTY3OS4uODJhYTg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGQyYTIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1jb25maWcgQ09XTE9PUAotCXRyaXN0YXRlICJjb3B5LW9uLXdyaXRlIHBzZXVkbyBCbG9jayBEcml2ZXIiCi0JZGVwZW5kcyBvbiBCTE9DSwotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIENvd2xvb3AgaXMgYSAiY29weS1vbi13cml0ZSIgcHNldWRvIGJsb2NrIGRyaXZlci4gSXQgY2FuIGJlCi0JICBzdGFja2VkIG9uIHRvcCBvZiBhICJyZWFsIiBibG9jayBkcml2ZXIsIGFuZCBjYXRjaGVzIGFsbCB3cml0ZQotCSAgb3BlcmF0aW9ucyBvbiB0aGVpciB3YXkgZnJvbSB0aGUgZmlsZSBzeXN0ZW1zIGxheWVyIGFib3ZlIHRvCi0JICB0aGUgcmVhbCBkcml2ZXIgYmVsb3csIGVmZmVjdGl2ZWx5IHNoaWVsZGluZyB0aGUgbG93ZXIgZHJpdmVyCi0JICBmcm9tIHRob3NlIHdyaXRlIGFjY2Vzc2VzLiBUaGUgcmVxdWVzdHMgYXJlIHRoZW4gZGl2ZXJ0ZWQgdG8KLQkgIGFuIG9yZGluYXJ5IGZpbGUsIGxvY2F0ZWQgc29tZXdoZXJlIGVsc2UgKGNvbmZpZ3VyYWJsZSkuIExhdGVyCi0JICByZWFkIHJlcXVlc3RzIGFyZSBjaGVja2VkIHRvIHNlZSB3aGV0aGVyIHRoZXkgY2FuIGJlIHNlcnZpY2VkCi0JICBieSB0aGUgInJlYWwiIGJsb2NrIGRyaXZlciBiZWxvdywgb3IgbXVzdCBiZSBwdWxsZWQgaW4gZnJvbQotCSAgdGhlIGRpdmVydGVkIGxvY2F0aW9uLiBNb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2UgdG9vbHMgdG8KLQkgIHVzZSB0aGUgZHJpdmVyIGFyZSBvbiB0aGUgcHJvamVjdCdzIHdlYnNpdGUKLQkgIGh0dHA6Ly93d3cuQVRDb21wdXRpbmcubmwvY293bG9vcC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmI4MWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmotJChDT05GSUdfQ09XTE9PUCkJKz0gY293bG9vcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5OWQxYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVE9ETzoKLQktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKLQktIHJ1biBzcGFyc2UgdG8gZW5zdXJlIGNsZWFuCi0JLSBmaXggdXAgMzIvNjRiaXQgaW9jdGwgaXNzdWVzCi0JLSBtb3ZlIHByb2MgZmlsZSB1c2FnZSB0byBkZWJ1Z2ZzCi0JLSBhdWRpdCBpb2N0bHMKLQktIGFkZCBkb2N1bWVudGF0aW9uCi0JLSBnZXQgbGludXgtZnNkZXZlbCB0byByZXZpZXcgaXQKLQotUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byAiSC5KLiBUaG9tYXNzZW4iIDxoanRAQVRDb21wdXRpbmcubmw+IGFuZAotR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxYzc0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODQyICswLDAgQEAKLS8qCi0qKiAgICAgICBDT1dMT09QIGJsb2NrIGRldmljZSBkcml2ZXIgKDIuNiBrZXJuZWwgY29tcGxpYW50KQotKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoqIFJlYWQtd3JpdGUgbG9vcC1kcml2ZXIgd2l0aCBjb3B5LW9uLXdyaXRlIGZ1bmN0aW9uYWxpdHkuCi0qKgotKiogU3lub3BzaXM6Ci0qKgotKiogICAgIG1vZHByb2JlIGNvd2xvb3AgW21heGNvd3M9Li5dIFtyZG9maWxlPS4uLi4uIGNvd2ZpbGU9Li4uLiBbb3B0aW9uPXJdXQotKioKLSoqIERlZmluaXRpb24gb2YgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlczoKLSoqICAgbWF4Y293cz0JbnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlcyAoZGVmYXVsdDogMTYpCi0qKiAoZG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIE1BWENPV1M6IGFic29sdXRlIG1heGltdW0gYXMgY29tcGlsZWQpCi0qKgotKiogT25lIHBhaXIgb2YgZmlsZW5hbWVzIGNhbiBiZSBzdXBwbGllZCBkdXJpbmcgaW5zbW9kL21vZHByb2JlIHRvIG9wZW4KLSoqIHRoZSBmaXJzdCBjb3dkZXZpY2U6Ci0qKiAgIHJkb2ZpbGU9CXJlYWQtb25seSBmaWxlIChvciBmaWxlc3lzdGVtKQotKiogICBjb3dmaWxlPQlzdG9yYWdlLXNwYWNlIGZvciBtb2RpZmllZCBibG9ja3Mgb2YgcmVhZC1vbmx5IGZpbGUoc3lzdGVtKQotKiogICBvcHRpb249cglyZXBhaXIgY293ZmlsZSBhdXRvbWF0aWNhbGx5IGlmIGl0IGFwcGVhcnMgdG8gYmUgZGlydHkKLSoqCi0qKiBPdGhlciBjb3dkZXZpY2VzIGNhbiBiZSBhY3RpdmF0ZWQgdmlhIHRoZSBjb21tYW5kICJjb3dkZXYiCi0qKiB3aGVuZXZlciB0aGUgY293bG9vcC1kcml2ZXIgaXMgbG9hZGVkLgotKioKLSoqIFRoZSByZWFkLW9ubHkgZmlsZSBtYXkgYmUgb2YgdHlwZSAncmVndWxhcicgb3IgJ2Jsb2NrLWRldmljZScuCi0qKgotKiogVGhlIGNvd2ZpbGUgbXVzdCBiZSBvZiB0eXBlICdyZWd1bGFyJy4KLSoqIElmIGFuIGV4aXN0aW5nIHJlZ3VsYXIgZmlsZSBpcyB1c2VkIGFzIGNvd2ZpbGUsIGl0cyBjb250ZW50cyB3aWxsIGJlCi0qKiB1c2VkIGFnYWluIGZvciB0aGUgY3VycmVudCByZWFkLW9ubHkgZmlsZS4gV2hlbiB0aGUgY293ZmlsZSBoYXMgbm90IGJlZW4KLSoqIGNsb3NlZCBwcm9wZXJseSBkdXJpbmcgYSBwcmV2aW91cyBzZXNzaW9uIChpLmUuIHJtbW9kIGNvd2xvb3ApLCB0aGUKLSoqIGNvd2xvb3AtZHJpdmVyIHJlZnVzZXMgdG8gb3BlbiBpdCB1bmxlc3MgdGhlIHBhcmFtZXRlciAib3B0aW9uPXIiIGlzCi0qKiBzcGVjaWZpZWQuCi0qKgotKiogTGF5b3V0IG9mIGNvd2ZpbGU6Ci0qKgotKiogCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSoqCXwgICAgICAgY293IGhlYWQgYmxvY2sgICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0qKgl8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLSAgICAgICAgICAgICAgICAgICAgICAgLS0tfAotKioJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0gICAgICAgICAgICAgICAgICAgICAgIC0tLXwKLSoqCXwgICAgICB1c2VkLWJsb2NrIGJpdG1hcCAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0qKgl8ICBnYXAgdG8gYWxpZ24gc3RhcnQtb2Zmc2V0ICB8Ci0qKgl8ICAgICAgICB0byA0SyBtdWx0aXBsZSAgICAgICB8Ci0qKgl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICA8LS0tLSBzdGFydC1vZmZzZXQgY293IGJsb2NrcwotKioJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKiogICAgICB8ICAgIHdyaXR0ZW4gY293IGJsb2NrcyAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKiogICAgICB8ICAgICAgICAgIC4uLi4uICAgICAgICAgICAgICB8Ci0qKgotKiogCWNvd2hlYWQgYmxvY2s6Ci0qKiAgIAkgIC0gY29udGFpbnMgZ2VuZXJhbCBpbmZvIGFib3V0IHRoZSByZG9maWxlIHdoaWNoIGlzIHJlbGF0ZWQKLSoqIAkgICAgdG8gdGhpcyBjb3dmaWxlCi0qKgotKiogCXVzZWQtYmxvY2sgYml0bWFwOgotKiogCSAgLSBjb250YWlucyBvbmUgYml0IHBlciBibG9jayB3aXRoIGEgc2l6ZSBvZiBNQVBVTklUIGJ5dGVzCi0qKiAJICAtIGJpdC12YWx1ZSAnMScgPSBibG9jayBoYXMgYmVlbiB3cml0dGVuIG9uIGNvdwotKiogCSAgICAgICAgICAgICAgJzAnID0gYmxvY2sgdW51c2VkIG9uIGNvdwotKiogCSAgLSB0b3RhbCBiaXRtYXAgcm91bmRlZCB0byBtdWx0aXBsZXMgb2YgTUFQVU5JVAotKioKLSoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoqIEF1dGhvcjogICAgICAgICAgICAgR2VybG9mIExhbmdldmVsZCAtIEFUIENvbXB1dGluZyAoTWFyY2ggMjAwMykKLSoqIEN1cnJlbnQgbWFpbnRhaW5lcjogSGVuZHJpay1KYW4gVGhvbWFzc2VuIC0gQVQgQ29tcHV0aW5nIChTdW1tZXIgMjAwNikKLSoqIEVtYWlsOiAgICAgICAgICAgICAgaGp0QEFUQ29tcHV0aW5nLm5sCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSBBVCBDb25zdWx0YW5jeQotKioKLSoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0qKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSoqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSoqIGxhdGVyIHZlcnNpb24uCi0qKgotKiogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotKiogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKiogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKioKLSoqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotKiogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqIE1ham9yIG1vZGlmaWNhdGlvbnM6Ci0qKgotKiogCTIwMDQwNQlQb3J0ZWQgdG8ga2VybmVsLXZlcnNpb24gMi42CQlIZW5kcmlrLUphbiBUaG9tYXNzZW4KLSoqCTIwMDQwNQlBZGRlZCBjb3doZWFkIHRvIGNvd2ZpbGUgdG8gZ2FyYW50ZWUKLSoqCQljb25zaXN0ZW5jeSB3aXRoIHJlYWQtb25seSBmaWxlCQlHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA0MDUJUG9zdHBvbmVkIGZsdXNoaW5nIG9mIGJpdG1hcHMgdG8gaW1wcm92ZQotKioJCXBlcmZvcm1hbmNlLiAJCQkJR2VybG9mIExhbmdldmVsZAotKioJMjAwNDA1CUlubGluZSByZWNvdmVyeSBmb3IgZGlydHkgY293ZmlsZXMuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDUwMglSZWRlc2lnbiB0byBzdXBwb3J0IG1vcmUgY293ZGV2aWNlcy4JR2VybG9mIExhbmdldmVsZAotKioJMjAwNTAyCVN1cHBvcnQgZGV2aWNlcy9maWxlID4gMiBHYnl0ZXMuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDUwNwlDaGVjayBmb3IgZnJlZSBzcGFjZSB0byBleHBhbmQgY293ZmlsZS4JR2VybG9mIExhbmdldmVsZAotKioJMjAwOTAyICBVcGdyYWRlIGZvciBrZXJuZWwgMi42LjI4ICAgICAgICAgICAgICAgSGVuZHJpay1KYW4gVGhvbWFzc2VuCi0qKgotKiogSW5zcGlyZWQgYnkKLSoqICAgIGxvb3AuYyAgYnkgVGhlb2RvcmUgVHMnbyBhbmQKLSoqICAgIGNsb29wLmMgYnkgUGF1bCBgUnVzdHknIFJ1c3NlbGwgJiBLbGF1cyBLbm9wcGVyLgotKioKLSoqIERlc2lnbi1jb25zaWRlcmF0aW9uczoKLSoqCi0qKiAgIEZvciB0aGUgZmlyc3QgZXhwZXJpbWVudHMgd2l0aCB0aGUgY293bG9vcC1kcml2ZXIsIHRoZSByZXF1ZXN0LXF1ZXVlCi0qKiAgIG1hZGUgdXNlIG9mIHRoZSBkb19nZW5lcmljX2ZpbGVfcmVhZCgpIHdoaWNoIHdvcmtlZCBmaW5lIGV4Y2VwdAotKiogICBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBjbG9vcC1kcml2ZXI7IHRoYXQgY29tYmluYXRpb24KLSoqICAgcmVzdWx0ZWQgaW4gYSBub24taW50ZXJydXB0aWJsZSBoYW5ndXAgb2YgdGhlIHN5c3RlbSBkdXJpbmcKLSoqICAgaGVhdnkgbG9hZC4gT3RoZXIgZXhwZXJpbWVudHMgdXNpbmcgdGhlIGBtYWtlX3JlcXVlc3QnIGludGVyZmFjZSBhbHNvCi0qKiAgIHJlc3VsdGVkIGluIHVucHJlZGljdGFibGUgc3lzdGVtIGhhbmd1cHMgKHdpdGggcHJvcGVyIHVzZSBvZiBzcGlubG9ja3MpLgotKioKLSoqICAgVG8gb3ZlcmNvbWUgdGhlc2UgcHJvYmxlbXMsIHRoZSBjb3dsb29wLWRyaXZlciBzdGFydHMgYSBrZXJuZWwtdGhyZWFkCi0qKiAgIGZvciBldmVyeSBhY3RpdmUgY293ZGV2aWNlLgotKiogICBBbGwgcmVhZC0gYW5kIHdyaXRlLXJlcXVlc3Qgb24gdGhlIHJlYWQtb25seSBmaWxlIGFuZCBjb3B5LW9uLXdyaXRlIGZpbGUKLSoqICAgYXJlIGhhbmRsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhhdCB0aHJlYWQuCi0qKiAgIEEgc2NoZW1lIGhhcyBiZWVuIGRlc2lnbmVkIHRvIHdha2V1cCB0aGUga2VybmVsLXRocmVhZCBhcwotKiogICBzb29uIGFzIEkvTy1yZXF1ZXN0cyBhcmUgYXZhaWxhYmxlIGluIHRoZSByZXF1ZXN0LXF1ZXVlOyB0aGlzIHRocmVhZAotKiogICBoYW5kbGVzIHRoZSByZXF1ZXN0cyBvbmUtYnktb25lIGJ5IGNhbGxpbmcgdGhlIHByb3BlciByZWFkLSBvcgotKiogICB3cml0ZS1mdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBvcGVuIHJlYWQtb25seSBmaWxlIG9yIGNvcHktb24td3JpdGUgZmlsZS4KLSoqICAgV2hlbiBhbGwgcGVuZGluZyByZXF1ZXN0cyBoYXZlIGJlZW4gaGFuZGxlZCwgdGhlIGtlcm5lbC10aHJlYWQgZ29lcwotKiogICBiYWNrIHRvIHNsZWVwLXN0YXRlLgotKiogICBUaGlzIGFwcHJvYWNoIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCBjb250ZXh0LXN3aXRjaGVzOyBob3dldmVyIHRoZQotKiogICBwZXJmb3JtYW5jZSBsb3NzIGR1cmluZyBoZWF2eSBJL08gaXMgbGVzcyB0aGFuIDMlLgotKioKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBpcyB0aGUgY293bG9vcCBwYWNrYWdlIHZlcnNpb24gbnVtYmVyLiBJdCBtdXN0IGJlCi0gICBpZGVudGljYWwgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGluY2x1ZGUtZmlsZSAidmVyc2lvbi5oIiB0aGF0IGlzCi0gICB1c2VkIGluIGFsbCBzdXBwb3J0aW5nIHV0aWxpdGllczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWNoYXIgcmV2aXNpb25bXSA9ICIkUmV2aXNpb246IDMuMSAkIjsgLyogY293bG9faW5pdF9tb2R1bGUoKSBoYXMKLQkJCSAgICAgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyBzdHJpbmcncyBmb3JtYXQgICAqLwotCi0vKiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBudW1iZXJzIGFyZSAqbm90KiB0aGUgY293bG9vcCBwYWNrYWdlIHZlcnNpb24KLSAgIG51bWJlcnMsIGJ1dCBzZXBhcmF0ZSByZXZpc2lvbiBoaXN0b3J5IG51bWJlcnMgdG8gdHJhY2sgdGhlCi0gICBtb2RpZmljYXRpb25zIG9mIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZTogICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICRMb2c6IGNvd2xvb3AuYyx2ICQKLSoqCi0qKiBSZXZpc2lvbiAxLjMwICAyMDA5LzAyLzA4IGhqdAotKiogSW50ZWdyYXRlZCBlYXJsaWVyIGZpeGVzCi0qKiBVcGdyYWRlZCB0byBrZXJuZWwgMi42LjI4ICh0aGFua3MgSmVyb21lIFBvdWxpbikKLSoqCi0qKiBSZXZpc2lvbiAxLjI5ICAyMDA2LzEyLzAzIDIyOjEyOjAwICBoanQKLSoqIGNoYW5nZWQgJ2Nvd2RldmxvY2snIGZyb20gc3BpbmxvY2sgdG8gc2VtYXBob3JlLCB0byBhdm9pZAotKiogInNjaGVkdWxpbmcgd2hpbGUgYXRvbWljIi4gQ29udHJpYnV0ZWQgYnkgSnVlcmdlbiBDaHJpc3QuCi0qKiBBZGRlZCB2ZXJzaW9uLmggYWdhaW4KLSoqCi0qKiBSZXZpc2lvbiAxLjI4ICAyMDA2LzA4LzE2IDE2OjAwOjAwICBoanQKLSoqIG1hbGxvYyBlYWNoIGluZGl2aWR1YWwgY293bG9vcGRldmljZSBzdHJ1Y3Qgc2VwYXJhdGVseQotKioKLSoqIFJldmlzaW9uIDEuMjcgIDIwMDYvMDMvMTQgMTQ6NTc6MDMgIHJvb3QKLSoqIFJlbW92ZWQgaW5jbHVkZSB2ZXJzaW9uLmgKLSoqCi0qKiBSZXZpc2lvbiAxLjI2ICAyMDA1LzA4LzA4IDExOjIyOjQ4ICByb290Ci0qKiBJbXBsZW1lbnQgcG9zc2liaWxpdHkgdG8gY2xvc2UgYSBjb3cgZmlsZSBvciByZW9wZW4gYSBjb3dmaWxlIHJlYWQtb25seS4KLSoqCi0qKiBSZXZpc2lvbiAxLjI1ICAyMDA1LzA4LzAzIDE0OjAwOjM5ICByb290Ci0qKiBBZGRlZCBtb2RpbmZvIGluZm8gdG8gZHJpdmVyLgotKioKLSoqIFJldmlzaW9uIDEuMjQgIDIwMDUvMDcvMjEgMDY6MTQ6NTMgIHJvb3QKLSoqIENvc21ldGljIGNoYW5nZXMgc291cmNlIGNvZGUuCi0qKgotKiogUmV2aXNpb24gMS4yMyAgMjAwNS8wNy8yMCAxMzowNzozMiAgcm9vdAotKiogU3VwcGx5IGlvY3RsIHRvIHdyaXRlIHdhdGNoZG9nIHByb2dyYW0gdG8gcmVhY3Qgb24gbGFjayBvZiBjb3dmaWxlIHNwYWNlLgotKioKLSoqIFJldmlzaW9uIDEuMjIgIDIwMDUvMDcvMjAgMDc6NTM6MzQgIHJvb3QKLSoqIFJlZ3VsYXIgdmVyaWZpY2F0aW9uIG9mIGZyZWUgc3BhY2UgaW4gZmlsZXN5c3RlbSBob2xkaW5nIHRoZSBjb3dmaWxlCi0qKiAoZ2l2ZSB3YXJuaW5ncyB3aGVuZXZlciBzcGFjZSBpcyBhbG1vc3QgZXhoYXVzdGVkKS4KLSoqIFRlcm1pbm9sb2d5IGNoYW5nZTogY2hlY2tzdW0gcmVuYW1lZCB0byBmaW5nZXJwcmludC4KLSoqCi0qKiBSZXZpc2lvbiAxLjIxICAyMDA1LzA3LzE5IDA5OjIxOjUyICByb290Ci0qKiBSZW1vdmluZyBtYXhpbXVtIGxpbWl0IG9mIDE2IEdiIHBlciBjb3dkZXZpY2UuCi0qKgotKiogUmV2aXNpb24gMS4yMCAgMjAwNS8wNy8xOSAwNzo1MDozMyAgcm9vdAotKiogTWlub3IgYnVnZml4ZXMgYW5kIGNvc21ldGljIGNoYW5nZXMuCi0qKgotKiogUmV2aXNpb24gMS4xOSAgMjAwNS8wNi8xMCAxMjoyOTo1NSAgcm9vdAotKiogUmVtb3ZlZCBsb2NrL3VubG9jayBvcGVyYXRpb24gZnJvbSBjb3dsb19vcGVuKCkuCi0qKgotKiogUmV2aXNpb24gMS4xOCAgMjAwNS8wNS8wOSAxMjo1NjoyNiAgcm9vdAotKiogQWxsb3cgYSBjb3dkZXZpY2UgdG8gYmUgb3BlbiBtb3JlIHRoYW4gb25jZQotKiogKG5lZWRlZCBmb3Igc3VwcG9ydCBvZiBSZWlzZXJGUyBhbmQgWEZTKS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE3ICAyMDA1LzAzLzE3IDE0OjM2OjE2ICByb290Ci0qKiBGaXhlZCBzb21lIGxpY2Vuc2UgaXNzdWVzLgotKioKLSoqIFJldmlzaW9uIDEuMTYgIDIwMDUvMDMvMDcgMTQ6NDI6MDUgIHJvb3QKLSoqIE9ubHkgYWxsb3cgb25lIHBhcmFsbGVsIG9wZW4gcGVyIGNvd2RldmljZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE1ICAyMDA1LzAyLzE4IDExOjUyOjA0ICBnZXJsb2YKLSoqIFJlZGVzaWduIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjb3dkZXZpY2UgPiAyIEdiIHNwYWNlLgotKioKLSoqIFJldmlzaW9uIDEuMTQgIDIwMDQvMDgvMTcgMTQ6MTk6MTYgIGdlcmxvZgotKiogTW9kaWZpZWQgb3V0cHV0IG9mIC9wcm9jL2Nvd2xvb3AuCi0qKgotKiogUmV2aXNpb24gMS4xMyAgMjAwNC8wOC8xNiAwNzoyMToxMCAgZ2VybG9mCi0qKiBTZXBhcmF0ZSBzdGF0aXN0aWNhbCBjb3VudGVyIGZvciByZWFkIG9uIHJkb2ZpbGUgYW5kIGNvd2ZpbGUuCi0qKgotKiogUmV2aXNpb24gMS4xMiAgMjAwNC8wOC8xMSAwNjo1MjoxMSAgZ2VybG9mCi0qKiBNb2RpZmllZCBtZXNzYWdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjExICAyMDA0LzA4LzExIDA2OjQ0OjExICBnZXJsb2YKLSoqIE1vZGlmaWVkIGxvZyBtZXNzYWdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjEwICAyMDA0LzA4LzEwIDEyOjI3OjI3ICBnZXJsb2YKLSoqIENvc21ldGljIGNoYW5nZXMuCi0qKgotKiogUmV2aXNpb24gMS45ICAyMDA0LzA4LzA5IDExOjQzOjM3ICBnZXJsb2YKLSoqIFJlbW92ZWQgZG91YmxlIGRlZmluaXRpb24gb2YgbWFqb3IgbnVtYmVyIChDT1dNQUpPUikuCi0qKgotKiogUmV2aXNpb24gMS44ICAyMDA0LzA4LzA5IDA4OjAzOjM5ICBnZXJsb2YKLSoqIENsZWFudXAgb2YgbWVzc2FnZXMuCi0qKgotKiogUmV2aXNpb24gMS43ICAyMDA0LzA1LzI3IDA2OjM3OjMzICBnZXJsb2YKLSoqIE1vZGlmaWVkIC9wcm9jIG1lc3NhZ2UuCi0qKgotKiogUmV2aXNpb24gMS42ICAyMDA0LzA1LzI2IDIxOjIzOjI4ICBnZXJsb2YKLSoqIE1vZGlmaWVkIC9wcm9jIG91dHB1dC4KLSoqCi0qKiBSZXZpc2lvbiAxLjUgIDIwMDQvMDUvMjYgMTM6MjM6MzQgIGdlcmxvZgotKiogU3VwcG9ydCBjb3dzeW5jIHRvIGZvcmNlIGZsdXNoaW5nIHRoZSBiaXRtYXBzIGFuZCBjb3doZWFkLgotKioKLSoqIFJldmlzaW9uIDEuNCAgMjAwNC8wNS8yNiAxMToxMToxMCAgZ2VybG9mCi0qKiBVcGRhdGVkIHRoZSBjb21tZW50IHRvIHRoZSBhY3R1YWwgc2l0dWF0aW9uLgotKioKLSoqIFJldmlzaW9uIDEuMyAgMjAwNC8wNS8yNiAxMDo1MDowMCAgZ2VybG9mCi0qKiBJbXBsZW1lbnRlZCByZWNvdmVyeS1vcHRpb24uCi0qKgotKiogUmV2aXNpb24gMS4yICAyMDA0LzA1LzI1IDE1OjE0OjQxICBnZXJsb2YKLSoqIE1vZGlmaWVkIGJpdG1hcCBmbHVzaGluZyBzdHJhdGVneS4KLSoqCi0qLwotCi0jZGVmaW5lIENPV01BSk9SCTI0MQotCi0vLyAjZGVmaW5lIENPV0RFQlVHCi0KLSNpZmRlZiAJQ09XREVCVUcKLSNkZWZpbmUgREVCVUdQCQlwcmludGsKLSNkZWZpbmUgRENPVwkJS0VSTl9BTEVSVAotI2Vsc2UKLSNkZWZpbmUgREVCVUdQKGZvcm1hdCwgeC4uLikKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgotI2lmbmRlZiBBVVRPQ09ORl9JTkNMVURFRAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgotCi0jaW5jbHVkZSAiY293bG9vcC5oIgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0vKiBNT0RVTEVfQVVUSE9SKCJHZXJsb2YgTGFuZ2V2ZWxkIDxnZXJsb2ZAQVRDb21wdXRpbmcubmw+Iik7ICAgICBvYnNvbGV0ZSBhZGRyZXNzICovCi1NT0RVTEVfQVVUSE9SKCJIZW5kcmlrLUphbiBUaG9tYXNzZW4gPGhqdEBBVENvbXB1dGluZy5ubD4iKTsgLyogY3VycmVudCBtYWludGFpbmVyICovCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNvcHktb24td3JpdGUgbG9vcCBkcml2ZXIiKTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4Y293cywgIiBOdW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzIChkZWZhdWx0IDE2KSIpOwotTU9EVUxFX1BBUk1fREVTQyhyZG9maWxlLCAiIFJlYWQtb25seSBmaWxlIGZvciAvZGV2L2Nvdy8wIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvd2ZpbGUsICIgQ293ZmlsZSBmb3IgL2Rldi9jb3cvMCIpOwotTU9EVUxFX1BBUk1fREVTQyhvcHRpb24sICIgIFJlcGFpciBjb3dmaWxlIGlmIGluY29uc2lzdGVudDogb3B0aW9uPXIiKTsKLQotI2RlZmluZSBERVZJQ0VfTkFNRQkiY293IgotCi0jZGVmaW5lCURGTENPV1MJCTE2CQkvKiBkZWZhdWx0IGNvd2xvb3AgZGV2aWNlcwkqLwotCi1zdGF0aWMgaW50IG1heGNvd3MgPSBERkxDT1dTOwotbW9kdWxlX3BhcmFtKG1heGNvd3MsIGludCwgMCk7Ci1zdGF0aWMgY2hhciAqcmRvZmlsZSA9ICIiOwotbW9kdWxlX3BhcmFtKHJkb2ZpbGUsIGNoYXJwLCAwKTsKLXN0YXRpYyBjaGFyICpjb3dmaWxlID0gIiI7Ci1tb2R1bGVfcGFyYW0oY293ZmlsZSwgY2hhcnAsIDApOwotc3RhdGljIGNoYXIgKm9wdGlvbiA9ICIiOwotbW9kdWxlX3BhcmFtKG9wdGlvbiwgY2hhcnAsIDApOwotCi0vKgotKiogcGVyIGNvd2RldmljZSBzZXZlcmFsIGJpdG1hcCBjaHVua3MgYXJlIGFsbG93ZWQgb2YgTUFQQ0hVTktTWiBlYWNoCi0qKgotKiogZWFjaCBiaXRtYXAgY2h1bmsgY2FuIGRlc2NyaWJlIE1BUENIVU5LU1ogKiA4ICogTUFQVU5JVCBieXRlcyBvZiBkYXRhCi0qKiBzdXBwb3NlOgotKioJTUFQQ0hVTktTWiA0MDk2IGFuZCBNQVBVTklUIDEwMjQgLS0+IDQwOTYgKiA4ICogMTAyNCA9IDMyIE1iIHBlciBjaHVuawotKi8KLSNkZWZpbmUJTUFQQ0hVTktTWgk0MDk2CS8qICNieXRlcyBwZXIgYml0bWFwIGNodW5rICAoZG8gbm90IGNoYW5nZSkgICovCi0KLSNkZWZpbmUgU1BDTUlOQkxLCTEwMAkvKiBzcGFjZSB0aHJlc2hvbGQgdG8gZ2l2ZSB3YXJuaW5nIG1lc3NhZ2VzICAqLwotI2RlZmluZSBTUENERkxJTlRWTAkxNgkvKiBvbmNlIGV2ZXJ5IFNQQ0RGTElOVFZMIHdyaXRlcyB0byBjb3dmaWxlLCAqLwotCQkJCS8qIGF2YWlsYWJsZSBzcGFjZSBpbiBmaWxlc3lzdGVtIGlzIGNoZWNrZWQgICovCi0KLSNkZWZpbmUJQ0FMQ01BUCh4KQkoKHgpLyhNQVBDSFVOS1NaKjgpKQotI2RlZmluZQlDQUxDQllURSh4KQkoKCh4KSUoTUFQQ0hVTktTWio4KSk+PjMpCi0jZGVmaW5lCUNBTENCSVQoeCkJKCh4KSY3KQotCi0jZGVmaW5lIEFMTENPVwkJMQotI2RlZmluZSBBTExSRE8JCTIKLSNkZWZpbmUgTUlYRURVUAkJMwotCi1zdGF0aWMgY2hhcglhbGx6ZXJvZXNbTUFQVU5JVF07Ci0KLS8qCi0qKiBhZG1pbmlzdHJhdGlvbiBwZXIgY293ZGV2aWNlIChwYWlyIG9mIGNvd2ZpbGUvcmRvZmlsZSkKLSovCi0KLS8qIGJpdC12YWx1ZXMgZm9yIHN0YXRlICovCi0jZGVmaW5lCUNPV0RFVk9QRU4JMHgwMQkvKiBjb3dkZXZpY2Ugb3BlbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlDT1dSV0NPV09QRU4JMHgwMgkvKiBjb3dmaWxlIG9wZW5lZCByZWFkLXdyaXRlICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlDT1dSRENPV09QRU4JMHgwNAkvKiBjb3dmaWxlIG9wZW5lZCByZWFkLW9ubHkgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlDT1dXQVRDSERPRwkweDA4IAkvKiBpb2N0bCBmb3Igd2F0Y2hkb2cgY293ZmlsZSBzcGFjZSBhY3RpdmUgICAqLwotCi0jZGVmaW5lCUNPV0NPV09QRU4JKENPV1JXQ09XT1BFTnxDT1dSRENPV09QRU4pCi0KLXN0cnVjdCBjb3dsb29wX2RldmljZQotewotCS8qCi0JKiogY3VycmVudCBzdGF0dXMKLQkqLwotCWludAkJc3RhdGU7CQkJLyogYml0LXZhbHVlcyAoc2VlIGFib3ZlKSAgICAqLwotCWludAkJb3BlbmNudDsJCS8qICMgb3BlbnMgZm9yIGNvd2RldmljZSAgICAgKi8KLQotICAgICAgICAvKgotCSoqIG9wZW4gZmlsZSBwb2ludGVycwotCSovCi0gICAgICAgIHN0cnVjdCBmaWxlICAJKnJkb2ZwLCAgICpjb3dmcDsJLyogb3BlbiBmaWxlIHBvaW50ZXJzICAgICAgICAqLwotCWNoYXIJCSpyZG9uYW1lLCAqY293bmFtZTsJLyogZmlsZSBuYW1lcyAgICAgICAgICAgICAgICAqLwotCi0JLyoKLQkqKiByZXF1ZXN0IHF1ZXVlIGFkbWluaXN0cmF0aW9uCi0JKi8KLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcnF1ZXVlOwotCXNwaW5sb2NrX3QJCXJxbG9jazsKLQlzdHJ1Y3QgZ2VuZGlzawkJKmdkOwotCi0JLyoKLQkqKiBhZG1pbmlzdHJhdGlvbiBhYm91dCByZWFkLW9ubHkgZmlsZQotCSovCi0JdW5zaWduZWQgaW50CSAgICAgbnVtYmxvY2tzOwkvKiAjIGJsb2NrcyBpbnB1dCBmaWxlIGluIE1BUFVOSVQgICAgKi8KLQl1bnNpZ25lZCBpbnQJICAgICBibG9ja3N6OyAgIC8qIG1pbmltdW0gdW5pdCB0byBhY2Nlc3MgdGhpcyBkZXYgICAqLwotCXVuc2lnbmVkIGxvbmcJICAgICBmaW5nZXJwcmludDsgLyogZmluZ2VycHJpbnQgb2YgY3VycmVudCByZG9maWxlICAqLwotCXN0cnVjdCBibG9ja19kZXZpY2UgICpiZWxvd2RldjsJLyogYmxvY2sgZGV2aWNlIGJlbG93IHVzICAgICAgICAgICAgICovCi0Jc3RydWN0IGdlbmRpc2sgICAgICAgKmJlbG93Z2Q7ICAvKiBnZW5kaXNrIGZvciBibGsgZGV2IGJlbG93IHVzICAgICAgKi8KLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmVsb3dxOwkvKiByZXEuIHF1ZXVlIG9mIGJsayBkZXYgYmVsb3cgdXMgICAgKi8KLQotCS8qCi0JKiogYml0bWFwIGFkbWluaXN0cmF0aW9uIHRvIHJlZ2lzdGVyIHdoaWNoIGJsb2NrcyBhcmUgbW9kaWZpZWQKLQkqLwotCWxvbmcgaW50CW1hcHNpemU7CS8qIHRvdGFsIHNpemUgb2YgYml0bWFwIChieXRlcykgICAgICAqLwotCWxvbmcgaW50CW1hcHJlbWFpbjsJLyogcmVtYWluaW5nIGJ5dGVzIGluIGxhc3QgYml0bWFwICAgICovCi0JaW50CQltYXBjb3VudDsgICAgICAgLyogbnVtYmVyIG9mIGJpdG1hcHMgaW4gdXNlICAgICAgICAgICovCi0JY2hhciAJCSoqbWFwY2FjaGU7CS8qIGFyZWEgd2l0aCBwb2ludGVycyB0byBiaXRtYXBzICAgICAqLwotCi0JY2hhcgkJKmlvYnVmOwkJLyogZGF0YWJ1ZmZlciBvZiBNQVBVTklUIGJ5dGVzICAgICAgICovCi0Jc3RydWN0IGNvd2hlYWQJKmNvd2hlYWQ7CS8qIGJ1ZmZlciBjb250YWluaW5nIGNvd2hlYWQgICAgICAgICAqLwotCi0JLyoKLQkqKiBhZG1pbmlzdHJhdGlvbiBmb3IgaW50ZXJmYWNlIHdpdGggdGhlIGtlcm5lbC10aHJlYWQKLQkqLwotCWludAkJcGlkOwkJLyogcGlkPT0wOiBubyB0aHJlYWQgYXZhaWxhYmxlICAgICAgICovCi0Jc3RydWN0IHJlcXVlc3QJKnJlcTsJCS8qIHJlcXVlc3QgdG8gYmUgaGFuZGxlZCBub3cgICAgICAgICAqLwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwkvKiB3YWl0LVE6IHRocmVhZCB3YWl0cyBmb3Igd29yayAgICAgKi8KLQljaGFyCQljbG9zZWRvd247CS8qIGJvb2xlYW46IHRocmVhZCBleGl0IHJlcXVpcmVkICAgICAqLwotCWNoYXIJCXFmaWxsZWQ7CS8qIGJvb2xlYW46IEkvTyByZXF1ZXN0IHBlbmRpbmcgICAgICAqLwotCWNoYXIJCWlvYnVzeTsJCS8qIGJvb2xlYW46IHJlcSB1bmRlciB0cmVhdG1lbnQgICAgICAqLwotCi0JLyoKLQkqKiBhZG1pbmlzdHJhdGlvbiB0byBrZWVwIHRyYWNrIG9mIGZyZWUgc3BhY2UgaW4gY293ZmlsZSBmaWxlc3lzdGVtCi0JKi8KLQl1bnNpZ25lZCBsb25nCWJsa3NpemU7CS8qIGJsb2NrIHNpemUgb2YgZnMgKGJ5dGVzKSAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJYmxrdG90YWw7CS8qIHJlY2VudCB0b3RhbCBzcGFjZSBpbiBmcyAoYmxvY2tzKSAqLwotCXVuc2lnbmVkIGxvbmcJYmxrYXZhaWw7CS8qIHJlY2VudCBmcmVlICBzcGFjZSBpbiBmcyAoYmxvY2tzKSAqLwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2F0Y2hxOwkvKiB3YWl0LVE6IHdhdGNoZXIgYXdhaXRzIHRocmVzaG9sZCAgKi8KLQl1bnNpZ25lZCBsb25nCXdhdGNodGhyZXNoOwkvKiB0aHJlc2hvbGQgb2Ygd2F0Y2hlciAoYmxvY2tzKSAgICAgKi8KLQotCS8qCi0JKiogc3RhdGlzdGljYWwgY291bnRlcnMKLQkqLwotCXVuc2lnbmVkIGxvbmcJcmRvcmVhZHM7CS8qIG51bWJlciBvZiAgcmVhZC1hY3Rpb25zIHJkbyAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJY293cmVhZHM7CS8qIG51bWJlciBvZiAgcmVhZC1hY3Rpb25zIGNvdyAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJY293d3JpdGVzOwkvKiBudW1iZXIgb2Ygd3JpdGUtYWN0aW9ucyAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCW5yY293YmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIGluIHVzZSBvbiBjb3cgICAgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKipjb3dkZXZhbGw7CS8qIHB0ciB0byBwdHJzIHRvIGFsbCBjb3dkZXZpY2VzICovCi1zdGF0aWMgc3RydWN0IHNlbWFwaG9yZSAJY293ZGV2bG9jazsJLyogZ2VuZXJpYyBsb2NrIGZvciBjb3dkZXZzICAgICAgKi8KLQotc3RhdGljIHN0cnVjdCBnZW5kaXNrCQkqY293Y3RsZ2Q7CS8qIGdlbmRpc2sgY29udHJvbCBjaGFubmVsICAgICAgICovCi1zdGF0aWMgc3BpbmxvY2tfdAkJY293Y3RscnFsb2NrOyAgIC8qIGZvciByZXEucS4gb2YgY3RybC4gY2hhbm5lbCAgICovCi0KLS8qCi0qKiBwcml2YXRlIGRpcmVjdG9yeSAvcHJvYy9jb3cKLSovCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmNvd2xvX3Byb2NkaXI7Ci0KLS8qCi0qKiBmdW5jdGlvbiBwcm90b3R5cGVzCi0qLwotc3RhdGljIGxvbmcgaW50IGNvd2xvX2RvX3JlcXVlc3QgKHN0cnVjdCByZXF1ZXN0ICpyZXEpOwotc3RhdGljIHZvaWQJY293bG9fc3luYyAgICAgICAodm9pZCk7Ci1zdGF0aWMgaW50CWNvd2xvX2NoZWNraW8gICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCAgICAgICAgIGludCwgbG9mZl90KTsKLXN0YXRpYyBpbnQJY293bG9fcmVhZG1peCAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGludAljb3dsb193cml0ZW1peCAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fcmVhZHJkbyAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3JlYWRjb3cgICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb19yZWFkY293cmF3IChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fd3JpdGVjb3cgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3dyaXRlY293cmF3KHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBpbnQgICAgICBjb3dsb19pb2N0bCAgICAgIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGZtb2RlX3QsCi0gICAgICAgICAgIAkJCSAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgaW50CWNvd2xvX21ha2VwYWlyICAgIChzdHJ1Y3QgY293cGFpciBfX3VzZXIgKik7Ci1zdGF0aWMgaW50CWNvd2xvX3JlbW92ZXBhaXIgICh1bnNpZ25lZCBsb25nICBfX3VzZXIgKik7Ci1zdGF0aWMgaW50CWNvd2xvX3dhdGNoICAgICAgIChzdHJ1Y3QgY293cGFpciBfX3VzZXIgKik7Ci1zdGF0aWMgaW50CWNvd2xvX2Nvd2N0bCAgICAgICh1bnNpZ25lZCBsb25nICBfX3VzZXIgKiwgaW50KTsKLXN0YXRpYyBpbnQJY293bG9fb3BlbnBhaXIgICAgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCk7Ci1zdGF0aWMgaW50IAljb3dsb19jbG9zZXBhaXIgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICopOwotc3RhdGljIGludAljb3dsb19vcGVucmRvICAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIGNoYXIgKik7Ci1zdGF0aWMgaW50CWNvd2xvX29wZW5jb3cgICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgY2hhciAqLCBpbnQpOwotc3RhdGljIHZvaWQJY293bG9fdW5kb19vcGVucmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKTsKLXN0YXRpYyB2b2lkCWNvd2xvX3VuZG9fb3BlbmNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFN5c3RlbSBjYWxsIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIGhhbmRsZSBzeXN0ZW0gY2FsbCBvcGVuKCkvbW91bnQoKQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQgY293bG9fb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGJkZXYtPmJkX2lub2RlOwotCi0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW1ham9yKGlub2RlKSAhPSBDT1dNQUpPUikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuZXhwZWN0ZWQgbWFqb3IgJWRcbiIsIGltYWpvcihpbm9kZSkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzd2l0Y2ggKGltaW5vcihpbm9kZSkpIHsKLQkgICBjYXNlIENPV0NUTDoKLQkJREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW4gJWQgY29udHJvbFxuIiwgQ09XQ1RMKTsKLQkJYnJlYWs7Ci0KLQkgICBkZWZhdWx0OgotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbiBtaW5vciAlZFxuIiwgaW1pbm9yKGlub2RlKSk7Ci0KLQkJaWYgKCBpbWlub3IoaW5vZGUpID49IG1heGNvd3MgKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJaWYgKCAhKChjb3dkZXZhbGxbaW1pbm9yKGlub2RlKV0pLT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCShjb3dkZXZhbGxbaW1pbm9yKGlub2RlKV0pLT5vcGVuY250Kys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgc3lzdGVtIGNhbGwgY2xvc2UoKS91bW91bnQoKQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKi8KLXN0YXRpYyBpbnQgY293bG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZ2QsIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQliZGV2ID0gYmRnZXRfZGlzayhnZCwgMCk7Ci0JaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gMDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWxlYXNlIChjbG9zZSkgbWlub3IgJWRcbiIsIGltaW5vcihpbm9kZSkpOwotCi0JaWYgKCBpbWlub3IoaW5vZGUpICE9IENPV0NUTCkKLQkJKGNvd2RldmFsbFtpbWlub3IoaW5vZGUpXSktPm9wZW5jbnQtLTsKLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIHN5c3RlbSBjYWxsIGlvY3RsKCkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50IGNvd2xvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBoZF9nZW9tZXRyeQlnZW87Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGJkZXYtPmJkX2lub2RlOwotCi0JREVCVUdQKERDT1cgImNvd2xvb3AgLSBpb2N0bCBjbWQgJXhcbiIsIGNtZCk7Ci0KLQlzd2l0Y2ggKCBpbWlub3IoaW5vZGUpICkgewotCi0JICAgLyoKLQkgICAqKiBhbGxvd2VkIHZpYSBjb250cm9sIGRldmljZSBvbmx5Ci0JICAgKi8KLQkgICBjYXNlIENPV0NUTDoKLQkJc3dpdGNoIChjbWQpIHsKLQkJICAgLyoKLQkJICAgKiogd3JpdGUgYWxsIGJpdG1hcCBjaHVua3MgYW5kIGNvd2hlYWRlcnMgdG8gY293ZmlsZXMKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dTWU5DOgotCQkJZG93bigmY293ZGV2bG9jayk7Ci0JCQljb3dsb19zeW5jKCk7Ci0JCQl1cCgmY293ZGV2bG9jayk7Ci0JCQlyZXR1cm4gMDsKLQotCQkgICAvKgotCQkgICAqKiBvcGVuIGEgbmV3IGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XTUtQQUlSOgotCQkJcmV0dXJuIGNvd2xvX21ha2VwYWlyKCh2b2lkIF9fdXNlciAqKWFyZyk7Ci0KLQkJICAgLyoKLQkJICAgKiogY2xvc2UgYSBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKQotCQkgICAqLwotCQkgICBjYXNlIENPV1JNUEFJUjoKLQkJCXJldHVybiBjb3dsb19yZW1vdmVwYWlyKCh2b2lkIF9fdXNlciAqKWFyZyk7Ci0KLQkJICAgLyoKLQkJICAgKiogd2F0Y2ggZnJlZSBzcGFjZSBvZiBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgY293ZmlsZQotCQkgICAqLwotCQkgICBjYXNlIENPV1dBVENIOgotCQkJcmV0dXJuIGNvd2xvX3dhdGNoKCh2b2lkIF9fdXNlciAqKWFyZyk7Ci0KLQkJICAgLyoKLQkJICAgKiogY2xvc2UgY293ZmlsZSBmb3IgYWN0aXZlIGRldmljZQotCQkgICAqLwotCQkgICBjYXNlIENPV0NMT1NFOgotCQkJcmV0dXJuIGNvd2xvX2Nvd2N0bCgodm9pZCBfX3VzZXIgKilhcmcsIENPV0NMT1NFKTsKLQotCQkgICAvKgotCQkgICAqKiByZW9wZW4gY293ZmlsZSByZWFkLW9ubHkgZm9yIGFjdGl2ZSBkZXZpY2UKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dSRE9QRU46Ci0JCQlyZXR1cm4gY293bG9fY293Y3RsKCh2b2lkIF9fdXNlciAqKWFyZywgQ09XUkRPUEVOKTsKLQotCQkgICBkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gLyogZW5kIG9mIHN3aXRjaCBvbiBjb21tYW5kICovCi0KLQkgICAvKgotCSAgICoqIGFsbG93ZWQgZm9yIGFueSBvdGhlciBjb3dkZXZpY2UKLQkgICAqLwotCSAgIGRlZmF1bHQ6Ci0JCXN3aXRjaCAoY21kKSB7Ci0JCSAgIC8qCi0JCSAgICoqIEhESU9fR0VUR0VPIG11c3QgYmUgc3VwcG9ydGVkIGZvciBmZGlzaywgZXRjCi0JCSAgICovCi0JCSAgIGNhc2UgSERJT19HRVRHRU86Ci0JCQlnZW8uY3lsaW5kZXJzID0gMDsKLQkJCWdlby5oZWFkcyAgICAgPSAwOwotCQkJZ2VvLnNlY3RvcnMgICA9IDA7Ci0KLQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZ2VvLCBzaXplb2YgZ2VvKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSAvKiBlbmQgb2Ygc3dpdGNoIG9uIGlvY3RsLWNtZCBjb2RlIHBhcmFtZXRlciAqLwotCX0gLyogZW5kIG9mIHN3aXRjaCBvbiBtaW5vciBudW1iZXIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBjb3dsb19mb3BzID0KLXsKLQkub3duZXIJID0gICAgIFRISVNfTU9EVUxFLAotICAgICAgICAub3BlbiAgICA9ICAgICBjb3dsb19vcGVuLAkvKiBjYWxsZWQgdXBvbiBvcGVuICAqLwotICAgICAgICAucmVsZWFzZSA9ICAgICBjb3dsb19yZWxlYXNlLAkvKiBjYWxsZWQgdXBvbiBjbG9zZSAqLwotICAgICAgICAuaW9jdGwgICA9ICAgICBjb3dsb19pb2N0bCwgICAgIC8qIGNhbGxlZCB1cG9uIGlvY3RsICovCi19OwotCi0vKgotKiogaGFuZGxlIGlvY3RsLWNvbW1hbmQgQ09XTUtQQUlSOgotKioJb3BlbiBhIG5ldyBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKSBvbi10aGUtZmx5Ci0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fbWFrZXBhaXIoc3RydWN0IGNvd3BhaXIgX191c2VyICphcmcpCi17Ci0JaW50CQlpLCBydj0wOwotCXN0cnVjdCBjb3dwYWlyCWNvd3BhaXI7Ci0JdW5zaWduZWQgY2hhcgkqY293cGF0aDsKLQl1bnNpZ25lZCBjaGFyCSpyZG9wYXRoOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBpbmZvIGFib3V0IHBhdGhuYW1lcwotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293cGFpciwgYXJnLCBzaXplb2YgY293cGFpcikgKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICggKE1BSk9SKGNvd3BhaXIuZGV2aWNlKSAhPSBDT1dNQUpPUikgJiYgKGNvd3BhaXIuZGV2aWNlICE9IEFOWURFVikgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICggKE1JTk9SKGNvd3BhaXIuZGV2aWNlKSA+PSBtYXhjb3dzKSAgJiYgKGNvd3BhaXIuZGV2aWNlICE9IEFOWURFVikgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JKiogcmV0cmlldmUgcGF0aG5hbWUgc3RyaW5ncwotCSovCi0JaWYgKCAoY293cGFpci5jb3dmbGVuID4gUEFUSF9NQVgpIHx8IChjb3dwYWlyLnJkb2ZsZW4gPiBQQVRIX01BWCkgKQotCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKLQotCWlmICggIShjb3dwYXRoID0ga21hbGxvYyhjb3dwYWlyLmNvd2ZsZW4rMSwgR0ZQX0tFUk5FTCkpICkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIGNvcHlfZnJvbV91c2VyKGNvd3BhdGgsICh2b2lkIF9fdXNlciAqKWNvd3BhaXIuY293ZmlsZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvd3BhaXIuY293ZmxlbikgKSB7Ci0JCWtmcmVlKGNvd3BhdGgpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JKihjb3dwYXRoK2Nvd3BhaXIuY293ZmxlbikgPSAwOwotCi0JaWYgKCAhKHJkb3BhdGggPSBrbWFsbG9jKGNvd3BhaXIucmRvZmxlbisxLCBHRlBfS0VSTkVMKSkgKSB7Ci0JCWtmcmVlKGNvd3BhdGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoIGNvcHlfZnJvbV91c2VyKHJkb3BhdGgsICh2b2lkIF9fdXNlciAqKWNvd3BhaXIucmRvZmlsZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvd3BhaXIucmRvZmxlbikgKSB7Ci0JCWtmcmVlKHJkb3BhdGgpOwotCQlrZnJlZShjb3dwYXRoKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCSoocmRvcGF0aCtjb3dwYWlyLnJkb2ZsZW4pID0gMDsKLQotCS8qCi0JKiogb3BlbiBuZXcgY293ZGV2aWNlCi0JKi8KLQlpZiAoIGNvd3BhaXIuZGV2aWNlID09IEFOWURFVikgewotCQkvKgotCQkqKiBzZWFyY2ggZmlyc3QgdW51c2VkIG1pbm9yCi0JCSovCi0JCWZvciAoaT0wLCBydj0tRUJVU1k7IGkgPCBtYXhjb3dzOyBpKyspIHsKLQkJCWlmICggISgoY293ZGV2YWxsW2ldKS0+c3RhdGUgJiBDT1dERVZPUEVOKSApIHsKLQkJCQlydiA9IGNvd2xvX29wZW5wYWlyKHJkb3BhdGgsIGNvd3BhdGgsIDAsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHJ2KSB7IAkJLyogb3BlbiBmYWlsZWQ/ICovCi0JCQlrZnJlZShyZG9wYXRoKTsKLQkJCWtmcmVlKGNvd3BhdGgpOwotCQkJcmV0dXJuIHJ2OwotCQl9Ci0KLQkJLyoKLQkJKiogcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBjb3dkZXZpY2UgdG8gdXNlciBzcGFjZQotCQkqLwotCQljb3dwYWlyLmRldmljZSA9IE1LREVWKENPV01BSk9SLCBpKTsKLQotCQlpZiAoIGNvcHlfdG9fdXNlcihhcmcsICZjb3dwYWlyLCBzaXplb2YgY293cGFpcikpIHsKLQkJCWtmcmVlKHJkb3BhdGgpOwotCQkJa2ZyZWUoY293cGF0aCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0gZWxzZSB7IAkJLyogc3BlY2lmaWMgbWlub3IgcmVxdWVzdGVkICovCi0JCWlmICggKHJ2ID0gY293bG9fb3BlbnBhaXIocmRvcGF0aCwgY293cGF0aCwgMCwKLQkJCQkJCU1JTk9SKGNvd3BhaXIuZGV2aWNlKSkpKSB7Ci0JCQlrZnJlZShyZG9wYXRoKTsKLQkJCWtmcmVlKGNvd3BhdGgpOwotCQkJcmV0dXJuIHJ2OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZCBDT1dSTVBBSVI6Ci0qKiAJZGVhY3RpdmF0ZSBhbiBleGlzdGluZyBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKSBvbi10aGUtZmx5Ci0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fcmVtb3ZlcGFpcih1bnNpZ25lZCBsb25nIF9fdXNlciAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcJCWNvd2RldmljZTsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQotCS8qCi0JKiogcmV0cmlldmUgaW5mbyBhYm91dCBkZXZpY2UgdG8gYmUgcmVtb3ZlZAotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293ZGV2aWNlLCBhcmcsIHNpemVvZiBjb3dkZXZpY2UpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JKiogdmVyaWZ5IG1ham9yLW1pbm9yIG51bWJlcgotCSovCi0JaWYgKCBNQUpPUihjb3dkZXZpY2UpICE9IENPV01BSk9SKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICggTUlOT1IoY293ZGV2aWNlKSA+PSBtYXhjb3dzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvd2RldiA9IGNvd2RldmFsbFtNSU5PUihjb3dkZXZpY2UpXTsKLQotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JKiogc3luY2hyb25pemUgYml0bWFwcyBhbmQgY2xvc2UgY293ZGV2aWNlCi0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgewotCQlkb3duKCZjb3dkZXZsb2NrKTsKLQkJY293bG9fc3luYygpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JfQotCi0JcmV0dXJuIGNvd2xvX2Nsb3NlcGFpcihjb3dkZXYpOwotfQotCi0vKgotKiogaGFuZGxlIGlvY3RsLWNvbW1hbmQgQ09XV0FUQ0g6Ci0qKgl3YXRjaCB0aGUgZnJlZSBzcGFjZSBvZiB0aGUgZmlsZXN5c3RlbSBjb250YWluaW5nIGEgY293ZmlsZQotKiogICAgICBvZiBhbiBvcGVuIGNvd2RldmljZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3dhdGNoKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCXN0cnVjdCBjb3d3YXRjaAkJY293d2F0Y2g7Ci0KLQkvKgotCSoqIHJldHJpZXZlIHN0cnVjdHVyZSBob2xkaW5nIGluZm8KLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd3dhdGNoLCBhcmcsIHNpemVvZiBjb3d3YXRjaCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkqKiB2ZXJpZnkgaWYgY293ZGV2aWNlIGV4aXN0cyBhbmQgaXMgY3VycmVudGx5IG9wZW4KLQkqLwotCWlmICggTUlOT1IoY293d2F0Y2guZGV2aWNlKSA+PSBtYXhjb3dzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvd2RldiA9IGNvd2RldmFsbFtNSU5PUihjb3d3YXRjaC5kZXZpY2UpXTsKLQotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JKiogaWYgdGhlIFdBVENIV0FJVC1vcHRpb24gaXMgc2V0LCB3YWl0IHVudGlsIHRoZSBpbmRpY2F0ZWQKLQkqKiB0aHJlc2hvbGQgaXMgcmVhY2hlZCAob25seSBvbmUgd2FpdGVyIGFsbG93ZWQpCi0JKi8KLQlpZiAoY293d2F0Y2guZmxhZ3MgJiBXQVRDSFdBSVQpIHsKLQkJLyoKLQkJKiogY2hlY2sgaWYgYWxyZWFkeSBhbm90aGVyIHdhaXRlciBhY3RpdmUKLQkJKiogZm9yIHRoaXMgY293ZGV2aWNlCi0JCSovCi0JCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XV0FUQ0hET0cpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQljb3dkZXYtPnN0YXRlIHw9IENPV1dBVENIRE9HOwotCi0JCWNvd2Rldi0+d2F0Y2h0aHJlc2ggPSAodW5zaWduZWQgbG9uZyBsb25nKQotCQkgICAgICAgICAgICAgICAgICAgICAgY293d2F0Y2gudGhyZXNob2xkIC8KLQkJCQkgICAgICAoY293ZGV2LT5ibGtzaXplIC8gMTAyNCk7Ci0KLQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjb3dkZXYtPndhdGNocSwKLQkJICAgICAgICAgICAgICAgICAgICBjb3dkZXYtPndhdGNodGhyZXNoID49IGNvd2Rldi0+YmxrYXZhaWwpKSB7Ci0JCQljb3dkZXYtPnN0YXRlICY9IH5DT1dXQVRDSERPRzsKLQkJCXJldHVybiBFSU5UUjsKLQkJfQotCi0JCWNvd2Rldi0+c3RhdGUgJj0gfkNPV1dBVENIRE9HOwotCX0KLQotCWNvd3dhdGNoLnRvdGFsa2IgPSAodW5zaWduZWQgbG9uZyBsb25nKWNvd2Rldi0+YmxrdG90YWwgKgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvd2Rldi0+Ymxrc2l6ZSAvIDEwMjQ7Ci0JY293d2F0Y2guYXZhaWxrYiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY293ZGV2LT5ibGthdmFpbCAqCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293ZGV2LT5ibGtzaXplIC8gMTAyNDsKLQotCWlmICggY29weV90b191c2VyKGFyZywgJmNvd3dhdGNoLCBzaXplb2YgY293d2F0Y2gpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIGlvY3RsLWNvbW1hbmRzIENPV0NMT1NFIGFuZCBDT1dSRE9QRU46Ci0qKglDT1dDTE9TRSAgLSBjbG9zZSB0aGUgY293ZmlsZSB3aGlsZSB0aGUgY293ZGV2aWNlIHJlbWFpbnMgb3BlbjsKLSoqICAgICAgICAgICAgICAgICAgdGhpcyBhbGxvd3MgYW4gdW5tb3VudCBvZiB0aGUgZmlsZXN5c3RlbSBvbiB3aGljaAotKiogICAgICAgICAgICAgICAgICB0aGUgY293ZmlsZSByZXNpZGVzCi0qKglDT1dSRE9QRU4gLSBjbG9zZSB0aGUgY293ZmlsZSBhbmQgcmVvcGVuIGl0IGZvciByZWFkLW9ubHk7Ci0qKiAgICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIGEgcmVtb3VudCByZWFkLW9ueSBvZiB0aGUgZmlsZXN5c3RlbQotKiogICAgICAgICAgICAgICAgICBvbiB3aGljaCB0aGUgY293ZmlsZSByZXNpZGVzCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fY293Y3RsKHVuc2lnbmVkIGxvbmcgX191c2VyICphcmcsIGludCBjbWQpCi17Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0JdW5zaWduZWQgbG9uZwkJY293ZGV2aWNlOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBpbmZvIGFib3V0IGRldmljZSB0byBiZSByZW1vdmVkCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3dkZXZpY2UsIGFyZywgc2l6ZW9mIGNvd2RldmljZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkqKiB2ZXJpZnkgbWFqb3ItbWlub3IgbnVtYmVyCi0JKi8KLQlpZiAoIE1BSk9SKGNvd2RldmljZSkgIT0gQ09XTUFKT1IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCBNSU5PUihjb3dkZXZpY2UpID49IG1heGNvd3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY293ZGV2ID0gY293ZGV2YWxsW01JTk9SKGNvd2RldmljZSldOwotCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkqKiBzeW5jaHJvbml6ZSBiaXRtYXBzIGFuZCBjbG9zZSBjb3dmaWxlCi0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgewotCQlkb3duKCZjb3dkZXZsb2NrKTsKLQkJY293bG9fc3luYygpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JfQotCi0JLyoKLQkqKiBoYW5kbGUgc3BlY2lmaWMgaW9jdGwtY29tbWFuZAotCSovCi0Jc3dpdGNoIChjbWQpIHsKLQkgICBjYXNlIENPV1JET1BFTjoKLQkJLyoKLQkJKiogaWYgdGhlIGNvd2ZpbGUgaXMgc3RpbGwgb3BlbmVkIHJlYWQtd3JpdGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pIHsKLQkJCS8qCi0JCQkqKiBjbG9zZSB0aGUgY293ZmlsZQotCQkJKi8KLSAgCQkJaWYgKGNvd2Rldi0+Y293ZnApCi0JCSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+Y293ZnAsIDApOwotCi0JCQljb3dkZXYtPnN0YXRlICY9IH5DT1dSV0NPV09QRU47Ci0KLQkJCS8qCi0JCQkqKiBvcGVuIGFnYWluIGZvciByZWFkLW9ubHkKLQkJCSovCi0JCQljb3dkZXYtPmNvd2ZwID0gZmlscF9vcGVuKGNvd2Rldi0+Y293bmFtZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICBPX1JET05MWXxPX0xBUkdFRklMRSwgMDYwMCk7Ci0KLQkJCWlmICggKGNvd2Rldi0+Y293ZnAgPT0gTlVMTCkgfHwgSVNfRVJSKGNvd2Rldi0+Y293ZnApICkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgImNvd2xvb3AgLSBmYWlsZWQgdG8gcmVvcGVuIGNvd2ZpbGUgJXNcbiIsCi0JCQkJICAgICBjb3dkZXYtPmNvd25hbWUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQkvKgotCQkJKiogbWFyayBjb3dmaWxlIG9wZW4gZm9yIHJlYWQtb25seQotCQkJKi8KLQkJCWNvd2Rldi0+c3RhdGUgfD0gQ09XUkRDT1dPUEVOOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0KLQkgICBjYXNlIENPV0NMT1NFOgotCQkvKgotCQkqKiBpZiB0aGUgY293ZmlsZSBpcyBzdGlsbCBvcGVuCi0JCSovCi0JCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XQ09XT1BFTikgewotCQkJLyoKLQkJCSoqIGNsb3NlIHRoZSBjb3dmaWxlCi0JCQkqLwotICAJCQlpZiAoY293ZGV2LT5jb3dmcCkKLQkJICAJCWZpbHBfY2xvc2UoY293ZGV2LT5jb3dmcCwgMCk7Ci0KLQkJCWNvd2Rldi0+c3RhdGUgJj0gfkNPV0NPV09QRU47Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBIYW5kbGluZyBvZiBJL08tcmVxdWVzdHMgZm9yIGEgY293ZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYnkgY29yZS1rZXJuZWwgdG8gaGFuZGxlIHRoZSBJL08tcmVxdWVzdHMKLSoqIGluIHRoZSBxdWV1ZQotKi8KLXN0YXRpYyB2b2lkIGNvd2xvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IHJlcXVlc3QJCSpyZXE7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0KLQlERUJVR1AoRENPVyAiY293bG9vcCAtIHJlcXVlc3QgZnVuY3Rpb24gY2FsbGVkLi4uLlxuIik7Ci0KLQl3aGlsZSgocmVxID0gYmxrX3BlZWtfcmVxdWVzdChxKSkgIT0gTlVMTCkgewotCQlERUJVR1AoRENPVyAiY293bG9vcCAtIGdvdCBuZXh0IHJlcXVlc3RcbiIpOwotCi0JCWlmICghIGJsa19mc19yZXF1ZXN0KHJlcSkpIHsKLSAgICAgICAgICAgICAgIAkJIC8qIHRoaXMgaXMgbm90IGEgbm9ybWFsIGZpbGUgc3lzdGVtIHJlcXVlc3QgKi8KLSAgICAgICAgICAgICAgICAJX19ibGtfZW5kX3JlcXVlc3RfY3VyKHJlcSwgLUVJTyk7Ci0gICAgICAgICAgICAgICAgCWNvbnRpbnVlOwotICAgICAgICAJfQotCQljb3dkZXYgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQotCQlpZiAoY293ZGV2LT5pb2J1c3kpCi0JCQlyZXR1cm47Ci0JCWVsc2UKLQkJCWNvd2Rldi0+aW9idXN5ID0gMTsKLQotCQkvKgotCQkqKiB3aGVuIG5vIGtlcm5lbC10aHJlYWQgaXMgYXZhaWxhYmxlLCB0aGUgcmVxdWVzdCB3aWxsCi0JCSoqIHByb2R1Y2UgYW4gSS9PLWVycm9yCi0JCSovCi0JCWlmICghY293ZGV2LT5waWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiJjb3dsb29wIC0gbm8gdGhyZWFkIGF2YWlsYWJsZVxuIik7Ci0JCQlfX2Jsa19lbmRfcmVxdWVzdF9jdXIocmVxLCAtRUlPKTsJLyogcmVxdWVzdCBmYWlsZWQgKi8KLQkJCWNvd2Rldi0+aW9idXN5CT0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJKiogaGFuZGxlIEkvTy1yZXF1ZXN0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwtdGhyZWFkCi0JCSovCi0JCWNvd2Rldi0+cmVxIAk9IHJlcTsKLQkJY293ZGV2LT5xZmlsbGVkCT0gMTsKLQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmY293ZGV2LT53YWl0cSk7Ci0KLQkJLyoKLQkJKiogZ2V0IG91dCBvZiB0aGlzIGZ1bmN0aW9uIG5vdyB3aGlsZSB0aGUgSS9PLXJlcXVlc3QgaXMKLQkJKiogdW5kZXIgdHJlYXRtZW50IG9mIHRoZSBrZXJuZWwtdGhyZWFkOyB0aGlzIGZ1bmN0aW9uCi0JCSoqIHdpbGwgYmUgY2FsbGVkIGFnYWluIGFmdGVyIHRoZSBjdXJyZW50IEkvTy1yZXF1ZXN0IGhhcwotCQkqKiBiZWVuIGZpbmlzaGVkIGJ5IHRoZSB0aHJlYWQKLQkJKi8KLQkJcmV0dXJuOwotCX0KLX0KLQotLyoKLSoqIGRhZW1vbi1wcm9jZXNzIChrZXJuZWwtdGhyZWFkKSBleGVjdXRlcyB0aGlzIGZ1bmN0aW9uCi0qLwotc3RhdGljIGludAotY293bG9fZGFlbW9uKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWludAlydjsKLQlpbnQgICAgIG1pbm9yOwotCWNoYXIJbXluYW1lWzE2XTsKLQotCWZvciAobWlub3IgPSAwOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQkJaWYgKGNvd2RldiA9PSBjb3dkZXZhbGxbbWlub3JdKSBicmVhazsKLQl9Ci0Jc3ByaW50ZihteW5hbWUsICJjb3dsb29wZCVkIiwgbWlub3IpOwotCi0gICAgICAgIGRhZW1vbml6ZShteW5hbWUpOwotCi0Jd2hpbGUgKCFjb3dkZXYtPmNsb3NlZG93bikgewotCQkvKgotCQkqKiBzbGVlcCB3aGlsZSB3YWl0aW5nIGZvciBhbiBJL08gcmVxdWVzdDsKLQkJKiogbm90ZSB0aGF0IG5vIG5vbi1pbnRlcnJ1cHRpYmxlIHdhaXQgaGFzIGJlZW4gdXNlZAotCQkqKiBiZWNhdXNlIHRoZSBub24taW50ZXJydXB0aWJsZSB2ZXJzaW9uIG9mCi0JCSoqIGEgKnN5bmNocm9ub3VzKiB3YWtlX3VwIGRvZXMgbm90IGV4aXN0IChhbnkgbW9yZSkKLQkJKi8KLQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjb3dkZXYtPndhaXRxLCBjb3dkZXYtPnFmaWxsZWQpKXsKLQkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7IC8qIGlnbm9yZSBzaWduYWwtYmFzZWQgd2FrZXVwICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChjb3dkZXYtPmNsb3NlZG93bikJCS8qIG1vZHVsZSB3aWxsIGJlIHVubG9hZGVkID8gKi97Ci0JCQljb3dkZXYtPnBpZCA9IDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qCi0JCSoqIHdva2VuIHVwIGJ5IHRoZSBJL08tcmVxdWVzdCBoYW5kbGVyOgl0cmVhdCByZXF1ZXN0ZWQgSS9PCi0JCSovCi0JCWNvd2Rldi0+cWZpbGxlZCA9IDA7Ci0KLQkJcnYgPSBjb3dsb19kb19yZXF1ZXN0KGNvd2Rldi0+cmVxKTsKLQotCQkvKgotCQkqKiByZWFjcXVpcmUgdGhlIHF1ZXVlLXNwaW5sb2NrIGZvciBtYW5pcHVsYXRpbmcKLQkJKiogdGhlIHJlcXVlc3QtcXVldWUgYW5kIGRlcXVldWUgdGhlIHJlcXVlc3QKLQkJKi8KLQkJc3Bpbl9sb2NrX2lycSgmY293ZGV2LT5ycWxvY2spOwotCi0JCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihjb3dkZXYtPnJlcSwgcnYpOwotCQljb3dkZXYtPmlvYnVzeSA9IDA7Ci0KLQkJLyoKLQkJKiogaW5pdGlhdGUgdGhlIG5leHQgcmVxdWVzdCBmcm9tIHRoZSBxdWV1ZQotCQkqLwotCQljb3dsb19yZXF1ZXN0KGNvd2Rldi0+cnF1ZXVlKTsKLQotCQlzcGluX3VubG9ja19pcnEoJmNvd2Rldi0+cnFsb2NrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGtlcm5lbCB0aHJlYWQKLSoqIHRvIGhhbmRsZSB0aGUgcXVldWVkIEkvTy1yZXF1ZXN0cwotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gZmFpbAotKiogICAgICAxICAgLSBzdWNjZXNzCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb19kb19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0JdW5zaWduZWQgbG9uZwkJbGVuOwotCWxvbmcgaW50CQlydjsKLQlsb2ZmX3QgCQkJb2Zmc2V0OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2ID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQkvKgotCSoqIGNhbGN1bGF0ZSBzb21lIHZhcmlhYmxlcyB3aGljaCBhcmUgbmVlZGVkIGxhdGVyIG9uCi0JKi8KLQlsZW4gICAgID0gICAgICAgICAgYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSkgPDwgOTsKLQlvZmZzZXQgID0gKGxvZmZfdCkgYmxrX3JxX3BvcyhyZXEpICAgICAgICAgPDwgOTsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZXEgY21kPSVkIG9mZnNldD0lbGxkIGxlbj0lbHUgYWRkcj0lcFxuIiwKLQkJCQkqKHJlcS0+Y21kKSwgb2Zmc2V0LCBsZW4sIHJlcS0+YnVmZmVyKTsKLQotCS8qCi0JKiogaGFuZGxlIFJFQUQtIG9yIFdSSVRFLXJlcXVlc3QKLQkqLwotCXN3aXRjaCAocnFfZGF0YV9kaXIocmVxKSkgewotCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCSAgIGNhc2UgUkVBRDoKLQkJc3dpdGNoICggY293bG9fY2hlY2tpbyhjb3dkZXYsIGxlbiwgb2Zmc2V0KSApIHsKLQkJICAgY2FzZSBBTExDT1c6Ci0JCQlydiA9IGNvd2xvX3JlYWRjb3coY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7Ci0KLQkJICAgY2FzZSBBTExSRE86Ci0JCQlydiA9IGNvd2xvX3JlYWRyZG8oY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7Ci0KLQkgICAJICAgY2FzZSBNSVhFRFVQOgotCQkJcnYgPSBjb3dsb19yZWFkbWl4KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlydiA9IDA7CS8qIG5ldmVyIGhhcHBlbnMgKi8KLQkJfQotCQlicmVhazsKLQotCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCSAgIGNhc2UgV1JJVEU6Ci0JCXN3aXRjaCAoIGNvd2xvX2NoZWNraW8oY293ZGV2LCBsZW4sIG9mZnNldCkgKSB7Ci0JCSAgIGNhc2UgQUxMQ09XOgotCQkJLyoKLQkJCSoqIHN0cmFpZ2h0LWZvcndhcmQgd3JpdGUgd2lsbCBkby4uLgotCQkJKi8KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZSBzdHJhaWdodCAiKTsKLQotCQkJcnYgPSBjb3dsb193cml0ZWNvdyhjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsJLyogZnJvbSBzd2l0Y2ggKi8KLQotCQkgICBjYXNlIEFMTFJETzoKLQkJCWlmICggKGxlbiAmIE1VTUFTSykgPT0gMCkgewotCQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZSBzdHJhaWdodCAiKTsKLQotCQkJCXJ2ID0gY293bG9fd3JpdGVjb3coY293ZGV2LCByZXEtPmJ1ZmZlciwKLQkJCQkJCQkJbGVuLCBvZmZzZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JICAgCSAgIGNhc2UgTUlYRURVUDoKLQkJCXJ2ID0gY293bG9fd3JpdGVtaXgoY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJ2ID0gMDsJLyogbmV2ZXIgaGFwcGVucyAqLwotCQl9Ci0JCWJyZWFrOwotCi0JICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIHVucmVjb2duaXplZCBjb21tYW5kICVkXG4iLCAqKHJlcS0+Y21kKSk7Ci0JCXJ2ID0gMDsKLQl9Ci0KLQlyZXR1cm4gKHJ2IDw9IDAgPyAwIDogMSk7Ci19Ci0KLS8qCi0qKiBjaGVjayBmb3IgYSBnaXZlbiBJL08tcmVxdWVzdCBpZiBhbGwgdW5kZXJseWluZyBibG9ja3MKLSoqICh3aXRoIHNpemUgTUFQVU5JVCkgYXJlIGVpdGhlciBpbiB0aGUgcmVhZC1vbmx5IGZpbGUgb3IgaW4KLSoqIHRoZSBjb3dmaWxlIChvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28pCi0qKgotKiogcmV0dXJuczoKLSoqIAlBTExSRE8gIC0gYWxsIHVuZGVybHlpbmcgYmxvY2tzIGluIHJkb2ZpbGUKLSoqICAgICAgQUxMQ09XICAtIGFsbCB1bmRlcmx5aW5nIGJsb2NrcyBpbiBjb3dmaWxlCi0qKiAgICAgIE1JWEVEVVAgLSB1bmRlcmx5aW5nIGJsb2NrcyBwYXJ0bHkgaW4gcmRvZmlsZSBhbmQgcGFydGx5IGluIGNvd2ZpbGUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19jaGVja2lvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcJbWFwbnVtLCBieXRlbnVtLCBiaXRudW0sIGJsb2NrbnIsIHBhcnRsZW47Ci0JbG9uZyBpbnQJdG90Y250LCBjb3djbnQ7Ci0JY2hhcgkJKm1jOwotCi0JLyoKLQkqKiBub3RpY2UgdGhhdCB0aGUgcmVxdWVzdGVkIGJsb2NrIG1pZ2h0IGNyb3NzCi0JKiogYSBibG9ja3NpemUgYm91bmRhcnkgd2hpbGUgb25lIG9mIHRoZSBjb25jZXJuZWQKLQkqKiBibG9ja3MgcmVzaWRlcyBpbiB0aGUgcmVhZC1vbmx5IGZpbGUgYW5kIGFub3RoZXIKLQkqKiBvbmUgaW4gdGhlIGNvcHktb24td3JpdGUgZmlsZTsgaW4gdGhhdCBjYXNlIHRoZQotICAgICAgICAqKiByZXF1ZXN0IHdpbGwgYmUgYnJva2VuIHVwIGludG8gcGllY2VzCi0JKi8KLQlpZiAoIChsZW4gPD0gTUFQVU5JVCkgJiYKLQkgICAgIChNQVBVTklUIC0gKG9mZnNldCAmIE1VTUFTSykgPD0gbGVuKSApIHsKLQkJLyoKLQkJKiogZWFzeSBzaXR1YXRpb246Ci0JCSoqIHJlcXVlc3RlZCBkYXRhLWJsb2NrIGVudGlyZWx5IGZpdHMgd2l0aGluCi0JCSoqIHRoZSBtYXB1bml0IHVzZWQgZm9yIHRoZSBiaXRtYXAKLQkJKiogY2hlY2sgaWYgdGhhdCBibG9jayBpcyBsb2NhdGVkIGluIHJkb2ZpbGUgb3IKLQkJKiogY293ZmlsZQotCQkqLwotCQlibG9ja25yID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnIpOwotCQlieXRlbnVtID0gQ0FMQ0JZVEUoYmxvY2tucik7Ci0JCWJpdG51bSAgPSBDQUxDQklUIChibG9ja25yKTsKLQotCQlpZiAoKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKStieXRlbnVtKSYoMTw8Yml0bnVtKSkKLQkJCXJldHVybiBBTExDT1c7Ci0JCWVsc2UKLQkJCXJldHVybiBBTExSRE87Ci0JfQotCi0JLyoKLQkqKiBsZXNzIGVhc3kgc2l0dWF0aW9uOgotCSoqIHRoZSByZXF1ZXN0ZWQgZGF0YS1ibG9jayBkb2VzIG5vdCBmaXQgd2l0aGluIHRoZSBtYXB1bml0Ci0JKiogdXNlZCBmb3IgdGhlIGJpdG1hcAotCSoqIGNoZWNrIGlmICphbGwqIHVuZGVybHlpbmcgYmxvY2tzIGludm9sdmVkIHJlc2lkZSBvbiB0aGUgcmRvZmlsZQotICAgICAgIAkqKiBvciB0aGUgY293ZmlsZSAoc28gc3RpbGwgbm8gYnJlYWt1cCByZXF1aXJlZCkKLQkqLwotCWZvciAoY293Y250PXRvdGNudD0wOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbiwgdG90Y250KyspewotCQkvKgotCQkqKiBjYWxjdWxhdGUgYmxvY2tuciBvZiBpbnZvbHZlZCBibG9jawotCQkqLwotCQlibG9ja25yID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBhcnRpYWwgbGVuZ3RoIGZvciB0aGlzIHRyYW5zZmVyCi0JCSovCi0JCXBhcnRsZW4gPSBNQVBVTklUIC0gKG9mZnNldCAmIE1VTUFTSyk7Ci0JCWlmIChwYXJ0bGVuID4gbGVuKQotCQkJcGFydGxlbiA9IGxlbjsKLQotCQkvKgotCQkqKiBpcyB0aGlzIGJsb2NrIGxvY2F0ZWQgaW4gdGhlIGNvd2ZpbGUKLQkJKi8KLQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnIpOwotCQlieXRlbnVtID0gQ0FMQ0JZVEUoYmxvY2tucik7Ci0JCWJpdG51bSAgPSBDQUxDQklUIChibG9ja25yKTsKLQotCQltYwk9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pOwotCi0JCWlmICgqKG1jK2J5dGVudW0pJigxPDxiaXRudW0pKQotCQkJY293Y250Kys7OwotCi0JCURFQlVHUChEQ09XCi0JCSAgICAgICAiY293bG9vcCAtIGNoZWNrICVsdSAtIG1hcCAlbHUsIGJ5dGUgJWx1LCBiaXQgJWx1LCAiCi0JCSAgICAgICAiY293Y250ICVsZCwgdG90Y250ICVsZCAlMDJ4ICVwXG4iLAotCQkJYmxvY2tuciwgbWFwbnVtLCBieXRlbnVtLCBiaXRudW0sIGNvd2NudCwgdG90Y250LAotCQkJKihtYytieXRlbnVtKSwgbWMpOwotCX0KLQotCWlmIChjb3djbnQgPT0gMCkJLyogYWxsIGludm9sdmVkIGJsb2NrcyBvbiByZG9maWxlPyAqLwotCQlyZXR1cm4gQUxMUkRPOwotCi0JaWYgKGNvd2NudCA9PSB0b3RjbnQpCS8qIGFsbCBpbnZvbHZlZCBibG9ja3Mgb24gY293ZmlsZT8gKi8KLQkJcmV0dXJuIEFMTENPVzsKLQotCS8qCi0JKiogc2l0dWF0aW9uIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQ6Ci0JKiogaW52b2x2ZWQgdW5kZXJseWluZyBibG9ja3Mgc3ByZWFkIG92ZXIgYm90aCBmaWxlcwotCSovCi0JcmV0dXJuIE1JWEVEVVA7Ci19Ci0KLS8qCi0qKiByZWFkIHJlcXVlc3RlZCBjaHVuayBwYXJ0bHkgZnJvbSByZG9maWxlIGFuZCBwYXJ0bHkgZnJvbSBjb3dmaWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBmYWlsCi0qKiAgICAgIDEgICAtIHN1Y2Nlc3MKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19yZWFkbWl4KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZwltYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgYmxvY2tuciwgcGFydGxlbjsKLQlsb25nIGludAlydjsKLQljaGFyCQkqbWM7Ci0KLQkvKgotCSoqIGNvbXBsaWNhdGVkIGFwcHJvYWNoOiBicmVha3VwIHJlcXVpcmVkIG9mIHJlYWQtcmVxdWVzdAotCSovCi0JZm9yIChydj0xOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIGJ1Zis9cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuKSB7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBibG9ja25yIG9mIGVudGlyZSBibG9jawotCQkqLwotCQlibG9ja25yID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBhcnRpYWwgbGVuZ3RoIGZvciB0aGlzIHRyYW5zZmVyCi0JCSovCi0JCXBhcnRsZW4gPSBNQVBVTklUIC0gKG9mZnNldCAmIE1VTUFTSyk7Ci0JCWlmIChwYXJ0bGVuID4gbGVuKQotCQkJcGFydGxlbiA9IGxlbjsKLQotCQkvKgotCQkqKiBpcyB0aGlzIGJsb2NrIGxvY2F0ZWQgaW4gdGhlIGNvd2ZpbGUKLQkJKi8KLQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnIpOwotCQlieXRlbnVtID0gQ0FMQ0JZVEUoYmxvY2tucik7Ci0JCWJpdG51bSAgPSBDQUxDQklUIChibG9ja25yKTsKLQkJbWMJPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKTsKLQotCQlpZiAoKihtYytieXRlbnVtKSYoMTw8Yml0bnVtKSkgewotCQkJLyoKLQkJCSoqIHJlYWQgKHBhcnRpYWwpIGJsb2NrIGZyb20gY293ZmlsZQotCQkJKi8KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSBzcGxpdCByZWFkICIKLQkJCQkiY293IHBhcnRsZW49JWxkIG9mZj0lbGxkXG4iLCBwYXJ0bGVuLCBvZmZzZXQpOwotCi0JCQlpZiAoY293bG9fcmVhZGNvdyhjb3dkZXYsIGJ1ZiwgcGFydGxlbiwgb2Zmc2V0KSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkqKiByZWFkIChwYXJ0aWFsKSBibG9jayBmcm9tIHJkb2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gc3BsaXQgcmVhZCAiCi0JCQkJInJkbyBwYXJ0bGVuPSVsZCBvZmY9JWxsZFxuIiwgcGFydGxlbiwgb2Zmc2V0KTsKLQotCQkJaWYgKGNvd2xvX3JlYWRyZG8oY293ZGV2LCBidWYsIHBhcnRsZW4sIG9mZnNldCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiBjaHVuayB0byBiZSB3cml0dGVuIHRvIHRoZSBjb3dmaWxlIG5lZWRzIHBpZWNlcyB0byBiZQotKiogcmVhZCBmcm9tIHRoZSByZG9maWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBmYWlsCi0qKiAgICAgIDEgICAtIHN1Y2Nlc3MKLSovCi1zdGF0aWMgaW50Ci1jb3dsb193cml0ZW1peChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcJbWFwbnVtLCBieXRlbnVtLCBiaXRudW0sIGJsb2NrbnIsIHBhcnRsZW47Ci0JbG9uZyBpbnQJcnY7Ci0JY2hhcgkJKm1jOwotCi0JLyoKLQkqKiBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkIHN0dWZmIGlzIHJlcXVpcmVkOgotCSoqIGlmIHRoZSByZXF1ZXN0IGlzIGxhcmdlciB0aGFuIG9uZSB1bmRlcmx5aW5nCi0JKiogYmxvY2sgb3IgaXMgc3ByZWFkIG92ZXIgdHdvIHVuZGVybHlpbmcgYmxvY2tzLAotCSoqIHNwbGl0IHRoZSByZXF1ZXN0IGludG8gcGllY2VzOyBpZiBhIGJsb2NrIGRvZXMgbm90Ci0JKiogc3RhcnQgYXQgYSBibG9jayBib3VuZGFyeSwgdGFrZSBjYXJlIHRoYXQKLQkqKiBzdXJyb3VuZGluZyBkYXRhIGlzIHJlYWQgZmlyc3QgKGlmIG5lZWRlZCksCi0JKiogZml0IHRoZSBuZXcgZGF0YSBpbiBhbmQgd3JpdGUgaXQgYXMgYSBmdWxsIGJsb2NrCi0JKi8KLQlmb3IgKHJ2PTE7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgYnVmKz1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4pIHsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBhcnRpYWwgbGVuZ3RoIGZvciB0aGlzIHRyYW5zZmVyCi0JCSovCi0JCXBhcnRsZW4gPSBNQVBVTklUIC0gKG9mZnNldCAmIE1VTUFTSyk7Ci0JCWlmIChwYXJ0bGVuID4gbGVuKQotCQkJcGFydGxlbiA9IGxlbjsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgYmxvY2tuciBvZiBlbnRpcmUgYmxvY2sKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCS8qCi0JCSoqIGhhcyB0aGlzIGJsb2NrIGJlZW4gd3JpdHRlbiBiZWZvcmU/Ci0JCSovCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0JCW1jCT0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSk7Ci0KLQkJaWYgKCoobWMrYnl0ZW51bSkmKDE8PGJpdG51bSkpIHsKLQkJCS8qCi0JCQkqKiBibG9jayBoYXMgYmVlbiB3cml0dGVuIGJlZm9yZTsKLQkJCSoqIHdyaXRlIHRyYW5zcGFyYW50bHkgdG8gY293ZmlsZQotCQkJKi8KLQkJCURFQlVHUChEQ09XCi0JCQkgICAgICAgImNvd2xvb3AgLSBzcGxpdHdyIHRyYW5zcFxuIik7Ci0KLQkJCWlmIChjb3dsb193cml0ZWNvdyhjb3dkZXYsIGJ1ZiwgcGFydGxlbiwgb2Zmc2V0KSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkqKiBibG9jayBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuIGJlZm9yZSwKLQkJCSoqIHNvIHJlYWQgZW50aXJlIGJsb2NrIGZyb20KLQkJCSoqIHJlYWQtb25seSBmaWxlIGZpcnN0LCB1bmxlc3MKLQkJCSoqIGEgZnVsbCBibG9jayBpcyByZXF1ZXN0ZWQgdG8KLQkJCSoqIGJlIHdyaXR0ZW4KLQkJCSovCi0JCQlpZiAocGFydGxlbiA8IE1BUFVOSVQpIHsKLQkJCQlpZiAoY293bG9fcmVhZHJkbyhjb3dkZXYsIGNvd2Rldi0+aW9idWYsCi0JCQkJICAgICAgTUFQVU5JVCwgKGxvZmZfdClibG9ja25yIDw8IE1VU0hJRlQpIDw9IDApCi0JCQkJCXJ2ID0gMDsKLQkJCX0KLQotCQkJLyoKLQkJCSoqIHRyYW5zZmVyIG1vZGlmaWVkIHBhcnQgaW50bwotCQkJKiogdGhlIGJsb2NrIGp1c3QgcmVhZAotCQkJKi8KLQkJCW1lbWNweShjb3dkZXYtPmlvYnVmICsgKG9mZnNldCAmIE1VTUFTSyksIGJ1ZiwgcGFydGxlbik7Ci0KLQkJCS8qCi0JCQkqKiB3cml0ZSBlbnRpcmUgYmxvY2sgdG8gY293ZmlsZQotCQkJKi8KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSBzcGxpdCAiCi0JCQkJInBhcnRsZW49JWxkIG9mZj0lbGxkXG4iLAotCQkJCXBhcnRsZW4sIChsb2ZmX3QpYmxvY2tuciA8PCBNVVNISUZUKTsKLQotCQkJaWYgKGNvd2xvX3dyaXRlY293KGNvd2RldiwgY293ZGV2LT5pb2J1ZiwgTUFQVU5JVCwKLQkJCQkJICAgICAobG9mZl90KWJsb2NrbnIgPDwgTVVTSElGVCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEkvTy1zdXBwb3J0IGZvciByZWFkLW9ubHkgZmlsZSBhbmQgY29weS1vbi13cml0ZSBmaWxlICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIHJlYWQgZGF0YSBmcm9tIHRoZSByZWFkLW9ubHkgZmlsZQotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgcmVhZAotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fcmVhZHJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWxvbmcgaW50CXJ2OwotCW1tX3NlZ21lbnRfdAlvbGRfZnM7Ci0JbG9mZl90CQlzYXZlb2Zmc2V0ID0gb2Zmc2V0OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlYWRyZG8gY2FsbGVkXG4iKTsKLQotICAgICAgICBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoIGdldF9kcygpICk7Ci0JcnYgPSBjb3dkZXYtPnJkb2ZwLT5mX29wLT5yZWFkKGNvd2Rldi0+cmRvZnAsIGJ1ZiwgbGVuLCAmb2Zmc2V0KTsKLSAgICAgICAgc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocnYgPCBsZW4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY293bG9vcCAtIHJlYWQtZmFpbHVyZSAlbGQgb24gcmRvZmlsZSIKLQkJICAgICAgICAgICAgICAgICAgICAiLSBvZmZzZXQ9JWxsZCBsZW49JWRcbiIsCi0JCQkJCXJ2LCBzYXZlb2Zmc2V0LCBsZW4pOwotCX0KLQotCWNvd2Rldi0+cmRvcmVhZHMrKzsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiByZWFkIGNvd2ZpbGUgZnJvbSBhIG1vZGlmaWVkIG9mZnNldCwgaS5lLiBza2lwcGluZyB0aGUgYml0bWFwIGFuZCBjb3doZWFkCi0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSByZWFkCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb19yZWFkY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlYWRjb3cgY2FsbGVkXG4iKTsKLQotCW9mZnNldCArPSBjb3dkZXYtPmNvd2hlYWQtPmRvZmZzZXQ7Ci0KLQlyZXR1cm4gY293bG9fcmVhZGNvd3Jhdyhjb3dkZXYsIGJ1ZiwgbGVuLCBvZmZzZXQpOwotfQotCi0vKgotKiogcmVhZCBjb3dmaWxlIGZyb20gYW4gYWJzb2x1dGUgb2Zmc2V0Ci0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSByZWFkCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb19yZWFkY293cmF3KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LAotCQkJCQl2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JbW1fc2VnbWVudF90CW9sZF9mczsKLQlsb2ZmX3QJCXNhdmVvZmZzZXQgPSBvZmZzZXQ7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZGNvd3JhdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBiZSBzdXJlIHRoYXQgY293ZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWQtd3JpdGUKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XQ09XT1BFTikgKSB7Ci0JCSBwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSByZWFkIHJlcXVlc3QgZnJvbSBjb3dmaWxlIHJlZnVzZWRcbiIpOwotCi0JCXJldHVybiAtRUJBREY7Ci0JfQotCi0JLyoKLQkqKiBpc3N1ZSBsb3cgbGV2ZWwgcmVhZAotCSovCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyggZ2V0X2RzKCkgKTsKLQlydiA9IGNvd2Rldi0+Y293ZnAtPmZfb3AtPnJlYWQoY293ZGV2LT5jb3dmcCwgYnVmLCBsZW4sICZvZmZzZXQpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChydiA8IGxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHJlYWQtZmFpbHVyZSAlbGQgb24gY293ZmlsZSIKLQkJICAgICAgICItIG9mZnNldD0lbGxkIGxlbj0lZFxuIiwgcnYsIHNhdmVvZmZzZXQsIGxlbik7Ci0JfQotCi0JY293ZGV2LT5jb3dyZWFkcysrOwotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIHdyaXRlIGNvd2ZpbGUgZnJvbSBhIG1vZGlmaWVkIG9mZnNldCwgaS5lLiBza2lwcGluZyB0aGUgYml0bWFwIGFuZCBjb3doZWFkCi0qKgotKiogaWYgYSBibG9jayBpcyB3cml0dGVuIGZvciB0aGUgZmlyc3QgdGltZSB3aGlsZSBpdHMgY29udGVudHMgY29uc2lzdHMKLSoqIG9mIGJpbmFyeSB6ZXJvZXMgb25seSwgdGhlIGNvbmNlcm5pbmcgYml0bWFwIGlzIGZsdXNoZWQgdG8gdGhlIGNvd2ZpbGUKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHdyaXRlCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb193cml0ZWNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWxvbmcgaW50CXJ2OwotCXVuc2lnbmVkIGxvbmcJbWFwbnVtPTAsIG1hcGJ5dGU9MCwgbWFwYml0PTAsIGNvd2Jsb2NrPTAsIHBhcnRsZW47Ci0JY2hhcgkJKnRtcHB0ciwgICptYXBwdHIgPSBOVUxMOwotCWxvZmZfdAkJdG1wb2Zmc2V0LCBtYXBvZmZzZXQgPSAwOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlY293IGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIGJlIHN1cmUgdGhhdCBjb3dmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZC13cml0ZQotCSovCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pICkgewotCQkgcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICJjb3dsb29wIC0gV3JpdGUgcmVxdWVzdCB0byBjb3dmaWxlIHJlZnVzZWRcbiIpOwotCi0JCXJldHVybiAtRUJBREY7Ci0JfQotCi0JLyoKLQkqKiB3cml0ZSB0aGUgZW50aXJlIGJsb2NrIHRvIHRoZSBjb3dmaWxlCi0JKi8KLQl0bXBvZmZzZXQgPSBvZmZzZXQgKyBjb3dkZXYtPmNvd2hlYWQtPmRvZmZzZXQ7Ci0KLQlydiA9IGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgYnVmLCBsZW4sIHRtcG9mZnNldCk7Ci0KLQkvKgotCSoqIHZlcmlmeSBpZiBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlIG9uIGZpbGVzeXN0ZW0gaG9sZGluZwotCSoqIHRoZSBjb3dmaWxlCi0JKiogICAtIHdoZW4gdGhlIGxhc3Qgd3JpdGUgZmFpbGVkIChtaWdodCBiZSBjYXVzZWQgYnkgbGFjayBvZiBzcGFjZSkKLQkqKiAgIC0gd2hlbiBhIHdhdGNoZXIgaXMgYWN0aXZlICh0byByZWFjdCBhZGVxdWF0bHkpCi0JKiogICAtIHdoZW4gdGhlIHByZXZpb3VzIGNoZWNrIGluZGljYXRlZCBmcyB3YXMgYWxtb3N0IGZ1bGwKLQkqKiAgIC0gd2l0aCByZWd1bGFyIGludGVydmFscwotCSovCi0JaWYgKCAocnYgPD0gMCkJCQkJICAgICAgIHx8Ci0JICAgICAoY293ZGV2LT5zdGF0ZSAgICAgICAgJiBDT1dXQVRDSERPRykgICAgICB8fAotCSAgICAgKGNvd2Rldi0+YmxrYXZhaWwgLyAyIDwgU1BDREZMSU5UVkwpICAgICAgfHwKLQkgICAgIChjb3dkZXYtPmNvd3dyaXRlcyAgICAlIFNQQ0RGTElOVFZMID09IDApICkgewotCQlzdHJ1Y3Qga3N0YXRmcwkJa3M7Ci0KLQkJaWYgKHZmc19zdGF0ZnMoY293ZGV2LT5jb3dmcC0+Zl9kZW50cnksICZrcyk9PTApewotCQkJaWYgKGtzLmZfYmF2YWlsIDw9IFNQQ01JTkJMSykgewotCQkJCXN3aXRjaCAoa3MuZl9iYXZhaWwpIHsKLQkJCQkgICBjYXNlIDA6Ci0JCQkJICAgY2FzZSAxOgotCQkJCSAgIGNhc2UgMjoKLQkJCQkgICBjYXNlIDM6Ci0JCQkJCXByaW50ayhLRVJOX0FMRVJUCi0JCQkJCSAgICAgICAiY293bG9vcCAtICIKLQkJCQkJICAgICAgICJBTEVSVDogY293ZmlsZSBmdWxsIVxuIik7Ci0JCQkJCWJyZWFrOwotCi0JCQkJICAgZGVmYXVsdDoKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlIGFsbW9zdCAiCi0JCQkJCSAgICAgICAiZnVsbCAob25seSAlbGx1IEtiIGZyZWUpXG4iLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtzLmZfYnNpemUgKiBrcy5mX2JhdmFpbCAvMTAyNCk7Ci0JCQkJfQotCQkJfQotCi0JCQljb3dkZXYtPmJsa3RvdGFsID0ga3MuZl9ibG9ja3M7Ci0JCQljb3dkZXYtPmJsa2F2YWlsID0ga3MuZl9iYXZhaWw7Ci0KLQkJCS8qCi0JCQkqKiB3YWtldXAgd2F0Y2hlciBpZiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZAotCQkJKi8KLQkJCWlmICggKGNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRykgJiYKLQkJCSAgICAoY293ZGV2LT53YXRjaHRocmVzaCA+PSBjb3dkZXYtPmJsa2F2YWlsKSApIHsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvd2Rldi0+d2F0Y2hxKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChydiA8PSAwKQotCQlyZXR1cm4gcnY7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gYmxvY2sgd3JpdHRlblxuIik7Ci0KLQkvKgotCSoqIGNoZWNrIGlmIGJsb2NrKHMpIGlzL2FyZSB3cml0dGVuIHRvIHRoZSBjb3dmaWxlCi0JKiogZm9yIHRoZSBmaXJzdCB0aW1lOyBpZiBzbywgYWRhcHQgdGhlIGJpdG1hcAotCSovCi0JZm9yICg7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuLCBidWYrPXBhcnRsZW4pIHsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBhcnRpYWwgbGVuZ3RoIGZvciB0aGlzIHRyYW5zZmVyCi0JCSovCi0JCXBhcnRsZW4gPSBNQVBVTklUIC0gKG9mZnNldCAmIE1VTUFTSyk7Ci0JCWlmIChwYXJ0bGVuID4gbGVuKQotCQkJcGFydGxlbiA9IGxlbjsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgYml0bnIgb2Ygd3JpdHRlbiBjaHVuayBvZiBjb3dibG9jawotCQkqLwotCQljb3dibG9jayA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCW1hcG51bSAgID0gQ0FMQ01BUCAoY293YmxvY2spOwotCQltYXBieXRlICA9IENBTENCWVRFKGNvd2Jsb2NrKTsKLQkJbWFwYml0ICAgPSBDQUxDQklUIChjb3dibG9jayk7Ci0KLQkJaWYgKCooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrbWFwYnl0ZSkgJiAoMTw8bWFwYml0KSkKLQkJCWNvbnRpbnVlOwkvKiBhbHJlYWR5IHdyaXR0ZW4gYmVmb3JlICovCi0KLQkgICAgICAgCS8qCi0JCSoqIGlmIHRoZSBibG9jayBpcyB3cml0dGVuIGZvciB0aGUgZmlyc3QgdGltZSwKLQkJKiogdGhlIGNvcnJlc3BvbmRpbmcgYml0IHNob3VsZCBiZSBzZXQgaW4gdGhlIGJpdG1hcAotCQkqLwotCQkqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK21hcGJ5dGUpIHw9ICgxPDxtYXBiaXQpOwotCi0JCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYml0dXBkYXRlIGJsaz0lbGQgbWFwPSVsZCAiCi0JCSAgICAgICAgImJ5dGU9JWxkIGJpdD0lbGRcbiIsCi0JCQljb3dibG9jaywgbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQpOwotCi0JCS8qCi0JCSoqIGNoZWNrIGlmIHRoZSBjb3doZWFkIGluIHRoZSBjb3dmaWxlIGlzIGN1cnJlbnRseQotCQkqKiBtYXJrZWQgY2xlYW47IGlmIHNvLCBtYXJrIGl0IGRpcnR5IGFuZCBmbHVzaCBpdAotCQkqLwotCQlpZiAoICEoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmPSBDT1dESVJUWSkpIHsKLQkJCWNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MJfD0gQ09XRElSVFk7Ci0KLQkJCWNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgY293ZGV2LT5jb3doZWFkLAotCQkJCQkJCU1BUFVOSVQsIChsb2ZmX3QpMCk7Ci0JCX0KLQotCQkvKgotCQkqKiBpZiB0aGUgd3JpdHRlbiBkYXRhYmxvY2sgY29udGFpbmVkIGJpbmFyeSB6ZXJvZXMsCi0JCSoqIHRoZSBiaXRtYXAgYmxvY2sgc2hvdWxkIGJlIG1hcmtlZCB0byBiZSBmbHVzaGVkIHRvIGRpc2sKLQkJKiogKGJsb2NrcyBjb250YWluaW5nIGFsbCB6ZXJvZXMgY2Fubm90IGJlIHJlY292ZXJlZCBieQotCQkqKiB0aGUgY293cmVwYWlyLXByb2dyYW0gbGF0ZXIgb24gaWYgY293bG9vcCBpcyBub3QgcHJvcGVybHkKLQkJKiogcmVtb3ZlZCB2aWEgcm1tb2QpCi0JCSovCi0JCWlmICggbWVtY21wKGJ1ZiwgYWxsemVyb2VzLCBwYXJ0bGVuKSApIC8qIG5vdCBhbGwgemVyb2VzPyAqLwotCQkJY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGZsdXNoIG5lZWRlZCAqLwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwb3NpdGlvbnMgb2YgYml0bWFwIGJsb2NrIHRvIGJlIGZsdXNoZWQKLQkJKiogLSBwb2ludGVyIG9mIGJpdG1hcCBibG9jayBpbiBtZW1vcnkKLQkJKiogLSBvZmZzZXQgIG9mIGJpdG1hcCBibG9jayBpbiBjb3dmaWxlCi0JCSovCi0JCXRtcHB0ciAgICA9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pICsgKG1hcGJ5dGUgJiAofk1VTUFTSykpOwotCQl0bXBvZmZzZXQgPSAobG9mZl90KSBNQVBVTklUICsgbWFwbnVtICogTUFQQ0hVTktTWiArCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBieXRlICYgKH5NVU1BU0spKTsKLQotCQkvKgotCQkqKiBmbHVzaCBhIGJpdG1hcCBibG9jayBhdCB0aGUgbW9tZW50IHRoYXQgYWxsIGJpdHMgaGF2ZQotCQkqKiBiZWVuIHNldCBpbiB0aGF0IGJsb2NrLCBpLmUuIGF0IHRoZSBtb21lbnQgdGhhdCB3ZQotCQkqKiBzd2l0Y2ggdG8gYW5vdGhlciBiaXRtYXAgYmxvY2sKLQkJKi8KLQkJaWYgKCAobWFwb2Zmc2V0ICE9IDApICYmIChtYXBvZmZzZXQgIT0gdG1wb2Zmc2V0KSApIHsKLQkJCWlmIChjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIG1hcHB0ciwgTUFQVU5JVCwKLQkJCQkJCQltYXBvZmZzZXQpIDwgMCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgImNvd2xvb3AgLSB3cml0ZS1mYWlsdXJlIG9uIGJpdG1hcCAtICIKLQkJCQkgICAgICAgImJsaz0lbGQgbWFwPSVsZCBieXRlPSVsZCBiaXQ9JWxkXG4iLAotCQkJCSAgCWNvd2Jsb2NrLCBtYXBudW0sIG1hcGJ5dGUsIG1hcGJpdCk7Ci0JCQl9Ci0KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSBiaXRtYXAgYmxrIHdyaXR0ZW4gJWxsZFxuIiwKLQkJCQkJCQkJbWFwb2Zmc2V0KTsKLQkJfQotCi0JCS8qCi0JCSoqIHJlbWVtYmVyIG9mZnNldCBpbiBjb3dmaWxlIGFuZCBvZmZzZXQgaW4gbWVtb3J5Ci0JCSoqIGZvciBiaXRtYXAgdG8gYmUgZmx1c2hlZDsgZmx1c2hpbmcgd2lsbCBiZSBkb25lCi0JCSoqIGFzIHNvb24gYXMgYWxsIHVwZGF0ZXMgaW4gdGhpcyBiaXRtYXAgYmxvY2sgaGF2ZQotCQkqKiBiZWVuIGRvbmUKLQkJKi8KLQkJbWFwb2Zmc2V0ID0gdG1wb2Zmc2V0OwotCQltYXBwdHIgICAgPSB0bXBwdHI7Ci0JfQotCi0JLyoKLQkqKiBhbnkgbmV3IGJsb2NrIHdyaXR0ZW4gY29udGFpbmluZyBiaW5hcnkgemVyb2VzPwotCSovCi0JaWYgKG1hcG9mZnNldCkgewotCQlpZiAoY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBtYXBwdHIsIE1BUFVOSVQsIG1hcG9mZnNldCkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNvd2xvb3AgLSB3cml0ZS1mYWlsdXJlIG9uIGJpdG1hcCAtICIKLQkJCSAgICAgICAiYmxrPSVsZCBtYXA9JWxkIGJ5dGU9JWxkIGJpdD0lbGRcbiIsCi0JCQkgICAgICAgY293YmxvY2ssIG1hcG51bSwgbWFwYnl0ZSwgbWFwYml0KTsKLQkJfQotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBiaXRtYXAgYmxvY2sgd3JpdHRlbiAlbGxkXG4iLCBtYXBvZmZzZXQpOwotCX0KLQotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIHdyaXRlIGNvd2ZpbGUgZnJvbSBhbiBhYnNvbHV0ZSBvZmZzZXQKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHdyaXRlCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb193cml0ZWNvd3JhdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwKLQkJCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWxvbmcgaW50CXJ2OwotCW1tX3NlZ21lbnRfdAlvbGRfZnM7Ci0JbG9mZl90CQlzYXZlb2Zmc2V0ID0gb2Zmc2V0OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlY293cmF3IGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIGJlIHN1cmUgdGhhdCBjb3dmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZC13cml0ZQotCSovCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pICkgewotCQkgcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICJjb3dsb29wIC0gd3JpdGUgcmVxdWVzdCB0byBjb3dmaWxlIHJlZnVzZWRcbiIpOwotCi0JCXJldHVybiAtRUJBREY7Ci0JfQotCi0JLyoKLQkqKiBpc3N1ZSBsb3cgbGV2ZWwgd3JpdGUKLQkqLwotICAgICAgICBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoIGdldF9kcygpICk7Ci0JcnYgPSBjb3dkZXYtPmNvd2ZwLT5mX29wLT53cml0ZShjb3dkZXYtPmNvd2ZwLCBidWYsIGxlbiwgJm9mZnNldCk7Ci0gICAgICAgIHNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJ2IDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gd3JpdGUtZmFpbHVyZSAlbGQgb24gY293ZmlsZSIKLQkJICAgICAgICItIG9mZnNldD0lbGxkIGxlbj0lZFxuIiwgcnYsIHNhdmVvZmZzZXQsIGxlbik7Ci0JfQotCi0JY293ZGV2LT5jb3d3cml0ZXMrKzsKLQlyZXR1cm4gcnY7Ci19Ci0KLQotLyoKLSoqIHJlYWRwcm9jLWZ1bmN0aW9uOiBjYWxsZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyAvcHJvYy1maWxlIGlzIHJlYWQKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19yZWFkcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLCBpbnQgY250LCBpbnQgKmVvZiwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiA9IHA7Ci0KLQlyZXZpc2lvbltzaXplb2YgcmV2aXNpb24gLSAzXSA9ICdcMCc7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsCi0JCSIgICBjb3dsb29wIHZlcnNpb246ICU5c1xuXG4iCi0JCSIgICAgICBkZXZpY2Ugc3RhdGU6ICVzJXMlcyVzXG4iCi0JCSIgICBudW1iZXIgb2Ygb3BlbnM6ICU5ZFxuIgotCQkiICAgICBwaWQgb2YgdGhyZWFkOiAlOWRcblxuIgotCQkiICAgIHJlYWQtb25seSBmaWxlOiAlOXNcbiIKLQkJIiAgICAgICAgICByZG9yZWFkczogJTlsdVxuXG4iCi0JCSJjb3B5LW9uLXdyaXRlIGZpbGU6ICU5c1xuIgotCQkiICAgICBzdGF0ZSBjb3dmaWxlOiAlOXNcbiIKLQkJIiAgICAgYml0bWFwLWJsb2NrczogJTlsdSAob2YgJWQgYnl0ZXMpXG4iCi0JCSIgIGNvd2Jsb2NrcyBpbiB1c2U6ICU5bHUgKG9mICVkIGJ5dGVzKVxuIgotCQkiICAgICAgICAgIGNvd3JlYWRzOiAlOWx1XG4iCi0JCSIgICAgICAgICBjb3d3cml0ZXM6ICU5bHVcbiIsCi0JCQkmcmV2aXNpb25bMTFdLAotCi0JCQljb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTiAgID8gImRldm9wZW4gIiAgIDogIiIsCi0JCQljb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOID8gImNvd29wZW5ydyAiIDogIiIsCi0JCQljb3dkZXYtPnN0YXRlICYgQ09XUkRDT1dPUEVOID8gImNvd29wZW5ybyAiIDogIiIsCi0JCQljb3dkZXYtPnN0YXRlICYgQ09XV0FUQ0hET0cgID8gIndhdGNoZG9nICIgIDogIiIsCi0KLQkJCWNvd2Rldi0+b3BlbmNudCwKLQkJCWNvd2Rldi0+cGlkLAotCQkJY293ZGV2LT5yZG9uYW1lLAotCQkJY293ZGV2LT5yZG9yZWFkcywKLQkJCWNvd2Rldi0+Y293bmFtZSwKLQkJCWNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSA/ICJkaXJ0eSI6ImNsZWFuIiwKLQkJCWNvd2Rldi0+bWFwc2l6ZSA+PiBNVVNISUZULCBNQVBVTklULAotCQkJY293ZGV2LT5ucmNvd2Jsb2NrcywgTUFQVU5JVCwKLQkJCWNvd2Rldi0+Y293cmVhZHMsCi0JCQljb3dkZXYtPmNvd3dyaXRlcyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFNldHVwIGFuZCBkZXN0cm95IGNvd2RldmljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIG9wZW4gYW5kIHByZXBhcmUgYSBjb3dkZXZpY2UgKHJkb2ZpbGUgYW5kIGNvd2ZpbGUpIGFuZCBhbGxvY2F0ZSBiaXRtYXBzCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fb3BlbnBhaXIoY2hhciAqcmRvZiwgY2hhciAqY293ZiwgaW50IGF1dG9yZWNvdmVyLCBpbnQgbWlub3IpCi17Ci0JbG9uZyBpbnQJCXJ2OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2ID0gY293ZGV2YWxsW21pbm9yXTsKLQlzdHJ1Y3Qga3N0YXRmcwkJa3M7Ci0KLQlkb3duKCZjb3dkZXZsb2NrKTsKLQotCS8qCi0JKiogcmVxdWVzdGVkIGRldmljZSBleGlzdHM/Ci0JKi8KLQlpZiAobWlub3IgPj0gbWF4Y293cykgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCi0JKiogcmVxdWVzdGVkIGRldmljZSBhbHJlYWR5IGFzc2lnbmVkIHRvIGNvd2RldmljZT8KLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyoKLQkqKiBpbml0aWFsaXplIGFkbWluaXN0cmF0aW9uCi0JKi8KLQltZW1zZXQoY293ZGV2LCAwLCBzaXplb2YgKmNvd2Rldik7Ci0KLQlzcGluX2xvY2tfaW5pdCAgICAgKCZjb3dkZXYtPnJxbG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY293ZGV2LT53YWl0cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY293ZGV2LT53YXRjaHEpOwotCi0JLyoKLQkqKiBvcGVuIHRoZSByZWFkLW9ubHkgZmlsZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgb3BlbnJkby4uLi5cbiIpOwotCi0JaWYgKCAocnYgPSBjb3dsb19vcGVucmRvKGNvd2RldiwgcmRvZikpICkgewotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gcnY7Ci0JfQotCi0JLyoKLQkqKiBvcGVuIHRoZSBjb3dmaWxlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBvcGVuY293Li4uLlxuIik7Ci0KLQlpZiAoIChydiA9IGNvd2xvX29wZW5jb3coY293ZGV2LCBjb3dmLCBhdXRvcmVjb3ZlcikpICkgewotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIHJ2OwotCX0KLQotCS8qCi0JKiogYWRtaW5pc3RlciB0b3RhbCBhbmQgYXZhaWxhYmxlIHNpemUgb2YgZmlsZXN5c3RlbSBob2xkaW5nIGNvd2ZpbGUKLQkqLwotCWlmICh2ZnNfc3RhdGZzKGNvd2Rldi0+Y293ZnAtPmZfZGVudHJ5LCAma3MpPT0wKSB7Ci0JCWNvd2Rldi0+Ymxrc2l6ZSAgPSBrcy5mX2JzaXplOwotCQljb3dkZXYtPmJsa3RvdGFsID0ga3MuZl9ibG9ja3M7Ci0JCWNvd2Rldi0+YmxrYXZhaWwgPSBrcy5mX2JhdmFpbDsKLQl9IGVsc2UgewotCQljb3dkZXYtPmJsa3NpemUgID0gMTAyNDsJLyogYXZvaWQgZGl2aXNpb24gYnkgemVybyAqLwotCX0KLQotCS8qCi0JKiogZmx1c2ggdGhlIChyZWNvdmVyZWQpIGJpdG1hcHMgYW5kIGNvd2hlYWQgdG8gdGhlIGNvd2ZpbGUKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIGNvd3N5bmMuLi4uXG4iKTsKLQotCWNvd2xvX3N5bmMoKTsKLQotCS8qCi0JKiogYWxsb2NhdGUgZ2VuZGlzayBmb3IgdGhlIGNvdyBkZXZpY2UKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBhbGxvYyBkaXNrLi4uLlxuIik7Ci0KLQlpZiAoKGNvd2Rldi0+Z2QgPSBhbGxvY19kaXNrKDEpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5hYmxlIHRvIGFsbG9jX2Rpc2sgZm9yIGNvd2xvb3BcbiIpOwotCi0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljb3dkZXYtPmdkLT5tYWpvciAgICAgICAgPSBDT1dNQUpPUjsKLQljb3dkZXYtPmdkLT5maXJzdF9taW5vciAgPSBtaW5vcjsKLQljb3dkZXYtPmdkLT5taW5vcnMgICAgICAgPSAxOwotCWNvd2Rldi0+Z2QtPmZvcHMgICAgICAgICA9ICZjb3dsb19mb3BzOwotCWNvd2Rldi0+Z2QtPnByaXZhdGVfZGF0YSA9IGNvd2RldjsKLQlzcHJpbnRmKGNvd2Rldi0+Z2QtPmRpc2tfbmFtZSwgIiVzJWQiLCBERVZJQ0VfTkFNRSwgbWlub3IpOwotCi0JLyogaW4gLjUgS2IgdW5pdHMgKi8KLQlzZXRfY2FwYWNpdHkoY293ZGV2LT5nZCwgKGNvd2Rldi0+bnVtYmxvY2tzKihNQVBVTklULzUxMikpKTsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBpbml0IHJlcXVlc3QgcXVldWUuLi4uXG4iKTsKLQotCWlmICgoY293ZGV2LT5ycXVldWUgPSBibGtfaW5pdF9xdWV1ZShjb3dsb19yZXF1ZXN0LCAmY293ZGV2LT5ycWxvY2spKQotCQkJCQkJCQk9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5hYmxlIHRvIGdldCByZXF1ZXN0IHF1ZXVlIGZvciBjb3dsb29wXG4iKTsKLQotCQlkZWxfZ2VuZGlzayhjb3dkZXYtPmdkKTsKLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoY293ZGV2LT5ycXVldWUsIGNvd2Rldi0+YmxvY2tzeik7Ci0JY293ZGV2LT5nZC0+cXVldWUgPSBjb3dkZXYtPnJxdWV1ZTsKLQotCS8qCi0JKiogc3RhcnQga2VybmVsIHRocmVhZCB0byBoYW5kbGUgcmVxdWVzdHMKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBraWNrb2ZmIGRhZW1vbi4uLi5cbiIpOwotCi0JY293ZGV2LT5waWQgPSBrZXJuZWxfdGhyZWFkKChpbnQgKCopKHZvaWQgKikpY293bG9fZGFlbW9uLCBjb3dkZXYsIDApOwotCi0JLyoKLQkqKiBjcmVhdGUgYSBmaWxlIGJlbG93IGRpcmVjdG9yeSAvcHJvYy9jb3cgZm9yIHRoaXMgbmV3IGNvd2RldmljZQotCSovCi0JaWYgKGNvd2xvX3Byb2NkaXIpIHsKLQkJY2hhciAJdG1wbmFtZVs2NF07Ci0KLQkJc3ByaW50Zih0bXBuYW1lLCAiJWQiLCBtaW5vcik7Ci0KLQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSh0bXBuYW1lLCAwICwgY293bG9fcHJvY2RpciwKLQkJCQkJCWNvd2xvX3JlYWRwcm9jLCBjb3dkZXYpOwotCX0KLQotCWNvd2Rldi0+c3RhdGUJfD0gQ09XREVWT1BFTjsKLQotCWNvd2Rldi0+cmRvbmFtZSA9IHJkb2Y7Ci0JY293ZGV2LT5jb3duYW1lID0gY293ZjsKLQotCS8qCi0JKiogZW5hYmxlIHRoZSBuZXcgZGlzazsgdGhpcyB0cmlnZ2VycyB0aGUgZmlyc3QgcmVxdWVzdCEKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIGFkZF9kaXNrLi4uLlxuIik7Ci0KLQlhZGRfZGlzayhjb3dkZXYtPmdkKTsKLQotCXVwKCZjb3dkZXZsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGNsb3NlIGEgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkgYW5kIHJlbGVhc2UgbWVtb3J5Ci0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fY2xvc2VwYWlyKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWludCBtaW5vcjsKLQotCWRvd24oJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiBpZiBjb3dkZXZpY2UgaXMgbm90IGFjdGl2YXRlZCBhdCBhbGwsIHJlZnVzZQotCSovCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSoqIGlmIHRoaXMgY293ZGV2aWNlIGlzIHN0aWxsIG9wZW4sIHJlZnVzZQotCSovCi0JaWYgKGNvd2Rldi0+b3BlbmNudCA+IDApIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXVwKCZjb3dkZXZsb2NrKTsKLQotCS8qCi0JKiogd2FrZXVwIHdhdGNoZXIgKGlmIGFueSkKLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XV0FUQ0hET0cpIHsKLQkJY293ZGV2LT53YXRjaHRocmVzaCA9IGNvd2Rldi0+YmxrYXZhaWw7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY293ZGV2LT53YXRjaHEpOwotCX0KLQotCS8qCi0JKiogd2FrZXVwIGtlcm5lbC10aHJlYWQgdG8gYmUgYWJsZSB0byBleGl0Ci0JKiogYW5kIHdhaXQgdW50aWwgaXQgaGFzIGV4aXRlZAotCSovCi0JY293ZGV2LT5jbG9zZWRvd24gPSAxOwotCWNvd2Rldi0+cWZpbGxlZCAgID0gMTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvd2Rldi0+d2FpdHEpOwotCi0gICAgICAgCXdoaWxlIChjb3dkZXYtPnBpZCkKLSAgICAgICAgICAgICAgIAlzY2hlZHVsZSgpOwotCi0JZGVsX2dlbmRpc2soY293ZGV2LT5nZCk7ICAvKiByZXZlcnQgdGhlIGFsbG9jX2Rpc2soKSAqLwotCXB1dF9kaXNrKGNvd2Rldi0+Z2QpOyAgICAgLyogcmV2ZXJ0IHRoZSBhZGRfZGlzaygpICAgKi8KLQotCWlmIChjb3dsb19wcm9jZGlyKSB7Ci0JCWNoYXIgCXRtcG5hbWVbNjRdOwotCi0JCWZvciAobWlub3IgPSAwOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQkJCWlmIChjb3dkZXYgPT0gY293ZGV2YWxsW21pbm9yXSkgYnJlYWs7Ci0JCX0KLQkJc3ByaW50Zih0bXBuYW1lLCAiJWQiLCBtaW5vcik7Ci0KLQkJcmVtb3ZlX3Byb2NfZW50cnkodG1wbmFtZSwgY293bG9fcHJvY2Rpcik7Ci0JfQotCi0JYmxrX2NsZWFudXBfcXVldWUoY293ZGV2LT5ycXVldWUpOwotCi0JLyoKLQkqKiByZWxlYXNlIG1lbW9yeSBmb3IgZmlsZW5hbWVzIGlmIHRoZXNlIG5hbWVzIGhhdmUKLQkqKiBiZWVuIGFsbG9jYXRlZCBkeW5hbWljYWxseQotCSovCi0JaWYgKCAoY293ZGV2LT5jb3duYW1lKSAmJiAoY293ZGV2LT5jb3duYW1lICE9IGNvd2ZpbGUpKQotCQlrZnJlZShjb3dkZXYtPmNvd25hbWUpOwotCi0JaWYgKCAoY293ZGV2LT5yZG9uYW1lKSAmJiAoY293ZGV2LT5yZG9uYW1lICE9IHJkb2ZpbGUpKQotCQlrZnJlZShjb3dkZXYtPnJkb25hbWUpOwotCi0JY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0KLQljb3dkZXYtPnN0YXRlICY9IH5DT1dERVZPUEVOOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBvcGVuIHRoZSByZWFkLW9ubHkgZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX29wZW5yZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIGNoYXIgKnJkb2YpCi17Ci0Jc3RydWN0IGZpbGUJKmY7Ci0Jc3RydWN0IGlub2RlCSppbm9kZTsKLQlsb25nIGludAlpLCBucnZhbDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVucmRvIGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIG9wZW4gdGhlIHJlYWQtb25seSBmaWxlCi0JKi8KLSAgICAgICAgaWYoKnJkb2YgPT0gJ1wwJykgewotICAgICAJICAgICAJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIHNwZWNpZnkgbmFtZSBmb3IgcmVhZC1vbmx5IGZpbGVcblxuIik7Ci0gICAgICAgICAJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotCWYgPSBmaWxwX29wZW4ocmRvZiwgT19SRE9OTFl8T19MQVJHRUZJTEUsIDApOwotCi0JaWYgKCAoZiA9PSBOVUxMKSB8fCBJU19FUlIoZikgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBvcGVuIG9mIHJkb2ZpbGUgJXMgZmFpbGVkXG4iLCByZG9mKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY293ZGV2LT5yZG9mcCA9IGY7Ci0KLQlpbm9kZSA9IGYtPmZfZGVudHJ5LT5kX2lub2RlOwotCi0JaWYgKCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAhU19JU0JMSyhpbm9kZS0+aV9tb2RlKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtICVzIG5vdCByZWd1bGFyIGZpbGUgb3IgYmxvY2tkZXZcbiIsIHJkb2YpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gZGV0ZXJtaW5lIHNpemUgcmRvLi4uLlxuIik7Ci0KLQkvKgotCSoqIGRldGVybWluZSBibG9jay1zaXplIGFuZCB0b3RhbCBzaXplIG9mIHJlYWQtb25seSBmaWxlCi0JKi8KLQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQkvKgotCQkqKiByZWFkLW9ubHkgZmlsZSBpcyBhIHJlZ3VsYXIgZmlsZQotCQkqLwotCQljb3dkZXYtPmJsb2Nrc3ogICA9IDUxMjsJLyogb3RoZXIgdmFsdWUgZmFpbHMgKi8KLQkJY293ZGV2LT5udW1ibG9ja3MgPSBpbm9kZS0+aV9zaXplID4+IE1VU0hJRlQ7Ci0KLQkJaWYgKGlub2RlLT5pX3NpemUgJiBNVU1BU0spIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY293bG9vcCAtIHJkb2ZpbGUgJXMgdHJ1bmNhdGVkIHRvIG11bHRpcGxlICIKLQkJCSAgICAgICAib2YgJWQgYnl0ZXNcbiIsIHJkb2YsIE1BUFVOSVQpOwotCQl9Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIFJPPXJlZ3VsYXI6IG51bWJsb2Nrcz0lZCwgYmxvY2tzej0lZFxuIiwKLQkJCWNvd2Rldi0+bnVtYmxvY2tzLCBjb3dkZXYtPmJsb2Nrc3opOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSoqIHJlYWQtb25seSBmaWxlIGlzIGEgYmxvY2sgZGV2aWNlCi0JCSovCi0JCWNvd2Rldi0+YmVsb3dkZXYgID0gaW5vZGUtPmlfYmRldjsKLQkJY293ZGV2LT5iZWxvd2dkICAgPSBjb3dkZXYtPmJlbG93ZGV2LT5iZF9kaXNrOyAvKiBnZW5kaXNrICovCi0KLQkJaWYgKGNvd2Rldi0+YmVsb3dkZXYtPmJkX3BhcnQpIHsKLQkJCWNvd2Rldi0+bnVtYmxvY2tzID0gY293ZGV2LT5iZWxvd2Rldi0+YmRfcGFydC0+bnJfc2VjdHMKLQkJCQkJCQkJLyAoTUFQVU5JVC81MTIpOwotCQl9Ci0KLQkJaWYgKGNvd2Rldi0+YmVsb3dnZCkgewotCQkJY293ZGV2LT5iZWxvd3EgPSBjb3dkZXYtPmJlbG93Z2QtPnF1ZXVlOwotCi0JCQlpZiAoY293ZGV2LT5udW1ibG9ja3MgPT0gMCkgewotCQkJCWNvd2Rldi0+bnVtYmxvY2tzID0gZ2V0X2NhcGFjaXR5KGNvd2Rldi0+YmVsb3dnZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCS8gKE1BUFVOSVQvNTEyKTsKLQkJCX0KLQkJfQotCi0KLQkJaWYgKGNvd2Rldi0+YmVsb3dxKQotCQkJY293ZGV2LT5ibG9ja3N6ID0gcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGNvd2Rldi0+YmVsb3dxKTsKLQotCQlpZiAoY293ZGV2LT5ibG9ja3N6ID09IDApCi0JCQljb3dkZXYtPmJsb2Nrc3ogPSBCTE9DS19TSVpFOyAvKiBkZWZhdWx0IDJeMTAgKi8KLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gbnVtYmxvY2tzPSVkLCAiCi0JCSAgICAgICAgICAgImJsb2Nrc3o9JWQsIGJlbG93Z2Q9JXAsIGJlbG93cT0lcFxuIiwKLQkJICAJY293ZGV2LT5udW1ibG9ja3MsIGNvd2Rldi0+YmxvY2tzeiwKLQkJCWNvd2Rldi0+YmVsb3dnZCwgY293ZGV2LT5iZWxvd3EpOwotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBiZWxvd2Rldi5iZF9ibG9ja19zaXplPSVkXG4iLAotCQkgIAljb3dkZXYtPmJlbG93ZGV2LT5iZF9ibG9ja19zaXplKTsKLQl9Ci0KLQlpZiAoY293ZGV2LT5udW1ibG9ja3MgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSAlcyBoYXMgbm8gY29udGVudHNcbiIsIHJkb2YpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSoqIHJlc2VydmUgc3BhY2UgaW4gbWVtb3J5IGFzIGdlbmVyaWMgSS9PIGJ1ZmZlcgotCSovCi0JY293ZGV2LT5pb2J1ZiAgPSBrbWFsbG9jKE1BUFVOSVQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFjb3dkZXYtPmlvYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBjYW5ub3QgZ2V0IHNwYWNlIGZvciBidWZmZXIgJWRcbiIsIE1BUFVOSVQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gZGV0ZXJtaW5lIGZpbmdlcnByaW50IHJkby4uLi5cbiIpOwotCi0JLyoKLQkqKiBkZXRlcm1pbmUgZmluZ2VycHJpbnQgZm9yIHJlYWQtb25seSBmaWxlCi0JKiogCWNhbGN1bGF0ZSBmaW5nZXJwcmludCBmcm9tIGZpcnN0IGZvdXIgZGF0YWJsb2NrcwotCSoqCXdoaWNoIGRvIG5vdCBjb250YWluIGJpbmFyeSB6ZXJvZXMKLQkqLwotCWZvciAoaT0wLCBjb3dkZXYtPmZpbmdlcnByaW50PTAsIG5ydmFsPTA7Ci0JCQkobnJ2YWwgPCA0KSYmKGkgPCBjb3dkZXYtPm51bWJsb2Nrcyk7IGkrKykgewotCQlpbnQgCQlqOwotCQl1bnNpZ25lZCBjaGFyCWNzOwotCi0JCS8qCi0JCSoqIHJlYWQgbmV4dCBibG9jawotCQkqLwotCQlpZiAoY293bG9fcmVhZHJkbyhjb3dkZXYsIGNvd2Rldi0+aW9idWYsIE1BUFVOSVQsCi0JCQkJCQkobG9mZl90KWkgPDwgTVVTSElGVCkgPCAxKQotCQkJYnJlYWs7Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIGZpbmdlcnByaW50IGJ5IGFkZGluZyBhbGwgYnl0ZS12YWx1ZXMKLQkJKi8KLQkJZm9yIChqPTAsIGNzPTA7IGogPCBNQVBVTklUOyBqKyspCi0JCQljcyArPSAqKGNvd2Rldi0+aW9idWYraik7Ci0KLQkJaWYgKGNzID09IDApCS8qIGJsb2NrIHByb2JhYmx5IGNvbnRhaW5lZCB6ZXJvZXMgKi8KLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSoqIHNoaWZ0IGJ5dGUtdmFsdWUgdG8gcHJvcGVyIHBsYWNlIGluIGZpbmFsIGZpbmdlcnByaW50Ci0JCSovCi0JCWNvd2Rldi0+ZmluZ2VycHJpbnQgfD0gY3MgPDwgKG5ydmFsKjgpOwotCQlucnZhbCsrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogdW5kbyBtZW1vcnkgYWxsb2NzIGFuZCBmaWxlIG9wZW5zIGlzc3VlZCBzbyBmYXIKLSoqIHJlbGF0ZWQgdG8gdGhlIHJlYWQtb25seSBmaWxlCi0qLwotc3RhdGljIHZvaWQKLWNvd2xvX3VuZG9fb3BlbnJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpZihjb3dkZXYtPmlvYnVmKTsKLQkJa2ZyZWUoY293ZGV2LT5pb2J1Zik7Ci0KLQlpZiAoY293ZGV2LT5yZG9mcCkKLSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+cmRvZnAsIDApOwotfQotCi0vKgotKiogb3BlbiB0aGUgY293ZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX29wZW5jb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIGNoYXIgKmNvd2YsIGludCBhdXRvcmVjb3ZlcikKLXsKLQlsb25nIGludAkJaSwgcnY7Ci0JaW50CQkJbWlub3I7Ci0JdW5zaWduZWQgbG9uZwkJbmI7Ci0Jc3RydWN0IGZpbGUJCSpmOwotCXN0cnVjdCBpbm9kZQkJKmlub2RlOwotCWxvZmZfdAkJCW9mZnNldDsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd3RtcDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVuY293IGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIG9wZW4gY29weS1vbi13cml0ZSBmaWxlIChyZWFkLXdyaXRlKQotCSovCi0gICAgICAgIGlmIChjb3dmWzBdID09ICdcMCcpIHsKLSAgICAgICAgICAJcHJpbnRrKEtFUk5fRVJSCi0gICAgICAgICAgICAgICAgICJjb3dsb29wIC0gc3BlY2lmeSBuYW1lIG9mIGNvcHktb24td3JpdGUgZmlsZVxuXG4iKTsKLSAgICAgICAgIAlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0JZiA9IGZpbHBfb3Blbihjb3dmLCBPX1JEV1J8T19MQVJHRUZJTEUsIDA2MDApOwotCi0JaWYgKCAoZiA9PSBOVUxMKSB8fCBJU19FUlIoZikgKSB7Ci0JCS8qCi0JCSoqIG5vbi1leGlzdGluZyBjb3dmaWxlOiB0cnkgdG8gY3JlYXRlCi0JCSovCi0JCWYgPSBmaWxwX29wZW4oY293ZiwgT19SRFdSfE9fQ1JFQVR8T19MQVJHRUZJTEUsIDA2MDApOwotCi0JCWlmICggKGYgPT0gTlVMTCkgfHwgSVNfRVJSKGYpICkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAJICAiY293bG9vcCAtIGZhaWxlZCB0byBvcGVuIGZpbGUgJXMgZm9yIHJlYWQtd3JpdGVcblxuIiwKLQkJICAgICAgIAkJCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JIAl9Ci0JfQotCi0JY293ZGV2LT5jb3dmcCA9IGY7Ci0KLQlpbm9kZSA9IGYtPmZfZGVudHJ5LT5kX2lub2RlOwotCi0JaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtICVzIGlzIG5vdCByZWd1bGFyIGZpbGVcbiIsIGNvd2YpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSoqIGNoZWNrIGlmIHRoaXMgY293ZmlsZSBpcyBhbHJlYWR5IGluIHVzZSBmb3IgYW5vdGhlciBjb3dkZXZpY2UKLQkqLwotCWZvciAobWlub3IgPSAwOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQotCQljb3d0bXAgPSBjb3dkZXZhbGxbbWlub3JdOwotCi0JCWlmICggIShjb3d0bXAtPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNvd3RtcCA9PSBjb3dkZXYpCi0JCQljb250aW51ZTsKLQotCQlpZiAoY293dG1wLT5jb3dmcC0+Zl9kZW50cnktPmRfaW5vZGUgPT0gZi0+Zl9kZW50cnktPmRfaW5vZGUpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gJXM6IGFscmVhZHkgaW4gdXNlIGFzIGNvd1xuIiwgY293Zik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JfQotCi0JLyoKLQkqKiBtYXJrIGNvd2ZpbGUgb3BlbiBmb3IgcmVhZC13cml0ZQotCSovCi0JY293ZGV2LT5zdGF0ZSB8PSBDT1dSV0NPV09QRU47Ci0KLQkvKgotCSoqIGNhbGN1bGF0ZSBzaXplIChpbiBieXRlcykgZm9yIHRvdGFsIGJpdG1hcCBpbiBjb3dmaWxlOwotCSoqIHdoZW4gdGhlIHNpemUgb2YgdGhlIGNvd2hlYWQgYmxvY2sgaXMgYWRkZWQsIHRoZSBzdGFydC1vZmZzZXQKLQkqKiBmb3IgdGhlIG1vZGlmaWVkIGRhdGEgYmxvY2tzIGNhbiBiZSBmb3VuZAotCSovCi0JbmIgPSBjb3dkZXYtPm51bWJsb2NrczsKLQotCWlmIChuYiU4KQkJLyogdHJhbnNmb3JtICNiaXRzIHRvICNieXRlcyAqLwotCQluYis9ODsgIAkvKiByb3VuZGVkIGlmIG5lY2Vzc2FyeSAgICAgICovCi0JbmIgLz0gODsKLQotCWlmIChuYiAmIE1VTUFTSykJLyogcm91bmQgdXAgI2J5dGVzIHRvIE1BUFVOSVQgY2h1bmtzICovCi0JCWNvd2Rldi0+bWFwc2l6ZSA9ICggKG5iPj5NVVNISUZUKSArMSkgPDwgTVVTSElGVDsKLQllbHNlCi0JCWNvd2Rldi0+bWFwc2l6ZSA9IG5iOwotCi0JLyoKLQkqKiByZXNlcnZlIHNwYWNlIGluIG1lbW9yeSBmb3IgdGhlIGNvd2hlYWQKLQkqLwotCWNvd2Rldi0+Y293aGVhZCA9IGttYWxsb2MoTUFQVU5JVCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNvd2Rldi0+Y293aGVhZCkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSBjYW5ub3QgZ2V0IHNwYWNlIGZvciBjb3doZWFkICVkXG4iLAotCQkJCQkJCQkgICAgIE1BUFVOSVQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY293ZGV2LT5jb3doZWFkLCAwLCBNQVBVTklUKTsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBwcmVwYXJlIGNvd2hlYWQuLi4uXG4iKTsKLQotCS8qCi0JKiogY2hlY2sgaWYgdGhlIGNvd2ZpbGUgZXhpc3RzIG9yIHNob3VsZCBiZSBjcmVhdGVkCi0JKi8KLQlpZiAoaW5vZGUtPmlfc2l6ZSAhPSAwKSB7Ci0JCS8qCi0JCSoqIGV4aXN0aW5nIGNvd2ZpbGU6IHJlYWQgdGhlIGNvdyBoZWFkCi0JCSovCi0JCWlmIChpbm9kZS0+aV9zaXplIDwgTUFQVU5JVCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBleGlzdGluZyBjb3dmaWxlICVzIHRvbyBzbWFsbFxuIiwKLQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJY293bG9fcmVhZGNvd3Jhdyhjb3dkZXYsIGNvd2Rldi0+Y293aGVhZCwgTUFQVU5JVCwgKGxvZmZfdCkgMCk7Ci0KLQkJLyoKLQkJKiogdmVyaWZ5IGlmIHRoZSBleGlzdGluZyBmaWxlIGlzIHJlYWxseSBhIGNvd2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+bWFnaWMgIT0gQ09XTUFHSUMpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBoYXMgaW5jb3JyZWN0IGZvcm1hdFxuIiwKLQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogdmVyaWZ5IHRoZSBjb3doZWFkIHZlcnNpb24gb2YgdGhlIGNvd2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+dmVyc2lvbiA+IENPV1ZFUlNJT04pIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBuZXdlciB0aGFuIHRoaXMgZHJpdmVyXG4iLAotCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIG5vdCBhIHBhY2tlZCBjb3dmaWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XUEFDS0VEKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAiY293bG9vcCAtIHBhY2tlZCBjb3dmaWxlICVzIG5vdCBhY2NlcHRlZFxuIiwgY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIHZlcmlmeSBpZiB0aGUgY293ZmlsZSBoYXMgYmVlbiBwcm9wZXJseSBjbG9zZWQKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSkgewotCQkJLyoKLQkJCSoqIGNvd2ZpbGUgd2FzIG5vdCBwcm9wZXJseSBjbG9zZWQ7Ci0JCQkqKiBjaGVjayBpZiBhdXRvbWF0aWMgcmVjb3ZlcnkgaXMgcmVxdWlyZWQKLQkJCSoqIChhY3R1YWwgcmVjb3Zlcnkgd2lsbCBiZSBkb25lIGxhdGVyIG9uKQotCQkJKi8KLQkJCWlmICghYXV0b3JlY292ZXIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIGlzIGRpcnR5ICIKLQkJCQkgICAgICAgIihub3QgcHJvcGVybHkgY2xvc2VkIGJ5IHJtbW9kPylcbiIsCi0JCQkJCWNvd2YpOwotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiY293bG9vcCAtIHJ1biBjb3dyZXBhaXIgb3Igc3BlY2lmeSAiCi0JCQkJICAgICAgICInb3B0aW9uPXInIHRvIHJlY292ZXJcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJKiogdmVyaWZ5IGlmIHRoZSBjb3dmaWxlIGlzIHJlYWxseSByZWxhdGVkIHRvIHRoaXMgcmRvZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5yZG9ibG9ja3MgIT0gY293ZGV2LT5udW1ibG9ja3MpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgKHNpemUgJWxsZCkgbm90IHJlbGF0ZWQgIgotCQkgICAgICAgCSAgICAgICAidG8gcmRvZmlsZSAoc2l6ZSAlbGxkKVxuIiwKLQkJCQljb3dmLAotCQkJCShsb25nIGxvbmcpY293ZGV2LT5jb3doZWFkLT5yZG9ibG9ja3MgPDxNVVNISUZULAotCQkJCShsb25nIGxvbmcpY293ZGV2LT5udW1ibG9ja3MgPDxNVVNISUZUKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+cmRvZmluZ2VycHJpbnQgIT0gY293ZGV2LT5maW5nZXJwcmludCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAJICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgbm90IHJlbGF0ZWQgdG8gcmRvZmlsZSAiCi0JCQkgICAgICIgKGZpbmdlcnByaW50IGVyciAtIHJkb2ZpbGUgbW9kaWZpZWQ/KVxuIiwgY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSoqIG5ldyBjb3dmaWxlOiBkZXRlcm1pbmUgdGhlIG1pbmltYWwgc2l6ZSAoY293aGVhZCtiaXRtYXApCi0JCSovCi0JCW9mZnNldCA9IChsb2ZmX3QpIE1BUFVOSVQgKyBjb3dkZXYtPm1hcHNpemUgLSAxOwotCi0JCWlmICggY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCAiIiwgMSwgb2Zmc2V0KSA8IDEpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gY2Fubm90IHNldCBjb3dmaWxlIHRvIHNpemUgJWxsZFxuIiwKLQkJCQlvZmZzZXQrMSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIHByZXBhcmUgbmV3IGNvd2hlYWQKLQkJKi8KLQkJY293ZGV2LT5jb3doZWFkLT5tYWdpYwkJPSBDT1dNQUdJQzsKLQkJY293ZGV2LT5jb3doZWFkLT52ZXJzaW9uCT0gQ09XVkVSU0lPTjsKLQkJY293ZGV2LT5jb3doZWFkLT5tYXB1bml0CT0gTUFQVU5JVDsKLQkJY293ZGV2LT5jb3doZWFkLT5tYXBzaXplCT0gY293ZGV2LT5tYXBzaXplOwotCQljb3dkZXYtPmNvd2hlYWQtPnJkb2Jsb2Nrcwk9IGNvd2Rldi0+bnVtYmxvY2tzOwotCQljb3dkZXYtPmNvd2hlYWQtPnJkb2ZpbmdlcnByaW50CT0gY293ZGV2LT5maW5nZXJwcmludDsKLQkJY293ZGV2LT5jb3doZWFkLT5jb3d1c2VkCT0gMDsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgc3RhcnQgb2Zmc2V0IG9mIGRhdGEgaW4gY293ZmlsZSwKLQkJKiogcm91bmRlZCB1cCB0byBtdWx0aXBsZSBvZiA0SyB0byBhdm9pZAotCQkqKiB1bm5lY2Vzc2FyeSBkaXNrLXVzYWdlIGZvciB3cml0dGVuIGRhdGFibG9ja3MgaW4KLQkJKiogdGhlIHNwYXJzZWQgY293ZmlsZSBvbiBlLmcuIDRLIGZpbGVzeXN0ZW1zCi0JCSovCi0JCWNvd2Rldi0+Y293aGVhZC0+ZG9mZnNldCA9Ci0JCQkoKE1BUFVOSVQrY293ZGV2LT5tYXBzaXplKzQwOTUpPj4xMik8PDEyOwotCX0KLQotCWNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MJPSAwOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlc2VydmUgc3BhY2UgYml0bWFwLi4uLlxuIik7Ci0KLQkvKgotCSoqIHJlc2VydmUgc3BhY2UgaW4gbWVtb3J5IGZvciB0aGUgZW50aXJlIGJpdG1hcCBhbmQKLQkqKiBmaWxsIGl0IHdpdGggdGhlIGJpdG1hcC1kYXRhIGZyb20gZGlzazsgdGhlIGVudGlyZQotCSoqIGJpdG1hcCBpcyBhbGxvY2F0ZWQgaW4gc2V2ZXJhbCBjaHVua3MgYmVjYXVzZSBrbWFsbG9jCi0JKiogaGFzIHJlc3RyaWN0aW9ucyByZWdhcmRpbmcgdGhlIGFsbG93ZWQgc2l6ZSBwZXIga21hbGxvYwotCSovCi0JY293ZGV2LT5tYXBjb3VudCA9IChjb3dkZXYtPm1hcHNpemUrTUFQQ0hVTktTWi0xKS9NQVBDSFVOS1NaOwotCi0JLyoKLQkqKiB0aGUgc2l6ZSBvZiBldmVyeSBiaXRtYXAgY2h1bmsgd2lsbCBiZSBNQVBDSFVOS1NaIGJ5dGVzLCBleGNlcHQgZm9yCi0JKiogdGhlIGxhc3QgYml0bWFwIGNodW5rOiBjYWxjdWxhdGUgcmVtYWluaW5nIHNpemUgZm9yIHRoaXMgY2h1bmsKLQkqLwotCWlmIChjb3dkZXYtPm1hcHNpemUgJSBNQVBDSFVOS1NaID09IDApCi0JCWNvd2Rldi0+bWFwcmVtYWluID0gTUFQQ0hVTktTWjsKLQllbHNlCi0JCWNvd2Rldi0+bWFwcmVtYWluID0gY293ZGV2LT5tYXBzaXplICUgTUFQQ0hVTktTWjsKLQotCS8qCi0JKiogYWxsb2NhdGUgc3BhY2UgdG8gc3RvcmUgYWxsIHBvaW50ZXJzIGZvciB0aGUgYml0bWFwLWNodW5rcwotCSoqIChpbml0aWFsaXplIGFyZWEgd2l0aCB6ZXJvZXMgdG8gYWxsb3cgcHJvcGVyIHVuZG8pCi0JKi8KLQljb3dkZXYtPm1hcGNhY2hlID0ga21hbGxvYyhjb3dkZXYtPm1hcGNvdW50ICogc2l6ZW9mKGNoYXIgKiksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghY293ZGV2LT5tYXBjYWNoZSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gY2FuIG5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgYml0bWFwIHB0cnNcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY293ZGV2LT5tYXBjYWNoZSwgMCwgY293ZGV2LT5tYXBjb3VudCAqIHNpemVvZihjaGFyICopKTsKLQotCS8qCi0JKiogYWxsb2NhdGUgc3BhY2UgdG8gc3RvcmUgdGhlIGJpdG1hcC1jaHVua3MgdGhlbXNlbHZlcwotCSovCi0JZm9yIChpPTA7IGkgPCBjb3dkZXYtPm1hcGNvdW50OyBpKyspIHsKLQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCSooY293ZGV2LT5tYXBjYWNoZStpKSA9IGttYWxsb2MoTUFQQ0hVTktTWiwgR0ZQX0tFUk5FTCk7Ci0JCWVsc2UKLQkJCSooY293ZGV2LT5tYXBjYWNoZStpKSA9IGttYWxsb2MoY293ZGV2LT5tYXByZW1haW4sCi0JCQkJCQkgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKLQotCQlpZiAoKihjb3dkZXYtPm1hcGNhY2hlK2kpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtIG5vIHNwYWNlIGZvciBiaXRtYXBjaHVuayAlbGQiCi0JCQkJCSIgdG90bWFwc3o9JWxkLCBtYXBjbnQ9JWQgbWFwdW5pdD0lZFxuIiwKLQkJCQkJaSwgY293ZGV2LT5tYXBzaXplLCBjb3dkZXYtPm1hcGNvdW50LAotCQkJCQlNQVBVTklUKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlYWQgYml0bWFwIGZyb20gY293Li4uLlxuIik7Ci0KLQkvKgotCSoqIHJlYWQgdGhlIGVudGlyZSBiaXRtYXAgZnJvbSB0aGUgY293ZmlsZSBpbnRvIHRoZSBpbi1tZW1vcnkgY2FjaGU7Ci0JKiogY291bnQgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBhcmUgaW4gdXNlIGFscmVhZHkKLQkqKiAoc3RhdGlzdGljYWwgcHVycG9zZXMpCi0JKi8KLQlmb3IgKGk9MCwgb2Zmc2V0PU1BUFVOSVQ7IGkgPCBjb3dkZXYtPm1hcGNvdW50OwotCQkJCQlpKyssIG9mZnNldCs9TUFQQ0hVTktTWikgewotCQl1bnNpZ25lZCBsb25nCW51bWJ5dGVzOwotCi0JCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQkvKgotCQkJKiogZnVsbCBiaXRtYXAgY2h1bmsKLQkJCSovCi0JCQludW1ieXRlcyA9IE1BUENIVU5LU1o7Ci0JCWVsc2UKLQkJCS8qCi0JCQkqKiBsYXN0IGJpdG1hcCBjaHVuazogbWlnaHQgYmUgcGFydGx5IGZpbGxlZAotCQkJKi8KLQkJCW51bWJ5dGVzID0gY293ZGV2LT5tYXByZW1haW47Ci0KLQkJY293bG9fcmVhZGNvd3Jhdyhjb3dkZXYsICooY293ZGV2LT5tYXBjYWNoZStpKSwKLQkJCQkJCQludW1ieXRlcywgb2Zmc2V0KTsKLQl9Ci0KLQkvKgotCSoqIGlmIHRoZSBjb3dmaWxlIHdhcyBkaXJ0eSBhbmQgYXV0b21hdGljIHJlY292ZXJ5IGlzIHJlcXVpcmVkLAotCSoqIHJlY29uc3RydWN0IGEgcHJvcGVyIGJpdG1hcCBpbiBtZW1vcnkgbm93Ci0JKi8KLQlpZiAoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZwlibG9ja251bTsKLQkJY2hhcgkJCWRhdGFidWZbTUFQVU5JVF07Ci0JCXVuc2lnbmVkIGxvbmcJCW1hcG51bSwgbWFwYnl0ZSwgbWFwYml0OwotCi0JCXByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIHJlY292ZXIgZGlydHkgY293ZmlsZSAlcy4uLi5cbiIsCi0JCQkJCQkJY293Zik7Ci0KLQkJLyoKLQkJKiogcmVhZCBhbGwgZGF0YSBibG9ja3MKLQkJKi8KLQkJZm9yIChibG9ja251bT0wLCBydj0xLCBvZmZzZXQ9MDsKLQkJCWNvd2xvX3JlYWRjb3coY293ZGV2LCBkYXRhYnVmLCBNQVBVTklULCBvZmZzZXQpID4gMDsKLQkJCWJsb2NrbnVtKyssIG9mZnNldCArPSBNQVBVTklUKSB7Ci0KLQkJCS8qCi0JCQkqKiBpZiB0aGlzIGRhdGFibG9jayBjb250YWlucyByZWFsIGRhdGEgKG5vdCBiaW5hcnkKLQkJCSoqIHplcm9lcyksIHNldCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGJpdG1hcAotCQkJKi8KLQkJCWlmICggbWVtY21wKGRhdGFidWYsIGFsbHplcm9lcywgTUFQVU5JVCkgPT0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnVtKTsKLQkJCW1hcGJ5dGUgPSBDQUxDQllURShibG9ja251bSk7Ci0JCQltYXBiaXQgID0gQ0FMQ0JJVCAoYmxvY2tudW0pOwotCi0JCQkqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK21hcGJ5dGUpIHw9ICgxPDxtYXBiaXQpOwotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gY293ZmlsZSByZWNvdmVyeSBjb21wbGV0ZWRcbiIpOwotCX0KLQotCS8qCi0JKiogY291bnQgYWxsIGJpdHMgc2V0IGluIHRoZSBiaXRtYXBzIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcwotCSovCi0JZm9yIChpPTAsIGNvd2Rldi0+bnJjb3dibG9ja3MgPSAwOyBpIDwgY293ZGV2LT5tYXBjb3VudDsgaSsrKSB7Ci0JCWxvbmcJbnVtYnl0ZXM7Ci0JCWNoYXIJKnA7Ci0KLQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCW51bWJ5dGVzID0gTUFQQ0hVTktTWjsKLQkJZWxzZQotCQkJbnVtYnl0ZXMgPSBjb3dkZXYtPm1hcHJlbWFpbjsKLQotCQlwID0gKihjb3dkZXYtPm1hcGNhY2hlK2kpOwotCi0JCWZvciAobnVtYnl0ZXMtLTsgbnVtYnl0ZXMgPj0gMDsgbnVtYnl0ZXMtLSwgcCsrKSB7Ci0JCQkvKgotCQkJKiogZm9yIG9ubHkgZWlnaHQgY2hlY2tzIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uCi0JCQkqKiBpcyBmYXN0ZXIgdGhhbiBhIGxvb3AtY29uc3RydWN0aW9uCi0JCQkqLwotCQkJaWYgKCgqcCkgJiAweDAxKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MDIpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgwNCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDA4KQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MTApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgyMCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDQwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4ODApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJfQotCX0KLQotCS8qCi0JKiogY29uc2lzdGVuY3ktY2hlY2sgZm9yIG51bWJlciBvZiBiaXRzIHNldCBpbiBiaXRtYXAKLQkqLwotCWlmICggIShjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkpICYmCi0JICAgIChjb3dkZXYtPmNvd2hlYWQtPmNvd3VzZWQgIT0gY293ZGV2LT5ucmNvd2Jsb2NrcykgKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtIGluY29uc2lzdGVudCBjb3dmaWxlIGFkbWlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIHVuZG8gbWVtb3J5IGFsbG9jcyBhbmQgZmlsZSBvcGVucyBpc3N1ZWQgc28gZmFyCi0qKiByZWxhdGVkIHRvIHRoZSBjb3dmaWxlCi0qLwotc3RhdGljIHZvaWQKLWNvd2xvX3VuZG9fb3BlbmNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpbnQJaTsKLQotCWlmIChjb3dkZXYtPm1hcGNhY2hlKSB7Ci0JCWZvciAoaT0wOyBpIDwgY293ZGV2LT5tYXBjb3VudDsgaSsrKSB7Ci0JCQlpZiAoKihjb3dkZXYtPm1hcGNhY2hlK2kpICE9IE5VTEwpCi0JCQkJa2ZyZWUoICooY293ZGV2LT5tYXBjYWNoZStpKSApOwotCQl9Ci0KLQkJa2ZyZWUoY293ZGV2LT5tYXBjYWNoZSk7Ci0JfQotCi0JaWYgKGNvd2Rldi0+Y293aGVhZCkKLQkJa2ZyZWUoY293ZGV2LT5jb3doZWFkKTsKLQotCWlmICggKGNvd2Rldi0+c3RhdGUgJiBDT1dDT1dPUEVOKSAmJiAoY293ZGV2LT5jb3dmcCkgKQotICAJCWZpbHBfY2xvc2UoY293ZGV2LT5jb3dmcCwgMCk7Ci0KLQkvKgotCSoqIG1hcmsgY293ZmlsZSBjbG9zZWQKLQkqLwotCWNvd2Rldi0+c3RhdGUgJj0gfkNPV0NPV09QRU47Ci19Ci0KLS8qCi0qKiBmbHVzaCB0aGUgZW50aXJlIGJpdG1hcCBhbmQgdGhlIGNvd2hlYWQgKGNsZWFuKSB0byB0aGUgY293ZmlsZQotKioKLSoqIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvd2RldmljZXMtbG9jayBzZXQKLSovCi1zdGF0aWMgdm9pZAotY293bG9fc3luYyh2b2lkKQotewotCWludAkJCWksIG1pbm9yOwotCWxvZmZfdAkJCW9mZnNldDsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQotCWZvciAobWlub3I9MDsgbWlub3IgPCBtYXhjb3dzOyAgbWlub3IrKykgewotCQljb3dkZXYgPSBjb3dkZXZhbGxbbWlub3JdOwotCQlpZiAoICEgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pICkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoaT0wLCBvZmZzZXQ9TUFQVU5JVDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7Ci0JCQkJCWkrKywgb2Zmc2V0ICs9IE1BUENIVU5LU1opIHsKLQkJCXVuc2lnbmVkIGxvbmcJbnVtYnl0ZXM7Ci0KLQkJCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQkJLyoKLQkJCQkqKiBmdWxsIGJpdG1hcCBjaHVuawotCQkJCSovCi0JCQkJbnVtYnl0ZXMgPSBNQVBDSFVOS1NaOwotCQkJZWxzZQotCQkJCS8qCi0JCQkJKiogbGFzdCBiaXRtYXAgY2h1bms6IG1pZ2h0IGJlIHBhcnRseSBmaWxsZWQKLQkJCQkqLwotCQkJCW51bWJ5dGVzID0gY293ZGV2LT5tYXByZW1haW47Ci0KLQkJCURFQlVHUChEQ09XCi0JCQkgICAgICAgImNvd2xvb3AgLSBmbHVzaGluZyBiaXRtYXAgJTJkICglM2xkIEtiKVxuIiwKLQkJCQkJCQlpLCBudW1ieXRlcy8xMDI0KTsKLQotCQkJaWYgKGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgKihjb3dkZXYtPm1hcGNhY2hlK2kpLAotCQkJCQkJbnVtYnl0ZXMsIG9mZnNldCkgPCBudW1ieXRlcykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJKiogZmx1c2ggY2xlYW4gdXAtdG8tZGF0ZSBjb3doZWFkIHRvIGNvd2ZpbGUKLQkJKi8KLQkJY293ZGV2LT5jb3doZWFkLT5jb3d1c2VkCSA9IGNvd2Rldi0+bnJjb3dibG9ja3M7Ci0JCWNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MJCSY9IH5DT1dESVJUWTsKLQotCQlERUJVR1AoRENPVyAiY293bG9vcCAtIGZsdXNoaW5nIGNvd2hlYWQgKCUzZCBLYilcbiIsCi0JCQkJCQkJTUFQVU5JVC8xMDI0KTsKLQotCQljb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIGNvd2Rldi0+Y293aGVhZCwgTUFQVU5JVCwgKGxvZmZfdCkgMCk7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNb2R1bGUgbG9hZGluZy91bmxvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBjYWxsZWQgZHVyaW5nIGluc21vZC9tb2Rwcm9iZQotKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1jb3dsb19pbml0X21vZHVsZSh2b2lkKQotewotCWludAlydjsKLQlpbnQJbWlub3IsIHVwdG9jb3dzOwotCi0gICAgICAgIHJldmlzaW9uW3NpemVvZiByZXZpc2lvbiAtIDNdID0gJ1wwJzsKLQotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSAoQykgMjAwOSBBVENvbXB1dGluZy5ubCAtIHZlcnNpb246ICVzXG4iLCAmcmV2aXNpb25bMTFdKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gaW5mbzogd3d3LkFUQ29tcHV0aW5nLm5sL2Nvd2xvb3BcbiIpOwotCi0JbWVtc2V0KGFsbHplcm9lcywgMCwgTUFQVU5JVCk7Ci0KLQkvKgotCSoqIFNldHVwIGFkbWluaXN0cmF0aW9uIGZvciBhbGwgcG9zc2libGUgY293ZGV2aWNlcy4KLSAgICAgICAgKiogTm90ZSB0aGF0IHRoZWlyIG1pbm9yIG51bWJlcnMgZ28gZnJvbSAwIHRvIE1BWENPV1MtMSBpbmNsdXNpdmUKLSAgICAgICAgKiogYW5kIG1pbm9yID09IE1BWENPV1MtMSBpcyByZXNlcnZlZCBmb3IgdGhlIGNvbnRyb2wgZGV2aWNlLgotCSovCi0JaWYgKChtYXhjb3dzIDwgMSkgfHwgKG1heGNvd3MgPiBNQVhDT1dTKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIG1heGNvd3MgZXhjZWVkcyBtYXhpbXVtIG9mICVkXG4iLCBNQVhDT1dTKTsKLQotICAgICAgICAgICAgICAgIG1heGNvd3MgPSBERkxDT1dTOwotICAgICAgICB9Ci0KLQkvKiBhbGxvY2F0ZSByb29tIGZvciBhIHRhYmxlIHdpdGggYSBwb2ludGVyIHRvIGVhY2ggY293bG9vcF9kZXZpY2U6ICovCi0gICAgICAgIGlmICggKGNvd2RldmFsbCA9IGttYWxsb2MobWF4Y293cyAqIHNpemVvZihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiksCi0JCQkJCQkJR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICJjb3dsb29wIC0gY2FuIG5vdCBhbGxvYyB0YWJsZSBmb3IgJWQgZGV2c1xuIiwgbWF4Y293cyk7Ci0JCXVwdG9jb3dzID0gMDsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0JbWVtc2V0KGNvd2RldmFsbCwgMCwgbWF4Y293cyAqIHNpemVvZihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKikpOwotCS8qIHRoZW4gaG9vayBhbiBhY3R1YWwgY293bG9vcF9kZXZpY2Ugc3RydWN0IHRvIGVhY2ggcG9pbnRlcjogKi8KLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQlpZiAoKGNvd2RldmFsbFttaW5vcl0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY293bG9vcF9kZXZpY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAgICAiY293bG9vcCAtIGNhbiBub3QgYWxsb2MgYWRtaW4tc3RydWN0IGZvciBkZXYgbm8gJWRcbiIsIG1pbm9yKTsKLQotCQkJdXB0b2Nvd3MgPSBtaW5vcjsgLyogdGhpcyBpcyBob3cgZmFyIHdlIGdvdC4uLi4gKi8KLQkJCXJ2ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0gICAgICAgIAltZW1zZXQoY293ZGV2YWxsW21pbm9yXSwgMCwgc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSkpOwotCX0KLQl1cHRvY293cyA9IG1heGNvd3M7IC8qIHdlIGdvdCBhbGwgZGV2aWNlcyAqLwotCi0Jc2VtYV9pbml0KCZjb3dkZXZsb2NrLCAxKTsKLQotCS8qCi0JKiogcmVnaXN0ZXIgY293bG9vcCBtb2R1bGUKLQkqLwotCWlmICggcmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJjb3dsb29wIC0gdW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgY293bG9vcFxuIiwgQ09XTUFKT1IpOwotCQlydiA9IC1FSU87Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQotCS8qCi0JKiogY3JlYXRlIGEgZGlyZWN0b3J5IGJlbG93IC9wcm9jIHRvIGFsbG9jYXRlIGEgZmlsZQotCSoqIGZvciBlYWNoIGNvd2RldmljZSB0aGF0IGlzIGFsbG9jYXRlZCBsYXRlciBvbgotCSovCi0JY293bG9fcHJvY2RpciA9IHByb2NfbWtkaXIoImNvdyIsIE5VTEwpOwotCi0JLyoKLQkqKiBjaGVjayBpZiBhIGNvd2RldmljZSBoYXMgdG8gYmUgb3BlbmVkIGR1cmluZyBpbnNtb2QvbW9kcHJvYmU7Ci0JKiogdHdvIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHNwZWNpZmllZCB0aGVuOiByZG9maWxlPSBhbmQgY293ZmlsZT0KLQkqLwotCWlmKCAocmRvZmlsZVswXSAhPSAnXDAnKSAmJiAoY293ZmlsZVswXSAhPSAnXDAnKSApIHsKLQkJY2hhcgkqcG8gPSBvcHRpb247Ci0JCWludAl3YW50cmVjb3ZlciA9IDA7Ci0KLQkJLyoKLQkJKiogY2hlY2sgaWYgYXV0b21hdGljIHJlY292ZXJ5IGlzIHdhbnRlZAotCQkqLwotCQl3aGlsZSAoKnBvKSB7Ci0JCQlpZiAoKnBvID09ICdyJykgewotCQkJCXdhbnRyZWNvdmVyID0gMTsKLQkJCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCXBvKys7Ci0JCX0KLQotCQkvKgotCQkqKiBvcGVuIG5ldyBjb3dkZXZpY2Ugd2l0aCBtaW5vciBudW1iZXIgMAotCQkqLwotCQlpZiAoIChydiA9IGNvd2xvX29wZW5wYWlyKHJkb2ZpbGUsIGNvd2ZpbGUsIHdhbnRyZWNvdmVyLCAwKSkpIHsKLQkJCXJlbW92ZV9wcm9jX2VudHJ5KCJjb3ciLCBOVUxMKTsKLQkJCXVucmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSk7Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotICAgICAgICB9IGVsc2UgewotCQkvKgotCQkqKiBjaGVjayBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaGFzIGJlZW4gc3BlY2lmaWVkCi0JCSovCi0JCWlmKCAocmRvZmlsZVswXSAhPSAnXDAnKSB8fCAoY293ZmlsZVswXSAhPSAnXDAnKSApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gb25seSBvbmUgZmlsZW5hbWUgc3BlY2lmaWVkXG4iKTsKLQkJCXJlbW92ZV9wcm9jX2VudHJ5KCJjb3ciLCBOVUxMKTsKLQkJCXVucmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSk7Ci0JCQlydiA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotCX0KLQotCS8qCi0JKiogYWxsb2NhdGUgZmFrZSBkaXNrIGFzIGNvbnRyb2wgY2hhbm5lbCB0byBoYW5kbGUgdGhlIHJlcXVlc3RzCi0JKiogdG8gYWN0aXZhdGUgYW5kIGRlYWN0aXZhdGUgY293ZGV2aWNlcyBkeW5hbWljYWxseQotCSovCi0JaWYgKCEoY293Y3RsZ2QgPSBhbGxvY19kaXNrKDEpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuYWJsZSB0byBhbGxvY19kaXNrIGZvciBjb3djdGxcbiIpOwotCi0JCXJlbW92ZV9wcm9jX2VudHJ5KCJjb3ciLCBOVUxMKTsKLQkJKHZvaWQpIGNvd2xvX2Nsb3NlcGFpcihjb3dkZXZhbGxbMF0pOwotCQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCQlydiA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQotCXNwaW5fbG9ja19pbml0KCZjb3djdGxycWxvY2spOwotCWNvd2N0bGdkLT5tYWpvciAgICAgICAgPSBDT1dNQUpPUjsKLQljb3djdGxnZC0+Zmlyc3RfbWlub3IgID0gQ09XQ1RMOwotCWNvd2N0bGdkLT5taW5vcnMgICAgICAgPSAxOwotCWNvd2N0bGdkLT5mb3BzICAgICAgICAgPSAmY293bG9fZm9wczsKLQljb3djdGxnZC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQkvKiB0aGUgZGV2aWNlIGhhcyBjYXBhY2l0eSAwLCBzbyB0aGVyZSB3aWxsIGJlIG5vIHEtcmVxdWVzdHMgKi8KLQljb3djdGxnZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShOVUxMLCAmY293Y3RscnFsb2NrKTsKLQlzcHJpbnRmKGNvd2N0bGdkLT5kaXNrX25hbWUsICJjb3djdGwiKTsKLQlzZXRfY2FwYWNpdHkoY293Y3RsZ2QsIDApOwotCi0JYWRkX2Rpc2soY293Y3RsZ2QpOwotCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIG51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXM6ICVkXG4iLAotCQkJCQkJCQltYXhjb3dzKTsKLQlpZiAocmRvZmlsZVswXSAhPSAnXDAnKSB7Ci0JICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGluaXRpYWxpemVkIG9uIHJkb2ZpbGU9JXNcbiIsCi0JCQkJCQkJCXJkb2ZpbGUpOwotCX0gZWxzZSB7Ci0JICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGluaXRpYWxpemVkIHdpdGhvdXQgcmRvZmlsZSB5ZXRcbiIpOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyb3Jfb3V0OgotCWZvciAobWlub3I9MDsgbWlub3IgPCB1cHRvY293cyA7IG1pbm9yKyspIHsKLQkJa2ZyZWUoY293ZGV2YWxsW21pbm9yXSk7Ci0JfQotCWtmcmVlKGNvd2RldmFsbCk7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogY2FsbGVkIGR1cmluZyBybW1vZAotKi8KLXN0YXRpYyB2b2lkIF9fZXhpdAotY293bG9fY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpbnQJbWlub3I7Ci0KLQkvKgotCSoqIGZsdXNoIGJpdG1hcHMgYW5kIGNvd2hlYWRzIHRvIHRoZSBjb3dmaWxlcwotCSovCi0JZG93bigmY293ZGV2bG9jayk7Ci0JY293bG9fc3luYygpOwotCXVwKCZjb3dkZXZsb2NrKTsKLQotCS8qCi0JKiogY2xvc2UgYWxsIGNvd2RldmljZXMKLQkqLwotCWZvciAobWlub3I9MDsgbWlub3IgPCBtYXhjb3dzOyAgbWlub3IrKykKLQkJKHZvaWQpIGNvd2xvX2Nsb3NlcGFpcihjb3dkZXZhbGxbbWlub3JdKTsKLQotCXVucmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSk7Ci0KLQkvKgotCSoqIGdldCByaWQgb2YgL3Byb2MvY293IGFuZCB1bnJlZ2lzdGVyIHRoZSBkcml2ZXIKLQkqLwotCXJlbW92ZV9wcm9jX2VudHJ5KCJjb3ciLCBOVUxMKTsKLQotCWZvciAobWlub3IgPSAwOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQkJa2ZyZWUoY293ZGV2YWxsW21pbm9yXSk7Ci0JfQotCWtmcmVlKGNvd2RldmFsbCk7Ci0KLQlkZWxfZ2VuZGlzayhjb3djdGxnZCk7ICAvKiByZXZlcnQgdGhlIGFsbG9jX2Rpc2soKSAqLwotCXB1dF9kaXNrICAgKGNvd2N0bGdkKTsgIC8qIHJldmVydCB0aGUgYWRkX2Rpc2soKSAgICovCi0JYmxrX2NsZWFudXBfcXVldWUoY293Y3RsZ2QtPnF1ZXVlKTsgLyogY2xlYW51cCB0aGUgZW1wdHkgcXVldWUgKi8KLQotCXByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIHVubG9hZGVkXG4iKTsKLX0KLQotbW9kdWxlX2luaXQoY293bG9faW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoY293bG9fY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5oIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmQ0YTM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0qKiBETyBOT1QgTU9ESUZZIFRIRVNFIFZBTFVFUyAod291bGQgbWFrZSBvbGQgY293ZmlsZXMgdW51c2FibGUpCi0qLwotI2RlZmluZQlNQVBVTklUCQkxMDI0CQkvKiBibG9ja3NpemUgZm9yIGJpdCBpbiBiaXRtYXAgICAgICAgKi8KLSNkZWZpbmUJTVVTSElGVAkJMTAJCS8qIGJpdHNoaWZ0ICBmb3IgYml0IGluIGJpdG1hcCAgICAgICAqLwotI2RlZmluZQlNVU1BU0sJCTB4M2ZmCQkvKiBiaXRtYXNrICAgZm9yIGJpdCBpbiBiaXRtYXAgICAgICAgKi8KLQotI2RlZmluZQlDT1dNQUdJQwkweDU3NGY0MzdmCS8qIGJ5dGUtc3dhcHBlZCAnN2YgQyBPIFcnICAgICAgICAgICAqLwotI2RlZmluZQlDT1dESVJUWQkweDAxCi0jZGVmaW5lCUNPV1BBQ0tFRAkweDAyCi0jZGVmaW5lCUNPV1ZFUlNJT04JMQotCi1zdHJ1Y3QgY293aGVhZAotewotCWludAkJbWFnaWM7CQkvKiBpZGVudGlmaWVzIGEgY293ZmlsZSAgICAgICAgICAgICAgKi8KLQlzaG9ydAkJdmVyc2lvbjsJLyogdmVyc2lvbiBvZiBjb3doZWFkICAgICAgICAgICAgICAgICovCi0Jc2hvcnQJCWZsYWdzOyAgICAJLyogZmxhZ3MgaW5kaWNhdGluZyBzdGF0dXMgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwltYXB1bml0OwkvKiBibG9ja3NpemUgcGVyIGJpdCBpbiBiaXRtYXAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCW1hcHNpemU7CS8qIHRvdGFsIHNpemUgb2YgYml0bWFwIChieXRlcykgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJZG9mZnNldDsJLyogc3RhcnQtb2Zmc2V0IGRhdGFibG9ja3MgaW4gY293ICAgICovCi0JdW5zaWduZWQgbG9uZwlyZG9ibG9ja3M7CS8qIHNpemUgb2YgcmVsYXRlZCByZWFkLW9ubHkgZmlsZSAgICAqLwotCXVuc2lnbmVkIGxvbmcJcmRvZmluZ2VycHJpbnQ7CS8qIGZpbmdlcnByaW50IG9mIHJlYWQtb25seSBmaWxlICAgICAqLwotCXVuc2lnbmVkIGxvbmcJY293dXNlZDsJLyogbnVtYmVyIG9mIGRhdGFibG9ja3MgdXNlZCBpbiBjb3cgICovCi19OwotCi0jZGVmaW5lIENPV0RFVkRJUgkiL2Rldi9jb3cvIgotI2RlZmluZSBDT1dERVZJQ0UJQ09XREVWRElSICIlbGQiCi0jZGVmaW5lIENPV0NPTlRST0wJQ09XREVWRElSICJjdGwiCi0KLSNkZWZpbmUgTUFYQ09XUwkJMTAyNAotI2RlZmluZSBDT1dDVEwJCShNQVhDT1dTLTEpCS8qIG1pbm9yIG51bWJlciBvZiAvZGV2L2Nvdy9jdGwgICAgICovCi0KLSNkZWZpbmUgQ09XUFJPQ0RJUgkiL3Byb2MvY293LyIKLSNkZWZpbmUgQ09XUFJPQ0ZJTEUJQ09XUFJPQ0RJUiAiJWQiCi0KLS8qCi0qKiBpb2N0bCByZWxhdGVkIHN0dWZmCi0qLwotI2RlZmluZSBBTllERVYJCSgodW5zaWduZWQgbG9uZyktMSkKLQotc3RydWN0IGNvd3BhaXIKLXsKLQl1bnNpZ25lZCBjaGFyCSpyZG9maWxlOwkvKiBwYXRobmFtZSBvZiB0aGUgcmRvZmlsZSAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBjaGFyCSpjb3dmaWxlOwkvKiBwYXRobmFtZSBvZiB0aGUgY293ZmlsZSAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBzaG9ydAlyZG9mbGVuOwkvKiBsZW5ndGggb2YgcmRvZmlsZSBwYXRobmFtZSAgICAgICAgKi8KLQl1bnNpZ25lZCBzaG9ydAljb3dmbGVuOwkvKiBsZW5ndGggb2YgY293ZmlsZSBwYXRobmFtZSAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWRldmljZTsJCS8qIHJlcXVlc3RlZC9yZXR1cm5lZCBkZXZpY2UgbnVtYmVyICAqLwotfTsKLQotc3RydWN0IGNvd3dhdGNoCi17Ci0JaW50ICAgICAgCWZsYWdzOwkJLyogcmVxdWVzdCBmbGFncyAgICAgICAgICAgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXZpY2U7CQkvKiByZXF1ZXN0ZWQgZGV2aWNlIG51bWJlciAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCXRocmVzaG9sZDsJLyogY29udGludWUgaWYgZnJlZSBLYiA8IHRocmVzaG9sZCAgICovCi0JdW5zaWduZWQgbG9uZwl0b3RhbGtiOwkvKiByZXQ6IHRvdGFsIGZpbGVzeXN0ZW0gc2l6ZSAoS2IpICAgKi8KLQl1bnNpZ25lZCBsb25nCWF2YWlsa2I7CS8qIHJldDogZnJlZSAgZmlsZXN5c3RlbSBzaXplIChLYikgICAqLwotfTsKLQotI2RlZmluZQlXQVRDSFdBSVQJMHgwMQkJLyogYmxvY2sgdW50aWwgdGhyZXNob2xkIHJlYWNoZWQgICAgICovCi0KLSNkZWZpbmUJQ09XU1lOQwkJX0lPICAoJ0MnLCAxKQotI2RlZmluZQlDT1dNS1BBSVIJX0lPVyAoJ0MnLCAyLCBzdHJ1Y3QgY293cGFpcikKLSNkZWZpbmUJQ09XUk1QQUlSCV9JT1cgKCdDJywgMywgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUJQ09XV0FUQ0gJX0lPVyAoJ0MnLCA0LCBzdHJ1Y3QgY293d2F0Y2gpCi0jZGVmaW5lCUNPV0NMT1NFCV9JT1cgKCdDJywgNSwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUJQ09XUkRPUEVOCV9JT1cgKCdDJywgNiwgdW5zaWduZWQgbG9uZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwppbmRleCBlZTE2MDEwLi5jMjRlNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBxLT5xdWV1ZWRhdGE7CiAJaW50IGVyciA9IC1FSU87CiAKLQlpZiAoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSAmJiAhcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKSB7CisJaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIWJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7CiAJCS8qCiAJCSAqIFRoaXMgaXMgYSBkaXJ0eV5XbmljZSBoYWNrLCBidXQgaWYgd2UgY29tcGxldGUgdGhpcwogCQkgKiBvcGVyYXRpb24gd2l0aCAtRU9QTk9UU1VQUCBsaWtlIGludGVuZGVkLCBYRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCmluZGV4IDYyOTRkMzguLjJjM2Q2NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiBleHRlcm4gaW5saW5lIHZvaWQgYWRkXzEwYml0KHUzMiAqdiwgaW50IG4pCiB7Ci0JKnYgPSBJTkRFWDEwKCp2ICsgbik7CisJKnYgPSBJTkRFWDEwKCp2ICsgbikgfCAoKnYgJiBFVF9ETUExMF9XUkFQKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IDhmMmU5MWYuLjEwZTIxZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTExNzcsMTIgKzExNzcsMjAgQEAKIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKIHsKLQl1MzIgdiA9ICpmYnI7Ci0JYWRkXzEwYml0KCZ2LCAxKTsKLQlpZiAodiA+IGxpbWl0KQotCQl2ID0gKCpmYnIgJiB+RVRfRE1BMTBfTUFTSykgXiBFVF9ETUExMF9XUkFQOwotCSpmYnIgPSB2OwotCXJldHVybiB2OworICAgICAgICB1MzIgdiA9ICpmYnI7CisgICAgICAgIHYrKzsKKyAgICAgICAgLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQorICAgICAgICAgICB3b3JrcyBiZWNhdXNlIDEwMjMrKyBpcyAxMDI0IHdoaWNoIG1lYW5zIHRoZSBpZiBjb25kaXRpb24gaXMgbm90CisgICAgICAgICAgIHRha2VuIGJ1dCB0aGUgY2Fycnkgb2YgdGhlIGJpdCBpbnRvIHRoZSB3cmFwIGJpdCB0b2dnbGVzIHRoZSB3cmFwCisgICAgICAgICAgIHZhbHVlIGNvcnJlY3RseSAqLworICAgICAgICBpZiAoKHYgJiBFVF9ETUExMF9NQVNLKSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgdiAmPSB+RVRfRE1BMTBfTUFTSzsKKyAgICAgICAgICAgICAgICB2IF49IEVUX0RNQTEwX1dSQVA7CisgICAgICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSAxMDIzIGNhc2UgKi8KKyAgICAgICAgdiAmPSAoRVRfRE1BMTBfTUFTS3xFVF9ETUExMF9XUkFQKTsKKyAgICAgICAgKmZiciA9IHY7CisgICAgICAgIHJldHVybiB2OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsTWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKaW5kZXggYTgzOWQ4Zi4uZmE5NzNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX0NIQU5ORUxfTUdNVF9IXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgogI2luY2x1ZGUgIlZtYnVzQ2hhbm5lbEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlZtYnVzUGFja2V0Rm9ybWF0LmgiCkBAIC01NCw3ICs1NSw3IEBACiAJQ2hhbm5lbE1lc3NhZ2VWaWV3UmFuZ2VSZW1vdmUJCT0gMTgsCiAjZW5kaWYKIAlDaGFubmVsTWVzc2FnZUNvdW50Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgewogCWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgTWVzc2FnZVR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKaW5kZXggMTYxMGI4NC4uZDM4NGMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpKSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCAmbGlzdEhlYWQpOworCQlsaXN0X21vdmVfdGFpbChuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0Lm5leHQsICZsaXN0SGVhZCk7CiAJCWlmICgrK2NvdW50ID09IHZteGZlcnBhZ2VQYWNrZXQtPlJhbmdlQ291bnQgKyAxKQogCQkJYnJlYWs7CiAJfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAKIAkJLyogUmV0dXJuIGl0IHRvIHRoZSBmcmVlbGlzdCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJZm9yIChpID0gY291bnQ7IGkgIT0gMDsgaS0tKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmbGlzdEhlYWQsCisJCQlsaXN0X21vdmVfdGFpbChsaXN0SGVhZC5uZXh0LAogCQkJCSAgICAgICAmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssCkBAIC0xMDg1LDggKzEwODUsNyBAQAogCX0KIAogCS8qIFJlbW92ZSB0aGUgMXN0IHBhY2tldCB0byByZXByZXNlbnQgdGhlIHhmZXIgcGFnZSBwYWNrZXQgaXRzZWxmICovCi0JeGZlcnBhZ2VQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IHhmZXJwYWdlX3BhY2tldCwKLQkJCQkgICAgTGlzdEVudHJ5KTsKKwl4ZmVycGFnZVBhY2tldCA9IChzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCWxpc3RfZGVsKCZ4ZmVycGFnZVBhY2tldC0+TGlzdEVudHJ5KTsKIAogCS8qIFRoaXMgaXMgaG93IG11Y2ggd2UgY2FuIHNhdGlzZnkgKi8KQEAgLTExMDIsOCArMTEwMSw3IEBACiAKIAkvKiBFYWNoIHJhbmdlIHJlcHJlc2VudHMgMSBSTkRJUyBwa3QgdGhhdCBjb250YWlucyAxIGV0aGVybmV0IGZyYW1lICovCiAJZm9yIChpID0gMDsgaSA8IChjb3VudCAtIDEpOyBpKyspIHsKLQkJbmV0dnNjUGFja2V0ID0gbGlzdF9lbnRyeSgmbGlzdEhlYWQsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0LAotCQkJCQkgIExpc3RFbnRyeSk7CisJCW5ldHZzY1BhY2tldCA9IChzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCopbGlzdEhlYWQubmV4dDsKIAkJbGlzdF9kZWwoJm5ldHZzY1BhY2tldC0+TGlzdEVudHJ5KTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBuZXR2c2MgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCmluZGV4IDRkMzkwYjIuLmRiZmJkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCkBAIC0xLDExICsxLDE3IEBACiBUT0RPOgogCS0gZml4IHJlbWFpbmluZyBjaGVja3BhdGNoIHdhcm5pbmdzIGFuZCBlcnJvcnMKKwktIHVzZSBvZiAvKiogd2hlbiBpdCBpcyBub3QgYSBrZXJuZWxkb2MgaGVhZGVyCiAJLSByZW1vdmUgUmluZ0J1ZmZlci5jIHRvIHVzIGluLWtlcm5lbCByaW5nYnVmZmVyIGZ1bmN0aW9ucyBpbnN0ZWFkLgogCS0gYXVkaXQgdGhlIHZtYnVzIHRvIHZlcmlmeSBpdCBpcyB3b3JraW5nIHByb3Blcmx5IHdpdGggdGhlCiAJICBkcml2ZXIgbW9kZWwKKwktIGNvbnZlcnQgdm1idXMgZHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcworICAgICAgICAgIHRvIGNvbnN0YW50LCBhLmsuYSB2bWJ1c19vcHMKIAktIHNlZSBpZiB0aGUgdm1idXMgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSBvdGhlciB2aXJ0dWFsIGJ1c3NlcwogCSAgaW4gdGhlIGtlcm5lbAogCS0gYXVkaXQgdGhlIG5ldHdvcmsgZHJpdmVyCisJICAtIHVzZSBleGlzdGluZyBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdCBpbiBuZXR3b3JrIGRldmljZQorCSAgLSBjaGVja2luZyBmb3IgY2FycmllciBpbnNpZGUgb3BlbiBpcyB3cm9uZywgbmV0d29yayBkZXZpY2UgQVBJCisgICAgICAgICAgICBjb25mdXNpb24/PwogCS0gYXVkaXQgdGhlIGJsb2NrIGRyaXZlcgogCS0gYXVkaXQgdGhlIHNjc2kgZHJpdmVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYwppbmRleCA4ZmU1NDNiLi4zYTQ3OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAppbmRleCA5NTA0NjA0Li5jZTA2NGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIF9PU0RfSF8KICNkZWZpbmUgX09TRF9IXwogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qIERlZmluZXMgKi8KICNkZWZpbmUgQUxJR05fVVAodmFsdWUsIGFsaWduKQkoKCh2YWx1ZSkgJiAoYWxpZ24tMSkpID8JCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCA1ODIzMThmLi44OTRlZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC01MDcsMTIgKzUwNywxMiBAQAogCiAJY2hpbGRfZGV2aWNlX29iaiA9ICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWNoaWxkX2RldmljZV9vYmotPmNvbnRleHQgPSBjb250ZXh0OwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsICZpbnN0YW5jZSwKKwltZW1jcHkoJmNoaWxkX2RldmljZV9vYmotPmRldmljZVR5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsIGluc3RhbmNlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsICZ0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgJmluc3RhbmNlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmNsYXNzX2lkLCB0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCiAJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIApAQCAtNTM3LDE4ICs1MzcsNyBAQAogCURQUklOVF9EQkcoVk1CVVNfRFJWLCAiY2hpbGQgZGV2aWNlICglcCkgcmVnaXN0ZXJpbmciLAogCQkgICBjaGlsZF9kZXZpY2VfY3R4KTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlZ2lzdGVyZWQgYWxyZWFkeSAqLwotCWlmIChzdHJsZW4oZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsCi0JCQkgICAiY2hpbGQgZGV2aWNlICglcCkgYWxyZWFkeSByZWdpc3RlcmVkIC0gYnVzaWQgJXMiLAotCQkJICAgY2hpbGRfZGV2aWNlX2N0eCwKLQkJCSAgIGRldl9uYW1lKCZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpKTsKLQotCQlyZXQgPSAtMTsKLQkJZ290byBDbGVhbnVwOwotCX0KLQotCS8qIFNldCB0aGUgZGV2aWNlIGJ1cyBpZC4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKXdpbGwgZmFpbC4gKi8KKwkvKiBTZXQgdGhlIGRldmljZSBuYW1lLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3RlcigpIHdpbGwgZmFpbC4gKi8KIAlkZXZfc2V0X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSwgInZtYnVzXzBfJWQiLAogCQkgICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZXZpY2VfbnVtKSk7CiAKQEAgLTU3Myw3ICs1NjIsNiBAQAogCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmVkIiwKIAkJCSAgICAmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAotQ2xlYW51cDoKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYyMyw4ICs2MTEsNiBAQAogc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7Ci0JaW50IGkgPSAwOwotCWludCBsZW4gPSAwOwogCWludCByZXQ7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKQEAgLTY0NCw4ICs2MzAsNiBAQAogCQkgICAgZGV2aWNlX2N0eC0+Y2xhc3NfaWQuZGF0YVsxNF0sCiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE1XSk7CiAKLQllbnYtPmVudnBfaWR4ID0gaTsKLQllbnYtPmJ1ZmxlbiA9IGxlbjsKIAlyZXQgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJWTUJVU19ERVZJQ0VfQ0xBU1NfR1VJRD17IgogCQkJICAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNjkxLDggKzY3NSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWVudi0+ZW52cFtlbnYtPmVudnBfaWR4XSA9IE5VTEw7Ci0KIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKaW5kZXggYmViOTlhNS4uNDU4NjY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBJSU8KIAl0cmlzdGF0ZSAiSW5kdXN0cmlhbCBJL08gc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFTMzkwCiAJLS0taGVscC0tLQogCSAgVGhlIGluZHVzdHJpYWwgSS9PIHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvcgogCSAgZHJpdmVycyBmb3IgbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgZW1iZWRkZWQgc2Vuc29ycyB1c2luZyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMWZhMThmMi4uNzY4ZjQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlICJpaW8uaCIKICNpbmNsdWRlICJ0cmlnZ2VyX2NvbnN1bWVyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L3RzbDI1NjEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCmluZGV4IGVhOGE1ZWYuLmZjMjEwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCkBAIC0yMzksMTAgKzIzOSw2IEBACiAJcmV0dXJuIHRzbDI1NjFfcG93ZXJkb3duKGNsaWVudCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjksIDB4MzksIDB4NDksIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHNsMjU2MV9pZFtdID0gewogCXsgInRzbDI1NjEiLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwppbmRleCBkNTQ5ZDA4Li5mNmNjMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgT1RVUwogCXRyaXN0YXRlICJBdGhlcm9zIE9UVVMgODAyLjExbiBVU0Igd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOXzgwMjExICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBNQUM4MDIxMQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zIDgwMi4xMW4gVVNCIGhhcmR3YXJlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKaW5kZXggOTExMWRjYi4uOGNjZmZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAl1c2VyX2J1Zl9ydW5uaW5nID0gTlVMTDsKIAloYXNoX3N0ciA9IE5VTEw7CiAJbm9kZV9wdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKLQl1c2VyX2J1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCsxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGVfcHRyIHx8ICF1c2VyX2J1ZikKIAkJZ290byBvdXQ7CiAKQEAgLTIwNyw2ICsyMDcsNyBAQAogCQlsaXN0X2FkZCgmKG5vZGVfcHRyLT5saXN0KSwgJihkZXYtPmhlYWQtPmxpc3QpKTsKIAkJbm9kZV9wdHIgPSBOVUxMOwogCX0gZWxzZSB7CisJCWNoYXIgKnRtcHU7CiAJCWlmICghY2FwX2RldmljZXNbMF0uaGVhZCB8fAogCQkJCWxpc3RfZW1wdHkoJihjYXBfZGV2aWNlc1swXS5oZWFkLT5saXN0KSkpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CkBAIC0yMTgsMTAgKzIxOSwxMCBAQAogCQkgKiBuZWVkIHRvIHNwbGl0IGl0IGFuZCBoYXNoICd1c2VyMUB1c2VyMicgdXNpbmcgJ3JhbmRvbXN0cmluZycKIAkJICogYXMgdGhlIGtleS4KIAkJICovCi0JCXVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKLQkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7Ci0JCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOwotCQlyYW5kX3N0ciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKwkJdG1wdSA9IHVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKKwkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7CisJCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ0bXB1LCAiQCIpOworCQlyYW5kX3N0ciA9IHRtcHU7CiAJCWlmICghc291cmNlX3VzZXIgfHwgIXRhcmdldF91c2VyIHx8ICFyYW5kX3N0cikgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjI5LDcgKzIzMCw4IEBACiAKIAkJLyogaGFzaCB0aGUgc3RyaW5nIHVzZXIxQHVzZXIyIHdpdGggcmFuZF9zdHIgYXMgdGhlIGtleSAqLwogCQlsZW4gPSBzdHJsZW4oc291cmNlX3VzZXIpICsgc3RybGVuKHRhcmdldF91c2VyKSArIDE7Ci0JCWhhc2hfc3RyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQkvKiBzcmMsIEAsIGxlbiwgXDAgKi8KKwkJaGFzaF9zdHIgPSBremFsbG9jKGxlbisxLCBHRlBfS0VSTkVMKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCBzb3VyY2VfdXNlcik7CiAJCXN0cmNhdChoYXNoX3N0ciwgIkAiKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCB0YXJnZXRfdXNlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGRkN2QzZmQuLjRjZTM5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0yMDcxLDExICsyMDcxLDE1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5cGFkX2VuYWJsZWQgJiYga2V5cGFkX2luaXRpYWxpemVkKQorCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJa2V5cGFkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKLQlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKQorCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJbGNkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKIAlwYXJwb3J0X3JlbGVhc2UocHBydCk7CiAJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKQEAgLTIyMTEsMTMgKzIyMTUsMTYgQEAKIAkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKIAogCWlmIChwcHJ0ICE9IE5VTEwpIHsKLQkJaWYgKGtleXBhZF9lbmFibGVkKQorCQlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKIAkJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCQl9CiAKIAkJaWYgKGxjZF9lbmFibGVkKSB7CiAJCQlwYW5lbF9sY2RfcHJpbnQoIlx4MGNMQ0QgZHJpdmVyICIgUEFORUxfVkVSU0lPTgogCQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKIAkJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOwogCQl9CiAKIAkJLyogVE9ETzogZnJlZSBhbGwgaW5wdXQgc2lnbmFscyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCmluZGV4IDBkMTExZGQuLjJlYjhlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJwb2NoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwppbmRleCA3ZjQ0ZTVlLi5lZmUzOGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMjg2MAogCXRyaXN0YXRlICJSYWxpbmsgMjg2MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMjg2MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCmluZGV4IGZiMTczNTUuLjg1N2ZmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKQEAgLTM2Myw2ICszNjMsOCBAQAogCVVMT05HCQkJU3dJZHggPSBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4OwogCiAJcFR4RCAgPSAoUFRYRF9TVFJVQykgcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOworCWlmICghcFR4RCkKKwkJcmV0dXJuIDA7CiAKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwppbmRleCA5ZDU4OWMyNC4uMDE5Y2M0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCiAKIElOVAlTaG93X1NTSURfUHJvYygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCBiMzk2YTliLi5lZDI3Yjg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKaW5kZXggNzY4NDFmNi4uYWVhNWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDI4NzAKIAl0cmlzdGF0ZSAiUmFsaW5rIDI4NzAvMzA3MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgeHg3MCB3aXJlbGVzcyBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwppbmRleCAyNTVlOGVhLi4yYjNmNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMzA5MAogCXRyaXN0YXRlICJSYWxpbmsgMzA5MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMzA5MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggNWJlMDcxNC4uM2U1MWU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0zNCw2ICszNCw3IEBACiAgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwppbmRleCBkMjI0MWVjLi45Yjk0YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgogCiBVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAyMzZlNDI3Li4yMDNjNzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxODdTRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxODdTRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMDEzYzNlMS4uNGM1ZDYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDEwICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDZmYmU0ODkuLjE4MzkyZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTE4OSwxMCArMTg5LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDU5YjJhYjQuLjMzNGU0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjgzOSwxNiArMjgzOSwxMiBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0yODY5LDcgKzI4NjUsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggOGQ4YmRkMC4uYTA4Yjk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTMzMSwxMiArMzMxLDEwIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KIAotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTQ4Myw3ICs0ODEsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHgsIHJldCA9IDA7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC01MzksMTUgKzUzNywxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNTU4LDEwICs1NTMsOCBAQAogLy8JcHJpbnRrKCI4LTA5LTA4LTk9PT09PT4lcywgYWxnIG5hbWU6JXNcbiIsX19mdW5jX18sIGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNTgxLDcgKzU3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwppbmRleCAzMTAwYWE1Li4zN2U0ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJFIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMWE4ZWE4YS4uYjFjNTQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxNCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCV9fTU9EX0RFQ19VU0VfQ09VTlQoZW50cnktPm9wcy0+b3duZXIpOwotI2VuZGlmCi0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMTYyNTZhMy4uMTJjMmExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTI0MiwxNCArMjQyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCQlfX01PRF9ERUNfVVNFX0NPVU5UKGNyeXB0LT5vcHMtPm93bmVyKTsKLSNlbmRpZgotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggMmZjMDRkZi4uZWFlN2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMzI4NCwxNyArMzI4NCwxNCBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JCS8vc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IgV0VQNDAgYXQgb3RoZXIgcGxhY2UKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwkJLyogc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IKKwkJICogV0VQNDAgYXQgb3RoZXIgcGxhY2UgKi8KKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTMzMTUsMTEgKzMzMTIsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbHNlCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfaW5jX21vZF9jb3VudChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2VuZGlmCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMjIzNDgzMS4uNGUzNGExZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtNDgyLDE1ICs0ODIsOSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQlpZiAoIW5ld19jcnlwdC0+b3BzKSB7Ci0JCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCQlpZiAoIW5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQl9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbHNlCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfaW5jX21vZF9jb3VudChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2VuZGlmCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC02NDQsNyArNjM4LDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4OwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNzExLDE1ICs3MDUsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTczMCwxMCArNzIxLDggQEAKIAlwcmludGsoImFsZyBuYW1lOiVzXG4iLGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNzU4LDcgKzc0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwppbmRleCBkNGZhNjU0Li5iMDgwMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwpAQCAtNDYsNiArNDYsNyBAQAogI3VuZGVmIERFQlVHX1RYX0RFU0MKIAogLy8jZGVmaW5lIENPTkZJR19SVEw4MTkyX0lPX01BUAorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgInI4MTkyRV9ody5oIgogI2luY2x1ZGUgInI4MTkyRS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCmluZGV4IDc3MGY0MTIuLmI4Yzk1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUlRMODE5MlNVCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MlNVIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCBkNzZhNTRkLi41MjFlN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTAgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNjhkYzhmYS4uYzMzODNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjE2LDEwICsyMTYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggYzY0YWUwMy4uZmQ4ZTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0zMDI2LDE3ICszMDI2LDE0IEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQkJLy9zZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvciBXRVA0MCBhdCBvdGhlciBwbGFjZQotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCQkvKiBzZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvcgorCQkgKiBXRVA0MCBhdCBvdGhlciBwbGFjZSAqLworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMzA1OCw3ICszMDU1LDcgQEAKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKIAotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDEwNzc1OTAuLjYxNDZjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0zNTgsMTEgKzM1OCw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC01MDcsNyArNTA1LDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4OwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNTcwLDE1ICs1NjgsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTU4OSwxMCArNTg0LDggQEAKIAlwcmludGsoImFsZyBuYW1lOiVzXG4iLGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKCIlcyIsIG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNjEyLDcgKzYwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwppbmRleCA4N2Y4YTExLi5mODkwYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdmYjc1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgU1RMQzQ1WFgKLQl0cmlzdGF0ZSAic3RsYzQ1NTAvNDU2MCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfSEFSRElSUVMKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciBzdGxjNDU1MCBhbmQgc3RsYzQ1NjAgY2hpcHNldHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIHN0bGM0NXh4LiAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlMzI5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCSs9IHN0bGM0NXh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOTllYjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTk0ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAic3RsYzQ1eHguaCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLQotI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKLQotLyoKLSAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKLSAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHN0bGM0NXh4IHRvIGhhdmUgYSBoZWFkZXIgZmlsZQotICogaW4gaW5jbHVkZS9saW51eCwgbGV0J3MgdXNlIG1vZHVsZSBwYXJhbWF0ZXJzIGZvciBub3cKLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX3Bvd2VyID0gOTc7Ci1tb2R1bGVfcGFyYW0oc3RsYzQ1eHhfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfZ3Bpb19pcnEgPSA4NzsKLW1vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX2lycSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKLQotc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfY2FsX2NoYW5uZWxzW10gPSB7Ci0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDA5LAotCTB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwKLQkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCi0JMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAotCTB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwKLQkweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsCi0JMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAotCTB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwKLQkweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsCi0JMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAotCTB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywKLQkweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsCi0JMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLAotCTB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwKLQkweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwKLQkweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsCi0JMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LAotCTB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsCi0JMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLAotCTB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLAotCTB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksCi0JMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsCi0JMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLAotCTB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLAotCTB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLAotCTB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLAotCTB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKLQkweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDA5LCAweDAwLCAweDAwLAotCTB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKLQkweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LAotCTB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAotCTB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk0LCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAotCTB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwKLQkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsCi0JMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwOSwgMHgwMCwKLQkweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAotCTB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwKLQkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsCi0JMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LAotCTB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwKLQkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksCi0JMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LAotCTB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfcnNzaVtdID0gewotCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsCi0JMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLAotCTB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NjYW4oc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKTsKLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSk7Ci1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWxlbiA9IFBBR0VfU0laRTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5jYWxfcnNzaSkKLQkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sIDE2LAotCQkJCSAgIDIsIGJ1ZiwgbGVuLCAwKTsKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWxlbiA9IHN0cmxlbihidWYpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX3Jzc2koc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNvdW50ICE9IFJTU0lfQ0FMX0FSUkFZX0xFTikgewotCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfcnNzaSBsZW5ndGg6ICV6dSIsIGNvdW50KTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Ja2ZyZWUoc3RsYy0+Y2FsX3Jzc2kpOwotCi0Jc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGJ1ZiwgUlNTSV9DQUxfQVJSQVlfTEVOLCBHRlBfS0VSTkVMKTsKLQotCWlmICghc3RsYy0+Y2FsX3Jzc2kpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9yc3NpIik7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbGVuID0gUEFHRV9TSVpFOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmNhbF9jaGFubmVscykKLQkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9jaGFubmVscywgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAotCQkJCSAgIDE2LCAyLCBidWYsIGxlbiwgMCk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWxlbiA9IHN0cmxlbihidWYpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChjb3VudCAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImludmFsaWQgY2FsX2NoYW5uZWxzIHNpemU6ICV6dSAiLCBjb3VudCk7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWtmcmVlKHN0bGMtPmNhbF9jaGFubmVscyk7Ci0KLQlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGJ1ZiwgY291bnQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGxjLT5jYWxfY2hhbm5lbHMpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9jaGFubmVscyIpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlzc2l6ZV90IGxlbiA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjB4JXg6IDB4JXgtMHgleFxuIiwKLQkJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBlbnRyeS0+c3RhcnQsCi0JCQkgICAgICAgZW50cnktPmVuZCk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoY2FsX3Jzc2ksIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpLAotCQkgICBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoY2FsX2NoYW5uZWxzLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMsCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9jaGFubmVscyk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodHhfYnVmLCBTX0lSVUdPLCBzdGxjNDV4eF9zeXNmc19zaG93X3R4X2J1ZiwgTlVMTCk7Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV9yZWFkKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KLQlhZGRyID0gKGFkZHIgPDwgOCkgfCBBRERSX1JFQURfQklUXzE1OwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQl0WzBdLnR4X2J1ZiA9ICZhZGRyOwotCXRbMF0ubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JdFsxXS5yeF9idWYgPSBidWY7Ci0JdFsxXS5sZW4gPSBsZW47Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKLQotCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOwotfQotCi0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV93cml0ZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXUxNiBsYXN0X3dvcmQ7Ci0KLQkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCi0JYWRkciA9IGFkZHIgPDwgODsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JdFswXS50eF9idWYgPSAmYWRkcjsKLQl0WzBdLmxlbiA9IDI7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKLQotCXRbMV0udHhfYnVmID0gYnVmOwotCXRbMV0ubGVuID0gbGVuOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7Ci0KLQlpZiAobGVuICUgMikgewotCQlsYXN0X3dvcmQgPSAoKHU4ICopYnVmKVtsZW4gLSAxXTsKLQotCQl0WzJdLnR4X2J1ZiA9ICZsYXN0X3dvcmQ7Ci0JCXRbMl0ubGVuID0gMjsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKLQl9Ci0KLQlzcGlfc3luYyhzdGxjLT5zcGksICZtKTsKLX0KLQotc3RhdGljIHUxNiBzdGxjNDV4eF9yZWFkMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTE2IHZhbDsKLQotCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB1MzIgc3RsYzQ1eHhfcmVhZDMyKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUzMiB2YWw7Ci0KLQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93cml0ZTE2KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgdmFsKQotewotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiB2YWwpCi17Ci0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLX0KLQotc3RydWN0IHN0bGM0NXh4X3NwaV9yZWcgewotCXUxNiBhZGRyZXNzOwotCXUxNiBsZW5ndGg7Ci0JY2hhciAqbmFtZTsKLX07Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKLQljaGFyICpidWYsICpwb3M7Ci0JaW50IGJ1Zl9sZW4sIGwsIGNvdW50OwotCi0JaWYgKCEoREVCVUdfTEVWRUwgJiBERUJVR19UWEJVRkZFUikpCi0JCXJldHVybjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JYnVmX2xlbiA9IDUwMDsKLQlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghYnVmKQotCQlyZXR1cm47Ci0KLQlwb3MgPSBidWY7Ci0JY291bnQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQlsID0gc25wcmludGYocG9zLCBidWZfbGVuLCAiMHgleC0weCV4LCIsCi0JCQkgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7Ci0JCS8qIGRyb3AgdGhlIG51bGwgYnl0ZSAqLwotCQlwb3MgKz0gbDsKLQkJYnVmX2xlbiAtPSBsOwotCQljb3VudCsrOwotCX0KLQotCWlmIChjb3VudCA9PSAwKQotCQkqcG9zID0gJ1wwJzsKLQllbHNlCi0JCSotLXBvcyA9ICdcMCc7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBpbiBidWZmZXIgJWQgcmVnaW9uczogJXMiLAotCQkgICAgICAgY291bnQsIGJ1Zik7Ci0KLQlrZnJlZShidWYpOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKLQlpbnQgcG9zOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlwb3MgPSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVDsKLQotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiB0aGUgZW50cmllcyBpbiB0eGJ1ZmZlciBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIGluCi0JICogdGhlIHJlYWwgYnVmZmVyCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQlpZiAocG9zICsgbGVuIDwgdHhidWZmZXItPnN0YXJ0KQotCQkJYnJlYWs7Ci0JCXBvcyA9IEFMSUdOKHR4YnVmZmVyLT5lbmQgKyAxLCA0KTsKLQl9Ci0KLQlpZiAocG9zICsgbGVuID4gRklSTVdBUkVfVFhCVUZGRVJfRU5EKQotCQkvKiBub3QgZW5vdWdoIHJvb20gKi8KLQkJcG9zID0gLTE7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmaW5kICV6dSBCOiAweCV4IiwgbGVuLCBwb3MpOwotCi1vdXQ6Ci0JcmV0dXJuIHBvczsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCSBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqciwgKnByZXYgPSBOVUxMOwotCi0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkgewotCQlsaXN0X2FkZCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhidWZmZXIsIHN0cnVjdCB0eGJ1ZmZlciwgYnVmZmVyX2xpc3QpOwotCi0JaWYgKHR4YnVmZmVyLT5zdGFydCA8IHItPnN0YXJ0KSB7Ci0JCS8qIGFkZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0ICovCi0JCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXByZXYgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQkvKiBza2lwIGZpcnN0IGVudHJ5LCB3ZSBjaGVja2VkIGZvciB0aGF0IGFib3ZlICovCi0JCWlmICghcHJldikgewotCQkJcHJldiA9IHI7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIGRvdWJsZS1jaGVjayBvdmVybGFwcyAqLwotCQlXQVJOX09OX09OQ0UodHhidWZmZXItPnN0YXJ0ID49IHItPnN0YXJ0ICYmCi0JCQkgICAgIHR4YnVmZmVyLT5zdGFydCA8PSByLT5lbmQpOwotCQlXQVJOX09OX09OQ0UodHhidWZmZXItPmVuZCA+PSByLT5zdGFydCAmJgotCQkJICAgICB0eGJ1ZmZlci0+ZW5kIDw9IHItPmVuZCk7Ci0KLQkJaWYgKHByZXYtPmVuZCA8IHR4YnVmZmVyLT5zdGFydCAmJgotCQkgICAgdHhidWZmZXItPmVuZCA8IHItPnN0YXJ0KSB7Ci0JCQkvKiBpbnNlcnQgYXQgdGhpcyBzcG90ICovCi0JCQlsaXN0X2FkZF90YWlsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZyLT5idWZmZXJfbGlzdCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCXByZXYgPSByOwotCX0KLQotCS8qIG5vdCBmb3VuZCAqLwotCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKLQotCXJldHVybiAwOwotCi19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHN0cnVjdCB0eGJ1ZmZlciAqc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCQkJIHNpemVfdCBmcmFtZV9sZW4pCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeSA9IE5VTEw7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgcG9zOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlsZW4gPSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgKyBmcmFtZV9sZW4gKyBGSVJNV0FSRV9UWEJVRkZFUl9UUkFJTEVSOwotCXBvcyA9IHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgbGVuKTsKLQotCWlmIChwb3MgPCAwKQotCQlyZXR1cm4gTlVMTDsKLQotCVdBUk5fT05fT05DRShwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpOwotCVdBUk5fT05fT05DRShwb3MgPCBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCk7Ci0KLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwotCWVudHJ5LT5zdGFydCA9IHBvczsKLQllbnRyeS0+ZnJhbWVfc3RhcnQgPSBwb3MgKyBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVI7Ci0JZW50cnktPmVuZCA9IGVudHJ5LT5zdGFydCArIGxlbiAtIDE7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBhbGxvY2F0ZWQgMHgleC0weCV4IiwKLQkJICAgICAgIGVudHJ5LT5zdGFydCwgZW50cnktPmVuZCk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RsYywgZW50cnkpOwotCi0Jc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdGxjKTsKLQotCXJldHVybiBlbnRyeTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKLQkJCQkgICBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogZnJlZWQgMHgleC0weCV4IiwKLQkJICAgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7Ci0KLQlsaXN0X2RlbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0KTsKLQlrZnJlZSh0eGJ1ZmZlcik7Ci19Ci0KLQotc3RhdGljIGludCBzdGxjNDV4eF93YWl0X2JpdChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUxNiByZWcsIHUzMiBtYXNrLAotCQkJICAgICB1MzIgZXhwZWN0ZWQpCi17Ci0JaW50IGk7Ci0JY2hhciBidWZmZXJbNF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7Ci0JCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIHJlZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0JCWlmICgoKCoodTMyICopYnVmZmVyKSAmIG1hc2spID09IGV4cGVjdGVkKQotCQkJcmV0dXJuIDE7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCWludCByZXQ7Ci0KLQkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgIjM4MjYuYXJtIiwgJnN0bGMtPnNwaS0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGZ3LT5zaXplICUgNCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzJiaXQ6ICV6dSIsCi0JCQkgICAgICAgZnctPnNpemUpOwotCQlyZXR1cm4gLUVJTFNFUTsgLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICAqLzsKLQl9Ci0KLQlpZiAoZnctPnNpemUgPCAxMDAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBpcyB0b28gc21hbGw6ICV6dSIsIGZ3LT5zaXplKTsKLQkJcmV0dXJuIC1FSUxTRVE7Ci0JfQotCi0Jc3RsYy0+ZncgPSBrbWVtZHVwKGZ3LT5kYXRhLCBmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGxjLT5mdykgewotCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlybXdhcmUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3RsYy0+ZndfbGVuID0gZnctPnNpemU7Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfZG1hX3JlZ3MgZG1hX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmd19sZW4sIGZ3X2FkZHI7Ci0JbG9uZyBfZndfbGVuOwotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoIXN0bGMtPmZ3KSB7Ci0JCXJldCA9IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RsYyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCi0JCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERQotCQkJIHwgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpOwotCi0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCWZ3X2FkZHIgPSBGSVJNV0FSRV9BRERSRVNTOwotCWZ3X2xlbiA9IHN0bGMtPmZ3X2xlbjsKLQotCXdoaWxlIChmd19sZW4gPiAwKSB7Ci0JCV9md19sZW4gPSAoZndfbGVuID4gU1BJX01BWF9QQUNLRVRfU0laRSkKLQkJCT8gU1BJX01BWF9QQUNLRVRfU0laRSA6IGZ3X2xlbjsKLQkJZG1hX3JlZ3MuY21kID0gU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRTsKLQkJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoX2Z3X2xlbik7Ci0JCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihmd19hZGRyKTsKLQotCQlmd19sZW4gLT0gX2Z3X2xlbjsKLQkJZndfYWRkciArPSBfZndfbGVuOwotCi0JCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsIGRtYV9yZWdzLmNtZCk7Ci0KLQkJaWYgKHN0bGM0NXh4X3dhaXRfYml0KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAotCQkJCSAgICAgIEhPU1RfQUxMT1dFRCwgSE9TVF9BTExPV0VEKSA9PSAwKSB7Ci0JCQlzdGxjNDV4eF9lcnJvcigiZndfdXBsb2FkIG5vdCBhbGxvd2VkIHRvIERNQSB3cml0ZSIpOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQotCQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sIGRtYV9yZWdzLmxlbik7Ci0JCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsIGRtYV9yZWdzLmFkZHIpOwotCi0JCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc3RsYy0+ZncsIF9md19sZW4pOwotCi0JCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAotCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAotCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLwotCX0KLQotCUJVR19PTihmd19sZW4gIT0gMCk7Ci0KLQkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9FTiwgU1BJX0hPU1RfSU5UU19ERUZBVUxUKTsKLQotCS8qIGJvb3QgdGhlIGRldmljZSAqLwotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKLQkJCSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOwotCi0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKTsKLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfY2hlY2tfdHhzZW50KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5LCAqbjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxpZmV0aW1lKSkgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlzdGxjNDV4eF93YXJuaW5nKCJmcmFtZSAweCV4IGxpZmV0aW1lIGV4Y2VlZGVkIiwKLQkJCQkJCSBlbnRyeS0+c3RhcnQpOwotCQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQkJCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOwotCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3Bvd2VyX29mZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQlncGlvX3NldF92YWx1ZShzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDEpOwotCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQotCS8qCi0JICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5ndGgKLQkgKiBpcyBqdXN0IGEgZ3Vlc3MKLQkgKi8KLQltc2xlZXAoMTApOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKLQkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eF9zZW50LAotCQkJCQkgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKLQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKLQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JfQotCi0JV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgewotCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3BlbmRpbmcsCi0JCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQl9Ci0KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSk7Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwKLQkJCQkJICAgICB3b3JrX3Jlc2V0KTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCS8qIHdhaXQgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgZmluaXNoZWQsIHdlIGNhbid0IGhvbGQKLQkgKiBzdGxjLT5tdXRleCB0byBhdm9pZCBkZWFkbG9jayAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnN0bGMtPndvcmspOwotCi0JLyogRklYTUU6IGZpbmQgb3V0IGdvb2QgdmFsdWUgdG8gd2FpdCBmb3IgY2hpcCBwb3dlciBkb3duICovCi0JbXNsZWVwKDEwMCk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQkvKiBGSVhNRTogd2Ugc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIGlmIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZAotCSAqIGFmdGVyIHJlLWFjcXVpcmluZyBtdXRleCAqLwotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVTRVQpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVFRJTkc7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKLQlzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcmVzZXQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X3dhcm5pbmcoInJlc2V0dGluZyBmaXJtd2FyZSIpOwotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVTRVQ7Ci0JaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKLQlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrX3Jlc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAotCQkJCQkgICAgIHdvcmtfdHhfdGltZW91dC53b3JrKTsKLQotCXN0bGM0NXh4X3dhcm5pbmcoInR4IHRpbWVvdXQiKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfYWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIHZhbCkKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd2FrZXVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIGludHM7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQkvKiB3YWtlIHRoZSBjaGlwICovCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfV0FLRVVQKTsKLQotCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCi0JdGltZW91dCA9IGppZmZpZXMgKyBIWjsKLQotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCQlnb3RvIG91dDsKLQkJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCX0KLQotCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKLQotb3V0OgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc2xlZXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsIFNQSV9UQVJHRVRfSU5UX1NMRUVQKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfaW50X3JlYWR5KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLAotCQkJIFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKLQotCXN3aXRjaCAoc3RsYy0+Zndfc3RhdGUpIHsKLQljYXNlIEZXX1NUQVRFX0JPT1RJTkc6Ci0JCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7Ci0JCWNvbXBsZXRlKCZzdGxjLT5md19jb21wKTsKLQkJYnJlYWs7Ci0JY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6Ci0JCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7Ci0KLQkJc3RsYzQ1eHhfdHhfc2NhbihzdGxjKTsKLQkJc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0JCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7Ci0KLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X3R4YWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fdHggKnR4OwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0JaW50IGZvdW5kID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0JdHggPSAoc3RydWN0IHNfbG1vX3R4ICopIChjb250cm9sICsgMSk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoIm5vIGZyYW1lcyB3YWl0aW5nIGZvciAiCi0JCQkJCSAiYWNrbm93bGVkZ2VtZW50Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgewotCQlpZiAoY29udHJvbC0+aGFuZGxlID09IGVudHJ5LT5oYW5kbGUpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiY291bGRuJ3QgZmluZCBmcmFtZSBmb3IgdHggYWNrIDB4JXgiLAotCQkJCQkgY29udHJvbC0+aGFuZGxlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAiVFggQUNLIDB4JXgiLCBlbnRyeS0+aGFuZGxlKTsKLQotCWlmIChlbnRyeS0+c3RhdHVzX25lZWRlZCkgewotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKLQotCQlpZiAoISh0eC0+ZmxhZ3MgJiBMTV9UWF9GQUlMRUQpKSB7Ci0JCQkvKiBmcmFtZSB3YXMgYWNrZWQgKi8KLQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gdHgtPnJjcGkgLyAyIC0gMTEwOwotCQl9Ci0KLQkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOwotCX0KLQotCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0KLQlzdGxjNDV4eF9jaGVja190eHNlbnQoc3RsYyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKQotCQkvKiB0aGVyZSBhcmUgbm8gcGVuZGluZyBmcmFtZXMsIHdlIGNhbiBzdG9wIHRoZSB0eCB0aW1lb3V0Ci0JCSAqIHRpbWVyICovCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnN0bGMtPndvcmtfdHhfdGltZW91dCk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0KLQlpZiAoc3RsYy0+dHhfcXVldWVfc3RvcHBlZCAmJgotCSAgICBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pICE9IC0xKSB7Ci0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAicm9vbSBpbiB0eCBidWZmZXIsIHdha2luZyBxdWV1ZXMiKTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKLQkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfY29udHJvbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlpbnQgcmV0ID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0KLQlzd2l0Y2ggKGNvbnRyb2wtPm9pZCkgewotCWNhc2UgTE1fT0lEX1RYOgotCQlyZXQgPSBzdGxjNDV4eF9yeF90eGFjayhzdGxjLCBza2IpOwotCQlicmVhazsKLQljYXNlIExNX09JRF9TRVRVUDoKLQljYXNlIExNX09JRF9TQ0FOOgotCWNhc2UgTE1fT0lEX1RSQVA6Ci0JY2FzZSBMTV9PSURfRURDRjoKLQljYXNlIExNX09JRF9LRVlDQUNIRToKLQljYXNlIExNX09JRF9QU006Ci0JY2FzZSBMTV9PSURfU1RBVFM6Ci0JY2FzZSBMTV9PSURfTEVEOgotCWRlZmF1bHQ6Ci0JCXN0bGM0NXh4X3dhcm5pbmcoInVuaGFuZGxlZCByeCBjb250cm9sIG9pZCAlZFxuIiwKLQkJCQkgY29udHJvbC0+b2lkKTsKLQkJYnJlYWs7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogY29waWVkIGZyb20gbWFjODAyMTEgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKLQkJCQkgc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKnRpbSwKLQkJCQkgc2l6ZV90ICp0aW1fbGVuKQotewotCXNpemVfdCBsZWZ0ID0gbGVuOwotCXU4ICpwb3MgPSBzdGFydDsKLQotCXdoaWxlIChsZWZ0ID49IDIpIHsKLQkJdTggaWQsIGVsZW47Ci0KLQkJaWQgPSAqcG9zKys7Ci0JCWVsZW4gPSAqcG9zKys7Ci0JCWxlZnQgLT0gMjsKLQotCQlpZiAoZWxlbiA+IGxlZnQpCi0JCQlyZXR1cm47Ci0KLQkJc3dpdGNoIChpZCkgewotCQljYXNlIFdMQU5fRUlEX1RJTToKLQkJCSp0aW0gPSAoc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKSBwb3M7Ci0JCQkqdGltX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbGVmdCAtPSBlbGVuOwotCQlwb3MgKz0gZWxlbjsKLQl9Ci19Ci0KLS8qCi0gKiBtYWM4MDIxMSBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgYXNraW5nIGZyYW1lcyB3aXRoIFBTLVBvbGwsIHNvIGxldCdzCi0gKiBpbXBsZW1lbnQgaW4gdGhlIGRyaXZlciBmb3Igbm93LiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExCi0gKiBsYXRlci4KLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF9jaGVja19tb3JlX2RhdGEoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzaXplX3QgbGVuOwotCXUxNiBmYzsKLQotCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7Ci0JbGVuID0gc2tiLT5sZW4gLSBzaXplb2YoKmRhdGEpOwotCi0JLyogbWluaW11bSBmcmFtZSBsZW5ndGggaXMgdGhlIG51bGwgZnJhbWUgbGVuZ3RoIDI0IGJ5dGVzICovCi0JaWYgKGxlbiA8IDI0KSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgZnJhbWUgbGVuZ3RoIHdoZW4gY2hlY2tpbmcgZm9yICIKLQkJCQkgIm1vcmUgZGF0YSIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQotCQkvKiB0aGlzIGlzIG5vdCBmcm9tIERTICovCi0JCXJldHVybiAwOwotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIxLCBzdGxjLT5tYWNfYWRkcikgIT0gMCkKLQkJLyogdGhlIGZyYW1lIHdhcyBub3QgZm9yIHVzICovCi0JCXJldHVybiAwOwotCi0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpIHsKLQkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLwotCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJhbGwgYnVmZmVyZWQgZnJhbWVzIHJldHJpZXZlZCIpOwotCQlzdGxjLT5wc3BvbGxpbmcgPSBmYWxzZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogTU9SRURBVEEgYml0IGlzIHNldCwgbGV0J3MgYXNrIGZvciBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLwotCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBtYWM4MDIxMSBjYW5ub3QgcmVhZCBUSU0gZnJvbSBiZWFjb25zLCBzbyBsZXQncyBhZGQgYSBoYWNrIHRvIHRoZQotICogZHJpdmVyLiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExIGxhdGVyLgotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOwotCXNpemVfdCBsZW4gPSBza2ItPmxlbiwgdGltX2xlbiA9IDAsIGJhc2VsZW4sIHB2Ym1hcF9sZW47Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKnRpbSA9IE5VTEw7Ci0JaW50IGJtYXBfb2Zmc2V0LCBpbmRleCwgYWlkX2JpdDsKLQotCW1nbXQgPSAodm9pZCAqKSBza2ItPmRhdGEgKyBzaXplb2YoKmRhdGEpOwotCi0JYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OwotCWlmIChiYXNlbGVuID4gbGVuKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgYmFzZWxlbiBpbiBiZWFjb24iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RsYzQ1eHhfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZ0aW0sCi0JCQkgICAgICZ0aW1fbGVuKTsKLQotCWlmICghdGltKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImRpZG4ndCBmaW5kIHRpbSBmcm9tIGEgYmVhY29uIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJtYXBfb2Zmc2V0ID0gdGltLT5ibWFwX2NvbnRyb2wgJiAweGZlOwotCWluZGV4ID0gc3RsYy0+YWlkIC8gOCAtIGJtYXBfb2Zmc2V0OwotCi0JcHZibWFwX2xlbiA9IHRpbV9sZW4gLSAzOwotCWlmIChpbmRleCA+IHB2Ym1hcF9sZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWlkX2JpdCA9ICEhKHRpbS0+cHZibWFwW2luZGV4XSAmICgxIDw8IHN0bGMtPmFpZCAlIDgpKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImZjIDB4JXggZHVyYXRpb24gJWQgc2VxICVkIGR0aW0gJXUgIgotCQkgICAgICAgImJtYXBfY29udHJvbCAweCV4IGFpZF9iaXQgJWQiLAotCQkgICAgICAgbWdtdC0+ZnJhbWVfY29udHJvbCwgbWdtdC0+ZHVyYXRpb24sIG1nbXQtPnNlcV9jdHJsID4+IDQsCi0JCSAgICAgICB0aW0tPmR0aW1fY291bnQsIHRpbS0+Ym1hcF9jb250cm9sLCBhaWRfYml0KTsKLQotCWlmICghYWlkX2JpdCkKLQkJcmV0dXJuIDA7Ci0KLQlzdGxjLT5wc3BvbGxpbmcgPSB0cnVlOwotCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0JaW50IGFsaWduID0gMDsKLQl1OCAqcCwgYWxpZ25fbGVuOwotCXUxNiBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc3RsYy0+cHNtKSB7Ci0JCWlmIChkYXRhLT5mbGFncyAmIExNX0lOX0JFQUNPTikKLQkJCXN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0bGMsIHNrYik7Ci0JCWVsc2UgaWYgKHN0bGMtPnBzcG9sbGluZyAmJiAoZGF0YS0+ZmxhZ3MgJiBMTV9JTl9EQVRBKSkKLQkJCXN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdGxjLCBza2IpOwotCX0KLQotCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7Ci0KLQlzdGF0dXMuZnJlcSA9IGRhdGEtPmZyZXF1ZW5jeTsKLQlzdGF0dXMuc2lnbmFsID0gZGF0YS0+cmNwaSAvIDIgLSAxMTA7Ci0KLQkvKiBsZXQncyBhc3N1bWUgdGhhdCBtYXhpbXVtIHJjcGkgdmFsdWUgaXMgMTQwICg9IDM1IGRCbSkgKi8KLQlzdGF0dXMucXVhbCA9IGRhdGEtPnJjcGkgKiAxMDAgLyAxNDA7Ci0KLQlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0KLQkvKgotCSAqIEZJWE1FOiB0aGlzIGdpdmVzIHdhcm5pbmcgZnJvbSBfX2llZWU4MDIxMV9yeCgpCi0JICoKLQkgKiBzdGF0dXMucmF0ZV9pZHggPSBkYXRhLT5yYXRlOwotCSAqLwotCi0JbGVuID0gZGF0YS0+bGVuZ3RoOwotCi0JaWYgKGRhdGEtPmZsYWdzICYgTE1fRkxBR19BTElHTikKLQkJYWxpZ24gPSAxOwotCi0Jc2tiX3B1bGwoc2tiLCBzaXplb2YoKmRhdGEpKTsKLQotCWlmIChhbGlnbikgewotCQlwID0gc2tiLT5kYXRhOwotCQlhbGlnbl9sZW4gPSAqcDsKLQkJc2tiX3B1bGwoc2tiLCBhbGlnbl9sZW4pOwotCX0KLQotCXNrYl90cmltKHNrYiwgbGVuKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZGF0YSAweCVwICVkIEIiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1JYX0NPTlRFTlQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JaWVlZTgwMjExX3J4KHN0bGMtPmh3LCBza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHJldDsKLQl1MTYgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOwotCi0JLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCi0Jc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0dFTl9QVVJQXzEpOwotCi0JbGVuID0gc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBKTsKLQotCWlmIChsZW4gPT0gMCkgewotCQlzdGxjNDV4eF93YXJuaW5nKCJyeCByZXF1ZXN0IG9mIHplcm8gYnl0ZXMiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYl9wdXQoc2tiLCBsZW4pLCBsZW4pOwotCi0Jc3RsYzQ1eHhfc2xlZXAoc3RsYyk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGZyYW1lIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOwotCi0JaWYgKGNvbnRyb2wtPmZsYWdzICYgTE1fRkxBR19DT05UUk9MKQotCQlyZXQgPSBzdGxjNDV4eF9yeF9jb250cm9sKHN0bGMsIHNrYik7Ci0JZWxzZQotCQlyZXQgPSBzdGxjNDV4eF9yeF9kYXRhKHN0bGMsIHNrYik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzdGxjNDV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29uZmlnKQotewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb25maWc7Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKLQotCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X2ZyYW1lKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIGFkZHJlc3MsCi0JCQkgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JaW50IHJldCA9IDA7Ci0JdTMyIGludHM7Ci0KLQlzdGxjLT50eF9mcmFtZXMrKzsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZnJhbWUgMHglcCAlenUgQiIsIGJ1ZiwgbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIGJ1ZiwgbGVuKTsKLQotCXN0bGM0NXh4X3dha2V1cChzdGxjKTsKLQotCWRtYV9yZWdzLmNtZCAgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOwotCWRtYV9yZWdzLmxlbiAgPSBjcHVfdG9fbGUxNihsZW4pOwotCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyZXNzKTsKLQotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAotCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7Ci0KLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIGJ1ZiwgbGVuKTsKLQotCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOwotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1dSX1JFQURZKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJc3RsYzQ1eHhfd2FybmluZygiV1JfUkVBRFkgdGltZW91dCIpOwotCQkJcmV0ID0gLTE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0JfQotCi0Jc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOwotCi0Jc3RsYzQ1eHhfc2xlZXAoc3RsYyk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3dxX3R4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpIHsKLQkJZW50cnkgPSBsaXN0X2VudHJ5KHN0bGMtPnR4X3BlbmRpbmcubmV4dCwKLQkJCQkgICBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCi0JCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKLQotCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQkJcmV0ID0gc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPmZyYW1lX3N0YXJ0LAotCQkJCQllbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOwotCi0JCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCS8qIGZyYW1lIHRyYW5zZmVyIHRvIGZpcm13YXJlIGJ1ZmZlciBmYWlsZWQgKi8KLQkJCS8qIEZJWE1FOiByZXBvcnQgdGhpcyB0byBtYWM4MDIxMSAqLwotCQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKLQkJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQkJcXVldWVfZGVsYXllZF93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsCi0JCQkJICAgJnN0bGMtPndvcmtfdHhfdGltZW91dCwKLQkJCQkgICBtc2Vjc190b19qaWZmaWVzKFRYX1RJTUVPVVQpKTsKLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwgd29yayk7Ci0JdTMyIGludHM7Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKLQkgICAgc3RsYy0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCi0JCWdvdG8gb3V0OwotCi0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JILCAiYmVnaW4gaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOwotCi0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpIHsKLQkJc3RsYzQ1eHhfaW50X3JlYWR5KHN0bGMpOwotCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9SRUFEWSk7Ci0JfQotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQotCQlnb3RvIG91dDsKLQotCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgewotCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9VUERBVEUpOwotCQlyZXQgPSBzdGxjNDV4eF9yeChzdGxjKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7Ci0JCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXJldCA9IHN0bGM0NXh4X3dxX3R4KHN0bGMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJlbmQgaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X2VkY2Yoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX2VkY2YgKmVkY2Y7Ci0Jc2l6ZV90IGxlbiwgZWRjZl9sZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQllZGNmX2xlbiA9IHNpemVvZigqZWRjZik7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIGVkY2ZfbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JZWRjZiA9IChzdHJ1Y3Qgc19sbW9fZWRjZiAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IGVkY2ZfbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9FRENGOwotCi0JZWRjZi0+c2xvdHRpbWUgPSAweDE0OwotCWVkY2YtPnNpZnMgPSAxMDsKLQllZGNmLT5lb2ZwYWQgPSA2OwotCWVkY2YtPm1heGJ1cnN0ID0gMTUwMDsKLQotCWVkY2YtPnF1ZXVlc1swXS5haWZzID0gMjsKLQllZGNmLT5xdWV1ZXNbMF0ucGFkMCA9IDE7Ci0JZWRjZi0+cXVldWVzWzBdLmN3bWluID0gMzsKLQllZGNmLT5xdWV1ZXNbMF0uY3dtYXggPSA3OwotCWVkY2YtPnF1ZXVlc1swXS50eG9wID0gNDc7Ci0JZWRjZi0+cXVldWVzWzFdLmFpZnMgPSAyOwotCWVkY2YtPnF1ZXVlc1sxXS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbMV0uY3dtaW4gPSA3OwotCWVkY2YtPnF1ZXVlc1sxXS5jd21heCA9IDE1OwotCWVkY2YtPnF1ZXVlc1sxXS50eG9wID0gOTQ7Ci0JZWRjZi0+cXVldWVzWzJdLmFpZnMgPSAzOwotCWVkY2YtPnF1ZXVlc1syXS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbMl0uY3dtaW4gPSAxNTsKLQllZGNmLT5xdWV1ZXNbMl0uY3dtYXggPSAxMDIzOwotCWVkY2YtPnF1ZXVlc1syXS50eG9wID0gMDsKLQllZGNmLT5xdWV1ZXNbM10uYWlmcyA9IDc7Ci0JZWRjZi0+cXVldWVzWzNdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1szXS5jd21pbiA9IDE1OwotCWVkY2YtPnF1ZXVlc1szXS5jd21heCA9IDEwMjM7Ci0JZWRjZi0+cXVldWVzWzNdLnR4b3AgPSAwOwotCWVkY2YtPnF1ZXVlc1s0XS5haWZzID0gMTM7Ci0JZWRjZi0+cXVldWVzWzRdLnBhZDAgPSA5OTsKLQllZGNmLT5xdWV1ZXNbNF0uY3dtaW4gPSAzNDM3OwotCWVkY2YtPnF1ZXVlc1s0XS5jd21heCA9IDUxMjsKLQllZGNmLT5xdWV1ZXNbNF0udHhvcCA9IDEyOwotCWVkY2YtPnF1ZXVlc1s1XS5haWZzID0gMTQyOwotCWVkY2YtPnF1ZXVlc1s1XS5wYWQwID0gMTA5OwotCWVkY2YtPnF1ZXVlc1s1XS5jd21pbiA9IDg3NTY7Ci0JZWRjZi0+cXVldWVzWzVdLmN3bWF4ID0gNjsKLQllZGNmLT5xdWV1ZXNbNV0udHhvcCA9IDA7Ci0JZWRjZi0+cXVldWVzWzZdLmFpZnMgPSA0OwotCWVkY2YtPnF1ZXVlc1s2XS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbNl0uY3dtaW4gPSAwOwotCWVkY2YtPnF1ZXVlc1s2XS5jd21heCA9IDU4NzA1OwotCWVkY2YtPnF1ZXVlc1s2XS50eG9wID0gMjU3MTY7Ci0JZWRjZi0+cXVldWVzWzddLmFpZnMgPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbN10uY3dtaW4gPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5jd21heCA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLnR4b3AgPSAwOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NldHVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19zZXR1cCAqc2V0dXA7Ci0Jc2l6ZV90IGxlbiwgc2V0dXBfbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc2V0dXBfbGVuID0gc2l6ZW9mKCpzZXR1cCk7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHNldHVwX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXNldHVwID0gKHN0cnVjdCBzX2xtb19zZXR1cCAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IHNldHVwX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfU0VUVVA7Ci0KLQlzZXR1cC0+ZmxhZ3MgPSBMTV9TRVRVUF9JTkZSQTsKLQlzZXR1cC0+YW50ZW5uYSA9IDI7Ci0Jc2V0dXAtPnJ4X2FsaWduID0gMDsKLQlzZXR1cC0+cnhfYnVmZmVyID0gRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQ7Ci0Jc2V0dXAtPnJ4X210dSA9IEZJUk1XQVJFX01UVTsKLQlzZXR1cC0+ZnJvbnRlbmQgPSA1OwotCXNldHVwLT50aW1lb3V0ID0gMDsKLQlzZXR1cC0+dHJ1bmNhdGUgPSA0ODg5NjsKLQlzZXR1cC0+YnJhdGVtYXNrID0gMHhmZmZmZmZmZjsKLQlzZXR1cC0+cmVmX2Nsb2NrID0gNjQ0MjQ1MDk0OwotCXNldHVwLT5scGZfYmFuZHdpZHRoID0gNjU1MzU7Ci0Jc2V0dXAtPm9zY19zdGFydF9kZWxheSA9IDY1NTM1OwotCi0JbWVtY3B5KHNldHVwLT5tYWNhZGRyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShzZXR1cC0+YnNzaWQsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fc2NhbiAqc2NhbjsKLQlzaXplX3QgbGVuLCBzY2FuX2xlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNjYW5fbGVuID0gc2l6ZW9mKCpzY2FuKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2Nhbl9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlzY2FuID0gKHN0cnVjdCBzX2xtb19zY2FuICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gc2Nhbl9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX1NDQU47Ci0KLQlzY2FuLT5mbGFncyA9IExNX1NDQU5fRVhJVDsKLQlzY2FuLT5icmF0ZW1hc2sgPSAweDE1ZjsKLQlzY2FuLT5hbG9mdFswXSA9IDM7Ci0Jc2Nhbi0+YWxvZnRbMV0gPSAzOwotCXNjYW4tPmFsb2Z0WzJdID0gMTsKLQlzY2FuLT5hbG9mdFszXSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbNF0gPSAwOwotCXNjYW4tPmFsb2Z0WzVdID0gMDsKLQlzY2FuLT5hbG9mdFs2XSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbN10gPSAwOwotCi0JbWVtY3B5KCZzY2FuLT5yc3NpY2FsLCAmc3RsYy0+Y2FsX3Jzc2lbKHN0bGMtPmNoYW5uZWwgLSAxKSAqCi0JCQkJCSAgICAgICBSU1NJX0NBTF9MRU5dLAotCSAgICAgICBSU1NJX0NBTF9MRU4pOwotCW1lbWNweSgmc2Nhbi0+Y2hhbm5lbCwgJnN0bGMtPmNhbF9jaGFubmVsc1soc3RsYy0+Y2hhbm5lbCAtIDEpICoKLQkJCQkJCSAgIENIQU5ORUxfQ0FMX0xFTl0sCi0JICAgICAgIENIQU5ORUxfQ0FMX0xFTik7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotLyoKLSAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF90eF9wc3BvbGwoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHNwb2xsOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY2hhciAqcGF5bG9hZDsKLQl1MTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDE2KTsKLQlpZiAoIXNrYikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNwb2xsIGZyYW1lIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDE2KTsKLQltZW1zZXQocHNwb2xsLCAwLCAxNik7Ci0JZmMgPSBJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKLQlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7Ci0JcHNwb2xsLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KHN0bGMtPmFpZCk7Ci0KLQkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KLQlwc3BvbGwtPmR1cmF0aW9uX2lkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUpIHwgY3B1X3RvX2xlMTYoMSA8PCAxNCk7Ci0KLQltZW1jcHkocHNwb2xsLT5hZGRyMSwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkocHNwb2xsLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgUFMtUG9sbCBmcmFtZSB0byAlcE0gKHBvd2Vyc2F2ZSAlZCwgIgotCQkgICAgICAgImZjIDB4JXgsIGFpZCAlZCkiLCBwc3BvbGwtPmFkZHIxLAotCQkgICAgICAgcG93ZXJzYXZlLCBmYywgc3RsYy0+YWlkKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWlmICghZW50cnkpIHsKLQkJLyoKLQkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlLgotCQkgKgotCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCi0JCSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCi0JCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7Ci0JZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKLQllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgotCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAotCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCi0JCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLQlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCWlmIChwYWRkaW5nKQotCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047Ci0KLQlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKLQlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKLQlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOwotCWRhdGEtPmFpZCA9IDE7Ci0JZGF0YS0+cnRzX3JldHJpZXMgPSA3OwotCWRhdGEtPnJldHJpZXMgPSA3OwotCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOwotCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OwotCWRhdGEtPmtleXR5cGUgPSAwOwotCWRhdGEtPmtleWxlbiA9IDA7Ci0JZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRhdGEtPmFsb2Z0W2ldID0gMDsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCi0JICoKLQkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93Ci0JICovCi0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKLSAqCi0gKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBtYWM4MDIxMS9pZWVlODAyMTFfc2VuZF9udWxsZnVuYwotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X251bGxmdW5jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY2hhciAqcGF5bG9hZDsKLQl1MTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKLQlpZiAoIXNrYikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsIGZyYW1lXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7Ci0JZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JICAgICBJRUVFODAyMTFfRkNUTF9UT0RTOwotCi0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07Ci0KLQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTnVsbCBmcmFtZSB0byAlcE0gKHBvd2Vyc2F2ZSAlZCwgIgotCQkgICAgICAgImZjIDB4JXgpIiwgbnVsbGZ1bmMtPmFkZHIxLCBwb3dlcnNhdmUsIGZjKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWlmICghZW50cnkpIHsKLQkJLyoKLQkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlLgotCQkgKgotCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCi0JCSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCi0JCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7Ci0JZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKLQllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgotCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAotCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCi0JCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLQlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCWlmIChwYWRkaW5nKQotCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047Ci0KLQlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKLQlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKLQlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOwotCWRhdGEtPmFpZCA9IDE7Ci0JZGF0YS0+cnRzX3JldHJpZXMgPSA3OwotCWRhdGEtPnJldHJpZXMgPSA3OwotCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOwotCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OwotCWRhdGEtPmtleXR5cGUgPSAwOwotCWRhdGEtPmtleWxlbiA9IDA7Ci0JZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRhdGEtPmFsb2Z0W2ldID0gMDsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCi0JICoKLQkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93Ci0JICovCi0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fcHNtICpwc207Ci0Jc2l6ZV90IGxlbiwgcHNtX2xlbjsKLQotCVdBUk5fT04oIXN0bGMtPmFzc29jaWF0ZWQpOwotCVdBUk5fT04oc3RsYy0+YWlkIDwgMSk7Ci0JV0FSTl9PTihzdGxjLT5haWQgPiAyMDA3KTsKLQotCXBzbV9sZW4gPSBzaXplb2YoKnBzbSk7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHBzbV9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlwc20gPSAoc3RydWN0IHNfbG1vX3BzbSAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IHBzbV9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX1BTTTsKLQotCWlmIChlbmFibGUpCi0JCXBzbS0+ZmxhZ3MgfD0gTE1fUFNNOwotCi0JcHNtLT5haWQgPSBzdGxjLT5haWQ7Ci0KLQlwc20tPmJlYWNvbl9yY3BpX3NraXBfbWF4ID0gNjA7Ci0KLQlwc20tPmludGVydmFsc1swXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMF0ucGVyaW9kcyA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMV0uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzFdLnBlcmlvZHMgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzJdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1syXS5wZXJpb2RzID0gMTsKLQlwc20tPmludGVydmFsc1szXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbM10ucGVyaW9kcyA9IDE7Ci0KLQlwc20tPm5yID0gMDsKLQlwc20tPmV4Y2x1ZGVbMF0gPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBMTV9PSURfUFNNIChhaWQgJWQsIGludGVydmFsICVkKSIsCi0JCSAgICAgICBwc20tPmFpZCwgcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwpOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlpbnQgcGF5bG9hZF9sZW4sIHBhZGRpbmcsIGk7Ci0Jc3RydWN0IHNfbG1fZGF0YV9vdXQgKmRhdGE7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQljaGFyICpwYXlsb2FkOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCWlmICghZW50cnkpIHsKLQkJLyogdGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSBidWZmZXIgZnVsbCIpOwotCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gdHJ1ZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IDI7Ci0JZGF0YS0+YmFja2xvZyA9IDMyOwotCWRhdGEtPmFudGVubmEgPSAyOwotCWRhdGEtPmN0cyA9IDM7Ci0JZGF0YS0+cG93ZXIgPSAxMjc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc3RsYy0+aHcsIGluZm8pOwotCQlkYXRhLT5hbG9mdFtpXSA9IHJhdGUtPmh3X3ZhbHVlOwotCX0KLQotCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfcGVuZGluZyk7Ci0KLQkvKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIgKi8KLQlpZiAoc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBNQVhfRlJBTUVfTEVOKSA9PSAtMSkgewotCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19RVUVVRSwgInR4IGJ1ZmZlciBmdWxsLCBzdG9wcGluZyBxdWV1ZXMiKTsKLQkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDE7Ci0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzdGxjLT5odyk7Ci0JfQotCi0JcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0ID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfQk9PVElORzsKLQlzdGxjLT5jaGFubmVsID0gMTsKLQotCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOwotCi0JcmV0ID0gc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0bGMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAwOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyMDAwKTsKLQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnN0bGMtPmZ3X2NvbXAsCi0JCQkJCQkJICAgIHRpbWVvdXQpOwotCWlmICghdGltZW91dCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgYm9vdCBmYWlsZWQiKTsKLQkJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCQlyZXQgPSAtMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQk9PVCwgImZpcm13YXJlIGJvb3RlZCIpOwotCi0JLyogRklYTUU6IHNob3VsZCB3ZSB0YWtlIG11dGV4IGp1c3QgYWZ0ZXIgd2FpdF9mb3JfY29tcGxldGlvbigpPyAqLwotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOwotCi1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOwotCi0Jc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCi0JLyogRklYTUU6IG1ha2Ugc3VyZSB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBjb21wbGV0ZWQgKi8KLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0Jc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0bGMpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfT0ZGOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JbWVtY3B5KHN0bGMtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCXN0bGMtPmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZTsKLQlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOwotCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOwotCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7Ci0KLQlpZiAoKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICE9IHN0bGMtPnBzbSkgewotCQlzdGxjLT5wc20gPSBody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTOwotCQlpZiAoc3RsYy0+YXNzb2NpYXRlZCkgewotCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQkqdG90YWxfZmxhZ3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCi0JCQkJCSB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQltZW1jcHkoc3RsYy0+YnNzaWQsIGluZm8tPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJc3RsYy0+YXNzb2NpYXRlZCA9IGluZm8tPmFzc29jOwotCQlpZiAoaW5mby0+YXNzb2MpCi0JCQlzdGxjLT5haWQgPSBpbmZvLT5haWQ7Ci0JCWVsc2UKLQkJCXN0bGMtPmFpZCA9IC0xOwotCi0JCWlmIChzdGxjLT5wc20pIHsKLQkJCXN0bGM0NXh4X3R4X3BzbShzdGxjLCBzdGxjLT5wc20pOwotCQkJc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RsYywgc3RsYy0+cHNtKTsKLQkJfQotCX0KLX0KLQotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgc3RsYzQ1eHhfcmF0ZXNbXSA9IHsKLQl7IC5iaXRyYXRlID0gMTAsICAuaHdfdmFsdWUgPSAwLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAwLCB9LAotCXsgLmJpdHJhdGUgPSAyMCwgIC5od192YWx1ZSA9IDEsICAgIC5od192YWx1ZV9zaG9ydCA9IDEsIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAgLmh3X3ZhbHVlID0gMiwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMiwgfSwKLQl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAzLCB9LAotCXsgLmJpdHJhdGUgPSA2MCwgIC5od192YWx1ZSA9IDQsICAgIC5od192YWx1ZV9zaG9ydCA9IDQsIH0sCi0JeyAuYml0cmF0ZSA9IDkwLCAgLmh3X3ZhbHVlID0gNSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNSwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA2LCB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsICAgIC5od192YWx1ZV9zaG9ydCA9IDcsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gOCwgfSwKLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA5LCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCAgIC5od192YWx1ZV9zaG9ydCA9IDEwLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCAgIC5od192YWx1ZV9zaG9ydCA9IDExLCB9LAotfTsKLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHN0bGM0NXh4X2NoYW5uZWxzW10gPSB7Ci0JeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKLQl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAotCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCi0JeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKLQl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAotCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCi0JeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKLQl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAotCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCi0JeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCi0JeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHN0bGM0NXh4X2JhbmRfMmdoeiA9IHsKLQkuY2hhbm5lbHMgPSBzdGxjNDV4eF9jaGFubmVscywKLQkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RsYzQ1eHhfY2hhbm5lbHMpLAotCS5iaXRyYXRlcyA9IHN0bGM0NXh4X3JhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShzdGxjNDV4eF9yYXRlcyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgc3RsYzQ1eHhfb3BzID0gewotCS5zdGFydCA9IHN0bGM0NXh4X29wX3N0YXJ0LAotCS5zdG9wID0gc3RsYzQ1eHhfb3Bfc3RvcCwKLQkuYWRkX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlLAotCS5jb25maWcgPSBzdGxjNDV4eF9vcF9jb25maWcsCi0JLmNvbmZpZ3VyZV9maWx0ZXIgPSBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyLAotCS50eCA9IHN0bGM0NXh4X29wX3R4LAotCS5ic3NfaW5mb19jaGFuZ2VkID0gc3RsYzQ1eHhfb3BfYnNzX2luZm9fY2hhbmdlZCwKLX07Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCS8qIEZJWE1FOiBTRVRfSUVFRTgwMjExX1BFUk1fQUREUigpIHJlcXVpcmVzIGRlZmF1bHRfbWFjX2FkZHIKLQkgICB0byBiZSBub24tY29uc3QgZm9yIHNvbWUgc3RyYW5nZSByZWFzb24gKi8KLQlzdGF0aWMgdTggZGVmYXVsdF9tYWNfYWRkcltFVEhfQUxFTl0gPSB7Ci0JCTB4MDAsIDB4MDIsIDB4ZWUsIDB4YzAsIDB4ZmYsIDB4ZWUKLQl9OwotCWludCByZXQ7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihzdGxjLT5odywgZGVmYXVsdF9tYWNfYWRkcik7Ci0KLQlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RsYy0+aHcpOwotCWlmIChyZXQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RsYzQ1eHhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzdGxjNDV4eCIsCi0JLmlkCQk9IC0xLAotCi0JLyogZGV2aWNlIG1vZGVsIGluc2lzdHMgdG8gaGF2ZSBhIHJlbGVhc2UgZnVuY3Rpb24gKi8KLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5yZWxlYXNlID0gc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2UsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHN0bGM0NXh4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQkvKiBtYWM4MDIxMSBhbGxvYyAqLwotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqc3RsYyksICZzdGxjNDV4eF9vcHMpOwotCWlmICghaHcpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogbWFjODAyMTEgY2xlYXJzIGh3LT5wcml2ICovCi0Jc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYy0+aHcgPSBodzsKLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdGxjKTsKLQlzdGxjLT5zcGkgPSBzcGk7Ci0KLQlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKLQlzcGktPm1heF9zcGVlZF9oeiA9IDI0MDAwMDAwOwotCi0JcmV0ID0gc3BpX3NldHVwKHNwaSk7Ci0JaWYgKHJldCA8IDApCi0JCXN0bGM0NXh4X2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IHBvd2VyIik7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBpcnEiKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiaXJxIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KHN0bGM0NXh4X2dwaW9faXJxKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwKLQkJCSAgc3RsYzQ1eHhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic3RsYzQ1eHgiLAotCQkJICBzdGxjLT5zcGkpOwotCWlmIChyZXQgPCAwKQotCQkvKiBGSVhNRTogaGFuZGxlIHRoZSBlcnJvciAqLwotCQlzdGxjNDV4eF9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQiKTsKLQotCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCi0JCSAgICAgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0JZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKLQlpZiAocmV0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJDb3VsZG4ndCByZWdpc3RlciB3bGFuX29tYXAgZGV2aWNlLiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlkZXZfc2V0X2RydmRhdGEoJnN0bGM0NXh4X2RldmljZS5kZXYsIHN0bGMpOwotCi0JSU5JVF9XT1JLKCZzdGxjLT53b3JrLCBzdGxjNDV4eF93b3JrKTsKLQlJTklUX1dPUksoJnN0bGMtPndvcmtfcmVzZXQsIHN0bGM0NXh4X3dvcmtfcmVzZXQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZzdGxjLT53b3JrX3R4X3RpbWVvdXQsIHN0bGM0NXh4X3dvcmtfdHhfdGltZW91dCk7Ci0JbXV0ZXhfaW5pdCgmc3RsYy0+bXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmc3RsYy0+ZndfY29tcCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0bGMtPnR4X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eGJ1ZmZlcik7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4X3BlbmRpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9zZW50KTsKLQotCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07Ci0JLyogZm91ciBieXRlcyBmb3IgcGFkZGluZyAqLwotCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3Qgc19sbV9kYXRhX291dCkgKyA0OwotCi0JLyogdW5pdCB1cyAqLwotCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsKLQotCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwotCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmc3RsYzQ1eHhfYmFuZF8yZ2h6OwotCi0JU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGRlZmF1bHRfY2FsX3Jzc2kpICE9IFJTU0lfQ0FMX0FSUkFZX0xFTik7Ci0JQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9jaGFubmVscykgIT0gQ0hBTk5FTF9DQUxfQVJSQVlfTEVOKTsKLQotCXN0bGMtPmNhbF9yc3NpID0ga21lbWR1cChkZWZhdWx0X2NhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sCi0JCQkJIEdGUF9LRVJORUwpOwotCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoZGVmYXVsdF9jYWxfY2hhbm5lbHMsCi0JCQkJICAgICBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCi0JCQkJICAgICBHRlBfS0VSTkVMKTsKLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9yc3NpKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGNhbF9yc3NpIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9jaGFubmVscyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfY2hhbm5lbHMiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfdHhfYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIHR4X2J1ZiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBzdGxjNDV4eF9yZWdpc3Rlcl9tYWM4MDIxMShzdGxjKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9pbmZvKCJ2IiBEUklWRVJfVkVSU0lPTiAiIGxvYWRlZCIpOwotCi0Jc3RsYzQ1eHhfaW5mbygiY29uZmlnIGJ1ZmZlciAweCV4LTB4JXgiLAotCQkgICAgICBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIEZJUk1XQVJFX0NPTkZJR19FTkQpOwotCXN0bGM0NXh4X2luZm8oInR4IDB4JXgtMHgleCwgcnggMHgleC0weCV4IiwKLQkJICAgICAgRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1RYQlVGRkVSX0VORCwKLQkJICAgICAgRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1JYQlVGRkVSX0VORCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzdGxjNDV4eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZzdGxjNDV4eF9kZXZpY2UpOwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoc3RsYy0+aHcpOwotCi0JZnJlZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLCBzcGkpOwotCi0JZ3Bpb19mcmVlKHN0bGM0NXh4X2dwaW9fcG93ZXIpOwotCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX2lycSk7Ci0KLQkvKiBGSVhNRTogZnJlZSBjYWxfY2hhbm5lbHMgYW5kIGNhbF9yc3NpPyAqLwotCi0Ja2ZyZWUoc3RsYy0+ZncpOwotCi0JbXV0ZXhfZGVzdHJveSgmc3RsYy0+bXV0ZXgpOwotCi0JLyogZnJlZXMgYWxzbyBzdGxjICovCi0JaWVlZTgwMjExX2ZyZWVfaHcoc3RsYy0+aHcpOwotCXN0bGMgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHN0bGM0NXh4X3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLyogdXNlIGN4MzExMHggbmFtZSBiZWNhdXNlIGJvYXJkLW44MDAuYyB1c2VzIHRoYXQgZm9yIHRoZQotCQkgKiBTUEkgcG9ydCAqLwotCQkubmFtZQkJPSAiY3gzMTEweCIsCi0JCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCX0sCi0KLQkucHJvYmUJCT0gc3RsYzQ1eHhfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzdGxjNDV4eF9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3RsYzQ1eHhfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBkcml2ZXI6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHN0bGM0NXh4X2V4aXQodm9pZCkKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnN0bGM0NXh4X3NwaV9kcml2ZXIpOwotCi0Jc3RsYzQ1eHhfaW5mbygidW5sb2FkZWQiKTsKLX0KLQotbW9kdWxlX2luaXQoc3RsYzQ1eHhfaW5pdCk7Ci1tb2R1bGVfZXhpdChzdGxjNDV4eF9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7Ci1NT0RVTEVfQUxJQVMoInNwaTpjeDMxMTB4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzk2YmJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJzdGxjNDV4eF9sbWFjLmgiCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUgInN0bGM0NXh4IgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xLjMiCi0KLSNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCi0KLWVudW0gewotCURFQlVHX05PTkUgPSAwLAotCURFQlVHX0ZVTkMgPSAxIDw8IDAsCi0JREVCVUdfSVJRID0gMSA8PCAxLAotCURFQlVHX0JIID0gMSA8PCAyLAotCURFQlVHX1JYID0gMSA8PCAzLAotCURFQlVHX1JYX0NPTlRFTlQgPSAxIDw8IDUsCi0JREVCVUdfVFggPSAxIDw8IDYsCi0JREVCVUdfVFhfQ09OVEVOVCA9IDEgPDwgOCwKLQlERUJVR19UWEJVRkZFUiA9IDEgPDwgOSwKLQlERUJVR19RVUVVRSA9IDEgPDwgMTAsCi0JREVCVUdfQk9PVCA9IDEgPDwgMTEsCi0JREVCVUdfUFNNID0gMSA8PCAxMiwKLQlERUJVR19BTEwgPSB+MCwKLX07Ci0KLSNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfTk9ORQotLyogI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19BTEwgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfUlggfCBERUJVR19JUlEpICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgc3RsYzQ1eHhfd2FybmluZyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZHVtcChsZXZlbCwgYnVmLCBsZW4pCQlcCi0JZG8geyBcCi0JCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCi0JCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBcCi0JCQkJICAgICAgIDE2LCAxLCBidWYsIGxlbiwgMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBNQUMyU1RSKGEpICgoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdKQotI2RlZmluZSBNQUNTVFIgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgotCi0vKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KLSNkZWZpbmUgQUREUl9SRUFEX0JJVF8xNSAgMHg4MDAwCi0KLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMgICAgIDB4MDAKLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkgICAgMHgwNAotCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyAgICAweDA4Ci0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCSAgICAweDBjCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkgICAgMHgxMAotCi0jZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEgICAJICAgIDB4MTQKLSNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMiAgIAkgICAgMHgxOAotCi0vKiBoaWdoIHdvcmQgKi8KLSNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCAgICAgIDB4MjYKLQotI2RlZmluZSBTUElfQURSU19ETUFfREFUQSAgICAgIAkgICAgMHgyOAotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMICAgICAweDJjCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4gICAgICAweDJlCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFICAgICAweDMwCi0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCAgICAgIDB4MzQKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOICAgICAgIDB4MzYKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRSAgICAgIDB4MzgKLQotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgMHg4MDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEICAweDQwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCAgICAgIDB4MjAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgICAgMHgxMDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4gICAweDA4MDAKLQotI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFICAgMHgwMDAxCi0jZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRSAgICAweDAwMDEKLSNkZWZpbmUgSE9TVF9BTExPV0VEICAgICAgICAgICAgICAgICgxIDw8IDcpCi0KLSNkZWZpbmUgRklSTVdBUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKLQotI2RlZmluZSBTUElfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgICAgLyogbXNlYyAqLwotCi0jZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAzMgotCi0jZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAzMjc2NwotCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLQotI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotCi0vKiBjbGVhciB0byBzZW5kICovCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9DVFMJICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLQotLyogZGF0YSByZWFkeSAqLwotI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotCi0jZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCBcCi0JKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQotCi0jZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCi0KLS8qIFRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZGl2aWRlZCBpbnRvIHRocmVlIGFyZWFzOgotICoKLSAqIG8gY29uZmlnIGFyZWEgKGZvciBjb250cm9sIGNvbW1hbmRzKQotICogbyB0eCBidWZmZXIKLSAqIG8gcnggYnVmZmVyCi0gKi8KLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX1NUQVJUIDB4MjAyMDAKLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0VORCAweDI3YzYwCi0jZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQpCi0jZGVmaW5lIEZJUk1XQVJFX01UVSAzMjQwCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTiAxMDI0Ci0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19TVEFSVCBGSVJNV0FSRV9CVUZGRVJfU1RBUlQKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0xFTiAoc2l6ZW9mKHN0cnVjdCBzX2xtX2NvbnRyb2wpICsgXAotCQkJICAgICBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19FTkQgKEZJUk1XQVJFX0NPTkZJR19TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gKDUgKiBGSVJNV0FSRV9NVFUgKyAxMDI0KQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfRU5EIChGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCArIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfTEVOIC0gRklSTVdBUkVfQ09ORklHX0xFTiAtIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0VORCAoRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKyBcCi0JCQkgICAgICAgRklSTVdBUkVfVFhCVUZGRVJfTEVOIC0gMSkKLQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgMTAwCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVIgNAotCi0vKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCi0jZGVmaW5lIE1BWF9GUkFNRV9MRU4gMjUwMAotCi0vKiB1bml0IGlzIG1zICovCi0jZGVmaW5lIFRYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKLSNkZWZpbmUgVFhfVElNRU9VVCA0MDAwCi0KLSNkZWZpbmUgU1VQUE9SVEVEX0NIQU5ORUxTIDEzCi0KLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiBvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgYnJhdGVtYXNrKSAtIFwgKi8KLS8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgY2hhbm5lbCkgKi8KLSNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIDI5MgotI2RlZmluZSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIENIQU5ORUxfQ0FMX0xFTikKLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIFJTU0lfQ0FMX0xFTiBzaXplb2Yoc3RydWN0IHNfbG1vX3NjYW4pIC0gXCAqLwotLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCByc3NpY2FsKSAqLwotI2RlZmluZSBSU1NJX0NBTF9MRU4gOAotI2RlZmluZSBSU1NJX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIFJTU0lfQ0FMX0xFTikKLQotc3RydWN0IHNfZG1hX3JlZ3MgewotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQl1bnNpZ25lZCBzaG9ydCBsZW47Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotfTsKLQotc3RydWN0IHN0bGM0NXh4X2llX3RpbSB7Ci0JdTggZHRpbV9jb3VudDsKLQl1OCBkdGltX3BlcmlvZDsKLQl1OCBibWFwX2NvbnRyb2w7Ci0JdTggcHZibWFwWzI1MV07Ci19OwotCi1zdHJ1Y3QgdHhidWZmZXIgewotCS8qIGNhbiBiZSByZW1vdmVkIHdoZW4gc3dpdGNoZWQgdG8gc2tiIHF1ZXVlICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfbGlzdDsKLQotCWludCBzdGFydDsKLQlpbnQgZnJhbWVfc3RhcnQ7Ci0JaW50IGVuZDsKLQotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIGhhbmRsZTsKLQotCWJvb2wgc3RhdHVzX25lZWRlZDsKLQotCWludCBoZWFkZXJfbGVuOwotCi0JLyogdW5pdCBqaWZmaWVzICovCi0JdW5zaWduZWQgbG9uZyBsaWZldGltZTsKLX07Ci0KLWVudW0gZndfc3RhdGUgewotCUZXX1NUQVRFX09GRiwKLQlGV19TVEFURV9CT09USU5HLAotCUZXX1NUQVRFX1JFQURZLAotCUZXX1NUQVRFX1JFU0VULAotCUZXX1NUQVRFX1JFU0VUVElORywKLX07Ci0KLXN0cnVjdCBzdGxjNDV4eCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19yZXNldDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcmtfdHhfdGltZW91dDsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKLQotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQlpbnQgY2hhbm5lbDsKLQotCXU4ICpjYWxfcnNzaTsKLQl1OCAqY2FsX2NoYW5uZWxzOwotCi0JZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKLQotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eGJ1ZmZlcjsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlpbnQgdHhfcXVldWVfc3RvcHBlZDsKLQotCS8qIHByb3RlY3RlZCBieSBtdXRleCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhfc2VudDsKLQotCWludCB0eF9mcmFtZXM7Ci0KLQl1OCAqZnc7Ci0JaW50IGZ3X2xlbjsKLQotCWJvb2wgcHNtOwotCWJvb2wgYXNzb2NpYXRlZDsKLQlpbnQgYWlkOwotCWJvb2wgcHNwb2xsaW5nOwotfTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1ZGI4MDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICBUaGlzIGlzIHRoZSBMTUFDIEFQSSBpbnRlcmZhY2UgaGVhZGVyIGZpbGUgZm9yIFNUTEM0NTYwLiAgICAgICAgCSoKLSogIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICAgICoKLSogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICoKLSogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCSoKLSogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICoKLSogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCSoKLSogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICoKLSogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICoKLSogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19sbWFjX2hfXwotI2RlZmluZSBfX2xtYWNfaF9fCi0KLSNkZWZpbmUgTE1fVE9QX1ZBUklBTlQgICAgICAweDA1MDYKLSNkZWZpbmUgTE1fQk9UVE9NX1ZBUklBTlQgICAweDA1MDYKLQotLyoKLSAqIExNQUMgLSBVTUFDIGludGVyZmFjZSBkZWZpbml0aW9uOgotICovCi0KLSNkZWZpbmUgTE1fRkxBR19DT05UUk9MICAgICAweDgwMDAKLSNkZWZpbmUgTE1fRkxBR19BTElHTiAgICAgICAweDQwMDAKLQotI2RlZmluZSBMTV9DVFJMX09QU0VUICAgICAgIDB4MDAwMQotCi0jZGVmaW5lIExNX09VVF9QUk9NSVNDICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX09VVF9USU1FU1RBTVAgICAgMHgwMDAyCi0jZGVmaW5lIExNX09VVF9TRVFOUiAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX09VVF9CVVJTVCAgICAgICAgMHgwMDEwCi0jZGVmaW5lIExNX09VVF9OT0NBTkNFTCAgICAgMHgwMDIwCi0jZGVmaW5lIExNX09VVF9DTEVBUlRJTSAgICAgMHgwMDQwCi0jZGVmaW5lIExNX09VVF9ISVRDSEhJS0UgICAgMHgwMDgwCi0jZGVmaW5lIExNX09VVF9DT01QUkVTUyAgICAgMHgwMTAwCi0jZGVmaW5lIExNX09VVF9DT05DQVQgICAgICAgMHgwMjAwCi0jZGVmaW5lIExNX09VVF9QQ1NfQUNDRVBUICAgMHgwNDAwCi0jZGVmaW5lIExNX09VVF9XQUlURU9TUCAgICAgMHgwODAwCi0KLQotI2RlZmluZSBMTV9BTE9GVF9TUCAgICAgICAgIDB4MTAKLSNkZWZpbmUgTE1fQUxPRlRfQ1RTICAgICAgICAweDIwCi0jZGVmaW5lIExNX0FMT0ZUX1JUUyAgICAgICAgMHg0MAotI2RlZmluZSBMTV9BTE9GVF9NQVNLICAgICAgIDB4MWYKLSNkZWZpbmUgTE1fQUxPRlRfUkFURSAgICAgICAweDBmCi0KLSNkZWZpbmUgTE1fSU5fRkNTX0dPT0QgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fSU5fTUFUQ0hfTUFDICAgICAweDAwMDIKLSNkZWZpbmUgTE1fSU5fTUNCQyAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fSU5fQkVBQ09OICAgICAgICAweDAwMDgKLSNkZWZpbmUgTE1fSU5fTUFUQ0hfQlNTICAgICAweDAwMTAKLSNkZWZpbmUgTE1fSU5fQkNBU1RfQlNTICAgICAweDAwMjAKLSNkZWZpbmUgTE1fSU5fREFUQSAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fSU5fVFJVTkNBVEVEICAgICAweDAwODAKLQotI2RlZmluZSBMTV9JTl9UUkFOU1BBUkVOVCAgIDB4MDIwMAotCi0jZGVmaW5lIExNX1FVRVVFX0JFQUNPTiAgICAgMAotI2RlZmluZSBMTV9RVUVVRV9TQ0FOICAgICAgIDEKLSNkZWZpbmUgTE1fUVVFVUVfTUdUICAgICAgICAyCi0jZGVmaW5lIExNX1FVRVVFX01DQkMgICAgICAgMwotI2RlZmluZSBMTV9RVUVVRV9EQVRBICAgICAgIDQKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTAgICAgICA0Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEExICAgICAgNQotI2RlZmluZSBMTV9RVUVVRV9EQVRBMiAgICAgIDYKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTMgICAgICA3Ci0KLSNkZWZpbmUgTE1fU0VUVVBfSU5GUkEgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1NFVFVQX0lCU1MgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9TRVRVUF9UUkFOU1BBUkVOVCAgICAweDAwMDgKLSNkZWZpbmUgTE1fU0VUVVBfUFJPTUlTQ1VPVVMgICAgMHgwMDEwCi0jZGVmaW5lIExNX1NFVFVQX0hJQkVSTkFURSAgICAgIDB4MDAyMAotI2RlZmluZSBMTV9TRVRVUF9OT0FDSyAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fU0VUVVBfUlhfRElTQUJMRUQgICAgMHgwMDgwCi0KLSNkZWZpbmUgTE1fQU5URU5OQV8wICAgICAgICAgICAgMAotI2RlZmluZSBMTV9BTlRFTk5BXzEgICAgICAgICAgICAxCi0jZGVmaW5lIExNX0FOVEVOTkFfRElWRVJTSVRZICAgIDIKLQotI2RlZmluZSBMTV9UWF9GQUlMRUQgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fVFhfUFNNICAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1RYX1BTTV9DQU5DRUxMRUQJMHgwMDA0Ci0KLSNkZWZpbmUgTE1fU0NBTl9FWElUICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1NDQU5fVFJBUCAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9TQ0FOX0FDVElWRSAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fU0NBTl9GSUxURVIgICAgICAgICAgMHgwMDA4Ci0KLSNkZWZpbmUgTE1fUFNNICAgICAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1BTTV9EVElNICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9QU01fTUNCQyAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fUFNNX0NIRUNLU1VNICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIExNX1BTTV9TS0lQX01PUkVfREFUQSAgIDB4MDAxMAotI2RlZmluZSBMTV9QU01fQkVBQ09OX1RJTUVPVVQgICAweDAwMjAKLSNkZWZpbmUgTE1fUFNNX0hGT1NMRUVQICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX1BTTV9BVVRPU1dJVENIX1NMRUVQIDB4MDA4MAotI2RlZmluZQlMTV9QU01fTFBJVAkJMHgwMTAwCi0jZGVmaW5lIExNX1BTTV9CRl9VQ0FTVF9TS0lQICAgIDB4MDIwMAotI2RlZmluZSBMTV9QU01fQkZfTUNBU1RfU0tJUCAgICAweDA0MDAKLQotLyogaGZvc2xlZXAgKi8KLSNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9NQVNLIChMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCB8IExNX1BTTV9IRk9TTEVFUCkKLSNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9TSElGVCAgICAgICA2Ci0vKiBoZm9zbGVlcGVuZCAqLwotI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX01BU0sgKExNX1BTTV9CRl9NQ0FTVF9TS0lQIHwgTE1fUFNNX0JGX1VDQVNUX1NLSVApCi0jZGVmaW5lIExNX1BTTV9CRl9PUFRJT05fU0hJRlQgIDkKLQotCi0jZGVmaW5lIExNX1BSSVZBQ0NfV0VQICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTE1fUFJJVkFDQ19US0lQICAgICAgICAgMHgwMgotI2RlZmluZSBMTV9QUklWQUNDX01JQ0hBRUwgICAgICAweDA0Ci0jZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX0tQICAgICAgIDB4MDgKLSNkZWZpbmUgTE1fUFJJVkFDQ19DQ1hfTUlDICAgICAgMHgxMAotI2RlZmluZSBMTV9QUklWQUNDX0FFU19DQ01QICAgICAweDIwCi0KLS8qIHNpemUgb2Ygc19sbV9kZXNjciBpbiB3b3JkcyAqLwotI2RlZmluZSBMTV9ERVNDUl9TSVpFX1dPUkRTICAgICAxMQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotZW51bSB7Ci0gICAgTE1fTU9ERV9DTElFTlQgPSAwLAotICAgIExNX01PREVfQVAKLX07Ci0KLXN0cnVjdCBzX2xtX2Rlc2NyIHsKLSAgICB1aW50MTZfdCBtb2RlczsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MzJfdCBidWZmZXJfc3RhcnQ7Ci0gICAgdWludDMyX3QgYnVmZmVyX2VuZDsKLSAgICB1aW50OF90IGhlYWRlcjsKLSAgICB1aW50OF90IHRyYWlsZXI7Ci0gICAgdWludDhfdCB0eF9xdWV1ZXM7Ci0gICAgdWludDhfdCB0eF9kZXB0aDsKLSAgICB1aW50OF90IHByaXZhY3k7Ci0gICAgdWludDhfdCByeF9rZXljYWNoZTsKLSAgICB1aW50OF90IHRpbV9zaXplOwotICAgIHVpbnQ4X3QgcGFkMTsKLSAgICB1aW50OF90IHJhdGVzWzE2XTsKLSAgICB1aW50MzJfdCBsaW5rOwotCXVpbnQxNl90IG10dTsKLX07Ci0KLQotc3RydWN0IHNfbG1fY29udHJvbCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQzMl90IGhhbmRsZTsKLSAgICB1aW50MTZfdCBvaWQ7Ci0gICAgdWludDE2X3QgcGFkOwotICAgIC8qIHVpbnQ4X3QgZGF0YVtdOyAqLwotfTsKLQotZW51bSB7Ci0gICAgTE1fUFJJVl9OT05FID0gMCwKLSAgICBMTV9QUklWX1dFUCwKLSAgICBMTV9QUklWX1RLSVAsCi0gICAgTE1fUFJJVl9US0lQTUlDSEFFTCwKLSAgICBMTV9QUklWX0NDWF9XRVBNSUMsCi0gICAgTE1fUFJJVl9DQ1hfS1BNSUMsCi0gICAgTE1fUFJJVl9DQ1hfS1AsCi0gICAgTE1fUFJJVl9BRVNfQ0NNUAotfTsKLQotZW51bSB7Ci0gICAgTE1fREVDUllQVF9OT05FLAotICAgIExNX0RFQ1JZUFRfT0ssCi0gICAgTE1fREVDUllQVF9OT0tFWSwKLSAgICBMTV9ERUNSWVBUX05PTUlDSEFFTCwKLSAgICBMTV9ERUNSWVBUX05PQ0tJUE1JQywKLSAgICBMTV9ERUNSWVBUX0ZBSUxfV0VQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9US0lQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9NSUNIQUVMLAotICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQS1AsCi0gICAgTE1fREVDUllQVF9GQUlMX0NLSVBNSUMsCi0gICAgTE1fREVDUllQVF9GQUlMX0FFU0NDTVAKLX07Ci0KLXN0cnVjdCBzX2xtX2RhdGFfb3V0IHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDMyX3QgaGFuZGxlOwotICAgIHVpbnQxNl90IGFpZDsKLSAgICB1aW50OF90IHJ0c19yZXRyaWVzOwotICAgIHVpbnQ4X3QgcmV0cmllczsKLSAgICB1aW50OF90IGFsb2Z0WzhdOwotICAgIHVpbnQ4X3QgYWxvZnRfY3RybDsKLSAgICB1aW50OF90IGNyeXB0X29mZnNldDsKLSAgICB1aW50OF90IGtleXR5cGU7Ci0gICAgdWludDhfdCBrZXlsZW47Ci0gICAgdWludDhfdCBrZXlbMTZdOwotICAgIHVpbnQ4X3QgcXVldWU7Ci0gICAgdWludDhfdCBiYWNrbG9nOwotICAgIHVpbnQxNl90IGR1cmF0aW9uc1s0XTsKLSAgICB1aW50OF90IGFudGVubmE7Ci0gICAgdWludDhfdCBjdHM7Ci0gICAgaW50MTZfdCBwb3dlcjsKLSAgICB1aW50OF90IHBhZFsyXTsKLSAgICAvKnVpbnQ4X3QgZGF0YVtdOyovCi19OwotCi0jZGVmaW5lIExNX1JDUElfSU5WQUxJRCAgICAgICAgICgweGZmKQotCi1zdHJ1Y3Qgc19sbV9kYXRhX2luIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDE2X3QgZnJlcXVlbmN5OwotICAgIHVpbnQ4X3QgYW50ZW5uYTsKLSAgICB1aW50OF90IHJhdGU7Ci0gICAgdWludDhfdCByY3BpOwotICAgIHVpbnQ4X3Qgc3E7Ci0gICAgdWludDhfdCBkZWNyeXB0OwotICAgIHVpbnQ4X3QgcnNzaV9yYXc7Ci0gICAgdWludDMyX3QgY2xvY2tbMl07Ci0gICAgLyp1aW50OF90IGRhdGFbXTsqLwotfTsKLQotdW5pb24gdV9sbV9kYXRhIHsKLSAgICBzdHJ1Y3Qgc19sbV9kYXRhX291dCBvdXQ7Ci0gICAgc3RydWN0IHNfbG1fZGF0YV9pbiBpbjsKLX07Ci0KLWVudW0gewotICAgIExNX09JRF9TRVRVUAk9IDAsCi0gICAgTE1fT0lEX1NDQU4JCT0gMSwKLSAgICBMTV9PSURfVFJBUAkJPSAyLAotICAgIExNX09JRF9FRENGCQk9IDMsCi0gICAgTE1fT0lEX0tFWUNBQ0hFCT0gNCwKLSAgICBMTV9PSURfUFNNCQk9IDYsCi0gICAgTE1fT0lEX1RYQ0FOQ0VMCT0gNywKLSAgICBMTV9PSURfVFgJCT0gOCwKLSAgICBMTV9PSURfQlVSU1QJPSA5LAotICAgIExNX09JRF9TVEFUUwk9IDEwLAotICAgIExNX09JRF9MRUQJCT0gMTMsCi0gICAgTE1fT0lEX1RJTUVSCT0gMTUsCi0gICAgTE1fT0lEX05BVgkJPSAyMCwKLSAgICBMTV9PSURfUENTCQk9IDIyLAotICAgIExNX09JRF9CVF9CQUxBTkNFUiAgPSAyOCwKLSAgICBMTV9PSURfR1JPVVBfQUREUkVTU19UQUJMRQk9IDMwLAotICAgIExNX09JRF9BUlBUQUJMRSAgICAgPSAzMSwKLSAgICBMTV9PSURfQlRfT1BUSU9OUyA9IDM1Ci19OwotCi1lbnVtIHsKLSAgICBMTV9GUk9OVEVORF9VTktOT1dOID0gMCwKLSAgICBMTV9GUk9OVEVORF9EVUVUVEUzLAotICAgIExNX0ZST05URU5EX0RVRVRURTIsCi0gICAgTE1fRlJPTlRFTkRfRlJJU0JFRSwKLSAgICBMTV9GUk9OVEVORF9DUk9TU0JPVywKLSAgICBMTV9GUk9OVEVORF9MT05HQk9XCi19OwotCi0KLSNkZWZpbmUgSU5WQUxJRF9MUEZfQkFORFdJRFRIICAgMHhmZmZmCi0jZGVmaW5lIElOVkFMSURfT1NDX1NUQVJUX0RFTEFZIDB4ZmZmZgotCi1zdHJ1Y3Qgc19sbW9fc2V0dXAgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQ4X3QgIG1hY2FkZHJbNl07Ci0gICAgdWludDhfdCAgYnNzaWRbNl07Ci0gICAgdWludDhfdCAgYW50ZW5uYTsKLSAgICB1aW50OF90ICByeF9hbGlnbjsKLSAgICB1aW50MzJfdCByeF9idWZmZXI7Ci0gICAgdWludDE2X3QgcnhfbXR1OwotICAgIHVpbnQxNl90IGZyb250ZW5kOwotICAgIHVpbnQxNl90IHRpbWVvdXQ7Ci0gICAgdWludDE2X3QgdHJ1bmNhdGU7Ci0gICAgdWludDMyX3QgYnJhdGVtYXNrOwotICAgIHVpbnQ4X3QgIHNic3Nfb2Zmc2V0OwotICAgIHVpbnQ4X3QgIG1jYXN0X3dpbmRvdzsKLSAgICB1aW50OF90ICByeF9yc3NpX3RocmVzaG9sZDsKLSAgICB1aW50OF90ICByeF9lZF90aHJlc2hvbGQ7Ci0gICAgdWludDMyX3QgcmVmX2Nsb2NrOwotICAgIHVpbnQxNl90IGxwZl9iYW5kd2lkdGg7Ci0gICAgdWludDE2X3Qgb3NjX3N0YXJ0X2RlbGF5OwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fc2NhbiB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgZHdlbGw7Ci0gICAgdWludDhfdCBjaGFubmVsWzI5Ml07Ci0gICAgdWludDMyX3QgYnJhdGVtYXNrOwotICAgIHVpbnQ4X3QgIGFsb2Z0WzhdOwotICAgIHVpbnQ4X3QgIHJzc2ljYWxbOF07Ci19OwotCi0KLWVudW0gewotICAgIExNX1RSQVBfU0NBTiA9IDAsCi0gICAgTE1fVFJBUF9USU1FUiwKLSAgICBMTV9UUkFQX0JFQUNPTl9UWCwKLSAgICBMTV9UUkFQX0ZBQV9SQURJT19PTiwKLSAgICBMTV9UUkFQX0ZBQV9SQURJT19PRkYsCi0gICAgTE1fVFJBUF9SQURBUiwKLSAgICBMTV9UUkFQX05PX0JFQUNPTiwKLSAgICBMTV9UUkFQX1RCVFQsCi0gICAgTE1fVFJBUF9TQ09fRU5URVIsCi0gICAgTE1fVFJBUF9TQ09fRVhJVAotfTsKLQotc3RydWN0IHNfbG1vX3RyYXAgewotICAgIHVpbnQxNl90IGV2ZW50OwotICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKLX07Ci0KLXN0cnVjdCBzX2xtb190aW1lciB7Ci0gICAgdWludDMyX3QgaW50ZXJ2YWw7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fbmF2IHsKLSAgICB1aW50MzJfdCBwZXJpb2Q7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlOwotCi1zdHJ1Y3Qgc19sbW9fZWRjZiB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgc2xvdHRpbWU7Ci0gICAgdWludDhfdCAgc2lmczsKLSAgICB1aW50OF90ICBlb2ZwYWQ7Ci0gICAgc3RydWN0IHNfbG1vX2VkY2ZfcXVldWUgewotCSAgICB1aW50OF90ICBhaWZzOwotCSAgICB1aW50OF90ICBwYWQwOwotCSAgICB1aW50MTZfdCBjd21pbjsKLQkgICAgdWludDE2X3QgY3dtYXg7Ci0JICAgIHVpbnQxNl90IHR4b3A7Ci0gICAgfSBxdWV1ZXNbOF07Ci0gICAgdWludDhfdCAgbWFwcGluZ1s0XTsKLSAgICB1aW50MTZfdCBtYXhidXJzdDsKLSAgICB1aW50MTZfdCByb3VuZF90cmlwX2RlbGF5OwotfTsKLQotc3RydWN0IHNfbG1vX2tleWNhY2hlIHsKLSAgICB1aW50OF90IGVudHJ5OwotICAgIHVpbnQ4X3Qga2V5aWQ7Ci0gICAgdWludDhfdCBhZGRyZXNzWzZdOwotICAgIHVpbnQ4X3QgcGFkWzJdOwotICAgIHVpbnQ4X3Qga2V5dHlwZTsKLSAgICB1aW50OF90IGtleWxlbjsKLSAgICB1aW50OF90IGtleVsyNF07Ci19OwotCi0KLXN0cnVjdCBzX2xtX2ludGVydmFsOwotCi1zdHJ1Y3Qgc19sbW9fcHNtIHsKLSAgICB1aW50MTZfdCAgICBmbGFnczsKLSAgICB1aW50MTZfdCAgICBhaWQ7Ci0gICAgc3RydWN0IHNfbG1faW50ZXJ2YWwgewotCSAgICB1aW50MTZfdCBpbnRlcnZhbDsKLQkgICAgdWludDE2X3QgcGVyaW9kczsKLSAgICB9IGludGVydmFsc1s0XTsKLSAgICAvKiB1aW50MTZfdCAgICBwYWQ7ICovCi0gICAgdWludDhfdCAgICAgYmVhY29uX3JjcGlfc2tpcF9tYXg7Ci0gICAgdWludDhfdCAgICAgcmNwaV9kZWx0YV90aHJlc2hvbGQ7Ci0gICAgdWludDhfdCAgICAgbnI7Ci0gICAgdWludDhfdCAgICAgZXhjbHVkZVsxXTsKLX07Ci0KLSNkZWZpbmUgTUNfRklMVEVSX0FERFJFU1NfTlVNICAgNAotCi1zdHJ1Y3Qgc19sbW9fZ3JvdXBfYWRkcmVzc190YWJsZSB7Ci0gICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKLSAgICB1aW50MTZfdCAgICBudW1fYWRkcmVzczsKLSAgICB1aW50OF90ICAgICBtYWNhZGRyX2xpc3RbTUNfRklMVEVSX0FERFJFU1NfTlVNXVs2XTsKLX07Ci0KLXN0cnVjdCBzX2xtb190eGNhbmNlbCB7Ci0gICAgdWludDMyX3QgYWRkcmVzc1sxXTsKLX07Ci0KLQotc3RydWN0IHNfbG1vX3R4IHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICByZXRyaWVzOwotICAgIHVpbnQ4X3QgIHJjcGk7Ci0gICAgdWludDhfdCAgc3E7Ci0gICAgdWludDE2X3Qgc2VxY3RybDsKLSAgICB1aW50OF90ICBhbnRlbm5hOwotICAgIHVpbnQ4X3QgIHBhZDsKLX07Ci0KLXN0cnVjdCBzX2xtb19idXJzdCB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgcXVldWU7Ci0gICAgdWludDhfdCAgYmFja2xvZzsKLSAgICB1aW50OF90ICBwYWQ7Ci0gICAgdWludDE2X3QgZHVyYXRpb25zWzMyXTsKLX07Ci0KLXN0cnVjdCBzX2xtb19zdGF0cyB7Ci0gICAgdWludDMyX3QgdmFsaWQ7Ci0gICAgdWludDMyX3QgZmNzOwotICAgIHVpbnQzMl90IGFib3J0OwotICAgIHVpbnQzMl90IHBoeWFib3J0OwotICAgIHVpbnQzMl90IHJ0c19zdWNjZXNzOwotICAgIHVpbnQzMl90IHJ0c19mYWlsOwotICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKLSAgICB1aW50MzJfdCB0aW1lX3R4OwotICAgIHVpbnQzMl90IG5vaXNlZmxvb3I7Ci0gICAgdWludDMyX3Qgc2FtcGxlX25vaXNlWzhdOwotICAgIHVpbnQzMl90IHNhbXBsZV9jY2E7Ci0gICAgdWludDMyX3Qgc2FtcGxlX3R4OwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fbGVkIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBtYXNrWzJdOwotICAgIHVpbnQxNl90IGRlbGF5LypbMl0qLzsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2J0X2JhbGFuY2VyIHsKLSAgICB1aW50MTZfdCBwcmlvX3RocmVzaDsKLSAgICB1aW50MTZfdCBhY2xfdGhyZXNoOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fYXJwX3RhYmxlIHsKLSAgICB1aW50MTZfdCAgICBmaWx0ZXJfZW5hYmxlOwotICAgIHVpbnQzMl90ICAgIGlwYWRkcjsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfX2xtYWNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggM2QyYTg0Yy4uZTEzOWVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKaW5kZXggODk2MGZhOS4uMDBmZTA4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCmluZGV4IDdmOTZiY2EuLjA1MTg2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKQEAgLTEzMzIsNyArMTMzMiw2IEBACiAgICAgICAgIGZyZWVfbmV0ZGV2KHBEZXZpY2UtPmRldik7CiAgICAgfQogCi0Ja2ZyZWUocERldmljZSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2Rpc2Nvbm5lY3QzLi4gXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKaW5kZXggOTQwNDYwYy4uMTMyNjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFczNVVORAogCXRyaXN0YXRlICJJUzg5QzM1IFdMQU4gVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTiAmJiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgV2luYm9uZCBXSUZJIGNhcmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCA4OTUwNzI0Li4wNjcwODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTUxLDEwICs1MSwyNiBAQAogCS5uX2JpdHJhdGVzCT0gQVJSQVlfU0laRSh3YnNvZnRfcmF0ZXMpLAogfTsKIAorc3RhdGljIHZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCB1MTYgYmVhY29uX3BlcmlvZCkKK3sKKwl1MzIgdG1wOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm47CisKKwlwSHdEYXRhLT5CZWFjb25QZXJpb2QgPSBiZWFjb25fcGVyaW9kOworCXRtcCA9IHBId0RhdGEtPkJlYWNvblBlcmlvZCA8PCAxNjsKKwl0bXAgfD0gcEh3RGF0YS0+UHJvYmVEZWxheTsKKwlXYjM1UmVnX1dyaXRlKHBId0RhdGEsIDB4MDg0OCwgdG1wKTsKK30KKwogc3RhdGljIGludCB3YnNvZnRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0JcHJpbnRrKCJ3YnNvZnRfYWRkIGludGVyZmFjZSBjYWxsZWRcbiIpOworCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgY29uZi0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04MywxMCArOTksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBtY19jb3VudCwKKwkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJcmV0dXJuIG1jX2NvdW50OworfQorCiBzdGF0aWMgdm9pZCB3YnNvZnRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJCSAgICB1NjQgbXVsdGljYXN0KQogewogCXVuc2lnbmVkIGludCBuZXdfZmxhZ3M7CiAKQEAgLTk0LDcgKzExNiw3IEBACiAKIAlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQogCQluZXdfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTOwotCWVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtY19jb3VudCA+IDMyKSkKKwllbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobXVsdGljYXN0ID4gMzIpKQogCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwogCiAJZGV2LT5mbGFncyAmPSB+SUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKQEAgLTEzOCwxOSArMTYwLDYgQEAKIAlXYjM1UmVnX1dyaXRlKHBId0RhdGEsIDB4MDgyNCwgcmVnLT5NMjRfTWFjQ29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IGJlYWNvbl9wZXJpb2QpCi17Ci0JdTMyIHRtcDsKLQotCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKLQkJcmV0dXJuOwotCi0JcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKLQl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7Ci0JdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7Ci0JV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NDgsIHRtcCk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgQ2hhbkluZm8gY2hhbm5lbCkKIHsKQEAgLTI0NCw3ICsyNTMsNiBAQAogc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7CiAJQ2hhbkluZm8gY2g7CiAKIAlwcmludGsoIndic29mdF9jb25maWcgY2FsbGVkXG4iKTsKQEAgLTI1NCw3ICsyNjIsNiBAQAogCWNoLkNoYW5ObyA9IDE7CiAKIAloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCgmcHJpdi0+c0h3RGF0YSwgY2gpOwotCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgY29uZi0+YmVhY29uX2ludCk7CiAJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCZwcml2LT5zSHdEYXRhLCAxKTsKIAloYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cygmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCZwcml2LT5zSHdEYXRhLCAxKTsKQEAgLTI3Nyw2ICsyODQsNyBAQAogCS5hZGRfaW50ZXJmYWNlCQk9IHdic29mdF9hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Jzb2Z0X3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gd2Jzb2Z0X2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IHdic29mdF9nZXRfc3RhdHMsCiAJLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3R4X3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKaW5kZXggOTk1OWI2NS4uZjQ0Mjk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBSSVNNMl9VU0IKIAl0cmlzdGF0ZSAiUHJpc20yLjUvMyBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCisJZGVwZW5kcyBvbiBXTEFOICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSB3bGFuLW5nIHByaXNtIDIuNS8zIFVTQiBkcml2ZXIgZm9yIGEgd2lkZSByYW5nZSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA0ZTgzYzI5Li42ZjhkOGY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTE4MCwxNSArMTgwLDE1IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFRIRVJNQUxfVFJJUF9DUklUSUNBTDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWwiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWxcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX0hPVDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90Iik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdFxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfUEFTU0lWRToKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJwYXNzaXZlXG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9BQ1RJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmVcbiIpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd24iKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDAzZWZiMDYuLmU5NDEzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CkBAIC02NTgsNyArNjU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0gewogCS5vcGVuID0gdWlvX3ZtYV9vcGVuLAogCS5jbG9zZSA9IHVpb192bWFfY2xvc2UsCiAJLmZhdWx0ID0gdWlvX3ZtYV9mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKaW5kZXggMDIzNDdjNS4uYWE1M2RiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCXJldHVybiAwOwogIGJhZDE6CiAJa2ZyZWUocHJpdik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogIGJhZDA6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBlMzg2MWIyLi5lNGVjYTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC02MDksOSArNjA5LDkgQEAKIAogCWFjbS0+dGhyb3R0bGUgPSAwOwogCi0JdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiAJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpOwogCXJ2ID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZhY20tPnBvcnQsIHR0eSwgZmlscCk7CisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiBkb25lOgogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CiBlcnJfb3V0OgpAQCAtNjg2LDE1ICs2ODYsMjEgQEAKIAogCS8qIFBlcmZvcm0gdGhlIGNsb3NpbmcgcHJvY2VzcyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZG8gdGhlIGhhcmR3YXJlCiAJICAgc2h1dGRvd24gKi8KLQlpZiAoIWFjbSB8fCB0dHlfcG9ydF9jbG9zZV9zdGFydCgmYWNtLT5wb3J0LCB0dHksIGZpbHApID09IDApCisJaWYgKCFhY20pCiAJCXJldHVybjsKKwlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKSB7CisJCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOworCQlpZiAoIWFjbS0+ZGV2KSB7CisJCQl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOworCQkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7CisJCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJfQorCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOworCQlyZXR1cm47CisJfQogCWFjbV9wb3J0X2Rvd24oYWNtLCAwKTsKIAl0dHlfcG9ydF9jbG9zZV9lbmQoJmFjbS0+cG9ydCwgdHR5KTsKLQltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKIAl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOwotCWlmICghYWNtLT5kZXYpCi0JCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwotCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNtX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCAzMzNlZTAyLi4yNDczY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBVU0JUTUNfU0laRV9JT0JVRkZFUgkyMDQ4CiAKIC8qIERlZmF1bHQgVVNCIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KLSNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTEwCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQk1MDAwCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiByZWFkIGN5Y2xlcyB0byBlbXB0eSBidWxrIGluIGVuZHBvaW50IGR1cmluZyBDTEVBUiBhbmQKQEAgLTk5Myw3ICs5OTMsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSB1c2J0bWNfcmVhZCwKIAkud3JpdGUJCT0gdXNidG1jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCAzMzM1MTMxLi5hMThlM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyNVgKIAlib29sZWFuICJQWEEgMjV4IG9yIElYUCA0eHgiCiAJZGVwZW5kcyBvbiAoQVJDSF9QWEEgJiYgUFhBMjV4KSB8fCBBUkNIX0lYUDRYWAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggZjM3ZGUyOC4uMTY3Y2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDExICs2MSw2IEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCi0gKgotICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0Ci0gKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgotICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCi0gKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xNTcsOCArMTUyLDggQEAKICNkZWZpbmUgUk5ESVNfUFJPRFVDVF9OVU0JMHhhNGEyCS8qIEV0aGVybmV0L1JORElTIEdhZGdldCAqLwogCiAvKiBGb3IgRUVNIGdhZGdldHMgKi8KLSNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KLSNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCTB4YTRhMQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCQkweDFkNmIJLyogTGludXggRm91bmRhdGlvbiAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JCTB4MDEwMgkvKiBFRU0gR2FkZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwppbmRleCA0MmE3NGI4Li5mYTNkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogc3RhdGljIHZvaWQgZnNsX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnBhcmVudCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCiAJCQl1ZGNfY29udHJvbGxlci0+ZXBfcWgsIHVkY19jb250cm9sbGVyLT5lcF9xaF9kbWEpOwogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IGM1MmE2ODEuLjAxZWUwYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKQEAgLTE0MDIsNyArMTQwMiw4IEBACiAJc3RydWN0IGNsayAqY2xrOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgaSwgcmVzX3NpemU7CisJaW50IGk7CisJcmVzb3VyY2Vfc2l6ZV90IHJlc19zaXplOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewpAQCAtMTQxNiw3ICsxNDE3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmVzX3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCXJlc19zaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplLCByZXMtPm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFsbG9jYXRlICVkIGJ5dGVzIGF0ICVkIGFkZHJlc3NcbiIsCiAJCQlyZXNfc2l6ZSwgcmVzLT5zdGFydCk7CkBAIC0xNTI3LDggKzE1MjgsNyBAQAogCWNsa19kaXNhYmxlKGlteF91c2ItPmNsayk7CiAJaW91bm1hcChpbXhfdXNiLT5iYXNlKTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbihpbXhfdXNiLT5yZXMtPnN0YXJ0LAotCQlpbXhfdXNiLT5yZXMtPmVuZCAtIGlteF91c2ItPnJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW14X3VzYi0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpbXhfdXNiLT5yZXMpKTsKIAogCWlmIChwZGF0YS0+ZXhpdCkKIAkJcGRhdGEtPmV4aXQoJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IGM0NDM2N2YuLmJmMGY2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDI5NTAwMTUuLjJkODY3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtODc1LDcgKzg3NSw3IEBACiB9CiAKIC8qIHVzZWQgYWZ0ZXIgZW5kcG9pbnQgY29uZmlndXJhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJpbnRlcl9pb19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJpbnRlcl9pb19vcGVyYXRpb25zID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0JCXByaW50ZXJfb3BlbiwKIAkucmVhZCA9CQlwcmludGVyX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmgKaW5kZXggMDMwODdlNy4uOWE1MzdhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaApAQCAtMTMxLDMxICsxMzEsNDggQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHI4YTY2NTk3X3JlYWRfZmlmbyhzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1MTYgKmJ1ZiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJICAgICAgaW50IGxlbikKIHsKKwl1bnNpZ25lZCBsb25nIGZpZm9hZGRyID0gcjhhNjY1OTctPnJlZyArIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKwlpbnQgaTsKKwogCWlmIChyOGE2NjU5Ny0+cGRhdGEtPm9uX2NoaXApIHsKLQkJdW5zaWduZWQgbG9uZyBmaWZvYWRkciA9IHI4YTY2NTk3LT5yZWcgKyBvZmZzZXQ7Ci0JCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JCXVuaW9uIHsKLQkJCXVuc2lnbmVkIGxvbmcgZHdvcmQ7Ci0JCQl1bnNpZ25lZCBjaGFyIGJ5dGVbNF07Ci0JCX0gZGF0YTsKLQkJdW5zaWduZWQgY2hhciAqcGI7Ci0JCWludCBpOworCQkvKiAzMi1iaXQgYWNjZXNzZXMgZm9yIG9uX2NoaXAgY29udHJvbGxlcnMgKi8KIAotCQljb3VudCA9IGxlbiAvIDQ7Ci0JCWluc2woZmlmb2FkZHIsIGJ1ZiwgY291bnQpOworCQkvKiBhbGlnbmVkIGJ1ZiBjYXNlICovCisJCWlmIChsZW4gPj0gNCAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDMpKSB7CisJCQlpbnNsKGZpZm9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJYnVmICs9IGxlbiAmIH4weDAzOworCQkJbGVuICY9IDB4MDM7CisJCX0KIAotCQlpZiAobGVuICYgMHgwMDAwMDAwMykgewotCQkJZGF0YS5kd29yZCA9IGlubChmaWZvYWRkcik7Ci0JCQlwYiA9ICh1bnNpZ25lZCBjaGFyICopYnVmICsgY291bnQgKiA0OwotCQkJZm9yIChpID0gMDsgaSA8IChsZW4gJiAweDAwMDAwMDAzKTsgaSsrKQotCQkJCXBiW2ldID0gZGF0YS5ieXRlW2ldOworCQkvKiB1bmFsaWduZWQgYnVmIGNhc2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlpZiAoIShpICYgMHgwMykpCisJCQkJZGF0YSA9IGlubChmaWZvYWRkcik7CisKKwkJCWJ1ZltpXSA9IChkYXRhID4+ICgoaSAmIDB4MDMpICogOCkpICYgMHhmZjsKIAkJfQogCX0gZWxzZSB7Ci0JCWxlbiA9IChsZW4gKyAxKSAvIDI7Ci0JCWluc3cocjhhNjY1OTctPnJlZyArIG9mZnNldCwgYnVmLCBsZW4pOworCQkvKiAxNi1iaXQgYWNjZXNzZXMgZm9yIGV4dGVybmFsIGNvbnRyb2xsZXJzICovCisKKwkJLyogYWxpZ25lZCBidWYgY2FzZSAqLworCQlpZiAobGVuID49IDIgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAxKSkgeworCQkJaW5zdyhmaWZvYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJCWJ1ZiArPSBsZW4gJiB+MHgwMTsKKwkJCWxlbiAmPSAweDAxOworCQl9CisKKwkJLyogdW5hbGlnbmVkIGJ1ZiBjYXNlICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJaWYgKCEoaSAmIDB4MDEpKQorCQkJCWRhdGEgPSBpbncoZmlmb2FkZHIpOworCisJCQlidWZbaV0gPSAoZGF0YSA+PiAoKGkgJiAweDAxKSAqIDgpKSAmIDB4ZmY7CisJCX0KIAl9CiB9CiAKQEAgLTE2NiwzOCArMTgzLDQwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByOGE2NjU5N193cml0ZV9maWZvKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1MTYgKmJ1ZiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgICAgICAgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGZpZm9hZGRyID0gcjhhNjY1OTctPnJlZyArIG9mZnNldDsKKwlpbnQgYWRqID0gMDsKKwlpbnQgaTsKIAogCWlmIChyOGE2NjU5Ny0+cGRhdGEtPm9uX2NoaXApIHsKLQkJdW5zaWduZWQgbG9uZyBjb3VudDsKLQkJdW5zaWduZWQgY2hhciAqcGI7Ci0JCWludCBpOwotCi0JCWNvdW50ID0gbGVuIC8gNDsKLQkJb3V0c2woZmlmb2FkZHIsIGJ1ZiwgY291bnQpOwotCi0JCWlmIChsZW4gJiAweDAwMDAwMDAzKSB7Ci0JCQlwYiA9ICh1bnNpZ25lZCBjaGFyICopYnVmICsgY291bnQgKiA0OwotCQkJZm9yIChpID0gMDsgaSA8IChsZW4gJiAweDAwMDAwMDAzKTsgaSsrKSB7Ci0JCQkJaWYgKHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIENGSUZPU0VMKSAmIEJJR0VORCkKLQkJCQkJb3V0YihwYltpXSwgZmlmb2FkZHIgKyBpKTsKLQkJCQllbHNlCi0JCQkJCW91dGIocGJbaV0sIGZpZm9hZGRyICsgMyAtIGkpOwotCQkJfQorCQkvKiAzMi1iaXQgYWNjZXNzIG9ubHkgaWYgYnVmIGlzIDMyLWJpdCBhbGlnbmVkICovCisJCWlmIChsZW4gPj0gNCAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDMpKSB7CisJCQlvdXRzbChmaWZvYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJCWJ1ZiArPSBsZW4gJiB+MHgwMzsKKwkJCWxlbiAmPSAweDAzOwogCQl9CiAJfSBlbHNlIHsKLQkJaW50IG9kZCA9IGxlbiAmIDB4MDAwMTsKLQotCQlsZW4gPSBsZW4gLyAyOwotCQlvdXRzdyhmaWZvYWRkciwgYnVmLCBsZW4pOwotCQlpZiAodW5saWtlbHkob2RkKSkgewotCQkJYnVmID0gJmJ1ZltsZW5dOwotCQkJb3V0YigodW5zaWduZWQgY2hhcikqYnVmLCBmaWZvYWRkcik7CisJCS8qIDE2LWJpdCBhY2Nlc3Mgb25seSBpZiBidWYgaXMgMTYtYml0IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA+PSAyICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMSkpIHsKKwkJCW91dHN3KGZpZm9hZGRyLCBidWYsIGxlbiAvIDIpOworCQkJYnVmICs9IGxlbiAmIH4weDAxOworCQkJbGVuICY9IDB4MDE7CiAJCX0KIAl9CisKKwkvKiBhZGp1c3QgZmlmbyBhZGRyZXNzIGluIHRoZSBsaXR0bGUgZW5kaWFuIGNhc2UgKi8KKwlpZiAoIShyOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBDRklGT1NFTCkgJiBCSUdFTkQpKSB7CisJCWlmIChyOGE2NjU5Ny0+cGRhdGEtPm9uX2NoaXApCisJCQlhZGogPSAweDAzOyAvKiAzMi1iaXQgd2lkZSAqLworCQllbHNlCisJCQlhZGogPSAweDAxOyAvKiAxNi1iaXQgd2lkZSAqLworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJb3V0YihidWZbaV0sIGZpZm9hZGRyICsgYWRqIC0gKGkgJiBhZGopKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHI4YTY2NTk3X21kZnkoc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggM2VhMDU5My4uYjI1Y2RlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTE0MDAsNiArMTQwMCwxMCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQlwZXJpb2QgPDw9IDM7CisKIAlub3cgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgJSBtb2Q7CiAKIAkvKiB3aGVuJ3MgdGhlIGxhc3QgdWZyYW1lIHRoaXMgdXJiIGNvdWxkIHN0YXJ0PyAqLwpAQCAtMTQxNywxNCArMTQyMSwxNSBAQAogCiAJCS8qIEZlbGwgYmVoaW5kIChieSB1cCB0byB0d2ljZSB0aGUgc2xvcCBhbW91bnQpPyAqLwogCQlpZiAoc3RhcnQgPj0gbWF4IC0gMiAqIDggKiBTQ0hFRFVMRV9TTE9QKQotCQkJc3RhcnQgKz0gc3RyZWFtLT5pbnRlcnZhbCAqIERJVl9ST1VORF9VUCgKLQkJCQkJbWF4IC0gc3RhcnQsIHN0cmVhbS0+aW50ZXJ2YWwpIC0gbW9kOworCQkJc3RhcnQgKz0gcGVyaW9kICogRElWX1JPVU5EX1VQKAorCQkJCQltYXggLSBzdGFydCwgcGVyaW9kKSAtIG1vZDsKIAogCQkvKiBUcmllZCB0byBzY2hlZHVsZSB0b28gZmFyIGludG8gdGhlIGZ1dHVyZT8gKi8KIAkJaWYgKHVubGlrZWx5KChzdGFydCArIHNjaGVkLT5zcGFuKSA+PSBtYXgpKSB7CiAJCQlzdGF0dXMgPSAtRUZCSUc7CiAJCQlnb3RvIGZhaWw7CiAJCX0KKwkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IHN0YXJ0OwogCQlnb3RvIHJlYWR5OwogCX0KIApAQCAtMTQ0MCwxMCArMTQ0NSw2IEBACiAKIAkvKiBOT1RFOiAgYXNzdW1lcyBVUkJfSVNPX0FTQVAsIHRvIGxpbWl0IGNvbXBsZXhpdHkvYnVncyAqLwogCi0JcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKLQlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQotCQlwZXJpb2QgPDw9IDM7Ci0KIAkvKiBmaW5kIGEgdWZyYW1lIHNsb3Qgd2l0aCBlbm91Z2ggYmFuZHdpZHRoICovCiAJZm9yICg7IHN0YXJ0IDwgKHN0cmVhbS0+bmV4dF91ZnJhbWUgKyBwZXJpb2QpOyBzdGFydCsrKSB7CiAJCWludAkJZW5vdWdoX3NwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCmluZGV4IGUzNWQ4MjguLjVjNzc0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKQEAgLTIyODQsMTAgKzIyODQsMTAgQEAKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIklTUDEzNjIgTWVtb3J5IHVzYWdlOlxuIik7CiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIElTVEw6ICAgIDIgKiAlNGQ6ICAgICAlNGQgQCAkJTA0eDokJTA0eFxuIiwKIAkJIGlzdGxfc2l6ZSAvIDIsIGlzdGxfc2l6ZSwgMCwgaXN0bF9zaXplIC8gMik7Ci0JZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIElOVEw6ICU0ZCAqICglM3UrOCk6ICAlNGQgQCAkJTA0eFxuIiwKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSU5UTDogJTRkICogKCUzbHUrOCk6ICAlNGQgQCAkJTA0eFxuIiwKIAkJIElTUDEzNjJfSU5UTF9CVUZGRVJTLCBpbnRsX2Jsa3NpemUgLSBQVERfSEVBREVSX1NJWkUsCiAJCSBpbnRsX3NpemUsIGlzdGxfc2l6ZSk7Ci0JZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIEFUTCA6ICU0ZCAqICglM3UrOCk6ICAlNGQgQCAkJTA0eFxuIiwKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgQVRMIDogJTRkICogKCUzbHUrOCk6ICAlNGQgQCAkJTA0eFxuIiwKIAkJIGF0bF9idWZmZXJzLCBhdGxfYmxrc2l6ZSAtIFBURF9IRUFERVJfU0laRSwKIAkJIGF0bF9zaXplLCBpc3RsX3NpemUgKyBpbnRsX3NpemUpOwogCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBVU0VEL0ZSRUU6ICAgJTRkICAgICAgJTRkXG4iLCB0b3RhbCwKQEAgLTI2NzcsMTIgKzI2NzcsMTIgQEAKIAlEQkcoMCwgIiVzOiBSZW1vdmluZyBIQ0RcbiIsIF9fZnVuY19fKTsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCi0JREJHKDAsICIlczogVW5tYXBwaW5nIGRhdGFfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sCi0JICAgICh1MzIpaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlcFxuIiwgX19mdW5jX18sCisJICAgIGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CiAJaW91bm1hcChpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOwogCi0JREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sCi0JICAgICh1MzIpaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlcFxuIiwgX19mdW5jX18sCisJICAgIGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CiAJaW91bm1hcChpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKQEAgLTI4MTAsMTYgKzI4MTAsMTYgQEAKIAlyZXR1cm4gMDsKIAogIGVycjY6Ci0JREJHKDAsICIlczogRnJlZWluZyBkZXYgJTA4eFxuIiwgX19mdW5jX18sICh1MzIpaXNwMTM2Ml9oY2QpOworCURCRygwLCAiJXM6IEZyZWVpbmcgZGV2ICVwXG4iLCBfX2Z1bmNfXywgaXNwMTM2Ml9oY2QpOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAgZXJyNToKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilkYXRhX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGRhdGFfcmVnIEAgJXBcbiIsIF9fZnVuY19fLCBkYXRhX3JlZyk7CiAJaW91bm1hcChkYXRhX3JlZyk7CiAgZXJyNDoKIAlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClkYXRhLT5zdGFydCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oZGF0YSkpOwogIGVycjM6Ci0JREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sICh1MzIpYWRkcl9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywgYWRkcl9yZWcpOwogCWlvdW5tYXAoYWRkcl9yZWcpOwogIGVycjI6CiAJREJHKDAsICIlczogUmVsZWFzaW5nIG1lbSByZWdpb24gJTA4bHhcbiIsIF9fZnVuY19fLCAobG9uZyB1bnNpZ25lZCBpbnQpYWRkci0+c3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaAppbmRleCBmZTYwZjYyLi4xYTI1M2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaApAQCAtNTgwLDcgKzU4MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBBTElHTlNUQVQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdm9pZCAqcHRyKQogewotCXVuc2lnbmVkIHAgPSAodW5zaWduZWQpcHRyOworCXVuc2lnbmVkIGxvbmcgcCA9ICh1bnNpZ25lZCBsb25nKXB0cjsKIAlpZiAoIShwICYgMHhmKSkKIAkJaXNwMTM2Ml9oY2QtPnN0YXQxNisrOwogCWVsc2UgaWYgKCEocCAmIDB4NykpCkBAIC03NzAsNyArNzcwLDcgQEAKIAlpZiAoIWxlbikKIAkJcmV0dXJuOwogCi0JaWYgKCh1bnNpZ25lZClkcCAmIDB4MSkgeworCWlmICgodW5zaWduZWQgbG9uZylkcCAmIDB4MSkgewogCQkvKiBub3QgYWxpZ25lZCAqLwogCQlmb3IgKDsgbGVuID4gMTsgbGVuIC09IDIpIHsKIAkJCWRhdGEgPSAqZHArKzsKQEAgLTk2Miw4ICs5NjIsOCBAQAogCiAJaXNwMTM2Ml93cml0ZV9kaXJhZGRyKGlzcDEzNjJfaGNkLCBvZmZzZXQsIGxlbik7CiAKLQlEQkcoMywgIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBidWZmZXIgQCUwNHggdG8gbWVtb3J5IEAgJTA4eFxuIiwgX19mdW5jX18sCi0JICAgIGxlbiwgb2Zmc2V0LCAodTMyKWJ1Zik7CisJREJHKDMsICIlczogUmVhZGluZyAlZCBieXRlIGZyb20gYnVmZmVyIEAlMDR4IHRvIG1lbW9yeSBAICVwXG4iLAorCSAgICBfX2Z1bmNfXywgbGVuLCBvZmZzZXQsIGJ1Zik7CiAKIAlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CiAJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOwpAQCAtOTgyLDggKzk4Miw4IEBACiAKIAlpc3AxMzYyX3dyaXRlX2RpcmFkZHIoaXNwMTM2Ml9oY2QsIG9mZnNldCwgbGVuKTsKIAotCURCRygzLCAiJXM6IFdyaXRpbmcgJWQgYnl0ZSB0byBidWZmZXIgQCUwNHggZnJvbSBtZW1vcnkgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgbGVuLCBvZmZzZXQsICh1MzIpYnVmKTsKKwlEQkcoMywgIiVzOiBXcml0aW5nICVkIGJ5dGUgdG8gYnVmZmVyIEAlMDR4IGZyb20gbWVtb3J5IEAgJXBcbiIsCisJICAgIF9fZnVuY19fLCBsZW4sIG9mZnNldCwgYnVmKTsKIAogCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIEhDdVBJTlRfRU9UKTsKIAlfV0FSTl9PTigoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNzhiYjc3MS4uMjRlYjc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtODcsNiArODcsNyBAQAogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyB2b2lkIHF1aXJrX2FtZF9wbGwoaW50IHN0YXRlKTsKIHN0YXRpYyB2b2lkIGFtZF9pc29fZGV2X3B1dCh2b2lkKTsKK3N0YXRpYyB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IG9uKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcXVpcmtfYW1kX3BsbChpbnQgc3RhdGUpCiB7CkBAIC05Niw2ICs5NywxMCBAQAogewogCXJldHVybjsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzYjgwMF9wcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBvbikKK3sKKwlyZXR1cm47Cit9CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKaW5kZXggZDJiYTA0ZC4uYjhhMTE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMTc3LDYgKzE3NywxMyBAQAogCQlyZXR1cm4gMDsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisKKwkvKiBTQjgwMCBuZWVkcyBwcmUtZmV0Y2ggZml4ICovCisJaWYgKChyZXYgPj0gMHg0MCkgJiYgKHJldiA8PSAweDRmKSkgeworCQlvaGNpLT5mbGFncyB8PSBPSENJX1FVSVJLX0FNRF9QUkVGRVRDSDsKKwkJb2hjaV9kYmcob2hjaSwgImVuYWJsZWQgQU1EIHByZWZldGNoIHF1aXJrXG4iKTsKKwl9CisKIAlpZiAoKHJldiA+IDB4M2IpIHx8IChyZXYgPCAweDMwKSkgewogCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKIAkJYW1kX3NtYnVzX2RldiA9IE5VTEw7CkBAIC0yNjIsNiArMjY5LDE5IEBACiAKIH0KIAorc3RhdGljIHZvaWQgc2I4MDBfcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgb24pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTE2IG1pc2M7CisKKwlwZGV2ID0gdG9fcGNpX2RldihvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDUwLCAmbWlzYyk7CisJaWYgKG9uID09IDApCisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDUwLCBtaXNjICYgMHhmY2ZmKTsKKwllbHNlCisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDUwLCBtaXNjIHwgMHgwMzAwKTsKK30KKwogLyogTGlzdCBvZiBxdWlya3MgZm9yIE9IQ0kgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvaGNpX3BjaV9xdWlya3NbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggYjUyOTRhOS4uZjFjMDYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtNDgxLDM4ICs0ODEsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmCUNPTkZJR19QTQotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHB4YTI3eF9vaGNpICpvaGNpID0gdG9fcHhhMjd4X29oY2koaGNkKTsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CiAJb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKIAotCXB4YTI3eF9zdG9wX2hjKG9oY2ksICZwZGV2LT5kZXYpOworCXB4YTI3eF9zdG9wX2hjKG9oY2ksIGRldik7CiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBweGEyN3hfb2hjaSAqb2hjaSA9IHRvX3B4YTI3eF9vaGNpKGhjZCk7CisJc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSAqaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCWludCBzdGF0dXM7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlKSkKIAkJbXNsZWVwKDUpOwogCW9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CiAKLQlpZiAoKHN0YXR1cyA9IHB4YTI3eF9zdGFydF9oYyhvaGNpLCAmcGRldi0+ZGV2KSkgPCAwKQorCWlmICgoc3RhdHVzID0gcHhhMjd4X3N0YXJ0X2hjKG9oY2ksIGRldikpIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIAorCS8qIFNlbGVjdCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgKi8KKwlweGEyN3hfb2hjaV9zZWxlY3RfcG1tKG9oY2ksIGluZi0+cG9ydF9tb2RlKTsKKwogCW9oY2lfZmluaXNoX2NvbnRyb2xsZXJfcmVzdW1lKGhjZCk7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBvaGNpX2hjZF9weGEyN3hfcG1fb3BzID0geworCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsCit9OwogI2VuZGlmCiAKIC8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwpAQCAtNTIyLDEzICs1MzEsMTIgQEAKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKLSNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyN3gtb2hjaSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmb2hjaV9oY2RfcHhhMjd4X3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwppbmRleCAxNmZlY2I4Li4zNTI4OGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTQ5LDkgKzQ5LDEyIEBACiAJc3dpdGNoICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkpIHsKIAljYXNlIFBJUEVfSVNPQ0hST05PVVM6CiAJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKLQkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMAotCQkJCSYmIHF1aXJrX2FtZGlzbyhvaGNpKSkKLQkJCXF1aXJrX2FtZF9wbGwoMSk7CisJCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDApIHsKKwkJCWlmIChxdWlya19hbWRpc28ob2hjaSkpCisJCQkJcXVpcmtfYW1kX3BsbCgxKTsKKwkJCWlmIChxdWlya19hbWRwcmVmZXRjaChvaGNpKSkKKwkJCQlzYjgwMF9wcmVmZXRjaChvaGNpLCAwKTsKKwkJfQogCQlicmVhazsKIAljYXNlIFBJUEVfSU5URVJSVVBUOgogCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKQEAgLTY4MCw5ICs2ODMsMTIgQEAKIAkJCQlkYXRhICsgdXJiLT5pc29fZnJhbWVfZGVzYyBbY250XS5vZmZzZXQsCiAJCQkJdXJiLT5pc29fZnJhbWVfZGVzYyBbY250XS5sZW5ndGgsIHVyYiwgY250KTsKIAkJfQotCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCi0JCQkJJiYgcXVpcmtfYW1kaXNvKG9oY2kpKQotCQkJcXVpcmtfYW1kX3BsbCgwKTsKKwkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQkJaWYgKHF1aXJrX2FtZGlzbyhvaGNpKSkKKwkJCQlxdWlya19hbWRfcGxsKDApOworCQkJaWYgKHF1aXJrX2FtZHByZWZldGNoKG9oY2kpKQorCQkJCXNiODAwX3ByZWZldGNoKG9oY2ksIDEpOworCQl9CiAJCXBlcmlvZGljID0gb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrID09IDAKIAkJCSYmIG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcyA9PSAwOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKaW5kZXggMjIyMDExZi4uNWJmMTVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTQwMiw2ICs0MDIsNyBAQAogI2RlZmluZQlPSENJX1FVSVJLX0ZSQU1FX05PCTB4ODAJCQkvKiBubyBiaWcgZW5kaWFuIGZyYW1lX25vIHNoaWZ0ICovCiAjZGVmaW5lCU9IQ0lfUVVJUktfSFVCX1BPV0VSCTB4MTAwCQkJLyogZGlzdHJ1c3QgZmlybXdhcmUgcG93ZXIvb2Mgc2V0dXAgKi8KICNkZWZpbmUJT0hDSV9RVUlSS19BTURfSVNPCTB4MjAwCQkJLyogSVNPIHRyYW5zZmVycyovCisjZGVmaW5lCU9IQ0lfUVVJUktfQU1EX1BSRUZFVENICTB4NDAwCQkJLyogcHJlLWZldGNoIGZvciBJU08gdHJhbnNmZXIgKi8KIAkvLyB0aGVyZSBhcmUgYWxzbyBjaGlwIHF1aXJrcy9idWdzIGluIGluaXQgbG9naWMKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAluZWNfd29yazsJLyogV29ya2VyIGZvciBORUMgcXVpcmsgKi8KQEAgLTQzMyw2ICs0MzQsMTAgQEAKIHsKIAlyZXR1cm4gb2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRF9JU087CiB9CitzdGF0aWMgaW5saW5lIGludCBxdWlya19hbWRwcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJcmV0dXJuIG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19BTURfUFJFRkVUQ0g7Cit9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcXVpcmtfbmVjKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKIHsKQEAgLTQ0Niw2ICs0NTEsMTAgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHF1aXJrX2FtZHByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAvKiBjb252ZXJ0IGJldHdlZW4gYW4gaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9oY2lfaGNkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCmluZGV4IDIzY2YzYmRlLi44M2I1ZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtNDc1LDQgKzQ3NSw0IEBACiAJZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX1NFUklBTF9VU0JfWEhDSSkKIAkJcXVpcmtfdXNiX2hhbmRvZmZfeGhjaShwZGV2KTsKIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCA3NDliNTM3Li5lMzNkMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTEwMDMsMTkgKzEwMDMsMjAgQEAKIAlpZiAoc3lzc3RzID09IFNFMCkgewogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkFUVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CiAJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEFUVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOwotCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYgKHN5c3N0cyA9PSBGU19KU1RTKQorCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7CisJCWVsc2UgaWYgKHN5c3N0cyA9PSBMU19KU1RTKQorCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7CisKKwkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CisJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisKKwkJaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQorCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CiAJfQogCi0JaWYgKHN5c3N0cyA9PSBGU19KU1RTKQotCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKLQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKLQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0KLQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKLQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOwotCi0JaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQotCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCkBAIC0xMDI0LDYgKzEwMjUsOCBAQAogCXUxNiBzcGVlZCA9IGdldF9yaF91c2Jfc3BlZWQocjhhNjY1OTcsIHBvcnQpOwogCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOwogCisJcmgtPnBvcnQgJj0gfigoMSA8PCBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCkgfAorCQkgICAgICAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKSk7CiAJaWYgKHNwZWVkID09IEhTTU9ERSkKIAkJcmgtPnBvcnQgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpOwogCWVsc2UgaWYgKHNwZWVkID09IExTTU9ERSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwppbmRleCBjNjMyNDM3Li41NjJlYmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCkBAIC0xMTUsNiArMTE1LDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzA1LDYgKzMwOSw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzE1LDE3ICszMjAsMjEgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JYXNsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gdHJ1ZTsKLQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKLQorCWlmIChoYXNfcXRkKSB7CisJCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJCXd1cmItPmlzX2FzeW5jID0gdHJ1ZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYwppbmRleCBjZjJkNDU5Li4yMjczYzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHB6bF9wcmludCwgaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaV9mb3BzID0gewogCS5vcGVuICAgID0gZGlfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApAQCAtMTQyLDcgKzE0Miw3IEBACiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXNsX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBhc2xfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApAQCAtMTUwLDcgKzE1MCw3IEBACiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB6bF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHpsX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBwemxfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCmluZGV4IGE5ZTA1YmEuLjBkYjNmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKQEAgLTEyMSw2ICsxMjEsMTAgQEAKIAkJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CiAJCQkvKiBVZywgYW4gZXJyb3IuICovCiAJCQlwcm9jZXNzX2hhbHRlZF9xdGQod2hjLCBxc2V0LCB0ZCk7CisJCQkvKiBBIGhhbHRlZCBxVEQgYWx3YXlzIHRyaWdnZXJzIGFuIHVwZGF0ZQorCQkJICAgYmVjYXVzZSB0aGUgcXNldCB3YXMgZWl0aGVyIHJlbW92ZWQgb3IKKwkJCSAgIHJlYWN0aXZhdGVkLiAqLworCQkJdXBkYXRlIHw9IFdIQ19VUERBVEVfVVBEQVRFRDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zMzMsNiArMzM3LDcgQEAKIAlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OwogCXN0cnVjdCB3aGNfcXNldCAqcXNldCA9IHd1cmItPnFzZXQ7CiAJc3RydWN0IHdoY19zdGQgKnN0ZCwgKnQ7CisJYm9vbCBoYXNfcXRkID0gZmFsc2U7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNDMsMTcgKzM0OCwyMiBAQAogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKLQkJaWYgKHN0ZC0+dXJiID09IHVyYikKKwkJaWYgKHN0ZC0+dXJiID09IHVyYikgeworCQkJaWYgKHN0ZC0+cXRkKQorCQkJCWhhc19xdGQgPSB0cnVlOwogCQkJcXNldF9mcmVlX3N0ZCh3aGMsIHN0ZCk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlzdGQtPnF0ZCA9IE5VTEw7IC8qIHNvIHRoaXMgc3RkIGlzIHJlLWFkZGVkIHdoZW4gdGhlIHFzZXQgaXMgKi8KIAl9CiAKLQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKLQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7Ci0Jd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKLQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKLQorCWlmIChoYXNfcXRkKSB7CisJCXB6bF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCQl1cGRhdGVfcHpsX2h3X3ZpZXcod2hjKTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IGZhbHNlOworCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKKwl9IGVsc2UKKwkJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCBzdGF0dXMpOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKaW5kZXggOTk5MTFlNy4uOTMyZjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwpAQCAtMzM1LDYgKzMzNSwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CiAJeGhjaV9kYmcoeGhjaSwgIm9wIHJlZyBzdGF0dXMgPSAweCV4XG4iLCB0ZW1wKTsKKwlpZiAodGVtcCA9PSAweGZmZmZmZmZmKSB7CisJCXhoY2lfZGJnKHhoY2ksICJIVyBkaWVkLCBwb2xsaW5nIHN0b3BwZWQuXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwogCXhoY2lfZGJnKHhoY2ksICJpcl9zZXQgMCBwZW5kaW5nID0gMHgleFxuIiwgdGVtcCk7CiAJeGhjaV9kYmcoeGhjaSwgIk5vLW9wIGNvbW1hbmRzIGhhbmRsZWQgPSAlZFxuIiwgeGhjaS0+bm9vcHNfaGFuZGxlZCk7CkBAIC03NzYsNiArNzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CisJdTMyIHRlbXA7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpOwogCXN0cnVjdCB4aGNpX3RkICp0ZDsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CkBAIC03ODgsNiArNzk1LDE3IEBACiAJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOwogCWlmIChyZXQgfHwgIXVyYi0+aGNwcml2KQogCQlnb3RvIGRvbmU7CisJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgeworCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgZnJlZWluZyBURC5cbiIpOworCQl0ZCA9IChzdHJ1Y3QgeGhjaV90ZCAqKSB1cmItPmhjcHJpdjsKKworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJdXNiX2hjZF9naXZlYmFja191cmIoeGhjaV90b19oY2QoeGhjaSksIHVyYiwgLUVTSFVURE9XTik7CisJCWtmcmVlKHRkKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAl4aGNpX2RiZyh4aGNpLCAiQ2FuY2VsIFVSQiAlcFxuIiwgdXJiKTsKIAl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgcmluZzpcbiIpOwpAQCAtODc3LDcgKzg5NSw3IEBACiAJY3RybF9jdHgtPmRyb3BfZmxhZ3MgfD0gZHJvcF9mbGFnOwogCW5ld19kcm9wX2ZsYWdzID0gY3RybF9jdHgtPmRyb3BfZmxhZ3M7CiAKLQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gfmRyb3BfZmxhZzsKKwljdHJsX2N0eC0+YWRkX2ZsYWdzICY9IH5kcm9wX2ZsYWc7CiAJbmV3X2FkZF9mbGFncyA9IGN0cmxfY3R4LT5hZGRfZmxhZ3M7CiAKIAlsYXN0X2N0eCA9IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludChjdHJsX2N0eC0+YWRkX2ZsYWdzKTsKQEAgLTE0MTAsMTEgKzE0MjgsMjAgQEAKIHsKIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXRlOwogCiAJaWYgKHVkZXYtPnNsb3RfaWQgPT0gMCkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkvKiBEb24ndCBkaXNhYmxlIHRoZSBzbG90IGlmIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgZGVhZC4gKi8KKwlzdGF0ZSA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJaWYgKHN0YXRlID09IDB4ZmZmZmZmZmYpIHsKKwkJeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHhoY2ksIHVkZXYtPnNsb3RfaWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woeGhjaSwgVFJCX0RJU0FCTEVfU0xPVCwgdWRldi0+c2xvdF9pZCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUU6IGFsbG9jYXRlIGEgY29tbWFuZCByaW5nIHNlZ21lbnRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDFkYjRmZWEuLmI4ZmQyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTgwMiw5ICs4MDIsMTEgQEAKIAlpbnQgaTsKIAogCS8qIEZyZWUgdGhlIEV2ZW50IFJpbmcgU2VnbWVudCBUYWJsZSBhbmQgdGhlIGFjdHVhbCBFdmVudCBSaW5nICovCi0JeGhjaV93cml0ZWwoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9zaXplKTsKLQl4aGNpX3dyaXRlXzY0KHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3RfYmFzZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCWlmICh4aGNpLT5pcl9zZXQpIHsKKwkJeGhjaV93cml0ZWwoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9zaXplKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2Jhc2UpOworCQl4aGNpX3dyaXRlXzY0KHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7CisJfQogCXNpemUgPSBzaXplb2Yoc3RydWN0IHhoY2lfZXJzdF9lbnRyeSkqKHhoY2ktPmVyc3QubnVtX2VudHJpZXMpOwogCWlmICh4aGNpLT5lcnN0LmVudHJpZXMpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZSwKQEAgLTg0MSw5ICs4NDMsOSBAQAogCQkJCXhoY2ktPmRjYmFhLCB4aGNpLT5kY2JhYS0+ZG1hKTsKIAl4aGNpLT5kY2JhYSA9IE5VTEw7CiAKKwlzY3JhdGNocGFkX2ZyZWUoeGhjaSk7CiAJeGhjaS0+cGFnZV9zaXplID0gMDsKIAl4aGNpLT5wYWdlX3NoaWZ0ID0gMDsKLQlzY3JhdGNocGFkX2ZyZWUoeGhjaSk7CiB9CiAKIGludCB4aGNpX21lbV9pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCAxNzNjMzljLi44MjFiN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTg2NCw5ICs4NjQsMTEgQEAKIAljdXJfc2VnID0gc3RhcnRfc2VnOwogCiAJZG8geworCQlpZiAoc3RhcnRfZG1hID09IDApCisJCQlyZXR1cm4gMDsKIAkJLyogV2UgbWF5IGdldCBhbiBldmVudCBmb3IgYSBMaW5rIFRSQiBpbiB0aGUgbWlkZGxlIG9mIGEgVEQgKi8KIAkJZW5kX3NlZ19kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLAotCQkJCSZzdGFydF9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdKTsKKwkJCQkmY3VyX3NlZy0+dHJic1tUUkJTX1BFUl9TRUdNRU5UIC0gMV0pOwogCQkvKiBJZiB0aGUgZW5kIFRSQiBpc24ndCBpbiB0aGlzIHNlZ21lbnQsIHRoaXMgaXMgc2V0IHRvIDAgKi8KIAkJZW5kX3RyYl9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLCBlbmRfdHJiKTsKIApAQCAtODkzLDggKzg5NSw5IEBACiAJCX0KIAkJY3VyX3NlZyA9IGN1cl9zZWctPm5leHQ7CiAJCXN0YXJ0X2RtYSA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKGN1cl9zZWcsICZjdXJfc2VnLT50cmJzWzBdKTsKLQl9IHdoaWxlICgxKTsKKwl9IHdoaWxlIChjdXJfc2VnICE9IHN0YXJ0X3NlZyk7CiAKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IGQ2NDVmMzguLjMyZDAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtNDI5LDggKzQyOSw3IEBACiAJcmV0dXJuIHJlYWRfY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QKLWZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlYWQgPQkJcmVhZF9yaW8sCiAJLndyaXRlID0Jd3JpdGVfcmlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKaW5kZXggMjczZGU1ZC4uMGFiOTkwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgInNpc3VzYi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCAyOTA5MmI4Li40ZmIxMjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMxMyw3ICszMTMsOCBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgewogCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKIAl9CiAJCiAJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggZGZkYzQzZS4uMTBmMzIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0zNDgsMTIgKzM0OCwxMiBAQAogCiAvKgogICogUmV0dXJuIGEgZmV3IChraWxvLSlieXRlcyB0byB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLgotICogVGhpcyBpcyB1c2VkIGlmIGEgRE1BIGZldGNoIGZhaWxzLgorICogVGhpcyBpcyB1c2VkIGlmIGEgZGF0YSBmZXRjaCBmYWlscy4KICAqLwogc3RhdGljIHZvaWQgbW9uX2J1ZmZfYXJlYV9zaHJpbmsoc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAKLQlzaXplID0gKHNpemUgKyBQS1RfQUxJR04tMSkgJiB+KFBLVF9BTElHTi0xKTsKKwkvKiBzaXplICY9IH4oUEtUX0FMSUdOLTEpOyAgLS0gd2UncmUgY2FsbGVkIHdpdGggYWxpZ25lZCBzaXplICovCiAJcnAtPmJfY250IC09IHNpemU7CiAJaWYgKHJwLT5iX2luIDwgc2l6ZSkKIAkJcnAtPmJfaW4gKz0gcnAtPmJfc2l6ZTsKQEAgLTQzMyw2ICs0MzMsNyBAQAogCXVuc2lnbmVkIGludCB1cmJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgZGVsdGE7CiAJdW5zaWduZWQgaW50IG5kZXNjLCBsZW5kZXNjOwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CkBAIC01MzcsOCArNTM4LDEwIEBACiAJaWYgKGxlbmd0aCAhPSAwKSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBtb25fYmluX2dldF9kYXRhKHJwLCBvZmZzZXQsIHVyYiwgbGVuZ3RoKTsKIAkJaWYgKGVwLT5mbGFnX2RhdGEgIT0gMCkgewkvKiBZZXMsIGl0J3MgMHgwMCwgbm90ICcwJyAqLwotCQkJZXAtPmxlbl9jYXAgPSAwOwotCQkJbW9uX2J1ZmZfYXJlYV9zaHJpbmsocnAsIGxlbmd0aCk7CisJCQlkZWx0YSA9IChlcC0+bGVuX2NhcCArIFBLVF9BTElHTi0xKSAmIH4oUEtUX0FMSUdOLTEpOworCQkJZXAtPmxlbl9jYXAgLT0gbGVuZ3RoOworCQkJZGVsdGEgLT0gKGVwLT5sZW5fY2FwICsgUEtUX0FMSUdOLTEpICYgfihQS1RfQUxJR04tMSk7CisJCQltb25fYnVmZl9hcmVhX3NocmluayhycCwgZGVsdGEpOwogCQl9CiAJfSBlbHNlIHsKIAkJZXAtPmZsYWdfZGF0YSA9IGRhdGFfdGFnOwpAQCAtMTE3NCw3ICsxMTc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtb25fYmluX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW9uX2Jpbl92bV9vcHMgPSB7CiAJLm9wZW4gPSAgICAgbW9uX2Jpbl92bWFfb3BlbiwKIAkuY2xvc2UgPSAgICBtb25fYmluX3ZtYV9jbG9zZSwKIAkuZmF1bHQgPSAgICBtb25fYmluX3ZtYV9mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA4MDNhZGNiLi5iODRhYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC04LDggKzgsOCBAQAogCiAjIChNKUhEUkMgPSAoTXVsdGlwb2ludCkgSGlnaHNwZWVkIER1YWwtUm9sZSBDb250cm9sbGVyCiBjb25maWcgVVNCX01VU0JfSERSQwotCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKSAmJiBIQVZFX0NMSwotCWRlcGVuZHMgb24gIVNVUEVSSAorCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKQorCWRlcGVuZHMgb24gKEFSTSB8fCBCTEFDS0ZJTikKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgVFdMNDAzMF9VU0IgaWYgTUFDSF9PTUFQXzM0MzBTRFAKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBNQUNIX09NQVAzRVZNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggZjJmNjZlYi4uZmNlYzg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCAzODFkNjQ4Li42YWE1ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTk1LDYgKzk1LDEzIEBACiAjZW5kaWYKICNlbmRpZgkvKiBuZWVkIE1VU0IgZ2FkZ2V0IHNlbGVjdGlvbiAqLwogCisjaWZuZGVmIENPTkZJR19IQVZFX0NMSworLyogRHVtbXkgc3R1YiBmb3IgY2xrIGZyYW1ld29yayAqLworI2RlZmluZSBjbGtfZ2V0KGRldiwgaWQpCU5VTEwKKyNkZWZpbmUgY2xrX3B1dChjbG9jaykJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBjbGtfZW5hYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX2Rpc2FibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAppbmRleCBmYmZkM2ZkLi5jYzFkNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKQEAgLTQzOSwxNSArNDM5LDYgQEAKIC8qIE5vdCBpbXBsZW1lbnRlZCAtIEhXIGhhcyBzZXBlcmF0ZSBUeC9SeCBGSUZPICovCiAjZGVmaW5lIE1VU0JfVFhDU1JfTU9ERQkJCTB4MDAwMAogCi0vKgotICogRHVtbXkgc3R1YiBmb3IgY2xrIGZyYW1ld29yaywgaXQgd2lsbCBiZSByZW1vdmVkCi0gKiB1bnRpbCBCbGFja2ZpbiBzdXBwb3J0cyBjbGsgZnJhbWV3b3JrCi0gKi8KLSNkZWZpbmUgY2xrX2dldChkZXYsIGlkKQlOVUxMCi0jZGVmaW5lIGNsa19wdXQoY2xvY2spCQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgY2xrX2VuYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGNsa19kaXNhYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKLQogc3RhdGljIGlubGluZSB2b2lkIG11c2Jfd3JpdGVfdHhmaWZvc3oodm9pZCBfX2lvbWVtICptYmFzZSwgdTggY19zaXplKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwppbmRleCAyY2JmYWIzLi5iMTBhYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwpAQCAtNTU0LDEzICs1NTQsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiAJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogfQogCiAvKiBCYXNlZCBvbiBmdGRpX3Npby5jIHVudGhyb3R0bGUgKi8KQEAgLTU2OSwxNCArNTY4LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiAJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CiAJcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCiAJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggNGEyMDhmZS4uYmQyNTRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNTAsNiArNTAsOCBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kaXNjb25uZWN0KHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKTsKK3N0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApOwogCiBzdGF0aWMgaW50IGRlYnVnOwogCkBAIC0xMTMsNiArMTE1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNjZBLCAweDAzMDMpIH0sIC8qIENsaXBzYWwgNTUwMFBDVSBDLUJ1cyBVU0IgaW50ZXJmYWNlICovCiAJeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDE4RUYsIDB4RTAwRikgfSwgLyogRUxWIFVTQi1JMkMtSW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg5NTAwKSB9LCAvKiBEVzcwMCBHUFMgVVNCIGludGVyZmFjZSAqLwogCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKIApAQCAtMTQyLDYgKzE0NSw4IEBACiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKIAkuZGlzY29ubmVjdAkJPSBjcDIxMHhfZGlzY29ubmVjdCwKKwkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKKwkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCiB9OwogCiAvKiBDb25maWcgcmVxdWVzdCB0eXBlcyAqLwpAQCAtNzQ1LDYgKzc1MCwxNCBAQAogCXJldHVybiBjcDIxMHhfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMFhfU0VUX01IUywgJmNvbnRyb2wsIDIpOwogfQogCitzdGF0aWMgdm9pZCBjcDIxMHhfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwLCBpbnQgb24pCit7CisJaWYgKG9uKQorCQljcDIxMHhfdGlvY21zZXRfcG9ydChwLCBOVUxMLCAgVElPQ01fRFRSfFRJT0NNX1JUUywgMCk7CisJZWxzZQorCQljcDIxMHhfdGlvY21zZXRfcG9ydChwLCBOVUxMLCAgMCwgVElPQ01fRFRSfFRJT0NNX1JUUyk7Cit9CisKIHN0YXRpYyBpbnQgY3AyMTB4X3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTc2Nyw2ICs3ODAsMTUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKQoreworCXVuc2lnbmVkIGludCBjb250cm9sOworCWNwMjEweF9nZXRfY29uZmlnKHAsIENQMjEwWF9HRVRfTURNU1RTLCAmY29udHJvbCwgMSk7CisJaWYgKGNvbnRyb2wgJiBDT05UUk9MX0RDRCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IGUwYThiNzEuLmE1OTFlYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMTE1NSwxMyArMTE1NSwxMiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnJ4X2ZsYWdzID0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiAKQEAgLTExNzAsMTQgKzExNjksMTMgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQsIHJlc3VsdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CiAJcHJpdi0+cnhfZmxhZ3MgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJaWYgKCFwcml2LT5jb21tX2lzX29rKQogCQlyZXR1cm47CkBAIC0xMTg1LDcgKzExODMsNyBAQAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpIHsKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmVzdWx0KSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCAiCiAJCQkJCSJlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYWIzZGQ5OS4uNjhlODBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtODk4LDE2ICs4OTgsMTYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAotCS8qIHR1cm4gdGhyb3R0bGUgb2ZmICovCi0JcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKLQlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKLQogCS8qIHJlc3RhcnQgcmVhZCBjaGFpbiAqLwogCWlmIChwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0KSB7CiAJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCX0KIAorCS8qIHR1cm4gdGhyb3R0bGUgb2ZmICovCisJcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKKwlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggMzNjOWU5Yy4uN2RkMGUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDRmODgzYjE3Li45YzYwZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNzYsMTMgKzc2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfZHRyX3J0czsJLyogc2F2ZWQgbW9kZW0gY29udHJvbCBvdXRwdXRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsgICAgICAgIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KLQlfX3U4IHJ4X2ZsYWdzOwkJLyogcmVjZWl2ZSBzdGF0ZSBmbGFncyAodGhyb3R0bGluZykgKi8KLQlzcGlubG9ja190IHJ4X2xvY2s7CS8qIHNwaW5sb2NrIGZvciByZWNlaXZlIHN0YXRlICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayByeF93b3JrOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JaW50IHJ4X3Byb2Nlc3NlZDsKLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwotCiAJX191MTYgaW50ZXJmYWNlOwkvKiBGVDIyMzJDLCBGVDIyMzJIIG9yIEZUNDIzMkggcG9ydCBpbnRlcmZhY2UKIAkJCQkgICAoMCBmb3IgRlQyMzIvMjQ1KSAqLwogCkBAIC03MzcsMTAgKzczMSw2IEBACiAvKiBDb25zdGFudHMgZm9yIHJlYWQgdXJiIGFuZCB3cml0ZSB1cmIgKi8KICNkZWZpbmUgQlVGU1ogNTEyCiAKLS8qIHJ4X2ZsYWdzICovCi0jZGVmaW5lIFRIUk9UVExFRAkJMHgwMQotI2RlZmluZSBBQ1RVQUxMWV9USFJPVFRMRUQJMHgwMgotCiAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCiAjZGVmaW5lIEZURElfU1RBVFVTX0IwX01BU0sJKEZURElfUlMwX0NUUyB8IEZURElfUlMwX0RTUiB8IEZURElfUlMwX1JJIHwgRlRESV9SUzBfUkxTRCkKICNkZWZpbmUgRlRESV9TVEFUVVNfQjFfTUFTSwkoRlRESV9SU19CSSkKQEAgLTc2Myw3ICs3NTMsNyBAQAogc3RhdGljIGludCAgZnRkaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBmdGRpX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTEyMzQsNyArMTIyNCw2IEBACiAJCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKIAlwcml2LT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CiAKLQl0dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKIAogY2hlY2tfYW5kX2V4aXQ6CkBAIC0xNTI3LDcgKzE1MTYsNiBAQAogCX0KIAogCWtyZWZfaW5pdCgmcHJpdi0+a3JlZik7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKQEAgLTE1NDksNyArMTUzNyw2IEBACiAJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gQlVGU1o7CiAJfQogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJ4X3dvcmssIGZ0ZGlfcHJvY2Vzc19yZWFkKTsKIAlwcml2LT5wb3J0ID0gcG9ydDsKIAogCS8qIEZyZWUgcG9ydCdzIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyLiAqLwpAQCAtMTY4Niw2ICsxNjczLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV9zdWJtaXRfcmVhZF91cmIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgbWVtX2ZsYWdzKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIGludCBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsgLyogZnRkaV9vcGVuICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwpAQCAtMTcwMCwxMiArMTcwNyw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAlwcml2LT50eF9ieXRlcyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfYnl0ZXMgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQotCWlmICh0dHkpCi0JCXR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAogCXdyaXRlX2xhdGVuY3lfdGltZXIocG9ydCk7CiAKQEAgLTE3MjUsMjMgKzE3MjYsMTQgQEAKIAkJZnRkaV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAkvKiBOb3QgdGhyb3R0bGVkICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dGhyb3R0bGVkID0gMDsKKwlwb3J0LT50aHJvdHRsZV9yZXEgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JcHJpdi0+cnhfcHJvY2Vzc2VkID0gMDsKLQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JZWxzZQorCXJlc3VsdCA9IGZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQogCQlrcmVmX2dldCgmcHJpdi0+a3JlZik7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTc4NywxMCArMTc3OSw2IEBACiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0KLQkvKiBjYW5jZWwgYW55IHNjaGVkdWxlZCByZWFkaW5nICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5yeF93b3JrKTsKLQogCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogCWtyZWZfcHV0KCZwcml2LT5rcmVmLCBmdGRpX3Npb19wcml2X3JlbGVhc2UpOwpAQCAtMjAxMywyNzEgKzIwMDEsMTIxIEBACiAJcmV0dXJuIGJ1ZmZlcmVkOwogfQogCitzdGF0aWMgaW50IGZ0ZGlfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiwKKwkJY2hhciAqcGFja2V0LCBpbnQgbGVuKQoreworCWludCBpOworCWNoYXIgc3RhdHVzOworCWNoYXIgZmxhZzsKKwljaGFyICpjaDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAobGVuIDwgMikgeworCQlkYmcoIm1hbGZvcm1lZCBwYWNrZXQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQvCisJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCisJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLworCXN0YXR1cyA9IHBhY2tldFswXSAmIEZURElfU1RBVFVTX0IwX01BU0s7CisJaWYgKHN0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgeworCQlwcml2LT5kaWZmX3N0YXR1cyB8PSBzdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXByaXYtPnByZXZfc3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qCisJICogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUgbXVsdGlwbGUKKwkgKiBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZSBwcmlvcml0eSB0aGUgZXJyb3IgaXMKKwkgKiByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyLgorCSAqLworCWZsYWcgPSBUVFlfTk9STUFMOworCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX09FKSB7CisJCWZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19CSSkgeworCQlmbGFnID0gVFRZX0JSRUFLOworCQlkYmcoIkJSRUFLIHJlY2VpdmVkIik7CisJCXVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHBvcnQpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19QRSkgeworCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKKwl9CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfRkUpIHsKKwkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJZGJnKCJGUkFNSU5HIGVycm9yIik7CisJfQorCisJbGVuIC09IDI7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOwkvKiBzdGF0dXMgb25seSAqLworCWNoID0gcGFja2V0ICsgMjsKKworCWlmICghKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpICYmIGZsYWcgPT0gVFRZX05PUk1BTCkKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGNoLCBsZW4pOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIGNoKyspIHsKKwkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsICpjaCkpCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAqY2gsIGZsYWcpOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmRhdGEgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpOworCWludCBsZW47CisJaW50IGNvdW50ID0gMDsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgeworCQlsZW4gPSBtaW5fdChpbnQsIHVyYi0+YWN0dWFsX2xlbmd0aCAtIGksIHByaXYtPm1heF9wYWNrZXRfc2l6ZSk7CisJCWNvdW50ICs9IGZ0ZGlfcHJvY2Vzc19wYWNrZXQodHR5LCBwb3J0LCBwcml2LCAmZGF0YVtpXSwgbGVuKTsKKwl9CisKKwlpZiAoY291bnQpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKLQl1bnNpZ25lZCBsb25nIGNvdW50cmVhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkICIKLQkJCSJhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkXG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2ZsYWdzICV4XG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCX0KLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQotCQlyZXR1cm47Ci0KLQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKCFwcml2KSB7Ci0JCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh1cmIgIT0gcG9ydC0+cmVhZF91cmIpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm90IG15IHVyYiFcbiIsIF9fZnVuY19fKTsKLQotCWlmIChzdGF0dXMpIHsKLQkJLyogVGhpcyB3aWxsIGhhcHBlbiBhdCBjbG9zZSBldmVyeSB0aW1lIHNvIGl0IGlzIGEgZGJnIG5vdCBhbgotCQkgICBlcnIgKi8KLQkJZGJnKCIodGhpcyBpcyBvayBvbiBjbG9zZSkgbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHN0YXR1cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvdW50IGRhdGEgYnl0ZXMsIGJ1dCBub3Qgc3RhdHVzIGJ5dGVzICovCi0JY291bnRyZWFkID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWNvdW50cmVhZCAtPSAyICogRElWX1JPVU5EX1VQKGNvdW50cmVhZCwgcHJpdi0+bWF4X3BhY2tldF9zaXplKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2J5dGVzICs9IGNvdW50cmVhZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0KLQlmdGRpX3Byb2Nlc3NfcmVhZCgmcHJpdi0+cnhfd29yay53b3JrKTsKLW91dDoKLQl0dHlfa3JlZl9wdXQodHR5KTsKLX0gLyogZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KLQotCi1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCi0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnRkaV9wcml2YXRlLCByeF93b3JrLndvcmspOwotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBwcml2LT5wb3J0OwotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWNoYXIgZXJyb3JfZmxhZzsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCi0JaW50IGk7Ci0JaW50IHJlc3VsdDsKLQlpbnQgbmVlZF9mbGlwOwotCWludCBwYWNrZXRfb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPD0gMCkKLQkJcmV0dXJuOwotCi0JdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKLQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICghcHJpdikgewotCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlmdGRpX3Byb2Nlc3NfcmVhZChwb3J0KTsKIAotCXVyYiA9IHBvcnQtPnJlYWRfdXJiOwotCWlmICghdXJiKSB7Ci0JCWRiZygiJXMgLSBiYWQgcmVhZF91cmIgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCWlmIChwcml2LT5yeF9wcm9jZXNzZWQpIHsKLQkJZGJnKCIlcyAtIGFscmVhZHkgcHJvY2Vzc2VkOiAlZCBieXRlcywgJWQgcmVtYWluIiwgX19mdW5jX18sCi0JCQkJcHJpdi0+cnhfcHJvY2Vzc2VkLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCAtIHByaXYtPnJ4X3Byb2Nlc3NlZCk7Ci0JfSBlbHNlIHsKLQkJLyogVGhlIGZpcnN0IHR3byBieXRlcyBvZiBldmVyeSByZWFkIHBhY2tldCBhcmUgc3RhdHVzICovCi0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAyKQotCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKLQkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0JCWVsc2UKLQkJCWRiZygiU3RhdHVzIG9ubHk6ICUwM29vICUwM29vIiwgZGF0YVswXSwgZGF0YVsxXSk7Ci0JfQotCi0KLQkvKiBUTyBETyAtLSBjaGVjayBmb3IgaHVuZyB1cCBsaW5lIGFuZCBoYW5kbGUgYXBwcm9wcmlhdGVseTogKi8KLQkvKiAgIHNlbmQgaGFuZ3VwICAqLwotCS8qIFNlZSBhY20uYyAtIHlvdSBkbyBhIHR0eV9oYW5ndXAgIC0gZWcgdHR5X2hhbmd1cCh0dHkpICovCi0JLyogaWYgQ0QgaXMgZHJvcHBlZCBhbmQgdGhlIGxpbmUgaXMgbm90IENMT0NBTCB0aGVuIHdlIHNob3VsZCBoYW5ndXAgKi8KLQotCW5lZWRfZmxpcCA9IDA7Ci0JZm9yIChwYWNrZXRfb2Zmc2V0ID0gcHJpdi0+cnhfcHJvY2Vzc2VkOwotCQlwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgewotCQlpbnQgbGVuZ3RoOwotCi0JCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwotCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKLQkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQlGVERJX1NUQVRVU19CMF9NQVNLOwotCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0KLQkJCQluZXdfc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKLQkJfQotCi0JCWxlbmd0aCA9IG1pbl90KHUzMiwgcHJpdi0+bWF4X3BhY2tldF9zaXplLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKLQkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAotCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7Ci0JCQlsZW5ndGggPSAwOwotCQl9Ci0KLQkJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7Ci0JCQlkYmcoIiVzIC0gdGhyb3R0bGVkIiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuZ3RoKSA8IGxlbmd0aCkgewotCQkJLyogYnJlYWsgb3V0ICYgd2FpdCBmb3IgdGhyb3R0bGluZy91bnRocm90dGxpbmcgdG8KLQkJCSAgIGhhcHBlbiAqLwotCQkJZGJnKCIlcyAtIHJlY2VpdmUgcm9vbSBsb3ciLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEhhbmRsZSBlcnJvcnMgYW5kIGJyZWFrICovCi0JCWVycm9yX2ZsYWcgPSBUVFlfTk9STUFMOwotCQkvKiBBbHRob3VnaCB0aGUgZGV2aWNlIHVzZXMgYSBiaXRtYXNrIGFuZCBoZW5jZSBjYW4gaGF2ZQotCQkgICBtdWx0aXBsZSBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZQotCQkgICBwcmlvcml0eSB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHR0eSBsYXllciAgKi8KLQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19PRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9PVkVSUlVOOwotCQkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOwotCQl9Ci0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0JJKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX0JSRUFLOwotCQkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOwotCQkJdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsocG9ydCk7Ci0JCX0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfUEUpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfUEFSSVRZOwotCQkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKLQkJfQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19GRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9GUkFNRTsKLQkJCWRiZygiRlJBTUlORyBlcnJvciIpOwotCQl9Ci0JCWlmIChsZW5ndGggPiAwKSB7Ci0JCQlmb3IgKGkgPSAyOyBpIDwgbGVuZ3RoKzI7IGkrKykgewotCQkJCS8qIE5vdGUgdGhhdCB0aGUgZXJyb3IgZmxhZyBpcyBkdXBsaWNhdGVkIGZvcgotCQkJCSAgIGV2ZXJ5IGNoYXJhY3RlciByZWNlaXZlZCBzaW5jZSB3ZSBkb24ndCBrbm93Ci0JCQkJICAgd2hpY2ggY2hhcmFjdGVyIGl0IGFwcGxpZWQgdG8gKi8KLQkJCQlpZiAoIXVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIodHR5LCBwb3J0LAotCQkJCQkJZGF0YVtwYWNrZXRfb2Zmc2V0ICsgaV0pKQotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCi0JCQkJCQlkYXRhW3BhY2tldF9vZmZzZXQgKyBpXSwKLQkJCQkJCWVycm9yX2ZsYWcpOwotCQkJfQotCQkJbmVlZF9mbGlwID0gMTsKLQkJfQotCi0jaWZkZWYgTk9UX0NPUlJFQ1RfQlVUX0tFRVBJTkdfSVRfRk9SX05PVwotCQkvKiBpZiBhIHBhcml0eSBlcnJvciBpcyBkZXRlY3RlZCB5b3UgZ2V0IHN0YXR1cyBwYWNrZXRzIGZvcmV2ZXIKLQkJICAgdW50aWwgYSBjaGFyYWN0ZXIgaXMgc2VudCB3aXRob3V0IGEgcGFyaXR5IGVycm9yLgotCQkgICBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhCi0JCSAgIG5ldmVyIGVuZGluZyBzdHJlYW0gb2YgYmFkIGRhdGEgLSBldmVuIHRob3VnaCBuZXcgZGF0YQotCQkgICBoYXNuJ3QgYmVlbiBzZW50LiBUaGVyZWZvcmUgSSAoYmlsbCkgaGF2ZSB0YWtlbiB0aGlzIG91dC4KLQkJICAgSG93ZXZlciAtIHRoaXMgbWlnaHQgbWFrZSBzZW5zZSBmb3IgZnJhbWluZyBlcnJvcnMgYW5kIHNvIG9uCi0JCSAgIHNvIEkgYW0gbGVhdmluZyB0aGUgY29kZSBpbiBmb3Igbm93LgotCQkqLwotCQllbHNlIHsKLQkJCWlmIChlcnJvcl9mbGFnICE9IFRUWV9OT1JNQUwpIHsKLQkJCQlkYmcoImVycm9yX2ZsYWcgaXMgbm90IG5vcm1hbCIpOwotCQkJCS8qIEluIHRoaXMgY2FzZSBpdCBpcyBqdXN0IHN0YXR1cyAtIGlmIHRoYXQgaXMKLQkJCQkgICBhbiBlcnJvciBzZW5kIGEgYmFkIGNoYXJhY3RlciAqLwotCQkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkKLQkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDB4ZmYsIGVycm9yX2ZsYWcpOwotCQkJCW5lZWRfZmxpcCA9IDE7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0gLyogImZvcihwYWNrZXRfb2Zmc2V0PTAuLi4iICovCi0KLQkvKiBMb3cgbGF0ZW5jeSAqLwotCWlmIChuZWVkX2ZsaXApCi0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0KLQlpZiAocGFja2V0X29mZnNldCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkvKiBub3QgY29tcGxldGVseSBwcm9jZXNzZWQgLSByZWNvcmQgcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+cnhfcHJvY2Vzc2VkID0gcGFja2V0X29mZnNldDsKLQkJZGJnKCIlcyAtIGluY29tcGxldGUsICVkIGJ5dGVzIHByb2Nlc3NlZCwgJWQgcmVtYWluIiwKLQkJCQlfX2Z1bmNfXywgcGFja2V0X29mZnNldCwKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSBwYWNrZXRfb2Zmc2V0KTsKLQkJLyogY2hlY2sgaWYgd2Ugd2VyZSB0aHJvdHRsZWQgd2hpbGUgcHJvY2Vzc2luZyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKLQkJCXByaXYtPnJ4X2ZsYWdzIHw9IEFDVFVBTExZX1RIUk9UVExFRDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQkJCWRiZygiJXMgLSBkZWZlcnJpbmcgcmVtYWluZGVyIHVudGlsIHVudGhyb3R0bGVkIiwKLQkJCQkJX19mdW5jX18pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQkvKiBpZiB0aGUgcG9ydCBpcyBjbG9zZWQgc3RvcCB0cnlpbmcgdG8gcmVhZCAqLwotCQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApCi0JCQkvKiBkZWxheSBwcm9jZXNzaW5nIG9mIHJlbWFpbmRlciAqLwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAxKTsKLQkJZWxzZQotCQkJZGJnKCIlcyAtIHBvcnQgaXMgY2xvc2VkIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiB1cmIgaXMgY29tcGxldGVseSBwcm9jZXNzZWQgKi8KLQlwcml2LT5yeF9wcm9jZXNzZWQgPSAwOwotCi0JLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApIHsKLQkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwotCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JfQotb3V0OgotCXR0eV9rcmVmX3B1dCh0dHkpOwotfSAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXE7CisJaWYgKCFwb3J0LT50aHJvdHRsZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CkBAIC0yNjA5LDMzICsyNDQ3LDMxIEBACiBzdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlX3JlcSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi0KLXN0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJaW50IHdhc190aHJvdHRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwotCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl3YXNfdGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVkOworCXBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90dGxlX3JlcSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAwKTsKKwkvKiBSZXN1Ym1pdCB1cmIgaWYgdGhyb3R0bGVkIGFuZCBvcGVuLiAqLworCWlmICh3YXNfdGhyb3R0bGVkICYmIHRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQorCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZnRkaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwppbmRleCAyMDQzMmQzLi41YWM5MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTEzOTAsMTQgKzEzOTAsMTMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJLyogc2V0IGZsYWcsIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBwdXQgaW50byBhIHF1ZXVlCiAJICAgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkd8RkxBR1NfVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogfQogCiAKQEAgLTE0MDUsMTMgKzE0MDQsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19USFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAKIAkvKiBpbiBuYXRpdmUgbW9kZSBzZW5kIHF1ZXVlZCBkYXRhIHRvIHR0eSwgaW4KIAkgICBzZXJpYWwgbW9kZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLwpAQCAtMTQxOSw3ICsxNDE3LDcgQEAKIAkJZ2FybWluX2ZsdXNoX3F1ZXVlKGdhcm1pbl9kYXRhX3ApOwogCiAJaWYgKDAgIT0gKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfQlVMS19JTl9BQ1RJVkUpKSB7Ci0JCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZGViYTA4Yy4uYmJlMDA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAogCWlmICh3YXNfdGhyb3R0bGVkKSB7CiAJCS8qIFJlc3VtZSByZWFkaW5nIGZyb20gZGV2aWNlICovCi0JCXVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKKwkJZmx1c2hfYW5kX3Jlc3VibWl0X3JlYWRfdXJiKHBvcnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggMjRmY2M2NGIuLmQ2MjMxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtOTY2LDYgKzk2NiwxNSBAQAogc3RhdGljIGludCBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOworCisJLyogU29tZSBvZiB0aGUgZGV2aWNlcyBpbiBpcGFxX2lkX3RhYmxlW10gYXJlIGNvbXBvc2l0ZSwgYW5kIHdlCisJICogc2hvdWxkbid0IGJpbmQgdG8gYWxsIHRoZSBpbnRlcmZhY2VzLiAgVGhpcyB0ZXN0IHdpbGwgcnVsZSBvdXQKKwkgKiBzb21lIG9idmlvdXNseSBpbnZhbGlkIHBvc3NpYmlsaXRpZXMuCisJICovCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4gPCBzZXJpYWwtPm51bV9wb3J0cyB8fAorCQkJc2VyaWFsLT5udW1fYnVsa19vdXQgPCBzZXJpYWwtPm51bV9wb3J0cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKIAkJLyoKIAkJICogRklYTUU6IEhQIGlQYXEgcngzNzE1LCBwb3NzaWJseSBvdGhlcnMsIGhhdmUgMSBjb25maWcgdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCAyNTdjMTZjLi4xMjk2YTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJLyoganVzdCByZXN0YXJ0IHRoZSByZWNlaXZlIGludGVycnVwdCBVUkIgKi8KIAlkYmcoImtleXNwYW5fcGRhX3J4X3VudGhyb3R0bGUgcG9ydCAlZCIsIHBvcnQtPm51bWJlcik7CiAJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpKQorCWlmICh1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKSkKIAkJZGJnKCIgdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIGZhaWxlZCIpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGY3MzczMzcuLjNhNzg3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtOTUxLDcgKzk1MSw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggYWQ0OTk4Yi4uY2QwMDljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTc3NywyMCArNzc3LDE5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKIAlpZiAoQ19DUlRTQ1RTKHR0eSkpIHsKIAkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOwogCQljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQkodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKIAl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJfQogfQogCkBAIC03OTksMjAgKzc5OCwxOSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlpZiAoKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSAmJiBDX0NSVFNDVFModHR5KSkgewogCQlwcml2LT5yeF9mbGFncyAmPSB+VEhST1RUTEVEOwogCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKIAkJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAkJKHZvaWQpIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHBvcnQtPnNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKaW5kZXggMTA4NWE1Ny4uODBmNTliNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCkBAIC0zMTQsMjEgKzMxNCwyNCBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVzdWx0OworCWludCByZXN1bHQsIHdhc190aHJvdHRsZWQ7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwl3YXNfdGhyb3R0bGVkID0gcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkOwogCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXByaXYtPmJ1bGtfcmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5idWxrX3JlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IG9wdGljb25fdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggZjY2ZTM5OC4uMzE5YWFmOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTE2NSw2ICsxNjUsNyBAQAogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMTQzRAkJCTB4MTQzRAogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMTQzRQkJCTB4MTQzRQogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMTQzRgkJCTB4MTQzRgorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMTRBQwkJCTB4MTRBQwogCiAjZGVmaW5lIFFVQU5UQV9WRU5ET1JfSUQJCQkweDA0MDgKICNkZWZpbmUgUVVBTlRBX1BST0RVQ1RfUTEwMQkJCTB4RUEwMgpAQCAtMzA3LDYgKzMwOCw3IEBACiAKICNkZWZpbmUgRExJTktfVkVORE9SX0lECQkJCTB4MTE4NgogI2RlZmluZSBETElOS19QUk9EVUNUX0RXTV82NTIJCQkweDNlMDQKKyNkZWZpbmUgRExJTktfUFJPRFVDVF9EV01fNjUyX1U1CQkweGNlMTYKIAogI2RlZmluZSBRSVNEQV9WRU5ET1JfSUQJCQkJMHgxZGE1CiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MTIJCQkweDQ1MTIKQEAgLTMxNCwxMCArMzE2LDE0IEBACiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTUJCQkweDQ1MTUKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxOQkJCTB4NDUxOQogCisvKiBUTEFZVEVDSCBQUk9EVUNUUyAqLworI2RlZmluZSBUTEFZVEVDSF9WRU5ET1JfSUQJCQkweDIwQjkKKyNkZWZpbmUgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDAJCQkweDE2ODIKIAogLyogVE9TSElCQSBQUk9EVUNUUyAqLwogI2RlZmluZSBUT1NISUJBX1ZFTkRPUl9JRAkJCTB4MDkzMAogI2RlZmluZSBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQJCTB4MTMwMgorI2RlZmluZSBUT1NISUJBX1BST0RVQ1RfRzQ1MAkJCTB4MGQ0NQogCiAjZGVmaW5lIEFMSU5LX1ZFTkRPUl9JRAkJCQkweDFlMGUKICNkZWZpbmUgQUxJTktfUFJPRFVDVF8zR1UJCQkweDkyMDAKQEAgLTMyNiw2ICszMzIsOSBAQAogI2RlZmluZSBBTENBVEVMX1ZFTkRPUl9JRAkJCTB4MWJiYgogI2RlZmluZSBBTENBVEVMX1BST0RVQ1RfWDA2MFMJCQkweDAwMDAKIAorLyogQWlycGx1cyBwcm9kdWN0cyAqLworI2RlZmluZSBBSVJQTFVTX1ZFTkRPUl9JRAkJCTB4MTAxMQorI2RlZmluZSBBSVJQTFVTX1BST0RVQ1RfTUNENjUwCQkJMHgzMTk4CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCkBAIC00MjQsNiArNDMzLDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNELCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0UsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0QUMpIH0sCiAJeyBVU0JfREVWSUNFKEFNT0lfVkVORE9SX0lELCBBTU9JX1BST0RVQ1RfOTUwOCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjY0MCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjY0MC9YVjYyMCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9WNjIwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBWNjIwL1M2MjAgKi8KQEAgLTU3NywxNCArNTg3LDE4IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9BQzI3MjYsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKKwl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTJfVTUpIH0sIC8qIFllcywgQUxJTktfVkVORE9SX0lEICovCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjFfNDUxMikgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTIzKSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTUpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxOSkgfSwKKwl7IFVTQl9ERVZJQ0UoVE9TSElCQV9WRU5ET1JfSUQsIFRPU0hJQkFfUFJPRFVDVF9HNDUwKSB9LAogCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0hTRFBBX01JTklDQVJEICkgfSwgLyogVG9zaGliYSAzRyBIU0RQQSA9PSBOb3ZhdGVsIEV4cGVkaXRlIEVVODcwRCBNaW5pQ2FyZCAqLwogCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIDB4OTAwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEFMSU5LX1ZFTkRPUl9JRCwgQUxJTktfUFJPRFVDVF8zR1UsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFMpIH0sCisJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAorCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCmluZGV4IDBmNGE3MGNlLi5jNjQ0ZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCiAJZGJnKCIlcygpOiBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7CiAJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJCSIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CkBAIC0zMzUsNyArMzM1LDcgQEAKIAogCQlkYmcoIiVzKCk6IHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfTk9JTyk7CiAJCWlmIChyZXN1bHQgIT0gMCkgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiCiAJCQkJIiB3aXRoIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKQEAgLTM0OSw3ICszNDksNyBAQAogCiAJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CiAJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX05PSU8pOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIKIAkJCSAgICAgICAiIHdpdGggZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDExMjhlMDEuLjllYzFhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTEwNDYsMTMgKzEwNDYsMTUgQEAKIAkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCiAJaWYgKGxpbmVfc3RhdHVzICYgVUFSVF9PVkVSUlVOX0VSUk9SKQogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKLQlpZiAocG9ydC0+Y29uc29sZSAmJiBwb3J0LT5zeXNycSkgeworCisJaWYgKHR0eV9mbGFnID09IFRUWV9OT1JNQUwgJiYgIShwb3J0LT5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSkKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZWxzZSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyArK2kpCiAJCQlpZiAoIXVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIodHR5LCBwb3J0LCBkYXRhW2ldKSkKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKLQl9IGVsc2UKLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQogCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA4YzA3NWIyLi41MDE5MzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0xNyw3ICsxNyw3IEBACiAgIFdob20gYmFzZWQgaGlzIG9uIHRoZSBLZXlzcGFuIGRyaXZlciBieSBIdWdoIEJsZW1pbmdzIDxodWdoQGJsZW1pbmdzLm9yZz4KICovCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYuMS4zLjciCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2LjEuMy44IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJLZXZpbiBMbG95ZCwgRWxpbmEgUGFzaGV2YSwgTWF0dGhldyBTYWZhciwgUm9yeSBGaWxlciIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIFNpZXJyYSBXaXJlbGVzcyBVU0IgbW9kZW1zIgogCkBAIC0yOTYsNyArMjk2LDYgQEAKIAlpbnQgZHNyX3N0YXRlOwogCWludCBkY2Rfc3RhdGU7CiAJaW50IHJpX3N0YXRlOwotCiAJdW5zaWduZWQgaW50IG9wZW5lZDoxOwogfTsKIApAQCAtMzA2LDYgKzMwNSw4IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCV9fdTE2IGludGVyZmFjZSA9IDA7CiAJaW50IHZhbCA9IDA7CisJaW50IGRvX3NlbmQgPSAwOworCWludCByZXR2YWw7CiAKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCkBAIC0zMjQsMTAgKzMyNSw3IEBACiAJCSAqLwogCQlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgewogCQkJLyogc2VuZCBjb250cm9sIG1lc3NhZ2UgKi8KLQkJCXJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQlkb19zZW5kID0gMTsKIAkJfQogCX0KIApAQCAtMzM5LDEyICszMzcsMTggQEAKIAkJCWludGVyZmFjZSA9IDE7CiAJCWVsc2UgaWYgKHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9PSA1KQogCQkJaW50ZXJmYWNlID0gMjsKLQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCQlkb19zZW5kID0gMTsKIAl9Ci0JcmV0dXJuIDA7CisJaWYgKCFkb19zZW5kKQorCQlyZXR1cm4gMDsKKworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTc3Myw4ICs3NzcsMTEgQEAKIAogCWlmIChzZXJpYWwtPmRldikgewogCQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKQorCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CisJCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQkJc2llcnJhX3NlbmRfc2V0dXAocG9ydCk7CisJCX0KIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAkJcG9ydGRhdGEtPm9wZW5lZCA9IDA7CkBAIC03ODgsOCArNzk1LDYgQEAKIAkJCXNpZXJyYV9yZWxlYXNlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CiAJCX0KLQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCX0KIH0KIApAQCAtODI3LDYgKzgzMiw4IEBACiAJaWYgKGVycikgewogCQkvKiBnZXQgcmlkIG9mIGV2ZXJ5dGhpbmcgYXMgaW4gY2xvc2UgKi8KIAkJc2llcnJhX2Nsb3NlKHBvcnQpOworCQkvKiByZXN0b3JlIGJhbGFuY2UgZm9yIGF1dG9wbSAqLworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKQEAgLTkxNSw3ICs5MjIsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIApAQCAtOTIzLDggKzkzMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKQotCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2pdKTsKKwkJc2llcnJhX3N0b3BfcnhfdXJicyhwb3J0KTsKIAkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcG9ydGRhdGEtPmFjdGl2ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCmluZGV4IGNiN2U5NWYuLmIyODJjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKQEAgLTE2NSwzNCArMTY1LDM2IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc3ltYm9sX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVzdWx0OworCWJvb2wgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IGZhbHNlOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKIAlwcml2LT5pbnRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJaWYgKHdhc190aHJvdHRsZWQpIHsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCX0KIH0KIAogc3RhdGljIGludCBzeW1ib2xfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggZmY3NWEzNS4uYmQzZmE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xNTYsNyArMTU2LDggQEAKIAlpZiAoc2VyaWFsLT5taW5vciAhPSBTRVJJQUxfVFRZX05PX01JTk9SKQogCQlyZXR1cm5fc2VyaWFsKHNlcmlhbCk7CiAKLQlzZXJpYWwtPnR5cGUtPnJlbGVhc2Uoc2VyaWFsKTsKKwlpZiAoc2VyaWFsLT5hdHRhY2hlZCkKKwkJc2VyaWFsLT50eXBlLT5yZWxlYXNlKHNlcmlhbCk7CiAKIAkvKiBOb3cgdGhhdCBub3RoaW5nIGlzIHVzaW5nIHRoZSBwb3J0cywgdGhleSBjYW4gYmUgZnJlZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVyczsgKytpKSB7CkBAIC0xOTIsNyArMTkzLDcgQEAKICAqIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGEgbmV3IHR0eSBnZXRzIHVzZWQuICBIZW5jZSB0aGlzIGlzIHdoZXJlIHdlCiAgKiBhY3F1aXJlIHJlZmVyZW5jZXMgdG8gdGhlIHVzYl9zZXJpYWwgc3RydWN0dXJlIGFuZCB0aGUgZHJpdmVyIG1vZHVsZSwKICAqIHdoZXJlIHdlIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgcG9ydCwgYW5kIHdoZXJlIHdlIGRvIGFuIGF1dG9yZXN1bWUuCi0gKiBBbGwgdGhlc2UgYWN0aW9ucyBhcmUgcmV2ZXJzZWQgaW4gc2VyaWFsX3JlbGVhc2UoKS4KKyAqIEFsbCB0aGVzZSBhY3Rpb25zIGFyZSByZXZlcnNlZCBpbiBzZXJpYWxfY2xlYW51cCgpLgogICovCiBzdGF0aWMgaW50IHNlcmlhbF9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CkBAIC0zMzksMTUgKzM0MCwxNiBAQAogfQogCiAvKioKLSAqIHNlcmlhbF9yZWxlYXNlIC0gZnJlZSByZXNvdXJjZXMgcG9zdCBjbG9zZS9oYW5ndXAKKyAqIHNlcmlhbF9jbGVhbnVwIC0gZnJlZSByZXNvdXJjZXMgcG9zdCBjbG9zZS9oYW5ndXAKICAqIEBwb3J0OiBwb3J0IHRvIGZyZWUgdXAKICAqCiAgKiBEbyB0aGUgcmVzb3VyY2UgZnJlZWluZyBhbmQgcmVmY291bnQgZHJvcHBpbmcgZm9yIHRoZSBwb3J0LgogICogQXZvaWQgZnJlZWluZyB0aGUgY29uc29sZS4KICAqCi0gKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCB0dHkga3JlZiBpcyBkcm9wcGVkLgorICogQ2FsbGVkIGFzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSBsYXN0IHR0eSBrcmVmIGlzIGRyb3BwZWQsCisgKiBhbmQgdGhlIHR0eSBsYXllciBoYXMgYWxyZWFkeSBkb25lIHRoZSB0dHlfc2h1dGRvd24odHR5KTsKICAqLwotc3RhdGljIHZvaWQgc2VyaWFsX3JlbGVhc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIHNlcmlhbF9jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKQEAgLTM2MSw5ICszNjMsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCS8qIFN0YW5kYXJkIHNodXRkb3duIHByb2Nlc3NpbmcgKi8KLQl0dHlfc2h1dGRvd24odHR5KTsKLQogCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCiAJc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtMTA2MSwxMiArMTA2MCwxNSBAQAogCQltb2R1bGVfcHV0KHR5cGUtPmRyaXZlci5vd25lcik7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJc2VyaWFsLT5hdHRhY2hlZCA9IDE7CiAJCWlmIChyZXR2YWwgPiAwKSB7CiAJCQkvKiBxdWlldGx5IGFjY2VwdCB0aGlzIGRldmljZSwgYnV0IGRvbid0IGJpbmQgdG8gYQogCQkJICAgc2VyaWFsIHBvcnQgYXMgaXQncyBhYm91dCB0byBkaXNhcHBlYXIgKi8KIAkJCXNlcmlhbC0+bnVtX3BvcnRzID0gMDsKIAkJCWdvdG8gZXhpdDsKIAkJfQorCX0gZWxzZSB7CisJCXNlcmlhbC0+YXR0YWNoZWQgPSAxOwogCX0KIAogCWlmIChnZXRfZnJlZV9zZXJpYWwoc2VyaWFsLCBudW1fcG9ydHMsICZtaW5vcikgPT0gTlVMTCkgewpAQCAtMTE2Niw4ICsxMTY4LDEwIEBACiAKIAlpZiAoc2VyaWFsLT50eXBlLT5zdXNwZW5kKSB7CiAJCXIgPSBzZXJpYWwtPnR5cGUtPnN1c3BlbmQoc2VyaWFsLCBtZXNzYWdlKTsKLQkJaWYgKHIgPCAwKQorCQlpZiAociA8IDApIHsKKwkJCXNlcmlhbC0+c3VzcGVuZGluZyA9IDA7CiAJCQlnb3RvIGVycl9vdXQ7CisJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewpAQCAtMTIxMCw3ICsxMjE0LDcgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0Jc2VyaWFsX2NoYXJzX2luX2J1ZmZlciwKIAkudGlvY21nZXQgPQkJc2VyaWFsX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9CQlzZXJpYWxfdGlvY21zZXQsCi0JLnNodXRkb3duID0gCQlzZXJpYWxfcmVsZWFzZSwKKwkuY2xlYW51cCA9IAkJc2VyaWFsX2NsZWFudXAsCiAJLmluc3RhbGwgPSAJCXNlcmlhbF9pbnN0YWxsLAogCS5wcm9jX2ZvcHMgPQkJJnNlcmlhbF9wcm9jX2ZvcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwppbmRleCAxYWE1ZDIwLi5hZDFmOTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtNTEzLDcgKzUxMyw4IEBACiAJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfQogCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCQlwcml2LT5ieXRlc19pbiArPSBhdmFpbGFibGVfcm9vbTsKKwkJaWYgKHR0eSkKKwkJCXByaXYtPmJ5dGVzX2luICs9IGF2YWlsYWJsZV9yb29tOwogCiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKQEAgLTU4MiwxMiArNTgzLDExIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiAKQEAgLTU5NSwyMSArNTk1LDIzIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVzdWx0OworCWludCByZXN1bHQsIHdhc190aHJvdHRsZWQ7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gMDsKKwl3YXNfdGhyb3R0bGVkID0gcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkOwogCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKLQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCmluZGV4IDYyNDI0ZWUuLjEwOTNkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTk0OSwxMyArOTQ5LDEyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAlpbmZvLT5mbGFncyB8PSBUSFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmaW5mby0+bG9jayk7CiAKIAlyZXR1cm47CiB9CkBAIC05NjYsMTQgKzk2NSwxMyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAlhY3R1YWxseV90aHJvdHRsZWQgPSBpbmZvLT5mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKIAlpbmZvLT5mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmaW5mby0+bG9jayk7CiAKIAlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQogCQlyeF9kYXRhX3NvZnRpbnQoJmluZm8tPnJ4X3dvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggZTIwZGM1Mi4uNTg5ZjZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAkJLyogZGV2aWNlIHN1cHBvcnRzIGFuZCBuZWVkcyBiaWdnZXIgc2Vuc2UgYnVmZmVyICovCiAJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0FORV9TRU5TRSkKIAkJCXNlbnNlX3NpemUgPSB+MDsKLQorUmV0cnlfU2Vuc2U6CiAJCVVTX0RFQlVHUCgiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOwogCiAJCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgc2Vuc2Vfc2l6ZSk7CkBAIC03MjAsNiArNzIwLDIxIEBACiAJCQlzcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCWdvdG8gSGFuZGxlX0Vycm9yczsKIAkJfQorCisJCS8qIFNvbWUgZGV2aWNlcyBjbGFpbSB0byBzdXBwb3J0IGxhcmdlciBzZW5zZSBidXQgZmFpbCB3aGVuCisJCSAqIHRyeWluZyB0byByZXF1ZXN0IGl0LiBXaGVuIGEgdHJhbnNwb3J0IGZhaWx1cmUgaGFwcGVucworCQkgKiB1c2luZyBVU19GU19TQU5FX1NFTlNFLCB3ZSBhbHdheXMgcmV0cnkgd2l0aCBhIHN0YW5kYXJkCisJCSAqIChzbWFsbCkgc2Vuc2UgcmVxdWVzdC4gVGhpcyBmaXhlcyBzb21lIFVTQiBHU00gbW9kZW1zCisJCSAqLworCQlpZiAodGVtcF9yZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCAmJgorCQkgICAgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKSAmJgorCQkgICAgc2Vuc2Vfc2l6ZSAhPSBVU19TRU5TRV9TSVpFKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZSwgcmV0cnkgc21hbGwgc2Vuc2VcbiIpOworCQkJc2Vuc2Vfc2l6ZSA9IFVTX1NFTlNFX1NJWkU7CisJCQlnb3RvIFJldHJ5X1NlbnNlOworCQl9CisKKwkJLyogT3RoZXIgZmFpbHVyZXMgKi8KIAkJaWYgKHRlbXBfcmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CiAJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZVxuIik7CiAKQEAgLTc2OCwxNyArNzgzLDMyIEBACiAJCS8qIHNldCB0aGUgcmVzdWx0IHNvIHRoZSBoaWdoZXIgbGF5ZXJzIGV4cGVjdCB0aGlzIGRhdGEgKi8KIAkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKLQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQuICBaZXJvCi0JCSAqIG91dCB0aGUgc2Vuc2UgYnVmZmVyIHNvIHRoZSBoaWdoZXIgbGF5ZXJzIHdvbid0IHJlYWxpemUKLQkJICogd2UgZGlkIGFuIHVuc29saWNpdGVkIGF1dG8tc2Vuc2UuICovCi0JCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgJiYKLQkJCS8qIEZpbGVtYXJrIDAsIGlnbm9yZSBFT00sIElMSSAwLCBubyBzZW5zZSAqLworCQkvKiBXZSBvZnRlbiBnZXQgZW1wdHkgc2Vuc2UgZGF0YS4gIFRoaXMgY291bGQgaW5kaWNhdGUgdGhhdAorCQkgKiBldmVyeXRoaW5nIHdvcmtlZCBvciB0aGF0IHRoZXJlIHdhcyBhbiB1bnNwZWNpZmllZAorCQkgKiBwcm9ibGVtLiAgV2UgaGF2ZSB0byBkZWNpZGUgd2hpY2guCisJCSAqLworCQlpZiAoCS8qIEZpbGVtYXJrIDAsIGlnbm9yZSBFT00sIElMSSAwLCBubyBzZW5zZSAqLwogCQkJCShzcmItPnNlbnNlX2J1ZmZlclsyXSAmIDB4YWYpID09IDAgJiYKIAkJCS8qIE5vIEFTQyBvciBBU0NRICovCiAJCQkJc3JiLT5zZW5zZV9idWZmZXJbMTJdID09IDAgJiYKIAkJCQlzcmItPnNlbnNlX2J1ZmZlclsxM10gPT0gMCkgewotCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOwotCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAweDA7CisKKwkJCS8qIElmIHRoaW5ncyBhcmUgcmVhbGx5IG9rYXksIHRoZW4gbGV0J3Mgc2hvdyB0aGF0LgorCQkJICogWmVybyBvdXQgdGhlIHNlbnNlIGJ1ZmZlciBzbyB0aGUgaGlnaGVyIGxheWVycworCQkJICogd29uJ3QgcmVhbGl6ZSB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4KKwkJCSAqLworCQkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKworCQkJLyogSWYgdGhlcmUgd2FzIGEgcHJvYmxlbSwgcmVwb3J0IGFuIHVuc3BlY2lmaWVkCisJCQkgKiBoYXJkd2FyZSBlcnJvciB0byBwcmV2ZW50IHRoZSBoaWdoZXIgbGF5ZXJzIGZyb20KKwkJCSAqIGVudGVyaW5nIGFuIGluZmluaXRlIHJldHJ5IGxvb3AuCisJCQkgKi8KKwkJCX0gZWxzZSB7CisJCQkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCQkJc3JiLT5zZW5zZV9idWZmZXJbMl0gPSBIQVJEV0FSRV9FUlJPUjsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggMDc5YWUwZi4uZDRmMDM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xODIzLDYgKzE4MjMsMTMgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFJlcG9ydGVkIGJ5IFNlcmdleSBQaW5hZXYgPGRmb0BhbnRleC5ydT4gKi8KK1VOVVNVQUxfREVWKCAgMHg0MTAyLCAweDEwNTksIDB4MDAwMCwgIDB4MDAwMCwKKyAgICAgICAgICAgICAgICJpUml2ZXIiLAorICAgICAgICAgICAgICAgIlA3SyIsCisgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgIFVTX0ZMX01BWF9TRUNUT1JTXzY0ICksCisKIC8qCiAgKiBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQDJnZW4uY29tPgogICogVGhlIGtleSBtYWtlcyB0aGUgU0NTSSBzdGFjayBwcmludCBjb25mdXNpbmcgKGJ1dCBoYXJtbGVzcykgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGIyZjE0OWYuLjQ1MTZjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMjAwLDM1ICsyMDAsNDAgQEAKIHsKIAlpbnQgcmVzdWx0LCBieXRlcywgc2VjZF9zaXplOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7Ci0Jc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHNlY2Q7CisJc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yICpzZWNkOwogCWNvbnN0IHN0cnVjdCB1c2JfZW5jcnlwdGlvbl9kZXNjcmlwdG9yICpldGQsICpjY20xX2V0ZCA9IE5VTEw7Ci0Jdm9pZCAqc2VjZF9idWY7CiAJY29uc3Qgdm9pZCAqaXRyLCAqdG9wOwogCWNoYXIgYnVmWzY0XTsKIAorCXNlY2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfU0VDVVJJVFksCi0JCQkJICAgIDAsICZzZWNkLCBzaXplb2Yoc2VjZCkpOworCQkJCSAgICAwLCBzZWNkLCBzaXplb2Yoc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yKSk7CiAJaWYgKHJlc3VsdCA8IHNpemVvZihzZWNkKSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkOworCQlnb3RvIG91dDsKIAl9Ci0Jc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC53VG90YWxMZW5ndGgpOwotCXNlY2RfYnVmID0ga21hbGxvYyhzZWNkX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChzZWNkX2J1ZiA9PSBOVUxMKSB7CisJc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC0+d1RvdGFsTGVuZ3RoKTsKKwlzZWNkID0ga3JlYWxsb2Moc2VjZCwgc2VjZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIHNlY3VyaXR5IGRlc2NyaXB0b3JzXG4iKTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbG9jOworCQlnb3RvIG91dDsKIAl9CiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgc2VjZF9idWYsIHNlY2Rfc2l6ZSk7CisJCQkJICAgIDAsIHNlY2QsIHNlY2Rfc2l6ZSk7CiAJaWYgKHJlc3VsdCA8IHNlY2Rfc2l6ZSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbDsKKwkJZ290byBvdXQ7CiAJfQogCWJ5dGVzID0gMDsKLQlpdHIgPSBzZWNkX2J1ZiArIHNpemVvZihzZWNkKTsKLQl0b3AgPSBzZWNkX2J1ZiArIHJlc3VsdDsKKwlpdHIgPSAmc2VjZFsxXTsKKwl0b3AgPSAodm9pZCAqKXNlY2QgKyByZXN1bHQ7CiAJd2hpbGUgKGl0ciA8IHRvcCkgewogCQlldGQgPSBpdHI7CiAJCWlmICh0b3AgLSBpdHIgPCBzaXplb2YoKmV0ZCkpIHsKQEAgLTI1OSwyNCArMjY0LDE2IEBACiAJCWRldl9lcnIoZGV2LCAiV1VTQiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IENDTTEgZW5jcnlwdGlvbiwgIgogCQkJImNhbid0IHVzZSFcbiIpOwogCQlyZXN1bHQgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yX25vX2NjbTE7CisJCWdvdG8gb3V0OwogCX0KIAl3dXNiX2Rldi0+Y2NtMV9ldGQgPSAqY2NtMV9ldGQ7CiAJZGV2X2RiZyhkZXYsICJzdXBwb3J0ZWQgZW5jcnlwdGlvbjogJXM7IHVzaW5nICVzICgweCUwMngvJTAyeClcbiIsCiAJCWJ1Ziwgd3VzYl9ldF9uYW1lKGNjbTFfZXRkLT5iRW5jcnlwdGlvblR5cGUpLAogCQljY20xX2V0ZC0+YkVuY3J5cHRpb25WYWx1ZSwgY2NtMV9ldGQtPmJBdXRoS2V5SW5kZXgpOwogCXJlc3VsdCA9IDA7Ci0Ja2ZyZWUoc2VjZF9idWYpOwogb3V0OgorCWtmcmVlKHNlY2QpOwogCXJldHVybiByZXN1bHQ7Ci0KLQotZXJyb3Jfbm9fY2NtMToKLWVycm9yX3NlY2RfYWxsOgotCWtmcmVlKHNlY2RfYnVmKTsKLWVycm9yX3NlY2RfYWxsb2M6Ci1lcnJvcl9zZWNkOgotCWdvdG8gb3V0OwogfQogCiB2b2lkIHd1c2JfZGV2X3NlY19ybShzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvdXdiLWRlYnVnLmMgYi9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYwppbmRleCA0YTQyOTkzLi4yZWVjZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYworKysgYi9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbW1hbmRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbW1hbmRfZm9wcyA9IHsKIAkub3BlbiAgID0gY29tbWFuZF9vcGVuLAogCS53cml0ZSAgPSBjb21tYW5kX3dyaXRlLAogCS5yZWFkICAgPSBOVUxMLApAQCAtMjU1LDcgKzI1NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJlc2VydmF0aW9uc19wcmludCwgaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlc2VydmF0aW9uc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzZXJ2YXRpb25zX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSByZXNlcnZhdGlvbnNfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApAQCAtMjgzLDcgKzI4Myw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRycF9hdmFpbF9wcmludCwgaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRycF9hdmFpbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJwX2F2YWlsX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBkcnBfYXZhaWxfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2Ivd2hjLXJjLmMgYi9kcml2ZXJzL3V3Yi93aGMtcmMuYwppbmRleCAxZDlhNmY1Li4wMTk1MGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi93aGMtcmMuYworKysgYi9kcml2ZXJzL3V3Yi93aGMtcmMuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggOWJiYjI4NS4uMTg4ZTFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAogY29uZmlnIEZCX1BSRV9JTklUX0ZCCiAJYm9vbCAiRG9uJ3QgcmVpbml0aWFsaXplLCB1c2UgYm9vdGxvYWRlcidzIEdEQy9EaXNwbGF5IGNvbmZpZ3VyYXRpb24iCi0JZGVwZW5kcyBvbiBGQl9NQjg2MlhYX0xJTUUKKwlkZXBlbmRzIG9uIEZCICYmIEZCX01CODYyWFhfTElNRQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiBkaXNwbGF5IGNvbnRlbnRzIHNob3VsZCBiZSBpbmhlcml0ZWQgYXMgc2V0IGJ5CiAJICB0aGUgYm9vdGxvYWRlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwppbmRleCA4Y2QyNzliLi4zNzYyNGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCkBAIC0zMjksMTIgKzMyOSw2IEBACiAgKgogICoJKiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKgogICoJaW50ICgqZmJfbW1hcCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLSAqCi0gKgkqIHNhdmUgY3VycmVudCBoYXJkd2FyZSBzdGF0ZSAqCi0gKgl2b2lkICgqZmJfc2F2ZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotICoKLSAqCSogcmVzdG9yZSBzYXZlZCBzdGF0ZSAqCi0gKgl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwogICogfSA7CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IDI4MzBmZmQuLmQ1ZTgwMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCkBAIC00ODQsNiArNDg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgY2xrX3ZhbHVlX2toejsKIAl1bnNpZ25lZCBsb25nIGJpdHNfcGVyX2xpbmU7CisJdW5zaWduZWQgbG9uZyBwaXhfZmFjdG9yID0gMjsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKQEAgLTUxNiwyMCArNTE3LDI0IEBACiAJLyogTm93LCB0aGUgTENEQyBjb3JlLi4uICovCiAKIAkvKiBTZXQgcGl4ZWwgY2xvY2sgKi8KKwlpZiAoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgJiYgIWNwdV9pc19hdDkxc2FtOWc0NWVzKCkpCisJCXBpeF9mYWN0b3IgPSAxOworCiAJY2xrX3ZhbHVlX2toeiA9IGNsa19nZXRfcmF0ZShzaW5mby0+bGNkY19jbGspIC8gMTAwMDsKIAogCXZhbHVlID0gRElWX1JPVU5EX1VQKGNsa192YWx1ZV9raHosIFBJQ09TMktIWihpbmZvLT52YXIucGl4Y2xvY2spKTsKIAotCWlmICh2YWx1ZSA8IDIpIHsKKwlpZiAodmFsdWUgPCBwaXhfZmFjdG9yKSB7CiAJCWRldl9ub3RpY2UoaW5mby0+ZGV2aWNlLCAiQnlwYXNzaW5nIHBpeGVsIGNsb2NrIGRpdmlkZXJcbiIpOwogCQlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19MQ0RDT04xLCBBVE1FTF9MQ0RDX0JZUEFTUyk7CiAJfSBlbHNlIHsKLQkJdmFsdWUgPSAodmFsdWUgLyAyKSAtIDE7CisJCXZhbHVlID0gKHZhbHVlIC8gcGl4X2ZhY3RvcikgLSAxOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgKiBwcm9ncmFtbWluZyBDTEtWQUwgPSAweCUwOGx4XG4iLAogCQkJCXZhbHVlKTsKIAkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMSwKIAkJCQl2YWx1ZSA8PCBBVE1FTF9MQ0RDX0NMS1ZBTF9PRkZTRVQpOwotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSBLSFoyUElDT1MoY2xrX3ZhbHVlX2toeiAvICgyICogKHZhbHVlICsgMSkpKTsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0KKwkJCUtIWjJQSUNPUyhjbGtfdmFsdWVfa2h6IC8gKHBpeF9mYWN0b3IgKiAodmFsdWUgKyAxKSkpOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgdXBkYXRlZCBwaXhjbGs6ICAgICAlbHUgS0h6XG4iLAogCQkJCQlQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggOTA4NjFjZC4uMDliZmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0zMSw2ICszMSwxMyBAQAogCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBMQ0QgcGFuZWxzIHVzdWFsbHkgZm91bmQgb24gU0hBUlAKIAkgIGNvcmdpIChDN3gwKSBhbmQgc3BpdHogKEN4eDAwKSBtb2RlbHMuCiAKK2NvbmZpZyBMQ0RfTE1TMjgzR0YwNQorCXRyaXN0YXRlICJTYW1zdW5nIExNUzI4M0dGMDUgTENEIgorCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfR1BJTworCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgTE1TMjgzR0YwNS4gVGhpcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0CisJICBmb3IgcG93ZXJpbmcgdGhlIExDRCB1cC9kb3duIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UuCisKIGNvbmZpZyBMQ0RfTFRWMzUwUVYKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBMVFYzNTBRViBMQ0QgUGFuZWwiCiAJZGVwZW5kcyBvbiBMQ0RfQ0xBU1NfREVWSUNFICYmIFNQSV9NQVNURVIKQEAgLTIyOSwzICsyMzYsMjkgQEAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIFRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCwgc2F5IHkgdG8gZW5hYmxlIHRoZQogCSAgYmFja2xpZ2h0IGRyaXZlci4KKworY29uZmlnIEJBQ0tMSUdIVF9XTTgzMVgKKwl0cmlzdGF0ZSAiV004MzF4IFBNSUMgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgTUZEX1dNODMxWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmFja2xpZ2h0IGRyaXZlbiBieSB0aGUgSVNJTksgYW5kIERDREMgb2YgYQorCSAgV004MzF4IFBNSUMgc2F5IHkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIGZvciBpdC4KKworY29uZmlnIEJBQ0tMSUdIVF9BRFgKKwl0cmlzdGF0ZSAiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBBUkNIX1BYQV9BRFgKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgdGhlIGJhY2tsaWdodCBkcml2ZXIgb24gQXZpb25pYyBEZXNpZ24gWGFudGhvcy1iYXNlZAorCSAgYm9hcmRzLgorCitjb25maWcgQkFDS0xJR0hUX0FEUDU1MjAKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IERyaXZlciBmb3IgQURQNTUyMC9BRFA1NTAxIHVzaW5nIFdMRUQiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFBNSUNfQURQNTUyMAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTENEIGJhY2tsaWdodCBjb25uZWN0ZWQgdG8gdGhlIEJTVC9CTF9TTksgb3V0cHV0IG9mCisJICBBRFA1NTIwIG9yIEFEUDU1MDEsIHNheSBZIGhlcmUgdG8gZW5hYmxlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBhZHA1NTIwX2JsLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IDRlYjE3OGMuLjlhNDA1NTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIG9iai0kKENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFKSAgICAgKz0gbGNkLm8KIG9iai0kKENPTkZJR19MQ0RfQ09SR0kpCQkgICArPSBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9IUDcwMCkJCSAgICs9IGpvcm5hZGE3MjBfbGNkLm8KK29iai0kKENPTkZJR19MQ0RfTE1TMjgzR0YwNSkJICAgKz0gbG1zMjgzZ2YwNS5vCiBvYmotJChDT05GSUdfTENEX0xUVjM1MFFWKQkgICArPSBsdHYzNTBxdi5vCiBvYmotJChDT05GSUdfTENEX0lMSTkzMjApCSAgICs9IGlsaTkzMjAubwogb2JqLSQoQ09ORklHX0xDRF9QTEFURk9STSkJICAgKz0gcGxhdGZvcm1fbGNkLm8KQEAgLTI0LDQgKzI1LDcgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUJQX05WSURJQSkgKz0gbWJwX252aWRpYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1RPU0EpCSs9IHRvc2FfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEpCSs9IGtiMzg4Nl9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUX1dNODMxWCkJKz0gd204MzF4X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQURYKSAgICArPSBhZHhfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwKQkrPSBhZHA1NTIwX2JsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDVkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwL0FEUDU1MDEgTUZEIFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfYmwgeworCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlciA9IGRhdGEtPm1hc3RlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQNTAyMF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQlCTF9BVVRPX0FESik7CisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgYnJpZ2h0bmVzcyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDMgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQkgQkxfQVVUT19BREopOworCQl9CisJfSBlbHNlIHsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIGJyaWdodG5lc3MpOworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsCisJCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLAorCQkJCU1PREVfU1RBVFVTLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA1NTIwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKworCWVycm9yID0gYWRwNTUyMF9yZWFkKGRhdGEtPm1hc3RlciwgQkxfVkFMVUUsICZyZWdfdmFsKTsKKworCXJldHVybiBlcnJvciA/IGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA6IHJlZ192YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKKwkudXBkYXRlX3N0YXR1cwk9IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldHVwKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIgPSBkYXRhLT5tYXN0ZXI7CisJc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgcGRhdGEtPmwxX2RheWxpZ2h0X21heCk7CisJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9ESU0sIHBkYXRhLT5sMV9kYXlsaWdodF9kaW0pOworCisJaWYgKHBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKKwkJZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCA9IHBkYXRhLT5sMV9kYXlsaWdodF9tYXg7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX01BWCwgcGRhdGEtPmwyX29mZmljZV9tYXgpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIE9GRklDRV9ESU0sIHBkYXRhLT5sMl9vZmZpY2VfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX01BWCwgcGRhdGEtPmwzX2RhcmtfbWF4KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX0RJTSwgcGRhdGEtPmwzX2RhcmtfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9UUklQLCBwZGF0YS0+bDJfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDJfSFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfVFJJUCwgcGRhdGEtPmwzX3RyaXApOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwzX0hZUywgcGRhdGEtPmwzX2h5c3QpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFMU19DTVBSX0NGRywKKwkJCUFMU19DTVBSX0NGR19WQUwocGRhdGEtPmFibWxfZmlsdCwgTDNfRU4pKTsKKwl9CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQlCTF9DVFJMX1ZBTChwZGF0YS0+ZmFkZV9sZWRfbGF3LCBwZGF0YS0+ZW5fYW1ibF9zZW5zKSk7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkJcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTiB8IERJTV9FTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwNTUyMF93cml0ZShkYXRhLT5tYXN0ZXIsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBUktfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBUktfTUFYKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkYXJrX21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXJrX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVJLX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGFya19kaW0sIDA2NjQsIGFkcDU1MjBfYmxfZGFya19kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIE9GRklDRV9ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9kaW0sIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkcDU1MjBfYmxfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9kYXJrX21heC5hdHRyLAorCSZkZXZfYXR0cl9kYXJrX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9vZmZpY2VfbWF4LmF0dHIsCisJJmRldl9hdHRyX29mZmljZV9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2RheWxpZ2h0X2RpbS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkcDU1MjBfYmxfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHA1NTIwX2JsX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2JsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhOworCWludCByZXQgPSAwOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCWRhdGEtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoZGF0YS0+cGRhdGEgID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsIGRhdGEtPm1hc3RlciwKKwkJCWRhdGEsICZhZHA1NTIwX2JsX29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0KKwkJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBBRFA1MDIwX01BWF9CUklHSFRORVNTOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJJmFkcDU1MjBfYmxfYXR0cl9ncm91cCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJCWtmcmVlKGRhdGEpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKwlyZXQgfD0gYWRwNTUyMF9ibF9zZXR1cChibCk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9ibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWFkcDU1MjBfY2xyX2JpdHMoZGF0YS0+bWFzdGVyLCBNT0RFX1NUQVRVUywgQkxfRU4pOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJCSZhZHA1NTIwX2JsX2F0dHJfZ3JvdXApOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0dXJuIGFkcDU1MjBfYmxfc2V0KGJsLCAwKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2JsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWRwNTUyMF9ibF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWRwNTUyMF9ibF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkcDU1MjBfYmxfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhZHA1NTIwLWJhY2tsaWdodCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfYmxfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX2JsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZHA1NTIwX2JsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHA1NTIwX2JsX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfYmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkcDU1MjBfYmxfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfYmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTIwX2JsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRwNTUyMF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9ibF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQNTUyMCgwMSkgQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTIwLWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNiZGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBRFhfQkFDS0xJR0hUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgQURYX0JBQ0tMSUdIVF9DT05UUk9MX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MJMHgwOAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX1NUQVRVUwkJMHgxMAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0VSUk9SCQkweDE4CisKK3N0cnVjdCBhZHhibCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworfTsKKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2KQoreworCXN0cnVjdCBhZHhibCAqYmwgPSBibF9nZXRfZGF0YShibGRldik7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBibGRldi0+cHJvcHMuYnJpZ2h0bmVzczsKKwl3cml0ZWwodmFsdWUsIGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKworCXZhbHVlID0gcmVhZGwoYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0NPTlRST0wpOworCisJaWYgKGJsZGV2LT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykKKwkJdmFsdWUgJj0gfkFEWF9CQUNLTElHSFRfQ09OVFJPTF9FTkFCTEU7CisJZWxzZQorCQl2YWx1ZSB8PSBBRFhfQkFDS0xJR0hUX0NPTlRST0xfRU5BQkxFOworCisJd3JpdGVsKHZhbHVlLCBibC0+YmFzZSArIEFEWF9CQUNLTElHSFRfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldikKK3sKKwlzdHJ1Y3QgYWR4YmwgKmJsID0gYmxfZ2V0X2RhdGEoYmxkZXYpOworCXUzMiBicmlnaHRuZXNzOworCisJYnJpZ2h0bmVzcyA9IHJlYWRsKGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKwlyZXR1cm4gYnJpZ2h0bmVzcyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9jaGVja19mYihzdHJ1Y3QgZmJfaW5mbyAqZmIpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IDAsCisJLnVwZGF0ZV9zdGF0dXMgPSBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gYWR4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkuY2hlY2tfZmIgPSBhZHhfYmFja2xpZ2h0X2NoZWNrX2ZiLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWR4YmwgKmJsOworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlibC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmwtPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoJnBkZXYtPmRldiksICZwZGV2LT5kZXYsIGJsLAorCQkJJmFkeF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoIWJsZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmxkZXYtPnByb3BzLmJyaWdodG5lc3MgPSAweGZmOworCWJsZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibGRldik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlpbnQgcmV0ID0gMDsKKworCWJsZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmxkZXYpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfYmFja2xpZ2h0X3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHhfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF9iYWNrbGlnaHRfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkeC1iYWNrbGlnaHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X2JhY2tsaWdodF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X2JhY2tsaWdodF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLjY2MTVhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC03Myw2ICs3MywyNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GQiAqLwogCitzdGF0aWMgdm9pZCBiYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pCit7CisJY2hhciAqZW52cFsyXTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBCQUNLTElHSFRfVVBEQVRFX1NZU0ZTOgorCQllbnZwWzBdID0gIlNPVVJDRT1zeXNmcyI7CisJCWJyZWFrOworCWNhc2UgQkFDS0xJR0hUX1VQREFURV9IT1RLRVk6CisJCWVudnBbMF0gPSAiU09VUkNFPWhvdGtleSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVudnBbMF0gPSAiU09VUkNFPXVua25vd24iOworCQlicmVhazsKKwl9CisJZW52cFsxXSA9IE5VTEw7CisJa29iamVjdF91ZXZlbnRfZW52KCZiZC0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKKwlzeXNmc19ub3RpZnkoJmJkLT5kZXYua29iaiwgTlVMTCwgImFjdHVhbF9icmlnaHRuZXNzIik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsY2hhciAqYnVmKQogewpAQCAtMTQyLDYgKzE2Myw4IEBACiAJfQogCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKIAorCWJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChiZCwgQkFDS0xJR0hUX1VQREFURV9TWVNGUyk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxNCw2ICsyMzcsMjUgQEAKIH07CiAKIC8qKgorICogYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZSAtIHRlbGwgdGhlIGJhY2tsaWdodCBzdWJzeXN0ZW0gdGhhdCBoYXJkd2FyZSBzdGF0ZQorICogICBoYXMgY2hhbmdlZAorICogQGJkOiB0aGUgYmFja2xpZ2h0IGRldmljZSB0byB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYmFja2xpZ2h0IGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsCisgKiBhbmQgZ2VuZXJhdGUgYSB1ZXZlbnQgdG8gbm90aWZ5IHVzZXJzcGFjZQorICovCit2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJICAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKQoreworCW11dGV4X2xvY2soJmJkLT5vcHNfbG9jayk7CisJaWYgKGJkLT5vcHMgJiYgYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MpCisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MoYmQpOworCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKKwliYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoYmQsIHJlYXNvbik7Cit9CitFWFBPUlRfU1lNQk9MKGJhY2tsaWdodF9mb3JjZV91cGRhdGUpOworCisvKioKICAqIGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgbmV3IG9iamVjdCBvZgogICogICBiYWNrbGlnaHRfZGV2aWNlIGNsYXNzLgogICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBuZXcgb2JqZWN0KG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IDIyMTFhODUuLjk2Nzc0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC00MzMsOCArNDMzLDkgQEAKIAogCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9TVVNQRU5ERUQpCiAJCWludGVuc2l0eSA9IDA7Ci0JaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpCi0JCWludGVuc2l0eSAmPSBsY2QtPmxpbWl0X21hc2s7CisKKwlpZiAoKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpICYmIGludGVuc2l0eSA+IGxjZC0+bGltaXRfbWFzaykKKwkJaW50ZW5zaXR5ID0gbGNkLT5saW1pdF9tYXNrOwogCiAJcmV0dXJuIGNvcmdpX2JsX3NldF9pbnRlbnNpdHkobGNkLCBpbnRlbnNpdHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwppbmRleCA5M2JiNDM0Li43MDFhMTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwpAQCAtMTU0LDM0ICsxNTQsMzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlyZXR1cm4gZGE5MDN4X2JhY2tsaWdodF9zZXQoYmwsIDApOwogfQogCi1zdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQJTlVMTAotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZQkJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGE5MDN4X2JhY2tsaWdodF9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImRhOTAzeC1iYWNrbGlnaHQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJmRhOTAzeF9iYWNrbGlnaHRfcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucHJvYmUJCT0gZGE5MDN4X2JhY2tsaWdodF9wcm9iZSwKIAkucmVtb3ZlCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVtb3ZlLAotCS5zdXNwZW5kCT0gZGE5MDN4X2JhY2tsaWdodF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfYmFja2xpZ2h0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDViZTU1YTIuLjdmYjRlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gaHA2ODBibF9zZXRfaW50ZW5zaXR5LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiNjQ0OTQ3Li5hNDgyZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtNTYsNyArNTYsNyBAQAogCiBzdGF0aWMgaW50IGxjZF9yZWdpc3Rlcl9mYihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCiB7Ci0JbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZigmbGQtPmZiX25vdGlmKSk7CisJbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZihsZC0+ZmJfbm90aWYpKTsKIAlsZC0+ZmJfbm90aWYubm90aWZpZXJfY2FsbCA9IGZiX25vdGlmaWVyX2NhbGxiYWNrOwogCXJldHVybiBmYl9yZWdpc3Rlcl9jbGllbnQoJmxkLT5mYl9ub3RpZik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIGxtczI4M2dmMDUuYyAtLSBzdXBwb3J0IGZvciBTYW1zdW5nIExNUzI4M0dGMDUgTENECisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2xtczI4M2dmMDUuaD4KKworc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgeworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IGxjZF9kZXZpY2UJKmxkOworfTsKKworc3RydWN0IGxtczI4M2dmMDVfc2VxIHsKKwl1bnNpZ25lZCBjaGFyCQlyZWc7CisJdW5zaWduZWQgc2hvcnQJCXZhbHVlOworCXVuc2lnbmVkIGNoYXIJCWRlbGF5OworfTsKKworLyogTWFnaWMgc2VxdWVuY2VzIHN1cHBsaWVkIGJ5IG1hbnVmYWN0dXJlciwgZm9yIGRldGFpbHMgcmVmZXIgdG8gZGF0YXNoZWV0ICovCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfaW5pdHNlcVtdID0geworCS8qIFJFRywgVkFMVUUsIERFTEFZICovCisJeyAweDA3LCAweDAwMDAsIDAgfSwKKwl7IDB4MTMsIDB4MDAwMCwgMTAgfSwKKworCXsgMHgxMSwgMHgzMDA0LCAwIH0sCisJeyAweDE0LCAweDIwMEYsIDAgfSwKKwl7IDB4MTAsIDB4MWEyMCwgMCB9LAorCXsgMHgxMywgMHgwMDQwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNjAsIDAgfSwKKwl7IDB4MTMsIDB4MDA3MCwgMjAwIH0sCisKKwl7IDB4MDEsIDB4MDEyNywgMCB9LAorCXsgMHgwMiwJMHgwNzAwLCAwIH0sCisJeyAweDAzLCAweDEwMzAsIDAgfSwKKwl7IDB4MDgsIDB4MDIwOCwgMCB9LAorCXsgMHgwQiwgMHgwNjIwLCAwIH0sCisJeyAweDBDLCAweDAxMTAsIDAgfSwKKwl7IDB4MzAsIDB4MDEyMCwgMCB9LAorCXsgMHgzMSwgMHgwMTI3LCAwIH0sCisJeyAweDMyLCAweDAwMDAsIDAgfSwKKwl7IDB4MzMsIDB4MDUwMywgMCB9LAorCXsgMHgzNCwgMHgwNzI3LCAwIH0sCisJeyAweDM1LCAweDAxMjQsIDAgfSwKKwl7IDB4MzYsIDB4MDcwNiwgMCB9LAorCXsgMHgzNywgMHgwNzAxLCAwIH0sCisJeyAweDM4LCAweDBGMDAsIDAgfSwKKwl7IDB4MzksIDB4MEYwMCwgMCB9LAorCXsgMHg0MCwgMHgwMDAwLCAwIH0sCisJeyAweDQxLCAweDAwMDAsIDAgfSwKKwl7IDB4NDIsIDB4MDEzZiwgMCB9LAorCXsgMHg0MywgMHgwMDAwLCAwIH0sCisJeyAweDQ0LCAweDAxM2YsIDAgfSwKKwl7IDB4NDUsIDB4MDAwMCwgMCB9LAorCXsgMHg0NiwgMHhlZjAwLCAwIH0sCisJeyAweDQ3LCAweDAxM2YsIDAgfSwKKwl7IDB4NDgsIDB4MDAwMCwgMCB9LAorCXsgMHgwNywgMHgwMDE1LCAzMCB9LAorCisJeyAweDA3LCAweDAwMTcsIDAgfSwKKworCXsgMHgyMCwgMHgwMDAwLCAwIH0sCisJeyAweDIxLCAweDAwMDAsIDAgfSwKKwl7IDB4MjIsIDB4MDAwMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfcGR3bnNlcVtdID0geworCXsgMHgwNywgMHgwMDE2LCAzMCB9LAorCisJeyAweDA3LCAweDAwMDQsIDAgfSwKKwl7IDB4MTAsIDB4MDIyMCwgMjAgfSwKKworCXsgMHgxMywgMHgwMDYwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNDAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDAwMCwgMCB9LAorCXsgMHgxMCwgMHgwMDAwLCAwIH0KK307CisKKworc3RhdGljIHZvaWQgbG1zMjgzZ2YwNV9yZXNldCh1bnNpZ25lZCBsb25nIGdwaW8sIGJvb2wgaW52ZXJ0ZWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWludmVydGVkKTsKKwltZGVsYXkoMTAwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCBpbnZlcnRlZCk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCAhaW52ZXJ0ZWQpOworCW1kZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxtczI4M2dmMDVfdG9nZ2xlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQlzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgKnNlcSwgaW50IHN6KQoreworCWNoYXIgYnVmWzNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJYnVmWzBdID0gMHg3NDsKKwkJYnVmWzFdID0gMHgwMDsKKwkJYnVmWzJdID0gc2VxW2ldLnJlZzsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQlidWZbMF0gPSAweDc2OworCQlidWZbMV0gPSBzZXFbaV0udmFsdWUgPj4gODsKKwkJYnVmWzJdID0gc2VxW2ldLnZhbHVlICYgMHhmZjsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQltZGVsYXkoc2VxW2ldLmRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG1zMjgzZ2YwNV9wb3dlcl9zZXQoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0ID0gbGNkX2dldF9kYXRhKGxkKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3QtPnNwaTsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBvd2VyKSB7CisJCWlmIChwZGF0YSkKKwkJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJCXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9pbml0c2VxLCBBUlJBWV9TSVpFKGRpc3BfaW5pdHNlcSkpOworCX0gZWxzZSB7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9wZHduc2VxLCBBUlJBWV9TSVpFKGRpc3BfcGR3bnNlcSkpOworCQlpZiAocGRhdGEpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+cmVzZXRfZ3BpbywKKwkJCQkJcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGxtc19vcHMgPSB7CisJLnNldF9wb3dlcgk9IGxtczI4M2dmMDVfcG93ZXJfc2V0LAorCS5nZXRfcG93ZXIJPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbG1zMjgzZ2YwNV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdDsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsY2RfZGV2aWNlICpsZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZGF0YSAhPSBOVUxMKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfZ3BpbywgIkxNUzI4NUdGMDUgUkVTRVQiKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9ncGlvLAorCQkJCQkJIXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbXMyODNnZjA1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJObyBtZW1vcnkgZm9yIGRldmljZSBzdGF0ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWxkID0gbGNkX2RldmljZV9yZWdpc3RlcigibG1zMjgzZ2YwNSIsICZzcGktPmRldiwgc3QsICZsbXNfb3BzKTsKKwlpZiAoSVNfRVJSKGxkKSkgeworCQlyZXQgPSBQVFJfRVJSKGxkKTsKKwkJZ290byBlcnIyOworCX0KKworCXN0LT5zcGkgPSBzcGk7CisJc3QtPmxkID0gbGQ7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdCk7CisKKwkvKiBraWNrIGluIHRoZSBMQ0QgKi8KKwlpZiAocGRhdGEpCisJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sIHBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX2luaXRzZXEsIEFSUkFZX1NJWkUoZGlzcF9pbml0c2VxKSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlrZnJlZShzdCk7CitlcnI6CisJaWYgKHBkYXRhICE9IE5VTEwpCisJCWdwaW9fZnJlZShwZGF0YS0+cmVzZXRfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbXMyODNnZjA1X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHN0LT5zcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJbGNkX2RldmljZV91bnJlZ2lzdGVyKHN0LT5sZCk7CisKKwlpZiAocGRhdGEgIT0gTlVMTCkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKKworCWtmcmVlKHN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbG1zMjgzZ2YwNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG1zMjgzZ2YwNSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGxtczI4M2dmMDVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsbXMyODNnZjA1X3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCBsbXMyODNnZjA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG1zMjgzZ2YwNV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbG1zMjgzZ2YwNV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsbXMyODNnZjA1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxtczI4M2dmMDVfaW5pdCk7Cittb2R1bGVfZXhpdChsbXMyODNnZjA1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QyODNHRjA1IExDRCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCmluZGV4IDNiYjRjMGEuLjllZGI4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDEsMSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rQWlyMSwxIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJmludGVsX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rIDUsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTc1LDYgKzE4NCwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2s1LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDIsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTkxLDYgKzIwOSwyNCBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAogCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSw1IiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdG9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmg+CisKK3N0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgeworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlpbnQgaXNpbmtfcmVnOworCWludCBjdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkYXRhLT53bTgzMXg7CisJaW50IHBvd2VyX3VwID0gIWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyAmJiBicmlnaHRuZXNzOworCWludCBwb3dlcl9kb3duID0gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmICFicmlnaHRuZXNzOworCWludCByZXQ7CisKKwlpZiAocG93ZXJfdXApIHsKKwkJLyogRW5hYmxlIHRoZSBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9FTkEsIFdNODMxWF9DUzFfRU5BKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBFbmFibGUgdGhlIERDLURDICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQ0RDX0VOQUJMRSwKKwkJCQkgICAgICBXTTgzMVhfREM0X0VOQSwgV004MzFYX0RDNF9FTkEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3dlcl9kb3duKSB7CisJCS8qIERDREMgZmlyc3QgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLAorCQkJCSAgICAgIFdNODMxWF9EQzRfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9EUklWRSB8IFdNODMxWF9DUzFfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIG5ldyBicmlnaHRuZXNzICovCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLAorCQkJICAgICAgV004MzFYX0NTMV9JU0VMX01BU0ssIGJyaWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWlmIChwb3dlcl91cCkgeworCQkvKiBEcml2ZSBjdXJyZW50IHRocm91Z2ggdGhlIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0RSSVZFLCBXTTgzMVhfQ1MxX0RSSVZFKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCS8qIElmIHdlIHdlcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHBvd2VyIHRyYW5zaXRpb24gYWx3YXlzIHNodXQgZG93bgorCSAqIGZvciBzYWZldHkuCisJICovCisJaWYgKHBvd2VyX3VwIHx8IHBvd2VyX2Rvd24pIHsKKwkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLCBXTTgzMVhfREM0X0VOQSwgMCk7CisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywgV004MzFYX0NTMV9FTkEsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlpbnQgYnJpZ2h0bmVzcyA9IGJsLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJsLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9TVVNQRU5ERUQpCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0dXJuIHdtODMxeF9iYWNrbGlnaHRfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkudXBkYXRlX3N0YXR1cwk9IHdtODMxeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKndtODMxeF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9wZGF0YSAqcGRhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJaW50IHJldCwgaSwgbWF4X2lzZWwsIGlzaW5rX3JlZywgZGNkY19jZmc7CisKKwkvKiBXZSBuZWVkIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQl3bTgzMXhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHdtODMxeF9wZGF0YS0+YmFja2xpZ2h0OworCX0gZWxzZSB7CisJCXBkYXRhID0gTlVMTDsKKwl9CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGN1cnJlbnQgd2UgY2FuIHVzZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzMVhfSVNJTktfTUFYX0lTRUw7IGkrKykgeworCQlpZiAod204MzF4X2lzaW5rdl92YWx1ZXNbaV0gPiBwZGF0YS0+bWF4X3VBKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG1heF91QTogJWR1QVxuIiwgcGRhdGEtPm1heF91QSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltYXhfaXNlbCA9IGkgLSAxOworCisJaWYgKHBkYXRhLT5tYXhfdUEgIT0gd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJNYXhpbXVtIGN1cnJlbnQgaXMgJWR1QSBub3QgJWR1QSBhcyByZXF1ZXN0ZWRcbiIsCisJCQkgd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdLCBwZGF0YS0+bWF4X3VBKTsKKworCXN3aXRjaCAocGRhdGEtPmlzaW5rKSB7CisJY2FzZSAxOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzE7CisJCWRjZGNfY2ZnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzI7CisJCWRjZGNfY2ZnID0gV004MzFYX0RDNF9GQlNSQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBJU0lOSyAlZFxuIiwgcGRhdGEtPmlzaW5rKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSBJU0lOSyB0byB1c2UgZm9yIGZlZWRiYWNrICovCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQzRfQ09OVFJPTCwgV004MzFYX0RDNF9GQlNSQywKKwkJCSAgICAgIGRjZGNfY2ZnKTsKKworCXdtODMxeF9yZWdfbG9jayh3bTgzMXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlkYXRhLT5pc2lua19yZWcgPSBpc2lua19yZWc7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIndtODMxeCIsICZwZGV2LT5kZXYsCisJCQlkYXRhLCAmd204MzF4X2JhY2tsaWdodF9vcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKworCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9pc2VsOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2lzZWw7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwkvKiBEaXNhYmxlIHRoZSBEQ0RDIGlmIGl0IHdhcyBzdGFydGVkIHNvIHdlIGNhbiBib290c3RyYXAgKi8KKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsIFdNODMxWF9EQzRfRU5BLCAwKTsKKworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzF4X2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIndtODMxeC1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUJCT0gd204MzF4X2JhY2tsaWdodF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTgzMXhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204MzF4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODMxeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgV004MzF4IFBNSUNzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDVhNjg2Y2UuLjM2ODFjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yMzExLDE0ICsyMzExLDExIEBACiAJCW9wcy0+Z3JhcGhpY3MgPSAxOwogCiAJCWlmICghYmxhbmspIHsKLQkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZSkKLQkJCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZShpbmZvKTsKIAkJCXZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVyB8IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCW9wcy0+Z3JhcGhpY3MgPSAwOwogCQkJb3BzLT52YXIgPSBpbmZvLT52YXI7Ci0JCX0gZWxzZSBpZiAoaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUpCi0JCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZShpbmZvKTsKKwkJfQogCX0KIAogIAlpZiAoIWZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IDQyZTEwMDUuLjAzNWQ1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8dmlkZW8vZGE4eHgtZmIuaD4KQEAgLTcwNSw3ICs3MDQsNyBAQAogCiAJaWYgKGkgPT0gQVJSQVlfU0laRShrbm93bl9sY2RfcGFuZWxzKSkgewogCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkdMQ0Q6IE5vIHZhbGlkIHBhbmVsIGZvdW5kXG4iKTsKLQkJcmV0ID0gRU5PREVWOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKIAl9IGVsc2UKIAkJZGV2X2luZm8oJmRldmljZS0+ZGV2LCAiR0xDRDogRm91bmQgJXMgcGFuZWxcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKaW5kZXggMGE3YTY2Ny4uYzI3YWIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZmJfZGVmZXJyZWRfaW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmYl9kZWZlcnJlZF9pb192bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZiX2RlZmVycmVkX2lvX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBmYl9kZWZlcnJlZF9pb19ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBhMWYyZTdjLi45OWJiZDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogIAkJZ2xvYmFsID0gMTsKICAJfQogCi0gCWlmICghZ2xvYmFsICYmICFzdHJzdHIob3B0aW9ucywgImZiOiIpKSB7CisgCWlmICghZ2xvYmFsICYmICFzdHJjaHIob3B0aW9ucywgJzonKSkgewogIAkJZmJfbW9kZV9vcHRpb24gPSBvcHRpb25zOwogIAkJZ2xvYmFsID0gMTsKICAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCmluZGV4IGYyZGU1YTEuLjQ3NDQyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKQEAgLTI0LDExICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogI2luY2x1ZGUgIm1kZGlfaHcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCmluZGV4IDljNzgwNTAuLmM5ZTkzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKaW5kZXggODBkMGY1Zi4uNzEwNDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwppbmRleCA5OTYzNmEyLi42YzUxOWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwpAQCAtMjIsOSArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KIAogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CkBAIC0yNjIsMTEgKzI1OSw2IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJdW5zaWduZWQgbG9uZyB2c3RhcnQ7CiAKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JaWYgKCFnZXRfcG1lbV9maWxlKGltZy0+bWVtb3J5X2lkLCBzdGFydCwgJnZzdGFydCwgbGVuLCBmaWxlcCkpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KIAlmaWxlID0gZmdldF9saWdodChpbWctPm1lbW9yeV9pZCwgJnB1dF9uZWVkZWQpOwogCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTI4MywxMiArMjc1LDYgQEAKIAogdm9pZCBwdXRfaW1nKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQogewotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQlpZiAoc3JjX2ZpbGUpCi0JCXB1dF9wbWVtX2ZpbGUoc3JjX2ZpbGUpOwotCWlmIChkc3RfZmlsZSkKLQkJcHV0X3BtZW1fZmlsZShkc3RfZmlsZSk7Ci0jZW5kaWYKIH0KIAogaW50IG1kcF9ibGl0KHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqZmIsCkBAIC0zMjAsOSArMzA2LDYgQEAKIAlpZiAodW5saWtlbHkoZ2V0X2ltZygmcmVxLT5kc3QsIGZiLCAmZHN0X3N0YXJ0LCAmZHN0X2xlbiwgJmRzdF9maWxlKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBjb3VsZCBub3QgcmV0cmlldmUgZHN0IGltYWdlIGZyb20gIgogCQkJCSJtZW1vcnlcbiIpOwotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7Ci0jZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJm1kcF9tdXRleCk7CkBAIC00OTksNyArNDgyLDYgQEAKIAkvKiByZWdpc3RlciBtZHAgZGV2aWNlICovCiAJbWRwLT5tZHBfZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCW1kcC0+bWRwX2Rldi5kZXYuY2xhc3MgPSBtZHBfY2xhc3M7Ci0Jc25wcmludGYobWRwLT5tZHBfZGV2LmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAibWRwJWQiLCBwZGV2LT5pZCk7CiAKIAkvKiBpZiB5b3UgY2FuIHJlbW92ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIHlvdSdkIGhhdmUgdG8gaW1wbGVtZW50CiAJICogdGhpczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwppbmRleCBiYTJjNDY3Li40ZmYwMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXNtX21kcC5oPgotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKICNpbmNsdWRlICJtZHBfaHcuaCIKQEAgLTU3OSwyNSArNTc4LDYgQEAKIHN0YXRpYyB2b2lkIGZsdXNoX2ltZ3Moc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MsCiAJCSAgICAgICBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSkKIHsKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JdWludDMyX3Qgc3JjMF9sZW4sIHNyYzFfbGVuLCBkc3QwX2xlbiwgZHN0MV9sZW47Ci0KLQkvKiBmbHVzaCBzcmMgaW1hZ2VzIHRvIG1lbW9yeSBiZWZvcmUgZG1hIHRvIG1kcCAqLwotCWdldF9sZW4oJnJlcS0+c3JjLCAmcmVxLT5zcmNfcmVjdCwgcmVncy0+c3JjX2JwcCwgJnNyYzBfbGVuLAotCQkmc3JjMV9sZW4pOwotCWZsdXNoX3BtZW1fZmlsZShzcmNfZmlsZSwgcmVxLT5zcmMub2Zmc2V0LCBzcmMwX2xlbik7Ci0JaWYgKElTX1BTRVVET1BMTlIocmVxLT5zcmMuZm9ybWF0KSkKLQkJZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQgKyBzcmMwX2xlbiwKLQkJCQlzcmMxX2xlbik7Ci0KLQkvKiBmbHVzaCBkc3QgaW1hZ2VzICovCi0JZ2V0X2xlbigmcmVxLT5kc3QsICZyZXEtPmRzdF9yZWN0LCByZWdzLT5kc3RfYnBwLCAmZHN0MF9sZW4sCi0JCSZkc3QxX2xlbik7Ci0JZmx1c2hfcG1lbV9maWxlKGRzdF9maWxlLCByZXEtPmRzdC5vZmZzZXQsIGRzdDBfbGVuKTsKLQlpZiAoSVNfUFNFVURPUExOUihyZXEtPmRzdC5mb3JtYXQpKQotCQlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCArIGRzdDBfbGVuLAotCQkJCWRzdDFfbGVuKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBnZXRfY2hyb21hX2FkZHIoc3RydWN0IG1kcF9pbWcgKmltZywgc3RydWN0IG1kcF9yZWN0ICpyZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwppbmRleCBkNWU1OTU1Li43MGRhZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwpAQCAtOTMsNyArOTMsNyBAQAogfTsKIAogLyogVGhlc2UgbmVlZCB0byBiZSBzYXZlZCAvIHJlc3RvcmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdC4gKi8KLXN0YXRpYyBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4MDQsCQkvKiBEb24ndCBzYXZlIFBMTCBjdHJsICgweDBDKSAqLwogCQkuZW5kCT0gMHgwYSwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CiAJewogCQkuc3RhcnQJPSAweDE4LAkJLyogU0RSQU0gY29udHJvbCAqLwogCQkuZW5kCT0gMHgyMCwKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAJc3RydWN0IG9tYXBmYl9kZXZpY2UJKmZiZGV2OwogCXN0cnVjdCBsY2RfY3RybF9leHRpZgkqZXh0aWY7Ci0Jc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CisJY29uc3Qgc3RydWN0IGxjZF9jdHJsCSppbnRfY3RybDsKIAogCXZvaWQJCQkoKnBvd2VyX3VwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQJCQkoKnBvd2VyX2Rvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCQkJICAgKDEgPDwgT01BUEZCX0NPTE9SX1lVVjQyMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9zYXZlX3JlZ3Moc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQorc3RhdGljIHZvaWQgX3NhdmVfcmVncyhjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCiB7CiAJaW50IGk7CiAKQEAgLTEzODMsNyArMTM4Myw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfcmVzdG9yZV9yZWdzKHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCAqbGlzdCwgaW50IGNudCkKK3N0YXRpYyB2b2lkIF9yZXN0b3JlX3JlZ3MoY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCmluZGV4IDgwYTExZDAuLmYxNmU0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCWF0b21pY19kZWMoJmRpc3BjLm1hcF9jb3VudFtwbGFuZV0pOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CiAJLm9wZW4gPSBtbWFwX3VzZXJfb3BlbiwKIAkuY2xvc2UgPSBtbWFwX3VzZXJfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCAxMjVlNjA1Li4wZDBjOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAgKiBTZXQgZmJfaW5mby5maXggZmllbGRzIGFuZCBhbHNvIHVwZGF0ZXMgZmJkZXYuCiAgKiBXaGVuIGNhbGxpbmcgdGhpcyBmYl9pbmZvLnZhciBtdXN0IGJlIHNldCB1cCBhbHJlYWR5LgogICovCi1zdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmkpCitzdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmksIGludCBmcm9tX2luaXQpCiB7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CkBAIC00MDMsMTAgKzQwMywxNiBAQAogCiAJcmcgPSAmcGxhbmUtPmZiZGV2LT5tZW1fZGVzYy5yZWdpb25bcGxhbmUtPmlkeF07CiAJZmJpLT5zY3JlZW5fYmFzZQk9IHJnLT52YWRkcjsKLQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOwotCWZpeC0+c21lbV9zdGFydAkJPSByZy0+cGFkZHI7Ci0JZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKLQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisKKwlpZiAoIWZyb21faW5pdCkgeworCQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOworCQlmaXgtPnNtZW1fc3RhcnQJCT0gcmctPnBhZGRyOworCQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOworCQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisJfSBlbHNlIHsKKwkJZml4LT5zbWVtX3N0YXJ0CQk9IHJnLT5wYWRkcjsKKwkJZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKKwl9CiAKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJYnBwID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKQEAgLTcwNCw3ICs3MTAsNyBAQAogCWludCByID0gMDsKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7Ci0Jc2V0X2ZiX2ZpeChmYmkpOworCXNldF9mYl9maXgoZmJpLCAwKTsKIAlyID0gY3RybF9jaGFuZ2VfbW9kZShmYmkpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKGZiZGV2KTsKIApAQCAtOTA0LDcgKzkxMCw3IEBACiAJCWlmIChvbGRfc2l6ZSAhPSBzaXplKSB7CiAJCQlpZiAoc2l6ZSkgewogCQkJCW1lbWNweSgmZmJpLT52YXIsIG5ld192YXIsIHNpemVvZihmYmktPnZhcikpOwotCQkJCXNldF9mYl9maXgoZmJpKTsKKwkJCQlzZXRfZmJfZml4KGZiaSwgMCk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogU2V0IHRoZXNlIGV4cGxpY2l0bHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUKQEAgLTE1MDQsNyArMTUxMCw3IEBACiAJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGZiZGV2LT5wYW5lbC0+YnBwOwogCiAJc2V0X2ZiX3ZhcihpbmZvLCB2YXIpOwotCXNldF9mYl9maXgoaW5mbyk7CisJc2V0X2ZiX2ZpeChpbmZvLCAxKTsKIAogCXIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxNiwgMCk7CiAJaWYgKHIgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCA2NTA2MTE3Li4xODIwYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xNjM4LDI0ICsxNjM4LDI2IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0RJU0FCTEVfUE0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19FTkFCTEVfUE0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhZmJfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YWZiX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFmYl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBweGFmYl9pbml0X3ZpZGVvX21lbW9yeShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQpAQCAtMjA4MSw2ICsyMDgzLDkgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCisJaWYgKGNwdV9pc19weGEzeHgoKSAmJiBpbmYtPmFjY2VsZXJhdGlvbl9lbmFibGVkKQorCQlmYmktPmZiLmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1BYQTNYWDsKKwogCWZiaS0+YmFja2xpZ2h0X3Bvd2VyID0gaW5mLT5weGFmYl9iYWNrbGlnaHRfcG93ZXI7CiAJZmJpLT5sY2RfcG93ZXIgPSBpbmYtPnB4YWZiX2xjZF9wb3dlcjsKIApAQCAtMjA5MSwxNCArMjA5NiwxNCBAQAogCQlnb3RvIGZhaWxlZF9mYmk7CiAJfQogCi0JciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCBkZXYtPm5hbWUpOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIGRldi0+bmFtZSk7CiAJaWYgKHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbGVkX2ZiaTsKIAl9CiAKLQlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJZmJpLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoZmJpLT5tbWlvX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTIxOTcsNyArMjIwMiw3IEBACiBmYWlsZWRfZnJlZV9pbzoKIAlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKIGZhaWxlZF9mcmVlX3JlczoKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIGZhaWxlZF9mYmk6CiAJY2xrX3B1dChmYmktPmNsayk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKQEAgLTIyMzcsNyArMjI0Miw3IEBACiAJaW91bm1hcChmYmktPm1taW9fYmFzZSk7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCiAJY2xrX3B1dChmYmktPmNsayk7CiAJa2ZyZWUoZmJpKTsKQEAgLTIyNDgsMTEgKzIyNTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YWZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhZmJfcHJvYmUsCiAJLnJlbW92ZSAJPSBfX2RldmV4aXRfcChweGFmYl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gcHhhZmJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YWZiX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInB4YTJ4eC1mYiIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFmYl9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAzN2IxMzVkLi44NDJkMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKIAkJdmdhX291dDgoMHgzYzUsIHNyOCwgcGFyKTsKIAkJdmdhX291dDgoMHgzYzQsIDB4MGQsIHBhcik7CiAJCXNyZCA9IHZnYV9pbjgoMHgzYzUsIHBhcik7Ci0JCXNyZCAmPSAweDAzOworCQlzcmQgJj0gMHg1MDsKIAogCQlzd2l0Y2ggKGJsYW5rKSB7CiAJCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKQEAgLTE2MDYsMjIgKzE2MDYsNiBAQAogCXJldHVybiAoYmxhbmsgPT0gRkJfQkxBTktfTk9STUFMKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZhZ2VmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXNhdmFnZV9nZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGluZm8pOwotCXNhdmFnZV9zZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKLX0KLQogc3RhdGljIGludCBzYXZhZ2VmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC0xNjY3LDggKzE2NTEsNiBAQAogCS5mYl9zZXRjb2xyZWcgICA9IHNhdmFnZWZiX3NldGNvbHJlZywKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzYXZhZ2VmYl9wYW5fZGlzcGxheSwKIAkuZmJfYmxhbmsgICAgICAgPSBzYXZhZ2VmYl9ibGFuaywKLQkuZmJfc2F2ZV9zdGF0ZSAgPSBzYXZhZ2VmYl9zYXZlX3N0YXRlLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZSwKICNpZiBkZWZpbmVkKENPTkZJR19GQl9TQVZBR0VfQUNDRUwpCiAJLmZiX2ZpbGxyZWN0ICAgID0gc2F2YWdlZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhICAgID0gc2F2YWdlZmJfY29weWFyZWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IGUzNTIzMmEuLjU0ZmJiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC0xNDExLDIzICsxNDExLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZlc2FmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JaWYgKHBhci0+dmJlX3N0YXRlX3NhdmVkKQotCQlrZnJlZShwYXItPnZiZV9zdGF0ZV9zYXZlZCk7Ci0KLQlwYXItPnZiZV9zdGF0ZV9zYXZlZCA9IHV2ZXNhZmJfdmJlX3N0YXRlX3NhdmUocGFyKTsKLX0KLQotc3RhdGljIHZvaWQgdXZlc2FmYl9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JdXZlc2FmYl92YmVfc3RhdGVfcmVzdG9yZShwYXIsIHBhci0+dmJlX3N0YXRlX3NhdmVkKTsKLX0KLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgdXZlc2FmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5mYl9vcGVuCT0gdXZlc2FmYl9vcGVuLApAQCAtMTQ0MSw4ICsxNDI0LDYgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfY2hlY2tfdmFyCT0gdXZlc2FmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSB1dmVzYWZiX3NldF9wYXIsCi0JLmZiX3NhdmVfc3RhdGUJPSB1dmVzYWZiX3NhdmVfc3RhdGUsCi0JLmZiX3Jlc3RvcmVfc3RhdGUgPSB1dmVzYWZiX3Jlc3RvcmVfc3RhdGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdXZlc2FmYl9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0xNDU5LDE1ICsxNDQwLDYgQEAKIAlpbmZvLT5maXgueXBhbnN0ZXAgPSBwYXItPnlwYW4gPyAxIDogMDsKIAlpbmZvLT5maXgueXdyYXBzdGVwID0gKHBhci0+eXBhbiA+IDEpID8gMSA6IDA7CiAKLQkvKgotCSAqIElmIHdlIHdlcmUgdW5hYmxlIHRvIGdldCB0aGUgc3RhdGUgYnVmZmVyIHNpemUsIGRpc2FibGUKLQkgKiBmdW5jdGlvbnMgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBoYXJkd2FyZSBzdGF0ZS4KLQkgKi8KLQlpZiAocGFyLT52YmVfc3RhdGVfc2l6ZSA9PSAwKSB7Ci0JCWluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlID0gTlVMTDsKLQkJaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUgPSBOVUxMOwotCX0KLQogCS8qIERpc2FibGUgYmxhbmtpbmcgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIHNvLiAqLwogCWlmICghYmxhbmspCiAJCWluZm8tPmZib3BzLT5mYl9ibGFuayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCAyMDBjMjJmLi45ZGQ1ODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogLy8jZGVmaW5lIERFQlVHCiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19iYWxsb29uLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTI0OCw3ICsyNDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0YTFmMWViLi4yOGQ5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01MzAsMTkgKzUzMCwyMiBAQAogCQkJZXJyID0gUFRSX0VSUih2cXNbaV0pOwogCQkJZ290byBlcnJvcl9maW5kOwogCQl9CisKKwkJaWYgKCF2cF9kZXYtPnBlcl92cV92ZWN0b3JzIHx8IG1zaXhfdmVjID09IFZJUlRJT19NU0lfTk9fVkVDVE9SKQorCQkJY29udGludWU7CisKIAkJLyogYWxsb2NhdGUgcGVyLXZxIGlycSBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykgewotCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCi0JCQkJICIlcy0lcyIsCi0JCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOwotCQkJZXJyID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIHZyaW5nX2ludGVycnVwdCwgMCwKLQkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCQkgIHZxc1tpXSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJdnBfZGVsX3ZxKHZxc1tpXSk7Ci0JCQkJZ290byBlcnJvcl9maW5kOwotCQkJfQorCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAorCQkJICIlcy0lcyIsCisJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW21zaXhfdmVjXS52ZWN0b3IsCisJCQkJICB2cmluZ19pbnRlcnJ1cHQsIDAsCisJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJCSAgdnFzW2ldKTsKKwkJaWYgKGVycikgeworCQkJdnBfZGVsX3ZxKHZxc1tpXSk7CisJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmNTM2MDA1Li5mYmQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTI4NSw2ICsyODUsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLworCXJtYigpOworCiAJaSA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmlkOwogCSpsZW4gPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwppbmRleCBkZjUyY2IzLi40MDZjYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCkBAIC0yNCwxOSArMjQsNiBAQAogI2luY2x1ZGUgIi4uL3cxX2ludC5oIgogCiAvKioKLSAqIEFkZHJlc3MgaXMgc2VsZWN0ZWQgdXNpbmcgMiBwaW5zLCByZXN1bHRpbmcgaW4gNCBwb3NzaWJsZSBhZGRyZXNzZXMuCi0gKiAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYgotICogSG93ZXZlciwgdGhlIGNoaXAgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgZG9pbmcgYW4gaTJjIHdyaXRlLAotICogc28gdXNlIHRoZSBmb3JjZSBtb2R1bGUgcGFyYW1ldGVyLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKioKLSAqIEluc21vZCBwYXJhbWV0ZXJzCi0gKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZHMyNDgyKTsKLQotLyoqCiAgKiBUaGUgRFMyNDgyIHJlZ2lzdGVycyAtIHRoZXJlIGFyZSAzIHJlZ2lzdGVycyB0aGF0IGFyZSBhZGRyZXNzZWQgYnkgYSByZWFkCiAgKiBwb2ludGVyLiBUaGUgcmVhZCBwb2ludGVyIGlzIHNldCBieSB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgogICoKQEAgLTk2LDggKzgzLDYgQEAKIAogc3RhdGljIGludCBkczI0ODJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgZHMyNDgyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogCkBAIC0xMTcsOCArMTAyLDYgQEAKIAkucHJvYmUJCT0gZHMyNDgyX3Byb2JlLAogCS5yZW1vdmUJCT0gZHMyNDgyX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBkczI0ODJfaWQsCi0JLmRldGVjdAkJPSBkczI0ODJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogLyoKQEAgLTQyNSwxOSArNDA4LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAotCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIHwKLQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImRzMjQ4MiIsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHMyNDgyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC00NDYsNiArNDE2LDExIEBACiAJaW50IHRlbXAxOwogCWludCBpZHg7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzMjQ4Ml9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBmZjNlYjhmLi4zNzExYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0yODIsNiArMjgyLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBudWM5MDBfd2R0LgogCitjb25maWcgQURYX1dBVENIRE9HCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3Mgd2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBBUkNIX1BYQV9BRFgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBvbiBBdmlvbmljCisJICBEZXNpZ24gWGFudGhvcyBib2FyZHMuCisKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiAKIGNvbmZpZyBBVDMyQVA3MDBYX1dEVApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggMzQ4YjNiOC4uNjk5MTk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC00NSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfQ09IOTAxMzI3X1dBVENIRE9HKSArPSBjb2g5MDEzMjdfd2R0Lm8KIG9iai0kKENPTkZJR19TVE1QM1hYWF9XQVRDSERPRykgKz0gc3RtcDN4eHhfd2R0Lm8KIG9iai0kKENPTkZJR19OVUM5MDBfV0FUQ0hET0cpICs9IG51YzkwMF93ZHQubworb2JqLSQoQ09ORklHX0FEWF9XQVRDSERPRykgKz0gYWR4X3dkdC5vCiAKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVQzMkFQNzAwWF9XRFQpICs9IGF0MzJhcDcwMHhfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZmIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXZpb25pYyBEZXNpZ24gR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKworI2RlZmluZSBXQVRDSERPR19OQU1FICJhZHgtd2R0IgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTAkJMHgwMAorI2RlZmluZQlBRFhfV0RUX0NPTlRST0xfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTF9uUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUJQURYX1dEVF9USU1FT1VUCQkweDA4CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZHhfd2R0X2RldjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRyaXZlcl9vcGVuOworCisjZGVmaW5lCVdEVF9TVEFURV9TVE9QCTAKKyNkZWZpbmUJV0RUX1NUQVRFX1NUQVJUCTEKKworc3RydWN0IGFkeF93ZHQgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCB3YWtlOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBhZHhfd2R0X2luZm8gPSB7CisJLmlkZW50aXR5ID0gIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgV2F0Y2hkb2ciLAorCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCit9OworCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0YXJ0X2xvY2tlZChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXUzMiBjdHJsOworCisJY3RybCA9IHJlYWRsKHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJY3RybCB8PSBBRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCXdyaXRlbChjdHJsLCB3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCXdkdC0+c3RhdGUgPSBXRFRfU1RBVEVfU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RhcnQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RvcF9sb2NrZWQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1MzIgY3RybDsKKworCWN0cmwgPSByZWFkbCh3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9FTkFCTEU7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJd2R0LT5zdGF0ZSA9IFdEVF9TVEFURV9TVE9QOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0b3Aoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zZXRfdGltZW91dChzdHJ1Y3QgYWR4X3dkdCAqd2R0LCB1bnNpZ25lZCBsb25nIHNlY29uZHMpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gc2Vjb25kcyAqIDEwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJc3RhdGUgPSB3ZHQtPnN0YXRlOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwl3cml0ZWwodGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKworCWlmIChzdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpCisJCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisKKwl3ZHQtPnRpbWVvdXQgPSB0aW1lb3V0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2dldF90aW1lb3V0KHN0cnVjdCBhZHhfd2R0ICp3ZHQsIHVuc2lnbmVkIGxvbmcgKnNlY29uZHMpCit7CisJKnNlY29uZHMgPSB3ZHQtPnRpbWVvdXQgLyAxMDAwOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2tlZXBhbGl2ZShzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJd3JpdGVsKHdkdC0+dGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhZHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGFkeF93ZHRfZGV2KTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZkcml2ZXJfb3BlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB3ZHQ7CisJYWR4X3dkdF9zZXRfdGltZW91dCh3ZHQsIDMwKTsKKwlhZHhfd2R0X3N0YXJ0KHdkdCk7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgYWR4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlhZHhfd2R0X3N0b3Aod2R0KTsKKwljbGVhcl9iaXQoMCwgJmRyaXZlcl9vcGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBhZHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXVuc2lnbmVkIGxvbmcgX191c2VyICpwID0gYXJncDsKKwl1bnNpZ25lZCBsb25nIHNlY29uZHMgPSAwOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhZHhfd2R0X2luZm8sIHNpemVvZihhZHhfd2R0X2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCWFkeF93ZHRfa2VlcGFsaXZlKHdkdCk7CisJCXJldHVybiAwOworCisJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQlpZiAoZ2V0X3VzZXIoc2Vjb25kcywgcCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlhZHhfd2R0X3NldF90aW1lb3V0KHdkdCwgc2Vjb25kcyk7CisKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCWFkeF93ZHRfZ2V0X3RpbWVvdXQod2R0LCAmc2Vjb25kcyk7CisJCXJldHVybiBwdXRfdXNlcihzZWNvbmRzLCBwKTsKKworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZvcHRpb25zLCBhcmdwLCBzaXplb2Yob3B0aW9ucykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJYWR4X3dkdF9zdG9wKHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQlhZHhfd2R0X3N0YXJ0KHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJcmV0dXJuIHJldDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAobGVuKQorCQlhZHhfd2R0X2tlZXBhbGl2ZSh3ZHQpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWR4X3dkdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLm9wZW4gPSBhZHhfd2R0X29wZW4sCisJLnJlbGVhc2UgPSBhZHhfd2R0X3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gYWR4X3dkdF9pb2N0bCwKKwkud3JpdGUgPSBhZHhfd2R0X3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFkeF93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmYWR4X3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQ7CisJaW50IHJldCA9IDA7CisJdTMyIGN0cmw7CisKKwl3ZHQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp3ZHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdkdCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgV0RUIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ3ZHQtPmxvY2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJd2R0LT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghd2R0LT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogZGlzYWJsZSB3YXRjaGRvZyBhbmQgcmVib290IG9uIHRpbWVvdXQgKi8KKwljdHJsID0gcmVhZGwod2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwljdHJsICY9IH5BRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9uUkVTRVQ7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3ZHQpOworCWFkeF93ZHRfZGV2ID0gcGRldjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vciAlZCAiCisJCQkJIihlcnI9JWQpXG4iLCBXQVRDSERPR19NSU5PUiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWR4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlhZHhfd2R0X3N0b3Aod2R0KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZHhfd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl3ZHQtPndha2UgPSAod2R0LT5zdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpID8gMSA6IDA7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfd2R0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3ZHQtPndha2UpCisJCWFkeF93ZHRfc3RhcnQod2R0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWR4X3dkdF9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhZHhfd2R0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF93ZHRfcmVzdW1lLAorfTsKKworIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCSgmYWR4X3dkdF9wbV9vcHMpCisjZWxzZQorIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfd2R0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfd2R0X3JlbW92ZSksCisJLnNodXRkb3duID0gYWR4X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IFdBVENIRE9HX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSBBRFhfV0RUX1BNX09QUywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X3dkdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF93ZHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBXYXRjaGRvZyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAxZThmMDJmLi5kM2M4MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CiAJcmlvd2RfZGV2aWNlID0gcDsKLQllcnIgPSAwOworCXJldHVybiAwOwogCiBvdXRfaW91bm1hcDoKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCmluZGV4IDg1MmNhMTkuLjkxNDMwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCX0KIAogCWVyciA9IG1pc2NfcmVnaXN0ZXIoJmZpdHBjMl93ZHRfbWlzY2Rldik7Ci0JaWYgKCFlcnIpIHsKKwlpZiAoZXJyKSB7CiAJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIGVycik7CiAJCWdvdG8gZXJyX21hcmdpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jIGIvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMKaW5kZXggYTk1OTJkOS4uNmM0MjY5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggODczY2QzMS4uMTVjY2U1MyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtNDAsNiArNDAsMjQgQEAKICNpbmNsdWRlICJmaWQuaCIKIAogLyoqCisgKiBzdHJ1Y3QgcDlfcmRpciAtIHJlYWRkaXIgYWNjb3VudGluZworICogQG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHJlYWRkaXIKKyAqIEBoZWFkOiBzdGFydCBvZmZzZXQgb2YgY3VycmVudCBkaXJyZWFkIGJ1ZmZlcgorICogQHRhaWw6IGVuZCBvZmZzZXQgb2YgY3VycmVudCBkaXJyZWFkIGJ1ZmZlcgorICogQGJ1ZjogZGlycmVhZCBidWZmZXIKKyAqCisgKiBwcml2YXRlIHN0cnVjdHVyZSBmb3Iga2VlcGluZyB0cmFjayBvZiByZWFkZGlyCisgKiBhbGxvY2F0ZWQgb24gZGVtYW5kCisgKi8KKworc3RydWN0IHA5X3JkaXIgeworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlpbnQgaGVhZDsKKwlpbnQgdGFpbDsKKwl1aW50OF90ICpidWY7Cit9OworCisvKioKICAqIGR0X3R5cGUgLSByZXR1cm4gZmlsZSB0eXBlCiAgKiBAbWlzdGF0OiBtaXN0YXQgc3RydWN0dXJlCiAgKgpAQCAtNzAsNTYgKzg4LDc5IEBACiB7CiAJaW50IG92ZXI7CiAJc3RydWN0IHA5X3dzdGF0IHN0OwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCWludCBidWZsZW47Ci0JY2hhciAqc3RhdGJ1ZjsKLQlpbnQgbiwgaSA9IDA7CisJaW50IHJlY2xlbiA9IDA7CisJc3RydWN0IHA5X3JkaXIgKnJkaXI7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlidWZsZW4gPSBmaWQtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKLQlzdGF0YnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9LRVJORUwpOwotCWlmICghc3RhdGJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CiAKLQl3aGlsZSAoMSkgewotCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgc3RhdGJ1ZiwgTlVMTCwgYnVmbGVuLAotCQkJCQkJCQlmaWQtPnJkaXJfZnBvcyk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWJyZWFrOworCS8qIGFsbG9jYXRlIHJkaXIgb24gZGVtYW5kICovCisJaWYgKCFmaWQtPnJkaXIpIHsKKwkJcmRpciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CiAKLQkJbiA9IGVycjsKLQkJd2hpbGUgKGkgPCBuKSB7Ci0JCQllcnIgPSBwOXN0YXRfcmVhZChzdGF0YnVmICsgaSwgYnVmbGVuLWksICZzdCwKLQkJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOworCQlpZiAocmRpciA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisJCXNwaW5fbG9jaygmZmlscC0+Zl9kZW50cnktPmRfbG9jayk7CisJCWlmICghZmlkLT5yZGlyKSB7CisJCQlyZGlyLT5idWYgPSAodWludDhfdCAqKXJkaXIgKyBzaXplb2Yoc3RydWN0IHA5X3JkaXIpOworCQkJbXV0ZXhfaW5pdCgmcmRpci0+bXV0ZXgpOworCQkJcmRpci0+aGVhZCA9IHJkaXItPnRhaWwgPSAwOworCQkJZmlkLT5yZGlyID0gKHZvaWQgKikgcmRpcjsKKwkJCXJkaXIgPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJa2ZyZWUocmRpcik7CisJfQorCXJkaXIgPSAoc3RydWN0IHA5X3JkaXIgKikgZmlkLT5yZGlyOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyZGlyLT5tdXRleCk7CisJd2hpbGUgKGVyciA9PSAwKSB7CisJCWlmIChyZGlyLT50YWlsID09IHJkaXItPmhlYWQpIHsKKwkJCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCByZGlyLT5idWYsIE5VTEwsCisJCQkJCQkJYnVmbGVuLCBmaWxwLT5mX3Bvcyk7CisJCQlpZiAoZXJyIDw9IDApCisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisKKwkJCXJkaXItPmhlYWQgPSAwOworCQkJcmRpci0+dGFpbCA9IGVycjsKKwkJfQorCisJCXdoaWxlIChyZGlyLT5oZWFkIDwgcmRpci0+dGFpbCkgeworCQkJZXJyID0gcDlzdGF0X3JlYWQocmRpci0+YnVmICsgcmRpci0+aGVhZCwKKwkJCQkJCWJ1ZmxlbiAtIHJkaXItPmhlYWQsICZzdCwKKwkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJyZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAkJCQllcnIgPSAtRUlPOwogCQkJCXA5c3RhdF9mcmVlKCZzdCk7Ci0JCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQotCi0JCQlpICs9IHN0LnNpemUrMjsKLQkJCWZpZC0+cmRpcl9mcG9zICs9IHN0LnNpemUrMjsKKwkJCXJlY2xlbiA9IHN0LnNpemUrMjsKIAogCQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBzdC5uYW1lLCBzdHJsZW4oc3QubmFtZSksCiAJCQkgICAgZmlscC0+Zl9wb3MsIHY5ZnNfcWlkMmlubygmc3QucWlkKSwgZHRfdHlwZSgmc3QpKTsKIAotCQkJZmlscC0+Zl9wb3MgKz0gc3Quc2l6ZSsyOwotCiAJCQlwOXN0YXRfZnJlZSgmc3QpOwogCiAJCQlpZiAob3ZlcikgewogCQkJCWVyciA9IDA7Ci0JCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQorCQkJcmRpci0+aGVhZCArPSByZWNsZW47CisJCQlmaWxwLT5mX3BvcyArPSByZWNsZW47CiAJCX0KIAl9CiAKLWZyZWVfYW5kX2V4aXQ6Ci0Ja2ZyZWUoc3RhdGJ1Zik7Cit1bmxvY2tfYW5kX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZyZGlyLT5tdXRleCk7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTk0NzYyOGEuLjE4Zjc0ZWMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC05OTQsOCArOTk0LDcgQEAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKIAkJIiVzIC0+ICVzICglcylcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0LT5leHRlbnNpb24sIGJ1ZmZlcik7CiAKLQlyZXR2YWwgPSBidWZsZW47Ci0KKwlyZXR2YWwgPSBzdHJubGVuKGJ1ZmZlciwgYnVmbGVuKTsKIGRvbmU6CiAJa2ZyZWUoc3QpOwogCXJldHVybiByZXR2YWw7CkBAIC0xMDYyLDcgKzEwNjEsNyBAQAogCQkJX19wdXRuYW1lKGxpbmspOwogCQkJbGluayA9IEVSUl9QVFIobGVuKTsKIAkJfSBlbHNlCi0JCQlsaW5rW2xlbl0gPSAwOworCQkJbGlua1ttaW4obGVuLCBQQVRIX01BWC0xKV0gPSAwOwogCX0KIAluZF9zZXRfbGluayhuZCwgbGluayk7CiAKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGQ0YmY4Y2EuLjY0ZDQ0ZWYgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTM1LDggKzEzNSw4IEBACiAKIGNvbmZpZyBIVUdFVExCRlMKIAlib29sICJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IChTVVBFUkggJiYgTU1VKSB8fCBcCi0JCSAgIChTMzkwICYmIDY0QklUKSB8fCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgorCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgU1BBUkM2NCB8fCAoUzM5MCAmJiA2NEJJVCkgfHwgXAorCQkgICBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgogCWhlbHAKIAkgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb24KIAkgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWQKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWNoZS5oIGIvZnMvYWZzL2NhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNGY2YjQuLjAwMDAwMDAKLS0tIGEvZnMvYWZzL2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKiBBRlMgbG9jYWwgY2FjaGUgbWFuYWdlbWVudCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMTA2YmU2Ni4uNmVjZTJhMSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE4LDEwICsxOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgogCiAjaW5jbHVkZSAiYWZzLmgiCiAjaW5jbHVkZSAiYWZzX3ZsLmgiCi0jaW5jbHVkZSAiY2FjaGUuaCIKIAogI2RlZmluZSBBRlNfQ0VMTF9NQVhfQUREUlMgMTUKIApkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggZDExYzUxZi4uMmNhN2E3YyAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC04LDggKzgsMTAgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCA3NjczODAwLi4xMmRhNWRiIDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtMjQ5LDYgKzI0OSw3IEBACiAKIAltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2ZyZWUpOwogCiB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTI1Nyw2ICsyNTgsNyBAQAogCWJpby0+YmlfY29tcF9jcHUgPSAtMTsKIAlhdG9taWNfc2V0KCZiaW8tPmJpX2NudCwgMSk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19pbml0KTsKIAogLyoqCiAgKiBiaW9fYWxsb2NfYmlvc2V0IC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTwpAQCAtMzExLDYgKzMxMyw3IEBACiAJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19iaW9zZXQpOwogCiBzdGF0aWMgdm9pZCBiaW9fZnNfZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC0zMjIsOCArMzI1LDE2IEBACiAgKglAZ2ZwX21hc2s6IGFsbG9jYXRpb24gbWFzayB0byB1c2UKICAqCUBucl9pb3ZlY3M6IG51bWJlciBvZiBpb3ZlY3MKICAqCi0gKglBbGxvY2F0ZSBhIG5ldyBiaW8gd2l0aCBAbnJfaW92ZWNzIGJ2ZWNzLiAgSWYgQGdmcF9tYXNrCi0gKgljb250YWlucyBfX0dGUF9XQUlULCB0aGUgYWxsb2NhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisgKgliaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKKyAqCWF0IGxlYXN0IEBucl9pb3ZlY3MgZW50cmllcy4gQWxsb2NhdGlvbnMgd2lsbCBiZSBkb25lIGZyb20gdGhlCisgKglmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldCBhbmQgQGJpb19rbWFsbG9jLgorICoKKyAqCUlmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQorICoJYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCisgKgltdXN0IG5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBhdCBhIHRpbWUgZnJvbSB0aGlzIHBvb2wuIENhbGxlcnMKKyAqCXRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5CisgKglhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KKyAqCWRvIHNvIGNhbiBjYXVzZSBsaXZlbG9ja3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICoKICAqCVJFVFVSTlM6CiAgKglQb2ludGVyIHRvIG5ldyBiaW8gb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMzM3LDYgKzM0OCw3IEBACiAKIAlyZXR1cm4gYmlvOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWxsb2MpOwogCiBzdGF0aWMgdm9pZCBiaW9fa21hbGxvY19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTM0NiwyMSArMzU4LDEzIEBACiB9CiAKIC8qKgotICogYmlvX2FsbG9jIC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTworICogYmlvX2ttYWxsb2MgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PIHVzaW5nIGttYWxsb2MoKQogICogQGdmcF9tYXNrOiAgIHRoZSBHRlBfIG1hc2sgZ2l2ZW4gdG8gdGhlIHNsYWIgYWxsb2NhdG9yCiAgKiBAbnJfaW92ZWNzOgludW1iZXIgb2YgaW92ZWNzIHRvIHByZS1hbGxvY2F0ZQogICoKICAqIERlc2NyaXB0aW9uOgotICogICBiaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKLSAqICAgYXQgbGVhc3QgQG5yX2lvdmVjcyBlbnRyaWVzLiBBbGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUgZnJvbSB0aGUKLSAqICAgZnNfYmlvX3NldC4gQWxzbyBzZWUgQGJpb19hbGxvY19iaW9zZXQuCi0gKgotICogICBJZiAlX19HRlBfV0FJVCBpcyBzZXQsIHRoZW4gYmlvX2FsbG9jIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUKLSAqICAgYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCi0gKiAgIG11c3QgbmV2ZXIgYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIGF0IGEgdGltZSBmcm9tIHRoaXMgcG9vbC4gQ2FsbGVycwotICogICB0aGF0IG5lZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIG11c3QgYWx3YXlzIHN1Ym1pdCB0aGUgcHJldmlvdXNseQotICogICBhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KLSAqICAgZG8gc28gY2FuIGNhdXNlIGxpdmVsb2NrcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisgKiAgIEFsbG9jYXRlIGEgbmV3IGJpbyB3aXRoIEBucl9pb3ZlY3MgYnZlY3MuICBJZiBAZ2ZwX21hc2sgY29udGFpbnMKKyAqICAgJV9fR0ZQX1dBSVQsIHRoZSBhbGxvY2F0aW9uIGlzIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4KICAqCiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fa21hbGxvYyhnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcykKQEAgLTM4MCw2ICszODQsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2ttYWxsb2MpOwogCiB2b2lkIHplcm9fZmlsbF9iaW8oc3RydWN0IGJpbyAqYmlvKQogewpAQCAtNDAyLDcgKzQwNyw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIFB1dCBhIHJlZmVyZW5jZSB0byBhICZzdHJ1Y3QgYmlvLCBlaXRoZXIgb25lIHlvdSBoYXZlIGdvdHRlbiB3aXRoCi0gKiAgIGJpb19hbGxvYyBvciBiaW9fZ2V0LiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgorICogICBiaW9fYWxsb2MsIGJpb19nZXQgb3IgYmlvX2Nsb25lLiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgogICoqLwogdm9pZCBiaW9fcHV0KHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTQxNiw2ICs0MjEsNyBAQAogCQliaW8tPmJpX2Rlc3RydWN0b3IoYmlvKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJpb19wdXQpOwogCiBpbmxpbmUgaW50IGJpb19waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC00MjQsNiArNDMwLDcgQEAKIAogCXJldHVybiBiaW8tPmJpX3BoeXNfc2VnbWVudHM7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19waHlzX3NlZ21lbnRzKTsKIAogLyoqCiAgKiAJX19iaW9fY2xvbmUJLQljbG9uZSBhIGJpbwpAQCAtNDUxLDYgKzQ1OCw3IEBACiAJYmlvLT5iaV9zaXplID0gYmlvX3NyYy0+Ymlfc2l6ZTsKIAliaW8tPmJpX2lkeCA9IGJpb19zcmMtPmJpX2lkeDsKIH0KK0VYUE9SVF9TWU1CT0woX19iaW9fY2xvbmUpOwogCiAvKioKICAqCWJpb19jbG9uZQktCWNsb25lIGEgYmlvCkBAIC00ODIsNiArNDkwLDcgQEAKIAogCXJldHVybiBiOwogfQorRVhQT1JUX1NZTUJPTChiaW9fY2xvbmUpOwogCiAvKioKICAqCWJpb19nZXRfbnJfdmVjcwkJLSByZXR1cm4gYXBwcm94IG51bWJlciBvZiB2ZWNzCkBAIC01MDUsNiArNTE0LDcgQEAKIAogCXJldHVybiBucl9wYWdlczsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2dldF9ucl92ZWNzKTsKIAogc3RhdGljIGludCBfX2Jpb19hZGRfcGFnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcGFnZQogCQkJICAqcGFnZSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKQEAgLTYzNSw2ICs2NDUsNyBAQAogCXJldHVybiBfX2Jpb19hZGRfcGFnZShxLCBiaW8sIHBhZ2UsIGxlbiwgb2Zmc2V0LAogCQkJICAgICAgcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWRkX3BjX3BhZ2UpOwogCiAvKioKICAqCWJpb19hZGRfcGFnZQktCWF0dGVtcHQgdG8gYWRkIHBhZ2UgdG8gYmlvCkBAIC02NTUsNiArNjY2LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJpby0+YmlfYmRldik7CiAJcmV0dXJuIF9fYmlvX2FkZF9wYWdlKHEsIGJpbywgcGFnZSwgbGVuLCBvZmZzZXQsIHF1ZXVlX21heF9zZWN0b3JzKHEpKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FkZF9wYWdlKTsKIAogc3RydWN0IGJpb19tYXBfZGF0YSB7CiAJc3RydWN0IGJpb192ZWMgKmlvdmVjczsKQEAgLTc3Niw2ICs3ODgsNyBAQAogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChiaW9fdW5jb3B5X3VzZXIpOwogCiAvKioKICAqCWJpb19jb3B5X3VzZXJfaW92CS0JY29weSB1c2VyIGRhdGEgdG8gYmlvCkBAIC05MjAsNiArOTMzLDcgQEAKIAogCXJldHVybiBiaW9fY29weV91c2VyX2lvdihxLCBtYXBfZGF0YSwgJmlvdiwgMSwgd3JpdGVfdG9fdm0sIGdmcF9tYXNrKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2NvcHlfdXNlcik7CiAKIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkJICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTEwNTAsNiArMTA2NCw3IEBACiAKIAlyZXR1cm4gYmlvX21hcF91c2VyX2lvdihxLCBiZGV2LCAmaW92LCAxLCB3cml0ZV90b192bSwgZ2ZwX21hc2spOwogfQorRVhQT1JUX1NZTUJPTChiaW9fbWFwX3VzZXIpOwogCiAvKioKICAqCWJpb19tYXBfdXNlcl9pb3YgLSBtYXAgdXNlciBzZ19pb3ZlYyB0YWJsZSBpbnRvIGJpbwpAQCAtMTExNywxMyArMTEzMiwxMyBAQAogCV9fYmlvX3VubWFwX3VzZXIoYmlvKTsKIAliaW9fcHV0KGJpbyk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKIAogc3RhdGljIHZvaWQgYmlvX21hcF9rZXJuX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKIHsKIAliaW9fcHV0KGJpbyk7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX21hcF9rZXJuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB2b2lkICpkYXRhLAogCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xMTg5LDYgKzEyMDQsNyBAQAogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKIAogc3RhdGljIHZvaWQgYmlvX2NvcHlfa2Vybl9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCiB7CkBAIC0xMjUwLDYgKzEyNjYsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2NvcHlfa2Vybik7CiAKIC8qCiAgKiBiaW9fc2V0X3BhZ2VzX2RpcnR5KCkgYW5kIGJpb19jaGVja19wYWdlc19kaXJ0eSgpIGFyZSBzdXBwb3J0IGZ1bmN0aW9ucwpAQCAtMTQwMCw2ICsxNDE3LDcgQEAKIAlpZiAoYmlvLT5iaV9lbmRfaW8pCiAJCWJpby0+YmlfZW5kX2lvKGJpbywgZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pOwogCiB2b2lkIGJpb19wYWlyX3JlbGVhc2Uoc3RydWN0IGJpb19wYWlyICpicCkKIHsKQEAgLTE0MTAsNiArMTQyOCw3IEBACiAJCW1lbXBvb2xfZnJlZShicCwgYnAtPmJpbzIuYmlfcHJpdmF0ZSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChiaW9fcGFpcl9yZWxlYXNlKTsKIAogc3RhdGljIHZvaWQgYmlvX3BhaXJfZW5kXzEoc3RydWN0IGJpbyAqYmksIGludCBlcnIpCiB7CkBAIC0xNDc3LDYgKzE0OTYsNyBAQAogCiAJcmV0dXJuIGJwOwogfQorRVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpOwogCiAvKioKICAqICAgICAgYmlvX3NlY3Rvcl9vZmZzZXQgLSBGaW5kIGhhcmR3YXJlIHNlY3RvciBvZmZzZXQgaW4gYmlvCkBAIC0xNTQ3LDYgKzE1NjcsNyBAQAogCiAJa2ZyZWUoYnMpOwogfQorRVhQT1JUX1NZTUJPTChiaW9zZXRfZnJlZSk7CiAKIC8qKgogICogYmlvc2V0X2NyZWF0ZSAgLSBDcmVhdGUgYSBiaW9fc2V0CkBAIC0xNTkyLDYgKzE2MTMsNyBAQAogCWJpb3NldF9mcmVlKGJzKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvc2V0X2NyZWF0ZSk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBiaW92ZWNfaW5pdF9zbGFicyh2b2lkKQogewpAQCAtMTYzNiwyOSArMTY1OCw0IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogc3Vic3lzX2luaXRjYWxsKGluaXRfYmlvKTsKLQotRVhQT1JUX1NZTUJPTChiaW9fYWxsb2MpOwotRVhQT1JUX1NZTUJPTChiaW9fa21hbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19wdXQpOwotRVhQT1JUX1NZTUJPTChiaW9fZnJlZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19lbmRpbyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTsKLUVYUE9SVF9TWU1CT0woX19iaW9fY2xvbmUpOwotRVhQT1JUX1NZTUJPTChiaW9fY2xvbmUpOwotRVhQT1JUX1NZTUJPTChiaW9fcGh5c19zZWdtZW50cyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7Ci1FWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKLUVYUE9SVF9TWU1CT0woYmlvX2NvcHlfa2Vybik7Ci1FWFBPUlRfU1lNQk9MKGJpb19wYWlyX3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpOwotRVhQT1JUX1NZTUJPTChiaW9fY29weV91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvX3VuY29weV91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvc2V0X2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9mcmVlKTsKLUVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDljZjRiOTIuLjhiZWQwNTUgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMjQ4LDggKzEyNDgsOCBAQAogCQkJYmRfc2V0X3NpemUoYmRldiwgKGxvZmZfdCliZGV2LT5iZF9wYXJ0LT5ucl9zZWN0cyA8PCA5KTsKIAkJfQogCX0gZWxzZSB7Ci0JCXB1dF9kaXNrKGRpc2spOwogCQltb2R1bGVfcHV0KGRpc2stPmZvcHMtPm93bmVyKTsKKwkJcHV0X2Rpc2soZGlzayk7CiAJCWRpc2sgPSBOVUxMOwogCQlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewogCQkJaWYgKGJkZXYtPmJkX2Rpc2stPmZvcHMtPm9wZW4pIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggZjEyODQyNy4uMzYxNjA0MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJidHJmc19pbm9kZS5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAKLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCiBzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqYnRyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKIHsKQEAgLTMxMyw3ICszMTMsNyBAQAogCS5zZXQJPSBidHJmc194YXR0cl9hY2xfYWNjZXNzX3NldCwKIH07CiAKLSNlbHNlIC8qIENPTkZJR19GU19QT1NJWF9BQ0wgKi8KKyNlbHNlIC8qIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgKi8KIAogaW50IGJ0cmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMzI1LDQgKzMyNSw0IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRlNfUE9TSVhfQUNMICovCisjZW5kaWYgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwppbmRleCAyODJjYTA4Li5jMDg2MWU3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYworKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwpAQCAtNjQsNiArNjQsNTEgQEAKIH07CiAKIC8qCisgKiBidHJmc19zdGFydF93b3JrZXJzIHVzZXMga3RocmVhZF9ydW4sIHdoaWNoIGNhbiBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkKKyAqIGZvciBhIHZlcnkgbG9uZyB0aW1lLiAgSXQgd2lsbCBhY3R1YWxseSB0aHJvdHRsZSBvbiBwYWdlIHdyaXRlYmFjaywKKyAqIGFuZCBzbyBpdCBtYXkgbm90IG1ha2UgcHJvZ3Jlc3MgdW50aWwgYWZ0ZXIgb3VyIGJ0cmZzIHdvcmtlciB0aHJlYWRzCisgKiBwcm9jZXNzIGFsbCBvZiB0aGUgcGVuZGluZyB3b3JrIHN0cnVjdHMgaW4gdGhlaXIgcXVldWUKKyAqCisgKiBUaGlzIG1lYW5zIHdlIGNhbid0IHVzZSBidHJmc19zdGFydF93b3JrZXJzIGZyb20gaW5zaWRlIGEgYnRyZnMgd29ya2VyCisgKiB0aHJlYWQgdGhhdCBpcyB1c2VkIGFzIHBhcnQgb2YgY2xlYW5pbmcgZGlydHkgbWVtb3J5LCB3aGljaCBwcmV0dHkgbXVjaAorICogaW52b2x2ZXMgYWxsIG9mIHRoZSB3b3JrZXIgdGhyZWFkcy4KKyAqCisgKiBJbnN0ZWFkIHdlIGhhdmUgYSBoZWxwZXIgcXVldWUgd2hvIG5ldmVyIGhhcyBtb3JlIHRoYW4gb25lIHRocmVhZAorICogd2hlcmUgd2Ugc2NoZWR1bGVyIHRocmVhZCBzdGFydCBvcGVyYXRpb25zLiAgVGhpcyB3b3JrZXJfc3RhcnQgc3RydWN0CisgKiBpcyB1c2VkIHRvIGNvbnRhaW4gdGhlIHdvcmsgYW5kIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBxdWV1ZSB0aGF0IG5lZWRzCisgKiBhbm90aGVyIHdvcmtlci4KKyAqLworc3RydWN0IHdvcmtlcl9zdGFydCB7CisJc3RydWN0IGJ0cmZzX3dvcmsgd29yazsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyAqcXVldWU7Cit9OworCitzdGF0aWMgdm9pZCBzdGFydF9uZXdfd29ya2VyX2Z1bmMoc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspCit7CisJc3RydWN0IHdvcmtlcl9zdGFydCAqc3RhcnQ7CisJc3RhcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdvcmtlcl9zdGFydCwgd29yayk7CisJYnRyZnNfc3RhcnRfd29ya2VycyhzdGFydC0+cXVldWUsIDEpOworCWtmcmVlKHN0YXJ0KTsKK30KKworc3RhdGljIGludCBzdGFydF9uZXdfd29ya2VyKHN0cnVjdCBidHJmc193b3JrZXJzICpxdWV1ZSkKK3sKKwlzdHJ1Y3Qgd29ya2VyX3N0YXJ0ICpzdGFydDsKKwlpbnQgcmV0OworCisJc3RhcnQgPSBremFsbG9jKHNpemVvZigqc3RhcnQpLCBHRlBfTk9GUyk7CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGFydC0+d29yay5mdW5jID0gc3RhcnRfbmV3X3dvcmtlcl9mdW5jOworCXN0YXJ0LT5xdWV1ZSA9IHF1ZXVlOworCXJldCA9IGJ0cmZzX3F1ZXVlX3dvcmtlcihxdWV1ZS0+YXRvbWljX3dvcmtlcl9zdGFydCwgJnN0YXJ0LT53b3JrKTsKKwlpZiAocmV0KQorCQlrZnJlZShzdGFydCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBtb3ZlIGEgdGhyZWFkIG9udG8gdGhlIGlkbGUgbGlzdCBhZnRlciBpdAogICogaGFzIGZpbmlzaGVkIHNvbWUgcmVxdWVzdHMuCiAgKi8KQEAgLTExOCwxMSArMTYzLDEzIEBACiAJCWdvdG8gb3V0OwogCiAJd29ya2Vycy0+YXRvbWljX3N0YXJ0X3BlbmRpbmcgPSAwOwotCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyA+PSB3b3JrZXJzLT5tYXhfd29ya2VycykKKwlpZiAod29ya2Vycy0+bnVtX3dvcmtlcnMgKyB3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyA+PQorCSAgICB3b3JrZXJzLT5tYXhfd29ya2VycykKIAkJZ290byBvdXQ7CiAKKwl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyArPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtlcnMtPmxvY2ssIGZsYWdzKTsKLQlidHJmc19zdGFydF93b3JrZXJzKHdvcmtlcnMsIDEpOworCXN0YXJ0X25ld193b3JrZXIod29ya2Vycyk7CiAJcmV0dXJuOwogCiBvdXQ6CkBAIC0zOTAsOSArNDM3LDExIEBACiAvKgogICogc2ltcGxlIGluaXQgb24gc3RydWN0IGJ0cmZzX3dvcmtlcnMKICAqLwotdm9pZCBidHJmc19pbml0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGNoYXIgKm5hbWUsIGludCBtYXgpCit2b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCwKKwkJCXN0cnVjdCBidHJmc193b3JrZXJzICphc3luY19oZWxwZXIpCiB7CiAJd29ya2Vycy0+bnVtX3dvcmtlcnMgPSAwOworCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmd29ya2Vycy0+d29ya2VyX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZ3b3JrZXJzLT5pZGxlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZ3b3JrZXJzLT5vcmRlcl9saXN0KTsKQEAgLTQwNCwxNCArNDUzLDE1IEBACiAJd29ya2Vycy0+bmFtZSA9IG5hbWU7CiAJd29ya2Vycy0+b3JkZXJlZCA9IDA7CiAJd29ya2Vycy0+YXRvbWljX3N0YXJ0X3BlbmRpbmcgPSAwOwotCXdvcmtlcnMtPmF0b21pY193b3JrZXJfc3RhcnQgPSAwOworCXdvcmtlcnMtPmF0b21pY193b3JrZXJfc3RhcnQgPSBhc3luY19oZWxwZXI7CiB9CiAKIC8qCiAgKiBzdGFydHMgbmV3IHdvcmtlciB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBlbmZvcmNlIHRoZSBtYXggd29ya2VyCiAgKiBjb3VudCBpbiBjYXNlIHlvdSBuZWVkIHRvIHRlbXBvcmFyaWx5IGdvIHBhc3QgaXQuCiAgKi8KLWludCBidHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBpbnQgbnVtX3dvcmtlcnMpCitzdGF0aWMgaW50IF9fYnRyZnNfc3RhcnRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywKKwkJCQkgaW50IG51bV93b3JrZXJzKQogewogCXN0cnVjdCBidHJmc193b3JrZXJfdGhyZWFkICp3b3JrZXI7CiAJaW50IHJldCA9IDA7CkBAIC00NDQsNiArNDk0LDggQEAKIAkJbGlzdF9hZGRfdGFpbCgmd29ya2VyLT53b3JrZXJfbGlzdCwgJndvcmtlcnMtPmlkbGVfbGlzdCk7CiAJCXdvcmtlci0+aWRsZSA9IDE7CiAJCXdvcmtlcnMtPm51bV93b3JrZXJzKys7CisJCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nLS07CisJCVdBUk5fT04od29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgPCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ3b3JrZXJzLT5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsNiArNTA0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGJ0cmZzX3N0YXJ0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGludCBudW1fd29ya2VycykKK3sKKwlzcGluX2xvY2tfaXJxKCZ3b3JrZXJzLT5sb2NrKTsKKwl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyArPSBudW1fd29ya2VyczsKKwlzcGluX3VubG9ja19pcnEoJndvcmtlcnMtPmxvY2spOworCXJldHVybiBfX2J0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgbnVtX3dvcmtlcnMpOworfQorCiAvKgogICogcnVuIHRocm91Z2ggdGhlIGxpc3QgYW5kIGZpbmQgYSB3b3JrZXIgdGhyZWFkIHRoYXQgZG9lc24ndCBoYXZlIGEgbG90CiAgKiB0byBkbyByaWdodCBub3cuICBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiB3ZSBhcmVuJ3QgeWV0IGF0IHRoZSB0aHJlYWQKQEAgLTQ2MSw3ICs1MjEsMTAgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VyX3RocmVhZCAqd29ya2VyOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7Ci0JaW50IGVuZm9yY2VfbWluID0gd29ya2Vycy0+bnVtX3dvcmtlcnMgPCB3b3JrZXJzLT5tYXhfd29ya2VyczsKKwlpbnQgZW5mb3JjZV9taW47CisKKwllbmZvcmNlX21pbiA9ICh3b3JrZXJzLT5udW1fd29ya2VycyArIHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nKSA8CisJCXdvcmtlcnMtPm1heF93b3JrZXJzOwogCiAJLyoKIAkgKiBpZiB3ZSBmaW5kIGFuIGlkbGUgdGhyZWFkLCBkb24ndCBtb3ZlIGl0IHRvIHRoZSBlbmQgb2YgdGhlCkBAIC01MDksMTUgKzU3MiwxNyBAQAogCXdvcmtlciA9IG5leHRfd29ya2VyKHdvcmtlcnMpOwogCiAJaWYgKCF3b3JrZXIpIHsKLQkJaWYgKHdvcmtlcnMtPm51bV93b3JrZXJzID49IHdvcmtlcnMtPm1heF93b3JrZXJzKSB7CisJCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyArIHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nID49CisJCSAgICB3b3JrZXJzLT5tYXhfd29ya2VycykgewogCQkJZ290byBmYWxsYmFjazsKIAkJfSBlbHNlIGlmICh3b3JrZXJzLT5hdG9taWNfd29ya2VyX3N0YXJ0KSB7CiAJCQl3b3JrZXJzLT5hdG9taWNfc3RhcnRfcGVuZGluZyA9IDE7CiAJCQlnb3RvIGZhbGxiYWNrOwogCQl9IGVsc2UgeworCQkJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcrKzsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtlcnMtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIHdlJ3JlIGJlbG93IHRoZSBsaW1pdCwgc3RhcnQgYW5vdGhlciB3b3JrZXIgKi8KLQkJCWJ0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgMSk7CisJCQlfX2J0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgMSk7CiAJCQlnb3RvIGFnYWluOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmggYi9mcy9idHJmcy9hc3luYy10aHJlYWQuaAppbmRleCBmYzA4OWI5Li41MDc3NzQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuaAorKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuaApAQCAtNjQsNiArNjQsOCBAQAogCS8qIGN1cnJlbnQgbnVtYmVyIG9mIHJ1bm5pbmcgd29ya2VycyAqLwogCWludCBudW1fd29ya2VyczsKIAorCWludCBudW1fd29ya2Vyc19zdGFydGluZzsKKwogCS8qIG1heCBudW1iZXIgb2Ygd29ya2VycyBhbGxvd2VkLiAgY2hhbmdlZCBieSBidHJmc19zdGFydF93b3JrZXJzICovCiAJaW50IG1heF93b3JrZXJzOwogCkBAIC03OCw5ICs4MCwxMCBAQAogCiAJLyoKIAkgKiBhcmUgd2UgYWxsb3dlZCB0byBzbGVlcCB3aGlsZSBzdGFydGluZyB3b3JrZXJzIG9yIGFyZSB3ZSByZXF1aXJlZAotCSAqIHRvIHN0YXJ0IHRoZW0gYXQgYSBsYXRlciB0aW1lPworCSAqIHRvIHN0YXJ0IHRoZW0gYXQgYSBsYXRlciB0aW1lPyAgSWYgd2UgY2FuJ3Qgc2xlZXAsIHRoaXMgaW5kaWNhdGVzCisJICogd2hpY2ggcXVldWUgd2UgbmVlZCB0byB1c2UgdG8gc2NoZWR1bGUgdGhyZWFkIGNyZWF0aW9uLgogCSAqLwotCWludCBhdG9taWNfd29ya2VyX3N0YXJ0OworCXN0cnVjdCBidHJmc193b3JrZXJzICphdG9taWNfd29ya2VyX3N0YXJ0OwogCiAJLyogbGlzdCB3aXRoIGFsbCB0aGUgd29yayB0aHJlYWRzLiAgVGhlIHdvcmtlcnMgb24gdGhlIGlkbGUgdGhyZWFkCiAJICogbWF5IGJlIGFjdGl2ZWx5IHNlcnZpY2luZyBqb2JzLCBidXQgdGhleSBoYXZlbid0IHlldCBoaXQgdGhlCkBAIC0xMDksNyArMTEyLDggQEAKIGludCBidHJmc19xdWV1ZV93b3JrZXIoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIHN0cnVjdCBidHJmc193b3JrICp3b3JrKTsKIGludCBidHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBpbnQgbnVtX3dvcmtlcnMpOwogaW50IGJ0cmZzX3N0b3Bfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2Vycyk7Ci12b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCk7Cit2b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCwKKwkJCXN0cnVjdCBidHJmc193b3JrZXJzICphc3luY19zdGFydGVyKTsKIGludCBidHJmc19yZXF1ZXVlX3dvcmsoc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspOwogdm9pZCBidHJmc19zZXRfd29ya19oaWdoX3ByaW8oc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCA4MmVlNTZiLi5mNjc4M2E0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTg2LDYgKzg2LDEyIEBACiAJICogdHJhbnNpZCBvZiB0aGUgdHJhbnNfaGFuZGxlIHRoYXQgbGFzdCBtb2RpZmllZCB0aGlzIGlub2RlCiAJICovCiAJdTY0IGxhc3RfdHJhbnM7CisKKwkvKgorCSAqIGxvZyB0cmFuc2lkIHdoZW4gdGhpcyBpbm9kZSB3YXMgbGFzdCBtb2RpZmllZAorCSAqLworCXU2NCBsYXN0X3N1Yl90cmFuczsKKwogCS8qCiAJICogdHJhbnNpZCB0aGF0IGxhc3QgbG9nZ2VkIHRoaXMgaW5vZGUKIAkgKi8KQEAgLTEyOCw2ICsxMzQsMTYgQEAKIAl1NjQgbGFzdF91bmxpbmtfdHJhbnM7CiAKIAkvKgorCSAqIENvdW50ZXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBleHRlbnQgaXRlbSdzIHdlIG1heSB1c2UgZHVlCisJICogdG8gZGVsYWxsb2MgYW5kIHN1Y2guICBvdXRzdGFuZGluZ19leHRlbnRzIGlzIHRoZSBudW1iZXIgb2YgZXh0ZW50CisJICogaXRlbXMgd2UgdGhpbmsgd2UnbGwgZW5kIHVwIHVzaW5nLCBhbmQgcmVzZXJ2ZWRfZXh0ZW50cyBpcyB0aGUgbnVtYmVyCisJICogb2YgZXh0ZW50IGl0ZW1zIHdlJ3ZlIHJlc2VydmVkIG1ldGFkYXRhIGZvci4KKwkgKi8KKwlzcGlubG9ja190IGFjY291bnRpbmdfbG9jazsKKwlpbnQgcmVzZXJ2ZWRfZXh0ZW50czsKKwlpbnQgb3V0c3RhbmRpbmdfZXh0ZW50czsKKworCS8qCiAJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSB0cnVuY2F0ZSB3aGVuIGEgZmlsZSB0aGF0IHVzZWQKIAkgKiB0byBoYXZlIGdvb2QgZGF0YSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gemVyby4gIFdoZW4gaXQgaXMgc2V0CiAJICogdGhlIGJ0cmZzIGZpbGUgcmVsZWFzZSBjYWxsIHdpbGwgYWRkIHRoaXMgaW5vZGUgdG8gdGhlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA4MDU5OWI0Li40NDRiM2U5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTY3NSwyMSArNjc1LDI4IEBACiAJCQkJICAgY3VycmVudCBhbGxvY2F0aW9ucyAqLwogCXU2NCBieXRlc19yZWFkb25seTsJLyogdG90YWwgYnl0ZXMgdGhhdCBhcmUgcmVhZCBvbmx5ICovCiAJdTY0IGJ5dGVzX3N1cGVyOwkvKiB0b3RhbCBieXRlcyByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIGJsb2NrcyAqLwotCi0JLyogZGVsYWxsb2MgYWNjb3VudGluZyAqLwotCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciBhbGxvY2F0aW9uLAotCQkJCSAgIHRoaXMgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHJlc2VydmVkIHlldAotCQkJCSAgIGJ5IHRoZSBhbGxvY2F0b3IgKi8KKwl1NjQgYnl0ZXNfcm9vdDsJCS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIGNvbW1pdCBhCisJCQkJICAgdHJhbnNhY3Rpb24gKi8KIAl1NjQgYnl0ZXNfbWF5X3VzZTsJLyogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIHVzZWQgZm9yCi0JCQkJICAgZGVsYWxsb2MgKi8KKwkJCQkgICBkZWxhbGxvYy9hbGxvY2F0aW9ucyAqLworCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSByZXNlcnZlZCBmb3IKKwkJCQkgICBkZWxheWVkIGFsbG9jYXRpb24gKi8KIAogCWludCBmdWxsOwkJLyogaW5kaWNhdGVzIHRoYXQgd2UgY2Fubm90IGFsbG9jYXRlIGFueSBtb3JlCiAJCQkJICAgY2h1bmtzIGZvciB0aGlzIHNwYWNlICovCiAJaW50IGZvcmNlX2FsbG9jOwkvKiBzZXQgaWYgd2UgbmVlZCB0byBmb3JjZSBhIGNodW5rIGFsbG9jIGZvcgogCQkJCSAgIHRoaXMgc3BhY2UgKi8KKwlpbnQgZm9yY2VfZGVsYWxsb2M7CS8qIG1ha2UgcGVvcGxlIHN0YXJ0IGRvaW5nIGZpbGVtYXBfZmx1c2ggdW50aWwKKwkJCQkgICB3ZSdyZSB1bmRlciBhIHRocmVzaG9sZCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCisJLyogZm9yIGNvbnRyb2xsaW5nIGhvdyB3ZSBmcmVlIHVwIHNwYWNlIGZvciBhbGxvY2F0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IGFsbG9jYXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZmx1c2hfd2FpdDsKKwlpbnQgYWxsb2NhdGluZ19jaHVuazsKKwlpbnQgZmx1c2hpbmc7CisKIAkvKiBmb3IgYmxvY2sgZ3JvdXBzIGluIG91ciBzYW1lIHR5cGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrX2dyb3VwczsKIAlzcGlubG9ja190IGxvY2s7CkBAIC05MDMsNiArOTEwLDcgQEAKIAkgKiBBIHRoaXJkIHBvb2wgZG9lcyBzdWJtaXRfYmlvIHRvIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhlIG90aGVyCiAJICogdHdvCiAJICovCisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZ2VuZXJpY193b3JrZXI7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBkZWxhbGxvY193b3JrZXJzOwogCXN0cnVjdCBidHJmc193b3JrZXJzIGVuZGlvX3dvcmtlcnM7CkBAIC05MTAsNiArOTE4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbmRpb19tZXRhX3dyaXRlX3dvcmtlcnM7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZW5kaW9fd3JpdGVfd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBzdWJtaXRfd29ya2VyczsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbm9zcGNfd29ya2VyczsKIAkvKgogCSAqIGZpeHVwIHdvcmtlcnMgdGFrZSBkaXJ0eSBwYWdlcyB0aGF0IGRpZG4ndCBwcm9wZXJseSBnbyB0aHJvdWdoCiAJICogdGhlIGNvdyBtZWNoYW5pc20gYW5kIG1ha2UgdGhlbSBzYWZlIHRvIHdyaXRlLiAgSXQgaGFwcGVucwpAQCAtMTAwMCw3ICsxMDA5LDEwIEBACiAJYXRvbWljX3QgbG9nX3dyaXRlcnM7CiAJYXRvbWljX3QgbG9nX2NvbW1pdFsyXTsKIAl1bnNpZ25lZCBsb25nIGxvZ190cmFuc2lkOworCXVuc2lnbmVkIGxvbmcgbGFzdF9sb2dfY29tbWl0OwogCXVuc2lnbmVkIGxvbmcgbG9nX2JhdGNoOworCXBpZF90IGxvZ19zdGFydF9waWQ7CisJYm9vbCBsb2dfbXVsdGlwbGVfcGlkczsKIAogCXU2NCBvYmplY3RpZDsKIAl1NjQgbGFzdF90cmFuczsKQEAgLTExNDEsNiArMTE1Myw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX0ZMVVNIT05DT01NSVQgICAgICAgKDEgPDwgNykKICNkZWZpbmUgQlRSRlNfTU9VTlRfU1NEX1NQUkVBRAkJKDEgPDwgOCkKICNkZWZpbmUgQlRSRlNfTU9VTlRfTk9TU0QJCSgxIDw8IDkpCisjZGVmaW5lIEJUUkZTX01PVU5UX0RJU0NBUkQJCSgxIDw8IDEwKQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjAyMiw3ICsyMDM1LDEyIEBACiB2b2lkIGJ0cmZzX3NldF9pbm9kZV9zcGFjZV9pbmZvKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlvbmRlKTsKIHZvaWQgYnRyZnNfY2xlYXJfc3BhY2VfaW5mb19mdWxsKHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKTsKIAotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpOworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcyk7CitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKTsKK2ludCBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwgaW50IG51bV9pdGVtcyk7CiBpbnQgYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXU2NCBieXRlcyk7CiB2b2lkIGJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKQEAgLTIzMTQsNyArMjMzMiw3IEBACiB2b2lkIGJ0cmZzX29ycGhhbl9jbGVhbnVwKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiBpbnQgYnRyZnNfaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGlvY3RsLmMgKi8KIGxvbmcgYnRyZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKQEAgLTIzMjYsNyArMjM0NCw3IEBACiBpbnQgYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIGludCBza2lwX3Bpbm5lZCk7CiBpbnQgYnRyZnNfY2hlY2tfZmlsZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CiBpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsb2NrZWRfZW5kLApAQCAtMjM1Nyw3ICsyMzc1LDcgQEAKIGludCBidHJmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKIAogLyogYWNsLmMgKi8KLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogaW50IGJ0cmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiAjZWxzZQogI2RlZmluZSBidHJmc19jaGVja19hY2wgTlVMTApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDY0NGU3OTYuLjAyYjZhZmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTgyMiwxNCArODIyLDE0IEBACiAKIGludCBidHJmc193cml0ZV90cmVlX2Jsb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLCBidWYtPnN0YXJ0LAotCQkJCSAgICAgIGJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEsIFdCX1NZTkNfQUxMKTsKKwlyZXR1cm4gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywgYnVmLT5zdGFydCwKKwkJCQkJYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIGludCBidHJmc193YWl0X3RyZWVfYmxvY2tfd3JpdGViYWNrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLAotCQkJCSAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CisJcmV0dXJuIGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywKKwkJCQkgICAgICAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyZWFkX3RyZWVfYmxvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCkBAIC05MTcsNiArOTE3LDcgQEAKIAlhdG9taWNfc2V0KCZyb290LT5sb2dfd3JpdGVycywgMCk7CiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsCiAJCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIApAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAlXQVJOX09OKHJvb3QtPmxvZ19yb290KTsKIAlyb290LT5sb2dfcm9vdCA9IGxvZ19yb290OwogCXJvb3QtPmxvZ190cmFuc2lkID0gMDsKKwlyb290LT5sYXN0X2xvZ19jb21taXQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xNjMwLDcgKzE2MzIsNyBAQAogCWZzX2luZm8tPnNiID0gc2I7CiAJZnNfaW5mby0+bWF4X2V4dGVudCA9ICh1NjQpLTE7CiAJZnNfaW5mby0+bWF4X2lubGluZSA9IDgxOTIgKiAxMDI0OwotCWZzX2luZm8tPm1ldGFkYXRhX3JhdGlvID0gODsKKwlmc19pbmZvLT5tZXRhZGF0YV9yYXRpbyA9IDA7CiAKIAlmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywKIAkJCQkJICBudW1fb25saW5lX2NwdXMoKSArIDIsIDgpOwpAQCAtMTc0NiwyMSArMTc0OCwyNSBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfaXB1dDsKIAl9Ci1wcmludGsoInRocmVhZCBwb29sIGlzICVkXG4iLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKLQkvKgotCSAqIHdlIG5lZWQgdG8gc3RhcnQgYWxsIHRoZSBlbmRfaW8gd29ya2VycyB1cCBmcm9udCBiZWNhdXNlIHRoZQotCSAqIHF1ZXVlIHdvcmsgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYXQgaW50ZXJydXB0IHRpbWUsIGFuZCBzbyBpdAotCSAqIGNhbm5vdCBkeW5hbWljYWxseSBncm93LgotCSAqLworCisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5nZW5lcmljX3dvcmtlciwKKwkJCSAgICJnZW53b3JrIiwgMSwgTlVMTCk7CisKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMsICJ3b3JrZXIiLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2VycywgImRlbGFsbG9jIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAic3VibWl0IiwKIAkJCSAgIG1pbl90KHU2NCwgZnNfZGV2aWNlcy0+bnVtX2RldmljZXMsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2VycywgImVub3NwYyIsCisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCS8qIGEgaGlnaGVyIGlkbGUgdGhyZXNoIG9uIHRoZSBzdWJtaXQgd29ya2VycyBtYWtlcyBpdCBtdWNoIG1vcmUKIAkgKiBsaWtlbHkgdGhhdCBiaW9zIHdpbGwgYmUgc2VuZCBkb3duIGluIGEgc2FuZSBvcmRlciB0byB0aGUKQEAgLTE3NzQsMTUgKzE3ODAsMjAgQEAKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLm9yZGVyZWQgPSAxOwogCi0JYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAiZml4dXAiLCAxKTsKKwlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmZpeHVwX3dvcmtlcnMsICJmaXh1cCIsIDEsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fd29ya2VycywgImVuZGlvIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dvcmtlcnMsICJlbmRpby1tZXRhIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsCi0JCQkgICAiZW5kaW8tbWV0YS13cml0ZSIsIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgImVuZGlvLW1ldGEtd3JpdGUiLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsICJlbmRpby13cml0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCiAJLyoKIAkgKiBlbmRpb3MgYXJlIGxhcmdlbHkgcGFyYWxsZWwgYW5kIHNob3VsZCBoYXZlIGEgdmVyeQpAQCAtMTc5NCwxMiArMTgwNSw4IEBACiAJZnNfaW5mby0+ZW5kaW9fd3JpdGVfd29ya2Vycy5pZGxlX3RocmVzaCA9IDI7CiAJZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAotCWZzX2luZm8tPmVuZGlvX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCWZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+d29ya2VycywgMSk7CisJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAxKTsKQEAgLTE4MDcsNiArMTgxNCw3IEBACiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsIDEpOworCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzLCAxKTsKIAogCWZzX2luZm8tPmJkaS5yYV9wYWdlcyAqPSBidHJmc19zdXBlcl9udW1fZGV2aWNlcyhkaXNrX3N1cGVyKTsKIAlmc19pbmZvLT5iZGkucmFfcGFnZXMgPSBtYXgoZnNfaW5mby0+YmRpLnJhX3BhZ2VzLApAQCAtMjAxMiw2ICsyMDIwLDcgQEAKIAlmcmVlX2V4dGVudF9idWZmZXIoY2h1bmtfcm9vdC0+bm9kZSk7CiAJZnJlZV9leHRlbnRfYnVmZmVyKGNodW5rX3Jvb3QtPmNvbW1pdF9yb290KTsKIGZhaWxfc2JfYnVmZmVyOgorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjAyMCw2ICsyMDI5LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIGZhaWxfaXB1dDoKIAlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKQEAgLTI0MzcsNiArMjQ0Nyw3IEBACiAKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKIAorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjQ0NSw2ICsyNDU2LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIAogCWJ0cmZzX2Nsb3NlX2RldmljZXMoZnNfaW5mby0+ZnNfZGV2aWNlcyk7CiAJYnRyZnNfbWFwcGluZ190cmVlX2ZyZWUoJmZzX2luZm8tPm1hcHBpbmdfdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA5OTNmOTNmLi45NDYyN2M0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTY4LDYgKzY4LDggQEAKIAkJCSAgc3RydWN0IGV4dGVudF9idWZmZXIgKiptdXN0X2NsZWFuKTsKIHN0YXRpYyBpbnQgZmluZF9uZXh0X2tleShzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGxldmVsLAogCQkJIHN0cnVjdCBidHJmc19rZXkgKmtleSk7CitzdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcywKKwkJCSAgICBpbnQgZHVtcF9ibG9ja19ncm91cHMpOwogCiBzdGF0aWMgbm9pbmxpbmUgaW50CiBibG9ja19ncm91cF9jYWNoZV9kb25lKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpCkBAIC0xNTY2LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMLAogCQkJICAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgYnRyZnNfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkJdTY0IG51bV9ieXRlcykKIHsKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogCWludCByZXQ7CiAJdTY0IG1hcF9sZW5ndGggPSBudW1fYnl0ZXM7CiAJc3RydWN0IGJ0cmZzX211bHRpX2JpbyAqbXVsdGkgPSBOVUxMOwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUZWxsIHRoZSBibG9jayBkZXZpY2UocykgdGhhdCB0aGUgc2VjdG9ycyBjYW4gYmUgZGlzY2FyZGVkICovCiAJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsIFJFQUQsCiAJCQkgICAgICBieXRlbnIsICZtYXBfbGVuZ3RoLCAmbXVsdGksIDApOwpAQCAtMTYwMiw5ICsxNjA0LDYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBpbnQgYnRyZnNfaW5jX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yNzY1LDY3ICsyNzY0LDQ0OCBAQAogCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7CiB9CiAKK3N0YXRpYyB1NjQgY2FsY3VsYXRlX2J5dGVzX25lZWRlZChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwl1NjQgbnVtX2J5dGVzOworCWludCBsZXZlbDsKKworCWxldmVsID0gQlRSRlNfTUFYX0xFVkVMIC0gMjsKKwkvKgorCSAqIE5PVEU6IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgYWJzb2x1dGVseSB0aGUgd29yc3QgcG9zc2libGUgY2FzZS4KKwkgKiBUaGlzIGFzc3VtZXMgdGhhdCBfZXZlcnlfIGl0ZW0gd2UgaW5zZXJ0IHdpbGwgcmVxdWlyZSBhIG5ldyBsZWFmLCBhbmQKKwkgKiB0aGF0IHRoZSB0cmVlIGhhcyBncm93biB0byBpdHMgbWF4aW11bSBsZXZlbCBzaXplLgorCSAqLworCisJLyoKKwkgKiBmb3IgZXZlcnkgaXRlbSB3ZSBpbnNlcnQgd2UgY291bGQgaW5zZXJ0IGJvdGggYW4gZXh0ZW50IGl0ZW0gYW5kIGEKKwkgKiBleHRlbnQgcmVmIGl0ZW0uICBUaGVuIGZvciBldmVyIGl0ZW0gd2UgaW5zZXJ0LCB3ZSB3aWxsIG5lZWQgdG8gY293CisJICogYm90aCB0aGUgb3JpZ2luYWwgbGVhZiwgcGx1cyB0aGUgbGVhZiB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgaXQuCisJICoKKwkgKiBVbmxlc3Mgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIGV4dGVudCByb290LCB0aGVuIHdlIGp1c3Qgd2FudCB0aGUKKwkgKiBudW1iZXIgb2YgaXRlbXMgKiAyLCBzaW5jZSB3ZSBqdXN0IG5lZWQgdGhlIGV4dGVudCBpdGVtIHBsdXMgaXRzIHJlZi4KKwkgKi8KKwlpZiAocm9vdCA9PSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCkKKwkJbnVtX2J5dGVzID0gbnVtX2l0ZW1zICogMjsKKwllbHNlCisJCW51bV9ieXRlcyA9IChudW1faXRlbXMgKyAoMiAqIG51bV9pdGVtcykpICogMzsKKworCS8qCisJICogbnVtX2J5dGVzIGlzIHRvdGFsIG51bWJlciBvZiBsZWF2ZXMgd2UgY291bGQgbmVlZCB0aW1lcyB0aGUgbGVhZgorCSAqIHNpemUsIGFuZCB0aGVuIGZvciBldmVyeSBsZWFmIHdlIGNvdWxkIGVuZCB1cCBjb3cnaW5nIDIgbm9kZXMgcGVyCisJICogbGV2ZWwsIGRvd24gdG8gdGhlIGxlYWYgbGV2ZWwuCisJICovCisJbnVtX2J5dGVzID0gKG51bV9ieXRlcyAqIHJvb3QtPmxlYWZzaXplKSArCisJCShudW1fYnl0ZXMgKiAobGV2ZWwgKiAyKSkgKiByb290LT5ub2Rlc2l6ZTsKKworCXJldHVybiBudW1fYnl0ZXM7Cit9CisKIC8qCi0gKiBmb3Igbm93IHRoaXMganVzdCBtYWtlcyBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgNSUgb2Ygb3VyIG1ldGFkYXRhIHNwYWNlIGZyZWUKLSAqIGZvciB1c2UuCisgKiBVbnJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLiAgSWYgd2UgaGF2ZSBsZXNzIHJlc2VydmVkIGNyZWRpdHMgdGhhbgorICogd2UgaGF2ZSBleHRlbnRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KICAqLwotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKLQl1NjQgYWxsb2NfdGFyZ2V0LCB0aHJlc2g7Ci0JaW50IGNvbW1pdHRlZCA9IDAsIHJldDsKKwl1NjQgbnVtX2J5dGVzOworCXU2NCBhbGxvY190YXJnZXQ7CisJYm9vbCBidWcgPSBmYWxzZTsKIAogCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLwogCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOwogCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOwotCWlmICghbWV0YV9zaW5mbykKLQkJZ290byBhbGxvYzsKIAorCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkJCSAgIG51bV9pdGVtcyk7CisKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzIDw9CisJICAgIEJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKSB7CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMtLTsKKwlCVUdfT04oQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMgPCAwKTsKKworCWlmIChtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA8IG51bV9ieXRlcykgeworCQlidWcgPSB0cnVlOworCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOworCX0KKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlCVUdfT04oYnVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JjZV9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbykKK3sKKwl1NjQgdGhyZXNoOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgLSB0aHJlc2g7CisJdGhyZXNoICo9IDgwOworCWRvX2Rpdih0aHJlc2gsIDEwMCk7CisJaWYgKHRocmVzaCA8PSBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYykKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAxOworCWVsc2UKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAwOworfQorCitzdHJ1Y3QgYXN5bmNfZmx1c2ggeworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCXN0cnVjdCBidHJmc193b3JrIHdvcms7Cit9OworCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBmbHVzaF9kZWxhbGxvY19hc3luYyhzdHJ1Y3QgYnRyZnNfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCisJYXN5bmMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzeW5jX2ZsdXNoLCB3b3JrKTsKKwlyb290ID0gYXN5bmMtPnJvb3Q7CisJaW5mbyA9IGFzeW5jLT5pbmZvOworCisJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDApOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5mbHVzaGluZyA9IDA7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCisJa2ZyZWUoYXN5bmMpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X29uX2ZsdXNoKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXU2NCB1c2VkOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNlZCA9IGluZm8tPmJ5dGVzX3VzZWQgKyBpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCQlpbmZvLT5ieXRlc19waW5uZWQgKyBpbmZvLT5ieXRlc19yZWFkb25seSArCisJCQlpbmZvLT5ieXRlc19zdXBlciArIGluZm8tPmJ5dGVzX3Jvb3QgKworCQkJaW5mby0+Ynl0ZXNfbWF5X3VzZSArIGluZm8tPmJ5dGVzX2RlbGFsbG9jOworCQlpZiAodXNlZCA8IGluZm8tPnRvdGFsX2J5dGVzKSB7CisJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXNjaGVkdWxlKCk7CisJfQorCWZpbmlzaF93YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2RlbGFsbG9jKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSBzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCWJvb2wgd2FpdCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJaW5mby0+Zmx1c2hpbmcgPSAxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5mbHVzaF93YWl0KTsKKwl9IGVsc2UgeworCQl3YWl0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAod2FpdCkgeworCQl3YWl0X29uX2ZsdXNoKGluZm8pOworCQlyZXR1cm47CisJfQorCisJYXN5bmMgPSBremFsbG9jKHNpemVvZigqYXN5bmMpLCBHRlBfTk9GUyk7CisJaWYgKCFhc3luYykKKwkJZ290byBmbHVzaDsKKworCWFzeW5jLT5yb290ID0gcm9vdDsKKwlhc3luYy0+aW5mbyA9IGluZm87CisJYXN5bmMtPndvcmsuZnVuYyA9IGZsdXNoX2RlbGFsbG9jX2FzeW5jOworCisJYnRyZnNfcXVldWVfd29ya2VyKCZyb290LT5mc19pbmZvLT5lbm9zcGNfd29ya2VycywKKwkJCSAgICZhc3luYy0+d29yayk7CisJd2FpdF9vbl9mbHVzaChpbmZvKTsKKwlyZXR1cm47CisKK2ZsdXNoOgorCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+Zmx1c2hpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKK30KKworc3RhdGljIGludCBtYXliZV9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpkaXNrX3N1cGVyID0gJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHk7CisJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CisJYm9vbCB3YWl0ID0gZmFsc2U7CisJaW50IHJldCA9IDA7CisJdTY0IG1pbl9tZXRhZGF0YTsKKwl1NjQgZnJlZV9zcGFjZTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19zdXBlcl90b3RhbF9ieXRlcyhkaXNrX3N1cGVyKTsKKwkvKgorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciAxMGdiIG9yIDUlIG9mIHRoZQorCSAqIHNwYWNlIGluIHRoZSB2b2x1bWUuCisJICovCisJbWluX21ldGFkYXRhID0gbWluKCh1NjQpMTAgKiAxMDI0ICogMTAyNCAqIDEwMjQsCisJCQkgICAgIGRpdjY0X3U2NChmcmVlX3NwYWNlICogNSwgMTAwKSk7CisJaWYgKGluZm8tPnRvdGFsX2J5dGVzID49IG1pbl9tZXRhZGF0YSkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChpbmZvLT5mdWxsKSB7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKSB7CisJCWluZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJaW5mby0+YWxsb2NhdGluZ19jaHVuayA9IDE7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmFsbG9jYXRlX3dhaXQpOworCX0gZWxzZSB7CisJCXdhaXQgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh3YWl0KSB7CisJCXdhaXRfZXZlbnQoaW5mby0+YWxsb2NhdGVfd2FpdCwKKwkJCSAgICFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCSAgICAgNDA5NiArIDIgKiAxMDI0ICogMTAyNCwKKwkJCSAgICAgaW5mby0+ZmxhZ3MsIDApOworCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CitvdXQ6CisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5hbGxvY2F0aW5nX2NodW5rID0gMDsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJd2FrZV91cCgmaW5mby0+YWxsb2NhdGVfd2FpdCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IHVzZWQ7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlpbnQgZmx1c2hlZCA9IDA7CisJaW50IGZvcmNlX2RlbGFsbG9jOworCisJLyogZ2V0IHRoZSBzcGFjZSBpbmZvIGZvciB3aGVyZSB0aGUgbWV0YWRhdGEgd2lsbCBsaXZlICovCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMCk7CisJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sIGFsbG9jX3RhcmdldCk7CisKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAorCQkJCQkgICBudW1faXRlbXMpOwogYWdhaW46CiAJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpCi0JCXRocmVzaCA9IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzICogODA7Ci0JZWxzZQotCQl0aHJlc2ggPSBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcyAqIDk1OwogCi0JZG9fZGl2KHRocmVzaCwgMTAwKTsKKwlmb3JjZV9kZWxhbGxvYyA9IG1ldGFfc2luZm8tPmZvcmNlX2RlbGFsbG9jOwogCi0JaWYgKG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCi0JICAgIG1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKLQkgICAgbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgPiB0aHJlc2gpIHsKLQkJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JCWlmICghbWV0YV9zaW5mby0+ZnVsbCkgewotCQkJbWV0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFmbHVzaGVkKQorCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyArPSBudW1fYnl0ZXM7CisKKwl1c2VkID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICsgbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2M7CisKKwlpZiAodXNlZCA+IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzKSB7CisJCWZsdXNoZWQrKzsKKworCQlpZiAoZmx1c2hlZCA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCWZsdXNoZWQrKzsKKwkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLWFsbG9jOgotCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJCWlmICghdHJhbnMpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAotCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfdGFyZ2V0LCAwKTsKLQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAoIW1ldGFfc2luZm8pIHsKLQkJCQltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywKLQkJCQkJCQkgICAgICAgYWxsb2NfdGFyZ2V0KTsKLQkJCX0KKwkJaWYgKGZsdXNoZWQgPT0gMikgeworCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKwkJCWdvdG8gYWdhaW47CisJCX0gZWxzZSBpZiAoZmx1c2hlZCA9PSAzKSB7CisJCQlmbHVzaF9kZWxhbGxvYyhyb290LCBtZXRhX3NpbmZvKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KKwkJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOwogCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci0KLQkJaWYgKCFjb21taXR0ZWQpIHsKLQkJCWNvbW1pdHRlZCA9IDE7Ci0JCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlpZiAoIXRyYW5zKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJlbm9zcGMsIGhhcyAlZCwgcmVzZXJ2ZWQgJWRcbiIsCisJCSAgICAgICBCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cywKKwkJICAgICAgIEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKG1ldGFfc2luZm8sIDAsIDApOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CisKKwlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cysrOworCWNoZWNrX2ZvcmNlX2RlbGFsbG9jKG1ldGFfc2luZm8pOworCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICghZmx1c2hlZCAmJiBmb3JjZV9kZWxhbGxvYykKKwkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdW5yZXNlcnZlIG51bV9pdGVtcyBudW1iZXIgb2YgaXRlbXMgd29ydGggb2YgbWV0YWRhdGEgc3BhY2UuICBUaGlzIG5lZWRzIHRvCisgKiBiZSBwYWlyZWQgd2l0aCBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlLgorICoKKyAqIE5PVEU6IGlmIHlvdSBoYXZlIHRoZSBvcHRpb24sIHJ1biB0aGlzIF9BRlRFUl8geW91IGRvIGEKKyAqIGJ0cmZzX2VuZF90cmFuc2FjdGlvbiwgc2luY2UgYnRyZnNfZW5kX3RyYW5zYWN0aW9uIHdpbGwgcnVuIGRlbGF5ZWQgcmVmCisgKiBvcHJhdGlvbnMgd2hpY2ggd2lsbCByZXN1bHQgaW4gbW9yZSB1c2VkIG1ldGFkYXRhLCBzbyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZQorICogY2FuIGRvIHRoYXQgd2l0aG91dCBpc3N1ZS4KKyAqLworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWJvb2wgYnVnID0gZmFsc2U7CisKKwkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KKwlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKKwltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKKworCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdCwgbnVtX2l0ZW1zKTsKKworCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJaWYgKG1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgPCBudW1fYnl0ZXMpIHsKKwkJYnVnID0gdHJ1ZTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBudW1fYnl0ZXM7CisJfQorCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCUJVR19PTihidWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNlcnZlIHNvbWUgbWV0YWRhdGEgc3BhY2UgZm9yIHVzZS4gIFdlJ2xsIGNhbGN1bGF0ZSB0aGUgd29yc3RlIGNhc2UgbnVtYmVyCisgKiBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBtb2RpZnkgbnVtX2l0ZW1zIG51bWJlciBvZiBpdGVtcy4gIElmIHdlCisgKiBoYXZlIHNwYWNlLCBmYW50YXN0aWMsIGlmIG5vdCwgeW91IGdldCAtRU5PU1BDLiAgUGxlYXNlIGNhbGwKKyAqIGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZSB3aGVuIHlvdSBhcmUgZG9uZSBmb3IgdGhlIF9TQU1FXyBudW1iZXIgb2YKKyAqIGl0ZW1zIHlvdSByZXNlcnZlZCwgc2luY2Ugd2hhdGV2ZXIgbWV0YWRhdGEgeW91IG5lZWRlZCBzaG91bGQgaGF2ZSBhbHJlYWR5CisgKiBiZWVuIGFsbG9jYXRlZC4KKyAqCisgKiBUaGlzIHdpbGwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB0byBtYWtlIG1vcmUgc3BhY2UgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAqIG1ldGFkYXRhIHNwYWNlLiAgVEhlIG9ubHkgdGltZSB3ZSBkb24ndCBkbyB0aGlzIGlzIGlmIHdlJ3JlIHJlc2VydmluZyBzcGFjZQorICogaW5zaWRlIG9mIGEgdHJhbnNhY3Rpb24sIHRoZW4gd2Ugd2lsbCBqdXN0IHJldHVybiAtRU5PU1BDIGFuZCBpdCBpcyB0aGUKKyAqIGNhbGxlcnMgcmVzcG9uc2liaWxpdHkgdG8gaGFuZGxlIGl0IHByb3Blcmx5LgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgdXNlZDsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWludCByZXRyaWVzID0gMDsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCisJbnVtX2J5dGVzID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCBudW1faXRlbXMpOworYWdhaW46CisJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFyZXRyaWVzKQorCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICs9IG51bV9ieXRlczsKKworCXVzZWQgPSBtZXRhX3NpbmZvLT5ieXRlc191c2VkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKworCQltZXRhX3NpbmZvLT5ieXRlc19waW5uZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZWFkb25seSArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3N1cGVyICsgbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgKyBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYzsKKworCWlmICh1c2VkID4gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMpIHsKKwkJcmV0cmllcysrOworCQlpZiAocmV0cmllcyA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCXJldHJpZXMrKzsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJfQorCisJCWlmIChyZXRyaWVzID09IDIpIHsKKwkJCWZsdXNoX2RlbGFsbG9jKHJvb3QsIG1ldGFfc2luZm8pOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIC09IG51bV9ieXRlczsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCisJCWR1bXBfc3BhY2VfaW5mbyhtZXRhX3NpbmZvLCAwLCAwKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJY2hlY2tfZm9yY2VfZGVsYWxsb2MobWV0YV9zaW5mbyk7CiAJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yODg4LDcgKzMyNjgsNyBAQAogCQlzcGluX3VubG9jaygmZGF0YV9zaW5mby0+bG9jayk7CiAKIAkJLyogY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB0cnkgYWdhaW4gKi8KLQkJaWYgKCFjb21taXR0ZWQpIHsKKwkJaWYgKCFjb21taXR0ZWQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHsKIAkJCWNvbW1pdHRlZCA9IDE7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoIXRyYW5zKQpAQCAtMjkxNiw3ICszMjk2LDcgQEAKIAlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfYnl0ZXMgKz0gYnl0ZXM7CiAJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCi0JcmV0dXJuIGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMDE1LDE3ICszMzk1LDE1IEBACiAJQlVHX09OKCFzcGFjZV9pbmZvKTsKIAogCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKSB7CisJaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKQogCQlmb3JjZSA9IDE7Ci0JCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKLQl9CiAJaWYgKHNwYWNlX2luZm8tPmZ1bGwpIHsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CiAKIAl0aHJlc2ggPSBzcGFjZV9pbmZvLT50b3RhbF9ieXRlcyAtIHNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5OwotCXRocmVzaCA9IGRpdl9mYWN0b3IodGhyZXNoLCA2KTsKKwl0aHJlc2ggPSBkaXZfZmFjdG9yKHRocmVzaCwgOCk7CiAJaWYgKCFmb3JjZSAmJgogCSAgIChzcGFjZV9pbmZvLT5ieXRlc191c2VkICsgc3BhY2VfaW5mby0+Ynl0ZXNfcGlubmVkICsKIAkgICAgc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKyBhbGxvY19ieXRlcykgPCB0aHJlc2gpIHsKQEAgLTMwMzksNyArMzQxNyw3IEBACiAJICogd2Uga2VlcCBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIG1ldGFkYXRhIGNodW5rcyBhbGxvY2F0ZWQgaW4gdGhlCiAJICogRlMgYXMgd2VsbC4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSB7CisJaWYgKGZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSAmJiBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykgewogCQlmc19pbmZvLT5kYXRhX2NodW5rX2FsbG9jYXRpb25zKys7CiAJCWlmICghKGZzX2luZm8tPmRhdGFfY2h1bmtfYWxsb2NhdGlvbnMgJQogCQkgICAgICBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykpCkBAIC0zMDQ3LDggKzM0MjUsMTEgQEAKIAl9CiAKIAlyZXQgPSBidHJmc19hbGxvY19jaHVuayh0cmFucywgZXh0ZW50X3Jvb3QsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChyZXQpCiAJCXNwYWNlX2luZm8tPmZ1bGwgPSAxOworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKwlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZleHRlbnRfcm9vdC0+ZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0zMzA2LDYgKzM2ODcsMTQgQEAKIAlpZiAoaXNfZGF0YSkKIAkJZ290byBwaW5pdDsKIAorCS8qCisJICogZGlzY2FyZCBpcyBzbG9vb293LCBhbmQgc28gdHJpZ2dlcmluZyBkaXNjYXJkcyBvbgorCSAqIGluZGl2aWR1YWwgYnRyZWUgYmxvY2tzIGlzbid0IGEgZ29vZCBwbGFuLiAgSnVzdAorCSAqIHBpbiBldmVyeXRoaW5nIGluIGRpc2NhcmQgbW9kZS4KKwkgKi8KKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgRElTQ0FSRCkpCisJCWdvdG8gcGluaXQ7CisKIAlidWYgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMpOwogCWlmICghYnVmKQogCQlnb3RvIHBpbml0OwpAQCAtMzcxMyw3ICs0MTAyLDcgQEAKIH0KIAogZW51bSBidHJmc19sb29wX3R5cGUgewotCUxPT1BfQ0FDSEVEX09OTFkgPSAwLAorCUxPT1BfRklORF9JREVBTCA9IDAsCiAJTE9PUF9DQUNISU5HX05PV0FJVCA9IDEsCiAJTE9PUF9DQUNISU5HX1dBSVQgPSAyLAogCUxPT1BfQUxMT0NfQ0hVTksgPSAzLApAQCAtMzc0MiwxMSArNDEzMSwxNSBAQAogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAgPSBOVUxMOwogCWludCBlbXB0eV9jbHVzdGVyID0gMiAqIDEwMjQgKiAxMDI0OwogCWludCBhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwlpbnQgZG9uZV9jaHVua19hbGxvYyA9IDA7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CiAJaW50IGxhc3RfcHRyX2xvb3AgPSAwOwogCWludCBsb29wID0gMDsKIAlib29sIGZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7CiAJYm9vbCBmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwlib29sIGZhaWxlZF9hbGxvYyA9IGZhbHNlOworCXU2NCBpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwl1NjQgaWRlYWxfY2FjaGVfb2Zmc2V0ID0gMDsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYnRyZnNfc2V0X2tleV90eXBlKGlucywgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKQEAgLTM3ODIsMTQgKzQxNzUsMTkgQEAKIAkJZW1wdHlfY2x1c3RlciA9IDA7CiAKIAlpZiAoc2VhcmNoX3N0YXJ0ID09IGhpbnRfYnl0ZSkgeworaWRlYWxfY2FjaGU6CiAJCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCiAJCQkJCQkgICAgICAgc2VhcmNoX3N0YXJ0KTsKIAkJLyoKIAkJICogd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGJsb2NrIGdyb3VwIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggb3VyCiAJCSAqIGFsbG9jYXRpb24gYml0cywgb3IgaWYgaXRzIG5vdCBjYWNoZWQuCisJCSAqCisJCSAqIEhvd2V2ZXIgaWYgd2UgYXJlIHJlLXNlYXJjaGluZyB3aXRoIGFuIGlkZWFsIGJsb2NrIGdyb3VwCisJCSAqIHBpY2tlZCBvdXQgdGhlbiB3ZSBkb24ndCBjYXJlIHRoYXQgdGhlIGJsb2NrIGdyb3VwIGlzIGNhY2hlZC4KIAkJICovCiAJCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSAmJgotCQkgICAgYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCkpIHsKKwkJICAgIChibG9ja19ncm91cC0+Y2FjaGVkICE9IEJUUkZTX0NBQ0hFX05PIHx8CisJCSAgICAgc2VhcmNoX3N0YXJ0ID09IGlkZWFsX2NhY2hlX29mZnNldCkpIHsKIAkJCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJCQlpZiAobGlzdF9lbXB0eSgmYmxvY2tfZ3JvdXAtPmxpc3QpIHx8CiAJCQkgICAgYmxvY2tfZ3JvdXAtPnJvKSB7CkBAIC0zODAxLDEzICs0MTk5LDEzIEBACiAJCQkJICovCiAJCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJCQl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlnb3RvIGhhdmVfYmxvY2tfZ3JvdXA7CisJCQl9CiAJCX0gZWxzZSBpZiAoYmxvY2tfZ3JvdXApIHsKIAkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCX0KIAl9Ci0KIHNlYXJjaDoKIAlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2tfZ3JvdXAsICZzcGFjZV9pbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTM4MTksMjggKzQyMTcsNDUgQEAKIAogaGF2ZV9ibG9ja19ncm91cDoKIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfTk8pKSB7CisJCQl1NjQgZnJlZV9wZXJjZW50OworCisJCQlmcmVlX3BlcmNlbnQgPSBidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSk7CisJCQlmcmVlX3BlcmNlbnQgKj0gMTAwOworCQkJZnJlZV9wZXJjZW50ID0gZGl2NjRfdTY0KGZyZWVfcGVyY2VudCwKKwkJCQkJCSBibG9ja19ncm91cC0+a2V5Lm9mZnNldCk7CisJCQlmcmVlX3BlcmNlbnQgPSAxMDAgLSBmcmVlX3BlcmNlbnQ7CisJCQlpZiAoZnJlZV9wZXJjZW50ID4gaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGxpa2VseSghYmxvY2tfZ3JvdXAtPnJvKSkgeworCQkJCWlkZWFsX2NhY2hlX29mZnNldCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CisJCQkJaWRlYWxfY2FjaGVfcGVyY2VudCA9IGZyZWVfcGVyY2VudDsKKwkJCX0KKwogCQkJLyoKLQkJCSAqIHdlIHdhbnQgdG8gc3RhcnQgY2FjaGluZyBrdGhyZWFkcywgYnV0IG5vdCB0b28gbWFueQotCQkJICogcmlnaHQgb2ZmIHRoZSBiYXQgc28gd2UgZG9uJ3Qgb3ZlcndoZWxtIHRoZSBzeXN0ZW0sCi0JCQkgKiBzbyBvbmx5IHN0YXJ0IHRoZW0gaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIGFuZCB3ZSdyZQotCQkJICogaW4gdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBwaGFzZS4KKwkJCSAqIFdlIG9ubHkgd2FudCB0byBzdGFydCBrdGhyZWFkIGNhY2hpbmcgaWYgd2UgYXJlIGF0CisJCQkgKiB0aGUgcG9pbnQgd2hlcmUgd2Ugd2lsbCB3YWl0IGZvciBjYWNoaW5nIHRvIG1ha2UKKwkJCSAqIHByb2dyZXNzLCBvciBpZiBvdXIgaWRlYWwgc2VhcmNoIGlzIG92ZXIgYW5kIHdlJ3ZlCisJCQkgKiBmb3VuZCBzb21lYm9keSB0byBzdGFydCBjYWNoaW5nLgogCQkJICovCiAJCQlpZiAobG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQgfHwKLQkJCSAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpIHsKKwkJCSAgICAobG9vcCA+IExPT1BfRklORF9JREVBTCAmJgorCQkJICAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpKSB7CiAJCQkJcmV0ID0gY2FjaGVfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCUJVR19PTihyZXQpOwogCQkJfQorCQkJZm91bmRfdW5jYWNoZWRfYmcgPSB0cnVlOworCisJCQkvKgorCQkJICogSWYgbG9vcCBpcyBzZXQgZm9yIGNhY2hlZCBvbmx5LCB0cnkgdGhlIG5leHQgYmxvY2sKKwkJCSAqIGdyb3VwLgorCQkJICovCisJCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpCisJCQkJZ290byBsb29wOwogCQl9CiAKIAkJY2FjaGVkID0gYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCk7Ci0JCWlmICh1bmxpa2VseSghY2FjaGVkKSkgeworCQlpZiAodW5saWtlbHkoIWNhY2hlZCkpCiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IHRydWU7CiAKLQkJCS8qIGlmIHdlIG9ubHkgd2FudCBjYWNoZWQgYmdzLCBsb29wICovCi0JCQlpZiAobG9vcCA9PSBMT09QX0NBQ0hFRF9PTkxZKQotCQkJCWdvdG8gbG9vcDsKLQkJfQotCiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+cm8pKQogCQkJZ290byBsb29wOwogCkBAIC0zOTUxLDE0ICs0MzY2LDIzIEBACiAKIAkJb2Zmc2V0ID0gYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2MoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKIAkJCQkJCSAgICBudW1fYnl0ZXMsIGVtcHR5X3NpemUpOwotCQlpZiAoIW9mZnNldCAmJiAoY2FjaGVkIHx8ICghY2FjaGVkICYmCi0JCQkJCSAgIGxvb3AgPT0gTE9PUF9DQUNISU5HX05PV0FJVCkpKSB7Ci0JCQlnb3RvIGxvb3A7Ci0JCX0gZWxzZSBpZiAoIW9mZnNldCAmJiAoIWNhY2hlZCAmJgotCQkJCSAgICAgICBsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZGlkbid0IGZpbmQgYSBjaHVuaywgYW5kIHdlIGhhdmVuJ3QgZmFpbGVkIG9uIHRoaXMKKwkJICogYmxvY2sgZ3JvdXAgYmVmb3JlLCBhbmQgdGhpcyBibG9jayBncm91cCBpcyBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGNhY2hpbmcgYW5kIHdlIGFyZSBvayB3aXRoIHdhaXRpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIHdhaXQKKwkJICogZm9yIHByb2dyZXNzIHRvIGJlIG1hZGUsIGFuZCBzZXQgZmFpbGVkX2FsbG9jIHRvIHRydWUuCisJCSAqCisJCSAqIElmIGZhaWxlZF9hbGxvYyBpcyB0cnVlIHRoZW4gd2UndmUgYWxyZWFkeSB3YWl0ZWQgb24gdGhpcworCQkgKiBibG9jayBncm91cCBvbmNlIGFuZCBzaG91bGQgbW92ZSBvbiB0byB0aGUgbmV4dCBibG9jayBncm91cC4KKwkJICovCisJCWlmICghb2Zmc2V0ICYmICFmYWlsZWRfYWxsb2MgJiYgIWNhY2hlZCAmJgorCQkgICAgbG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQpIHsKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfcHJvZ3Jlc3MoYmxvY2tfZ3JvdXAsCi0JCQkJCW51bV9ieXRlcyArIGVtcHR5X3NpemUpOworCQkJCQkJbnVtX2J5dGVzICsgZW1wdHlfc2l6ZSk7CisJCQlmYWlsZWRfYWxsb2MgPSB0cnVlOwogCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQl9IGVsc2UgaWYgKCFvZmZzZXQpIHsKKwkJCWdvdG8gbG9vcDsKIAkJfQogY2hlY2tzOgogCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgb2Zmc2V0KTsKQEAgLTQwMDYsMTMgKzQ0MzAsMTYgQEAKIAkJYnJlYWs7CiBsb29wOgogCQlmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwkJZmFpbGVkX2FsbG9jID0gZmFsc2U7CiAJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJfQogCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCi0JLyogTE9PUF9DQUNIRURfT05MWSwgb25seSBzZWFyY2ggZnVsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcwotCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcywgYnV0Ci0JICoJCQlkb250IHdhaXQgZm9SIHRoZW0gdG8gZmluaXNoIGNhY2hpbmcKKwkvKiBMT09QX0ZJTkRfSURFQUwsIG9ubHkgc2VhcmNoIGNhY2hpbmcvY2FjaGVkIGJnJ3MsIGFuZCBkb24ndCB3YWl0IGZvcgorCSAqCQkJZm9yIHRoZW0gdG8gbWFrZSBjYWNoaW5nIHByb2dyZXNzLiAgQWxzbworCSAqCQkJZGV0ZXJtaW5lIHRoZSBiZXN0IHBvc3NpYmxlIGJnIHRvIGNhY2hlCisJICogTE9PUF9DQUNISU5HX05PV0FJVCwgc2VhcmNoIHBhcnRpYWxseSBjYWNoZWQgYmxvY2sgZ3JvdXBzLCBraWNraW5nCisJICoJCQljYWNoaW5nIGt0aHJlYWRzIGFzIHdlIG1vdmUgYWxvbmcKIAkgKiBMT09QX0NBQ0hJTkdfV0FJVCwgc2VhcmNoIGV2ZXJ5dGhpbmcsIGFuZCB3YWl0IGlmIG91ciBiZyBpcyBjYWNoaW5nCiAJICogTE9PUF9BTExPQ19DSFVOSywgZm9yY2UgYSBjaHVuayBhbGxvY2F0aW9uIGFuZCB0cnkgYWdhaW4KIAkgKiBMT09QX05PX0VNUFRZX1NJWkUsIHNldCBlbXB0eV9zaXplIGFuZCBlbXB0eV9jbHVzdGVyIHRvIDAgYW5kIHRyeQpAQCAtNDAyMSwxMiArNDQ0OCw0NyBAQAogCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFICYmCiAJICAgIChmb3VuZF91bmNhY2hlZF9iZyB8fCBlbXB0eV9zaXplIHx8IGVtcHR5X2NsdXN0ZXIgfHwKIAkgICAgIGFsbG93ZWRfY2h1bmtfYWxsb2MpKSB7Ci0JCWlmIChmb3VuZF91bmNhY2hlZF9iZykgeworCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwgJiYgZm91bmRfdW5jYWNoZWRfYmcpIHsKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7Ci0JCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7Ci0JCQkJbG9vcCsrOworCQkJbG9vcCsrOworCQkJaWYgKCFpZGVhbF9jYWNoZV9wZXJjZW50ICYmCisJCQkgICAgYXRvbWljX3JlYWQoJnNwYWNlX2luZm8tPmNhY2hpbmdfdGhyZWFkcykpCiAJCQkJZ290byBzZWFyY2g7Ci0JCQl9CisKKwkJCS8qCisJCQkgKiAxIG9mIHRoZSBmb2xsb3dpbmcgMiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBzbyBmYXIKKwkJCSAqCisJCQkgKiAxKSBXZSBmb3VuZCBhbiBpZGVhbCBibG9jayBncm91cCBmb3IgY2FjaGluZyB0aGF0CisJCQkgKiBpcyBtb3N0bHkgZnVsbCBhbmQgd2lsbCBjYWNoZSBxdWlja2x5LCBzbyB3ZSBtaWdodAorCQkJICogYXMgd2VsbCB3YWl0IGZvciBpdC4KKwkJCSAqCisJCQkgKiAyKSBXZSBzZWFyY2hlZCBmb3IgY2FjaGVkIG9ubHkgYW5kIHdlIGRpZG4ndCBmaW5kCisJCQkgKiBhbnl0aGluZywgYW5kIHdlIGRpZG4ndCBzdGFydCBhbnkgY2FjaGluZyBrdGhyZWFkcworCQkJICogZWl0aGVyLCBzbyBjaGFuY2VzIGFyZSB3ZSB3aWxsIGxvb3AgdGhyb3VnaCBhbmQKKwkJCSAqIHN0YXJ0IGEgY291cGxlIGNhY2hpbmcga3RocmVhZHMsIGFuZCB0aGVuIGNvbWUgYmFjaworCQkJICogYXJvdW5kIGFuZCBqdXN0IHdhaXQgZm9yIHRoZW0uICBUaGlzIHdpbGwgYmUgc2xvd2VyCisJCQkgKiBiZWNhdXNlIHdlIHdpbGwgaGF2ZSAyIGNhY2hpbmcga3RocmVhZHMgcmVhZGluZyBhdAorCQkJICogdGhlIHNhbWUgdGltZSB3aGVuIHdlIGNvdWxkIGhhdmUganVzdCBzdGFydGVkIG9uZQorCQkJICogYW5kIHdhaXRlZCBmb3IgaXQgdG8gZ2V0IGZhciBlbm91Z2ggdG8gZ2l2ZSB1cyBhbgorCQkJICogYWxsb2NhdGlvbiwgc28gZ28gYWhlYWQgYW5kIGdvIHRvIHRoZSB3YWl0IGNhY2hpbmcKKwkJCSAqIGxvb3AuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCXNlYXJjaF9zdGFydCA9IGlkZWFsX2NhY2hlX29mZnNldDsKKwkJCWlkZWFsX2NhY2hlX3BlcmNlbnQgPSAwOworCQkJZ290byBpZGVhbF9jYWNoZTsKKwkJfSBlbHNlIGlmIChsb29wID09IExPT1BfRklORF9JREVBTCkgeworCQkJLyoKKwkJCSAqIERpZG4ndCBmaW5kIGEgdW5jYWNoZWQgYmcsIHdhaXQgb24gYW55dGhpbmcgd2UgZmluZAorCQkJICogbmV4dC4KKwkJCSAqLworCQkJbG9vcCA9IExPT1BfQ0FDSElOR19XQUlUOworCQkJZ290byBzZWFyY2g7CisJCX0KKworCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7CisJCQlsb29wKys7CisJCQlnb3RvIHNlYXJjaDsKIAkJfQogCiAJCWlmIChsb29wID09IExPT1BfQUxMT0NfQ0hVTkspIHsKQEAgLTQwMzgsNyArNDUwMCw4IEBACiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKIAkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsIDEpOwogCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0JCX0gZWxzZSB7CisJCQlkb25lX2NodW5rX2FsbG9jID0gMTsKKwkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYykgewogCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSAxOwogCQl9CiAKQEAgLTQwNjMsMjEgKzQ1MjYsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcykKK3N0YXRpYyB2b2lkIGR1bXBfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbywgdTY0IGJ5dGVzLAorCQkJICAgIGludCBkdW1wX2Jsb2NrX2dyb3VwcykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwogCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlwcmludGsoS0VSTl9JTkZPICJzcGFjZV9pbmZvIGhhcyAlbGx1IGZyZWUsIGlzICVzZnVsbFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaW5mby0+dG90YWxfYnl0ZXMgLSBpbmZvLT5ieXRlc191c2VkIC0KLQkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpLAorCQkJCSAgICBpbmZvLT5ieXRlc19waW5uZWQgLSBpbmZvLT5ieXRlc19yZXNlcnZlZCAtCisJCQkJICAgIGluZm8tPmJ5dGVzX3N1cGVyKSwKIAkgICAgICAgKGluZm8tPmZ1bGwpID8gIiIgOiAibm90ICIpOwogCXByaW50ayhLRVJOX0lORk8gInNwYWNlX2luZm8gdG90YWw9JWxsdSwgcGlubmVkPSVsbHUsIGRlbGFsbG9jPSVsbHUsIgotCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1XG4iLAorCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1LCByb290PSVsbHUsIHN1cGVyPSVsbHUsIHJlc2VydmVkPSVsbHUiCisJICAgICAgICJcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+dG90YWxfYnl0ZXMsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfcGlubmVkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX2RlbGFsbG9jLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX21heV91c2UsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCk7CisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19yb290LAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3N1cGVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3Jlc2VydmVkKTsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAoIWR1bXBfYmxvY2tfZ3JvdXBzKQorCQlyZXR1cm47CiAKIAlkb3duX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZpbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTQxNDUsNyArNDYxOSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWxsb2NhdGlvbiBmYWlsZWQgZmxhZ3MgJWxsdSwgIgogCQkgICAgICAgIndhbnRlZCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bV9ieXRlcyk7Ci0JCWR1bXBfc3BhY2VfaW5mbyhzaW5mbywgbnVtX2J5dGVzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKHNpbmZvLCBudW1fYnl0ZXMsIDEpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NTA2LDYgKzQ5ODAsNyBAQAogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IHJlZnM7CisJdTY0IGZsYWdzOwogCXU2NCBsYXN0ID0gMDsKIAl1MzIgbnJpdGVtczsKIAl1MzIgYmxvY2tzaXplOwpAQCAtNDU0MywxNSArNTAxOCwxOSBAQAogCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQljb250aW51ZTsKIAorCQkvKiBXZSBkb24ndCBsb2NrIHRoZSB0cmVlIGJsb2NrLCBpdCdzIE9LIHRvIGJlIHJhY3kgaGVyZSAqLworCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgICAgICAgJnJlZnMsICZmbGFncyk7CisJCUJVR19PTihyZXQpOworCQlCVUdfT04ocmVmcyA9PSAwKTsKKwogCQlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7Ci0JCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCi0JCQkJCQlieXRlbnIsIGJsb2Nrc2l6ZSwKLQkJCQkJCSZyZWZzLCBOVUxMKTsKLQkJCUJVR19PTihyZXQpOwotCQkJQlVHX09OKHJlZnMgPT0gMCk7CiAJCQlpZiAocmVmcyA9PSAxKQogCQkJCWdvdG8gcmVhZGE7CiAKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJCWlmICghd2MtPnVwZGF0ZV9yZWYgfHwKIAkJCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkKIAkJCQljb250aW51ZTsKQEAgLTQ1NjAsNiArNTAzOSwxMCBAQAogCQkJCQkJICAmd2MtPnVwZGF0ZV9wcm9ncmVzcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJfQogcmVhZGE6CiAJCXJldCA9IHJlYWRhaGVhZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLApAQCAtNDU4Myw3ICs1MDY2LDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgd2Fsa19kb3duX3Byb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIGludCBsb29rdXBfaW5mbykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtNDU5OCw4ICs1MDgxLDkgQEAKIAkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudCBvZiB0cmVlIGJsb2NrIGlzIDEsIGl0IHdvbid0IGluY3JlYXNlCiAJICogYWdhaW4uIG9uY2UgZnVsbCBiYWNrcmVmIGZsYWcgaXMgc2V0LCB3ZSBuZXZlciBjbGVhciBpdC4KIAkgKi8KLQlpZiAoKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSAmJiB3Yy0+cmVmc1tsZXZlbF0gIT0gMSkgfHwKLQkgICAgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJiAhKHdjLT5mbGFnc1tsZXZlbF0gJiBmbGFnKSkpIHsKKwlpZiAobG9va3VwX2luZm8gJiYKKwkgICAgKCh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UgJiYgd2MtPnJlZnNbbGV2ZWxdICE9IDEpIHx8CisJICAgICAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmICEod2MtPmZsYWdzW2xldmVsXSAmIGZsYWcpKSkpIHsKIAkJQlVHX09OKCFwYXRoLT5sb2Nrc1tsZXZlbF0pOwogCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCiAJCQkJCSAgICAgICBlYi0+c3RhcnQsIGViLT5sZW4sCkBAIC00NjYwLDcgKzUxNDQsNyBAQAogc3RhdGljIG5vaW5saW5lIGludCBkb193YWxrX2Rvd24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCBpbnQgKmxvb2t1cF9pbmZvKQogewogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CkBAIC00NjgwLDggKzUxNjQsMTAgQEAKIAkgKiBmb3IgdGhlIHN1YnRyZWUKIAkgKi8KIAlpZiAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmCi0JICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQorCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkgeworCQkqbG9va3VwX2luZm8gPSAxOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlieXRlbnIgPSBidHJmc19ub2RlX2Jsb2NrcHRyKHBhdGgtPm5vZGVzW2xldmVsXSwgcGF0aC0+c2xvdHNbbGV2ZWxdKTsKIAlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CkBAIC00Njk0LDE0ICs1MTgwLDE5IEBACiAJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwogCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCi0JaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgewotCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCi0JCQkJCSAgICAgICAmd2MtPmZsYWdzW2xldmVsIC0gMV0pOwotCQlCVUdfT04ocmV0KTsKLQkJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCisJCQkJICAgICAgICZ3Yy0+ZmxhZ3NbbGV2ZWwgLSAxXSk7CisJQlVHX09OKHJldCk7CisJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJKmxvb2t1cF9pbmZvID0gMDsKIAorCWlmICh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UpIHsKIAkJaWYgKHdjLT5yZWZzW2xldmVsIC0gMV0gPiAxKSB7CisJCQlpZiAobGV2ZWwgPT0gMSAmJgorCQkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJZ290byBza2lwOworCiAJCQlpZiAoIXdjLT51cGRhdGVfcmVmIHx8CiAJCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQkJZ290byBza2lwOwpAQCAtNDcxNSwxMiArNTIwNiwxNyBAQAogCQkJd2MtPnN0YWdlID0gVVBEQVRFX0JBQ0tSRUY7CiAJCQl3Yy0+c2hhcmVkX2xldmVsID0gbGV2ZWwgLSAxOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxldmVsID09IDEgJiYKKwkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQlnb3RvIHNraXA7CiAJfQogCiAJaWYgKCFidHJmc19idWZmZXJfdXB0b2RhdGUobmV4dCwgZ2VuZXJhdGlvbikpIHsKIAkJYnRyZnNfdHJlZV91bmxvY2sobmV4dCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJbmV4dCA9IE5VTEw7CisJCSpsb29rdXBfaW5mbyA9IDE7CiAJfQogCiAJaWYgKCFuZXh0KSB7CkBAIC00NzQzLDIxICs1MjM5LDIyIEBACiBza2lwOgogCXdjLT5yZWZzW2xldmVsIC0gMV0gPSAwOwogCXdjLT5mbGFnc1tsZXZlbCAtIDFdID0gMDsKKwlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7CisJCWlmICh3Yy0+ZmxhZ3NbbGV2ZWxdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpIHsKKwkJCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7CisJCX0gZWxzZSB7CisJCQlCVUdfT04ocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgIT0KKwkJCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7CisJCQlwYXJlbnQgPSAwOworCQl9CiAKLQlpZiAod2MtPmZsYWdzW2xldmVsXSAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSB7Ci0JCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7Ci0JfSBlbHNlIHsKLQkJQlVHX09OKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9Ci0JCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7Ci0JCXBhcmVudCA9IDA7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgcGFyZW50LAorCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwgbGV2ZWwgLSAxLCAwKTsKKwkJQlVHX09OKHJldCk7CiAJfQotCi0JcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLCBwYXJlbnQsCi0JCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsIC0gMSwgMCk7Ci0JQlVHX09OKHJldCk7Ci0KIAlidHJmc190cmVlX3VubG9jayhuZXh0KTsKIAlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CisJKmxvb2t1cF9pbmZvID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDg3MSw2ICs1MzY4LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgd2Fsa19jb250cm9sICp3YykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CisJaW50IGxvb2t1cF9pbmZvID0gMTsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGxldmVsID49IDApIHsKQEAgLTQ4NzgsMTQgKzUzNzYsMTQgQEAKIAkJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzW2xldmVsXSkpCiAJCQlicmVhazsKIAotCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MsIGxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+IDApCiAJCQlicmVhazsKIAogCQlpZiAobGV2ZWwgPT0gMCkKIAkJCWJyZWFrOwogCi0JCXJldCA9IGRvX3dhbGtfZG93bih0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSBkb193YWxrX2Rvd24odHJhbnMsIHJvb3QsIHBhdGgsIHdjLCAmbG9va3VwX2luZm8pOwogCQlpZiAocmV0ID4gMCkgewogCQkJcGF0aC0+c2xvdHNbbGV2ZWxdKys7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMGNiODhmOC4uOTY1NzdlOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTI4MCw2ICsyODAsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWVyZ2VfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpuZXcsCisJCSAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKQorCQl0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIG5ldywKKwkJCQkJICAgICBvdGhlcik7Cit9CisKIC8qCiAgKiB1dGlsaXR5IGZ1bmN0aW9uIHRvIGxvb2sgZm9yIG1lcmdlIGNhbmRpZGF0ZXMgaW5zaWRlIGEgZ2l2ZW4gcmFuZ2UuCiAgKiBBbnkgZXh0ZW50cyB3aXRoIG1hdGNoaW5nIHN0YXRlIGFyZSBtZXJnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZQpAQCAtMzAzLDYgKzMxMSw3IEBACiAJCW90aGVyID0gcmJfZW50cnkob3RoZXJfbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSwgcmJfbm9kZSk7CiAJCWlmIChvdGhlci0+ZW5kID09IHN0YXRlLT5zdGFydCAtIDEgJiYKIAkJICAgIG90aGVyLT5zdGF0ZSA9PSBzdGF0ZS0+c3RhdGUpIHsKKwkJCW1lcmdlX2NiKHRyZWUsIHN0YXRlLCBvdGhlcik7CiAJCQlzdGF0ZS0+c3RhcnQgPSBvdGhlci0+c3RhcnQ7CiAJCQlvdGhlci0+dHJlZSA9IE5VTEw7CiAJCQlyYl9lcmFzZSgmb3RoZXItPnJiX25vZGUsICZ0cmVlLT5zdGF0ZSk7CkBAIC0zMTQsMzMgKzMyMywzNyBAQAogCQlvdGhlciA9IHJiX2VudHJ5KG90aGVyX25vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUsIHJiX25vZGUpOwogCQlpZiAob3RoZXItPnN0YXJ0ID09IHN0YXRlLT5lbmQgKyAxICYmCiAJCSAgICBvdGhlci0+c3RhdGUgPT0gc3RhdGUtPnN0YXRlKSB7CisJCQltZXJnZV9jYih0cmVlLCBzdGF0ZSwgb3RoZXIpOwogCQkJb3RoZXItPnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OwogCQkJc3RhdGUtPnRyZWUgPSBOVUxMOwogCQkJcmJfZXJhc2UoJnN0YXRlLT5yYl9ub2RlLCAmdHJlZS0+c3RhdGUpOwogCQkJZnJlZV9leHRlbnRfc3RhdGUoc3RhdGUpOworCQkJc3RhdGUgPSBOVUxMOwogCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCitzdGF0aWMgaW50IHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zZXRfYml0X2hvb2spIHsKLQkJdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUtPnN0YXJ0LAotCQkJCQlzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOworCQlyZXR1cm4gdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGFydCwgc3RhdGUtPmVuZCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGF0ZSwgYml0cyk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX3N0YXRlX2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJICAgdW5zaWduZWQgbG9uZyBiaXRzKQogewotCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5jbGVhcl9iaXRfaG9vaykgewotCQl0cmVlLT5vcHMtPmNsZWFyX2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIHN0YXRlLT5zdGFydCwKLQkJCQkJICBzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOwotCX0KKwlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2spCisJCXRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUsIGJpdHMpOwogfQogCiAvKgpAQCAtMzU4LDYgKzM3MSw3IEBACiAJCQlpbnQgYml0cykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlpbnQgcmV0OwogCiAJaWYgKGVuZCA8IHN0YXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgZW5kIDwgc3RhcnQgJWxsdSAlbGx1XG4iLApAQCAtMzY1LDExICszNzksMTQgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnQpOwogCQlXQVJOX09OKDEpOwogCX0KLQlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKLQkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGFydCA9IHN0YXJ0OwogCXN0YXRlLT5lbmQgPSBlbmQ7Ci0Jc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlyZXQgPSBzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKKwkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOwogCW5vZGUgPSB0cmVlX2luc2VydCgmdHJlZS0+c3RhdGUsIGVuZCwgJnN0YXRlLT5yYl9ub2RlKTsKIAlpZiAobm9kZSkgewpAQCAtMzg3LDYgKzQwNCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNwbGl0X2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3JpZywKKwkJICAgICB1NjQgc3BsaXQpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPnNwbGl0X2V4dGVudF9ob29rKQorCQlyZXR1cm4gdHJlZS0+b3BzLT5zcGxpdF9leHRlbnRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LAorCQkJCQkJICAgIG9yaWcsIHNwbGl0KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHNwbGl0IGEgZ2l2ZW4gZXh0ZW50IHN0YXRlIHN0cnVjdCBpbiB0d28sIGluc2VydGluZyB0aGUgcHJlYWxsb2NhdGVkCiAgKiBzdHJ1Y3QgJ3ByZWFsbG9jJyBhcyB0aGUgbmV3bHkgY3JlYXRlZCBzZWNvbmQgaGFsZi4gICdzcGxpdCcgaW5kaWNhdGVzIGFuCkBAIC00MDUsNiArNDMxLDkgQEAKIAkJICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnByZWFsbG9jLCB1NjQgc3BsaXQpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlzcGxpdF9jYih0cmVlLCBvcmlnLCBzcGxpdCk7CisKIAlwcmVhbGxvYy0+c3RhcnQgPSBvcmlnLT5zdGFydDsKIAlwcmVhbGxvYy0+ZW5kID0gc3BsaXQgLSAxOwogCXByZWFsbG9jLT5zdGF0ZSA9IG9yaWctPnN0YXRlOwpAQCAtNDMxLDcgKzQ2MCw4IEBACiAJCQkgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsIGludCBiaXRzLCBpbnQgd2FrZSwKIAkJCSAgICBpbnQgZGVsZXRlKQogewotCWludCByZXQgPSBzdGF0ZS0+c3RhdGUgJiBiaXRzOworCWludCBiaXRzX3RvX2NsZWFyID0gYml0cyAmIH5FWFRFTlRfRE9fQUNDT1VOVElORzsKKwlpbnQgcmV0ID0gc3RhdGUtPnN0YXRlICYgYml0c190b19jbGVhcjsKIAogCWlmICgoYml0cyAmIEVYVEVOVF9ESVJUWSkgJiYgKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CkBAIC00MzksNyArNDY5LDcgQEAKIAkJdHJlZS0+ZGlydHlfYnl0ZXMgLT0gcmFuZ2U7CiAJfQogCWNsZWFyX3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKLQlzdGF0ZS0+c3RhdGUgJj0gfmJpdHM7CisJc3RhdGUtPnN0YXRlICY9IH5iaXRzX3RvX2NsZWFyOwogCWlmICh3YWtlKQogCQl3YWtlX3VwKCZzdGF0ZS0+d3EpOwogCWlmIChkZWxldGUgfHwgc3RhdGUtPnN0YXRlID09IDApIHsKQEAgLTU0Miw4ICs1NzIsOCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWlmIChzdGF0ZS0+ZW5kIDw9IGVuZCkgewotCQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBzdGF0ZSwgYml0cywKLQkJCQkJd2FrZSwgZGVsZXRlKTsKKwkJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgc3RhdGUsIGJpdHMsIHdha2UsCisJCQkJCSAgICAgICBkZWxldGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCiAJCQkJZ290byBvdXQ7CiAJCQlzdGFydCA9IGxhc3RfZW5kICsgMTsKQEAgLTU2MSwxMiArNTkxLDExIEBACiAJCQlwcmVhbGxvYyA9IGFsbG9jX2V4dGVudF9zdGF0ZShHRlBfQVRPTUlDKTsKIAkJZXJyID0gc3BsaXRfc3RhdGUodHJlZSwgc3RhdGUsIHByZWFsbG9jLCBlbmQgKyAxKTsKIAkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQogCQlpZiAod2FrZSkKIAkJCXdha2VfdXAoJnN0YXRlLT53cSk7CiAKLQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywKLQkJCQkgICAgICAgd2FrZSwgZGVsZXRlKTsKKwkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywgd2FrZSwgZGVsZXRlKTsKKwogCQlwcmVhbGxvYyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY2NywxNiArNjk2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKK3N0YXRpYyBpbnQgc2V0X3N0YXRlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgICBpbnQgYml0cykKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKChiaXRzICYgRVhURU5UX0RJUlRZKSAmJiAhKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CiAJCXRyZWUtPmRpcnR5X2J5dGVzICs9IHJhbmdlOwogCX0KLQlzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX3N0YXRlKHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLApAQCAtNzU4LDcgKzc5NCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCiAJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCWlmIChsYXN0X2VuZCA9PSAodTY0KS0xKQpAQCAtODA1LDcgKzg0NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHN0YXRlLT5lbmQgPD0gZW5kKSB7Ci0JCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQllcnIgPSBzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OwogCQkJY2FjaGVfc3RhdGUoc3RhdGUsIGNhY2hlZF9zdGF0ZSk7CiAJCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCQlpZiAobGFzdF9lbmQgPT0gKHU2NCktMSkKQEAgLTgyOSwxMSArODcwLDEzIEBACiAJCQl0aGlzX2VuZCA9IGxhc3Rfc3RhcnQgLSAxOwogCQllcnIgPSBpbnNlcnRfc3RhdGUodHJlZSwgcHJlYWxsb2MsIHN0YXJ0LCB0aGlzX2VuZCwKIAkJCQkgICBiaXRzKTsKKwkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKKwkJaWYgKGVycikgeworCQkJcHJlYWxsb2MgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCXByZWFsbG9jID0gTlVMTDsKLQkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHRoaXNfZW5kICsgMTsKIAkJZ290byBzZWFyY2hfYWdhaW47CiAJfQpAQCAtODUyLDcgKzg5NSwxMSBAQAogCQllcnIgPSBzcGxpdF9zdGF0ZSh0cmVlLCBzdGF0ZSwgcHJlYWxsb2MsIGVuZCArIDEpOwogCQlCVUdfT04oZXJyID09IC1FRVhJU1QpOwogCi0JCXNldF9zdGF0ZV9iaXRzKHRyZWUsIHByZWFsbG9jLCBiaXRzKTsKKwkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsIGJpdHMpOworCQlpZiAoZXJyKSB7CisJCQlwcmVhbGxvYyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQogCQljYWNoZV9zdGF0ZShwcmVhbGxvYywgY2FjaGVkX3N0YXRlKTsKIAkJbWVyZ2Vfc3RhdGUodHJlZSwgcHJlYWxsb2MpOwogCQlwcmVhbGxvYyA9IE5VTEw7CkBAIC05MTAsNyArOTU3LDggQEAKIAkJICAgICAgIGdmcF90IG1hc2spCiB7CiAJcmV0dXJuIGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQlFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsIDAsIDAsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfRE9fQUNDT1VOVElORywgMCwgMCwKIAkJCQlOVUxMLCBtYXNrKTsKIH0KIApAQCAtMTM1NSwxMiArMTQwMyw3IEBACiBpbnQgZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCQl1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwYWdlICpsb2NrZWRfcGFnZSwKLQkJCQlpbnQgdW5sb2NrX3BhZ2VzLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMikKKwkJCQl1bnNpZ25lZCBsb25nIG9wKQogewogCWludCByZXQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsKQEAgLTEzNzAsMTcgKzE0MTMsMjEgQEAKIAlpbnQgaTsKIAlpbnQgY2xlYXJfYml0cyA9IDA7CiAKLQlpZiAoY2xlYXJfdW5sb2NrKQorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9VTkxPQ0spCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0xPQ0tFRDsKLQlpZiAoY2xlYXJfZGlydHkpCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0RJUlRZKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ESVJUWTsKIAotCWlmIChjbGVhcl9kZWxhbGxvYykKKwlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfREVMQUxMT0MpCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RFTEFMTE9DOwogCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcpCisJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RPX0FDQ09VTlRJTkc7CisKIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIGNsZWFyX2JpdHMsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKLQlpZiAoISh1bmxvY2tfcGFnZXMgfHwgY2xlYXJfZGlydHkgfHwgc2V0X3dyaXRlYmFjayB8fCBlbmRfd3JpdGViYWNrIHx8Ci0JICAgICAgc2V0X3ByaXZhdGUyKSkKKwlpZiAoIShvcCAmIChFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfCBFWFRFTlRfRU5EX1dSSVRFQkFDSyB8CisJCSAgICBFWFRFTlRfU0VUX1BSSVZBVEUyKSkpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5yX3BhZ2VzID4gMCkgewpAQCAtMTM4OSwyMCArMTQzNiwyMCBAQAogCQkJCSAgICAgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwgcGFnZXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKIAotCQkJaWYgKHNldF9wcml2YXRlMikKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfUFJJVkFURTIpCiAJCQkJU2V0UGFnZVByaXZhdGUyKHBhZ2VzW2ldKTsKIAogCQkJaWYgKHBhZ2VzW2ldID09IGxvY2tlZF9wYWdlKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChjbGVhcl9kaXJ0eSkKKwkJCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9ESVJUWSkKIAkJCQljbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlc1tpXSk7Ci0JCQlpZiAoc2V0X3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfV1JJVEVCQUNLKQogCQkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAoZW5kX3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9FTkRfV1JJVEVCQUNLKQogCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAodW5sb2NrX3BhZ2VzKQorCQkJaWYgKG9wICYgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFKQogCQkJCXVubG9ja19wYWdlKHBhZ2VzW2ldKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCX0KQEAgLTI2NjgsNyArMjcxNSw4IEBACiAJbG9ja19leHRlbnQodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAotCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsCisJCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCAxNGVkMTZmLi4zNmRlMjUwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0ZJTExFRCAoMSA8PCA4KQogI2RlZmluZSBFWFRFTlRfQk9VTkRBUlkgKDEgPDwgOSkKICNkZWZpbmUgRVhURU5UX05PREFUQVNVTSAoMSA8PCAxMCkKKyNkZWZpbmUgRVhURU5UX0RPX0FDQ09VTlRJTkcgKDEgPDwgMTEpCiAjZGVmaW5lIEVYVEVOVF9JT0JJVFMgKEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfV1JJVEVCQUNLKQogCiAvKiBmbGFncyBmb3IgYmlvIHN1Ym1pc3Npb24gKi8KQEAgLTI1LDYgKzI2LDE2IEBACiAjZGVmaW5lIEVYVEVOVF9CVUZGRVJfQkxPQ0tJTkcgMQogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0RJUlRZIDIKIAorLyogdGhlc2UgYXJlIGZsYWdzIGZvciBleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jICovCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSAweDEKKyNkZWZpbmUgRVhURU5UX0NMRUFSX1VOTE9DSwkgMHgyCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ERUxBTExPQwkgMHg0CisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ESVJUWQkgMHg4CisjZGVmaW5lIEVYVEVOVF9TRVRfV1JJVEVCQUNLCSAweDEwCisjZGVmaW5lIEVYVEVOVF9FTkRfV1JJVEVCQUNLCSAweDIwCisjZGVmaW5lIEVYVEVOVF9TRVRfUFJJVkFURTIJIDB4NDAKKyNkZWZpbmUgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgIDB4ODAKKwogLyoKICAqIHBhZ2UtPnByaXZhdGUgdmFsdWVzLiAgRXZlcnkgcGFnZSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVudAogICogbWFwIGhhcyBwYWdlLT5wcml2YXRlIHNldCB0byBvbmUuCkBAIC02MCw4ICs3MSwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgdXB0b2RhdGUpOwogCWludCAoKnNldF9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpOwotCWludCAoKmNsZWFyX2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJaW50ICgqY2xlYXJfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBiaXRzKTsKKwlpbnQgKCptZXJnZV9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcik7CisJaW50ICgqc3BsaXRfZXh0ZW50X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCk7CiAJaW50ICgqd3JpdGVfY2FjaGVfcGFnZXNfbG9ja19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB9OwogCkBAIC03OSwxMCArOTUsMTQgQEAKIAl1NjQgc3RhcnQ7CiAJdTY0IGVuZDsgLyogaW5jbHVzaXZlICovCiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKworCS8qIEFERCBORVcgRUxFTUVOVFMgQUZURVIgVEhJUyAqLwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIAlhdG9taWNfdCByZWZzOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTY0IHNwbGl0X3N0YXJ0OworCXU2NCBzcGxpdF9lbmQ7CiAKIAkvKiBmb3IgdXNlIGJ5IHRoZSBGUyAqLwogCXU2NCBwcml2YXRlOwpAQCAtMjc5LDEwICsyOTksNSBAQAogaW50IGV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsCi0JCQkJaW50IHVubG9ja19wYWdlLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMik7CisJCQkJdW5zaWduZWQgbG9uZyBvcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCAyYzcyNmI3Li5jY2JkY2I1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAl3cml0ZV9sb2NrKCZ0cmVlLT5sb2NrKTsKIAllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZyh0cmVlLCBzdGFydCwgbGVuKTsKIAotCVdBUk5fT04oZW0tPnN0YXJ0ICE9IHN0YXJ0IHx8ICFlbSk7CisJV0FSTl9PTighZW0gfHwgZW0tPnN0YXJ0ICE9IHN0YXJ0KTsKIAogCWlmICghZW0pCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDU3MWFkM2MuLjA2NTUwYWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEyMyw3ICsxMjMsMTAgQEAKIAkJICAgIHJvb3QtPnNlY3RvcnNpemUgLSAxKSAmIH4oKHU2NClyb290LT5zZWN0b3JzaXplIC0gMSk7CiAKIAllbmRfb2ZfbGFzdF9ibG9jayA9IHN0YXJ0X3BvcyArIG51bV9ieXRlcyAtIDE7Ci0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJZXJyID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2VzW2ldOwogCQlTZXRQYWdlVXB0b2RhdGUocCk7CkBAIC04NzUsNyArODc4LDggQEAKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKIAogCQljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0X3BvcywKLQkJCQkgIGxhc3RfcG9zIC0gMSwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLAorCQkJCSAgbGFzdF9wb3MgLSAxLCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkJCSAgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkJICBHRlBfTk9GUyk7CiAJCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJICAgICAgc3RhcnRfcG9zLCBsYXN0X3BvcyAtIDEsIEdGUF9OT0ZTKTsKQEAgLTkxNywyMSArOTIxLDM1IEBACiAJc3RhcnRfcG9zID0gcG9zOwogCiAJdmZzX2NoZWNrX2Zyb3plbihpbm9kZS0+aV9zYiwgU0JfRlJFRVpFX1dSSVRFKTsKKworCS8qIGRvIHRoZSByZXNlcnZlIGJlZm9yZSB0aGUgbXV0ZXggbG9jayBpbiBjYXNlIHdlIGhhdmUgdG8gZG8gc29tZQorCSAqIGZsdXNoaW5nLiAgV2Ugd291bGRuJ3QgZGVhZGxvY2ssIGJ1dCB0aGlzIGlzIG1vcmUgcG9saXRlLgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ub2xvY2s7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKIAllcnIgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhmaWxlLCAmcG9zLCAmY291bnQsIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CisKIAlpZiAoY291bnQgPT0gMCkKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKIAogCWVyciA9IGZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKKwogCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CiAKIAlwYWdlcyA9IGttYWxsb2MobnJwdHJzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkvKiBnZW5lcmljX3dyaXRlX2NoZWNrcyBjYW4gY2hhbmdlIG91ciBwb3MgKi8KKwlzdGFydF9wb3MgPSBwb3M7CisKIAlCVFJGU19JKGlub2RlKS0+c2VxdWVuY2UrKzsKIAlmaXJzdF9pbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWxhc3RfaW5kZXggPSAocG9zICsgY291bnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC0xMDA1LDkgKzEwMjMsOCBAQAogCQl9CiAKIAkJaWYgKHdpbGxfd3JpdGUpIHsKLQkJCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcG9zLAotCQkJCQkgICAgICAgcG9zICsgd3JpdGVfYnl0ZXMgLSAxLAotCQkJCQkgICAgICAgV0JfU1lOQ19BTEwpOworCQkJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywKKwkJCQkJCSBwb3MgKyB3cml0ZV9ieXRlcyAtIDEpOwogCQl9IGVsc2UgewogCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihpbm9kZS0+aV9tYXBwaW5nLAogCQkJCQkJCSAgIG51bV9wYWdlcyk7CkBAIC0xMDI4LDYgKzEwNDUsNyBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChyZXQpCiAJCWVyciA9IHJldDsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAogb3V0X25vbG9jazoKIAlrZnJlZShwYWdlcyk7CkBAIC0xMDY4LDggKzEwODYsMTAgQEAKIAkJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQllbHNlCiAJCQkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlIGlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKIAkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJfSBlbHNlIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJfQogCQl9CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKQEAgLTExMTksNiArMTEzOSwxMyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCisKKwkvKiB3ZSB3YWl0IGZpcnN0LCBzaW5jZSB0aGUgd3JpdGViYWNrIG1heSBjaGFuZ2UgdGhlIGlub2RlICovCisJcm9vdC0+bG9nX2JhdGNoKys7CisJLyogdGhlIFZGUyBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlIGZvciB1cyAqLworCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJcm9vdC0+bG9nX2JhdGNoKys7CisKIAkvKgogCSAqIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqIGFuZCBzZWUgaWYgaXRzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQKQEAgLTExMjYsNiArMTE1MywxMSBAQAogCWlmICghQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBpZiB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZWQgdGhpcyBmaWxlIHdhcyBiZWZvcmUKKwkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQorCSAqIHN5bmNpbmcKKwkgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CkBAIC0xMTM1LDEzICsxMTY3LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQlyb290LT5sb2dfYmF0Y2grKzsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKLQlyb290LT5sb2dfYmF0Y2grKzsKLQotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdAogCSAqLwpAQCAtMTE3MCwyMSArMTE5NSwyNSBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQllbHNlCisJaWYgKHJldCAhPSBCVFJGU19OT19MT0dfU1lOQykgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZWxzZQorCQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXQgPiAwID8gRUlPIDogcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJ0cmZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gYnRyZnNfcGFnZV9ta3dyaXRlLAogfTsKQEAgLTExOTYsNyArMTIyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQgICAgICAgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggNWMyY2FhZC4uY2IyODQ5ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkJCXdpbmRvd19zdGFydCA9IGVudHJ5LT5vZmZzZXQ7CiAJCQl3aW5kb3dfZnJlZSA9IGVudHJ5LT5ieXRlczsKIAkJCWxhc3QgPSBlbnRyeTsKLQkJCW1heF9leHRlbnQgPSAwOworCQkJbWF4X2V4dGVudCA9IGVudHJ5LT5ieXRlczsKIAkJfSBlbHNlIHsKIAkJCWxhc3QgPSBuZXh0OwogCQkJd2luZG93X2ZyZWUgKz0gbmV4dC0+Ynl0ZXM7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBlOWI3NmJjLi5iM2FkMTY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTYyLDcgKzYyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19hb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19hb3BzOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGV4dGVudF9pb19vcHMgYnRyZnNfZXh0ZW50X2lvX29wczsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpidHJmc19pbm9kZV9jYWNoZXA7CkBAIC00MjQsOSArNDI0LDEyIEBACiAJCQkgKiBhbmQgZnJlZSB1cCBvdXIgdGVtcCBwYWdlcy4KIAkJCSAqLwogCQkJZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhpbm9kZSwKLQkJCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLCAxLCAwLAotCQkJCQkJICAgICAwLCAxLCAxLCAxLCAwKTsKKwkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJICAgICBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CisJCQkgICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0spOwogCQkJcmV0ID0gMDsKIAkJCWdvdG8gZnJlZV9wYWdlc19vdXQ7CiAJCX0KQEAgLTUzNSw3ICs1MzgsNyBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAobGlzdF9lbXB0eSgmYXN5bmNfY293LT5leHRlbnRzKSkKIAkJcmV0dXJuIDA7CkBAIC01NDksNiArNTUyLDcgQEAKIAogCQlpb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwogCityZXRyeToKIAkJLyogZGlkIHRoZSBjb21wcmVzc2lvbiBjb2RlIGZhbGwgYmFjayB0byB1bmNvbXByZXNzZWQgSU8/ICovCiAJCWlmICghYXN5bmNfZXh0ZW50LT5wYWdlcykgewogCQkJaW50IHBhZ2Vfc3RhcnRlZCA9IDA7CkBAIC01NTksMTEgKzU2MywxMSBAQAogCQkJCSAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOwogCiAJCQkvKiBhbGxvY2F0ZSBibG9ja3MgKi8KLQkJCWNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJICAgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKKwkJCXJldCA9IGNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJCSAgICAgJnBhZ2Vfc3RhcnRlZCwgJm5yX3dyaXR0ZW4sIDApOwogCiAJCQkvKgogCQkJICogaWYgcGFnZV9zdGFydGVkLCBjb3dfZmlsZV9yYW5nZSBpbnNlcnRlZCBhbgpAQCAtNTcxLDcgKzU3NSw3IEBACiAJCQkgKiBhbmQgSU8gZm9yIHVzLiAgT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHN1Ym1pdAogCQkJICogYWxsIHRob3NlIHBhZ2VzIGRvd24gdG8gdGhlIGRyaXZlLgogCQkJICovCi0JCQlpZiAoIXBhZ2Vfc3RhcnRlZCkKKwkJCWlmICghcGFnZV9zdGFydGVkICYmICFyZXQpCiAJCQkJZXh0ZW50X3dyaXRlX2xvY2tlZF9yYW5nZShpb190cmVlLAogCQkJCQkJICBpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKIAkJCQkJCSAgYXN5bmNfZXh0ZW50LT5zdGFydCArCkBAIC01OTksNyArNjAzLDIxIEBACiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICAwLCBhbGxvY19oaW50LAogCQkJCQkgICAodTY0KS0xLCAmaW5zLCAxKTsKLQkJQlVHX09OKHJldCk7CisJCWlmIChyZXQpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGFzeW5jX2V4dGVudC0+bnJfcGFnZXM7IGkrKykgeworCQkJCVdBUk5fT04oYXN5bmNfZXh0ZW50LT5wYWdlc1tpXS0+bWFwcGluZyk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0pOworCQkJfQorCQkJa2ZyZWUoYXN5bmNfZXh0ZW50LT5wYWdlcyk7CisJCQlhc3luY19leHRlbnQtPm5yX3BhZ2VzID0gMDsKKwkJCWFzeW5jX2V4dGVudC0+cGFnZXMgPSBOVUxMOworCQkJdW5sb2NrX2V4dGVudChpb190cmVlLCBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisKIAkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKIAkJZW0tPnN0YXJ0ID0gYXN5bmNfZXh0ZW50LT5zdGFydDsKIAkJZW0tPmxlbiA9IGFzeW5jX2V4dGVudC0+cmFtX3NpemU7CkBAIC02MzcsMTEgKzY1NSwxNCBAQAogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJCSAgICAgTlVMTCwgMSwgMSwgMCwgMSwgMSwgMCwgMCk7CisJCQkJJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJCWFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJTlVMTCwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwKKwkJCQlFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJCUVYVEVOVF9DTEVBUl9ESVJUWSB8IEVYVEVOVF9TRVRfV1JJVEVCQUNLKTsKIAogCQlyZXQgPSBidHJmc19zdWJtaXRfY29tcHJlc3NlZF93cml0ZShpbm9kZSwKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKQEAgLTcxMiw5ICs3MzMsMTUgQEAKIAkJCQkJICAgIHN0YXJ0LCBlbmQsIDAsIE5VTEwpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMSwKLQkJCQkJCSAgICAgMSwgMSwgMSwgMSwgMCk7CisJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCisJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9VTkxPQ0sgfAorCQkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9ESVJUWSB8CisJCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8CisJCQkJICAgICBFWFRFTlRfRU5EX1dSSVRFQkFDSyk7CiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtNzMxLDEzICs3NTgsMjkgQEAKIAllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLAogCQkJCSAgIHN0YXJ0LCBudW1fYnl0ZXMpOwogCWlmIChlbSkgewotCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OwotCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQkvKgorCQkgKiBpZiBibG9jayBzdGFydCBpc24ndCBhbiBhY3R1YWwgYmxvY2sgbnVtYmVyIHRoZW4gZmluZCB0aGUKKwkJICogZmlyc3QgYmxvY2sgaW4gdGhpcyBpbm9kZSBhbmQgdXNlIHRoYXQgYXMgYSBoaW50LiAgSWYgdGhhdAorCQkgKiBibG9jayBpcyBhbHNvIGJvZ3VzIHRoZW4ganVzdCBkb24ndCB3b3JyeSBhYm91dCBpdC4KKwkJICovCisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPj0gRVhURU5UX01BUF9MQVNUX0JZVEUpIHsKKwkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCQllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCAwLCAwKTsKKwkJCWlmIChlbSAmJiBlbS0+YmxvY2tfc3RhcnQgPCBFWFRFTlRfTUFQX0xBU1RfQllURSkKKwkJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJaWYgKGVtKQorCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCX0gZWxzZSB7CisJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJfQogCX0KIAlyZWFkX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLmxvY2spOwogCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBudW1fYnl0ZXMgLSAxLCAwKTsKIAogCXdoaWxlIChkaXNrX251bV9ieXRlcyA+IDApIHsKKwkJdW5zaWduZWQgbG9uZyBvcDsKKwogCQljdXJfYWxsb2Nfc2l6ZSA9IG1pbihkaXNrX251bV9ieXRlcywgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LCBjdXJfYWxsb2Nfc2l6ZSwKIAkJCQkJICAgcm9vdC0+c2VjdG9yc2l6ZSwgMCwgYWxsb2NfaGludCwKQEAgLTc4OSwxMCArODMyLDEzIEBACiAJCSAqIERvIHNldCB0aGUgUHJpdmF0ZTIgYml0IHNvIHdlIGtub3cgdGhpcyBwYWdlIHdhcyBwcm9wZXJseQogCQkgKiBzZXR1cCBmb3Igd3JpdGVwYWdlCiAJCSAqLworCQlvcCA9IHVubG9jayA/IEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSA6IDA7CisJCW9wIHw9IEVYVEVOVF9DTEVBUl9VTkxPQ0sgfCBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJRVhURU5UX1NFVF9QUklWQVRFMjsKKwogCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLCAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCiAJCQkJCSAgICAgc3RhcnQsIHN0YXJ0ICsgcmFtX3NpemUgLSAxLAotCQkJCQkgICAgIGxvY2tlZF9wYWdlLCB1bmxvY2ssIDEsCi0JCQkJCSAgICAgMSwgMCwgMCwgMCwgMSk7CisJCQkJCSAgICAgbG9ja2VkX3BhZ2UsIG9wKTsKIAkJZGlza19udW1fYnl0ZXMgLT0gY3VyX2FsbG9jX3NpemU7CiAJCW51bV9ieXRlcyAtPSBjdXJfYWxsb2Nfc2l6ZTsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CkBAIC04NjQsOCArOTEwLDggQEAKIAl1NjQgY3VyX2VuZDsKIAlpbnQgbGltaXQgPSAxMCAqIDEwMjQgKiAxMDQyOwogCi0JY2xlYXJfZXh0ZW50X2JpdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQgfAotCQkJIEVYVEVOVF9ERUxBTExPQywgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VELAorCQkJIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJYXN5bmNfY293ID0ga21hbGxvYyhzaXplb2YoKmFzeW5jX2NvdyksIEdGUF9OT0ZTKTsKIAkJYXN5bmNfY293LT5pbm9kZSA9IGlub2RlOwpAQCAtMTAwNiw2ICsxMDUyLDcgQEAKIAogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA+IGN1cl9vZmZzZXQpIHsKIAkJCWV4dGVudF9lbmQgPSBmb3VuZF9rZXkub2Zmc2V0OworCQkJZXh0ZW50X3R5cGUgPSAwOwogCQkJZ290byBvdXRfY2hlY2s7CiAJCX0KIApAQCAtMTExMiw4ICsxMTU5LDEwIEBACiAJCUJVR19PTihyZXQpOwogCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJY3VyX29mZnNldCwgY3VyX29mZnNldCArIG51bV9ieXRlcyAtIDEsCi0JCQkJCWxvY2tlZF9wYWdlLCAxLCAxLCAxLCAwLCAwLCAwLCAxKTsKKwkJCQljdXJfb2Zmc2V0LCBjdXJfb2Zmc2V0ICsgbnVtX2J5dGVzIC0gMSwKKwkJCQlsb2NrZWRfcGFnZSwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfU0VUX1BSSVZBVEUyKTsKIAkJY3VyX29mZnNldCA9IGV4dGVudF9lbmQ7CiAJCWlmIChjdXJfb2Zmc2V0ID4gZW5kKQogCQkJYnJlYWs7CkBAIC0xMTU5LDYgKzEyMDgsODkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGJ0cmZzX3NwbGl0X2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCXU2NCBzaXplOworCisJaWYgKCEob3JpZy0+c3RhdGUgJiBFWFRFTlRfREVMQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSBvcmlnLT5lbmQgLSBvcmlnLT5zdGFydCArIDE7CisJaWYgKHNpemUgPiByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXU2NCBudW1fZXh0ZW50czsKKwkJdTY0IG5ld19zaXplOworCisJCW5ld19zaXplID0gb3JpZy0+ZW5kIC0gc3BsaXQgKyAxOworCQludW1fZXh0ZW50cyA9IGRpdjY0X3U2NChzaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJCXJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOworCisJCS8qCisJCSAqIGlmIHdlIGJyZWFrIGEgbGFyZ2UgZXh0ZW50IHVwIHRoZW4gbGVhdmUgb3VzdGFuZGluZ19leHRlbnRzCisJCSAqIGJlLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGFjY291bnRlZCBmb3IgdGhlIGxhcmdlIGV4dGVudC4KKwkJICovCisJCWlmIChkaXY2NF91NjQobmV3X3NpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJCSAgICAgIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpIDwgbnVtX2V4dGVudHMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKys7CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBleHRlbnRfaW8uYyBtZXJnZV9leHRlbnRfaG9vaywgdXNlZCB0byB0cmFjayBtZXJnZWQgZGVsYXllZCBhbGxvY2F0aW9uCisgKiBleHRlbnRzIHNvIHdlIGNhbiBrZWVwIHRyYWNrIG9mIG5ldyBleHRlbnRzIHRoYXQgYXJlIGp1c3QgbWVyZ2VkIG9udG8gb2xkCisgKiBleHRlbnRzLCBzdWNoIGFzIHdoZW4gd2UgYXJlIGRvaW5nIHNlcXVlbnRpYWwgd3JpdGVzLCBzbyB3ZSBjYW4gcHJvcGVybHkKKyAqIGFjY291bnQgZm9yIHRoZSBtZXRhZGF0YSBzcGFjZSB3ZSdsbCBuZWVkLgorICovCitzdGF0aWMgaW50IGJ0cmZzX21lcmdlX2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJdTY0IG5ld19zaXplLCBvbGRfc2l6ZTsKKwl1NjQgbnVtX2V4dGVudHM7CisKKwkvKiBub3QgZGVsYWxsb2MsIGlnbm9yZSBpdCAqLworCWlmICghKG90aGVyLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCisJCXJldHVybiAwOworCisJb2xkX3NpemUgPSBvdGhlci0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKwlpZiAobmV3LT5zdGFydCA8IG90aGVyLT5zdGFydCkKKwkJbmV3X3NpemUgPSBvdGhlci0+ZW5kIC0gbmV3LT5zdGFydCArIDE7CisJZWxzZQorCQluZXdfc2l6ZSA9IG5ldy0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKworCS8qIHdlJ3JlIG5vdCBiaWdnZXIgdGhhbiB0aGUgbWF4LCB1bnJlc2VydmUgdGhlIHNwYWNlIGFuZCBnbyAqLworCWlmIChuZXdfc2l6ZSA8PSByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBncmV3IGJ5IGFub3RoZXIgbWF4X2V4dGVudCwganVzdCByZXR1cm4sIHdlIHdhbnQgdG8ga2VlcCB0aGF0CisJICogcmVzZXJ2ZWQgYW1vdW50LgorCSAqLworCW51bV9leHRlbnRzID0gZGl2NjRfdTY0KG9sZF9zaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CisJaWYgKGRpdjY0X3U2NChuZXdfc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkgICAgICByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSA+IG51bV9leHRlbnRzKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGV4dGVudF9pby5jIHNldF9iaXRfaG9vaywgdXNlZCB0byB0cmFjayBkZWxheWVkIGFsbG9jYXRpb24KICAqIGJ5dGVzIGluIHRoaXMgZmlsZSwgYW5kIHRvIG1haW50YWluIHRoZSBsaXN0IG9mIGlub2RlcyB0aGF0CkBAIC0xMTY3LDYgKzEyOTksNyBAQAogc3RhdGljIGludCBidHJmc19zZXRfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKKwogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKQEAgLTExNzQsNiArMTMwNywxMCBAQAogCSAqLwogCWlmICghKG9sZCAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CiAJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisKKwkJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMrKzsKKwkJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOwogCQlidHJmc19kZWxhbGxvY19yZXNlcnZlX3NwYWNlKHJvb3QsIGlub2RlLCBlbmQgLSBzdGFydCArIDEpOwogCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwogCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwpAQCAtMTE5MCwyMiArMTMyNywzMSBAQAogLyoKICAqIGV4dGVudF9pby5jIGNsZWFyX2JpdF9ob29rLCBzZWUgc2V0X2JpdF9ob29rIGZvciB3aHkKICAqLwotc3RhdGljIGludCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKK3N0YXRpYyBpbnQgYnRyZnNfY2xlYXJfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKIAkgKiBiaXQsIHdoaWNoIGlzIG9ubHkgc2V0IG9yIGNsZWFyZWQgd2l0aCBpcnFzIG9uCiAJICovCi0JaWYgKChvbGQgJiBFWFRFTlRfREVMQUxMT0MpICYmIChiaXRzICYgRVhURU5UX0RFTEFMTE9DKSkgeworCWlmICgoc3RhdGUtPnN0YXRlICYgRVhURU5UX0RFTEFMTE9DKSAmJiAoYml0cyAmIEVYVEVOVF9ERUxBTExPQykpIHsKIAkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAorCQlpZiAoYml0cyAmIEVYVEVOVF9ET19BQ0NPVU5USU5HKSB7CisJCQlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwkJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCQl9CisKIAkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKLQkJaWYgKGVuZCAtIHN0YXJ0ICsgMSA+IHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzKSB7CisJCWlmIChzdGF0ZS0+ZW5kIC0gc3RhdGUtPnN0YXJ0ICsgMSA+CisJCSAgICByb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcykgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnMgd2FybmluZzogZGVsYWxsb2MgYWNjb3VudCAiCiAJCQkgICAgICAgIiVsbHUgJWxsdVxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWVuZCAtIHN0YXJ0ICsgMSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgIHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkgICAgICAgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpOwogCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgKHU2NCktMSk7CkBAIC0xMjEzLDkgKzEzNTksMTIgQEAKIAkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJCX0gZWxzZSB7CiAJCQlidHJmc19kZWxhbGxvY19mcmVlX3NwYWNlKHJvb3QsIGlub2RlLAotCQkJCQkJICBlbmQgLSBzdGFydCArIDEpOwotCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gZW5kIC0gc3RhcnQgKyAxOwotCQkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzIC09IGVuZCAtIHN0YXJ0ICsgMTsKKwkJCQkJCSAgc3RhdGUtPmVuZCAtCisJCQkJCQkgIHN0YXRlLT5zdGFydCArIDEpOworCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gc3RhdGUtPmVuZCAtCisJCQkJc3RhdGUtPnN0YXJ0ICsgMTsKKwkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyAtPSBzdGF0ZS0+ZW5kIC0KKwkJCQlzdGF0ZS0+c3RhcnQgKyAxOwogCQl9CiAJCWlmIChCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgPT0gMCAmJgogCQkgICAgIWxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19pbm9kZXMpKSB7CkBAIC0yMzU0LDcgKzI1MDMsMTkgQEAKIAogCXJvb3QgPSBCVFJGU19JKGRpciktPnJvb3Q7CiAKKwkvKgorCSAqIDUgaXRlbXMgZm9yIHVubGluayBpbm9kZQorCSAqIDEgZm9yIG9ycGhhbgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCkBAIC0yMzY5LDYgKzI1MzAsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0NDksNyArMjYxMSwxNiBAQAogCSAgICBpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KKwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWlmICh1bmxpa2VseShpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRU1QVFlfU1VCVk9MX0RJUl9PQkpFQ1RJRCkpIHsKQEAgLTI0NzIsNiArMjY0Myw3IEBACiBvdXQ6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKIAlpZiAocmV0ICYmICFlcnIpCkBAIC0yOTEyLDEyICszMDg0LDIyIEBACiAKIAlpZiAoKG9mZnNldCAmIChibG9ja3NpemUgLSAxKSkgPT0gMCkKIAkJZ290byBvdXQ7CisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVOT01FTTsKIGFnYWluOgogCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOwotCWlmICghcGFnZSkKKwlpZiAoIXBhZ2UpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAkJZ290byBvdXQ7CisJfQogCiAJcGFnZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwogCXBhZ2VfZW5kID0gcGFnZV9zdGFydCArIFBBR0VfQ0FDSEVfU0laRSAtIDE7CkBAIC0yOTUwLDcgKzMxMzIsMTYgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKworCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwlpZiAocmV0KSB7CisJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCXJldCA9IDA7CiAJaWYgKG9mZnNldCAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJa2FkZHIgPSBrbWFwKHBhZ2UpOwpAQCAtMjk2Myw2ICszMTU0LDkgQEAKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJaWYgKHJldCkKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIG91dDoKQEAgLTI5ODEsMTcgKzMxNzUsMTUgQEAKIAl1NjQgbGFzdF9ieXRlOwogCXU2NCBjdXJfb2Zmc2V0OwogCXU2NCBob2xlX3NpemU7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwotCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOwogCQlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGhvbGVfc3RhcnQsCkBAIC0zMDI0LDEyICszMjE2LDE4IEBACiAJCQkJCQkgY3VyX29mZnNldCwgJmhpbnRfYnl0ZSwgMSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOworCisJCQllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwogCQkJZXJyID0gYnRyZnNfaW5zZXJ0X2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQlpbm9kZS0+aV9pbm8sIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKIAkJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBob2xlX3N0YXJ0LAogCQkJCQlsYXN0X2J5dGUgLSAxLCAwKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAkJfQogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQljdXJfb2Zmc2V0ID0gbGFzdF9ieXRlOwpAQCAtMzM1Myw2ICszNTUxLDcgQEAKIAliaS0+Z2VuZXJhdGlvbiA9IDA7CiAJYmktPnNlcXVlbmNlID0gMDsKIAliaS0+bGFzdF90cmFucyA9IDA7CisJYmktPmxhc3Rfc3ViX3RyYW5zID0gMDsKIAliaS0+bG9nZ2VkX3RyYW5zID0gMDsKIAliaS0+ZGVsYWxsb2NfYnl0ZXMgPSAwOwogCWJpLT5yZXNlcnZlZF9ieXRlcyA9IDA7CkBAIC0zNTAzLDEyICszNzAyLDE0IEBACiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CiAKLQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKLQkJcmV0dXJuIDA7CisJaWYgKCFkZW50cnktPmRfaW5vZGUgJiYgIUlTX1JPT1QoZGVudHJ5KSkKKwkJZGVudHJ5ID0gZGVudHJ5LT5kX3BhcmVudDsKIAotCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7Ci0JaWYgKGJ0cmZzX3Jvb3RfcmVmcygmcm9vdC0+cm9vdF9pdGVtKSA9PSAwKQotCQlyZXR1cm4gMTsKKwlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7CisJCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk5MCwxMSArNDE5MSwxOCBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBmb3IgaW5vZGUgaXRlbSBhbmQgcmVmCisJICogMiBmb3IgZGlyIGl0ZW1zCisJICogMSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKQorCQlnb3RvIGZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNDAzMiw2ICs0MjQwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTQwNTIsMTAgKzQyNjEsMTggQEAKIAl1NjQgb2JqZWN0aWQ7CiAJdTY0IGluZGV4ID0gMDsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGZvciBkaXIgaXRlbXMKKwkgKiAxIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gZmFpbDsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CkBAIC00MDk2LDYgKzQzMTMsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDExOCwxMCArNDMzNiwxNiBAQAogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWJ0cmZzX2luY19ubGluayhpbm9kZSk7Ci0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDEgaXRlbSBmb3IgaW5vZGUgcmVmCisJICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKKwlidHJmc19pbmNfbmxpbmsoaW5vZGUpOworCiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CkBAIC00MTQ1LDYgKzQzNjksNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDE2NCwxNyArNDM4OSwyMSBAQAogCXU2NCBpbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBpdGVtcyBmb3IgaW5vZGUgYW5kIHJlZgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqIDEgZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJcmV0dXJuIGVycjsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCi0JaWYgKElTX0VSUih0cmFucykpIHsKLQkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJaWYgKCF0cmFucykgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKIAlpZiAoZXJyKSB7CkBAIC00MjIzLDYgKzQ0NTIsNyBAQAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX29uX2VycikKIAkJaXB1dChpbm9kZSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CkBAIC00Njg0LDcgKzQ5MTQsOCBAQAogCQkgKi8KIAkJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKIAkJCQkgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKLQkJCQkgRVhURU5UX0xPQ0tFRCwgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCQkJCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDAsCisJCQkJIE5VTEwsIEdGUF9OT0ZTKTsKIAkJLyoKIAkJICogd2hvZXZlciBjbGVhcmVkIHRoZSBwcml2YXRlIGJpdCBpcyByZXNwb25zaWJsZQogCQkgKiBmb3IgdGhlIGZpbmlzaF9vcmRlcmVkX2lvCkBAIC00Njk3LDggKzQ5MjgsOCBAQAogCQlsb2NrX2V4dGVudCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCX0KIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAotCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQywKLQkJIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKKwkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKIAlfX2J0cmZzX3JlbGVhc2VwYWdlKHBhZ2UsIEdGUF9OT0ZTKTsKIAogCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7CkBAIC00NzQ3LDYgKzQ5NzgsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IFZNX0ZBVUxUX05PUEFHRTsgLyogbWFrZSB0aGUgVk0gcmV0cnkgdGhlIGZhdWx0ICovCiBhZ2FpbjoKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC00Nzc4LDcgKzUwMTYsMjQgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJLyoKKwkgKiBYWFggLSBwYWdlX21rd3JpdGUgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgcGFnZSBpcyBkaXJ0aWVkLCBldmVuCisJICogaWYgaXQgd2FzIGFscmVhZHkgZGlydHksIHNvIGZvciBzcGFjZSBhY2NvdW50aW5nIHJlYXNvbnMgd2UgbmVlZCB0bworCSAqIGNsZWFyIGFueSBkZWxhbGxvYyBiaXRzIGZvciB0aGUgcmFuZ2Ugd2UgYXJlIGZpeGluZyB0byBzYXZlLiAgVGhlcmUKKwkgKiBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IGZvciBub3cga2VlcCBjb25zaXN0ZW50IHdpdGgKKwkgKiBwcmVwYXJlX3BhZ2VzIGluIHRoZSBub3JtYWwgd3JpdGUgcGF0aC4KKwkgKi8KKwljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAorCQkJICBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfCBFWFRFTlRfRE9fQUNDT1VOVElORywKKwkJCSAgR0ZQX05PRlMpOworCisJcmV0ID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCWlmIChyZXQpIHsKKwkJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlyZXQgPSAwOwogCiAJLyogcGFnZSBpcyB3aG9sbHkgb3IgcGFydGlhbGx5IGluc2lkZSBFT0YgKi8KQEAgLTQ3OTcsMTAgKzUwNTIsMTMgQEAKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24gKyAxOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+bG9nX3RyYW5zaWQ7CisKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBWTV9GQVVMVF9MT0NLRUQ7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00ODIxLDcgKzUwNzksOSBAQAogCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCiAJCXJldHVybjsKIAotCWJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwpAQCAtNDkxNiw3ICs1MTc2LDEyIEBACiAJaWYgKCFlaSkKIAkJcmV0dXJuIE5VTEw7CiAJZWktPmxhc3RfdHJhbnMgPSAwOworCWVpLT5sYXN0X3N1Yl90cmFucyA9IDA7CiAJZWktPmxvZ2dlZF90cmFucyA9IDA7CisJZWktPm91dHN0YW5kaW5nX2V4dGVudHMgPSAwOworCWVpLT5yZXNlcnZlZF9leHRlbnRzID0gMDsKKwllaS0+cm9vdCA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJmVpLT5hY2NvdW50aW5nX2xvY2spOwogCWJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZV9pbml0KCZlaS0+b3JkZXJlZF90cmVlKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfb3JwaGFuKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CkBAIC00OTMyLDYgKzUxOTcsMTQgQEAKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKIAkvKgorCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVyZSB3ZSBjcmVhdGUgYW4gaW5vZGUsIGJ1dCBzb21lYm9keSBlbHNlIGFsc28KKwkgKiBjcmVhdGVkIHRoZSBzYW1lIGlub2RlIGFuZCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIG9uZSB3ZSBhbHJlYWR5CisJICogY3JlYXRlZC4KKwkgKi8KKwlpZiAoIXJvb3QpCisJCWdvdG8gZnJlZTsKKworCS8qCiAJICogTWFrZSBzdXJlIHdlJ3JlIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJlZCBvcGVyYXRpb24KIAkgKiBsaXN0cy4KIAkgKi8KQEAgLTQ5NjYsNiArNTIzOSw3IEBACiAJfQogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CitmcmVlOgogCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKIH0KIApAQCAtNTA3MCw3ICs1MzQ0LDE1IEBACiAJICAgIG5ld19pbm9kZS0+aV9zaXplID4gQlRSRlNfRU1QVFlfRElSX1NJWkUpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIFdlIHdhbnQgdG8gcmVzZXJ2ZSB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSBhbW91bnQgb2YgaXRlbXMuICBTbyBpZgorCSAqIGJvdGggaW5vZGVzIGFyZSBzdWJ2b2xzIGFuZCB3ZSBuZWVkIHRvIHVubGluayB0aGVtIHRoZW4gdGhhdCB3b3VsZAorCSAqIHJlcXVpcmUgNCBpdGVtIG1vZGlmaWNhdGlvbnMsIGJ1dCBpZiB0aGV5IGFyZSBib3RoIG5vcm1hbCBpbm9kZXMgaXQKKwkgKiB3b3VsZCByZXF1aXJlIDUgaXRlbSBtb2RpZmljYXRpb25zLCBzbyB3ZSdsbCBhc3N1bWUgdGhlaXIgbm9ybWFsCisJICogaW5vZGVzLiAgU28gNSAqIDIgaXMgMTAsIHBsdXMgMSBmb3IgdGhlIG5ldyBsaW5rLCBzbyAxMSB0b3RhbCBpdGVtcworCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTUxODUsNiArNTQ2Nyw4IEBACiAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKKworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTI1NiwxMSArNTU0MCwxOCBAQAogCWlmIChuYW1lX2xlbiA+IEJUUkZTX01BWF9JTkxJTkVfREFUQV9TSVpFKHJvb3QpKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGl0ZW1zIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGl0ZW1zIGZvciBkaXIgaXRlbXMKKwkgKiAxIGl0ZW0gZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZhaWw7CisJCXJldHVybiBlcnI7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2ZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNTM0MSw2ICs1NjMyLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogb3V0X2ZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC01MzYyLDYgKzU2NTQsMTEgQEAKIAogCXdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CiAJCWFsbG9jX3NpemUgPSBtaW4obnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKKworCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGFsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOwpAQCAtNTM4MSw2ICs1Njc4LDcgQEAKIAkJbnVtX2J5dGVzIC09IGlucy5vZmZzZXQ7CiAJCWN1cl9vZmZzZXQgKz0gaW5zLm9mZnNldDsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAl9CiBvdXQ6CiAJaWYgKGN1cl9vZmZzZXQgPiBzdGFydCkgewpAQCAtNTU0NCw3ICs1ODQyLDcgQEAKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGJ0cmZzX3JlYWxfcmVhZGRpciwKQEAgLTU1NjYsNiArNTg2NCw4IEBACiAJLnJlYWRwYWdlX2lvX2ZhaWxlZF9ob29rID0gYnRyZnNfaW9fZmFpbGVkX2hvb2ssCiAJLnNldF9iaXRfaG9vayA9IGJ0cmZzX3NldF9iaXRfaG9vaywKIAkuY2xlYXJfYml0X2hvb2sgPSBidHJmc19jbGVhcl9iaXRfaG9vaywKKwkubWVyZ2VfZXh0ZW50X2hvb2sgPSBidHJmc19tZXJnZV9leHRlbnRfaG9vaywKKwkuc3BsaXRfZXh0ZW50X2hvb2sgPSBidHJmc19zcGxpdF9leHRlbnRfaG9vaywKIH07CiAKIC8qCkBAIC01NjMyLDYgKzU5MzIsNiBAQAogCS5yZW1vdmV4YXR0cgk9IGJ0cmZzX3JlbW92ZXhhdHRyLAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IGJ0cmZzX2RlbnRyeV9kZWxldGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggYTg1NzdhNy4uY2RiYjA1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yMzksNyArMjM5LDEzIEBACiAJdTY0IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM0MCw2ICszNDYsOSBAQAogCWVyciA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJaWYgKGVyciAmJiAhcmV0KQogCQlyZXQgPSBlcnI7CisKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU1LDE5ICszNjQsMjcgQEAKIAlpZiAoIXJvb3QtPnJlZl9jb3dzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF91bmxvY2s7CiAKIAlwZW5kaW5nX3NuYXBzaG90ID0ga3phbGxvYyhzaXplb2YoKnBlbmRpbmdfc25hcHNob3QpLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90KSB7CiAJCXJldCA9IC1FTk9NRU07CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJcGVuZGluZ19zbmFwc2hvdC0+bmFtZSA9IGttYWxsb2MobmFtZWxlbiArIDEsIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QtPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJa2ZyZWUocGVuZGluZ19zbmFwc2hvdCk7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJbWVtY3B5KHBlbmRpbmdfc25hcHNob3QtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwpAQCAtODEzLDYgKzgzMCw3IEBACiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyKSB7CisJCXNocmlua19kY2FjaGVfc2Iocm9vdC0+ZnNfaW5mby0+c2IpOwogCQlidHJmc19pbnZhbGlkYXRlX2lub2RlcyhkZXN0KTsKIAkJZF9kZWxldGUoZGVudHJ5KTsKIAl9CkBAIC0xMTA1LDggKzExMjMsMTAgQEAKIAkJCQkJZGF0YW8gKz0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQkJZGF0YWwgLT0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQl9Ci0JCQkJaWYgKGtleS5vZmZzZXQgKyBkYXRhbyArIGRhdGFsID4gb2ZmICsgbGVuKQotCQkJCQlkYXRhbCA9IG9mZiArIGxlbiAtIGtleS5vZmZzZXQgLSBkYXRhbzsKKworCQkJCWlmIChrZXkub2Zmc2V0ICsgZGF0YWwgPiBvZmYgKyBsZW4pCisJCQkJCWRhdGFsID0gb2ZmICsgbGVuIC0ga2V5Lm9mZnNldDsKKwogCQkJCS8qIGRpc2tvID09IDAgbWVhbnMgaXQncyBhIGhvbGUgKi8KIAkJCQlpZiAoIWRpc2tvKQogCQkJCQlkYXRhbyA9IDA7CkBAIC0xMjE1LDE1ICsxMjM1LDE1IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZkZW50cnkoZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCisJcmV0ID0gLUVQRVJNOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKLQkJcmV0ID0gLUVJTlBST0dSRVNTOwogCQlnb3RvIG91dDsKLQl9CisKKwlyZXQgPSAtRUlOUFJPR1JFU1M7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIAlpZiAocmV0KQpAQCAtMTIzMywxMiArMTI1MywxOSBAQAogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMrKzsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAorCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAodHJhbnMpCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRyYW5zOwotCWVsc2UKLQkJcmV0ID0gLUVOT01FTTsKLQkvKnByaW50ayhLRVJOX0lORk8gImJ0cmZzX2lvY3RsX3RyYW5zX3N0YXJ0IG9uICVwXG4iLCBmaWxlKTsqLworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2Ryb3A7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB0cmFuczsKKwlyZXR1cm4gMDsKKworb3V0X2Ryb3A6CisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKKwltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1NCwyNCArMTI4MSwyMCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KGZpbGUpLT5kX2lub2RlOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JaW50IHJldCA9IDA7CiAKIAl0cmFucyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpZiAoIXRyYW5zKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCWlmICghdHJhbnMpCisJCXJldHVybiAtRUlOVkFMOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKKwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogbG9uZyBidHJmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50CmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IGI1ZDZkMjQuLjU3OTliYzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0zMDYsNiArMzA2LDEyIEBACiAJdHJlZS0+bGFzdCA9IE5VTEw7CiAJc2V0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBMRVRFLCAmZW50cnktPmZsYWdzKTsKIAorCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhCVFJGU19JKGlub2RlKS0+cm9vdCwKKwkJCQkJICAgICAgaW5vZGUsIDEpOworCiAJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZW50cnktPnJvb3RfZXh0ZW50X2xpc3QpOwogCkBAIC00NTgsNyArNDY0LDcgQEAKIAkgKiBzdGFydCBJTyBvbiBhbnkgZGlydHkgb25lcyBzbyB0aGUgd2FpdCBkb2Vzbid0IHN0YWxsIHdhaXRpbmcKIAkgKiBmb3IgcGRmbHVzaCB0byBmaW5kIHRoZW0KIAkgKi8KLQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBlbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CiAJaWYgKHdhaXQpIHsKIAkJd2FpdF9ldmVudChlbnRyeS0+d2FpdCwgdGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QTEVURSwKIAkJCQkJCSAmZW50cnktPmZsYWdzKSk7CkBAIC00ODgsMTcgKzQ5NCwxNSBAQAogCS8qIHN0YXJ0IElPIGFjcm9zcyB0aGUgcmFuZ2UgZmlyc3QgdG8gaW5zdGFudGlhdGUgYW55IGRlbGFsbG9jCiAJICogZXh0ZW50cwogCSAqLwotCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kLCBXQl9TWU5DX0FMTCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCk7CiAKIAkvKiBUaGUgY29tcHJlc3Npb24gY29kZSB3aWxsIGxlYXZlIHBhZ2VzIGxvY2tlZCBidXQgcmV0dXJuIGZyb20KIAkgKiB3cml0ZXBhZ2Ugd2l0aG91dCBzZXR0aW5nIHRoZSBwYWdlIHdyaXRlYmFjay4gIFN0YXJ0aW5nIGFnYWluCiAJICogd2l0aCBXQl9TWU5DX0FMTCB3aWxsIGVuZCB1cCB3YWl0aW5nIGZvciB0aGUgSU8gdG8gYWN0dWFsbHkgc3RhcnQuCiAJICovCi0JYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAotCWJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJICAgc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVCwKLQkJCQkJICAgb3JpZ19lbmQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAogCWVuZCA9IG9yaWdfZW5kOwogCWZvdW5kID0gMDsKQEAgLTcxNiw4OSArNzIwLDYgQEAKIH0KIAogCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiBfX2ZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZSAtIHN0YXJ0IHdyaXRlYmFjayBvbiBtYXBwaW5nIGRpcnR5IHBhZ2VzIGluIHJhbmdlCi0gKiBAbWFwcGluZzoJYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKLSAqIEBzdGFydDoJb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBzdGFydHMKLSAqIEBlbmQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2UgZW5kcyAoaW5jbHVzaXZlKQotICogQHN5bmNfbW9kZToJZW5hYmxlIHN5bmNocm9ub3VzIG9wZXJhdGlvbgotICoKLSAqIFN0YXJ0IHdyaXRlYmFjayBhZ2FpbnN0IGFsbCBvZiBhIG1hcHBpbmcncyBkaXJ0eSBwYWdlcyB0aGF0IGxpZQotICogd2l0aGluIHRoZSBieXRlIG9mZnNldHMgPHN0YXJ0LCBlbmQ+IGluY2x1c2l2ZS4KLSAqCi0gKiBJZiBzeW5jX21vZGUgaXMgV0JfU1lOQ19BTEwgdGhlbiB0aGlzIGlzIGEgImRhdGEgaW50ZWdyaXR5IiBvcGVyYXRpb24sIGFzCi0gKiBvcHBvc2VkIHRvIGEgcmVndWxhciBtZW1vcnkgY2xlYW5zaW5nIHdyaXRlYmFjay4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIHRoZXNlIHR3byBvcGVyYXRpb25zIGlzIHRoYXQgaWYgYSBkaXJ0eSBwYWdlL2J1ZmZlciBpcyBlbmNvdW50ZXJlZCwgaXQgbXVzdAotICogYmUgd2FpdGVkIHVwb24sIGFuZCBub3QganVzdCBza2lwcGVkIG92ZXIuCi0gKi8KLWludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCi0JCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKQotewotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgPSBzeW5jX21vZGUsCi0JCS5ucl90b193cml0ZSA9IG1hcHBpbmctPm5ycGFnZXMgKiAyLAotCQkucmFuZ2Vfc3RhcnQgPSBzdGFydCwKLQkJLnJhbmdlX2VuZCA9IGVuZCwKLQl9OwotCXJldHVybiBidHJmc193cml0ZXBhZ2VzKG1hcHBpbmcsICZ3YmMpOwotfQotCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlIC0gd2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlCi0gKiBAbWFwcGluZzoJdGFyZ2V0IGFkZHJlc3Nfc3BhY2UKLSAqIEBzdGFydDoJYmVnaW5uaW5nIHBhZ2UgaW5kZXgKLSAqIEBlbmQ6CWVuZGluZyBwYWdlIGluZGV4Ci0gKgotICogV2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlIGFnYWluc3QgcGFnZXMgaW5kZXhlZCBieSBzdGFydC0+ZW5kCi0gKiBpbmNsdXNpdmUKLSAqLwotaW50IGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKQotewotCXN0cnVjdCBwYWdldmVjIHB2ZWM7Ci0JaW50IG5yX3BhZ2VzOwotCWludCByZXQgPSAwOwotCXBnb2ZmX3QgaW5kZXg7Ci0KLQlpZiAoZW5kIDwgc3RhcnQpCi0JCXJldHVybiAwOwotCi0JcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKLQlpbmRleCA9IHN0YXJ0OwotCXdoaWxlICgoaW5kZXggPD0gZW5kKSAmJgotCQkJKG5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCi0JCQlQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSywKLQkJCW1pbihlbmQgLSBpbmRleCwgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFLTEpICsgMSkpICE9IDApIHsKLQkJdW5zaWduZWQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwotCi0JCQkvKiB1bnRpbCByYWRpeCB0cmVlIGxvb2t1cCBhY2NlcHRzIGVuZF9pbmRleCAqLwotCQkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kKQotCQkJCWNvbnRpbnVlOwotCi0JCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKLQkJCQlyZXQgPSAtRUlPOwotCQl9Ci0JCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCS8qIENoZWNrIGZvciBvdXRzdGFuZGluZyB3cml0ZSBlcnJvcnMgKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VOT1NQQywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVOT1NQQzsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VJTywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVJTzsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBhZGQgYSBnaXZlbiBpbm9kZSB0byB0aGUgbGlzdCBvZiBpbm9kZXMgdGhhdCBtdXN0IGJlIGZ1bGx5IG9uCiAgKiBkaXNrIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGNvbW1pdCBmaW5pc2hlcy4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggOTkzYTdlYS4uZjgyZTg3NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTE1MywxMCArMTUzLDYgQEAKIGludCBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQpOwogaW50IGJ0cmZzX2ZpbmRfb3JkZXJlZF9zdW0oc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG9mZnNldCwgdTY0IGRpc2tfYnl0ZW5yLCB1MzIgKnN1bSk7Ci1pbnQgYnRyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkgICAgICAgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOwotaW50IGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKLQkJCSAgIGxvZmZfdCBlbmQsIGludCBzeW5jX21vZGUpOwogaW50IGJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9jb3dfb25seSk7CiBpbnQgYnRyZnNfcnVuX29yZGVyZWRfb3BlcmF0aW9ucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IHdhaXQpOwogaW50IGJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCAzNjFhZDMyLi5jZmNjOTNjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0zNTE4LDcgKzM1MTgsNyBAQAogCUJVR19PTighcmMtPmJsb2NrX2dyb3VwKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmcmMtPndvcmtlcnMsICJyZWxvY2F0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsIE5VTEwpOwogCiAJcmMtPmV4dGVudF9yb290ID0gZXh0ZW50X3Jvb3Q7CiAJYnRyZnNfcHJlcGFyZV9ibG9ja19ncm91cF9yZWxvY2F0aW9uKGV4dGVudF9yb290LCByYy0+YmxvY2tfZ3JvdXApOwpAQCAtMzcwMSw3ICszNzAxLDcgQEAKIAltYXBwaW5nX3RyZWVfaW5pdCgmcmMtPnJlbG9jX3Jvb3RfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJjLT5yZWxvY19yb290cyk7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZyYy0+d29ya2VycywgInJlbG9jYXRlIiwKLQkJCSAgIHJvb3QtPmZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgcm9vdC0+ZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwgTlVMTCk7CiAJcmMtPmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7CiAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yb290LXRyZWUuYyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCmluZGV4IDkzNTE0MjguLjY3ZmEyZDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAl3cml0ZV9leHRlbnRfYnVmZmVyKGwsIGl0ZW0sIHB0ciwgc2l6ZW9mKCppdGVtKSk7CiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwogb3V0OgotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMzMiw3ICszMzEsNiBAQAogCUJVR19PTihyZWZzICE9IDApOwogCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKIG91dDoKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA2NzAzNTM4Li43NTJhNTQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTY2LDcgKzY2LDggQEAKIAlPcHRfZGVncmFkZWQsIE9wdF9zdWJ2b2wsIE9wdF9kZXZpY2UsIE9wdF9ub2RhdGFzdW0sIE9wdF9ub2RhdGFjb3csCiAJT3B0X21heF9leHRlbnQsIE9wdF9tYXhfaW5saW5lLCBPcHRfYWxsb2Nfc3RhcnQsIE9wdF9ub2JhcnJpZXIsCiAJT3B0X3NzZCwgT3B0X25vc3NkLCBPcHRfc3NkX3NwcmVhZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsCi0JT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZXJyLAorCU9wdF9jb21wcmVzcywgT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwKKwlPcHRfZGlzY2FyZCwgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTg4LDYgKzg5LDcgQEAKIAl7T3B0X25vdHJlZWxvZywgIm5vdHJlZWxvZyJ9LAogCXtPcHRfZmx1c2hvbmNvbW1pdCwgImZsdXNob25jb21taXQifSwKIAl7T3B0X3JhdGlvLCAibWV0YWRhdGFfcmF0aW89JWQifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjU3LDYgKzI1OSw5IEBACiAJCQkJICAgICAgIGluZm8tPm1ldGFkYXRhX3JhdGlvKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9kaXNjYXJkOgorCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIERJU0NBUkQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMzQ0LDcgKzM0OSw5IEBACiAJc2ItPnNfZXhwb3J0X29wID0gJmJ0cmZzX2V4cG9ydF9vcHM7CiAJc2ItPnNfeGF0dHIgPSBidHJmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOworI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKyNlbmRpZgogCiAJdHJlZV9yb290ID0gb3Blbl9jdHJlZShzYiwgZnNfZGV2aWNlcywgKGNoYXIgKilkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggODhmODY2Zi4uYzIwN2U4YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0xNjMsOCArMTYzLDE0IEBACiAJfQogfQogCitlbnVtIGJ0cmZzX3RyYW5zX3R5cGUgeworCVRSQU5TX1NUQVJULAorCVRSQU5TX0pPSU4sCisJVFJBTlNfVVNFUlNQQUNFLAorfTsKKwogc3RhdGljIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnN0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkgICAgIGludCBudW1fYmxvY2tzLCBpbnQgd2FpdCkKKwkJCQkJICAgICBpbnQgbnVtX2Jsb2NrcywgaW50IHR5cGUpCiB7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqaCA9CiAJCWttZW1fY2FjaGVfYWxsb2MoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgR0ZQX05PRlMpOwpAQCAtMTcyLDcgKzE3OCw4IEBACiAKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nICYmCi0JICAgICgod2FpdCA9PSAxICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fCB3YWl0ID09IDIpKQorCSAgICAoKHR5cGUgPT0gVFJBTlNfU1RBUlQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8CisJICAgICB0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkpCiAJCXdhaXRfY3VycmVudF90cmFucyhyb290KTsKIAlyZXQgPSBqb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihyZXQpOwpAQCAtMTg2LDYgKzE5Myw5IEBACiAJaC0+YWxsb2NfZXhjbHVkZV9zdGFydCA9IDA7CiAJaC0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CiAKKwlpZiAoIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyAmJiB0eXBlICE9IFRSQU5TX1VTRVJTUEFDRSkKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gaDsKKwogCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnVzZV9jb3VudCsrOwogCXJlY29yZF9yb290X2luX3RyYW5zKGgsIHJvb3QpOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwpAQCAtMTk1LDE4ICsyMDUsMTggQEAKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDEpOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19TVEFSVCk7CiB9CiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDApOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19KT0lOKTsKIH0KIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCiAJCQkJCQkJIGludCBudW1fYmxvY2tzKQogewotCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyLCBudW1fYmxvY2tzLCAyKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ociwgbnVtX2Jsb2NrcywgVFJBTlNfVVNFUlNQQUNFKTsKIH0KIAogLyogd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgdG8gYmUgZnVsbHkgY29tcGxldGUgKi8KQEAgLTMxNyw2ICszMjcsOSBAQAogCQl3YWtlX3VwKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAltdXRleF91bmxvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJbWVtc2V0KHRyYW5zLCAwLCBzaXplb2YoKnRyYW5zKSk7CiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKIApAQCAtMzM4LDEwICszNTEsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzg4LDYgKzQwMSwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MTgsNiArNDU0LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpAQCAtNzQzLDYgKzc5NSw3IEBACiAJbWVtY3B5KCZwZW5kaW5nLT5yb290X2tleSwgJmtleSwgc2l6ZW9mKGtleSkpOwogZmFpbDoKIAlrZnJlZShuZXdfcm9vdF9pdGVtKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1OSw2ICsxMTEyLDkgQEAKIAogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDY2M2M2NzQuLmQ0ZTNlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtNzksNiArNzksNyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uLT50cmFuc2lkOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5sb2dfdHJhbnNpZDsKIH0KIAogaW50IGJ0cmZzX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTEwNyw1ICsxMDgsOSBAQAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOworaW50IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDc4Mjc4NDEuLjc0MTY2NmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMTM3LDExICsxMzcsMjAgQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaWYgKHJvb3QtPmxvZ19yb290KSB7CisJCWlmICghcm9vdC0+bG9nX3N0YXJ0X3BpZCkgeworCQkJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJCX0gZWxzZSBpZiAocm9vdC0+bG9nX3N0YXJ0X3BpZCAhPSBjdXJyZW50LT5waWQpIHsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gdHJ1ZTsKKwkJfQorCiAJCXJvb3QtPmxvZ19iYXRjaCsrOwogCQlhdG9taWNfaW5jKCZyb290LT5sb2dfd3JpdGVycyk7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQorCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmVlX2xvZ19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF90cmVlKSB7CiAJCXJldCA9IGJ0cmZzX2luaXRfbG9nX3Jvb3RfdHJlZSh0cmFucywgcm9vdC0+ZnNfaW5mbyk7CkBAIC0xOTcxLDYgKzE5ODAsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZyA9IHJvb3QtPmxvZ19yb290OwogCXN0cnVjdCBidHJmc19yb290ICpsb2dfcm9vdF90cmVlID0gcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZTsKKwl1NjQgbG9nX3RyYW5zaWQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAlpbmRleDEgPSByb290LT5sb2dfdHJhbnNpZCAlIDI7CkBAIC0xOTg3LDEwICsxOTk3LDExIEBACiAKIAl3aGlsZSAoMSkgewogCQl1bnNpZ25lZCBsb25nIGJhdGNoID0gcm9vdC0+bG9nX2JhdGNoOwotCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCisJCWlmIChyb290LT5sb2dfbXVsdGlwbGVfcGlkcykgeworCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQl9CiAJCXdhaXRfZm9yX3dyaXRlcih0cmFucywgcm9vdCk7CiAJCWlmIChiYXRjaCA9PSByb290LT5sb2dfYmF0Y2gpCiAJCQlicmVhazsKQEAgLTIwMDMsMTQgKzIwMTQsMTkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOworCS8qIHdlIHN0YXJ0IElPIG9uICBhbGwgdGhlIG1hcmtlZCBleHRlbnRzIGhlcmUsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorCSAqIHdhaXQgZm9yIHRoZW0gdW50aWwgbGF0ZXIuCisJICovCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOwogCiAJYnRyZnNfc2V0X3Jvb3Rfbm9kZSgmbG9nLT5yb290X2l0ZW0sIGxvZy0+bm9kZSk7CiAKIAlyb290LT5sb2dfYmF0Y2ggPSAwOworCWxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CiAJcm9vdC0+bG9nX3RyYW5zaWQrKzsKIAlsb2ctPmxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IDA7CiAJc21wX21iKCk7CiAJLyoKIAkgKiBsb2cgdHJlZSBoYXMgYmVlbiBmbHVzaGVkIHRvIGRpc2ssIG5ldyBtb2RpZmljYXRpb25zIG9mCkBAIC0yMDM2LDYgKzIwNTIsNyBAQAogCiAJaW5kZXgyID0gbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdKSkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCBsb2dfcm9vdF90cmVlLAogCQkJCWxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwpAQCAtMjA1NSw2ICsyMDcyLDcgQEAKIAkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgogCSAqLwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dF93YWtlX2xvZ19yb290OwpAQCAtMjA2Myw2ICsyMDgxLDcgQEAKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2dfcm9vdF90cmVlLAogCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOworCWJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCiAJYnRyZnNfc2V0X3N1cGVyX2xvZ19yb290KCZyb290LT5mc19pbmZvLT5zdXBlcl9mb3JfY29tbWl0LAogCQkJCWxvZ19yb290X3RyZWUtPm5vZGUtPnN0YXJ0KTsKQEAgLTIwODIsOSArMjEwMSwxNCBAQAogCSAqIHRoZSBydW5uaW5nIHRyYW5zYWN0aW9uIG9wZW4sIHNvIGEgZnVsbCBjb21taXQgY2FuJ3QgaG9wCiAJICogaW4gYW5kIGNhdXNlIHByb2JsZW1zIGVpdGhlci4KIAkgKi8KLQl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAyKTsKKwl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAxKTsKIAlyZXQgPSAwOwogCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAocm9vdC0+bGFzdF9sb2dfY29tbWl0IDwgbG9nX3RyYW5zaWQpCisJCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IGxvZ190cmFuc2lkOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwogb3V0X3dha2VfbG9nX3Jvb3Q6CiAJYXRvbWljX3NldCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdLCAwKTsKIAlzbXBfbWIoKTsKQEAgLTI4NTIsNiArMjg3NiwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaW5fbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPD0gcm9vdC0+bGFzdF9sb2dfY29tbWl0KQorCQlyZXQgPSAxOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKIC8qCiAgKiBoZWxwZXIgZnVuY3Rpb24gYXJvdW5kIGJ0cmZzX2xvZ19pbm9kZSB0byBtYWtlIHN1cmUgbmV3bHkgY3JlYXRlZAogICogcGFyZW50IGRpcmVjdG9yaWVzIGFsc28gZW5kIHVwIGluIHRoZSBsb2cuICBBIG1pbmltYWwgaW5vZGUgYW5kIGJhY2tyZWYKQEAgLTI4OTEsNiArMjkzMCwxMSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZW5kX25vX3RyYW5zOwogCisJaWYgKGlub2RlX2luX2xvZyh0cmFucywgaW5vZGUpKSB7CisJCXJldCA9IEJUUkZTX05PX0xPR19TWU5DOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKIAlzdGFydF9sb2dfdHJhbnModHJhbnMsIHJvb3QpOwogCiAJcmV0ID0gYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSwgaW5vZGVfb25seSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5oIGIvZnMvYnRyZnMvdHJlZS1sb2cuaAppbmRleCBkMDljNzYwLi4wNzc2ZWFjIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5oCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKQEAgLTE5LDYgKzE5LDkgQEAKICNpZm5kZWYgX19UUkVFX0xPR18KICNkZWZpbmUgX19UUkVFX0xPR18KIAorLyogcmV0dXJuIHZhbHVlIGZvciBidHJmc19sb2dfZGVudHJ5X3NhZmUgdGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGxvZyBpdCBhdCBhbGwgKi8KKyNkZWZpbmUgQlRSRlNfTk9fTE9HX1NZTkMgMjU2CisKIGludCBidHJmc19zeW5jX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX2ZyZWVfbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggMjNlN2QzNi4uN2VkYTQ4MyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtNDQ2LDggKzQ0NiwxMCBAQAogCQkJZ290byBlcnJvcjsKIAogCQlkZXZpY2UtPm5hbWUgPSBrc3RyZHVwKG9yaWdfZGV2LT5uYW1lLCBHRlBfTk9GUyk7Ci0JCWlmICghZGV2aWNlLT5uYW1lKQorCQlpZiAoIWRldmljZS0+bmFtZSkgeworCQkJa2ZyZWUoZGV2aWNlKTsKIAkJCWdvdG8gZXJyb3I7CisJCX0KIAogCQlkZXZpY2UtPmRldmlkID0gb3JpZ19kZXYtPmRldmlkOwogCQlkZXZpY2UtPndvcmsuZnVuYyA9IHBlbmRpbmdfYmlvc19mbjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3hhdHRyLmMgYi9mcy9idHJmcy94YXR0ci5jCmluZGV4IGE5ZDNiZjQuLmI2ZGQ1OTY3IDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogICogYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBkaXJlY3RseS4KICAqLwogc3RydWN0IHhhdHRyX2hhbmRsZXIgKmJ0cmZzX3hhdHRyX2hhbmRsZXJzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAkmYnRyZnNfeGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyLAogCSZidHJmc194YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDI0YWZkNzQuLjZmYTUzMDIgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC0yODAsNyArMjgwLDcgQEAKIEVYUE9SVF9TWU1CT0woaW52YWxpZGF0ZV9iZGV2KTsKIAogLyoKLSAqIEtpY2sgcGRmbHVzaCB0aGVuIHRyeSB0byBmcmVlIHVwIHNvbWUgWk9ORV9OT1JNQUwgbWVtb3J5LgorICogS2ljayB0aGUgd3JpdGViYWNrIHRocmVhZHMgdGhlbiB0cnkgdG8gZnJlZSB1cCBzb21lIFpPTkVfTk9STUFMIG1lbW9yeS4KICAqLwogc3RhdGljIHZvaWQgZnJlZV9tb3JlX21lbW9yeSh2b2lkKQogewpAQCAtMTcwOSw5ICsxNzA5LDkgQEAKIAkJLyoKIAkJICogSWYgaXQncyBhIGZ1bGx5IG5vbi1ibG9ja2luZyB3cml0ZSBhdHRlbXB0IGFuZCB3ZSBjYW5ub3QKIAkJICogbG9jayB0aGUgYnVmZmVyIHRoZW4gcmVkaXJ0eSB0aGUgcGFnZS4gIE5vdGUgdGhhdCB0aGlzIGNhbgotCQkgKiBwb3RlbnRpYWxseSBjYXVzZSBhIGJ1c3ktd2FpdCBsb29wIGZyb20gcGRmbHVzaCBhbmQga3N3YXBkCi0JCSAqIGFjdGl2aXR5LCBidXQgdGhvc2UgY29kZSBwYXRocyBoYXZlIHRoZWlyIG93biBoaWdoZXItbGV2ZWwKLQkJICogdGhyb3R0bGluZy4KKwkJICogcG90ZW50aWFsbHkgY2F1c2UgYSBidXN5LXdhaXQgbG9vcCBmcm9tIHdyaXRlYmFjayB0aHJlYWRzCisJCSAqIGFuZCBrc3dhcGQgYWN0aXZpdHksIGJ1dCB0aG9zZSBjb2RlIHBhdGhzIGhhdmUgdGhlaXIgb3duCisJCSAqIGhpZ2hlci1sZXZlbCB0aHJvdHRsaW5nLgogCQkgKi8KIAkJaWYgKHdiYy0+c3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSB8fCAhd2JjLT5ub25ibG9ja2luZykgewogCQkJbG9ja19idWZmZXIoYmgpOwpAQCAtMzIwOCw3ICszMjA4LDcgQEAKICAqIHN0aWxsIHJ1bm5pbmcgb2Jzb2xldGUgZmx1c2ggZGFlbW9ucywgc28gd2UgdGVybWluYXRlIHRoZW0gaGVyZS4KICAqCiAgKiBVc2Ugb2YgYmRmbHVzaCgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwuCi0gKiBUaGUgYHBkZmx1c2gnIGtlcm5lbCB0aHJlYWRzIGZ1bGx5IHJlcGxhY2UgYmRmbHVzaCBkYWVtb25zIGFuZCB0aGlzIGNhbGwuCisgKiBUaGUgYGZsdXNoLVgnIGtlcm5lbCB0aHJlYWRzIGZ1bGx5IHJlcGxhY2UgYmRmbHVzaCBkYWVtb25zIGFuZCB0aGlzIGNhbGwuCiAgKi8KIFNZU0NBTExfREVGSU5FMihiZGZsdXNoLCBpbnQsIGZ1bmMsIGxvbmcsIGRhdGEpCiB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggNjk5NGEwZi4uODBmMzUyNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAl0cmlzdGF0ZSAiQ0lGUyBzdXBwb3J0IChhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0sIFNNQkZTIHN1Y2Nlc3NvcikiCiAJZGVwZW5kcyBvbiBJTkVUCiAJc2VsZWN0IE5MUworCXNlbGVjdCBTTE9XX1dPUksKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQogCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA5MGM1YjM5Li45YTVlNGY1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTY0LDkgKzY0LDYgQEAKIHVuc2lnbmVkIGludCBleHRlbmRlZF9zZWN1cml0eSA9IENJRlNTRUNfREVGOwogLyogdW5zaWduZWQgaW50IG50bG12Ml9zdXBwb3J0ID0gMDsgKi8KIHVuc2lnbmVkIGludCBzaWduX0NJRlNfUERVcyA9IDE7Ci1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpvcGxvY2tUaHJlYWQ7IC8qIHJlbW92ZSBzcGFyc2Ugd2FybmluZyAqLwotc3RydWN0IHRhc2tfc3RydWN0ICpvcGxvY2tUaHJlYWQgPSBOVUxMOwotLyogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGRub3RpZnlUaHJlYWQ7IHJlbW92ZSBzcGFyc2Ugd2FybmluZyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNpZnNfc3VwZXJfb3BzOwogdW5zaWduZWQgaW50IENJRlNNYXhCdWZTaXplID0gQ0lGU19NQVhfTVNHU0laRTsKIG1vZHVsZV9wYXJhbShDSUZTTWF4QnVmU2l6ZSwgaW50LCAwKTsKQEAgLTk3Miw4OSArOTY5LDEyIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfb3Bsb2NrX2NhY2hlcCk7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc19vcGxvY2tfdGhyZWFkKHZvaWQgKmR1bW15YXJnKQotewotCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqb3Bsb2NrX2l0ZW07Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlfX3UxNiAgbmV0ZmlkOwotCWludCByYywgd2FpdHJjID0gMDsKLQotCXNldF9mcmVlemFibGUoKTsKLQlkbyB7Ci0JCWlmICh0cnlfdG9fZnJlZXplKCkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQlpZiAobGlzdF9lbXB0eSgmY2lmc19vcGxvY2tfbGlzdCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDM5KkhaKTsKLQkJfSBlbHNlIHsKLQkJCW9wbG9ja19pdGVtID0gbGlzdF9lbnRyeShjaWZzX29wbG9ja19saXN0Lm5leHQsCi0JCQkJCQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnksIHFoZWFkKTsKLQkJCWNGWUkoMSwgKCJmb3VuZCBvcGxvY2sgaXRlbSB0byB3cml0ZSBvdXQiKSk7Ci0JCQlwVGNvbiA9IG9wbG9ja19pdGVtLT50Y29uOwotCQkJaW5vZGUgPSBvcGxvY2tfaXRlbS0+cGlub2RlOwotCQkJbmV0ZmlkID0gb3Bsb2NrX2l0ZW0tPm5ldGZpZDsKLQkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJCURlbGV0ZU9wbG9ja1FFbnRyeShvcGxvY2tfaXRlbSk7Ci0JCQkvKiBjYW4gbm90IGdyYWIgaW5vZGUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKLQkJCQlkZWFkbG9jayB3aGVuIG9wbG9jayByZWNlaXZlZCBvbiBkZWxldGUKLQkJCQlzaW5jZSB2ZnNfdW5saW5rIGhvbGRzIHRoZSBpX211dGV4IGFjcm9zcwotCQkJCXRoZSBjYWxsICovCi0JCQkvKiBtdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ki8KLQkJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCi0JCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsID09IDApCi0JCQkJCWJyZWFrX2xlYXNlKGlub2RlLCBGTU9ERV9SRUFEKTsKLQkJCQllbHNlIGlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkKLQkJCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1dSSVRFKTsKLSNlbmRpZgotCQkJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwotCQkJCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgewotCQkJCQl3YWl0cmMgPSBmaWxlbWFwX2ZkYXRhd2FpdCgKLQkJCQkJCQkgICAgICBpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoaW5vZGUpOwotCQkJCX0KLQkJCQlpZiAocmMgPT0gMCkKLQkJCQkJcmMgPSB3YWl0cmM7Ci0JCQl9IGVsc2UKLQkJCQlyYyA9IDA7Ci0JCQkvKiBtdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsqLwotCQkJaWYgKHJjKQotCQkJCUNJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IHJjOwotCQkJY0ZZSSgxLCAoIk9wbG9jayBmbHVzaCBpbm9kZSAlcCByYyAlZCIsCi0JCQkJaW5vZGUsIHJjKSk7Ci0KLQkJCQkvKiByZWxlYXNpbmcgc3RhbGUgb3Bsb2NrIGFmdGVyIHJlY2VudCByZWNvbm5lY3QKLQkJCQlvZiBzbWIgc2Vzc2lvbiB1c2luZyBhIG5vdyBpbmNvcnJlY3QgZmlsZQotCQkJCWhhbmRsZSBpcyBub3QgYSBkYXRhIGludGVncml0eSBpc3N1ZSBidXQgZG8KLQkJCQlub3QgYm90aGVyIHNlbmRpbmcgYW4gb3Bsb2NrIHJlbGVhc2UgaWYgc2Vzc2lvbgotCQkJCXRvIHNlcnZlciBzdGlsbCBpcyBkaXNjb25uZWN0ZWQgc2luY2Ugb3Bsb2NrCi0JCQkJYWxyZWFkeSByZWxlYXNlZCBieSB0aGUgc2VydmVyIGluIHRoYXQgY2FzZSAqLwotCQkJaWYgKCFwVGNvbi0+bmVlZF9yZWNvbm5lY3QpIHsKLQkJCQlyYyA9IENJRlNTTUJMb2NrKDAsIHBUY29uLCBuZXRmaWQsCi0JCQkJCQkwIC8qIGxlbiAqLyAsIDAgLyogb2Zmc2V0ICovLCAwLAotCQkJCQkJMCwgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLAotCQkJCQkJZmFsc2UgLyogd2FpdCBmbGFnICovKTsKLQkJCQljRllJKDEsICgiT3Bsb2NrIHJlbGVhc2UgcmMgPSAlZCIsIHJjKSk7Ci0JCQl9Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGVfdGltZW91dCgxKTsgIC8qIHlpZWxkIGluIGNhc2UgcSB3ZXJlIGNvcnJ1cHQgKi8KLQkJfQotCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0CiBpbml0X2NpZnModm9pZCkKIHsKIAlpbnQgcmMgPSAwOwogCWNpZnNfcHJvY19pbml0KCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNpZnNfdGNwX3Nlc19saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmY2lmc19vcGxvY2tfbGlzdCk7CiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbERub3RpZnlSZXFMaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJzcF9RKTsKQEAgLTEwODMsNyArMTAwMyw2IEBACiAJcndsb2NrX2luaXQoJkdsb2JhbFNNQlNlc2xvY2spOwogCXJ3bG9ja19pbml0KCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJkdsb2JhbE1pZF9Mb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmY2lmc19vcGxvY2tfbG9jayk7CiAKIAlpZiAoY2lmc19tYXhfcGVuZGluZyA8IDIpIHsKIAkJY2lmc19tYXhfcGVuZGluZyA9IDI7CkBAIC0xMTE4LDE2ICsxMDM3LDEzIEBACiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOwogI2VuZGlmCi0Jb3Bsb2NrVGhyZWFkID0ga3RocmVhZF9ydW4oY2lmc19vcGxvY2tfdGhyZWFkLCBOVUxMLCAiY2lmc29wbG9ja2QiKTsKLQlpZiAoSVNfRVJSKG9wbG9ja1RocmVhZCkpIHsKLQkJcmMgPSBQVFJfRVJSKG9wbG9ja1RocmVhZCk7Ci0JCWNFUlJPUigxLCAoImVycm9yICVkIGNyZWF0ZSBvcGxvY2sgdGhyZWFkIiwgcmMpKTsKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9kZnNfa2V5X3R5cGU7Ci0JfQorCXJjID0gc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcmVzb2x2ZXJfa2V5OwogCiAJcmV0dXJuIDA7CiAKLSBvdXRfdW5yZWdpc3Rlcl9kZnNfa2V5X3R5cGU6Cisgb3V0X3VucmVnaXN0ZXJfcmVzb2x2ZXJfa2V5OgogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAl1bnJlZ2lzdGVyX2tleV90eXBlKCZrZXlfdHlwZV9kbnNfcmVzb2x2ZXIpOwogIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOgpAQCAtMTE2NCw3ICsxMDgwLDYgQEAKIAljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWNpZnNfZGVzdHJveV9taWRzKCk7CiAJY2lmc19kZXN0cm95X3JlcXVlc3RfYnVmcygpOwotCWt0aHJlYWRfc3RvcChvcGxvY2tUaHJlYWQpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAdXMuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA2Y2ZjODFhLi41ZDBmZGUxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogI2luY2x1ZGUgImNpZnNfZnNfc2IuaCIKICNpbmNsdWRlICJjaWZzYWNsLmgiCiAvKgpAQCAtMzQ2LDE0ICszNDcsMTYgQEAKIAkvKiBsb2NrIHNjb3BlIGlkICgwIGlmIG5vbmUpICovCiAJc3RydWN0IGZpbGUgKnBmaWxlOyAvKiBuZWVkZWQgZm9yIHdyaXRlcGFnZSAqLwogCXN0cnVjdCBpbm9kZSAqcElub2RlOyAvKiBuZWVkZWQgZm9yIG9wbG9jayBicmVhayAqLworCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCXN0cnVjdCBtdXRleCBsb2NrX211dGV4OwogCXN0cnVjdCBsaXN0X2hlYWQgbGxpc3Q7IC8qIGxpc3Qgb2YgYnl0ZSByYW5nZSBsb2NrcyB3ZSBoYXZlLiAqLwogCWJvb2wgY2xvc2VQZW5kOjE7CS8qIGZpbGUgaXMgbWFya2VkIHRvIGNsb3NlICovCiAJYm9vbCBpbnZhbGlkSGFuZGxlOjE7CS8qIGZpbGUgY2xvc2VkIHZpYSBzZXNzaW9uIGFiZW5kICovCi0JYm9vbCBtZXNzYWdlTW9kZToxOwkvKiBmb3IgcGlwZXM6IG1lc3NhZ2UgdnMgYnl0ZSBtb2RlICovCisJYm9vbCBvcGxvY2tfYnJlYWtfY2FuY2VsbGVkOjE7CiAJYXRvbWljX3QgY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlzdHJ1Y3QgbXV0ZXggZmhfbXV0ZXg7IC8qIHByZXZlbnRzIHJlb3BlbiByYWNlIGFmdGVyIGRlYWQgc2VzKi8KIAlzdHJ1Y3QgY2lmc19zZWFyY2hfaW5mbyBzcmNoX2luZjsKKwlzdHJ1Y3Qgc2xvd193b3JrIG9wbG9ja19icmVhazsgLyogc2xvd193b3JrIGpvYiBmb3Igb3Bsb2NrIGJyZWFrcyAqLwogfTsKIAogLyogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgZmlsZSBwcml2YXRlIGRhdGEgKi8KQEAgLTM2NSw4ICszNjgsMTAgQEAKIC8qIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2lmc0ZpbGVJbmZvX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzX2ZpbGUpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpZnNfZmlsZS0+Y291bnQpKQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjaWZzX2ZpbGUtPmNvdW50KSkgeworCQlpcHV0KGNpZnNfZmlsZS0+cElub2RlKTsKIAkJa2ZyZWUoY2lmc19maWxlKTsKKwl9CiB9CiAKIC8qCkBAIC0zODIsNyArMzg3LDYgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWU7CS8qIGppZmZpZXMgb2YgbGFzdCB1cGRhdGUvY2hlY2sgb2YgaW5vZGUgKi8KIAlib29sIGNsaWVudENhbkNhY2hlUmVhZDoxOwkvKiByZWFkIG9wbG9jayAqLwogCWJvb2wgY2xpZW50Q2FuQ2FjaGVBbGw6MTsJLyogcmVhZCBhbmQgd3JpdGViZWhpbmQgb3Bsb2NrICovCi0JYm9vbCBvcGxvY2tQZW5kaW5nOjE7CiAJYm9vbCBkZWxldGVfcGVuZGluZzoxOwkJLyogREVMRVRFX09OX0NMT1NFIGlzIHNldCAqLwogCXU2NCAgc2VydmVyX2VvZjsJCS8qIGN1cnJlbnQgZmlsZSBzaXplIG9uIHNlcnZlciAqLwogCXU2NCAgdW5pcXVlaWQ7CQkJLyogc2VydmVyIGlub2RlIG51bWJlciAqLwpAQCAtNTg1LDkgKzU4OSw5IEBACiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX0xBTk1BTgkweDEwMDEwCiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX1BMTlRYVAkweDIwMDIwCiAjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCi0jZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QUYwQUYgLyogYWxsb3dzIHdlYWsgc2VjdXJpdHkgYnV0IGFsc28ga3JiNSAqLworI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweEJGMEJGIC8qIGFsbG93cyB3ZWFrIHNlY3VyaXR5IGJ1dCBhbHNvIGtyYjUgKi8KICNlbHNlCi0jZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QTcwQTcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLworI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweEI3MEI3IC8qIGN1cnJlbnQgZmxhZ3Mgc3VwcG9ydGVkIGlmIHdlYWsgKi8KICNlbmRpZiAvKiBVUENBTEwgKi8KICNlbHNlIC8qIGRvIG5vdCBhbGxvdyB3ZWFrIHB3IGhhc2ggKi8KICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKQEAgLTY2OSwxMiArNjczLDYgQEAKICAqLwogR0xPQkFMX0VYVEVSTiByd2xvY2tfdCBHbG9iYWxTTUJTZXNsb2NrOwogCi0vKiBHbG9iYWwgbGlzdCBvZiBvcGxvY2tzICovCi1HTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgY2lmc19vcGxvY2tfbGlzdDsKLQotLyogUHJvdGVjdHMgdGhlIGNpZnNfb3Bsb2NrX2xpc3QgKi8KLUdMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdCBjaWZzX29wbG9ja19sb2NrOwotCiAvKiBPdXRzdGFuZGluZyBkaXIgbm90aWZ5IHJlcXVlc3RzICovCiBHTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgR2xvYmFsRG5vdGlmeVJlcUxpc3Q7CiAvKiBEaXJOb3RpZnkgcmVzcG9uc2UgcXVldWUgKi8KQEAgLTcyNSwzICs3MjMsNCBAQAogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19taW5fc21hbGw7ICAvKiBtaW4gc2l6ZSBvZiBzbWFsbCBidWYgcG9vbCAqLwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19tYXhfcGVuZGluZzsgLyogTUFYIHJlcXVlc3RzIGF0IG9uY2UgdG8gc2VydmVyKi8KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGNpZnNfb3Bsb2NrX2JyZWFrX29wczsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IGRhOGZiZjUuLjU2NDY3MjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtODYsMTggKzg2LDE3IEBACiAJCQkgICAgIGNvbnN0IGludCBzdGFnZSwKIAkJCSAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKTsKIGV4dGVybiBfX3UxNiBHZXROZXh0TWlkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7Ci1leHRlcm4gc3RydWN0IG9wbG9ja19xX2VudHJ5ICpBbGxvY09wbG9ja1FFbnRyeShzdHJ1Y3QgaW5vZGUgKiwgdTE2LAotCQkJCQkJIHN0cnVjdCBjaWZzVGNvbkluZm8gKik7Ci1leHRlcm4gdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICopOwotZXh0ZXJuIHZvaWQgRGVsZXRlVGNvbk9wbG9ja1FFbnRyaWVzKHN0cnVjdCBjaWZzVGNvbkluZm8gKik7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNpZnNfTlR0aW1lVG9Vbml4KF9fbGU2NCB1dGNfbmFub3NlY29uZHNfc2luY2VfMTYwMSk7CiBleHRlcm4gdTY0IGNpZnNfVW5peFRpbWVUb05UKHN0cnVjdCB0aW1lc3BlYyk7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNudnJ0RG9zVW5peFRtKF9fbGUxNiBsZV9kYXRlLCBfX2xlMTYgbGVfdGltZSwKIAkJCQkgICAgICBpbnQgb2Zmc2V0KTsKIAorZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfbmV3X2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsCisJCQkJX191MTYgZmlsZUhhbmRsZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJc3RydWN0IHZmc21vdW50ICptbnQsIHVuc2lnbmVkIGludCBvZmxhZ3MpOwogZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCi0JCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKLQkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOworCQkJICAgc3RydWN0IHZmc21vdW50ICptbnQsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkJICAgX191MzIgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKTsKIGV4dGVybiB2b2lkIGNpZnNfdW5peF9iYXNpY190b19mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsCiAJCQkJICAgICBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbywKIAkJCQkgICAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwpAQCAtMzg5LDQgKzM4OCw1IEBACiAJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwogZXh0ZXJuIGludCBDSUZTR2V0RXh0QXR0cihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgaW50IG5ldGZpZCwgX191NjQgKnBFeHRBdHRyQml0cywgX191NjQgKnBNYXNrKTsKK2V4dGVybiB2b2lkIGNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMwMWUzMDcuLjk0MTQ0MWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC05NCw2ICs5NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMSwgJnBUY29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJb3Blbl9maWxlID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzRmlsZUluZm8sIHRsaXN0KTsKIAkJb3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlID0gdHJ1ZTsKKwkJb3Blbl9maWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gdHJ1ZTsKIAl9CiAJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkvKiBCQiBBZGQgY2FsbCB0byBpbnZhbGlkYXRlX2lub2RlcyhzYikgZm9yIGFsbCBzdXBlcmJsb2NrcyBtb3VudGVkCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGQ0OTY4MjQuLjYzZWE4M2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xNTc3LDcgKzE1NzcsOCBAQAogCiBvdXRfZXJyOgogCWlmICh0Y3Bfc2VzKSB7Ci0JCWtmcmVlKHRjcF9zZXMtPmhvc3RuYW1lKTsKKwkJaWYgKCFJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKQorCQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOwogCQlpZiAodGNwX3Nlcy0+c3NvY2tldCkKIAkJCXNvY2tfcmVsZWFzZSh0Y3Bfc2VzLT5zc29ja2V0KTsKIAkJa2ZyZWUodGNwX3Nlcyk7CkBAIC0xNjcwLDcgKzE2NzEsNiBAQAogCUNJRlNTTUJURGlzKHhpZCwgdGNvbik7CiAJX0ZyZWVYaWQoeGlkKTsKIAotCURlbGV0ZVRjb25PcGxvY2tRRW50cmllcyh0Y29uKTsKIAl0Y29uSW5mb0ZyZWUodGNvbik7CiAJY2lmc19wdXRfc21iX3NlcyhzZXMpOwogfQpAQCAtMjIyMCwxNiArMjIyMCw4IEBACiAJCSAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCkKIHsKIAlpbnQgcmM7Ci0JX191NjQgaW5vZGVfbnVtOwogCUZJTEVfQUxMX0lORk8gKnBmaWxlX2luZm87CiAKLQlyYyA9IENJRlNHZXRTcnZJbm9kZU51bWJlcih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgJmlub2RlX251bSwKLQkJCQkgICBjaWZzX3NiLT5sb2NhbF9ubHMsCi0JCQkJICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCWlmIChyYyAhPSAtRU9QTk9UU1VQUCkKLQkJcmV0dXJuIHJjOwotCiAJcGZpbGVfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKEZJTEVfQUxMX0lORk8pLCBHRlBfS0VSTkVMKTsKIAlpZiAocGZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IGE2NDI0Y2YuLjYyN2E2MGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgImNpZnNmcy5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgpAQCAtMTI5LDQ0ICsxMzAsNDUgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgdm9pZAotY2lmc19maWxsX2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsIF9fdTE2IGZpbGVIYW5kbGUsCi0JCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBib29sIHdyaXRlX29ubHkpCitzdHJ1Y3QgY2lmc0ZpbGVJbmZvICoKK2NpZnNfbmV3X2ZpbGVpbmZvKHN0cnVjdCBpbm9kZSAqbmV3aW5vZGUsIF9fdTE2IGZpbGVIYW5kbGUsCisJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZnNtb3VudCAqbW50LCB1bnNpZ25lZCBpbnQgb2ZsYWdzKQogewogCWludCBvcGxvY2sgPSAwOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihtbnQtPm1udF9zYik7CiAKIAlwQ2lmc0ZpbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7Ci0KIAlpZiAocENpZnNGaWxlID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIHBDaWZzRmlsZTsKIAogCWlmIChvcGxvY2tFbmFibGVkKQogCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwogCiAJcENpZnNGaWxlLT5uZXRmaWQgPSBmaWxlSGFuZGxlOwogCXBDaWZzRmlsZS0+cGlkID0gY3VycmVudC0+dGdpZDsKLQlwQ2lmc0ZpbGUtPnBJbm9kZSA9IG5ld2lub2RlOworCXBDaWZzRmlsZS0+cElub2RlID0gaWdyYWIobmV3aW5vZGUpOworCXBDaWZzRmlsZS0+bW50ID0gbW50OworCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOwogCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwogCXBDaWZzRmlsZS0+Y2xvc2VQZW5kID0gZmFsc2U7CiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5maF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5sb2NrX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmcENpZnNGaWxlLT5sbGlzdCk7CiAJYXRvbWljX3NldCgmcENpZnNGaWxlLT5jb3VudCwgMSk7CisJc2xvd193b3JrX2luaXQoJnBDaWZzRmlsZS0+b3Bsb2NrX2JyZWFrLCAmY2lmc19vcGxvY2tfYnJlYWtfb3BzKTsKIAotCS8qIHNldCB0aGUgZm9sbG93aW5nIGluIG9wZW4gbm93Ci0JCQlwQ2lmc0ZpbGUtPnBmaWxlID0gZmlsZTsgKi8KIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnRjb24tPm9wZW5GaWxlTGlzdCk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOwogCXBDaWZzSW5vZGUgPSBDSUZTX0kobmV3aW5vZGUpOwogCWlmIChwQ2lmc0lub2RlKSB7CiAJCS8qIGlmIHJlYWRhYmxlIGZpbGUgaW5zdGFuY2UgcHV0IGZpcnN0IGluIGxpc3QqLwotCQlpZiAod3JpdGVfb25seSkKKwkJaWYgKG9mbGFncyAmIEZNT0RFX1JFQUQpCisJCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJCWVsc2UKIAkJCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCiAJCQkJICAgICAgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7Ci0JCWVsc2UKLQkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LCAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKIAogCQlpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX0VYQ0xVU0lWRSkgewogCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSB0cnVlOwpAQCAtMTc2LDE4ICsxNzgsMTggQEAKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOwogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCisJcmV0dXJuIHBDaWZzRmlsZTsKIH0KIAogaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKLQkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAotCQkgICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCkKKwkJICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJICAgIF9fdTMyICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCkKIHsKIAlpbnQgcmM7Ci0JX191MzIgb3Bsb2NrOwotCWJvb2wgd3JpdGVfb25seSA9IGZhbHNlOwogCUZJTEVfVU5JWF9CQVNJQ19JTkZPICpwcmVzcF9kYXRhOwogCV9fdTMyIHBvc2l4X2ZsYWdzID0gMDsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihzYik7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IobW50LT5tbnRfc2IpOwogCXN0cnVjdCBjaWZzX2ZhdHRyIGZhdHRyOwogCiAJY0ZZSSgxLCAoInBvc2l4IG9wZW4gJXMiLCBmdWxsX3BhdGgpKTsKQEAgLTIyMywxMiArMjI1LDkgQEAKIAlpZiAob2ZsYWdzICYgT19ESVJFQ1QpCiAJCXBvc2l4X2ZsYWdzIHw9IFNNQl9PX0RJUkVDVDsKIAotCWlmICghKG9mbGFncyAmIEZNT0RFX1JFQUQpKQotCQl3cml0ZV9vbmx5ID0gdHJ1ZTsKLQogCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAlyYyA9IENJRlNQT1NJWENyZWF0ZSh4aWQsIGNpZnNfc2ItPnRjb24sIHBvc2l4X2ZsYWdzLCBtb2RlLAotCQkJcG5ldGZpZCwgcHJlc3BfZGF0YSwgJm9wbG9jaywgZnVsbF9wYXRoLAorCQkJcG5ldGZpZCwgcHJlc3BfZGF0YSwgcG9wbG9jaywgZnVsbF9wYXRoLAogCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAlpZiAocmMpCkBAIC0yNDQsNyArMjQzLDcgQEAKIAogCS8qIGdldCBuZXcgaW5vZGUgYW5kIHNldCBpdCB1cCAqLwogCWlmICgqcGlub2RlID09IE5VTEwpIHsKLQkJKnBpbm9kZSA9IGNpZnNfaWdldChzYiwgJmZhdHRyKTsKKwkJKnBpbm9kZSA9IGNpZnNfaWdldChtbnQtPm1udF9zYiwgJmZhdHRyKTsKIAkJaWYgKCEqcGlub2RlKSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIHBvc2l4X29wZW5fcmV0OwpAQCAtMjUzLDcgKzI1Miw3IEBACiAJCWNpZnNfZmF0dHJfdG9faW5vZGUoKnBpbm9kZSwgJmZhdHRyKTsKIAl9CiAKLQljaWZzX2ZpbGxfZmlsZWluZm8oKnBpbm9kZSwgKnBuZXRmaWQsIGNpZnNfc2ItPnRjb24sIHdyaXRlX29ubHkpOworCWNpZnNfbmV3X2ZpbGVpbmZvKCpwaW5vZGUsICpwbmV0ZmlkLCBOVUxMLCBtbnQsIG9mbGFncyk7CiAKIHBvc2l4X29wZW5fcmV0OgogCWtmcmVlKHByZXNwX2RhdGEpOwpAQCAtMjgwLDcgKzI3OSw3IEBACiAJaW50IHJjID0gLUVOT0VOVDsKIAlpbnQgeGlkOwogCWludCBjcmVhdGVfb3B0aW9ucyA9IENSRUFURV9OT1RfRElSOwotCWludCBvcGxvY2sgPSAwOworCV9fdTMyIG9wbG9jayA9IDA7CiAJaW50IG9mbGFnczsKIAlib29sIHBvc2l4X2NyZWF0ZSA9IGZhbHNlOwogCS8qCkBAIC0yOTgsNyArMjk3LDYgQEAKIAlGSUxFX0FMTF9JTkZPICpidWYgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqbmV3aW5vZGUgPSBOVUxMOwogCWludCBkaXNwb3NpdGlvbiA9IEZJTEVfT1ZFUldSSVRFX0lGOwotCWJvb2wgd3JpdGVfb25seSA9IGZhbHNlOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKQEAgLTMyMyw3ICszMjEsNyBAQAogCWlmICh0Y29uLT51bml4X2V4dCAmJiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKIAkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgogCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKLQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3aW5vZGUsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdpbm9kZSwgbmQtPnBhdGgubW50LAogCQkJCSAgICAgbW9kZSwgb2ZsYWdzLCAmb3Bsb2NrLCAmZmlsZUhhbmRsZSwgeGlkKTsKIAkJLyogRUlPIGNvdWxkIGluZGljYXRlIHRoYXQgKHBvc2l4IG9wZW4pIG9wZXJhdGlvbiBpcyBub3QKIAkJICAgc3VwcG9ydGVkLCBkZXNwaXRlIHdoYXQgc2VydmVyIGNsYWltZWQgaW4gY2FwYWJpbGl0eQpAQCAtMzUxLDExICszNDksOCBAQAogCQlkZXNpcmVkQWNjZXNzID0gMDsKIAkJaWYgKG9mbGFncyAmIEZNT0RFX1JFQUQpCiAJCQlkZXNpcmVkQWNjZXNzIHw9IEdFTkVSSUNfUkVBRDsgLyogaXMgdGhpcyB0b28gbGl0dGxlPyAqLwotCQlpZiAob2ZsYWdzICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKG9mbGFncyAmIEZNT0RFX1dSSVRFKQogCQkJZGVzaXJlZEFjY2VzcyB8PSBHRU5FUklDX1dSSVRFOwotCQkJaWYgKCEob2ZsYWdzICYgRk1PREVfUkVBRCkpCi0JCQkJd3JpdGVfb25seSA9IHRydWU7Ci0JCX0KIAogCQlpZiAoKG9mbGFncyAmIChPX0NSRUFUIHwgT19FWENMKSkgPT0gKE9fQ1JFQVQgfCBPX0VYQ0wpKQogCQkJZGlzcG9zaXRpb24gPSBGSUxFX0NSRUFURTsKQEAgLTQ3MCw4ICs0NjUsOCBAQAogCQkvKiBta25vZCBjYXNlIC0gZG8gbm90IGxlYXZlIGZpbGUgb3BlbiAqLwogCQlDSUZTU01CQ2xvc2UoeGlkLCB0Y29uLCBmaWxlSGFuZGxlKTsKIAl9IGVsc2UgaWYgKCEocG9zaXhfY3JlYXRlKSAmJiAobmV3aW5vZGUpKSB7Ci0JCQljaWZzX2ZpbGxfZmlsZWluZm8obmV3aW5vZGUsIGZpbGVIYW5kbGUsCi0JCQkJCWNpZnNfc2ItPnRjb24sIHdyaXRlX29ubHkpOworCQkJY2lmc19uZXdfZmlsZWluZm8obmV3aW5vZGUsIGZpbGVIYW5kbGUsIE5VTEwsCisJCQkJCQluZC0+cGF0aC5tbnQsIG9mbGFncyk7CiAJfQogY2lmc19jcmVhdGVfb3V0OgogCWtmcmVlKGJ1Zik7CkBAIC02MTEsNyArNjA2LDcgQEAKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7IC8qIHRvIGdldCBhcm91bmQgc3B1cmlvdXMgZ2NjIHdhcm5pbmcsIHNldCB0byB6ZXJvIGhlcmUgKi8KLQlpbnQgb3Bsb2NrID0gMDsKKwlfX3UzMiBvcGxvY2sgPSAwOwogCV9fdTE2IGZpbGVIYW5kbGUgPSAwOwogCWJvb2wgcG9zaXhfb3BlbiA9IGZhbHNlOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CkBAIC02ODMsOCArNjc4LDcgQEAKIAkJaWYgKCEobmQtPmZsYWdzICYgKExPT0tVUF9QQVJFTlQgfCBMT09LVVBfRElSRUNUT1JZKSkgJiYKIAkJICAgICAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pICYmICFwVGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYKIAkJICAgICAobmQtPmludGVudC5vcGVuLmZsYWdzICYgT19DUkVBVCkpIHsKLQkJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJm5ld0lub2RlLAotCQkJCQlwYXJlbnRfZGlyX2lub2RlLT5pX3NiLAorCQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3SW5vZGUsIG5kLT5wYXRoLm1udCwKIAkJCQkJbmQtPmludGVudC5vcGVuLmNyZWF0ZV9tb2RlLAogCQkJCQluZC0+aW50ZW50Lm9wZW4uZmxhZ3MsICZvcGxvY2ssCiAJCQkJCSZmaWxlSGFuZGxlLCB4aWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBmYTdiZWFjLi40MjkzMzdlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgpAQCAtMzksMjcgKzQwLDYgQEAKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfaW5pdF9wcml2YXRlKAotCXN0cnVjdCBjaWZzRmlsZUluZm8gKnByaXZhdGVfZGF0YSwgc3RydWN0IGlub2RlICppbm9kZSwKLQlzdHJ1Y3QgZmlsZSAqZmlsZSwgX191MTYgbmV0ZmlkKQotewotCW1lbXNldChwcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSk7Ci0JcHJpdmF0ZV9kYXRhLT5uZXRmaWQgPSBuZXRmaWQ7Ci0JcHJpdmF0ZV9kYXRhLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCW11dGV4X2luaXQoJnByaXZhdGVfZGF0YS0+ZmhfbXV0ZXgpOwotCW11dGV4X2luaXQoJnByaXZhdGVfZGF0YS0+bG9ja19tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByaXZhdGVfZGF0YS0+bGxpc3QpOwotCXByaXZhdGVfZGF0YS0+cGZpbGUgPSBmaWxlOyAvKiBuZWVkZWQgZm9yIHdyaXRlcGFnZSAqLwotCXByaXZhdGVfZGF0YS0+cElub2RlID0gaW5vZGU7Ci0JcHJpdmF0ZV9kYXRhLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7Ci0JcHJpdmF0ZV9kYXRhLT5jbG9zZVBlbmQgPSBmYWxzZTsKLQkvKiBJbml0aWFsaXplIHJlZmVyZW5jZSBjb3VudCB0byBvbmUuICBUaGUgcHJpdmF0ZSBkYXRhIGlzCi0JZnJlZWQgb24gdGhlIHJlbGVhc2Ugb2YgdGhlIGxhc3QgcmVmZXJlbmNlICovCi0JYXRvbWljX3NldCgmcHJpdmF0ZV9kYXRhLT5jb3VudCwgMSk7Ci0KLQlyZXR1cm4gcHJpdmF0ZV9kYXRhOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX2NvbnZlcnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQpAQCAtMTIzLDkgKzEwMywxMSBAQAogfQogCiAvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKLQkJCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwgaW50IG9wbG9jaywgdTE2IG5ldGZpZCkKK3N0YXRpYyBpbmxpbmUgaW50CitjaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKKwkJCSAgICAgc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBfX3UzMiBvcGxvY2ssCisJCQkgICAgIHUxNiBuZXRmaWQpCiB7CiAKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKQEAgLTIxOSwxNyArMjAxLDYgQEAKIAlzdHJ1Y3QgdGltZXNwZWMgdGVtcDsKIAlpbnQgcmM7CiAKLQkvKiB3YW50IGhhbmRsZXMgd2UgY2FuIHVzZSB0byByZWFkIHdpdGggZmlyc3QKLQkgICBpbiB0aGUgbGlzdCBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3YWxrIHRoZQotCSAgIGxpc3QgdG8gc2VhcmNoIGZvciBvbmUgaW4gd3JpdGVfYmVnaW4gKi8KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCi0JCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQl9IGVsc2UgewotCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCSAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQl9Ci0Jd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlpZiAocENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKSB7CiAJCS8qIHdlIGhhdmUgdGhlIGlub2RlIG9wZW4gc29tZXdoZXJlIGVsc2UKIAkJICAgbm8gbmVlZCB0byBkaXNjYXJkIGNhY2hlIGRhdGEgKi8KQEAgLTI3OSw3ICsyNTAsOCBAQAogaW50IGNpZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgcmMgPSAtRUFDQ0VTOwotCWludCB4aWQsIG9wbG9jazsKKwlpbnQgeGlkOworCV9fdTMyIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwpAQCAtMzI0LDcgKzI5Niw3IEBACiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewogCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCi0JCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJmlub2RlLCBpbm9kZS0+aV9zYiwKKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGZpbGUtPmZfcGF0aC5tbnQsCiAJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCiAJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CiAJCWlmIChyYyA9PSAwKSB7CkBAIC00MTQsMjQgKzM4NiwxNyBAQAogCQljRllJKDEsICgiY2lmc19vcGVuIHJldHVybmVkIDB4JXgiLCByYykpOwogCQlnb3RvIG91dDsKIAl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0KLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCisJcENpZnNGaWxlID0gY2lmc19uZXdfZmlsZWluZm8oaW5vZGUsIG5ldGZpZCwgZmlsZSwgZmlsZS0+Zl9wYXRoLm1udCwKKwkJCQkJZmlsZS0+Zl9mbGFncyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcENpZnNGaWxlOwogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOwotCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKIAotCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKHBDaWZzSW5vZGUpIHsKLQkJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAotCQkJCQkgICAgcENpZnNGaWxlLCB0Y29uLAotCQkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQl9CisJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLCBwQ2lmc0ZpbGUsIHRjb24sCisJCQkJICAgICZvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwogCiAJaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCkBAIC00NzQsNyArNDM5LDggQEAKIHN0YXRpYyBpbnQgY2lmc19yZW9wZW5fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgYm9vbCBjYW5fZmx1c2gpCiB7CiAJaW50IHJjID0gLUVBQ0NFUzsKLQlpbnQgeGlkLCBvcGxvY2s7CisJaW50IHhpZDsKKwlfX3UzMiBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKQEAgLTU0Myw3ICs1MDksNyBAQAogCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKIAkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLwotCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGZpbGUtPmZfcGF0aC5tbnQsCiAJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCiAJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CiAJCWlmIChyYyA9PSAwKSB7CkBAIC0yMzA4LDYgKzIyNzQsNzMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkCitjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNmaWxlLT5wSW5vZGU7CisJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpbm9kZSA9IENJRlNfSShpbm9kZSk7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoY2ZpbGUtPm1udC0+bW50X3NiKTsKKwlpbnQgcmMsIHdhaXRyYyA9IDA7CisKKwlpZiAoaW5vZGUgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9PSAwKQorCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1JFQUQpOworCQllbHNlIGlmIChjaW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKQorCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1dSSVRFKTsKKyNlbmRpZgorCQlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID09IDApIHsKKwkJCXdhaXRyYyA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOworCQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoaW5vZGUpOworCQl9CisJCWlmICghcmMpCisJCQlyYyA9IHdhaXRyYzsKKwkJaWYgKHJjKQorCQkJY2lub2RlLT53cml0ZV9iZWhpbmRfcmMgPSByYzsKKwkJY0ZZSSgxLCAoIk9wbG9jayBmbHVzaCBpbm9kZSAlcCByYyAlZCIsIGlub2RlLCByYykpOworCX0KKworCS8qCisJICogcmVsZWFzaW5nIHN0YWxlIG9wbG9jayBhZnRlciByZWNlbnQgcmVjb25uZWN0IG9mIHNtYiBzZXNzaW9uIHVzaW5nCisJICogYSBub3cgaW5jb3JyZWN0IGZpbGUgaGFuZGxlIGlzIG5vdCBhIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGJ1dCBkbworCSAqIG5vdCBib3RoZXIgc2VuZGluZyBhbiBvcGxvY2sgcmVsZWFzZSBpZiBzZXNzaW9uIHRvIHNlcnZlciBzdGlsbCBpcworCSAqIGRpc2Nvbm5lY3RlZCBzaW5jZSBvcGxvY2sgYWxyZWFkeSByZWxlYXNlZCBieSB0aGUgc2VydmVyCisJICovCisJaWYgKCFjZmlsZS0+Y2xvc2VQZW5kICYmICFjZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCkgeworCQlyYyA9IENJRlNTTUJMb2NrKDAsIGNpZnNfc2ItPnRjb24sIGNmaWxlLT5uZXRmaWQsIDAsIDAsIDAsIDAsCisJCQkJIExPQ0tJTkdfQU5EWF9PUExPQ0tfUkVMRUFTRSwgZmFsc2UpOworCQljRllJKDEsICgiT3Bsb2NrIHJlbGVhc2UgcmMgPSAlZCIsIHJjKSk7CisJfQorfQorCitzdGF0aWMgaW50CitjaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAorCQkJCQkJICBvcGxvY2tfYnJlYWspOworCW1udGdldChjZmlsZS0+bW50KTsKKwljaWZzRmlsZUluZm9fZ2V0KGNmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2NpZnNfb3Bsb2NrX2JyZWFrX3B1dChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJbW50cHV0KGNmaWxlLT5tbnQpOworCWNpZnNGaWxlSW5mb19wdXQoY2ZpbGUpOworfQorCitjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBjaWZzX29wbG9ja19icmVha19vcHMgPSB7CisJLmdldF9yZWYJPSBjaWZzX29wbG9ja19icmVha19nZXQsCisJLnB1dF9yZWYJPSBjaWZzX29wbG9ja19icmVha19wdXQsCisJLmV4ZWN1dGUJPSBjaWZzX29wbG9ja19icmVhaywKK307CisKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wcyA9IHsKIAkucmVhZHBhZ2UgPSBjaWZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBjaWZzX3JlYWRwYWdlcywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA1ZTI0OTI1Li5jYWJhYmQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC01MTIsMTMgKzUxMiwxMCBAQAogCQkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJCWlmIChyYzEpIHsKKwkJCWlmIChyYzEgfHwgIWZhdHRyLmNmX3VuaXF1ZWlkKSB7CiAJCQkJY0ZZSSgxLCAoIkdldFNydklub2RlTnVtIHJjICVkIiwgcmMxKSk7CiAJCQkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOwotCQkJCS8qIGRpc2FibGUgc2VydmVyaW5vIGlmIGNhbGwgbm90IHN1cHBvcnRlZCAqLwotCQkJCWlmIChyYzEgPT0gLUVJTlZBTCkKLQkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJj0KLQkJCQkJCQl+Q0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJCQljaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhjaWZzX3NiKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaXVuaXF1ZShzYiwgUk9PVF9JKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggZTA3OWE5MS4uZDI3ZDRlYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7CiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDsKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZDsKIAogLyogVGhlIHhpZCBzZXJ2ZXMgYXMgYSB1c2VmdWwgaWRlbnRpZmllciBmb3IgZWFjaCBpbmNvbWluZyB2ZnMgcmVxdWVzdCwKICAgIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIG1pZCB3aGljaCBpcyB1c2VmdWwgdG8gdHJhY2sgZWFjaCBzZW50IHNtYiwKQEAgLTUwMCw2ICs0OTksNyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqbmV0ZmlsZTsKKwlpbnQgcmM7CiAKIAljRllJKDEsICgiQ2hlY2tpbmcgZm9yIG9wbG9jayBicmVhayBvciBkbm90aWZ5IHJlc3BvbnNlIikpOwogCWlmICgocFNNQi0+aGRyLkNvbW1hbmQgPT0gU01CX0NPTV9OVF9UUkFOU0FDVCkgJiYKQEAgLTU2MiwzMCArNTYyLDQwIEBACiAJCQkJY29udGludWU7CiAKIAkJCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fb3Bsb2NrX2Jya3MpOwotCQkJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJbGlzdF9mb3JfZWFjaCh0bXAyLCAmdGNvbi0+b3BlbkZpbGVMaXN0KSB7CiAJCQkJbmV0ZmlsZSA9IGxpc3RfZW50cnkodG1wMiwgc3RydWN0IGNpZnNGaWxlSW5mbywKIAkJCQkJCSAgICAgdGxpc3QpOwogCQkJCWlmIChwU01CLT5GaWQgIT0gbmV0ZmlsZS0+bmV0ZmlkKQogCQkJCQljb250aW51ZTsKIAotCQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKKwkJCQkvKgorCQkJCSAqIGRvbid0IGRvIGFueXRoaW5nIGlmIGZpbGUgaXMgYWJvdXQgdG8gYmUKKwkJCQkgKiBjbG9zZWQgYW55d2F5LgorCQkJCSAqLworCQkJCWlmIChuZXRmaWxlLT5jbG9zZVBlbmQpIHsKKwkJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKIAkJCQljRllJKDEsICgiZmlsZSBpZCBtYXRjaCwgb3Bsb2NrIGJyZWFrIikpOwogCQkJCXBDaWZzSW5vZGUgPSBDSUZTX0kobmV0ZmlsZS0+cElub2RlKTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IGZhbHNlOwogCQkJCWlmIChwU01CLT5PcGxvY2tMZXZlbCA9PSAwKQogCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBmYWxzZTsKLQkJCQlwQ2lmc0lub2RlLT5vcGxvY2tQZW5kaW5nID0gdHJ1ZTsKLQkJCQlBbGxvY09wbG9ja1FFbnRyeShuZXRmaWxlLT5wSW5vZGUsCi0JCQkJCQkgIG5ldGZpbGUtPm5ldGZpZCwgdGNvbik7Ci0JCQkJY0ZZSSgxLCAoImFib3V0IHRvIHdha2UgdXAgb3Bsb2NrIHRocmVhZCIpKTsKLQkJCQlpZiAob3Bsb2NrVGhyZWFkKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3Mob3Bsb2NrVGhyZWFkKTsKLQorCQkJCXJjID0gc2xvd193b3JrX2VucXVldWUoJm5ldGZpbGUtPm9wbG9ja19icmVhayk7CisJCQkJaWYgKHJjKSB7CisJCQkJCWNFUlJPUigxLCAoImZhaWxlZCB0byBlbnF1ZXVlIG9wbG9jayAiCisJCQkJCQkgICAiYnJlYWs6ICVkXG4iLCByYykpOworCQkJCX0gZWxzZSB7CisJCQkJCW5ldGZpbGUtPm9wbG9ja19icmVha19jYW5jZWxsZWQgPSBmYWxzZTsKKwkJCQl9CisJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCXJlYWRfdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCWNGWUkoMSwgKCJObyBtYXRjaGluZyBmaWxlIGZvciBvcGxvY2sgYnJlYWsiKSk7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTcwNSwzICs3MTUsMTcgQEAKIGN0b1VDU19vdXQ6CiAJcmV0dXJuIGk7CiB9CisKK3ZvaWQKK2NpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCit7CisJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkgeworCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmPSB+Q0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJY0VSUk9SKDEsICgiQXV0b2Rpc2FibGluZyB0aGUgdXNlIG9mIHNlcnZlciBpbm9kZSBudW1iZXJzIG9uICIKKwkJCSAgICIlcy4gVGhpcyBzZXJ2ZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlbSAiCisJCQkgICAicHJvcGVybHkuIEhhcmRsaW5rcyB3aWxsIG5vdCBiZSByZWNvZ25pemVkIG9uIHRoaXMgIgorCQkJICAgIm1vdW50LiBDb25zaWRlciBtb3VudGluZyB3aXRoIHRoZSBcIm5vc2VydmVyaW5vXCIgIgorCQkJICAgIm9wdGlvbiB0byBzaWxlbmNlIHRoaXMgbWVzc2FnZS4iLAorCQkJICAgY2lmc19zYi0+dGNvbi0+dHJlZU5hbWUpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IGY4MjNhNGEuLmY4NDA2MmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBjaWZzX2Rpcl9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwgRklMRV9ESVJFQ1RPUllfSU5GTyAqaW5mbywKIAkJICAgICAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCiB7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAljaWZzX2ZpbGxfY29tbW9uX2luZm8oZmF0dHIsIGNpZnNfc2IpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogY2lmc19zdGRfaW5mb190b19mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsIEZJTkRfRklMRV9TVEFOREFSRF9JTkZPICppbmZvLAogCQkgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKIHsKQEAgLTcyNywxMSArNzI3LDEyIEBACiAJCWNpZnNfZGlyX2luZm9fdG9fZmF0dHIoJmZhdHRyLCAoRklMRV9ESVJFQ1RPUllfSU5GTyAqKQogCQkJCQlwZmluZEVudHJ5LCBjaWZzX3NiKTsKIAotCS8qIEZJWE1FOiBtYWtlIF90b19mYXR0ciBmdW5jdGlvbnMgZmlsbCB0aGlzIG91dCAqLwotCWlmIChwQ2lmc0YtPnNyY2hfaW5mLmluZm9fbGV2ZWwgPT0gU01CX0ZJTkRfRklMRV9JRF9GVUxMX0RJUl9JTkZPKQorCWlmIChpbnVtICYmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pKSB7CiAJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaW51bTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOworCQljaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhjaWZzX3NiKTsKKwl9CiAKIAlpbm8gPSBjaWZzX3VuaXF1ZWlkX3RvX2lub190KGZhdHRyLmNmX3VuaXF1ZWlkKTsKIAl0bXBfZGVudHJ5ID0gY2lmc19yZWFkZGlyX2xvb2t1cChmaWxlLT5mX2RlbnRyeSwgJnFzdHJpbmcsICZmYXR0cik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCAxZGE0YWIyLi4wN2I4ZTcxIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTEwMyw1NiArMTAzLDYgQEAKIAltZW1wb29sX2ZyZWUobWlkRW50cnksIGNpZnNfbWlkX3Bvb2xwKTsKIH0KIAotc3RydWN0IG9wbG9ja19xX2VudHJ5ICoKLUFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqcGlub2RlLCBfX3UxNiBmaWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pCi17Ci0Jc3RydWN0IG9wbG9ja19xX2VudHJ5ICp0ZW1wOwotCWlmICgocGlub2RlID09IE5VTEwpIHx8ICh0Y29uID09IE5VTEwpKSB7Ci0JCWNFUlJPUigxLCAoIk51bGwgcGFybXMgcGFzc2VkIHRvIEFsbG9jT3Bsb2NrUUVudHJ5IikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdGVtcCA9IChzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKikga21lbV9jYWNoZV9hbGxvYyhjaWZzX29wbG9ja19jYWNoZXAsCi0JCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRlbXAgPT0gTlVMTCkKLQkJcmV0dXJuIHRlbXA7Ci0JZWxzZSB7Ci0JCXRlbXAtPnBpbm9kZSA9IHBpbm9kZTsKLQkJdGVtcC0+dGNvbiA9IHRjb247Ci0JCXRlbXAtPm5ldGZpZCA9IGZpZDsKLQkJc3Bpbl9sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZjaWZzX29wbG9ja19saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCX0KLQlyZXR1cm4gdGVtcDsKLX0KLQotdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tFbnRyeSkKLXsKLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotICAgIC8qIHNob3VsZCB3ZSBjaGVjayBpZiBsaXN0IGVtcHR5IGZpcnN0PyAqLwotCWxpc3RfZGVsKCZvcGxvY2tFbnRyeS0+cWhlYWQpOwotCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCBvcGxvY2tFbnRyeSk7Ci19Ci0KLQotdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKLXsKLQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKnRlbXA7Ci0KLQlpZiAodGNvbiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJmNpZnNfb3Bsb2NrX2xpc3QsIHFoZWFkKSB7Ci0JCWlmICgodGVtcC0+dGNvbikgJiYgKHRlbXAtPnRjb24gPT0gdGNvbikpIHsKLQkJCWxpc3RfZGVsKCZ0ZW1wLT5xaGVhZCk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCB0ZW1wKTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQKIHNtYl9zZW5kdihzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBrdmVjICppb3YsIGludCBuX3ZlYykKIHsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCAwMzc2YWM2Li5iZTQzOTJjIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggZDU3NmI1NS4uNmMxOTA0MCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTE1MzIsNiArMTUzMiw4IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0OwogCisJY3VycmVudC0+c3RhY2tfc3RhcnQgPSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2s7CisKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCiAJY3VycmVudC0+ZnMtPmluX2V4ZWMgPSAwOwogCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGY5MWZkNTFiLi5kODRlNzA1IDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMTgwMCw3ICsxODAwLDcgQEAKIC8qIGp1c3QgYWNjb3VudCBmb3IgZGlmZmVyZW50IGFsaWdubWVudCAqLwogc3RhdGljIGludCBjb21wYXRfaW9jdGxfcHJlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBzcGFjZV9yZXN2XzMyCV9fdXNlciAqcDMyID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCBzcGFjZV9yZXN2XzMyCV9fdXNlciAqcDMyID0gY29tcGF0X3B0cihhcmcpOwogCXN0cnVjdCBzcGFjZV9yZXN2CV9fdXNlciAqcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcCkpOwogCiAJaWYgKGNvcHlfaW5fdXNlcigmcC0+bF90eXBlLAkmcDMyLT5sX3R5cGUsCXNpemVvZihzMTYpKSB8fApAQCAtMjgwMiw3ICsyODAyLDcgQEAKICNlbHNlCiAJY2FzZSBGU19JT0NfUkVTVlNQOgogCWNhc2UgRlNfSU9DX1JFU1ZTUDY0OgotCQllcnJvciA9IGlvY3RsX3ByZWFsbG9jYXRlKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgY29tcGF0X3B0cihhcmcpKTsKIAkJZ290byBvdXRfZnB1dDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9kbG0vbG93Y29tbXMuYyBiL2ZzL2RsbS9sb3djb21tcy5jCmluZGV4IDI0MGNlZjEuLjcwNzM2ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb3djb21tcy5jCisrKyBiL2ZzL2RsbS9sb3djb21tcy5jCkBAIC0zMTYsNiArMzE2LDEwIEBACiB7CiAJc3RydWN0IGNvbm5lY3Rpb24gKmNvbjsKIAorCS8qIHdpdGggc2N0cCB0aGVyZSdzIG5vIGNvbm5lY3Rpbmcgd2l0aG91dCBzZW5kaW5nICovCisJaWYgKGRsbV9jb25maWcuY2lfcHJvdG9jb2wgIT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAobm9kZWlkID09IGRsbV9vdXJfbm9kZWlkKCkpCiAJCXJldHVybiAwOwogCkBAIC00NTUsOSArNDU5LDkgQEAKIAkJCWludCBwcmltX2xlbiwgcmV0OwogCQkJaW50IGFkZHJfbGVuOwogCQkJc3RydWN0IGNvbm5lY3Rpb24gKm5ld19jb247Ci0JCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAkJCXNjdHBfcGVlbG9mZl9hcmdfdCBwYXJnOwogCQkJaW50IHBhcmdsZW4gPSBzaXplb2YocGFyZyk7CisJCQlpbnQgZXJyOwogCiAJCQkvKgogCQkJICogV2UgZ2V0IHRoaXMgYmVmb3JlIGFueSBkYXRhIGZvciBhbiBhc3NvY2lhdGlvbi4KQEAgLTUxMiwxOSArNTE2LDIyIEBACiAJCQlyZXQgPSBrZXJuZWxfZ2V0c29ja29wdChjb24tPnNvY2ssIElQUFJPVE9fU0NUUCwKIAkJCQkJCVNDVFBfU09DS09QVF9QRUVMT0ZGLAogCQkJCQkJKHZvaWQgKikmcGFyZywgJnBhcmdsZW4pOwotCQkJaWYgKHJldCkgeworCQkJaWYgKHJldCA8IDApIHsKIAkJCQlsb2dfcHJpbnQoIkNhbid0IHBlZWwgb2ZmIGEgc29ja2V0IGZvciAiCi0JCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkXG4iLAorCQkJCQkgICJjb25uZWN0aW9uICVkIHRvIG5vZGUgJWQ6IGVycj0lZCIsCiAJCQkJCSAgcGFyZy5hc3NvY2lkLCBub2RlaWQsIHJldCk7CisJCQkJcmV0dXJuOwogCQkJfQotCQkJZmlsZSA9IGZnZXQocGFyZy5zZCk7Ci0JCQluZXdfY29uLT5zb2NrID0gU09DS0VUX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCQkJbmV3X2Nvbi0+c29jayA9IHNvY2tmZF9sb29rdXAocGFyZy5zZCwgJmVycik7CisJCQlpZiAoIW5ld19jb24tPnNvY2spIHsKKwkJCQlsb2dfcHJpbnQoInNvY2tmZF9sb29rdXAgZXJyb3IgJWQiLCBlcnIpOworCQkJCXJldHVybjsKKwkJCX0KIAkJCWFkZF9zb2NrKG5ld19jb24tPnNvY2ssIG5ld19jb24pOwotCQkJZnB1dChmaWxlKTsKLQkJCXB1dF91bnVzZWRfZmQocGFyZy5zZCk7CisJCQlzb2NrZmRfcHV0KG5ld19jb24tPnNvY2spOwogCi0JCQlsb2dfcHJpbnQoImdvdCBuZXcvcmVzdGFydGVkIGFzc29jaWF0aW9uICVkIG5vZGVpZCAlZCIsCi0JCQkJIChpbnQpc24tPnNuX2Fzc29jX2NoYW5nZS5zYWNfYXNzb2NfaWQsIG5vZGVpZCk7CisJCQlsb2dfcHJpbnQoImNvbm5lY3RpbmcgdG8gJWQgc2N0cCBhc3NvY2lhdGlvbiAlZCIsCisJCQkJIG5vZGVpZCwgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCk7CiAKIAkJCS8qIFNlbmQgYW55IHBlbmRpbmcgd3JpdGVzICovCiAJCQljbGVhcl9iaXQoQ0ZfQ09OTkVDVF9QRU5ESU5HLCAmbmV3X2Nvbi0+ZmxhZ3MpOwpAQCAtODM3LDggKzg0NCw2IEBACiAJaWYgKGNvbi0+cmV0cmllcysrID4gTUFYX0NPTk5FQ1RfUkVUUklFUykKIAkJcmV0dXJuOwogCi0JbG9nX3ByaW50KCJJbml0aWF0aW5nIGFzc29jaWF0aW9uIHdpdGggbm9kZSAlZCIsIGNvbi0+bm9kZWlkKTsKLQogCWlmIChub2RlaWRfdG9fYWRkcihjb24tPm5vZGVpZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZyZW1fYWRkcikpIHsKIAkJbG9nX3ByaW50KCJubyBhZGRyZXNzIGZvciBub2RlaWQgJWQiLCBjb24tPm5vZGVpZCk7CiAJCXJldHVybjsKQEAgLTg1NSwxMSArODYwLDE0IEBACiAJb3V0bWVzc2FnZS5tc2dfZmxhZ3MgPSBNU0dfRU9SOwogCiAJc3Bpbl9sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7Ci0JZSA9IGxpc3RfZW50cnkoY29uLT53cml0ZXF1ZXVlLm5leHQsIHN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5LAotCQkgICAgICAgbGlzdCk7CiAKLQlCVUdfT04oKHN0cnVjdCBsaXN0X2hlYWQgKikgZSA9PSAmY29uLT53cml0ZXF1ZXVlKTsKKwlpZiAobGlzdF9lbXB0eSgmY29uLT53cml0ZXF1ZXVlKSkgeworCQlzcGluX3VubG9jaygmY29uLT53cml0ZXF1ZXVlX2xvY2spOworCQlsb2dfcHJpbnQoIndyaXRlcXVldWUgZW1wdHkgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKKwkJcmV0dXJuOworCX0KIAorCWUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjb24tPndyaXRlcXVldWUsIHN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5LCBsaXN0KTsKIAlsZW4gPSBlLT5sZW47CiAJb2Zmc2V0ID0gZS0+b2Zmc2V0OwogCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9LY29uZmlnIGIvZnMvZWNyeXB0ZnMvS2NvbmZpZwppbmRleCAwYzc1NGU2Li4xY2Q2ZDlkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9LY29uZmlnCisrKyBiL2ZzL2VjcnlwdGZzL0tjb25maWcKQEAgLTEsNiArMSw5IEBACiBjb25maWcgRUNSWVBUX0ZTCiAJdHJpc3RhdGUgImVDcnlwdCBmaWxlc3lzdGVtIGxheWVyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgS0VZUyAmJiBDUllQVE8gJiYgTkVUCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgS0VZUyAmJiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0VDQgorCXNlbGVjdCBDUllQVE9fQ0JDCisJc2VsZWN0IENSWVBUT19NRDUKIAloZWxwCiAJICBFbmNyeXB0ZWQgZmlsZXN5c3RlbSB0aGF0IG9wZXJhdGVzIG9uIHRoZSBWRlMgbGF5ZXIuICBTZWUKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZWNyeXB0ZnMudHh0PiB0byBsZWFybiBtb3JlIGFib3V0CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9jcnlwdG8uYyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCmluZGV4IGI5MTg1MWYuLmZiYjZlNWUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC0yNDUsMTMgKzI0NSwxMSBAQAogCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3J5cHRfc3RhdC0+dGZtKTsKIAlpZiAoY3J5cHRfc3RhdC0+aGFzaF90Zm0pCiAJCWNyeXB0b19mcmVlX2hhc2goY3J5cHRfc3RhdC0+aGFzaF90Zm0pOwotCW11dGV4X2xvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5X3NpZywga2V5X3NpZ190bXAsCiAJCQkJICZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdCwgY3J5cHRfc3RhdF9saXN0KSB7CiAJCWxpc3RfZGVsKCZrZXlfc2lnLT5jcnlwdF9zdGF0X2xpc3QpOwogCQlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfa2V5X3NpZ19jYWNoZSwga2V5X3NpZyk7CiAJfQotCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCW1lbXNldChjcnlwdF9zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQpKTsKIH0KIApAQCAtNTExLDEzICs1MDksMTQgQEAKIAkJCQkgICsgZXh0ZW50X29mZnNldCksIGNyeXB0X3N0YXQpOwogCQlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCBlbmNfZXh0ZW50X3ZpcnQsCiAJCQkJCSAgb2Zmc2V0LCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSk7Ci0JCWlmIChyYykgeworCQlpZiAocmMgPCAwKSB7CiAJCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBhdHRlbXB0aW5nICIKIAkJCQkJInRvIHdyaXRlIGxvd2VyIHBhZ2U7IHJjID0gWyVkXSIKIAkJCQkJIlxuIiwgcmMpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CisJcmMgPSAwOwogb3V0OgogCWlmIChlbmNfZXh0ZW50X3BhZ2UpIHsKIAkJa3VubWFwKGVuY19leHRlbnRfcGFnZSk7CkBAIC02MzMsNyArNjMyLDcgQEAKIAkJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyKGVuY19leHRlbnRfdmlydCwgb2Zmc2V0LAogCQkJCQkgY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUsCiAJCQkJCSBlY3J5cHRmc19pbm9kZSk7Ci0JCWlmIChyYykgeworCQlpZiAocmMgPCAwKSB7CiAJCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBhdHRlbXB0aW5nICIKIAkJCQkJInRvIHJlYWQgbG93ZXIgcGFnZTsgcmMgPSBbJWRdIgogCQkJCQkiXG4iLCByYyk7CkBAIC03OTcsNiArNzk2LDcgQEAKIAlrZnJlZShmdWxsX2FsZ19uYW1lKTsKIAlpZiAoSVNfRVJSKGNyeXB0X3N0YXQtPnRmbSkpIHsKIAkJcmMgPSBQVFJfRVJSKGNyeXB0X3N0YXQtPnRmbSk7CisJCWNyeXB0X3N0YXQtPnRmbSA9IE5VTEw7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgImNyeXB0ZnM6IGluaXRfY3J5cHRfY3R4KCk6ICIKIAkJCQkiRXJyb3IgaW5pdGlhbGl6aW5nIGNpcGhlciBbJXNdXG4iLAogCQkJCWNyeXB0X3N0YXQtPmNpcGhlcik7CkBAIC05MjUsNyArOTI1LDkgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfZ2xvYmFsX2F1dGhfdG9rICpnbG9iYWxfYXV0aF90b2s7CiAJaW50IHJjID0gMDsKIAorCW11dGV4X2xvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKIAltdXRleF9sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdsb2JhbF9hdXRoX3RvaywKIAkJCSAgICAmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3QsCiAJCQkgICAgbW91bnRfY3J5cHRfc3RhdF9saXN0KSB7CkBAIC05MzQsMTMgKzkzNiwxMyBAQAogCQlyYyA9IGVjcnlwdGZzX2FkZF9rZXlzaWcoY3J5cHRfc3RhdCwgZ2xvYmFsX2F1dGhfdG9rLT5zaWcpOwogCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgYWRkaW5nIGtleXNpZzsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JCQltdXRleF91bmxvY2soCi0JCQkJJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3RfbXV0ZXgpOworCiBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMjEyLDE0ICsxMjE0LDE1IEBACiAJCWNyeXB0X3N0YXQtPmV4dGVudF9zaXplID0gRUNSWVBURlNfREVGQVVMVF9FWFRFTlRfU0laRTsKIAlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIoZGF0YSwgMCwgY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUsCiAJCQkJIGVjcnlwdGZzX2lub2RlKTsKLQlpZiAocmMpIHsKKwlpZiAocmMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlYWRpbmcgaGVhZGVyIHJlZ2lvbjsgcmMgPSBbJWRdXG4iLAogCQkgICAgICAgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmICghY29udGFpbnNfZWNyeXB0ZnNfbWFya2VyKGRhdGEgKyBFQ1JZUFRGU19GSUxFX1NJWkVfQllURVMpKSB7CiAJCXJjID0gLUVJTlZBTDsKLQl9CisJfSBlbHNlCisJCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMzE0LDEwICsxMzE3LDExIEBACiAKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSwgdmlydCwKIAkJCQkgIDAsIHZpcnRfbGVuKTsKLQlpZiAocmMpCisJaWYgKHJjIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byB3cml0ZSBoZWFkZXIgIgotCQkgICAgICAgImluZm9ybWF0aW9uIHRvIGxvd2VyIGZpbGU7IHJjID0gWyVkXVxuIiwgX19mdW5jX18sCi0JCSAgICAgICByYyk7CisJCSAgICAgICAiaW5mb3JtYXRpb24gdG8gbG93ZXIgZmlsZTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywgcmMpOworCWVsc2UKKwkJcmMgPSAwOwogCXJldHVybiByYzsKIH0KIApAQCAtMTU5Nyw3ICsxNjAxLDcgQEAKIAl9CiAJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyKHBhZ2VfdmlydCwgMCwgY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUsCiAJCQkJIGVjcnlwdGZzX2lub2RlKTsKLQlpZiAoIXJjKQorCWlmIChyYyA+PSAwKQogCQlyYyA9IGVjcnlwdGZzX3JlYWRfaGVhZGVyc192aXJ0KHBhZ2VfdmlydCwgY3J5cHRfc3RhdCwKIAkJCQkJCWVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJCUVDUllQVEZTX1ZBTElEQVRFX0hFQURFUl9TSVpFKTsKQEAgLTE3MDIsNyArMTcwNiw3IEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gc3VwcG9ydCBmb3IgcmVxdWVzdGVkIGZpbGVuYW1lICIKIAkJICAgICAgICJlbmNyeXB0aW9uIG1ldGhvZCBpbiB0aGlzIHJlbGVhc2VcbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRU5PVFNVUFA7CisJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTE3NjMsNyArMTc2Nyw3IEBACiAJaWYgKElTX0VSUigqa2V5X3RmbSkpIHsKIAkJcmMgPSBQVFJfRVJSKCprZXlfdGZtKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgY3J5cHRvIGNpcGhlciB3aXRoIG5hbWUgIgotCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgY2lwaGVyX25hbWUsIHJjKTsKKwkJICAgICAgICJbJXNdOyByYyA9IFslZF1cbiIsIGZ1bGxfYWxnX25hbWUsIHJjKTsKIAkJZ290byBvdXQ7CiAJfQogCWNyeXB0b19ibGtjaXBoZXJfc2V0X2ZsYWdzKCprZXlfdGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7CkBAIC0xNzc2LDcgKzE3ODAsOCBAQAogCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoKmtleV90Zm0sIGR1bW15X2tleSwgKmtleV9zaXplKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhdHRlbXB0aW5nIHRvIHNldCBrZXkgb2Ygc2l6ZSBbJXpkXSBmb3IgIgotCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsICprZXlfc2l6ZSwgY2lwaGVyX25hbWUsIHJjKTsKKwkJICAgICAgICJjaXBoZXIgWyVzXTsgcmMgPSBbJWRdXG4iLCAqa2V5X3NpemUsIGZ1bGxfYWxnX25hbWUsCisJCSAgICAgICByYyk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjE2Niw3ICsyMTcxLDcgQEAKIAkJCSgqZW5jb2RlZF9uYW1lKVsoKmVuY29kZWRfbmFtZV9zaXplKV0gPSAnXDAnOwogCQkJKCplbmNvZGVkX25hbWVfc2l6ZSkrKzsKIAkJfSBlbHNlIHsKLQkJCXJjID0gLUVOT1RTVVBQOworCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJfQogCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gZW5jb2RlICIKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCmluZGV4IDJmMDk0NWQuLjA1NmZlZDYyIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTQ3Niw2ICs0NzYsNyBAQAogCXN0cnVjdCBpbm9kZSAqbG93ZXJfZGlyX2lub2RlID0gZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoZGlyKTsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5OwogCisJZGdldChsb3dlcl9kZW50cnkpOwogCWxvd2VyX2Rpcl9kZW50cnkgPSBsb2NrX3BhcmVudChsb3dlcl9kZW50cnkpOwogCXJjID0gdmZzX3VubGluayhsb3dlcl9kaXJfaW5vZGUsIGxvd2VyX2RlbnRyeSk7CiAJaWYgKHJjKSB7CkBAIC00ODksNiArNDkwLDcgQEAKIAlkX2Ryb3AoZGVudHJ5KTsKIG91dF91bmxvY2s6CiAJdW5sb2NrX2Rpcihsb3dlcl9kaXJfZGVudHJ5KTsKKwlkcHV0KGxvd2VyX2RlbnRyeSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwppbmRleCAyNTk1MjVjOS4uYTBhNzg0NyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYworKysgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCkBAIC00MTYsNyArNDE2LDkgQEAKIAkJCSAgICAmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3QsCiAJCQkgICAgbW91bnRfY3J5cHRfc3RhdF9saXN0KSB7CiAJCWlmIChtZW1jbXAod2Fsa2VyLT5zaWcsIHNpZywgRUNSWVBURlNfU0lHX1NJWkVfSEVYKSA9PSAwKSB7Ci0JCQkoKmdsb2JhbF9hdXRoX3RvaykgPSB3YWxrZXI7CisJCQlyYyA9IGtleV92YWxpZGF0ZSh3YWxrZXItPmdsb2JhbF9hdXRoX3Rva19rZXkpOworCQkJaWYgKCFyYykKKwkJCQkoKmdsb2JhbF9hdXRoX3RvaykgPSB3YWxrZXI7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTYxMiw3ICs2MTQsMTIgQEAKIAl9CiAJLyogVE9ETzogU3VwcG9ydCBvdGhlciBrZXkgbW9kdWxlcyB0aGFuIHBhc3NwaHJhc2UgZm9yCiAJICogZmlsZW5hbWUgZW5jcnlwdGlvbiAqLwotCUJVR19PTihzLT5hdXRoX3Rvay0+dG9rZW5fdHlwZSAhPSBFQ1JZUFRGU19QQVNTV09SRCk7CisJaWYgKHMtPmF1dGhfdG9rLT50b2tlbl90eXBlICE9IEVDUllQVEZTX1BBU1NXT1JEKSB7CisJCXJjID0gLUVPUE5PVFNVUFA7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaWxlbmFtZSBlbmNyeXB0aW9uIG9ubHkgc3VwcG9ydHMgIgorCQkgICAgICAgInBhc3N3b3JkIHRva2Vuc1xuIiwgX19mdW5jX18pOworCQlnb3RvIG91dF9mcmVlX3VubG9jazsKKwl9CiAJc2dfaW5pdF9vbmUoCiAJCSZzLT5oYXNoX3NnLAogCQkodTggKilzLT5hdXRoX3Rvay0+dG9rZW4ucGFzc3dvcmQuc2Vzc2lvbl9rZXlfZW5jcnlwdGlvbl9rZXksCkBAIC05MTAsNyArOTE3LDEyIEBACiAJfQogCS8qIFRPRE86IFN1cHBvcnQgb3RoZXIga2V5IG1vZHVsZXMgdGhhbiBwYXNzcGhyYXNlIGZvcgogCSAqIGZpbGVuYW1lIGVuY3J5cHRpb24gKi8KLQlCVUdfT04ocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpOworCWlmIChzLT5hdXRoX3Rvay0+dG9rZW5fdHlwZSAhPSBFQ1JZUFRGU19QQVNTV09SRCkgeworCQlyYyA9IC1FT1BOT1RTVVBQOworCQlwcmludGsoS0VSTl9JTkZPICIlczogRmlsZW5hbWUgZW5jcnlwdGlvbiBvbmx5IHN1cHBvcnRzICIKKwkJICAgICAgICJwYXNzd29yZCB0b2tlbnNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZnJlZV91bmxvY2s7CisJfQogCXJjID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoCiAJCXMtPmRlc2MudGZtLAogCQlzLT5hdXRoX3Rvay0+dG9rZW4ucGFzc3dvcmQuc2Vzc2lvbl9rZXlfZW5jcnlwdGlvbl9rZXksCkBAIC0xMzE2LDggKzEzMjgsMTAgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLQllY3J5cHRmc19jaXBoZXJfY29kZV90b19zdHJpbmcoY3J5cHRfc3RhdC0+Y2lwaGVyLAotCQkJCSAgICAgICAodTE2KWRhdGFbKCpwYWNrZXRfc2l6ZSldKTsKKwlyYyA9IGVjcnlwdGZzX2NpcGhlcl9jb2RlX3RvX3N0cmluZyhjcnlwdF9zdGF0LT5jaXBoZXIsCisJCQkJCSAgICAodTE2KWRhdGFbKCpwYWNrZXRfc2l6ZSldKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CiAJLyogQSBsaXR0bGUgZXh0cmEgd29yayB0byBkaWZmZXJlbnRpYXRlIGFtb25nIHRoZSBBRVMga2V5CiAJICogc2l6ZXM7IHNlZSBSRkMyNDQwICovCiAJc3dpdGNoKGRhdGFbKCpwYWNrZXRfc2l6ZSkrK10pIHsKQEAgLTEzMjgsNyArMTM0Miw5IEBACiAJCWNyeXB0X3N0YXQtPmtleV9zaXplID0KIAkJCSgqbmV3X2F1dGhfdG9rKS0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplOwogCX0KLQllY3J5cHRmc19pbml0X2NyeXB0X2N0eChjcnlwdF9zdGF0KTsKKwlyYyA9IGVjcnlwdGZzX2luaXRfY3J5cHRfY3R4KGNyeXB0X3N0YXQpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKIAlpZiAodW5saWtlbHkoZGF0YVsoKnBhY2tldF9zaXplKSsrXSAhPSAweDAzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IFMySyBJRCAzIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWRcbiIpOwogCQlyYyA9IC1FTk9TWVM7CkBAIC0yMzY2LDIxICsyMzgyLDE4IEBACiBpbnQgZWNyeXB0ZnNfYWRkX2tleXNpZyhzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwgY2hhciAqc2lnKQogewogCXN0cnVjdCBlY3J5cHRmc19rZXlfc2lnICpuZXdfa2V5X3NpZzsKLQlpbnQgcmMgPSAwOwogCiAJbmV3X2tleV9zaWcgPSBrbWVtX2NhY2hlX2FsbG9jKGVjcnlwdGZzX2tleV9zaWdfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2tleV9zaWcpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJFcnJvciBhbGxvY2F0aW5nIGZyb20gZWNyeXB0ZnNfa2V5X3NpZ19jYWNoZVxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtY3B5KG5ld19rZXlfc2lnLT5rZXlzaWcsIHNpZywgRUNSWVBURlNfU0lHX1NJWkVfSEVYKTsKLQltdXRleF9sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CisJLyogQ2FsbGVyIG11c3QgaG9sZCBrZXlzaWdfbGlzdF9tdXRleCAqLwogCWxpc3RfYWRkKCZuZXdfa2V5X3NpZy0+Y3J5cHRfc3RhdF9saXN0LCAmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3QpOwotCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwotb3V0OgotCXJldHVybiByYzsKKworCXJldHVybiAwOwogfQogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqZWNyeXB0ZnNfZ2xvYmFsX2F1dGhfdG9rX2NhY2hlOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva3RocmVhZC5jIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCmluZGV4IGM2ZDdhNGQuLmUxNGNmN2UgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYworKysgYi9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKQEAgLTEzNiw2ICsxMzYsNyBAQAogCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfb3Blbl9yZXEgKnJlcTsKKwlpbnQgZmxhZ3MgPSBPX0xBUkdFRklMRTsKIAlpbnQgcmMgPSAwOwogCiAJLyogQ29ycmVzcG9uZGluZyBkcHV0KCkgYW5kIG1udHB1dCgpIGFyZSBkb25lIHdoZW4gdGhlCkBAIC0xNDMsMTAgKzE0NCwxNCBAQAogCSAqIGRlc3Ryb3llZC4gKi8KIAlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbW50Z2V0KGxvd2VyX21udCk7Ci0JKCpsb3dlcl9maWxlKSA9IGRlbnRyeV9vcGVuKGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAotCQkJCSAgICAoT19SRFdSIHwgT19MQVJHRUZJTEUpLCBjcmVkKTsKKwlmbGFncyB8PSBJU19SRE9OTFkobG93ZXJfZGVudHJ5LT5kX2lub2RlKSA/IE9fUkRPTkxZIDogT19SRFdSOworCSgqbG93ZXJfZmlsZSkgPSBkZW50cnlfb3Blbihsb3dlcl9kZW50cnksIGxvd2VyX21udCwgZmxhZ3MsIGNyZWQpOwogCWlmICghSVNfRVJSKCpsb3dlcl9maWxlKSkKIAkJZ290byBvdXQ7CisJaWYgKGZsYWdzICYgT19SRE9OTFkpIHsKKwkJcmMgPSBQVFJfRVJSKCgqbG93ZXJfZmlsZSkpOworCQlnb3RvIG91dDsKKwl9CiAJcmVxID0ga21lbV9jYWNoZV9hbGxvYyhlY3J5cHRmc19vcGVuX3JlcV9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXEpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtMTgwLDIxICsxODUsOCBAQAogCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWlmIChJU19FUlIoKnJlcS0+bG93ZXJfZmlsZSkpIHsKKwlpZiAoSVNfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpKQogCQlyYyA9IFBUUl9FUlIoKnJlcS0+bG93ZXJfZmlsZSk7Ci0JCWRnZXQobG93ZXJfZGVudHJ5KTsKLQkJbW50Z2V0KGxvd2VyX21udCk7Ci0JCSgqbG93ZXJfZmlsZSkgPSBkZW50cnlfb3Blbihsb3dlcl9kZW50cnksIGxvd2VyX21udCwKLQkJCQkJICAgIChPX1JET05MWSB8IE9fTEFSR0VGSUxFKSwgY3JlZCk7Ci0JCWlmIChJU19FUlIoKmxvd2VyX2ZpbGUpKSB7Ci0JCQlyYyA9IFBUUl9FUlIoKnJlcS0+bG93ZXJfZmlsZSk7Ci0JCQkoKmxvd2VyX2ZpbGUpID0gTlVMTDsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHByaXZpbGVnZWQgIgotCQkJICAgICAgICJvcGVuIG9mIGxvd2VyIGZpbGUgd2l0aCBlaXRoZXIgUlcgb3IgUk8gIgotCQkJICAgICAgICJwZXJtczsgcmMgPSBbJWRdLiBHaXZpbmcgdXAuXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCByYyk7Ci0JCX0KLQl9CiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmcmVxLT5tdXgpOwogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggOWYwYWE5OC4uYzZhYzg1ZCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0YWNrLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSAiZWNyeXB0ZnNfa2VybmVsLmgiCiAKIC8qKgpAQCAtMTE4LDYgKzExOSw3IEBACiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9CiAJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgb3BlbmVkX2xvd2VyX2ZpbGUgPSAwOwogCWludCByYyA9IDA7CiAKIAltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKQEAgLTEyOSwxNSArMTMxLDE3IEBACiAJCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnkpOwogCQlyYyA9IGVjcnlwdGZzX3ByaXZpbGVnZWRfb3BlbigmaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwKIAkJCQkJICAgICAgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGNyZWQpOwotCQlpZiAocmMgfHwgSVNfRVJSKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpKSB7CisJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvcGVuaW5nIGxvd2VyIHBlcnNpc3RlbnQgZmlsZSAiCiAJCQkgICAgICAgImZvciBsb3dlcl9kZW50cnkgWzB4JXBdIGFuZCBsb3dlcl9tbnQgWzB4JXBdOyAiCiAJCQkgICAgICAgInJjID0gWyVkXVxuIiwgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIHJjKTsKLQkJCXJjID0gUFRSX0VSUihpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOwotCQl9CisJCX0gZWxzZQorCQkJb3BlbmVkX2xvd2VyX2ZpbGUgPSAxOwogCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOworCWlmIChvcGVuZWRfbG93ZXJfZmlsZSkKKwkJaW1hX2NvdW50c19nZXQoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tbWFwLmMgYi9mcy9lY3J5cHRmcy9tbWFwLmMKaW5kZXggMDU3NzJhZS4uZGY0Y2U5OWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21tYXAuYworKysgYi9mcy9lY3J5cHRmcy9tbWFwLmMKQEAgLTM5Niw5ICszOTYsMTEgQEAKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCBmaWxlX3NpemVfdmlydCwgMCwKIAkJCQkgIHNpemVvZih1NjQpKTsKIAlrZnJlZShmaWxlX3NpemVfdmlydCk7Ci0JaWYgKHJjKQorCWlmIChyYyA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHdyaXRpbmcgZmlsZSBzaXplIHRvIGhlYWRlcjsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwllbHNlCisJCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMgYi9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMKaW5kZXggYTEzN2M2ZS4uMGNjNGZhZiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL2VjcnlwdGZzL3JlYWRfd3JpdGUuYwpAQCAtMzQsMTUgKzM0LDE0IEBACiAgKgogICogV3JpdGUgZGF0YSB0byB0aGUgbG93ZXIgZmlsZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb24gZXJyb3IKKyAqIFJldHVybnMgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzOyBsZXNzIHRoYW4gemVybyBvbiBlcnJvcgogICovCiBpbnQgZWNyeXB0ZnNfd3JpdGVfbG93ZXIoc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSwgY2hhciAqZGF0YSwKIAkJCSBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKLQlzc2l6ZV90IG9jdGV0c193cml0dGVuOwogCW1tX3NlZ21lbnRfdCBmc19zYXZlOwotCWludCByYyA9IDA7CisJc3NpemVfdCByYzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKTsKIAltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKQEAgLTUwLDE0ICs0OSw5IEBACiAJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CiAJZnNfc2F2ZSA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7Ci0Jb2N0ZXRzX3dyaXR0ZW4gPSB2ZnNfd3JpdGUoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwKLQkJCQkgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOworCXJjID0gdmZzX3dyaXRlKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOwogCXNldF9mcyhmc19zYXZlKTsKLQlpZiAob2N0ZXRzX3dyaXR0ZW4gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9jdGV0c193cml0dGVuID0gWyV0ZF07ICIKLQkJICAgICAgICJleHBlY3RlZCBbJXRkXVxuIiwgX19mdW5jX18sIG9jdGV0c193cml0dGVuLCBzaXplKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCW1hcmtfaW5vZGVfZGlydHlfc3luYyhlY3J5cHRmc19pbm9kZSk7CiAJcmV0dXJuIHJjOwpAQCAtOTEsNiArODUsOCBAQAogCQkgICsgb2Zmc2V0X2luX3BhZ2UpOwogCXZpcnQgPSBrbWFwKHBhZ2VfZm9yX2xvd2VyKTsKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCB2aXJ0LCBvZmZzZXQsIHNpemUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfbG93ZXIpOwogCXJldHVybiByYzsKIH0KQEAgLTIyOSwzMCArMjI1LDI0IEBACiAgKiBSZWFkIEBzaXplIGJ5dGVzIG9mIGRhdGEgYXQgYnl0ZSBvZmZzZXQgQG9mZnNldCBmcm9tIHRoZSBsb3dlcgogICogaW5vZGUgaW50byBtZW1vcnkgbG9jYXRpb24gQGRhdGEuCiAgKgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG9uIGVycm9yCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzczsgMCBvbiBFT0Y7IGxlc3MgdGhhbiB6ZXJvIG9uIGVycm9yCiAgKi8KIGludCBlY3J5cHRmc19yZWFkX2xvd2VyKGNoYXIgKmRhdGEsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplLAogCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9CiAJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpOwotCXNzaXplX3Qgb2N0ZXRzX3JlYWQ7CiAJbW1fc2VnbWVudF90IGZzX3NhdmU7Ci0JaW50IHJjID0gMDsKKwlzc2l6ZV90IHJjOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJQlVHX09OKCFpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAlpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3BvcyA9IG9mZnNldDsKIAlmc19zYXZlID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKGdldF9kcygpKTsKLQlvY3RldHNfcmVhZCA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCi0JCQkgICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zKTsKKwlyYyA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3Bvcyk7CiAJc2V0X2ZzKGZzX3NhdmUpOwotCWlmIChvY3RldHNfcmVhZCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb2N0ZXRzX3JlYWQgPSBbJXRkXTsgIgotCQkgICAgICAgImV4cGVjdGVkIFsldGRdXG4iLCBfX2Z1bmNfXywgb2N0ZXRzX3JlYWQsIHNpemUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQogCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjg0LDYgKzI3NCw4IEBACiAJb2Zmc2V0ID0gKCgoKGxvZmZfdClwYWdlX2luZGV4KSA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldF9pbl9wYWdlKTsKIAl2aXJ0ID0ga21hcChwYWdlX2Zvcl9lY3J5cHRmcyk7CiAJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyKHZpcnQsIG9mZnNldCwgc2l6ZSwgZWNyeXB0ZnNfaW5vZGUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfZWNyeXB0ZnMpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfZm9yX2VjcnlwdGZzKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9zdXBlci5jIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwppbmRleCAxMmQ2NDk2Li5iMTVhNDNhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9zdXBlci5jCisrKyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKQEAgLTc3LDcgKzc3LDYgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKLQltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKIAlpZiAoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQogCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7CkBAIC04OSw3ICs4OCw2IEBACiAJCQlkX2Ryb3AobG93ZXJfZGVudHJ5KTsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2lub2RlX2luZm9fY2FjaGUsIGlub2RlX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGQ0OWJlNmIuLmJhMTEyYmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTYyNCwxMCArNjI0LDggQEAKIAkvKiBNb3ZlIHN0YWNrIHBhZ2VzIGRvd24gaW4gbWVtb3J5LiAqLwogCWlmIChzdGFja19zaGlmdCkgewogCQlyZXQgPSBzaGlmdF9hcmdfcGFnZXModm1hLCBzdGFja19zaGlmdCk7Ci0JCWlmIChyZXQpIHsKLQkJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCkBAIC02NDEsNyArNjM5LDcgQEAKIAogb3V0X3VubG9jazoKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZzeW5jLmMgYi9mcy9leHQzL2ZzeW5jLmMKaW5kZXggNDUxZDE2Ni4uODIwOWYyNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9mc3luYy5jCisrKyBiL2ZzL2V4dDMvZnN5bmMuYwpAQCAtNDYsMTkgKzQ2LDIxIEBACiBpbnQgZXh0M19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsOwogCWludCByZXQgPSAwOworCXRpZF90IGNvbW1pdF90aWQ7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAwOwogCiAJSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgotCSAqIGRhdGE9d3JpdGViYWNrOgorCSAqIGRhdGE9d3JpdGViYWNrLG9yZGVyZWQ6CiAJICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS4KLQkgKiAgc3luY19pbm9kZSgpIHdpbGwgc3luYyB0aGUgbWV0YWRhdGEKLQkgKgotCSAqIGRhdGE9b3JkZXJlZDoKLQkgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpIHdpbGwgd3JpdGUgdGhlIGRhdGEgYW5kCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHdyaXRlIHRoZSBpbm9kZSBpZiBpdCBpcyBkaXJ0eS4gIFRoZW4gdGhlIGNhbGxlcidzCi0JICogIGZpbGVtYXBfZmRhdGF3YWl0KCkgd2lsbCB3YWl0IG9uIHRoZSBwYWdlcy4KKwkgKiAgTWV0YWRhdGEgaXMgaW4gdGhlIGpvdXJuYWwsIHdlIHdhaXQgZm9yIGEgcHJvcGVyIHRyYW5zYWN0aW9uCisJICogIHRvIGNvbW1pdCBoZXJlLgogCSAqCiAJICogZGF0YT1qb3VybmFsOgogCSAqICBmaWxlbWFwX2ZkYXRhd3JpdGUgd29uJ3QgZG8gYW55dGhpbmcgKHRoZSBidWZmZXJzIGFyZSBjbGVhbikuCkBAIC03MywyMiArNzUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRhdGFzeW5jICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBmbHVzaDsKKwlpZiAoZGF0YXN5bmMpCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfZGF0YXN5bmNfdGlkKTsKKwllbHNlCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfc3luY190aWQpOwogCi0JLyoKLQkgKiBUaGUgVkZTIGhhcyB3cml0dGVuIHRoZSBmaWxlIGRhdGEuICBJZiB0aGUgaW5vZGUgaXMgdW5hbHRlcmVkCi0JICogdGhlbiB3ZSBuZWVkIG5vdCBzdGFydCBhIGNvbW1pdC4KLQkgKi8KLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWV9TWU5DfElfRElSVFlfREFUQVNZTkMpKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCQkubnJfdG9fd3JpdGUgPSAwLCAvKiBzeXNfZnN5bmMgZGlkIHRoaXMgKi8KLQkJfTsKLQkJcmV0ID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJaWYgKGxvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCkpIHsKKwkJbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwogCQlnb3RvIG91dDsKIAl9Ci1mbHVzaDoKKwogCS8qCiAJICogSW4gY2FzZSB3ZSBkaWRuJ3QgY29tbWl0IGEgdHJhbnNhY3Rpb24sIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBkaXNrIGNhY2hlcyBtYW51YWxseSBzbyB0aGF0IGRhdGEgcmVhbGx5IGlzIG9uIHBlcnNpc3RlbnQKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhY2YxYjE0Li4zNTRlZDNiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC02OTksOCArNjk5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0M19ibG9ja19hbGxvY19pbmZvICpibG9ja19pOwogCWV4dDNfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAotCWJsb2NrX2kgPSBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CisJYmxvY2tfaSA9IGVpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAJLyoKIAkgKiBJZiB3ZSdyZSBzcGxpY2luZyBpbnRvIGEgW3RkXWluZGlyZWN0IGJsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQogCSAqIGlub2RlKSB0aGVuIHdlIG5lZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgW3RkXWluZGlyZWN0IGJsb2NrCkBAIC03NDEsNiArNzQyLDggQEAKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJLyogZXh0M19tYXJrX2lub2RlX2RpcnR5IGFscmVhZHkgdXBkYXRlZCBpX3N5bmNfdGlkICovCisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIAogCS8qIGhhZCB3ZSBzcGxpY2VkIGl0IG9udG8gaW5kaXJlY3QgYmxvY2s/ICovCiAJaWYgKHdoZXJlLT5iaCkgewpAQCAtMTczNSw2ICsxNzM4LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0xNzU3LDkgKzE3NjEsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDNfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTI3NTAsNiArMjc1Nyw4IEBACiAJc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqZWk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CisJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJbG9uZyByZXQ7CiAJaW50IGJsb2NrOwogCkBAIC0yODI3LDYgKzI4MzYsMzAgQEAKIAkJZWktPmlfZGF0YVtibG9ja10gPSByYXdfaW5vZGUtPmlfYmxvY2tbYmxvY2tdOwogCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOwogCisJLyoKKwkgKiBTZXQgdHJhbnNhY3Rpb24gaWQncyBvZiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGNvbW1pdHRlZAorCSAqIHRvIGZpbmlzaCBmW2RhdGFdc3luYy4gV2Ugc2V0IHRoZW0gdG8gY3VycmVudGx5IHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBhcyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBpbm9kZSBvciBzb21lIG9mIGl0cyBtZXRhZGF0YSBpc24ndAorCSAqIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIC0gdGhlIGlub2RlIGNvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYW5kCisJICogbm93IGl0IGlzIHJlcmVhZCBmcm9tIGRpc2suCisJICovCisJaWYgKGpvdXJuYWwpIHsKKwkJdGlkX3QgdGlkOworCisJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikKKwkJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOworCQllbHNlCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKwkJaWYgKHRyYW5zYWN0aW9uKQorCQkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQllbHNlCisJCQl0aWQgPSBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZTsKKwkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCB0aWQpOworCQlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIHRpZCk7CisJfQorCiAJaWYgKGlub2RlLT5pX2lubyA+PSBFWFQzX0ZJUlNUX0lOTyhpbm9kZS0+aV9zYikgKyAxICYmCiAJICAgIEVYVDNfSU5PREVfU0laRShpbm9kZS0+aV9zYikgPiBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKIAkJLyoKQEAgLTMwMTEsNiArMzA0NCw3IEBACiAJCWVyciA9IHJjOwogCWVpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKIAorCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIG91dF9icmVsc2U6CiAJYnJlbHNlIChiaCk7CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNzI3NDNkMy4uNDI3NDk2YyAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNDY2LDYgKzQ2Niw4IEBACiAJCXJldHVybiBOVUxMOwogCWVpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOwogCWVpLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIDApOworCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCAwKTsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTIzMjEsNyArMjMyMywxOCBAQAogCiAJaWYgKCFzYmgpCiAJCXJldHVybiBlcnJvcjsKLQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCS8qCisJICogSWYgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LCBkb24ndCB1cGRhdGUgdGhlCisJICogc3VwZXJibG9jayB3cml0ZSB0aW1lLiAgVGhpcyBhdm9pZHMgdXBkYXRpbmcgdGhlIHN1cGVyYmxvY2sKKwkgKiB3cml0ZSB0aW1lIHdoZW4gd2UgYXJlIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtCisJICogcmVhZC9vbmx5IGJ1dCB3ZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbDsgYXQgdGhhdCBwb2ludCwKKwkgKiBmb3IgcGVvcGxlIHdobyBhcmUgZWFzdCBvZiBHTVQgYW5kIHdobyBtYWtlIHRoZWlyIGNsb2NrCisJICogdGljayBpbiBsb2NhbHRpbWUgZm9yIFdpbmRvd3MgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSwKKwkgKiB0aGUgY2xvY2sgaXMgc2V0IGluIHRoZSBmdXR1cmUsIGFuZCB0aGlzIHdpbGwgY2F1c2UgZTJmc2NrCisJICogdG8gY29tcGxhaW4gYW5kIGZvcmNlIGEgZnVsbCBmaWxlIHN5c3RlbSBjaGVjay4KKwkgKi8KKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCWVzLT5zX3d0aW1lID0gY3B1X3RvX2xlMzIoZ2V0X3NlY29uZHMoKSk7CiAJZXMtPnNfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfYmxvY2tzKHNiKSk7CiAJZXMtPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfaW5vZGVzKHNiKSk7CiAJQlVGRkVSX1RSQUNFKHNiaCwgIm1hcmtpbmcgZGlydHkiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCBkNWMwZWEyLi45ZjJkNDVkIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0yNiwyMCArMjYsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9vc2UgWSBoZXJlLiAgIFRoaXMgZmVhdHVyZSB3aWxsIGdvIGF3YXkgYnkgMi42LjMxLCBzbwotCSAgcGxlYXNlIGFycmFuZ2UgdG8gZ2V0IHlvdXIgdXNlcnNwYWNlIHByb2dyYW1zIGZpeGVkIQotCiBjb25maWcgRVhUNF9GU19YQVRUUgogCWJvb2wgIkV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcyIKIAlkZXBlbmRzIG9uIEVYVDRfRlMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggZTIyN2VlYS4uODgyNTUxNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTY1LDYgKzY1LDEyIEBACiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIGdyb3VwIG51bWJlciAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZXh0NF9ncm91cF90OwogCisvKgorICogRmxhZ3MgdXNlZCBpbiBtYmFsbG9jJ3MgYWxsb2NhdGlvbl9jb250ZXh0IGZsYWdzIGZpZWxkLiAgCisgKgorICogQWxzbyB1c2VkIHRvIHNob3cgd2hhdCdzIGdvaW5nIG9uIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiB0aGUKKyAqIGZsYWcgZmllbGQgaXMgZXhwb3J0ZWQgdmlhIHRoZSB0cmFjZXBvcnQgaW50ZXJmYWNlCisgKi8KIAogLyogcHJlZmVyIGdvYWwgYWdhaW4uIGxlbmd0aCAqLwogI2RlZmluZSBFWFQ0X01CX0hJTlRfTUVSR0UJCTB4MDAwMQpAQCAtMTI3LDYgKzEzMywxNiBAQAogCWludCBwYWdlc193cml0dGVuOwogCWludCByZXR2YWw7CiB9OworI2RlZmluZQlESU9fQUlPX1VOV1JJVFRFTgkweDEKK3R5cGVkZWYgc3RydWN0IGV4dDRfaW9fZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBwZXItZmlsZSBmaW5pc2hlZCBBSU8gbGlzdCAqLworCXN0cnVjdCBpbm9kZQkJKmlub2RlOwkJLyogZmlsZSBiZWluZyB3cml0dGVuIHRvICovCisJdW5zaWduZWQgaW50CQlmbGFnOwkJLyogdW53cml0dGVuIG9yIG5vdCAqLworCWludAkJCWVycm9yOwkJLyogSS9PIGVycm9yIGNvZGUgKi8KKwlleHQ0X2xibGtfdAkJb2Zmc2V0OwkJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCisJc2l6ZV90CQkJc2l6ZTsJCS8qIHNpemUgb2YgdGhlIGV4dGVudCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwkJLyogZGF0YSB3b3JrIHF1ZXVlICovCit9IGV4dDRfaW9fZW5kX3Q7CiAKIC8qCiAgKiBTcGVjaWFsIGlub2RlcyBudW1iZXJzCkBAIC0zMDYsNiArMzIyLDcgQEAKICNkZWZpbmUgRVhUNF9TVEFURV9OT19FWFBBTkQJCTB4MDAwMDAwMDggLyogTm8gc3BhY2UgZm9yIGV4cGFuc2lvbiAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFCTB4MDAwMDAwMTAgLyogQWxsb2MgREEgYmxrcyBvbiBjbG9zZSAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFCQkweDAwMDAwMDIwIC8qIElub2RlIGlzIG1pZ3JhdGluZyAqLworI2RlZmluZSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4JMHgwMDAwMDA0MCAvKiBuZWVkIGNvbnZlcnQgb24gZGlvIGRvbmUqLwogCiAvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCiBzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgewpAQCAtMzQ3LDcgKzM2NCwxNiBAQAogCS8qIENhbGwgZXh0NF9kYV91cGRhdGVfcmVzZXJ2ZV9zcGFjZSgpIGFmdGVyIHN1Y2Nlc3NmdWxseSAKIAkgICBhbGxvY2F0aW5nIHRoZSBibG9ja3MgKi8KICNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX1VQREFURV9SRVNFUlZFX1NQQUNFCTB4MDAwOAotCisJLyogY2FsbGVyIGlzIGZyb20gdGhlIGRpcmVjdCBJTyBwYXRoLCByZXF1ZXN0IHRvIGNyZWF0aW9uIG9mIGFuCisJdW5pdGlhbGl6ZWQgZXh0ZW50cyBpZiBub3QgYWxsb2NhdGVkLCBzcGxpdCB0aGUgdW5pbml0aWFsaXplZAorCWV4dGVudCBpZiBibG9ja3MgaGFzIGJlZW4gcHJlYWxsb2NhdGVkIGFscmVhZHkqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPCQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19DT05WRVJUCQkJMHgwMDIwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVAkJKEVYVDRfR0VUX0JMT0NLU19ESU98XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9VTklOSVRfRVhUKQorCS8qIENvbnZlcnQgZXh0ZW50IHRvIGluaXRpYWxpemVkIGFmdGVyIGRpcmVjdCBJTyBjb21wbGV0ZSAqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NPTlZFUlRfRVhUCQkoRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlR8XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTUwMCw4ICs1MjYsOCBAQAogc3RhdGljIGlubGluZSBfX2xlMzIgZXh0NF9lbmNvZGVfZXh0cmFfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiB7CiAgICAgICAgcmV0dXJuIGNwdV90b19sZTMyKChzaXplb2YodGltZS0+dHZfc2VjKSA+IDQgPwotCQkJICAgdGltZS0+dHZfc2VjID4+IDMyIDogMCkgfAotCQkJICAgKCh0aW1lLT50dl9uc2VjIDw8IDIpICYgRVhUNF9OU0VDX01BU0spKTsKKwkJCSAgICh0aW1lLT50dl9zZWMgPj4gMzIpICYgRVhUNF9FUE9DSF9NQVNLIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHRpbWUtPnR2X25zZWMgPDwgRVhUNF9FUE9DSF9CSVRTKSAmIEVYVDRfTlNFQ19NQVNLKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RlY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgX19sZTMyIGV4dHJhKQpAQCAtNTA5LDcgKzUzNSw3IEBACiAgICAgICAgaWYgKHNpemVvZih0aW1lLT50dl9zZWMpID4gNCkKIAkgICAgICAgdGltZS0+dHZfc2VjIHw9IChfX3U2NCkobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9FUE9DSF9NQVNLKQogCQkJICAgICAgIDw8IDMyOwotICAgICAgIHRpbWUtPnR2X25zZWMgPSAobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9OU0VDX01BU0spID4+IDI7CisgICAgICAgdGltZS0+dHZfbnNlYyA9IChsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X05TRUNfTUFTSykgPj4gRVhUNF9FUE9DSF9CSVRTOwogfQogCiAjZGVmaW5lIEVYVDRfSU5PREVfU0VUX1hUSU1FKHh0aW1lLCBpbm9kZSwgcmF3X2lub2RlKQkJCSAgICAgICBcCkBAIC02NzIsNiArNjk4LDExIEBACiAJX191MTYgaV9leHRyYV9pc2l6ZTsKIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOworCisJLyogY29tcGxldGVkIGFzeW5jIERJT3MgdGhhdCBtaWdodCBuZWVkIHVud3JpdHRlbiBleHRlbnRzIGhhbmRsaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBpX2Fpb19kaW9fY29tcGxldGVfbGlzdDsKKwkvKiBjdXJyZW50IGlvX2VuZCBzdHJ1Y3R1cmUgZm9yIGFzeW5jIERJTyB3cml0ZSovCisJZXh0NF9pb19lbmRfdCAqY3VyX2Fpb19kaW87CiB9OwogCiAvKgpAQCAtNzEzLDYgKzc0NCw3IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfUVVPVEEJCTB4ODAwMDAgLyogU29tZSBxdW90YSBvcHRpb24gc2V0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfVVNSUVVPVEEJCTB4MTAwMDAwIC8qICJvbGQiIHVzZXIgcXVvdGEgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBRVU9UQQkJMHgyMDAwMDAgLyogIm9sZCIgZ3JvdXAgcXVvdGEgKi8KKyNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0NIRUNLU1VNCTB4ODAwMDAwIC8qIEpvdXJuYWwgY2hlY2tzdW1zICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQJMHgxMDAwMDAwIC8qIEpvdXJuYWwgQXN5bmMgQ29tbWl0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSV9WRVJTSU9OICAgICAgICAgICAgMHgyMDAwMDAwIC8qIGlfdmVyc2lvbiBzdXBwb3J0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfREVMQUxMT0MJCTB4ODAwMDAwMCAvKiBEZWxhbGxvYyBzdXBwb3J0ICovCkBAIC05NDIsMTggKzk3NCwxMSBAQAogCXVuc2lnbmVkIGludCBzX21iX3N0YXRzOwogCXVuc2lnbmVkIGludCBzX21iX29yZGVyMl9yZXFzOwogCXVuc2lnbmVkIGludCBzX21iX2dyb3VwX3ByZWFsbG9jOworCXVuc2lnbmVkIGludCBzX21heF93cml0ZWJhY2tfbWJfYnVtcDsKIAkvKiB3aGVyZSBsYXN0IGFsbG9jYXRpb24gd2FzIGRvbmUgLSBmb3Igc3RyZWFtIGFsbG9jYXRpb24gKi8KIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9ncm91cDsKIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9zdGFydDsKIAotCS8qIGhpc3RvcnkgdG8gZGVidWcgcG9saWN5ICovCi0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqc19tYl9oaXN0b3J5OwotCWludCBzX21iX2hpc3RvcnlfY3VyOwotCWludCBzX21iX2hpc3RvcnlfbWF4OwotCWludCBzX21iX2hpc3RvcnlfbnVtOwotCXNwaW5sb2NrX3Qgc19tYl9oaXN0b3J5X2xvY2s7Ci0JaW50IHNfbWJfaGlzdG9yeV9maWx0ZXI7Ci0KIAkvKiBzdGF0cyBmb3IgYnVkZHkgYWxsb2NhdG9yICovCiAJc3BpbmxvY2tfdCBzX21iX3BhX2xvY2s7CiAJYXRvbWljX3Qgc19iYWxfcmVxczsJLyogbnVtYmVyIG9mIHJlcXMgd2l0aCBsZW4gPiAxICovCkBAIC05ODAsNiArMTAwNSw5IEBACiAKIAl1bnNpZ25lZCBpbnQgc19sb2dfZ3JvdXBzX3Blcl9mbGV4OwogCXN0cnVjdCBmbGV4X2dyb3VwcyAqc19mbGV4X2dyb3VwczsKKworCS8qIHdvcmtxdWV1ZSBmb3IgZGlvIHVud3JpdHRlbiAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkaW9fdW53cml0dGVuX3dxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpFWFQ0X1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xMzk3LDcgKzE0MjUsNyBAQAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwogZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7Ci0KK2V4dGVybiBpbnQgZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oc3RydWN0IGlub2RlICppbm9kZSk7CiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQ0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gbG9uZyBleHQ0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpAQCAtMTY5OSw2ICsxNzI3LDggQEAKIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIGxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCQkgIGxvZmZfdCBsZW4pOworZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKKwkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIGludCBtYXhfYmxvY2tzLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmggYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCmluZGV4IDYxNjUyZjEuLjJjYTY4NjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKKysrIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaApAQCAtMjIwLDYgKzIyMCwxMSBAQAogCQkobGUxNl90b19jcHUoZXh0LT5lZV9sZW4pIC0gRVhUX0lOSVRfTUFYX0xFTikpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfbWFya19pbml0aWFsaXplZChzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4dCkKK3sKKwlleHQtPmVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4dCkpOworfQorCiBleHRlcm4gaW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBleHRfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBpZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKik7CkBAIC0yMzUsNyArMjQwLDcgQEAKIAkJCQkgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCiAJCQkJIHN0cnVjdCBleHQ0X2V4dGVudCAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0ZW50ICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICopOwotZXh0ZXJuIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKik7CitleHRlcm4gaW50IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICosIHN0cnVjdCBleHQ0X2V4dGVudCAqLCBpbnQpOwogZXh0ZXJuIGludCBleHQ0X2V4dF93YWxrX3NwYWNlKHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwgZXh0NF9sYmxrX3QsCiAJCQkJCQkJZXh0X3ByZXBhcmVfY2FsbGJhY2ssIHZvaWQgKik7CiBleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZXh0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IDEzOWZiOGMuLmEyODY1OTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtMTYxLDExICsxNjEsMTMgQEAKIGhhbmRsZV90ICpleHQ0X2pvdXJuYWxfc3RhcnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5ibG9ja3MpOwogaW50IF9fZXh0NF9qb3VybmFsX3N0b3AoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUpOwogCi0jZGVmaW5lIEVYVDRfTk9KT1VSTkFMX0hBTkRMRQkoKGhhbmRsZV90ICopIDB4MSkKKyNkZWZpbmUgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCAoKHVuc2lnbmVkIGxvbmcpIDQwOTYpCiAKKy8qIE5vdGU6ICBEbyBub3QgdXNlIHRoaXMgZm9yIE5VTEwgaGFuZGxlcy4gIFRoaXMgaXMgb25seSB0byBkZXRlcm1pbmUgaWYKKyAqIGEgcHJvcGVybHkgYWxsb2NhdGVkIGhhbmRsZSBpcyB1c2luZyBhIGpvdXJuYWwgb3Igbm90LiAqLwogc3RhdGljIGlubGluZSBpbnQgZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlX3QgKmhhbmRsZSkKIHsKLQlpZiAoaGFuZGxlID09IEVYVDRfTk9KT1VSTkFMX0hBTkRMRSkKKwlpZiAoKHVuc2lnbmVkIGxvbmcpaGFuZGxlIDwgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDdhMzgzMjUuLjcxNTI2NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC03MjMsNyArNzIzLDcgQEAKICAqIGluc2VydCBuZXcgaW5kZXggW0Bsb2dpY2FsO0BwdHJdIGludG8gdGhlIGJsb2NrIGF0IEBjdXJwOwogICogY2hlY2sgd2hlcmUgdG8gaW5zZXJ0OiBiZWZvcmUgQGN1cnAgb3IgYWZ0ZXIgQGN1cnAKICAqLwotc3RhdGljIGludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqY3VycCwKIAkJCQlpbnQgbG9naWNhbCwgZXh0NF9mc2Jsa190IHB0cikKIHsKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAgKi8KIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCi0JCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQpCisJCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQsIGludCBmbGFnKQogewogCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOwogCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgsICpmZXg7CkBAIC0xNjAyLDcgKzE2MDIsOCBAQAogCUJVR19PTihwYXRoW2RlcHRoXS5wX2hkciA9PSBOVUxMKTsKIAogCS8qIHRyeSB0byBpbnNlcnQgYmxvY2sgaW50byBmb3VuZCBleHRlbnQgYW5kIHJldHVybiAqLwotCWlmIChleCAmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKKwlpZiAoZXggJiYgKGZsYWcgIT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQorCQkmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKIAkJZXh0X2RlYnVnKCJhcHBlbmQgWyVkXSVkIGJsb2NrIHRvICVkOlslZF0lZCAoZnJvbSAlbGx1KVxuIiwKIAkJCQlleHQ0X2V4dF9pc191bmluaXRpYWxpemVkKG5ld2V4dCksCiAJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSwKQEAgLTE3MjIsNyArMTcyMyw4IEBACiAKIG1lcmdlOgogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSByaWdodCAqLwotCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKKwlpZiAoZmxhZyAhPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCisJCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKIAogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSBsZWZ0ICovCiAKQEAgLTIzNzgsNiArMjM4MCw3IEBACiAJICovCiAKIAlpZiAoRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpKSB7CisjaWYgZGVmaW5lZChBR0dSRVNTSVZFX1RFU1QpIHx8IGRlZmluZWQoQ0hFQ0tfQklOU0VBUkNIKSB8fCBkZWZpbmVkKEVYVEVOVFNfU1RBVFMpCiAJCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGZpbGUgZXh0ZW50cyBlbmFibGVkIik7CiAjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJCXByaW50aygiLCBhZ2dyZXNzaXZlIHRlc3RzIik7CkBAIC0yMzg5LDYgKzIzOTIsNyBAQAogCQlwcmludGsoIiwgc3RhdHMiKTsKICNlbmRpZgogCQlwcmludGsoIlxuIik7CisjZW5kaWYKICNpZmRlZiBFWFRFTlRTX1NUQVRTCiAJCXNwaW5fbG9ja19pbml0KCZFWFQ0X1NCKHNiKS0+c19leHRfc3RhdHNfbG9jayk7CiAJCUVYVDRfU0Ioc2IpLT5zX2V4dF9taW4gPSAxIDw8IDMwOwpAQCAtMjQ5MCw3ICsyNDk0LDYgQEAKIH0KIAogI2RlZmluZSBFWFQ0X0VYVF9aRVJPX0xFTiA3Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9nZXRfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZQogICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bmluaXRpYWxpemVkCkBAIC0yNTgzLDcgKzI1ODYsOCBAQAogCQkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayk7CiAJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayk7CiAJCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCk7Ci0JCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJCQkJCQkJZXgzLCAwKTsKIAkJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJCWVyciA9ICBleHQ0X2V4dF96ZXJvb3V0KGlub2RlLCAmb3JpZ19leCk7CiAJCQkJaWYgKGVycikKQEAgLTI2MzksNyArMjY0Myw3IEBACiAJCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleDMsIG5ld2Jsb2NrICsgbWF4X2Jsb2Nrcyk7CiAJCWV4My0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkIC0gbWF4X2Jsb2Nrcyk7CiAJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDMpOwotCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzLCAwKTsKIAkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQkJaWYgKGVycikKQEAgLTI3NTcsNyArMjc2MSw3IEBACiAJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKIAlnb3RvIG91dDsKIGluc2VydDoKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIDApOwogCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQlpZiAoZXJyKQpAQCAtMjc4NSw2ICsyNzg5LDMzMSBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfZ2V0X2Jsb2NrcygpIGZyb20KKyAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZQorICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuCisgKgorICogV3JpdGluZyB0byBhbiB1bmluaXRpemVkIGV4dGVudCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZAorICogZXh0ZW50IGludG8gbXVsdGlwbGUgL2ludGlhbGl6ZWQgdW5pbnRpYWxpemVkIGV4dGVudHMgKHVwIHRvIHRocmVlKQorICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CisgKiAgIGE+IFRoZXJlIGlzIG5vIHNwbGl0IHJlcXVpcmVkOiBFbnRpcmUgZXh0ZW50IHNob3VsZCBiZSB1bmluaXRpYWxpemVkCisgKiAgIGI+IFNwbGl0cyBpbiB0d28gZXh0ZW50czogV3JpdGUgaXMgaGFwcGVuaW5nIGF0IGVpdGhlciBlbmQgb2YgdGhlIGV4dGVudAorICogICBjPiBTcGxpdHMgaW4gdGhyZWUgZXh0ZW50czogU29tb25lIGlzIHdyaXRpbmcgaW4gbWlkZGxlIG9mIHRoZSBleHRlbnQKKyAqCisgKiBPbmUgb2YgbW9yZSBpbmRleCBibG9ja3MgbWF5YmUgbmVlZGVkIGlmIHRoZSBleHRlbnQgdHJlZSBncm93IGFmdGVyCisgKiB0aGUgdW5pbnRpYWxpemVkIGV4dGVudCBzcGxpdC4gVG8gcHJldmVudCBFTk9TUEMgb2NjdXIgYXQgdGhlIElPCisgKiBjb21wbGV0ZSwgd2UgbmVlZCB0byBzcGxpdCB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVmb3JlIERJTyBzdWJtaXQKKyAqIHRoZSBJTy4gVGhlIHVuaW5pdGlsaXplZCBleHRlbnQgY2FsbGVkIGF0IHRoaXMgdGltZSB3aWxsIGJlIHNwbGl0CisgKiBpbnRvIHRocmVlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50KGF0IG1vc3QpLiBBZnRlciBJTyBjb21wbGV0ZSwgdGhlIHBhcnQKKyAqIGJlaW5nIGZpbGxlZCB3aWxsIGJlIGNvbnZlcnQgdG8gaW5pdGlhbGl6ZWQgYnkgdGhlIGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgorICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdW5pbml0aWFsaXplZCBleHRlbnQgdG8gYmUgd3JpdHRlbiBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCisJCQkJCWV4dDRfbGJsa190IGlibG9jaywKKwkJCQkJdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LCBuZXdleCwgb3JpZ19leDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MSA9IE5VTEw7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDIgPSBOVUxMOworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgzID0gTlVMTDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlleHQ0X2xibGtfdCBlZV9ibG9jazsKKwl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLCBlZV9sZW4sIGRlcHRoOworCWV4dDRfZnNibGtfdCBuZXdibG9jazsKKwlpbnQgZXJyID0gMDsKKworCWV4dF9kZWJ1ZygiZXh0NF9zcGxpdF91bndyaXR0ZW5fZXh0ZW50czogaW5vZGUgJWx1LCIKKwkJICAiaWJsb2NrICVsbHUsIG1heF9ibG9ja3MgJXVcbiIsIGlub2RlLT5pX2lubywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlibG9jaywgbWF4X2Jsb2Nrcyk7CisJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CisJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwllZV9ibG9jayA9IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayk7CisJZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpOworCWFsbG9jYXRlZCA9IGVlX2xlbiAtIChpYmxvY2sgLSBlZV9ibG9jayk7CisJbmV3YmxvY2sgPSBpYmxvY2sgLSBlZV9ibG9jayArIGV4dF9wYmxvY2soZXgpOworCWV4MiA9IGV4OworCW9yaWdfZXguZWVfYmxvY2sgPSBleC0+ZWVfYmxvY2s7CisJb3JpZ19leC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGVlX2xlbik7CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZvcmlnX2V4LCBleHRfcGJsb2NrKGV4KSk7CisKKwkvKgorIAkgKiBJZiB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVnaW5zIGF0IHRoZSBzYW1lIGxvZ2ljYWwKKyAJICogYmxvY2sgd2hlcmUgdGhlIHdyaXRlIGJlZ2lucywgYW5kIHRoZSB3cml0ZSBjb21wbGV0ZWx5CisgCSAqIGNvdmVycyB0aGUgZXh0ZW50LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gc3BsaXQgaXQuCisgCSAqLworCWlmICgoaWJsb2NrID09IGVlX2Jsb2NrKSAmJiAoYWxsb2NhdGVkIDw9IG1heF9ibG9ja3MpKQorCQlyZXR1cm4gYWxsb2NhdGVkOworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGV4MTogZWVfYmxvY2sgdG8gaWJsb2NrIC0gMSA6IHVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAoaWJsb2NrID4gZWVfYmxvY2spIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGZvciBzYW5pdHksIHVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBleDIgZXh0ZW50IGJlZm9yZQorCSAqIHdlIGluc2VydCBleDMsIGlmIGV4MSBpcyBOVUxMLiBUaGlzIGlzIHRvIGF2b2lkIHRlbXBvcmFyeQorCSAqIG92ZXJsYXAgb2YgYmxvY2tzLgorCSAqLworCWlmICghZXgxICYmIGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYobWF4X2Jsb2Nrcyk7CisJLyogZXgzOiB0byBlZV9ibG9jayArIGVlX2xlbiA6IHVuaW5pdGlhbGlzZWQgKi8KKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykgeworCQl1bnNpZ25lZCBpbnQgbmV3ZGVwdGg7CisJCWV4MyA9ICZuZXdleDsKKwkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayArIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayArIG1heF9ibG9ja3MpOworCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgzKTsKKwkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMsIGZsYWdzKTsKKwkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CisJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZpeF9leHRlbnRfbGVuOworCQkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCQlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCQkJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJCWV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCQkvKiB6ZXJvZWQgdGhlIGZ1bGwgZXh0ZW50ICovCisJCQkvKiBibG9ja3MgYXZhaWxhYmxlIGZyb20gaWJsb2NrICovCisJCQlyZXR1cm4gYWxsb2NhdGVkOworCisJCX0gZWxzZSBpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyoKKwkJICogVGhlIGRlcHRoLCBhbmQgaGVuY2UgZWggJiBleCBtaWdodCBjaGFuZ2UKKwkJICogYXMgcGFydCBvZiB0aGUgaW5zZXJ0IGFib3ZlLgorCQkgKi8KKwkJbmV3ZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCQkvKgorCQkgKiB1cGRhdGUgdGhlIGV4dGVudCBsZW5ndGggYWZ0ZXIgc3VjY2Vzc2Z1bCBpbnNlcnQgb2YgdGhlCisJCSAqIHNwbGl0IGV4dGVudAorCQkgKi8KKwkJb3JpZ19leC5lZV9sZW4gPSBjcHVfdG9fbGUxNihlZV9sZW4gLQorCQkJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgzKSk7CisJCWRlcHRoID0gbmV3ZGVwdGg7CisJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKKwkJcGF0aCA9IGV4dDRfZXh0X2ZpbmRfZXh0ZW50KGlub2RlLCBpYmxvY2ssIHBhdGgpOworCQlpZiAoSVNfRVJSKHBhdGgpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwkJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwkJaWYgKGV4MiAhPSAmbmV3ZXgpCisJCQlleDIgPSBleDsKKworCQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOworCX0KKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIGNoYW5nZSBvZiBkZXB0aCBhcyBwYXJ0IG9mIHRoZQorCSAqIGluc2VydGlvbiBvZiBleDMgYWJvdmUsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgZXgxIGV4dGVudCBhZ2FpbiBoZXJlCisJICovCisJaWYgKGV4MSAmJiBleDEgIT0gZXgpIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGV4MjogaWJsb2NrIHRvIGlibG9jayArIG1heGJsb2Nrcy0xIDogdG8gYmUgZGlyZWN0IElPIHdyaXR0ZW4sCisJICogdW5pbml0aWFsaXNlZCBzdGlsbC4KKwkgKi8KKwlleDItPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7CisJZXgyLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOworCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDIpOworCWlmIChleDIgIT0gZXgpCisJCWdvdG8gaW5zZXJ0OworCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlleHRfZGVidWcoIm91dCBoZXJlXG4iKTsKKwlnb3RvIG91dDsKK2luc2VydDoKKwllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgZmxhZ3MpOworCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwkJLyogemVybyBvdXQgdGhlIGZpcnN0IGhhbGYgKi8KKwkJcmV0dXJuIGFsbG9jYXRlZDsKKwl9IGVsc2UgaWYgKGVycikKKwkJZ290byBmaXhfZXh0ZW50X2xlbjsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQ7CisKK2ZpeF9leHRlbnRfbGVuOgorCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4KTsKKwlleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCXJldHVybiBlcnI7Cit9CitzdGF0aWMgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19kaW8oaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlpbnQgZGVwdGg7CisJaW50IGVyciA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGZpcnN0IG1hcmsgdGhlIGV4dGVudCBhcyBpbml0aWFsaXplZCAqLworCWV4dDRfZXh0X21hcmtfaW5pdGlhbGl6ZWQoZXgpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNlZSBpZiBpdCBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIGV4dGVudAorCSAqIG9uIHRoZSBsZWZ0LgorCSAqLworCWlmIChleCA+IEVYVF9GSVJTVF9FWFRFTlQoZWgpKSB7CisJCS8qCisJCSAqIFRvIG1lcmdlIGxlZnQsIHBhc3MgImV4IC0gMSIgdG8gdHJ5X3RvX21lcmdlKCksCisJCSAqIHNpbmNlIGl0IG1lcmdlcyB0b3dhcmRzIHJpZ2h0IF9vbmx5Xy4KKwkJICovCisJCXJldCA9IGV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgZXggLSAxKTsKKwkJaWYgKHJldCkgeworCQkJZXJyID0gZXh0NF9leHRfY29ycmVjdF9pbmRleGVzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwkJCWV4LS07CisJCX0KKwl9CisJLyoKKwkgKiBUcnkgdG8gTWVyZ2UgdG93YXJkcyByaWdodC4KKwkgKi8KKwlyZXQgPSBleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIGV4KTsKKwlpZiAocmV0KSB7CisJCWVyciA9IGV4dDRfZXh0X2NvcnJlY3RfaW5kZXhlcyhoYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJfQorCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK2V4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWV4dDRfbGJsa190IGlibG9jaywgdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzLAorCQkJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsCisJCQlleHQ0X2ZzYmxrX3QgbmV3YmxvY2spCit7CisJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKKworCWV4dF9kZWJ1ZygiZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50czogaW5vZGUgJWx1LCBsb2dpY2FsIgorCQkgICJibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1LCBmbGFncyAlZCwgYWxsb2NhdGVkICV1IiwKKwkJICBpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpaWJsb2NrLCBtYXhfYmxvY2tzLAorCQkgIGZsYWdzLCBhbGxvY2F0ZWQpOworCWV4dDRfZXh0X3Nob3dfbGVhZihpbm9kZSwgcGF0aCk7CisKKwkvKiBESU8gZ2V0X2Jsb2NrKCkgYmVmb3JlIHN1Ym1pdCB0aGUgSU8sIHNwbGl0IHRoZSBleHRlbnQgKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCXJldCA9IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAorCQkJCQkJaW5vZGUsIHBhdGgsIGlibG9jaywKKwkJCQkJCW1heF9ibG9ja3MsIGZsYWdzKTsKKwkJLyoKKwkJICogRmxhZyB0aGUgaW5vZGUobm9uIGFpbyBjYXNlKSBvciBlbmRfaW8gc3RydWN0IChhaW8gY2FzZSkKKwkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCisJCSAqIGNvbXBsZXRlZAorCQkgKi8KKwkJaWYgKGlvKQorCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJZWxzZQorCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCWdvdG8gb3V0OworCX0KKwkvKiBhc3luYyBESU8gZW5kX2lvIGNvbXBsZXRlLCBjb252ZXJ0IHRoZSBmaWxsZWQgZXh0ZW50IHRvIHdyaXR0ZW4gKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVCkgeworCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZSwgaW5vZGUsCisJCQkJCQkJcGF0aCk7CisJCWdvdG8gb3V0MjsKKwl9CisJLyogYnVmZmVyZWQgSU8gY2FzZSAqLworCS8qCisJICogcmVwZWF0IGZhbGxvY2F0ZSBjcmVhdGlvbiByZXF1ZXN0CisJICogd2UgYWxyZWFkeSBoYXZlIGFuIHVud3JpdHRlbiBleHRlbnQKKwkgKi8KKwlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCkKKwkJZ290byBtYXBfb3V0OworCisJLyogYnVmZmVyZWQgUkVBRCBvciBidWZmZXJlZCB3cml0ZV9iZWdpbigpIGxvb2t1cCAqLworCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQorCQkgKiByZXR1cm4gYWxsb2NhdGVkIGJsb2NrcyBzbyB0aGF0IGRlbGFsbG9jCisJCSAqIHdvbid0IGRvIGJsb2NrIHJlc2VydmF0aW9uIGZvciB1cy4gIEJ1dAorCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0CisJCSAqIGEgcmVhZCBmcm9tIHRoZSBibG9jayByZXR1cm5zIDBzLgorCQkgKi8KKwkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKKwkJZ290byBvdXQxOworCX0KKworCS8qIGJ1ZmZlcmVkIHdyaXRlLCB3cml0ZXBhZ2UgdGltZSwgY29udmVydCovCisJcmV0ID0gZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGUsIGlub2RlLAorCQkJCQkJcGF0aCwgaWJsb2NrLAorCQkJCQkJbWF4X2Jsb2Nrcyk7CitvdXQ6CisJaWYgKHJldCA8PSAwKSB7CisJCWVyciA9IHJldDsKKwkJZ290byBvdXQyOworCX0gZWxzZQorCQlhbGxvY2F0ZWQgPSByZXQ7CisJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKK21hcF9vdXQ6CisJc2V0X2J1ZmZlcl9tYXBwZWQoYmhfcmVzdWx0KTsKK291dDE6CisJaWYgKGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWFsbG9jYXRlZCA9IG1heF9ibG9ja3M7CisJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKKwliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CisJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKK291dDI6CisJaWYgKHBhdGgpIHsKKwkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOworCQlrZnJlZShwYXRoKTsKKwl9CisJcmV0dXJuIGVyciA/IGVyciA6IGFsbG9jYXRlZDsKK30KKy8qCiAgKiBCbG9jayBhbGxvY2F0aW9uL21hcC9wcmVhbGxvY2F0aW9uIHJvdXRpbmUgZm9yIGV4dGVudHMgYmFzZWQgZmlsZXMKICAqCiAgKgpAQCAtMjgxNCw2ICszMTQzLDcgQEAKIAlpbnQgZXJyID0gMCwgZGVwdGgsIHJldCwgY2FjaGVfdHlwZTsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKIAogCV9fY2xlYXJfYml0KEJIX05ldywgJmJoX3Jlc3VsdC0+Yl9zdGF0ZSk7CiAJZXh0X2RlYnVnKCJibG9ja3MgJXUvJXUgcmVxdWVzdGVkIGZvciBpbm9kZSAlbHVcbiIsCkBAIC0yODg5LDMzICszMjE5LDEwIEBACiAJCQkJCQkJRVhUNF9FWFRfQ0FDSEVfRVhURU5UKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKQotCQkJCWdvdG8gb3V0OwotCQkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApIHsKLQkJCQlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykKLQkJCQkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKLQkJCQkvKgotCQkJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQotCQkJCSAqIHJldHVybiBhbGxvY2F0ZWQgYmxvY2tzIHNvIHRoYXQgZGVsYWxsb2MKLQkJCQkgKiB3b24ndCBkbyBibG9jayByZXNlcnZhdGlvbiBmb3IgdXMuICBCdXQKLQkJCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0Ci0JCQkJICogYSByZWFkIGZyb20gdGhlIGJsb2NrIHJldHVybnMgMHMuCi0JCQkJICovCi0JCQkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKLQkJCQliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7Ci0JCQkJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0KLQkJCXJldCA9IGV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlLCBpbm9kZSwKLQkJCQkJCQkJcGF0aCwgaWJsb2NrLAotCQkJCQkJCQltYXhfYmxvY2tzKTsKLQkJCWlmIChyZXQgPD0gMCkgewotCQkJCWVyciA9IHJldDsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9IGVsc2UKLQkJCQlhbGxvY2F0ZWQgPSByZXQ7Ci0JCQlnb3RvIG91dG5ldzsKKwkJCXJldCA9IGV4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlLAorCQkJCQlpbm9kZSwgaWJsb2NrLCBtYXhfYmxvY2tzLCBwYXRoLAorCQkJCQlmbGFncywgYWxsb2NhdGVkLCBiaF9yZXN1bHQsIG5ld2Jsb2NrKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI5ODYsOSArMzI5MywyNyBAQAogCS8qIHRyeSB0byBpbnNlcnQgbmV3IGV4dGVudCBpbnRvIGZvdW5kIGxlYWYgYW5kIHJldHVybiAqLwogCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmbmV3ZXgsIG5ld2Jsb2NrKTsKIAluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pOwotCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKSAgLyogTWFyayB1bmluaXRpYWxpemVkICovCisJLyogTWFyayB1bmluaXRpYWxpemVkICovCisJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpewogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoJm5ld2V4KTsKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJCS8qCisJCSAqIGlvX2VuZCBzdHJ1Y3R1cmUgd2FzIGNyZWF0ZWQgZm9yIGV2ZXJ5IGFzeW5jCisJCSAqIGRpcmVjdCBJTyB3cml0ZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlLgorCQkgKiBUbyBhdm9pZCB1bmVjZXNzYXJ5IGNvbnZlcnRpb24gZm9yIGV2ZXJ5IGFpbyBkaW8gcmV3cml0ZQorCQkgKiB0byB0aGUgbWlkIG9mIGZpbGUsIGhlcmUgd2UgZmxhZyB0aGUgSU8gdGhhdCBpcyByZWFsbHkKKwkJICogbmVlZCB0aGUgY29udmVydGlvbi4KKwkJICogRm9yIG5vbiBhc3ljbiBkaXJlY3QgSU8gY2FzZSwgZmxhZyB0aGUgaW5vZGUgc3RhdGUKKwkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCisJCSAqLworCQlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCQlpZiAoaW8pCisJCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCWVsc2UKKwkJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9CisJCQkJCUVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjs7CisJCX0KKwl9CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIGZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCS8qIGZyZWUgZGF0YSBibG9ja3Mgd2UganVzdCBhbGxvY2F0ZWQgKi8KIAkJLyogbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgZGlzY2FyZCBoZXJlIGRpcmVjdGx5LApAQCAtMzAwMiw3ICszMzI3LDYgQEAKIAkvKiBwcmV2aW91cyByb3V0aW5lIGNvdWxkIHVzZSBibG9jayB3ZSBhbGxvY2F0ZWQgKi8KIAluZXdibG9jayA9IGV4dF9wYmxvY2soJm5ld2V4KTsKIAlhbGxvY2F0ZWQgPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbigmbmV3ZXgpOwotb3V0bmV3OgogCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAKIAkvKiBDYWNoZSBvbmx5IHdoZW4gaXQgaXMgX25vdF8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQgKi8KQEAgLTMyMDEsNiArMzUyNSw2NCBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0IGEgcmFuZ2Ugb2YgYmxvY2tzIHRvIHdyaXR0ZW4gZXh0ZW50cworICogVGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFzcyB0aGUgc3RhcnQgb2Zmc2V0IGFuZCB0aGUgc2l6ZS4KKyAqIGFsbCB1bndyaXR0ZW4gZXh0ZW50cyB3aXRoaW4gdGhpcyByYW5nZSB3aWxsIGJlIGNvbnZlcnRlZCB0bworICogd3JpdHRlbiBleHRlbnRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdCBJTyBlbmQgaW8gY2FsbCBiYWNrCisgKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCisJCQkJICAgIGxvZmZfdCBsZW4pCit7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlleHQ0X2xibGtfdCBibG9jazsKKwl1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0MiA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkIG1hcF9iaDsKKwl1bnNpZ25lZCBpbnQgY3JlZGl0cywgYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7CisKKwlibG9jayA9IG9mZnNldCA+PiBibGtiaXRzOworCS8qCisJICogV2UgY2FuJ3QganVzdCBjb252ZXJ0IGxlbiB0byBtYXhfYmxvY2tzIGJlY2F1c2UKKwkgKiBJZiBibG9ja3NpemUgPSA0MDk2IG9mZnNldCA9IDMwNzIgYW5kIGxlbiA9IDIwNDgKKwkgKi8KKwltYXhfYmxvY2tzID0gKEVYVDRfQkxPQ0tfQUxJR04obGVuICsgb2Zmc2V0LCBibGtiaXRzKSA+PiBibGtiaXRzKQorCQkJCQkJCS0gYmxvY2s7CisJLyoKKwkgKiBjcmVkaXRzIHRvIGluc2VydCAxIGV4dGVudCBpbnRvIGV4dGVudCB0cmVlCisJICovCisJY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwl3aGlsZSAocmV0ID49IDAgJiYgcmV0IDwgbWF4X2Jsb2NrcykgeworCQlibG9jayA9IGJsb2NrICsgcmV0OworCQltYXhfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIHJldDsKKwkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBjcmVkaXRzKTsKKwkJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCQlicmVhazsKKwkJfQorCQltYXBfYmguYl9zdGF0ZSA9IDA7CisJCXJldCA9IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywKKwkJCQkgICAgICBtYXhfYmxvY2tzLCAmbWFwX2JoLAorCQkJCSAgICAgIEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpOworCQlpZiAocmV0IDw9IDApIHsKKwkJCVdBUk5fT04ocmV0IDw9IDApOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXh0NF9leHRfZ2V0X2Jsb2NrcyAiCisJCQkJICAgICJyZXR1cm5lZCBlcnJvciBpbm9kZSMlbHUsIGJsb2NrPSV1LCAiCisJCQkJICAgICJtYXhfYmxvY2tzPSV1IiwgX19mdW5jX18sCisJCQkJICAgIGlub2RlLT5pX2lubywgYmxvY2ssIG1heF9ibG9ja3MpOworCQl9CisJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJcmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCWlmIChyZXQgPD0gMCB8fCByZXQyICkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0ID4gMCA/IHJldDIgOiByZXQ7Cit9CisvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGV4dGVudCB0byBnYXRoZXIgRklFTUFQIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgaW50IGV4dDRfZXh0X2ZpZW1hcF9jYihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNWNhM2VjYS4uOTYzMDU4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlICAgPSBleHQ0X3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmMKaW5kZXggMDc0NzU3NC4uMmIxNTMxMiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCisrKyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNDQsNiArNDQsOCBAQAogICoKICAqIFdoYXQgd2UgZG8gaXMganVzdCBraWNrIG9mZiBhIGNvbW1pdCBhbmQgd2FpdCBvbiBpdC4gIFRoaXMgd2lsbCBzbmFwc2hvdCB0aGUKICAqIGlub2RlIHRvIGRpc2suCisgKgorICogaV9tdXRleCBsb2NrIGlzIGhlbGQgd2hlbiBlbnRlcmluZyBhbmQgZXhpdGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KIAogaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKQEAgLTU2LDYgKzU4LDkgQEAKIAogCXRyYWNlX2V4dDRfc3luY19maWxlKGZpbGUsIGRlbnRyeSwgZGF0YXN5bmMpOwogCisJcmV0ID0gZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oaW5vZGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAkvKgogCSAqIGRhdGE9d3JpdGViYWNrOgogCSAqICBUaGUgY2FsbGVyJ3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMDY0NzQ2Zi4uMmM4Y2FhNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAgKiBzbyBiZWZvcmUgd2UgY2FsbCBoZXJlIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjb25zaXN0ZW50bHkgZGlydGllZCBhZ2FpbnN0CiAgKiB0aGlzIHRyYW5zYWN0aW9uLgogICovCi0gaW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSBpbnQgbmJsb2NrcykKIHsKIAlpbnQgcmV0OwpAQCAtMjA4LDYgKzIwOSw3IEBACiAJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCXJldCA9IGV4dDRfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOwogCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOworCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE0NSw2ICsxMTQ3LDY0IEBACiB9CiAKIC8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGRpcnR5IHBhZ2VzIGluIGEgZ2l2ZW4gaW5vZGUKKyAqIHN0YXJ0aW5nIGF0IHBhZ2UgZnJhbWUgaWR4LgorICovCitzdGF0aWMgcGdvZmZfdCBleHQ0X251bV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGlkeCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1heF9wYWdlcykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJcGdvZmZfdAlpbmRleDsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgbnVtID0gMDsKKwlpbnQgaSwgbnJfcGFnZXMsIGRvbmUgPSAwOworCisJaWYgKG1heF9wYWdlcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCXdoaWxlICghZG9uZSkgeworCQlpbmRleCA9IGlkeDsKKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJICAgICAgUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJICAgICAgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFKTsKKwkJaWYgKG5yX3BhZ2VzID09IDApCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKwkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAodW5saWtlbHkocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKSB8fAorCQkJICAgICFQYWdlRGlydHkocGFnZSkgfHwKKwkJCSAgICBQYWdlV3JpdGViYWNrKHBhZ2UpIHx8CisJCQkgICAgcGFnZS0+aW5kZXggIT0gaWR4KSB7CisJCQkJZG9uZSA9IDE7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQkJCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwkJCQlkbyB7CisJCQkJCWlmICghYnVmZmVyX2RlbGF5KGJoKSAmJgorCQkJCQkgICAgIWJ1ZmZlcl91bndyaXR0ZW4oYmgpKQorCQkJCQkJZG9uZSA9IDE7CisJCQkJCWJoID0gYmgtPmJfdGhpc19wYWdlOworCQkJCX0gd2hpbGUgKCFkb25lICYmIChiaCAhPSBoZWFkKSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCQkJaWR4Kys7CisJCQludW0rKzsKKwkJCWlmIChudW0gPj0gbWF4X3BhZ2VzKQorCQkJCWJyZWFrOworCQl9CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJfQorCXJldHVybiBudW07Cit9CisKKy8qCiAgKiBUaGUgZXh0NF9nZXRfYmxvY2tzKCkgZnVuY3Rpb24gdHJpZXMgdG8gbG9vayB1cCB0aGUgcmVxdWVzdGVkIGJsb2NrcywKICAqIGFuZCByZXR1cm5zIGlmIHRoZSBibG9ja3MgYXJlIGFscmVhZHkgbWFwcGVkLgogICoKQEAgLTExNzUsNiArMTIzNSw5IEBACiAJY2xlYXJfYnVmZmVyX21hcHBlZChiaCk7CiAJY2xlYXJfYnVmZmVyX3Vud3JpdHRlbihiaCk7CiAKKwlleHRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrcygpOiBpbm9kZSAlbHUsIGZsYWcgJWQsIG1heF9ibG9ja3MgJXUsIgorCQkgICJsb2dpY2FsIGJsb2NrICVsdVxuIiwgaW5vZGUtPmlfaW5vLCBmbGFncywgbWF4X2Jsb2NrcywKKwkJICAodW5zaWduZWQgbG9uZylibG9jayk7CiAJLyoKIAkgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ldwogCSAqIGZpbGUgc3lzdGVtIGJsb2NrLgpAQCAtMTc5NiwxMSArMTg1OSwxMSBAQAogCiAJaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCB0b3RhbCkpIHsKIAkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CiAJCWlmIChleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKSB7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KLQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7CkBAIC0yMDkyLDE4ICsyMTU1LDE4IEBACiBzdGF0aWMgdm9pZCBleHQ0X3ByaW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRvdGFsIGZyZWUgYmxvY2tzIGNvdW50ICVsbGRcbiIsCi0JCQlleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImZyZWVfYmxvY2tzPSVsbGRcbiIsCi0JCQkobG9uZyBsb25nKXBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJkaXJ0eV9ibG9ja3M9JWxsZFxuIiwKLQkJCShsb25nIGxvbmcpcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiaV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcz0ldVxuIiwKLQkJCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwotCXByaW50ayhLRVJOX0VNRVJHICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAotCQkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiVG90YWwgZnJlZSBibG9ja3MgY291bnQgJWxsZFxuIiwKKwkgICAgICAgZXh0NF9jb3VudF9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYikpOworCXByaW50ayhLRVJOX0NSSVQgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZnJlZV9ibG9ja3M9JWxsZFxuIiwKKwkgICAgICAgKGxvbmcgbG9uZykgcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyKSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZGlydHlfYmxvY2tzPSVsbGRcbiIsCisJICAgICAgIChsb25nIGxvbmcpIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIpKTsKKwlwcmludGsoS0VSTl9DUklUICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX2RhdGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIxODksMTQgKzIyNTIsMTQgQEAKIAkJICogd3JpdGVwYWdlIGFuZCB3cml0ZXBhZ2VzIHdpbGwgYWdhaW4gdHJ5IHRvIHdyaXRlCiAJCSAqIHRoZSBzYW1lLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkIGZvciBpbm9kZSAlbHUgIgotCQkJCSAgImF0IGxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICIKLQkJCQkgICIlemQgd2l0aCBlcnJvciAlZFxuIiwKLQkJCQkgIF9fZnVuY19fLCBtcGQtPmlub2RlLT5pX2lubywKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV4dCwKLQkJCQkgIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uISEgIgotCQkJCQkiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOworCQlleHQ0X21zZyhtcGQtPmlub2RlLT5pX3NiLCBLRVJOX0NSSVQsCisJCQkgImRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSBhdCAiCisJCQkgImxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICV6ZCB3aXRoICIKKwkJCSAiZXJyb3IgJWRcbiIsIG1wZC0+aW5vZGUtPmlfaW5vLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIG5leHQsCisJCQkgbXBkLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzLCBlcnIpOworCQlwcmludGsoS0VSTl9DUklUICJUaGlzIHNob3VsZCBub3QgaGFwcGVuISEgICIKKwkJICAgICAgICJEYXRhIHdpbGwgYmUgbG9zdFxuIik7CiAJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJZXh0NF9wcmludF9mcmVlX2Jsb2NrcyhtcGQtPmlub2RlKTsKIAkJfQpAQCAtMjc0Myw4ICsyODA2LDEwIEBACiAJaW50IG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOwogCWludCBwYWdlc193cml0dGVuID0gMDsKIAlsb25nIHBhZ2VzX3NraXBwZWQ7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKIAlpbnQgcmFuZ2VfY3ljbGljLCBjeWNsZWQgPSAxLCBpb19kb25lID0gMDsKLQlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMCwgbnJfdG9fd3JpdGVidW1wID0gMDsKKwlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMDsKKwlsb25nIGRlc2lyZWRfbnJfdG9fd3JpdGUsIG5yX3RvX3dyaXRlYnVtcCA9IDA7CiAJbG9mZl90IHJhbmdlX3N0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKG1hcHBpbmctPmhvc3QtPmlfc2IpOwogCkBAIC0yNzcxLDE2ICsyODM2LDYgQEAKIAlpZiAodW5saWtlbHkoc2JpLT5zX21vdW50X2ZsYWdzICYgRVhUNF9NRl9GU19BQk9SVEVEKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCS8qCi0JICogTWFrZSBzdXJlIG5yX3RvX3dyaXRlIGlzID49IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdAotCSAqIFRoaXMgbWFrZSBzdXJlIHNtYWxsIGZpbGVzIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGluCi0JICogc2luZ2xlIGF0dGVtcHQuIFRoaXMgZW5zdXJlIHRoYXQgc21hbGwgZmlsZXMKLQkgKiBnZXQgbGVzcyBmcmFnbWVudGVkLgotCSAqLwotCWlmICh3YmMtPm5yX3RvX3dyaXRlIDwgc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7Ci0JCW5yX3RvX3dyaXRlYnVtcCA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCAtIHdiYy0+bnJfdG9fd3JpdGU7Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Q7Ci0JfQogCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQogCQlyYW5nZV93aG9sZSA9IDE7CiAKQEAgLTI3OTUsNiArMjg1MCwzNiBAQAogCX0gZWxzZQogCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAorCS8qCisJICogVGhpcyB3b3JrcyBhcm91bmQgdHdvIGZvcm1zIG9mIHN0dXBpZGl0eS4gIFRoZSBmaXJzdCBpcyBpbgorCSAqIHRoZSB3cml0ZWJhY2sgY29kZSwgd2hpY2ggY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKKwkgKiB3cml0dGVuIHRvIGJlIDEwMjQgcGFnZXMuICBUaGlzIGlzIHdyb25nIG9uIG11bHRpcGxlCisJICogbGV2ZWxzOyBkaWZmZXJlbnQgYXJjaGl0ZWN0dWVzIGhhdmUgYSBkaWZmZXJlbnQgcGFnZSBzaXplLAorCSAqIHdoaWNoIGNoYW5nZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgd2hpY2ggZ2V0cworCSAqIHdyaXR0ZW4uICBTZWNvbmRseSwgNCBtZWdhYnl0ZXMgaXMgd2F5IHRvbyBzbWFsbC4gIFhGUworCSAqIGZvcmNlcyB0aGlzIHZhbHVlIHRvIGJlIDE2IG1lZ2FieXRlcyBieSBtdWx0aXBseWluZworCSAqIG5yX3RvX3dyaXRlIHBhcmFtZXRlciBieSBmb3VyLCBhbmQgdGhlbiByZWxpZXMgb24gaXRzCisJICogYWxsb2NhdG9yIHRvIGFsbG9jYXRlIGxhcmdlciBleHRlbnRzIHRvIG1ha2UgdGhlbQorCSAqIGNvbnRpZ3VvdXMuICBVbmZvcnR1bmF0ZWx5IHRoaXMgYnJpbmdzIHVzIHRvIHRoZSBzZWNvbmQKKwkgKiBzdHVwaWRpdHksIHdoaWNoIGlzIHRoYXQgZXh0NCdzIG1iYWxsb2MgY29kZSBvbmx5IGFsbG9jYXRlcworCSAqIGF0IG1vc3QgMjA0OCBibG9ja3MuICBTbyB3ZSBmb3JjZSBjb250aWd1b3VzIHdyaXRlcyB1cCB0bworCSAqIHRoZSBudW1iZXIgb2YgZGlydHkgYmxvY2tzIGluIHRoZSBpbm9kZSwgb3IKKwkgKiBzYmktPm1heF93cml0ZWJhY2tfbWJfYnVtcCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKi8KKwltYXhfcGFnZXMgPSBzYmktPnNfbWF4X3dyaXRlYmFja19tYl9idW1wIDw8ICgyMCAtIFBBR0VfQ0FDSEVfU0hJRlQpOworCWlmICghcmFuZ2VfY3ljbGljICYmIHJhbmdlX3dob2xlKQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZSAqIDg7CisJZWxzZQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gZXh0NF9udW1fZGlydHlfcGFnZXMoaW5vZGUsIGluZGV4LAorCQkJCQkJCSAgIG1heF9wYWdlcyk7CisJaWYgKGRlc2lyZWRfbnJfdG9fd3JpdGUgPiBtYXhfcGFnZXMpCisJCWRlc2lyZWRfbnJfdG9fd3JpdGUgPSBtYXhfcGFnZXM7CisKKwlpZiAod2JjLT5ucl90b193cml0ZSA8IGRlc2lyZWRfbnJfdG9fd3JpdGUpIHsKKwkJbnJfdG9fd3JpdGVidW1wID0gZGVzaXJlZF9ucl90b193cml0ZSAtIHdiYy0+bnJfdG9fd3JpdGU7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBkZXNpcmVkX25yX3RvX3dyaXRlOworCX0KKwogCW1wZC53YmMgPSB3YmM7CiAJbXBkLmlub2RlID0gbWFwcGluZy0+aG9zdDsKIApAQCAtMjgyMiwxMCArMjkwNyw5IEBACiAJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgbmVlZGVkX2Jsb2Nrcyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGpiZDJfc3RhcnQ6ICIKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX0NSSVQsICIlczogamJkMl9zdGFydDogIgogCQkJICAgICAgICIlbGQgcGFnZXMsIGlubyAlbHU7IGVyciAlZFxuIiwgX19mdW5jX18sCiAJCQkJd2JjLT5ucl90b193cml0ZSwgaW5vZGUtPmlfaW5vLCByZXQpOwotCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQogCkBAIC0yODk3LDkgKzI5ODEsMTAgQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKQotCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKLQkJCQkid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKKwkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fQ1JJVCwKKwkJCSAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKKwkJCSAid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKIAogCS8qIFVwZGF0ZSBpbmRleCAqLwogCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CkBAIC0yOTE0LDcgKzI5OTksOCBAQAogb3V0X3dyaXRlcGFnZXM6CiAJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKIAkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7Ci0Jd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CisJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPiBucl90b193cml0ZWJ1bXApCisJCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOwogCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKIAl0cmFjZV9leHQ0X2RhX3dyaXRlcGFnZXNfcmVzdWx0KGlub2RlLCB3YmMsIHJldCwgcGFnZXNfd3JpdHRlbik7CiAJcmV0dXJuIHJldDsKQEAgLTMyNzIsNiArMzM1OCw4IEBACiB9CiAKIC8qCisgKiBPX0RJUkVDVCBmb3IgZXh0MyAob3IgaW5kaXJlY3QgbWFwKSBiYXNlZCBmaWxlcworICoKICAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQogICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKICAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KQEAgLTMyODAsNyArMzM2OCw3IEBACiAgKiBjcmFzaGVzIHRoZW4gc3RhbGUgZGlzayBkYXRhIF9tYXlfIGJlIGV4cG9zZWQgaW5zaWRlIHRoZSBmaWxlLiBCdXQgY3VycmVudAogICogVkZTIGNvZGUgZmFsbHMgYmFjayBpbnRvIGJ1ZmZlcmVkIHBhdGggaW4gdGhhdCBjYXNlIHNvIHdlIGFyZSBzYWZlLgogICovCi1zdGF0aWMgc3NpemVfdCBleHQ0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKK3N0YXRpYyBzc2l6ZV90IGV4dDRfaW5kX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewpAQCAtMzI5MSw2ICszMzc5LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0zMzEzLDkgKzM0MDIsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTMzNTQsNiArMzQ0NiwzNjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWludCBkaW9fY3JlZGl0czsKKworCWV4dDRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZTogaW5vZGUgJWx1LCBjcmVhdGUgZmxhZyAlZFxuIiwKKwkJICAgaW5vZGUtPmlfaW5vLCBjcmVhdGUpOworCS8qCisJICogRElPIFZGUyBjb2RlIHBhc3NlcyBjcmVhdGUgPSAwIGZsYWcgZm9yIHdyaXRlIHRvCisJICogdGhlIG1pZGRsZSBvZiBmaWxlLiBJdCBkb2VzIHRoaXMgdG8gYXZvaWQgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGZvciBob2xlcywgdG8gcHJldmVudCBleHBvc2Ugc3RhbGUgZGF0YQorCSAqIG91dCB3aGVuIHRoZXJlIGlzIHBhcmFsbGVsIGJ1ZmZlcmVkIHJlYWQgKHdoaWNoIGRvZXMKKwkgKiBub3QgaG9sZCB0aGUgaV9tdXRleCBsb2NrKSB3aGlsZSBkaXJlY3QgSU8gd3JpdGUgaGFzCisJICogbm90IGNvbXBsZXRlZC4gRElPIHJlcXVlc3Qgb24gaG9sZXMgZmluYWxseSBmYWxscyBiYWNrCisJICogdG8gYnVmZmVyZWQgSU8gZm9yIHRoaXMgcmVhc29uLgorCSAqCisJICogRm9yIGV4dDQgZXh0ZW50IGJhc2VkIGZpbGUsIHNpbmNlIHdlIHN1cHBvcnQgZmFsbG9jYXRlLAorCSAqIG5ldyBhbGxvY2F0ZWQgZXh0ZW50IGFzIHVuaW5pdGlhbGl6ZWQsIGZvciBob2xlcywgd2UKKwkgKiBjb3VsZCBmYWxsb2NhdGUgYmxvY2tzIGZvciBob2xlcywgdGh1cyBwYXJhbGxlbAorCSAqIGJ1ZmZlcmVkIElPIHJlYWQgd2lsbCB6ZXJvIG91dCB0aGUgcGFnZSB3aGVuIHJlYWQgb24KKwkgKiBhIGhvbGUgd2hpbGUgcGFyYWxsZWwgRElPIHdyaXRlIHRvIHRoZSBob2xlIGhhcyBub3QgY29tcGxldGVkLgorCSAqCisJICogd2hlbiB3ZSBjb21lIGhlcmUsIHdlIGtub3cgaXQncyBhIGRpcmVjdCBJTyB3cml0ZSB0bworCSAqIHRvIHRoZSBtaWRkbGUgb2YgZmlsZSAoPGlfc2l6ZSkKKwkgKiBzbyBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBmbGFnIGZyb20gVkZTLgorCSAqLworCWNyZWF0ZSA9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVDsKKworCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCisJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKKwlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGRpb19jcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgYmhfcmVzdWx0LAorCQkJICAgICAgY3JlYXRlKTsKKwlpZiAocmV0ID4gMCkgeworCQliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJCXJldCA9IDA7CisJfQorCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZXh0NF9mcmVlX2lvX2VuZChleHQ0X2lvX2VuZF90ICppbykKK3sKKwlCVUdfT04oIWlvKTsKKwlpcHV0KGlvLT5pbm9kZSk7CisJa2ZyZWUoaW8pOworfQorc3RhdGljIHZvaWQgZHVtcF9haW9fZGlvX2xpc3Qoc3RydWN0IGlub2RlICogaW5vZGUpCit7CisjaWZkZWYJRVhUNF9ERUJVRworCXN0cnVjdCBsaXN0X2hlYWQgKmN1ciwgKmJlZm9yZSwgKmFmdGVyOworCWV4dDRfaW9fZW5kX3QgKmlvLCAqaW8wLCAqaW8xOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWV4dDRfZGVidWcoImlub2RlICVsdSBhaW8gZGlvIGxpc3QgaXMgZW1wdHlcbiIsIGlub2RlLT5pX2lubyk7CisJCXJldHVybjsKKwl9CisKKwlleHQ0X2RlYnVnKCJEdW1wIGlub2RlICVsdSBhaW9fZGlvX2NvbXBsZXRlZF9JTyBsaXN0IFxuIiwgaW5vZGUtPmlfaW5vKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvLCAmRVhUNF9JKGlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QsIGxpc3QpeworCQljdXIgPSAmaW8tPmxpc3Q7CisJCWJlZm9yZSA9IGN1ci0+cHJldjsKKwkJaW8wID0gY29udGFpbmVyX29mKGJlZm9yZSwgZXh0NF9pb19lbmRfdCwgbGlzdCk7CisJCWFmdGVyID0gY3VyLT5uZXh0OworCQlpbzEgPSBjb250YWluZXJfb2YoYWZ0ZXIsIGV4dDRfaW9fZW5kX3QsIGxpc3QpOworCisJCWV4dDRfZGVidWcoImlvIDB4JXAgZnJvbSBpbm9kZSAlbHUscHJldiAweCVwLG5leHQgMHglcFxuIiwKKwkJCSAgICBpbywgaW5vZGUtPmlfaW5vLCBpbzAsIGlvMSk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBjaGVjayBhIHJhbmdlIG9mIHNwYWNlIGFuZCBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soZXh0NF9pb19lbmRfdCAqaW8pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKKwlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKKwlzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCWludCByZXQgPSAwOworCisJZXh0NF9kZWJ1ZygiZW5kX2Fpb19kaW9fb25sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCisJCSAgICJsaXN0LT5wcmV2IDB4JXBcbiIsCisJICAgICAgICAgICBpbywgaW5vZGUtPmlfaW5vLCBpby0+bGlzdC5uZXh0LCBpby0+bGlzdC5wcmV2KTsKKworCWlmIChsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaW8tPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pCisJCXJldHVybiByZXQ7CisKKwlpZiAob2Zmc2V0ICsgc2l6ZSA8PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwgb2Zmc2V0LCBzaXplKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogZmFpbGVkIHRvIGNvbnZlcnQgdW53cml0dGVuIgorCQkJImV4dGVudHMgdG8gd3JpdHRlbiBleHRlbnRzLCBlcnJvciBpcyAlZCIKKwkJCSIgaW8gaXMgc3RpbGwgb24gaW5vZGUgJWx1IGFpbyBkaW8gbGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldCwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLworCWlvLT5mbGFnID0gMDsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIHdvcmsgb24gY29tcGxldGVkIGFpbyBkaW8gSU8sIHRvIGNvbnZlcnQgdW53cml0dGVuIGV4dGVudHMgdG8gZXh0ZW50cworICovCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9haW9fZGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWV4dDRfaW9fZW5kX3QgKmlvICA9IGNvbnRhaW5lcl9vZih3b3JrLCBleHQ0X2lvX2VuZF90LCB3b3JrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW8tPmlub2RlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGlvKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCQlsaXN0X2RlbF9pbml0KCZpby0+bGlzdCk7CisJCWV4dDRfZnJlZV9pb19lbmQoaW8pOworCX0KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK30KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4dDRfc3luY19maWxlKCkuCisgKgorICogV2hlbiBBSU8gRElPIElPIGlzIGNvbXBsZXRlZCwgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4KKyAqIGV4dGVudHMgdG8gd3JpdHRlbiBpcyBxdWV1ZWQgb24gd29ya3F1ZXVlIGJ1dCBtYXkgbm90IGdldCBpbW1lZGlhdGVseQorICogc2NoZWR1bGVkLiBXaGVuIGZzeW5jIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlCisgKiBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBmc3luYyByZXR1cm5zLgorICogVGhlIGlub2RlIGtlZXBzIHRyYWNrIG9mIGEgbGlzdCBvZiBjb21wbGV0ZWQgQUlPIGZyb20gRElPIHBhdGgKKyAqIHRoYXQgbWlnaHQgbmVlZHMgdG8gZG8gdGhlIGNvbnZlcnNpb24uIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhyb3VnaAorICogdGhlIGxpc3QgYW5kIGNvbnZlcnQgdGhlIHJlbGF0ZWQgdW53cml0dGVuIGV4dGVudHMgdG8gd3JpdHRlbi4KKyAqLworaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZXh0NF9pb19lbmRfdCAqaW87CisJaW50IHJldCA9IDA7CisJaW50IHJldDIgPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSkKKwkJcmV0dXJuIHJldDsKKworCWR1bXBfYWlvX2Rpb19saXN0KGlub2RlKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWlvID0gbGlzdF9lbnRyeShFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdC5uZXh0LAorCQkJCWV4dDRfaW9fZW5kX3QsIGxpc3QpOworCQkvKgorCQkgKiBDYWxsaW5nIGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKCkgdG8gY29udmVydCBjb21wbGV0ZWQKKwkJICogSU8gdG8gd3JpdHRlbi4KKwkJICoKKwkJICogV2hlbiBleHQ0X3N5bmNfZmlsZSgpIGlzIGNhbGxlZCwgcnVuX3F1ZXVlKCkgbWF5IGFscmVhZHkKKwkJICogYWJvdXQgdG8gZmx1c2ggdGhlIHdvcmsgY29ycmVzcG9uZGluZyB0byB0aGlzIGlvIHN0cnVjdHVyZS4KKwkJICogSXQgd2lsbCBiZSB1cHNldCBpZiBpdCBmb3VuZHMgdGhlIGlvIHN0cnVjdHVyZSByZWxhdGVkCisJCSAqIHRvIHRoZSB3b3JrLXRvLWJlIHNjaGVkdWxlIGlzIGZyZWVkLgorCQkgKgorCQkgKiBUaHVzIHdlIG5lZWQgdG8ga2VlcCB0aGUgaW8gc3RydWN0dXJlIHN0aWxsIHZhbGlkIGhlcmUgYWZ0ZXIKKwkJICogY29udmVydGlvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCisJCSAqIGF2b2lkIGRvdWJsZSBjb252ZXJ0aW5nIGZyb20gYm90aCBmc3luYyBhbmQgYmFja2dyb3VuZCB3b3JrCisJCSAqIHF1ZXVlIHdvcmsuCisJCSAqLworCQlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0MiA9IHJldDsKKwkJZWxzZQorCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOworCX0KKwlyZXR1cm4gKHJldDIgPCAwKSA/IHJldDIgOiAwOworfQorCitzdGF0aWMgZXh0NF9pb19lbmRfdCAqZXh0NF9pbml0X2lvX2VuZCAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppbyA9IE5VTEw7CisKKwlpbyA9IGttYWxsb2Moc2l6ZW9mKCppbyksIEdGUF9OT0ZTKTsKKworCWlmIChpbykgeworCQlpZ3JhYihpbm9kZSk7CisJCWlvLT5pbm9kZSA9IGlub2RlOworCQlpby0+ZmxhZyA9IDA7CisJCWlvLT5vZmZzZXQgPSAwOworCQlpby0+c2l6ZSA9IDA7CisJCWlvLT5lcnJvciA9IDA7CisJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2Fpb19kaW9fd29yayk7CisJCUlOSVRfTElTVF9IRUFEKCZpby0+bGlzdCk7CisJfQorCisJcmV0dXJuIGlvOworfQorCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb19kaW8oc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHNzaXplX3Qgc2l6ZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKyAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwkvKiBpZiBub3QgYXN5bmMgZGlyZWN0IElPIG9yIGRpbyB3aXRoIDAgYnl0ZXMgd3JpdGUsIGp1c3QgcmV0dXJuICovCisJaWYgKCFpb19lbmQgfHwgIXNpemUpCisJCXJldHVybjsKKworCWV4dF9kZWJ1ZygiZXh0NF9lbmRfaW9fZGlvKCk6IGlvX2VuZCAweCVwIgorCQkgICJmb3IgaW5vZGUgJWx1LCBpb2NiIDB4JXAsIG9mZnNldCAlbGx1LCBzaXplICVsbHVcbiIsCisgCQkgIGlvY2ItPnByaXZhdGUsIGlvX2VuZC0+aW5vZGUtPmlfaW5vLCBpb2NiLCBvZmZzZXQsCisJCSAgc2l6ZSk7CisKKwkvKiBpZiBub3QgYWlvIGRpbyB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBqdXN0IGZyZWUgaW8gYW5kIHJldHVybiAqLworCWlmIChpb19lbmQtPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4peworCQlleHQ0X2ZyZWVfaW9fZW5kKGlvX2VuZCk7CisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaW9fZW5kLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW9fZW5kLT5zaXplID0gc2l6ZTsKKwl3cSA9IEVYVDRfU0IoaW9fZW5kLT5pbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3E7CisKKwkvKiBxdWV1ZSB0aGUgd29yayB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4gKi8KKwlxdWV1ZV93b3JrKHdxLCAmaW9fZW5kLT53b3JrKTsKKworCS8qIEFkZCB0aGUgaW9fZW5kIHRvIHBlci1pbm9kZSBjb21wbGV0ZWQgYWlvIGRpbyBsaXN0Ki8KKwlsaXN0X2FkZF90YWlsKCZpb19lbmQtPmxpc3QsCisJCSAmRVhUNF9JKGlvX2VuZC0+aW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCk7CisJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Cit9CisvKgorICogRm9yIGV4dDQgZXh0ZW50IGZpbGVzLCBleHQ0IHdpbGwgZG8gZGlyZWN0LWlvIHdyaXRlIHRvIGhvbGVzLAorICogcHJlYWxsb2NhdGVkIGV4dGVudHMsIGFuZCB0aG9zZSB3cml0ZSBleHRlbmQgdGhlIGZpbGUsIG5vIG5lZWQgdG8KKyAqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJTy4KKyAqCisgKiBGb3IgaG9sZXMsIHdlIGZhbGxvY2F0ZSB0aG9zZSBibG9ja3MsIG1hcmsgdGhlbSBhcyB1bmludGlhbGl6ZWQKKyAqIElmIHRob3NlIGJsb2NrcyB3ZXJlIHByZWFsbG9jYXRlZCwgd2UgbWFyayBzdXJlIHRoZXkgYXJlIHNwbGl0ZWQsIGJ1dAorICogc3RpbGwga2VlcCB0aGUgcmFuZ2UgdG8gd3JpdGUgYXMgdW5pbnRpYWxpemVkLgorICoKKyAqIFRoZSB1bndycml0dGVuIGV4dGVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiB3aGVuIERJTyBpcyBjb21wbGV0ZWQuCisgKiBGb3IgYXN5bmMgZGlyZWN0IElPLCBzaW5jZSB0aGUgSU8gbWF5IHN0aWxsIHBlbmRpbmcgd2hlbiByZXR1cm4sIHdlCisgKiBzZXQgdXAgYW4gZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkbyB0aGUgY29udmVydGlvbgorICogd2hlbiBhc3luYyBkaXJlY3QgSU8gY29tcGxldGVkLgorICoKKyAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQorICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKKyAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KKyAqCisgKi8KK3N0YXRpYyBzc2l6ZV90IGV4dDRfZXh0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXNzaXplX3QgcmV0OworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKworCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CisJaWYgKHJ3ID09IFdSSVRFICYmIGZpbmFsX3NpemUgPD0gaW5vZGUtPmlfc2l6ZSkgeworCQkvKgorIAkJICogV2UgY291bGQgZGlyZWN0IHdyaXRlIHRvIGhvbGVzIGFuZCBmYWxsb2NhdGUuCisJCSAqCisgCQkgKiBBbGxvY2F0ZWQgYmxvY2tzIHRvIGZpbGwgdGhlIGhvbGUgYXJlIG1hcmtlZCBhcyB1bmluaXRpYWxpemVkCisgCQkgKiB0byBwcmV2ZW50IHBhcmFsZWwgYnVmZmVyZWQgcmVhZCB0byBleHBvc2UgdGhlIHN0YWxlIGRhdGEKKyAJCSAqIGJlZm9yZSBESU8gY29tcGxldGUgdGhlIGRhdGEgSU8uCisJCSAqCisgCQkgKiBBcyB0byBwcmV2aW91c2x5IGZhbGxvY2F0ZWQgZXh0ZW50cywgZXh0NCBnZXRfYmxvY2sKKyAJCSAqIHdpbGwganVzdCBzaW1wbHkgbWFyayB0aGUgYnVmZmVyIG1hcHBlZCBidXQgc3RpbGwKKyAJCSAqIGtlZXAgdGhlIGV4dGVudHMgdW5pbml0aWFsaXplZC4KKyAJCSAqCisJCSAqIGZvciBub24gQUlPIGNhc2UsIHdlIHdpbGwgY29udmVydCB0aG9zZSB1bndyaXR0ZW4gZXh0ZW50cworCQkgKiB0byB3cml0dGVuIGFmdGVyIHJldHVybiBiYWNrIGZyb20gYmxvY2tkZXZfZGlyZWN0X0lPLgorCQkgKgorCQkgKiBmb3IgYXN5bmMgRElPLCB0aGUgY29udmVyc2lvbiBuZWVkcyB0byBiZSBkZWZlcmVkIHdoZW4KKwkJICogdGhlIElPIGlzIGNvbXBsZXRlZC4gVGhlIGV4dDQgZW5kX2lvIGNhbGxiYWNrIGZ1bmN0aW9uCisJCSAqIHdpbGwgYmUgY2FsbGVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY29udmVyc2lvbiB3b3JrLgorCQkgKiBIZXJlIGZvciBhc3luYyBjYXNlLCB3ZSBhbGxvY2F0ZSBhbiBpb19lbmQgc3RydWN0dXJlIHRvCisJCSAqIGhvb2sgdG8gdGhlIGlvY2IuCisgCQkgKi8KKwkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJaWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKSB7CisJCQlpb2NiLT5wcml2YXRlID0gZXh0NF9pbml0X2lvX2VuZChpbm9kZSk7CisJCQlpZiAoIWlvY2ItPnByaXZhdGUpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkvKgorCQkJICogd2Ugc2F2ZSB0aGUgaW8gc3RydWN0dXJlIGZvciBjdXJyZW50IGFzeW5jCisJCQkgKiBkaXJlY3QgSU8sIHNvIHRoYXQgbGF0ZXIgZXh0NF9nZXRfYmxvY2tzKCkKKwkJCSAqIGNvdWxkIGZsYWcgdGhlIGlvIHN0cnVjdHVyZSB3aGV0aGVyIHRoZXJlCisJCQkgKiBpcyBhIHVud3JpdHRlbiBleHRlbnRzIG5lZWRzIHRvIGJlIGNvbnZlcnRlZAorCQkJICogd2hlbiBJTyBpcyBjb21wbGV0ZWQuCisJCQkgKi8KKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gaW9jYi0+cHJpdmF0ZTsKKwkJfQorCisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsCisJCQkJCSBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCisJCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJCSBleHQ0X2dldF9ibG9ja19kaW9fd3JpdGUsCisJCQkJCSBleHQ0X2VuZF9pb19kaW8pOworCQlpZiAoaW9jYi0+cHJpdmF0ZSkKKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJLyoKKwkJICogVGhlIGlvX2VuZCBzdHJ1Y3R1cmUgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlLAorCQkgKiB0aGF0IHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZQorCQkgKiByZWZlcmVuY2UgdG8gdGhlIGlub2RlIG5lZWQgdG8gYmUgZHJvcHBlZCwgd2hlbiBJTyBpcworCQkgKiBjb21wbGV0ZSwgZXZlbiB3aXRoIDAgYnl0ZSB3cml0ZSwgb3IgZmFpbGVkLgorCQkgKgorCQkgKiBJbiB0aGUgc3VjY2Vzc2Z1bCBBSU8gRElPIGNhc2UsIHRoZSBpb19lbmQgc3RydWN0dXJlIHdpbGwgYmUKKwkJICogZGVzY3Ryb3llZCBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgd2lsbCBiZSBkcm9wcGVkCisJCSAqIGFmdGVyIHRoZSBlbmRfaW8gY2FsbCBiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKwkJICoKKwkJICogSW4gdGhlIGNhc2UgdGhlcmUgaXMgMCBieXRlIHdyaXRlLCBvciBlcnJvciBjYXNlLCBzaW5jZQorCQkgKiBWRlMgZGlyZWN0IElPIHdvbid0IGludm9rZSB0aGUgZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwKKwkJICogd2UgbmVlZCB0byBmcmVlIHRoZSBlbmRfaW8gc3RydWN0dXJlIGhlcmUuCisJCSAqLworCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiByZXQgPD0gMCAmJiBpb2NiLT5wcml2YXRlKSB7CisJCQlleHQ0X2ZyZWVfaW9fZW5kKGlvY2ItPnByaXZhdGUpOworCQkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCX0gZWxzZSBpZiAocmV0ID4gMCAmJiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmCisJCQkJICAgICAgIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTikpIHsKKwkJCWludCBlcnI7CisJCQkvKgorCQkJICogZm9yIG5vbiBBSU8gY2FzZSwgc2luY2UgdGhlIElPIGlzIGFscmVhZHkKKwkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnRpb24gcmlnaHQgaGVyZQorCQkJICovCisJCQllcnIgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCisJCQkJCQkJICAgICBvZmZzZXQsIHJldCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXQgPSBlcnI7CisJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmb3Igd3JpdGUgdGhlIHRoZSBlbmQgb2YgZmlsZSBjYXNlLCB3ZSBmYWxsIGJhY2sgdG8gb2xkIHdheSAqLworCXJldHVybiBleHQ0X2luZF9kaXJlY3RfSU8ocncsIGlvY2IsIGlvdiwgb2Zmc2V0LCBucl9zZWdzKTsKK30KKworc3RhdGljIHNzaXplX3QgZXh0NF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKworCWlmIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQlyZXR1cm4gZXh0NF9leHRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7CisKKwlyZXR1cm4gZXh0NF9pbmRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7Cit9CisKIC8qCiAgKiBQYWdlcyBjYW4gYmUgbWFya2VkIGRpcnR5IGNvbXBsZXRlbHkgYXN5bmNocm9ub3VzbHkgZnJvbSBleHQ0J3Mgam91cm5hbGxpbmcKICAqIGFjdGl2aXR5LiAgQnkgZmlsZW1hcF9zeW5jX3B0ZSgpLCB0cnlfdG9fdW5tYXBfb25lKCksIGV0Yy4gIFdlIGNhbm5vdCBkbwpAQCAtNDU1MSw4ICs1MDAxLDcgQEAKICAqLwogc3RhdGljIGludCBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQlpbnQgZG9fc3luYykKKwkJCQlzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKQogewogCXN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CkBAIC00NjUzLDIyICs1MTAyLDEwIEBACiAJCXJhd19pbm9kZS0+aV9leHRyYV9pc2l6ZSA9IGNwdV90b19sZTE2KGVpLT5pX2V4dHJhX2lzaXplKTsKIAl9CiAKLQkvKgotCSAqIElmIHdlJ3JlIG5vdCB1c2luZyBhIGpvdXJuYWwgYW5kIHdlIHdlcmUgY2FsbGVkIGZyb20KLQkgKiBleHQ0X3dyaXRlX2lub2RlKCkgdG8gc3luYyB0aGUgaW5vZGUgKG1ha2luZyBkb19zeW5jIHRydWUpLAotCSAqIHdlIGNhbiBqdXN0IHVzZSBzeW5jX2RpcnR5X2J1ZmZlcigpIGRpcmVjdGx5IHRvIGRvIG91ciBkaXJ0eQotCSAqIHdvcmsuICBUZXN0aW5nIHNfam91cm5hbCBoZXJlIGlzIGEgYml0IHJlZHVuZGFudCBidXQgaXQncwotCSAqIHdvcnRoIGl0IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUgdHJvdWJsZS4KLQkgKi8KLQlpZiAoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbCA9PSBOVUxMICYmIGRvX3N5bmMpIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBzeW5jX2RpcnR5X2J1ZmZlciIpOwotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JfSBlbHNlIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSByYzsKLQl9CisJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCXJjID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCWlmICghZXJyKQorCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ORVc7CiAKIG91dF9icmVsc2U6CkBAIC00NzM2LDggKzUxNzMsMTYgQEAKIAkJZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaWxvYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShFWFQ0X05PSk9VUk5BTF9IQU5ETEUsCi0JCQkJCSAgIGlub2RlLCAmaWxvYywgd2FpdCk7CisJCWlmICh3YWl0KQorCQkJc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7CisJCWlmIChidWZmZXJfcmVxKGlsb2MuYmgpICYmICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHsKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCSAgICJJTyBlcnJvciBzeW5jaW5nIGlub2RlLCAiCisJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCisJCQkJICAgaW5vZGUtPmlfaW5vLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpaWxvYy5iaC0+Yl9ibG9ja25yKTsKKwkJCWVyciA9IC1FSU87CisJCX0KIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTUwMzMsNyArNTQ3OCw3IEBACiAJZ2V0X2JoKGlsb2MtPmJoKTsKIAogCS8qIGV4dDRfZG9fdXBkYXRlX2lub2RlKCkgZG9lcyBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEgKi8KLQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jLCAwKTsKKwllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jKTsKIAlwdXRfYmgoaWxvYy0+YmgpOwogCXJldHVybiBlcnI7CiB9CkBAIC01MTc3LDI3ICs1NjIyLDE0IEBACiAgKi8KIHZvaWQgZXh0NF9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWhhbmRsZV90ICpjdXJyZW50X2hhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCWhhbmRsZV90ICpoYW5kbGU7CiAKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGN1cnJlbnRfaGFuZGxlKSkgewotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoY3VycmVudF9oYW5kbGUsIGlub2RlKTsKLQkJcmV0dXJuOwotCX0KLQogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMik7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlnb3RvIG91dDsKLQlpZiAoY3VycmVudF9oYW5kbGUgJiYKLQkJY3VycmVudF9oYW5kbGUtPmhfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKSB7Ci0JCS8qIFRoaXMgdGFzayBoYXMgYSB0cmFuc2FjdGlvbiBvcGVuIGFnYWluc3QgYSBkaWZmZXJlbnQgZnMgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiB0cmFuc2FjdGlvbnMgZG8gbm90IG1hdGNoIVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQlqYmRfZGVidWcoNSwgIm1hcmtpbmcgZGlydHkuICBvdXRlciBoYW5kbGU9JXBcbiIsCi0JCQkJY3VycmVudF9oYW5kbGUpOwotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JfQorCisJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIG91dDoKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGU5YzYxODkuLmJiYTEyODIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yMDk2LDIwNyArMjA5Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIEVYVDRfTUJfSElTVE9SWQotc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uIHsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpoaXN0b3J5OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHN0YXJ0OwotCWludCBtYXg7Ci19OwotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkoc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzLAotCQkJCQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmIChocyA9PSBzLT5oaXN0b3J5ICsgcy0+bWF4KQotCQlocyA9IHMtPmhpc3Rvcnk7Ci0JaWYgKCFmaXJzdCAmJiBocyA9PSBzLT5oaXN0b3J5ICsgcy0+c3RhcnQpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlIChocy0+b3JpZy5mZV9sZW4gPT0gMCkgewotCQlocysrOwotCQlpZiAoaHMgPT0gcy0+aGlzdG9yeSArIHMtPm1heCkKLQkJCWhzID0gcy0+aGlzdG9yeTsKLQkJaWYgKGhzID09IHMtPmhpc3RvcnkgKyBzLT5zdGFydCkKLQkJCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gaHM7Ci19Ci0KLXN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHM7Ci0JaW50IGwgPSAqcG9zOwotCi0JaWYgKGwgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQlocyA9IGV4dDRfbWJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPmhpc3RvcnkgKyBzLT5zdGFydCwgMSk7Ci0JaWYgKCFocykKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKC0tbCAmJiAoaHMgPSBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKSkgIT0gTlVMTCk7Ci0JcmV0dXJuIGhzOwotfQotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9zZXFfaGlzdG9yeV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LAotCQkJCSAgICAgIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+aGlzdG9yeSArIHMtPnN0YXJ0LCAxKTsKLQllbHNlCi0JCXJldHVybiBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKTsKLX0KLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JY2hhciBidWZbMjVdLCBidWYyWzI1XSwgYnVmM1syNV0sICpmbXQ7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHMgPSB2OwotCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01cyAlLThzICUtMjNzICUtMjNzICUtMjNzICUtNXMgIgotCQkJCSIlLTVzICUtMnMgJS02cyAlLTVzICUtNXMgJS02c1xuIiwKLQkJCSAgInBpZCIsICJpbm9kZSIsICJvcmlnaW5hbCIsICJnb2FsIiwgInJlc3VsdCIsICJmb3VuZCIsCi0JCQkgICAiZ3JwcyIsICJjciIsICJmbGFncyIsICJtZXJnZSIsICJ0YWlsIiwgImJyb2tlbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaHMtPm9wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlmbXQgPSAiJS01dSAlLTh1ICUtMjNzICUtMjNzICUtMjNzICUtNXUgJS01dSAlLTJ1ICIKLQkJCSIweCUwNHggJS01cyAlLTV1ICUtNnVcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzcHJpbnRmKGJ1ZjMsICIldS8lZC8ldUAldSIsIGhzLT5nb2FsLmZlX2dyb3VwLAotCQkJaHMtPmdvYWwuZmVfc3RhcnQsIGhzLT5nb2FsLmZlX2xlbiwKLQkJCWhzLT5nb2FsLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsIGJ1ZjMsIGJ1ZjIsCi0JCQkJaHMtPmZvdW5kLCBocy0+Z3JvdXBzLCBocy0+Y3IsIGhzLT5mbGFncywKLQkJCQlocy0+bWVyZ2VkID8gIk0iIDogIiIsIGhzLT50YWlsLAotCQkJCWhzLT5idWRkeSA/IDEgPDwgaHMtPmJ1ZGR5IDogMCk7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKSB7Ci0JCWZtdCA9ICIlLTV1ICUtOHUgJS0yM3MgJS0yM3MgJS0yM3NcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsICIiLCBidWYyKTsKLQl9IGVsc2UgaWYgKGhzLT5vcCA9PSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRCkgewotCQlzcHJpbnRmKGJ1ZjIsICIldS8lZC8ldSIsIGhzLT5yZXN1bHQuZmVfZ3JvdXAsCi0JCQlocy0+cmVzdWx0LmZlX3N0YXJ0LCBocy0+cmVzdWx0LmZlX2xlbik7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01dSAlLTh1ICUtMjNzIGRpc2NhcmRcbiIsCi0JCQkJaHMtPnBpZCwgaHMtPmlubywgYnVmMik7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX0ZSRUUpIHsKLQkJc3ByaW50ZihidWYyLCAiJXUvJWQvJXUiLCBocy0+cmVzdWx0LmZlX2dyb3VwLAotCQkJaHMtPnJlc3VsdC5mZV9zdGFydCwgaHMtPnJlc3VsdC5mZV9sZW4pOwotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNXUgJS04dSAlLTIzcyBmcmVlXG4iLAotCQkJCWhzLT5waWQsIGhzLT5pbm8sIGJ1ZjIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZXh0NF9tYl9zZXFfaGlzdG9yeV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BzID0gewotCS5zdGFydCAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0LAotCS5uZXh0ICAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X25leHQsCi0JLnN0b3AgICA9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfc3RvcCwKLQkuc2hvdyAgID0gZXh0NF9tYl9zZXFfaGlzdG9yeV9zaG93LAotfTsKLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IFBERShpbm9kZSktPmRhdGE7Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzOwotCWludCByYzsKLQlpbnQgc2l6ZTsKLQotCWlmICh1bmxpa2VseShzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jcy0+c2IgPSBzYjsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBleHQ0X21iX2hpc3RvcnkpICogc2JpLT5zX21iX2hpc3RvcnlfbWF4OwotCXMtPmhpc3RvcnkgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5oaXN0b3J5ID09IE5VTEwpIHsKLQkJa2ZyZWUocyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNwaW5fbG9jaygmc2JpLT5zX21iX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPmhpc3RvcnksIHNiaS0+c19tYl9oaXN0b3J5LCBzaXplKTsKLQlzLT5tYXggPSBzYmktPnNfbWJfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBzYmktPnNfbWJfaGlzdG9yeV9jdXIgJSBzLT5tYXg7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmZXh0NF9tYl9zZXFfaGlzdG9yeV9vcHMpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBzOwotCX0gZWxzZSB7Ci0JCWtmcmVlKHMtPmhpc3RvcnkpOwotCQlrZnJlZShzKTsKLQl9Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9zZXFfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Ja2ZyZWUocy0+aGlzdG9yeSk7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHMtPnNiOwotCWNoYXIgc3RyWzMyXTsKLQlpbnQgdmFsdWU7Ci0KLQlpZiAoY291bnQgPj0gc2l6ZW9mKHN0cikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiAlcyBzdHJpbmcgdG9vIGxvbmcsIG1heCAldSBieXRlc1xuIiwKLQkJCQkibWJfaGlzdG9yeSIsIChpbnQpc2l6ZW9mKHN0cikpOwotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gLUVSQU5HRTsKLQlFWFQ0X1NCKHNiKS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IHZhbHVlOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IGV4dDRfbWJfc2VxX2hpc3RvcnlfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9ncm91cHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZXEtPnByaXZhdGU7CkBAIC0yMzk2LDgyICsyMTk1LDYgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHZvaWQgZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQotCWlmIChzYmktPnNfcHJvYyAhPSBOVUxMKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJtYl9ncm91cHMiLCBzYmktPnNfcHJvYyk7Ci0JCWlmIChzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCQlyZW1vdmVfcHJvY19lbnRyeSgibWJfaGlzdG9yeSIsIHNiaS0+c19wcm9jKTsKLQl9Ci0Ja2ZyZWUoc2JpLT5zX21iX2hpc3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZCBleHQ0X21iX2hpc3RvcnlfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCWludCBpOwotCi0JaWYgKHNiaS0+c19wcm9jICE9IE5VTEwpIHsKLQkJaWYgKHNiaS0+c19tYl9oaXN0b3J5X21heCkKLQkJCXByb2NfY3JlYXRlX2RhdGEoIm1iX2hpc3RvcnkiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKLQkJCQkJICZleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMsIHNiKTsKLQkJcHJvY19jcmVhdGVfZGF0YSgibWJfZ3JvdXBzIiwgU19JUlVHTywgc2JpLT5zX3Byb2MsCi0JCQkJICZleHQ0X21iX3NlcV9ncm91cHNfZm9wcywgc2IpOwotCX0KLQotCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCWkgPSBzYmktPnNfbWJfaGlzdG9yeV9tYXggKiBzaXplb2Yoc3RydWN0IGV4dDRfbWJfaGlzdG9yeSk7Ci0Jc2JpLT5zX21iX2hpc3RvcnkgPSBpID8ga3phbGxvYyhpLCBHRlBfS0VSTkVMKSA6IE5VTEw7Ci0JLyogaWYgd2UgY2FuJ3QgYWxsb2NhdGUgaGlzdG9yeSwgdGhlbiB3ZSBzaW1wbGUgd29uJ3QgdXNlIGl0ICovCi19Ci0KLXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZAotZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihhYy0+YWNfc2IpOwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgaDsKLQotCWlmIChzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoIShhYy0+YWNfb3AgJiBzYmktPnNfbWJfaGlzdG9yeV9maWx0ZXIpKQotCQlyZXR1cm47Ci0KLQloLm9wID0gYWMtPmFjX29wOwotCWgucGlkID0gY3VycmVudC0+cGlkOwotCWguaW5vID0gYWMtPmFjX2lub2RlID8gYWMtPmFjX2lub2RlLT5pX2lubyA6IDA7Ci0JaC5vcmlnID0gYWMtPmFjX29fZXg7Ci0JaC5yZXN1bHQgPSBhYy0+YWNfYl9leDsKLQloLmZsYWdzID0gYWMtPmFjX2ZsYWdzOwotCWguZm91bmQgPSBhYy0+YWNfZm91bmQ7Ci0JaC5ncm91cHMgPSBhYy0+YWNfZ3JvdXBzX3NjYW5uZWQ7Ci0JaC5jciA9IGFjLT5hY19jcml0ZXJpYTsKLQloLnRhaWwgPSBhYy0+YWNfdGFpbDsKLQloLmJ1ZGR5ID0gYWMtPmFjX2J1ZGR5OwotCWgubWVyZ2VkID0gMDsKLQlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlpZiAoYWMtPmFjX2dfZXguZmVfc3RhcnQgPT0gYWMtPmFjX2JfZXguZmVfc3RhcnQgJiYKLQkJCQlhYy0+YWNfZ19leC5mZV9ncm91cCA9PSBhYy0+YWNfYl9leC5mZV9ncm91cCkKLQkJCWgubWVyZ2VkID0gMTsKLQkJaC5nb2FsID0gYWMtPmFjX2dfZXg7Ci0JCWgucmVzdWx0ID0gYWMtPmFjX2ZfZXg7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLQltZW1jcHkoc2JpLT5zX21iX2hpc3RvcnkgKyBzYmktPnNfbWJfaGlzdG9yeV9jdXIsICZoLCBzaXplb2YoaCkpOwotCWlmICgrK3NiaS0+c19tYl9oaXN0b3J5X2N1ciA+PSBzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotfQotCi0jZWxzZQotI2RlZmluZSBleHQ0X21iX2hpc3RvcnlfcmVsZWFzZShzYikKLSNkZWZpbmUgZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpCi0jZW5kaWYKLQogCiAvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgZXh0NF9ncm91cF9pbmZvIGRhdGEgZm9yIHRoZSBnaXZlbiBncm91cC4gKi8KIGludCBleHQ0X21iX2FkZF9ncm91cGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IGdyb3VwLApAQCAtMjY5MCw3ICsyNDEzLDYgQEAKIAlzYmktPnNfbWJfc3RhdHMgPSBNQl9ERUZBVUxUX1NUQVRTOwogCXNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCA9IE1CX0RFRkFVTFRfU1RSRUFNX1RIUkVTSE9MRDsKIAlzYmktPnNfbWJfb3JkZXIyX3JlcXMgPSBNQl9ERUZBVUxUX09SREVSMl9SRVFTOwotCXNiaS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUOwogCXNiaS0+c19tYl9ncm91cF9wcmVhbGxvYyA9IE1CX0RFRkFVTFRfR1JPVVBfUFJFQUxMT0M7CiAKIAlzYmktPnNfbG9jYWxpdHlfZ3JvdXBzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBleHQ0X2xvY2FsaXR5X2dyb3VwKTsKQEAgLTI3MDgsMTIgKzI0MzAsMTIgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJmxnLT5sZ19wcmVhbGxvY19sb2NrKTsKIAl9CiAKLQlleHQ0X21iX2hpc3RvcnlfaW5pdChzYik7CisJaWYgKHNiaS0+c19wcm9jKQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJtYl9ncm91cHMiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKKwkJCQkgJmV4dDRfbWJfc2VxX2dyb3Vwc19mb3BzLCBzYik7CiAKIAlpZiAoc2JpLT5zX2pvdXJuYWwpCiAJCXNiaS0+c19qb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayA9IHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdDsKLQotCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IG1iYWxsb2MgZW5hYmxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OTAsNyArMjUxMiw4IEBACiAJfQogCiAJZnJlZV9wZXJjcHUoc2JpLT5zX2xvY2FsaXR5X2dyb3Vwcyk7Ci0JZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc2IpOworCWlmIChzYmktPnNfcHJvYykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1iX2dyb3VwcyIsIHNiaS0+c19wcm9jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI3Niw3ICsyOTk5LDEwIEBACiAJCQlhdG9taWNfaW5jKCZzYmktPnNfYmFsX2JyZWFrcyk7CiAJfQogCi0JZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2FsbG9jKGFjKTsKKwllbHNlCisJCXRyYWNlX2V4dDRfbWJhbGxvY19wcmVhbGxvYyhhYyk7CiB9CiAKIC8qCkBAIC0zNzc2LDcgKzM1MDIsNiBAQAogCWlmIChhYykgewogCQlhYy0+YWNfc2IgPSBzYjsKIAkJYWMtPmFjX2lub2RlID0gcGEtPnBhX2lub2RlOwotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKIAl9CiAKIAl3aGlsZSAoYml0IDwgZW5kKSB7CkBAIC0zNzk2LDcgKzM1MjEsNyBAQAogCQkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBuZXh0IC0gYml0OwogCQkJYWMtPmFjX2JfZXguZmVfbG9naWNhbCA9IDA7Ci0JCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQkJdHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoYWMpOwogCQl9CiAKIAkJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKGFjLCBwYSwgZ3JwX2Jsa19zdGFydCArIGJpdCwKQEAgLTM4MzEsOSArMzU1Niw2IEBACiAJZXh0NF9ncm91cF90IGdyb3VwOwogCWV4dDRfZ3JwYmxrX3QgYml0OwogCi0JaWYgKGFjKQotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKLQogCXRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShhYywgcGEpOwogCUJVR19PTihwYS0+cGFfZGVsZXRlZCA9PSAwKTsKIAlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsICZiaXQpOwpAQCAtMzg0OCw3ICszNTcwLDcgQEAKIAkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCWFjLT5hY19iX2V4LmZlX2xlbiA9IHBhLT5wYV9sZW47CiAJCWFjLT5hY19iX2V4LmZlX2xvZ2ljYWwgPSAwOwotCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQl0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChhYyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTg5LDcgKzM5MTEsNiBAQAogCXNpemUgPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsICsgYWMtPmFjX29fZXguZmVfbGVuOwogCWlzaXplID0gKGlfc2l6ZV9yZWFkKGFjLT5hY19pbm9kZSkgKyBhYy0+YWNfc2ItPnNfYmxvY2tzaXplIC0gMSkKIAkJPj4gYnNiaXRzOwotCXNpemUgPSBtYXgoc2l6ZSwgaXNpemUpOwogCiAJaWYgKChzaXplID09IGlzaXplKSAmJgogCSAgICAhZXh0NF9mc19pc19idXN5KHNiaSkgJiYKQEAgLTQxOTksNiArMzkyMCw3IEBACiAJfQogCiAJLyogZG9uJ3QgdXNlIGdyb3VwIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzICovCisJc2l6ZSA9IG1heChzaXplLCBpc2l6ZSk7CiAJaWYgKHNpemUgPj0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7CiAJCWFjLT5hY19mbGFncyB8PSBFWFQ0X01CX1NUUkVBTV9BTExPQzsKIAkJcmV0dXJuOwpAQCAtNDczOSw3ICs0NDYxLDYgQEAKIAogCWFjID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2FjX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmIChhYykgewotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRlJFRTsKIAkJYWMtPmFjX2lub2RlID0gaW5vZGU7CiAJCWFjLT5hY19zYiA9IHNiOwogCX0KQEAgLTQ4MDYsNyArNDUyNyw3IEBACiAJCWFjLT5hY19iX2V4LmZlX2dyb3VwID0gYmxvY2tfZ3JvdXA7CiAJCWFjLT5hY19iX2V4LmZlX3N0YXJ0ID0gYml0OwogCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBjb3VudDsKLQkJZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2ZyZWUoYWMpOwogCX0KIAogCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgYmxvY2tfZ3JvdXAsICZlNGIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCAxODhkM2Q3Li4wY2E4MTEwIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtNTIsMTggKzUyLDggQEAKICNkZWZpbmUgbWJfZGVidWcobiwgZm10LCBhLi4uKQogI2VuZGlmCiAKLS8qCi0gKiB3aXRoIEVYVDRfTUJfSElTVE9SWSBtYmFsbG9jIHN0b3JlcyBsYXN0IE4gYWxsb2NhdGlvbnMgaW4gbWVtb3J5Ci0gKiBhbmQgeW91IGNhbiBtb25pdG9yIGl0IGluIC9wcm9jL2ZzL2V4dDQvPGRldj4vbWJfaGlzdG9yeQotICovCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWQogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfQUxMT0MJCTEJLyogYWxsb2NhdGlvbiAqLwogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfUFJFQUxMT0MJMgkvKiBwcmVhbGxvY2F0ZWQgYmxvY2tzIHVzZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQJCTQJLyogcHJlYWxsb2NhdGlvbiBkaXNjYXJkZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0ZSRUUJCTgJLyogZnJlZSAqLwotCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUCQkoRVhUNF9NQl9ISVNUT1JZX0FMTE9DIHwgXAotCQkJCQkgRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKQogCiAvKgogICogSG93IGxvbmcgbWJhbGxvYyBjYW4gbG9vayBmb3IgYSBiZXN0IGV4dGVudCAoaW4gZm91bmQgZXh0ZW50cykKQEAgLTg0LDcgKzc0LDcgQEAKICAqIHdpdGggJ2V4dDRfbWJfc3RhdHMnIGFsbG9jYXRvciB3aWxsIGNvbGxlY3Qgc3RhdHMgdGhhdCB3aWxsIGJlCiAgKiBzaG93biBhdCB1bW91bnQuIFRoZSBjb2xsZWN0aW5nIGNvc3RzIHRob3VnaCEKICAqLwotI2RlZmluZSBNQl9ERUZBVUxUX1NUQVRTCQkxCisjZGVmaW5lIE1CX0RFRkFVTFRfU1RBVFMJCTAKIAogLyoKICAqIGZpbGVzIHNtYWxsZXIgdGhhbiBNQl9ERUZBVUxUX1NUUkVBTV9USFJFU0hPTEQgYXJlIHNlcnZlZApAQCAtMjE3LDIyICsyMDcsNiBAQAogI2RlZmluZSBBQ19TVEFUVVNfRk9VTkQJCTIKICNkZWZpbmUgQUNfU1RBVFVTX0JSRUFLCQkzCiAKLXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgewotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IG9yaWc7CS8qIG9yaWcgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IGdvYWw7CS8qIGdvYWwgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IHJlc3VsdDsJLyogcmVzdWx0IGFsbG9jYXRpb24gKi8KLQl1bnNpZ25lZCBwaWQ7Ci0JdW5zaWduZWQgaW5vOwotCV9fdTE2IGZvdW5kOwkvKiBob3cgbWFueSBleHRlbnRzIGhhdmUgYmVlbiBmb3VuZCAqLwotCV9fdTE2IGdyb3VwczsJLyogaG93IG1hbnkgZ3JvdXBzIGhhdmUgYmVlbiBzY2FubmVkICovCi0JX191MTYgdGFpbDsJLyogd2hhdCB0YWlsIGJyb2tlIHNvbWUgYnVkZHkgKi8KLQlfX3UxNiBidWRkeTsJLyogYnVkZHkgdGhlIHRhaWwgXl5eIGJyb2tlICovCi0JX191MTYgZmxhZ3M7Ci0JX191OCBjcjozOwkvKiB3aGljaCBwaGFzZSB0aGUgcmVzdWx0IGV4dGVudCB3YXMgZm91bmQgYXQgKi8KLQlfX3U4IG9wOjQ7Ci0JX191OCBtZXJnZWQ6MTsKLX07Ci0KIHN0cnVjdCBleHQ0X2J1ZGR5IHsKIAlzdHJ1Y3QgcGFnZSAqYmRfYnVkZHlfcGFnZTsKIAl2b2lkICpiZF9idWRkeTsKQEAgLTI0NywxMyArMjIxLDYgQEAKICNkZWZpbmUgRVhUNF9NQl9CSVRNQVAoZTRiKQkoKGU0YiktPmJkX2JpdG1hcCkKICNkZWZpbmUgRVhUNF9NQl9CVUREWShlNGIpCSgoZTRiKS0+YmRfYnVkZHkpCiAKLSNpZm5kZWYgRVhUNF9NQl9ISVNUT1JZCi1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KICNkZWZpbmUgaW5fcmFuZ2UoYiwgZmlyc3QsIGxlbikJKChiKSA+PSAoZmlyc3QpICYmIChiKSA8PSAoZmlyc3QpICsgKGxlbikgLSAxKQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X2dycF9vZmZzX3RvX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IGJmNTE5ZjIuLmE5M2Q1YjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCXJldHZhbCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4dCk7CisJcmV0dmFsID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXh0LCAwKTsKIGVycl9vdXQ6CiAJaWYgKHBhdGgpIHsKIAkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tb3ZlX2V4dGVudC5jIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCmluZGV4IGMwN2EyOTEuLjI1YjZiMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYworKysgYi9mcy9leHQ0L21vdmVfZXh0ZW50LmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBvcmlnX2lub2RlLAotCQkJCQlvcmlnX3BhdGgsIG5ld19leHQpKQorCQkJCQlvcmlnX3BhdGgsIG5ld19leHQsIDApKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmIChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgb3JpZ19pbm9kZSwKLQkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0KSkKKwkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0LCAwKSkKIAkJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTEwMDEsMTQgKzEwMDEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBvcmlnIGFuZCBkb25vciBzaG91bGQgYmUgZGlmZmVyZW50IGZpbGUgKi8KLQlpZiAob3JpZ19pbm9kZS0+aV9pbm8gPT0gZG9ub3JfaW5vZGUtPmlfaW5vKSB7Ci0JCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgbm90ICIKLQkJCSJiZSBzYW1lIGZpbGUgW2lubzpvcmlnICVsdSwgZG9ub3IgJWx1XVxuIiwKLQkJCW9yaWdfaW5vZGUtPmlfaW5vLCBkb25vcl9pbm9kZS0+aV9pbm8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKiBFeHQ0IG1vdmUgZXh0ZW50IHN1cHBvcnRzIG9ubHkgZXh0ZW50IGJhc2VkIGZpbGUgKi8KIAlpZiAoIShFWFQ0X0kob3JpZ19pbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSB7CiAJCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IG9yaWcgZmlsZSBpcyBub3QgZXh0ZW50cyAiCkBAIC0xMjMyLDYgKzEyMjQsMTQgQEAKIAlpbnQgYmxvY2tfbGVuX2luX3BhZ2U7CiAJaW50IHVuaW5pdDsKIAorCS8qIG9yaWcgYW5kIGRvbm9yIHNob3VsZCBiZSBkaWZmZXJlbnQgZmlsZSAqLworCWlmIChvcmlnX2lub2RlLT5pX2lubyA9PSBkb25vcl9pbm9kZS0+aV9pbm8pIHsKKwkJZXh0NF9kZWJ1ZygiZXh0NCBtb3ZlIGV4dGVudDogVGhlIGFyZ3VtZW50IGZpbGVzIHNob3VsZCBub3QgIgorCQkJImJlIHNhbWUgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLAorCQkJb3JpZ19pbm9kZS0+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHByb3RlY3Qgb3JpZyBhbmQgZG9ub3IgYWdhaW5zdCBhIHRydW5jYXRlICovCiAJcmV0MSA9IG1leHRfaW5vZGVfZG91YmxlX2xvY2sob3JpZ19pbm9kZSwgZG9ub3JfaW5vZGUpOwogCWlmIChyZXQxIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA0MmY4MWQyLi42ZDJjMWI4IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNTE4LDEyICsxNTE4LDggQEAKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJaWYgKGJsb2NrcyA9PSAxICYmICFkeF9mYWxsYmFjayAmJgotCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkgewotCQkJcmV0dmFsID0gbWFrZV9pbmRleGVkX2RpcihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGJoKTsKLQkJCWlmIChyZXR2YWwgPT0gLUVOT1NQQykKLQkJCQlicmVsc2UoYmgpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQorCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkKKwkJCXJldHVybiBtYWtlX2luZGV4ZWRfZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgYmgpOwogCQlicmVsc2UoYmgpOwogCX0KIAliaCA9IGV4dDRfYXBwZW5kKGhhbmRsZSwgZGlyLCAmYmxvY2ssICZyZXR2YWwpOwpAQCAtMTUzMiwxMCArMTUyOCw3IEBACiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSAwOwogCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplLCBibG9ja3NpemUpOwotCXJldHZhbCA9IGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKLQlpZiAocmV0dmFsID09IC1FTk9TUEMpCi0JCWJyZWxzZShiaCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwogfQogCiAvKgpAQCAtMTY2NCw4ICsxNjU3LDcgQEAKIAlpZiAoIWRlKQogCQlnb3RvIGNsZWFudXA7CiAJZXJyID0gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwotCWlmIChlcnIgIT0gLUVOT1NQQykKLQkJYmggPSBOVUxMOworCWJoID0gTlVMTDsKIAlnb3RvIGNsZWFudXA7CiAKIGpvdXJuYWxfZXJyb3I6CkBAIC0yMDc2LDcgKzIwNjgsOCBAQAogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKKwkvKiBleHQ0X2hhbmRsZV92YWxpZCgpIGFzc3VtZXMgYSB2YWxpZCBoYW5kbGVfdCBwb2ludGVyICovCisJaWYgKGhhbmRsZSAmJiAhZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZGY1MzliYS4uZDRjYTkyYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTAsMTMgKzUwLDYgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9leHQ0Lmg+CiAKLXN0YXRpYyBpbnQgZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCA9IDEwMDA7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLCBkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgICBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgIkRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgc2F2ZWQgZm9yIG1iX2hpc3RvcnkiKTsKLQogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpleHQ0X3Byb2Nfcm9vdDsKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqZXh0NF9rc2V0OwogCkBAIC0xODksNiArMTgyLDM2IEBACiAJCWJnLT5iZ19pdGFibGVfdW51c2VkX2hpID0gY3B1X3RvX2xlMTYoY291bnQgPj4gMTYpOwogfQogCisKKy8qIEp1c3QgaW5jcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyBoYW5kbGVfdCAqZXh0NF9nZXRfbm9qb3VybmFsKHZvaWQpCit7CisJaGFuZGxlX3QgKmhhbmRsZSA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbnQgPSAodW5zaWduZWQgbG9uZyloYW5kbGU7CisKKwlCVUdfT04ocmVmX2NudCA+PSBFWFQ0X05PSk9VUk5BTF9NQVhfUkVGX0NPVU5UKTsKKworCXJlZl9jbnQrKzsKKwloYW5kbGUgPSAoaGFuZGxlX3QgKilyZWZfY250OworCisJY3VycmVudC0+am91cm5hbF9pbmZvID0gaGFuZGxlOworCXJldHVybiBoYW5kbGU7Cit9CisKKworLyogRGVjcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyB2b2lkIGV4dDRfcHV0X25vam91cm5hbChoYW5kbGVfdCAqaGFuZGxlKQoreworCXVuc2lnbmVkIGxvbmcgcmVmX2NudCA9ICh1bnNpZ25lZCBsb25nKWhhbmRsZTsKKworCUJVR19PTihyZWZfY250ID09IDApOworCisJcmVmX2NudC0tOworCWhhbmRsZSA9IChoYW5kbGVfdCAqKXJlZl9jbnQ7CisKKwljdXJyZW50LT5qb3VybmFsX2luZm8gPSBoYW5kbGU7Cit9CisKIC8qCiAgKiBXcmFwcGVycyBmb3IgamJkMl9qb3VybmFsX3N0YXJ0L2VuZC4KICAqCkBAIC0yMTUsMTEgKzIzOCw3IEBACiAJCX0KIAkJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydChqb3VybmFsLCBuYmxvY2tzKTsKIAl9Ci0JLyoKLQkgKiBXZSdyZSBub3Qgam91cm5hbGluZywgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpbmRpY2F0aW9uLgotCSAqLwotCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IEVYVDRfTk9KT1VSTkFMX0hBTkRMRTsKLQlyZXR1cm4gY3VycmVudC0+am91cm5hbF9pbmZvOworCXJldHVybiBleHQ0X2dldF9ub2pvdXJuYWwoKTsKIH0KIAogLyoKQEAgLTIzNSwxMSArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpIHsKLQkJLyoKLQkJICogRG8gdGhpcyBoZXJlIHNpbmNlIHdlIGRvbid0IGNhbGwgamJkMl9qb3VybmFsX3N0b3AoKSBpbgotCQkgKiBuby1qb3VybmFsIG1vZGUuCi0JCSAqLwotCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOworCQlleHQ0X3B1dF9ub2pvdXJuYWwoaGFuZGxlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNiID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X2pvdXJuYWwtPmpfcHJpdmF0ZTsKQEAgLTU4MCw2ICs1OTUsOSBAQAogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS0+c19lczsKIAlpbnQgaSwgZXJyOwogCisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJZGVzdHJveV93b3JrcXVldWUoc2JpLT5kaW9fdW53cml0dGVuX3dxKTsKKwogCWxvY2tfc3VwZXIoc2IpOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKHNiLT5zX2RpcnQpCkBAIC02ODQsNiArNzAyLDggQEAKIAllaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOwogCWVpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcgPSAwOwogCXNwaW5fbG9ja19pbml0KCYoZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jaykpOworCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QpOworCWVpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CiAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CkBAIC0xMDUyLDcgKzEwNzIsNyBAQAogCU9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfZGV2LAogCU9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsCiAJT3B0X2Fib3J0LCBPcHRfZGF0YV9qb3VybmFsLCBPcHRfZGF0YV9vcmRlcmVkLCBPcHRfZGF0YV93cml0ZWJhY2ssCi0JT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLCBPcHRfbWJfaGlzdG9yeV9sZW5ndGgsCisJT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLAogCU9wdF91c3JqcXVvdGEsIE9wdF9ncnBqcXVvdGEsIE9wdF9vZmZ1c3JqcXVvdGEsIE9wdF9vZmZncnBqcXVvdGEsCiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfbm9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLApAQCAtMTA5OSw3ICsxMTE5LDYgQEAKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKIAl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAotCXtPcHRfbWJfaGlzdG9yeV9sZW5ndGgsICJtYl9oaXN0b3J5X2xlbmd0aD0ldSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMjgxLDkgKzEzMDAsMTEgQEAKIAkJCSpqb3VybmFsX2Rldm51bSA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2NoZWNrc3VtOgotCQkJYnJlYWs7CS8qIEtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0OgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0FTWU5DX0NPTU1JVCk7CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vbG9hZDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9MT0FEKTsKQEAgLTEzNDAsMTMgKzEzNjEsNiBAQAogCQljYXNlIE9wdF9kYXRhX2Vycl9pZ25vcmU6CiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X21iX2hpc3RvcnlfbGVuZ3RoOgotCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAob3B0aW9uIDwgMCkKLQkJCQlyZXR1cm4gMDsKLQkJCXNiaS0+c19tYl9oaXN0b3J5X21heCA9IG9wdGlvbjsKLQkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CiAJCQlxdHlwZSA9IFVTUlFVT1RBOwpAQCAtMTY0NiwxMyArMTY2MCw2IEBACiAJCQlFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpLAogCQkJc2JpLT5zX21vdW50X29wdCk7CiAKLQlpZiAoRVhUNF9TQihzYiktPnNfam91cm5hbCkgewotCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiJXMgam91cm5hbCBvbiAlcyIsCi0JCSAgICAgICBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2lub2RlID8gImludGVybmFsIiA6Ci0JCSAgICAgICAiZXh0ZXJuYWwiLCBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2Rldm5hbWUpOwotCX0gZWxzZSB7Ci0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJubyBqb3VybmFsIik7Ci0JfQogCXJldHVybiByZXM7CiB9CiAKQEAgLTIxOTcsNiArMjIwNCw3IEBACiBFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX29yZGVyMl9yZXEsIHNfbWJfb3JkZXIyX3JlcXMpOwogRVhUNF9SV19BVFRSX1NCSV9VSShtYl9zdHJlYW1fcmVxLCBzX21iX3N0cmVhbV9yZXF1ZXN0KTsKIEVYVDRfUldfQVRUUl9TQklfVUkobWJfZ3JvdXBfcHJlYWxsb2MsIHNfbWJfZ3JvdXBfcHJlYWxsb2MpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYXhfd3JpdGViYWNrX21iX2J1bXAsIHNfbWF4X3dyaXRlYmFja19tYl9idW1wKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHsKIAlBVFRSX0xJU1QoZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2NrcyksCkBAIC0yMjEwLDYgKzIyMTgsNyBAQAogCUFUVFJfTElTVChtYl9vcmRlcjJfcmVxKSwKIAlBVFRSX0xJU1QobWJfc3RyZWFtX3JlcSksCiAJQVRUUl9MSVNUKG1iX2dyb3VwX3ByZWFsbG9jKSwKKwlBVFRSX0xJU1QobWF4X3dyaXRlYmFja19tYl9idW1wKSwKIAlOVUxMLAogfTsKIApAQCAtMjQxMyw3ICsyNDIyLDYgQEAKIAlzYmktPnNfY29tbWl0X2ludGVydmFsID0gSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFICogSFo7CiAJc2JpLT5zX21pbl9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUU7CiAJc2JpLT5zX21heF9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUU7Ci0Jc2JpLT5zX21iX2hpc3RvcnlfbWF4ID0gZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aDsKIAogCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CiAKQEAgLTI2NzksNiArMjY4Nyw3IEBACiAJfQogCiAJc2JpLT5zX3N0cmlwZSA9IGV4dDRfZ2V0X3N0cmlwZV9zaXplKHNiaSk7CisJc2JpLT5zX21heF93cml0ZWJhY2tfbWJfYnVtcCA9IDEyODsKIAogCS8qCiAJICogc2V0IHVwIGVub3VnaCBzbyB0aGF0IGl0IGNhbiByZWFkIGFuIGlub2RlCkBAIC0yNzUyLDE0ICsyNzYxLDIwIEBACiAJCWdvdG8gZmFpbGVkX21vdW50NDsKIAl9CiAKLQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAotCQkJCSAgSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwgMCk7Ci0JaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpCi0JCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCisJaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpIHsKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAogCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOwotCWVsc2UKKwl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0NIRUNLU1VNKSkgeworCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsIDApOwogCQlqYmQyX2pvdXJuYWxfY2xlYXJfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCiAJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfSBlbHNlIHsKKwkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsCisJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfQogCiAJLyogV2UgaGF2ZSBub3cgdXBkYXRlZCB0aGUgam91cm5hbCBpZiByZXF1aXJlZCwgc28gd2UgY2FuCiAJICogdmFsaWRhdGUgdGhlIGRhdGEgam91cm5hbGluZyBtb2RlLiAqLwpAQCAtMjc5OCw2ICsyODEzLDEyIEBACiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9CSCk7CiAJCX0KIAl9CisJRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJleHQ0LWRpby11bndyaXR0ZW4iKTsKKwlpZiAoIUVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZmFpbGVkIHRvIGNyZWF0ZSBESU8gd29ya3F1ZXVlXG4iKTsKKwkJZ290byBmYWlsZWRfbW91bnRfd3E7CisJfQorCiAJLyoKIAkgKiBUaGUgamJkMl9qb3VybmFsX2xvYWQgd2lsbCBoYXZlIGRvbmUgYW55IG5lY2Vzc2FyeSBsb2cgcmVjb3ZlcnksCiAJICogc28gd2UgY2FuIHNhZmVseSBtb3VudCB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbSBub3cuCkBAIC0yODQ5LDEyICsyODcwLDEyIEBACiAJCQkgImF2YWlsYWJsZSIpOwogCX0KIAotCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwlpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSAmJgorCSAgICAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSkgewogCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgogCQkJICJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGUiKTsKIAkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJkZWxheWVkIGFsbG9jYXRpb24gZW5hYmxlZCIpOworCX0KIAogCWVyciA9IGV4dDRfc2V0dXBfc3lzdGVtX3pvbmUoc2IpOwogCWlmIChlcnIpIHsKQEAgLTI5MTAsNiArMjkzMSw4IEBACiAKIGZhaWxlZF9tb3VudDQ6CiAJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAibW91bnQgZmFpbGVkIik7CisJZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EpOworZmFpbGVkX21vdW50X3dxOgogCWV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7CiAJaWYgKHNiaS0+c19qb3VybmFsKSB7CiAJCWpiZDJfam91cm5hbF9kZXN0cm95KHNiaS0+c19qb3VybmFsKTsKQEAgLTMxNjQsOSArMzE4Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikKLQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgImJhcnJpZXJzIGVuYWJsZWQiKTsKLQllbHNlCisJaWYgKCEoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikpCiAJCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJiYXJyaWVycyBkaXNhYmxlZCIpOwogCiAJaWYgKCFyZWFsbHlfcmVhZF9vbmx5ICYmIHRlc3Rfb3B0KHNiLCBVUERBVEVfSk9VUk5BTCkpIHsKQEAgLTMzNjEsMTEgKzMzODIsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAl0aWRfdCB0YXJnZXQ7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKIAl0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpOwotCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJaWYgKGpiZDJfam91cm5hbF9zdGFydF9jb21taXQoc2JpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CiAJCWlmICh3YWl0KQotCQkJamJkMl9sb2dfd2FpdF9jb21taXQoRVhUNF9TQihzYiktPnNfam91cm5hbCwgdGFyZ2V0KTsKKwkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KHNiaS0+c19qb3VybmFsLCB0YXJnZXQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMzk1MSwyNyArMzk3NCw2IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotc3RhdGljIGludCBleHQ0ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQkJICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSxzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQ0LWZzICglcyk6IFVwZGF0ZSB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyAiCi0JICAgICAgICJ0byBtb3VudCB1c2luZyBleHQ0XG4iLCBkZXZfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mcyAoJXMpOiBleHQ0ZGV2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICIKLQkgICAgICAgIndpbGwgZ28gYXdheSBieSAyLjYuMzFcbiIsIGRldl9uYW1lKTsKLQlyZXR1cm4gZ2V0X3NiX2JkZXYoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBleHQ0X2ZpbGxfc3VwZXIsbW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRkZXZfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gImV4dDRkZXYiLAotCS5nZXRfc2IJCT0gZXh0NGRldl9nZXRfc2IsCi0JLmtpbGxfc2IJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKLX07Ci1NT0RVTEVfQUxJQVMoImV4dDRkZXYiKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2V4dDRfZnModm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMzk5NiwxMyArMzk5OCw2IEBACiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NF9mc190eXBlKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLSNpZmRlZiBDT05GSUdfRVhUNERFVl9DT01QQVQKLQllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0ZGV2X2ZzX3R5cGUpOwotCWlmIChlcnIpIHsKLQkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIG91dDoKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKQEAgLTQwMjEsOSArNDAxNiw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9leHQ0X2ZzKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NGRldl9mc190eXBlKTsKLSNlbmRpZgogCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWV4aXRfZXh0NF94YXR0cigpOwogCWV4aXRfZXh0NF9tYmFsbG9jKCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggYWRiMGU3Mi4uN2RiMDk3OSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdC5oCisrKyBiL2ZzL2ZhdC9mYXQuaApAQCAtMzIzLDcgKzMyMyw3IEBACiAvKiBmYXQvbWlzYy5jICovCiBleHRlcm4gdm9pZCBmYXRfZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkgX19jb2xkOwotZXh0ZXJuIHZvaWQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpOwogZXh0ZXJuIHZvaWQgZmF0X3RpbWVfZmF0MnVuaXgoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwgc3RydWN0IHRpbWVzcGVjICp0cywKIAkJCSAgICAgIF9fbGUxNiBfX3RpbWUsIF9fbGUxNiBfX2RhdGUsIHU4IHRpbWVfY3MpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAwNDYyOWQxLi43NmI3OTYxIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNDUxLDEyICs0NTEsMTYgQEAKIAogc3RhdGljIGludCBmYXRfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKLQlsb2NrX3N1cGVyKHNiKTsKLQlmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwotCXNiLT5zX2RpcnQgPSAwOwotCXVubG9ja19zdXBlcihzYik7CisJaW50IGVyciA9IDA7CiAKLQlyZXR1cm4gMDsKKwlpZiAoc2ItPnNfZGlydCkgeworCQlsb2NrX3N1cGVyKHNiKTsKKwkJc2ItPnNfZGlydCA9IDA7CisJCWVyciA9IGZhdF9jbHVzdGVyc19mbHVzaChzYik7CisJCXVubG9ja19zdXBlcihzYik7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtODEyLDcgKzgxNiw3IEBACiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1taXhlZCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZBVF9TRk5fRElTUExBWV9MT1dFUiB8IFZGQVRfU0ZOX0NSRUFURV9XSU45NToKLQkJCS8qIHNlcV9wdXRzKG0sICIsc2hvcnRuYW1lPWxvd2VyIik7ICovCisJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1sb3dlciIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT11bmtub3duIik7CkBAIC05NjMsNyArOTY3LDcgQEAKIAlvcHRzLT5jb2RlcGFnZSA9IGZhdF9kZWZhdWx0X2NvZGVwYWdlOwogCW9wdHMtPmlvY2hhcnNldCA9IGZhdF9kZWZhdWx0X2lvY2hhcnNldDsKIAlpZiAoaXNfdmZhdCkgewotCQlvcHRzLT5zaG9ydG5hbWUgPSBWRkFUX1NGTl9ESVNQTEFZX0xPV0VSfFZGQVRfU0ZOX0NSRUFURV9XSU45NTsKKwkJb3B0cy0+c2hvcnRuYW1lID0gVkZBVF9TRk5fRElTUExBWV9XSU5OVHxWRkFUX1NGTl9DUkVBVEVfV0lOOTU7CiAJCW9wdHMtPnJvZGlyID0gMDsKIAl9IGVsc2UgewogCQlvcHRzLT5zaG9ydG5hbWUgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggNGUzNWJlOC4uMGY1NWY1YyAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYworKysgYi9mcy9mYXQvbWlzYy5jCkBAIC00MywxOSArNDMsMTkgQEAKIAogLyogRmx1c2hlcyB0aGUgbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMgb24gRkFUMzIgKi8KIC8qIFhYWDogTmVlZCB0byB3cml0ZSBvbmUgcGVyIEZTSU5GTyBibG9jay4gIEN1cnJlbnRseSBvbmx5IHdyaXRlcyAxICovCi12b2lkIGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoraW50IGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICpmc2luZm87CiAKIAlpZiAoc2JpLT5mYXRfYml0cyAhPSAzMikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWJoID0gc2JfYnJlYWQoc2IsIHNiaS0+ZnNpbmZvX3NlY3Rvcik7CiAJaWYgKGJoID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGQVQ6IGJyZWFkIGZhaWxlZCBpbiBmYXRfY2x1c3RlcnNfZmx1c2hcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlPOwogCX0KIAogCWZzaW5mbyA9IChzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICopYmgtPmJfZGF0YTsKQEAgLTc0LDYgKzc0LDggQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCX0KIAlicmVsc2UoYmgpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBjYjZlODM1Li5mNTY1ZjI0IDEwMDY0NAotLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jCisrKyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKQEAgLTQ5OSwxNyArNDk5LDEwIEBACiAJaW50IGNoYXJsZW47CiAKIAlpZiAodXRmOCkgewotCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7Ci0KLQkJKm91dGxlbiA9IHV0ZjhzX3RvX3V0ZjE2cyhuYW1lLCBQQVRIX01BWCwgKHdjaGFyX3QgKikgb3V0bmFtZSk7Ci0KLQkJLyoKLQkJICogV2Ugc3RyaXBwZWQgJy4ncyBiZWZvcmUgYW5kIHNldCBsZW4gYXBwcm9wcmlhdGVseSwKLQkJICogYnV0IHV0ZjhzX3RvX3V0ZjE2cyBkb2Vzbid0IGNhcmUgYWJvdXQgbGVuCi0JCSAqLwotCQkqb3V0bGVuIC09IChuYW1lX2xlbiAtIGxlbik7Ci0KLQkJaWYgKCpvdXRsZW4gPiAyNTUpCisJCSpvdXRsZW4gPSB1dGY4c190b191dGYxNnMobmFtZSwgbGVuLCAod2NoYXJfdCAqKW91dG5hbWUpOworCQlpZiAoKm91dGxlbiA8IDApCisJCQlyZXR1cm4gKm91dGxlbjsKKwkJZWxzZSBpZiAoKm91dGxlbiA+IDI1NSkKIAkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCiAJCW9wID0gJm91dG5hbWVbKm91dGxlbiAqIHNpemVvZih3Y2hhcl90KV07CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBmYzA4OWYyLi4yY2Y5M2VjIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCWJyZWFrOwogCi0JY2FzZSBGX09XTkVSX0dJRDoKKwljYXNlIEZfT1dORVJfUEdSUDoKIAkJdHlwZSA9IFBJRFRZUEVfUEdJRDsKIAkJYnJlYWs7CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUElEVFlQRV9QR0lEOgotCQlvd25lci50eXBlID0gRl9PV05FUl9HSUQ7CisJCW93bmVyLnR5cGUgPSBGX09XTkVSX1BHUlA7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCBmMzEzMzE0Li44N2UxMjkwIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCA4ZTFlNWUxLi45ZDUzNjBjIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNDEsOCArNDEsOSBAQAogCWxvbmcgbnJfcGFnZXM7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAllbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHN5bmNfbW9kZTsKLQlpbnQgZm9yX2t1cGRhdGU7Ci0JaW50IHJhbmdlX2N5Y2xpYzsKKwlpbnQgZm9yX2t1cGRhdGU6MTsKKwlpbnQgcmFuZ2VfY3ljbGljOjE7CisJaW50IGZvcl9iYWNrZ3JvdW5kOjE7CiB9OwogCiAvKgpAQCAtMjQ5LDE0ICsyNTAsMjUgQEAKICAqICAgY29tcGxldGlvbi4gQ2FsbGVyIG5lZWQgbm90IGhvbGQgc2Igc191bW91bnQgc2VtYXBob3JlLgogICoKICAqLwotdm9pZCBiZGlfc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIGxvbmcgbnJfcGFnZXMpCit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCQkuc2IJCT0gc2IsCiAJCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCiAJCS5ucl9wYWdlcwk9IG5yX3BhZ2VzLAogCQkucmFuZ2VfY3ljbGljCT0gMSwKIAl9OwogCisJLyoKKwkgKiBXZSB0cmVhdCBAbnJfcGFnZXM9MCBhcyB0aGUgc3BlY2lhbCBjYXNlIHRvIGRvIGJhY2tncm91bmQgd3JpdGViYWNrLAorCSAqIGllLiB0byBzeW5jIHBhZ2VzIHVudGlsIHRoZSBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZCBpcyByZWFjaGVkLgorCSAqLworCWlmICghbnJfcGFnZXMpIHsKKwkJYXJncy5ucl9wYWdlcyA9IExPTkdfTUFYOworCQlhcmdzLmZvcl9iYWNrZ3JvdW5kID0gMTsKKwl9CisKIAliZGlfYWxsb2NfcXVldWVfd29yayhiZGksICZhcmdzKTsKIH0KIApAQCAtMzEwLDcgKzMyMiw3IEBACiAJICogRm9yIGlub2RlcyBiZWluZyBjb25zdGFudGx5IHJlZGlydGllZCwgZGlydGllZF93aGVuIGNhbiBnZXQgc3R1Y2suCiAJICogSXQgX2FwcGVhcnNfIHRvIGJlIGluIHRoZSBmdXR1cmUsIGJ1dCBpcyBhY3R1YWxseSBpbiBkaXN0YW50IHBhc3QuCiAJICogVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHN1Y2ggd3JhcHBlZC1hcm91bmQgcmVsYXRpdmUgdGltZXMKLQkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBwZGZsdXNoIHdyaXRlYmFjay4KKwkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBiZGkgd3JpdGViYWNrLgogCSAqLwogCXJldCA9IHJldCAmJiB0aW1lX2JlZm9yZV9lcShpbm9kZS0+ZGlydGllZF93aGVuLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMzI0LDEzICszMzYsMzggQEAKIAkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwYXRjaF9xdWV1ZSwKIAkJCQl1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCiB7CisJTElTVF9IRUFEKHRtcCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbm9kZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBkb19zYl9zb3J0ID0gMDsKKwogCXdoaWxlICghbGlzdF9lbXB0eShkZWxheWluZ19xdWV1ZSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCi0JCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCWlub2RlID0gbGlzdF9lbnRyeShkZWxheWluZ19xdWV1ZS0+cHJldiwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlpZiAob2xkZXJfdGhhbl90aGlzICYmCiAJCSAgICBpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCAqb2xkZXJfdGhhbl90aGlzKSkKIAkJCWJyZWFrOwotCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJaWYgKHNiICYmIHNiICE9IGlub2RlLT5pX3NiKQorCQkJZG9fc2Jfc29ydCA9IDE7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnRtcCk7CisJfQorCisJLyoganVzdCBvbmUgc2IgaW4gbGlzdCwgc3BsaWNlIHRvIGRpc3BhdGNoX3F1ZXVlIGFuZCB3ZSdyZSBkb25lICovCisJaWYgKCFkb19zYl9zb3J0KSB7CisJCWxpc3Rfc3BsaWNlKCZ0bXAsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1vdmUgaW5vZGVzIGZyb20gb25lIHN1cGVyYmxvY2sgdG9nZXRoZXIgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKKwkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcC5wcmV2LCBzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgbm9kZSwgJnRtcCkgeworCQkJaW5vZGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaWYgKGlub2RlLT5pX3NiID09IHNiKQorCQkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcGF0Y2hfcXVldWUpOworCQl9CiAJfQogfQogCkBAIC00MzksOCArNDc2LDE4IEBACiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9TWU5DOwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlORyB8IElfQ0xFQVIpKSkgewotCQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpICYmCi0JCSAgICBtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkgeworCQlpZiAoKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykgJiYgd2JjLT5mb3Jfa3VwZGF0ZSkgeworCQkJLyoKKwkJCSAqIE1vcmUgcGFnZXMgZ2V0IGRpcnRpZWQgYnkgYSBmYXN0IGRpcnRpZXIuCisJCQkgKi8KKwkJCWdvdG8gc2VsZWN0X3F1ZXVlOworCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgeworCQkJLyoKKwkJCSAqIEF0IGxlYXN0IFhGUyB3aWxsIHJlZGlydHkgdGhlIGlub2RlIGR1cmluZyB0aGUKKwkJCSAqIHdyaXRlYmFjayAoZGVsYWxsb2MpIGFuZCBvbiBpbyBjb21wbGV0aW9uIChpc2l6ZSkuCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCX0gZWxzZSBpZiAobWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKIAkJCS8qCiAJCQkgKiBXZSBkaWRuJ3Qgd3JpdGUgYmFjayBhbGwgdGhlIHBhZ2VzLiAgbmZzX3dyaXRlcGFnZXMoKQogCQkJICogc29tZXRpbWVzIGJhbGVzIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBSZWRpcnR5CkBAIC00NjIsNiArNTA5LDcgQEAKIAkJCQkgKiBzb29uIGFzIHRoZSBxdWV1ZSBiZWNvbWVzIHVuY29uZ2VzdGVkLgogCQkJCSAqLwogCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CitzZWxlY3RfcXVldWU6CiAJCQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkgewogCQkJCQkvKgogCQkJCQkgKiBzbGljZSB1c2VkIHVwOiBxdWV1ZSBmb3IgbmV4dCB0dXJuCkBAIC00ODQsMTIgKzUzMiw2IEBACiAJCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKIAkJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQkJfQotCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgcmVkaXJ0aWVkIHRoZSBpbm9kZSB3aGlsZSB3ZXJlIHdyaXRpbmcgYmFjawotCQkJICogdGhlIHBhZ2VzLgotCQkJICovCi0JCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKIAkJCS8qCiAJCQkgKiBUaGUgaW5vZGUgaXMgY2xlYW4sIGludXNlCkBAIC01MDYsNiArNTQ4LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKipwc2IpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICpwc2I7CisKKwlpZiAoc2IpIHsKKwkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJcHV0X3N1cGVyKHNiKTsKKwkJKnBzYiA9IE5VTEw7CisJfQorfQorCiAvKgogICogRm9yIFdCX1NZTkNfTk9ORSB3cml0ZWJhY2ssIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSB0aGUgc2IgcGlubmVkCiAgKiBiZWZvcmUgY2FsbGluZyB3cml0ZWJhY2suIFNvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIHBpbiBpdCwgc28gaXQgZG9lc24ndApAQCAtNTE1LDExICs1NjgsMjAgQEAKICAqIDEgaWYgd2UgZmFpbGVkLgogICovCiBzdGF0aWMgaW50IHBpbl9zYl9mb3Jfd3JpdGViYWNrKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICoqcHNiKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAogCS8qCisJICogSWYgdGhpcyBzYiBpcyBhbHJlYWR5IHBpbm5lZCwgbm90aGluZyBtb3JlIHRvIGRvLiBJZiBub3QgYW5kCisJICogKnBzYiBpcyBub24tTlVMTCwgdW5waW4gdGhlIG9sZCBvbmUgZmlyc3QKKwkgKi8KKwlpZiAoc2IgPT0gKnBzYikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKnBzYikKKwkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayhwc2IpOworCisJLyoKIAkgKiBDYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgdGhlIHJlZiBmb3IgdGhpcwogCSAqLwogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgewpAQCAtNTMyLDcgKzU5NCw3IEBACiAJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZzYi0+c191bW91bnQpKSB7CiAJCWlmIChzYi0+c19yb290KSB7CiAJCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gcGlubmVkOwogCQl9CiAJCS8qCiAJCSAqIHVtb3VudGVkLCBkcm9wIHJ3c2VtIGFnYWluIGFuZCBmYWxsIHRocm91Z2ggdG8gZmFpbHVyZQpAQCAtNTQzLDI0ICs2MDUsMTUgQEAKIAlzYi0+c19jb3VudC0tOwogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQotCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKLQkJcmV0dXJuOwotCi0JdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKLQlwdXRfc3VwZXIoc2IpOworcGlubmVkOgorCSpwc2IgPSBzYjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGViYWNrX2lub2Rlc193YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsCiAJCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2IsICpwaW5fc2IgPSBOVUxMOwogCWNvbnN0IGludCBpc19ibGtkZXZfc2IgPSBzYl9pc19ibGtkZXZfc2Ioc2IpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwkvKiBsaXZlbG9jayBhdm9pZGFuY2UgKi8KIApAQCAtNjE5LDcgKzY3Miw3IEBACiAJCWlmIChpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCBzdGFydCkpCiAJCQlicmVhazsKIAotCQlpZiAocGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSkpIHsKKwkJaWYgKHBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUsICZwaW5fc2IpKSB7CiAJCQlyZXF1ZXVlX2lvKGlub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MjgsNyArNjgxLDYgQEAKIAkJX19pZ2V0KGlub2RlKTsKIAkJcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKIAkJd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjKTsKLQkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayh3YmMsIGlub2RlKTsKIAkJaWYgKHdiYy0+cGFnZXNfc2tpcHBlZCAhPSBwYWdlc19za2lwcGVkKSB7CiAJCQkvKgogCQkJICogd3JpdGViYWNrIGlzIG5vdCBtYWtpbmcgcHJvZ3Jlc3MgZHVlIHRvIGxvY2tlZApAQCAtNjQ4LDYgKzcwMCw4IEBACiAJCQl3YmMtPm1vcmVfaW8gPSAxOwogCX0KIAorCXVucGluX3NiX2Zvcl93cml0ZWJhY2soJnBpbl9zYik7CisKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJLyogTGVhdmUgYW55IHVud3JpdHRlbiBpbm9kZXMgb24gYl9pbyAqLwogfQpAQCAtNzA2LDYgKzc2MCw3IEBACiAJfTsKIAl1bnNpZ25lZCBsb25nIG9sZGVzdF9qaWY7CiAJbG9uZyB3cm90ZSA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAogCWlmICh3YmMuZm9yX2t1cGRhdGUpIHsKIAkJd2JjLm9sZGVyX3RoYW5fdGhpcyA9ICZvbGRlc3RfamlmOwpAQCAtNzE5LDIwICs3NzQsMTYgQEAKIAogCWZvciAoOzspIHsKIAkJLyoKLQkJICogRG9uJ3QgZmx1c2ggYW55dGhpbmcgZm9yIG5vbi1pbnRlZ3JpdHkgd3JpdGViYWNrIHdoZXJlCi0JCSAqIG5vIG5yX3BhZ2VzIHdhcyBnaXZlbgorCQkgKiBTdG9wIHdyaXRlYmFjayB3aGVuIG5yX3BhZ2VzIGhhcyBiZWVuIGNvbnN1bWVkCiAJCSAqLwotCQlpZiAoIWFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICBhcmdzLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKQorCQlpZiAoYXJncy0+bnJfcGFnZXMgPD0gMCkKIAkJCWJyZWFrOwogCiAJCS8qCi0JCSAqIElmIG5vIHNwZWNpZmljIHBhZ2VzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMganVzdCBhCi0JCSAqIHBlcmlvZGljIGJhY2tncm91bmQgd3JpdGVvdXQgYW5kIHdlIGFyZSBiZWxvdyB0aGUKLQkJICogYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQsIGRvbid0IGRvIGFueXRoaW5nCisJCSAqIEZvciBiYWNrZ3JvdW5kIHdyaXRlb3V0LCBzdG9wIHdoZW4gd2UgYXJlIGJlbG93IHRoZQorCQkgKiBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZAogCQkgKi8KLQkJaWYgKGFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICFvdmVyX2Jncm91bmRfdGhyZXNoKCkpCisJCWlmIChhcmdzLT5mb3JfYmFja2dyb3VuZCAmJiAhb3Zlcl9iZ3JvdW5kX3RocmVzaCgpKQogCQkJYnJlYWs7CiAKIAkJd2JjLm1vcmVfaW8gPSAwOwpAQCAtNzQ0LDEzICs3OTUsMzIgQEAKIAkJd3JvdGUgKz0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKIAogCQkvKgotCQkgKiBJZiB3ZSByYW4gb3V0IG9mIHN0dWZmIHRvIHdyaXRlLCBiYWlsIHVubGVzcyBtb3JlX2lvIGdvdCBzZXQKKwkJICogSWYgd2UgY29uc3VtZWQgZXZlcnl0aGluZywgc2VlIGlmIHdlIGhhdmUgbW9yZQogCQkgKi8KLQkJaWYgKHdiYy5ucl90b193cml0ZSA+IDAgfHwgd2JjLnBhZ2VzX3NraXBwZWQgPiAwKSB7Ci0JCQlpZiAod2JjLm1vcmVfaW8gJiYgIXdiYy5mb3Jfa3VwZGF0ZSkKLQkJCQljb250aW51ZTsKKwkJaWYgKHdiYy5ucl90b193cml0ZSA8PSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIERpZG4ndCB3cml0ZSBldmVyeXRoaW5nIGFuZCB3ZSBkb24ndCBoYXZlIG1vcmUgSU8sIGJhaWwKKwkJICovCisJCWlmICghd2JjLm1vcmVfaW8pCiAJCQlicmVhazsKKwkJLyoKKwkJICogRGlkIHdlIHdyaXRlIHNvbWV0aGluZz8gVHJ5IGZvciBtb3JlCisJCSAqLworCQlpZiAod2JjLm5yX3RvX3dyaXRlIDwgTUFYX1dSSVRFQkFDS19QQUdFUykKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBOb3RoaW5nIHdyaXR0ZW4uIFdhaXQgZm9yIHNvbWUgaW5vZGUgdG8KKwkJICogYmVjb21lIGF2YWlsYWJsZSBmb3Igd3JpdGViYWNrLiBPdGhlcndpc2UKKwkJICogd2UnbGwganVzdCBidXN5bG9vcC4KKwkJICovCisJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmd2ItPmJfbW9yZV9pbykpICB7CisJCQlpbm9kZSA9IGxpc3RfZW50cnkod2ItPmJfbW9yZV9pby5wcmV2LAorCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaW5vZGVfd2FpdF9mb3Jfd3JpdGViYWNrKGlub2RlKTsKIAkJfQorCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJfQogCiAJcmV0dXJuIHdyb3RlOwpAQCAtMTA2MCw5ICsxMTMwLDYgQEAKICAqIElmIG9sZGVyX3RoYW5fdGhpcyBpcyBub24tTlVMTCwgdGhlbiBvbmx5IHdyaXRlIG91dCBpbm9kZXMgd2hpY2gKICAqIGhhZCB0aGVpciBmaXJzdCBkaXJ0eWluZyBhdCBhIHRpbWUgZWFybGllciB0aGFuICpvbGRlcl90aGFuX3RoaXMuCiAgKgotICogSWYgd2UncmUgYSBwZGxmdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCi0gKiBhZ2FpbnN0IHRoZSBlbnRpcmUgbGlzdC4KLSAqCiAgKiBJZiBgYmRpJyBpcyBub24temVybyB0aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHdyaXRlYmFjayBhIHNwZWNpZmljIHF1ZXVlLgogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJsb2NrZGV2IHN1cGVyYmxvY2sncyBpbm9kZXMgYXJlIGJhY2tlZCBieQogICogYSB2YXJpZXR5IG9mIHF1ZXVlcywgc28gYWxsIGlub2RlcyBhcmUgc2VhcmNoZWQuICBGb3Igb3RoZXIgc3VwZXJibG9ja3MsCkBAIC0xMTQxLDcgKzEyMDgsNyBAQAogCW5yX3RvX3dyaXRlID0gbnJfZGlydHkgKyBucl91bnN0YWJsZSArCiAJCQkoaW5vZGVzX3N0YXQubnJfaW5vZGVzIC0gaW5vZGVzX3N0YXQubnJfdW51c2VkKTsKIAotCWJkaV93cml0ZWJhY2tfYWxsKHNiLCBucl90b193cml0ZSk7CisJYmRpX3N0YXJ0X3dyaXRlYmFjayhzYi0+c19iZGksIHNiLCBucl90b193cml0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHdyaXRlYmFja19pbm9kZXNfc2IpOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA5OTJmNmM5Li44YWRhNzhhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTcxMiw4ICs3MTIsMTAgQEAKIAkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2Rpcik7CiAKIAkJLyogbmV3ZW50IHdpbGwgZW5kIHVwIG5lZ2F0aXZlICovCi0JCWlmIChuZXdlbnQtPmRfaW5vZGUpCisJCWlmIChuZXdlbnQtPmRfaW5vZGUpIHsKKwkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2VudC0+ZF9pbm9kZSk7CiAJCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUobmV3ZW50KTsKKwkJfQogCX0gZWxzZSBpZiAoZXJyID09IC1FSU5UUikgewogCQkvKiBJZiByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgREVJVFkgb25seSBrbm93cyBpZiB0aGUKIAkJICAgcmVuYW1lIGFjdHVhbGx5IHRvb2sgcGxhY2UuICBJZiB0aGUgaW52YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGNiYzQ2NDAuLmMxODkxM2EgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDYzLDcgKzEwNjMsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKCFJU19FUlIocmVxKSkKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkKIAkJKnBwb3MgPSBwb3M7CiAKQEAgLTEzMTMsNyArMTMxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKIAkuY2xvc2UJCT0gZnVzZV92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGZ1c2VfcGFnZV9ta3dyaXRlLApAQCAtMTU5OSw3ICsxNjAwLDcgQEAKIAkJCWthZGRyICs9IGNvcHk7CiAJCX0KIAotCQlrdW5tYXAobWFwKTsKKwkJa3VubWFwKHBhZ2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCAxNjZmMzhmLi40ZWIzMDhhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZnMyX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2ZzMl92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gZ2ZzMl9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmMgYi9mcy9oZnMvYnRyZWUuYwppbmRleCA5YjlkNjM5Li4wNTJmMjE0IDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuYworKysgYi9mcy9oZnMvYnRyZWUuYwpAQCAtNTgsNiArNTgsMTEgQEAKIAl9CiAJdW5sb2NrX25ld19pbm9kZSh0cmVlLT5pbm9kZSk7CiAKKwlpZiAoIUhGU19JKHRyZWUtPmlub2RlKS0+Zmlyc3RfYmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBpbnZhbGlkIGJ0cmVlIGV4dGVudCByZWNvcmRzICgwIHNpemUpLlxuIik7CisJCWdvdG8gZnJlZV9pbm9kZTsKKwl9CisKIAltYXBwaW5nID0gdHJlZS0+aW5vZGUtPmlfbWFwcGluZzsKIAlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgMCwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTc1ZDA4ZS4uYmVkNzhhYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC05OSw2ICs5OSwxMCBAQAogCiAJaWYgKGhmc3BsdXNfZ2V0X2xhc3Rfc2Vzc2lvbihzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHU2NClwYXJ0X3N0YXJ0ICsgcGFydF9zaXplID4gMHgxMDAwMDAwMDBVTEwpIHsKKwkJcHJfZXJyKCJoZnM6IHZvbHVtZXMgbGFyZ2VyIHRoYW4gMlRCIGFyZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAl3aGlsZSAoMSkgewogCQliaCA9IHNiX2JyZWFkNTEyKHNiLCBwYXJ0X3N0YXJ0ICsgSEZTUExVU19WT0xIRUFEX1NFQ1RPUiwgdmhkcik7CiAJCWlmICghYmgpCmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCA3YjE3YTE0Li42Yzc1MTEwIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJICAgdTY0IGxlbiwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wOwotCXVuc2lnbmVkIGludCBzdGFydF9ibGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X2JsazsKIAlsb25nIGxvbmcgbGVuZ3RoID0gMCwgbWFwX2xlbiA9IDA7CiAJdTY0IGxvZ2ljYWwgPSAwLCBwaHlzID0gMCwgc2l6ZSA9IDA7CiAJdTMyIGZsYWdzID0gRklFTUFQX0VYVEVOVF9NRVJHRUQ7CmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCBiZDNjMDczLi40MTYwYWZhIDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTczLDYgKzczLDcgQEAKIEVYUE9SVF9TWU1CT0woam91cm5hbF9hY2tfZXJyKTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9jbGVhcl9lcnIpOwogRVhQT1JUX1NZTUJPTChsb2dfd2FpdF9jb21taXQpOworRVhQT1JUX1NZTUJPTChsb2dfc3RhcnRfY29tbWl0KTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9zdGFydF9jb21taXQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX2ZvcmNlX2NvbW1pdF9uZXN0ZWQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX3dpcGUpOwpAQCAtNzU2LDYgKzc1Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTgyMCw2ICs4MjIsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDVkNzBiM2UuLmNhMGY1ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogaW50IF9famJkMl9qb3VybmFsX3JlbW92ZV9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogeworCXN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyAqc3RhdHM7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCByZXQgPSAwOwpAQCAtNjc5LDYgKzY4MCwxMiBAQAogCiAJLyogT0ssIHRoYXQgd2FzIHRoZSBsYXN0IGJ1ZmZlciBmb3IgdGhlIHRyYW5zYWN0aW9uOiB3ZSBjYW4gbm93CiAJICAgc2FmZWx5IHJlbW92ZSB0aGlzIHRyYW5zYWN0aW9uIGZyb20gdGhlIGxvZyAqLworCXN0YXRzID0gJnRyYW5zYWN0aW9uLT50X2NocF9zdGF0czsKKwlpZiAoc3RhdHMtPmNzX2NocF90aW1lKQorCQlzdGF0cy0+Y3NfY2hwX3RpbWUgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy0+Y3NfY2hwX3RpbWUsCisJCQkJCQkgICAgamlmZmllcyk7CisJdHJhY2VfamJkMl9jaGVja3BvaW50X3N0YXRzKGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXYsCisJCQkJICAgIHRyYW5zYWN0aW9uLT50X3RpZCwgc3RhdHMpOwogCiAJX19qYmQyX2pvdXJuYWxfZHJvcF90cmFuc2FjdGlvbihqb3VybmFsLCB0cmFuc2FjdGlvbik7CiAJa2ZyZWUodHJhbnNhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggMjZkOTkxZC4uZDRjZmQ2ZCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQogCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkNfUExVRzsKIAl0cmFjZV9qYmQyX2NvbW1pdF9sb2NraW5nKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7Ci0Jc3RhdHMudS5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKLQlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCi0JCQkJCQlzdGF0cy51LnJ1bi5yc19sb2NrZWQpOworCXN0YXRzLnJ1bi5yc193YWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X21heF93YWl0OworCXN0YXRzLnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOworCXN0YXRzLnJ1bi5yc19ydW5uaW5nID0gamJkMl90aW1lX2RpZmYoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0LAorCQkJCQkgICAgICBzdGF0cy5ydW4ucnNfbG9ja2VkKTsKIAogCXNwaW5fbG9jaygmY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAl3aGlsZSAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3VwZGF0ZXMpIHsKQEAgLTQ4Niw5ICs0ODYsOSBAQAogCWpiZDJfam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKGpvdXJuYWwpOwogCiAJdHJhY2VfamJkMl9jb21taXRfZmx1c2hpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9ja2VkID0gamJkMl90aW1lX2RpZmYoc3RhdHMudS5ydW4ucnNfbG9ja2VkLAotCQkJCQkgICAgICAgc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcpOworCXN0YXRzLnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7CisJc3RhdHMucnVuLnJzX2xvY2tlZCA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnJ1bi5yc19sb2NrZWQsCisJCQkJCSAgICAgc3RhdHMucnVuLnJzX2ZsdXNoaW5nKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9IFRfRkxVU0g7CiAJam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uID0gY29tbWl0X3RyYW5zYWN0aW9uOwpAQCAtNTIzLDExICs1MjMsMTEgQEAKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCXRyYWNlX2piZDJfY29tbWl0X2xvZ2dpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nLAotCQkJCQkJIHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcpOwotCXN0YXRzLnUucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOwotCXN0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgPSAwOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKKwlzdGF0cy5ydW4ucnNfZmx1c2hpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfZmx1c2hpbmcsCisJCQkJCSAgICAgICBzdGF0cy5ydW4ucnNfbG9nZ2luZyk7CisJc3RhdHMucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOworCXN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkID0gMDsKIAogCUpfQVNTRVJUKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9ucl9idWZmZXJzIDw9CiAJCSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CkBAIC02OTUsNyArNjk1LDcgQEAKIAkJCQlzdWJtaXRfYmgod3JpdGVfb3AsIGJoKTsKIAkJCX0KIAkJCWNvbmRfcmVzY2hlZCgpOwotCQkJc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBidWZzOworCQkJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gYnVmczsKIAogCQkJLyogRm9yY2UgYSBuZXcgZGVzY3JpcHRvciB0byBiZSBnZW5lcmF0ZWQgbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSByb3VuZCB0aGUgbG9vcC4gKi8KQEAgLTk4OCwzMyArOTg4LDMwIEBACiAJSl9BU1NFUlQoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID09IFRfQ09NTUlUKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9nZ2luZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcsCi0JCQkJCQljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQpOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMucnVuLnJzX2xvZ2dpbmcsCisJCQkJCSAgICAgIGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCk7CiAKIAkvKgotCSAqIEZpbGUgdGhlIHRyYW5zYWN0aW9uIGZvciBoaXN0b3J5CisJICogRmlsZSB0aGUgdHJhbnNhY3Rpb24gc3RhdGlzdGljcwogCSAqLwotCXN0YXRzLnRzX3R5cGUgPSBKQkQyX1NUQVRTX1JVTjsKIAlzdGF0cy50c190aWQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCXN0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KGpvdXJuYWwtPmpfaGlzdG9yeSArIGpvdXJuYWwtPmpfaGlzdG9yeV9jdXIsICZzdGF0cywKLQkJCXNpemVvZihzdGF0cykpOwotCWlmICgrK2pvdXJuYWwtPmpfaGlzdG9yeV9jdXIgPT0gam91cm5hbC0+al9oaXN0b3J5X21heCkKLQkJam91cm5hbC0+al9oaXN0b3J5X2N1ciA9IDA7CisJc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7CisJdHJhY2VfamJkMl9ydW5fc3RhdHMoam91cm5hbC0+al9mc19kZXYtPmJkX2RldiwKKwkJCSAgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwgJnN0YXRzLnJ1bik7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSBvdmVyYWxsIHN0YXRzCiAJICovCisJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAJam91cm5hbC0+al9zdGF0cy50c190aWQrKzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3dhaXQgKz0gc3RhdHMudS5ydW4ucnNfd2FpdDsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3J1bm5pbmcgKz0gc3RhdHMudS5ydW4ucnNfcnVubmluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvY2tlZCArPSBzdGF0cy51LnJ1bi5yc19sb2NrZWQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy51LnJ1bi5yc19mbHVzaGluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvZ2dpbmcgKz0gc3RhdHMudS5ydW4ucnNfbG9nZ2luZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCArPSBzdGF0cy51LnJ1bi5yc19oYW5kbGVfY291bnQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMudS5ydW4ucnNfYmxvY2tzOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX3dhaXQgKz0gc3RhdHMucnVuLnJzX3dhaXQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfcnVubmluZyArPSBzdGF0cy5ydW4ucnNfcnVubmluZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19sb2NrZWQgKz0gc3RhdHMucnVuLnJzX2xvY2tlZDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy5ydW4ucnNfZmx1c2hpbmc7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfbG9nZ2luZyArPSBzdGF0cy5ydW4ucnNfbG9nZ2luZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgKz0gc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMucnVuLnJzX2Jsb2NrczsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IHN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkOwogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0ZJTklTSEVEOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA1M2I4NmUxLi5mZWQ4NTM4OCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTEzNiwxMCArMTM2LDYgQEAKIAlqb3VybmFsLT5qX3Rhc2sgPSBjdXJyZW50OwogCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9kb25lX2NvbW1pdCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJram91cm5hbGQyIHN0YXJ0aW5nOiBwaWQgJWQsIGRldiAlcywgIgotCSAgICAgICAiY29tbWl0IGludGVydmFsICVsZCBzZWNvbmRzXG4iLCBjdXJyZW50LT5waWQsCi0JICAgICAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgLyBIWik7Ci0KIAkvKgogCSAqIEFuZCBub3csIHdhaXQgZm9yZXZlciBmb3IgY29tbWl0IHdha2V1cCBldmVudHMuCiAJICovCkBAIC0yMjMsNyArMjE5LDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImtqb3VybmFsZDIiKTsKKwl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImpiZDIvJXMiLAorCQkJam91cm5hbC0+al9kZXZuYW1lKTsKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIApAQCAtNjc5LDE1MyArNjc2LDYgQEAKIAlpbnQgbWF4OwogfTsKIAotc3RhdGljIHZvaWQgKmpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcywKLQkJCQkJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzLAotCQkJCQlpbnQgZmlyc3QpCi17Ci0JaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQl0cyA9IHMtPnN0YXRzOwotCWlmICghZmlyc3QgJiYgdHMgPT0gcy0+c3RhdHMgKyBzLT5zdGFydCkKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKHRzLT50c190eXBlID09IDApIHsKLQkJdHMrKzsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQkJdHMgPSBzLT5zdGF0czsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+c3RhcnQpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHRzOwotCi19Ci0KLXN0YXRpYyB2b2lkICpqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzOwotCWludCBsID0gKnBvczsKLQotCWlmIChsID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0JdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCBzLT5zdGF0cyArIHMtPnN0YXJ0LCAxKTsKLQlpZiAoIXRzKQotCQlyZXR1cm4gTlVMTDsKLQlsLS07Ci0Jd2hpbGUgKGwpIHsKLQkJdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK3RzLCAwKTsKLQkJaWYgKCF0cykKLQkJCWJyZWFrOwotCQlsLS07Ci0JfQotCXJldHVybiB0czsKLX0KLQotc3RhdGljIHZvaWQgKmpiZDJfc2VxX2hpc3RvcnlfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+c3RhdHMgKyBzLT5zdGFydCwgMSk7Ci0JZWxzZQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgKyt0cywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgamJkMl9zZXFfaGlzdG9yeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVzICUtNXMgJS01cyAlLTVzICUtNXMgJS01cyAlLTZzICUtNXMgIgotCQkJCSIlLTVzICUtNXMgJS01cyAlLTVzICUtNXNcbiIsICJSL0MiLCAidGlkIiwKLQkJCQkid2FpdCIsICJydW4iLCAibG9jayIsICJmbHVzaCIsICJsb2ciLCAiaG5kbHMiLAotCQkJCSJibG9jayIsICJpbmxvZyIsICJjdGltZSIsICJ3cml0ZSIsICJkcm9wIiwKLQkJCQkiY2xvc2UiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX1JVTikKLQkJc2VxX3ByaW50ZihzZXEsICIlLTRzICUtNWx1ICUtNXUgJS01dSAlLTV1ICUtNXUgJS01dSAiCi0JCQkJIiUtNmx1ICUtNWx1ICUtNWx1XG4iLCAiUiIsIHRzLT50c190aWQsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfd2FpdCksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfcnVubmluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9ja2VkKSwKLQkJCQlqaWZmaWVzX3RvX21zZWNzKHRzLT51LnJ1bi5yc19mbHVzaGluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9nZ2luZyksCi0JCQkJdHMtPnUucnVuLnJzX2hhbmRsZV9jb3VudCwKLQkJCQl0cy0+dS5ydW4ucnNfYmxvY2tzLAotCQkJCXRzLT51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkKTsKLQllbHNlIGlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQpCi0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVsdSAlNDhzICUtNXUgJS01bHUgJS01bHUgJS01bHVcbiIsCi0JCQkJIkMiLCB0cy0+dHNfdGlkLCAiICIsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5jaHAuY3NfY2hwX3RpbWUpLAotCQkJCXRzLT51LmNocC5jc193cml0dGVuLCB0cy0+dS5jaHAuY3NfZHJvcHBlZCwKLQkJCQl0cy0+dS5jaHAuY3NfZm9yY2VkX3RvX2Nsb3NlKTsKLQllbHNlCi0JCUpfQVNTRVJUKDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqYmQyX3NlcV9oaXN0b3J5X3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaGlzdG9yeV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RhcnQsCi0JLm5leHQgICA9IGpiZDJfc2VxX2hpc3RvcnlfbmV4dCwKLQkuc3RvcCAgID0gamJkMl9zZXFfaGlzdG9yeV9zdG9wLAotCS5zaG93ICAgPSBqYmQyX3NlcV9oaXN0b3J5X3Nob3csCi19OwotCi1zdGF0aWMgaW50IGpiZDJfc2VxX2hpc3Rvcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlqb3VybmFsX3QgKmpvdXJuYWwgPSBQREUoaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqczsKLQlpbnQgcmMsIHNpemU7Ci0KLQlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zKSAqIGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhdHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5zdGF0cyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPnN0YXRzLCBqb3VybmFsLT5qX2hpc3RvcnksIHNpemUpOwotCXMtPm1heCA9IGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBqb3VybmFsLT5qX2hpc3RvcnlfY3VyICUgcy0+bWF4OwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0KLQlyYyA9IHNlcV9vcGVuKGZpbGUsICZqYmQyX3NlcV9oaXN0b3J5X29wcyk7Ci0JaWYgKHJjID09IDApIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gczsKLQl9IGVsc2UgewotCQlrZnJlZShzLT5zdGF0cyk7Ci0JCWtmcmVlKHMpOwotCX0KLQlyZXR1cm4gcmM7Ci0KLX0KLQotc3RhdGljIGludCBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCi0Ja2ZyZWUocy0+c3RhdHMpOwotCWtmcmVlKHMpOwotCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3RvcnlfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaGlzdG9yeV9vcGVuLAotCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAotCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSAgICAgICAgPSBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2UsCi19OwotCiBzdGF0aWMgdm9pZCAqamJkMl9zZXFfaW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuICpwb3MgPyBOVUxMIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtODQyLDI5ICs2OTIsMjkgQEAKIAogCWlmICh2ICE9IFNFUV9TVEFSVF9UT0tFTikKIAkJcmV0dXJuIDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXB0byAldSBibG9ja3NcbiIsCisJc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXAgdG8gJXUgYmxvY2tzXG4iLAogCQkJcy0+c3RhdHMtPnRzX3RpZCwKIAkJCXMtPmpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpOwogCWlmIChzLT5zdGF0cy0+dHNfdGlkID09IDApCiAJCXJldHVybiAwOwogCXNlcV9wcmludGYoc2VxLCAiYXZlcmFnZTogXG4gICV1bXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3dhaXQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc193YWl0IC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHJ1bm5pbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3J1bm5pbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19ydW5uaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHRyYW5zYWN0aW9uIHdhcyBiZWluZyBsb2NrZWRcbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBmbHVzaGluZyBkYXRhIChpbiBvcmRlcmVkIG1vZGUpXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19mbHVzaGluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2ZsdXNoaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIGxvZ2dpbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvZ2dpbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19sb2dnaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbGx1dXMgYXZlcmFnZSB0cmFuc2FjdGlvbiBjb21taXQgdGltZVxuIiwKIAkJICAgZGl2X3U2NChzLT5qb3VybmFsLT5qX2F2ZXJhZ2VfY29tbWl0X3RpbWUsIDEwMDApKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJWx1IGhhbmRsZXMgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBibG9ja3MgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBsb2dnZWQgYmxvY2tzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgLyBzLT5zdGF0cy0+dHNfdGlkKTsKKwkgICAgcy0+c3RhdHMtPnJ1bi5yc19ibG9ja3NfbG9nZ2VkIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyMCw3ICs3NzAsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaW5mb19vcGVuLAogCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLApAQCAtOTM0LDggKzc4NCw2IEBACiB7CiAJam91cm5hbC0+al9wcm9jX2VudHJ5ID0gcHJvY19ta2Rpcihqb3VybmFsLT5qX2Rldm5hbWUsIHByb2NfamJkMl9zdGF0cyk7CiAJaWYgKGpvdXJuYWwtPmpfcHJvY19lbnRyeSkgewotCQlwcm9jX2NyZWF0ZV9kYXRhKCJoaXN0b3J5IiwgU19JUlVHTywgam91cm5hbC0+al9wcm9jX2VudHJ5LAotCQkJCSAmamJkMl9zZXFfaGlzdG9yeV9mb3BzLCBqb3VybmFsKTsKIAkJcHJvY19jcmVhdGVfZGF0YSgiaW5mbyIsIFNfSVJVR08sIGpvdXJuYWwtPmpfcHJvY19lbnRyeSwKIAkJCQkgJmpiZDJfc2VxX2luZm9fZm9wcywgam91cm5hbCk7CiAJfQpAQCAtOTQ0LDI3ICs3OTIsOSBAQAogc3RhdGljIHZvaWQgamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbF90ICpqb3VybmFsKQogewogCXJlbW92ZV9wcm9jX2VudHJ5KCJpbmZvIiwgam91cm5hbC0+al9wcm9jX2VudHJ5KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiaGlzdG9yeSIsIGpvdXJuYWwtPmpfcHJvY19lbnRyeSk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoam91cm5hbC0+al9kZXZuYW1lLCBwcm9jX2piZDJfc3RhdHMpOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2luaXRfc3RhdHMoam91cm5hbF90ICpqb3VybmFsKQotewotCWludCBzaXplOwotCi0JaWYgKCFwcm9jX2piZDJfc3RhdHMpCi0JCXJldHVybjsKLQotCWpvdXJuYWwtPmpfaGlzdG9yeV9tYXggPSAxMDA7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcykgKiBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCWpvdXJuYWwtPmpfaGlzdG9yeSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFqb3VybmFsLT5qX2hpc3RvcnkpIHsKLQkJam91cm5hbC0+al9oaXN0b3J5X21heCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKLX0KLQogLyoKICAqIE1hbmFnZW1lbnQgZm9yIGpvdXJuYWwgY29udHJvbCBibG9ja3M6IGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kCiAgKiBkZXN0cm95IGpvdXJuYWxfdCBzdHJ1Y3R1cmVzLCBhbmQgdG8gaW5pdGlhbGlzZSBhbmQgcmVhZCBleGlzdGluZwpAQCAtMTAwOSw3ICs4MzksNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0Jam91cm5hbF9pbml0X3N0YXRzKGpvdXJuYWwpOworCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAlyZXR1cm4gam91cm5hbDsKIGZhaWw6CkBAIC0xMDgzLDYgKzkxMyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTExMTUsNyArOTQ2LDcgQEAKIAl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkpCiAJCSpwID0gJyEnOwogCXAgPSBqb3VybmFsLT5qX2Rldm5hbWUgKyBzdHJsZW4oam91cm5hbC0+al9kZXZuYW1lKTsKLQlzcHJpbnRmKHAsICI6JWx1Iiwgam91cm5hbC0+al9pbm9kZS0+aV9pbm8pOworCXNwcmludGYocCwgIi0lbHUiLCBqb3VybmFsLT5qX2lub2RlLT5pX2lubyk7CiAJamJkX2RlYnVnKDEsCiAJCSAgImpvdXJuYWwgJXA6IGlub2RlICVzLyVsZCwgc2l6ZSAlTGQsIGJpdHMgJWQsIGJsa3NpemUgJWxkXG4iLAogCQkgIGpvdXJuYWwsIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCkBAIC0xMTU2LDYgKzk4Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL21tYXAuYyBiL2ZzL25jcGZzL21tYXAuYwppbmRleCA1ZDhkY2I5Li4xNTQ1OGRlIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9tbWFwLmMKKysrIGIvZnMvbmNwZnMvbW1hcC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX01BSk9SOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5jcF9maWxlX21tYXAgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuY3BfZmlsZV9tbWFwID0KIHsKIAkuZmF1bHQgPSBuY3BfZmlsZV9tbWFwX2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA2Mzk3NmMwLi45OWVhMTk2IDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCQkJCSAgICAgIDEsIGZsYWdzICYgTkZTX01PVU5UX05PUkVTVlBPUlQpOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZXJyb3I7Ci0JbWVtY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKKwlzdHJsY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKIAogCWVycm9yID0gbmZzX2lkbWFwX25ldyhjbHApOwogCWlmIChlcnJvciA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzMjA2MmMzLi43Y2IyOTg1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTM2LDYgKzE1MzYsOCBAQAogCQlvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUpOworCiAJZF9kcm9wKGRlbnRyeSk7CiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+bGluayhpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggNmMzMjEwMC4uZTFkNDE1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IE5GU19DTElFTlQoaW5vZGUpLAorCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc193cml0ZV9kaXJlY3Rfb3BzLAogCQkud29ya3F1ZXVlID0gbmZzaW9kX3dvcmtxdWV1ZSwKIAkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMsCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCA4NmQ2YjRkLi5mNWZkZDM5ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IG5mc19mbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogc3RhdGljIGludCBuZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmwpOwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzOwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBuZnNfZmlsZV9sbHNlZWssCkBAIC01NzIsNyArNTcyLDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IG5mc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggMjYzNmMyNi4uZmEzNDA4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihtbnRfcGF0aCkpCi0JCXJldHVybiBtbnQ7CisJCXJldHVybiBFUlJfQ0FTVChtbnRfcGF0aCk7CiAJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOwogCW1heGJ1ZmxlbiA9IG1udF9wYXRoIC0gMSAtIHBhZ2UyOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQAogCQlpZiAoYnVmLT5sZW4gPD0gMCB8fCBidWYtPmxlbiA+PSBtYXhidWZsZW4pCiAJCQljb250aW51ZTsKIAotCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7Ci0KIAkJaWYgKG1lbWNocihidWYtPmRhdGEsIElQVjZfU0NPUEVfREVMSU1JVEVSLCBidWYtPmxlbikpCiAJCQljb250aW51ZTsKLQkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwKLQkJCQlidWYtPmxlbiwKLQkJCQltb3VudGRhdGEtPmFkZHIsIG1vdW50ZGF0YS0+YWRkcmxlbik7CisKKwkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpOwogCQlpZiAobW91bnRkYXRhLT5hZGRybGVuID09IDApCiAJCQljb250aW51ZTsKKworCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CiAJCXJwY19zZXRfcG9ydChtb3VudGRhdGEtPmFkZHIsIE5GU19QT1JUKTsKIAogCQltZW1jcHkocGFnZTIsIGJ1Zi0+ZGF0YSwgYnVmLT5sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBlZDdjMjY5Li5mZjM3NDU0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNzIsMTIgKzcyLDE3IEBACiAvKiBQcmV2ZW50IGxlYWtzIG9mIE5GU3Y0IGVycm9ycyBpbnRvIHVzZXJsYW5kICovCiBzdGF0aWMgaW50IG5mczRfbWFwX2Vycm9ycyhpbnQgZXJyKQogewotCWlmIChlcnIgPCAtMTAwMCkgeworCWlmIChlcnIgPj0gLTEwMDApCisJCXJldHVybiBlcnI7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBjb3VsZCBub3QgaGFuZGxlIE5GU3Y0IGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCAtZXJyKTsKLQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOwogfQogCiAvKgpAQCAtMzA2MCw5ICszMDY1LDYgQEAKIAlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsdGltZXN0YW1wKSkKIAkJY2xwLT5jbF9sYXN0X3JlbmV3YWwgPSB0aW1lc3RhbXA7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0JZHByaW50aygiJXMgY2FsbGluZyBwdXRfcnBjY3JlZCBvbiBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sCi0JCQkJdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbmV3X29wcyA9IHsKQEAgLTQ4NzcsNyArNDg3OSw2IEBACiAJbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNscCwgdGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIAlkcHJpbnRrKCIlcyBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sIHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfYXJncCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggZTI3YzZjZS4uMDE1NmMwMSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC0xMjcsMTIgKzEyNyw2IEBACiB9CiAKIHZvaWQKLW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JlbmV3ZCk7Ci19Ci0KLXZvaWQKIG5mczRfa2lsbF9yZW5ld2Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNscC0+Y2xfcmVuZXdkKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDgzYWQ0N2MuLjIwYjRlMzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTY4MSw3ICs1NjgxLDYgQEAKIAl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCS1FU0VSVkVSRkFVTFQJfSwKIAl7IE5GUzRFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlM0RVJSX0xPQ0tFRCwJLUVBR0FJTgkJfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCS1FUkVNT1RFSU8JfSwKIAl7IE5GUzRFUlJfU1lNTElOSywJLUVMT09QCQl9LAogCXsgTkZTNEVSUl9PUF9JTExFR0FMLAktRU9QTk9UU1VQUAl9LAogCXsgTkZTNEVSUl9ERUFETE9DSywJLUVERUFETEsJfSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggODEwNzcwZi4uOTBiZTU1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTcyOCwyMiArNzI4LDI0IEBACiAJdW5sb2NrX2tlcm5lbCgpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKGludCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEodW5zaWduZWQgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhKSB7Ci0JCWRhdGEtPmZsYWdzCQk9IGZsYWdzOwogCQlkYXRhLT5yc2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAkJZGF0YS0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CiAJCWRhdGEtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47CiAJCWRhdGEtPmFjcmVnbWF4CQk9IE5GU19ERUZfQUNSRUdNQVg7CiAJCWRhdGEtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47CiAJCWRhdGEtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7CisJCWRhdGEtPm1vdW50X3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOwogCQlkYXRhLT5uZnNfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CisJCWRhdGEtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7CiAJCWRhdGEtPmF1dGhfZmxhdm9yc1swXQk9IFJQQ19BVVRIX1VOSVg7CiAJCWRhdGEtPmF1dGhfZmxhdm9yX2xlbgk9IDE7CisJCWRhdGEtPnZlcnNpb24JCT0gdmVyc2lvbjsKIAkJZGF0YS0+bWlub3J2ZXJzaW9uCT0gMDsKIAl9CiAJcmV0dXJuIGRhdGE7CkBAIC03NzYsMTUgKzc3OCwxMyBAQAogICogU2VsZWN0IGJldHdlZW4gYSBkZWZhdWx0IHBvcnQgdmFsdWUgYW5kIGEgdXNlci1zcGVjaWZpZWQgcG9ydCB2YWx1ZS4KICAqIElmIGEgemVybyB2YWx1ZSBpcyBzZXQsIHRoZW4gYXV0b2JpbmQgd2lsbCBiZSB1c2VkLgogICovCi1zdGF0aWMgdm9pZCBuZnNfc2V0X2RlZmF1bHRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgY29uc3QgaW50IHBhcnNlZF9wb3J0LAorc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgKnBvcnQsCiAJCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfcG9ydCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBwb3J0ID0gZGVmYXVsdF9wb3J0OworCWlmICgqcG9ydCA9PSBORlNfVU5TUEVDX1BPUlQpCisJCSpwb3J0ID0gZGVmYXVsdF9wb3J0OwogCi0JaWYgKHBhcnNlZF9wb3J0ICE9IE5GU19VTlNQRUNfUE9SVCkKLQkJcG9ydCA9IHBhcnNlZF9wb3J0OwotCi0JcnBjX3NldF9wb3J0KHNhcCwgcG9ydCk7CisJcnBjX3NldF9wb3J0KHNhcCwgKnBvcnQpOwogfQogCiAvKgpAQCAtMTI1Myw2ICsxMjUzLDcgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgdW5yZWNvZ25pemVkICIKIAkJCQkJCSJ0cmFuc3BvcnQgcHJvdG9jb2xcbiIpOworCQkJCWtmcmVlKHN0cmluZyk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE0NzUsNyArMTQ3Niw3IEBACiAJCWFyZ3MtPm1vdW50X3NlcnZlci5hZGRybGVuID0gYXJncy0+bmZzX3NlcnZlci5hZGRybGVuOwogCX0KIAlyZXF1ZXN0LnNhbGVuID0gYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW47Ci0JbmZzX3NldF9kZWZhdWx0X3BvcnQocmVxdWVzdC5zYXAsIGFyZ3MtPm1vdW50X3NlcnZlci5wb3J0LCAwKTsKKwluZnNfc2V0X3BvcnQocmVxdWVzdC5zYXAsICZhcmdzLT5tb3VudF9zZXJ2ZXIucG9ydCwgMCk7CiAKIAkvKgogCSAqIE5vdyBhc2sgdGhlIG1vdW50IHNlcnZlciB0byBtYXAgb3VyIGV4cG9ydCBwYXRoCkBAIC0xNzY1LDcgKzE3NjYsNyBAQAogCQkJZ290byBvdXRfdjRfbm90X2NvbXBpbGVkOwogI2VuZGlmCiAKLQkJbmZzX3NldF9kZWZhdWx0X3BvcnQoc2FwLCBhcmdzLT5uZnNfc2VydmVyLnBvcnQsIDApOworCQluZnNfc2V0X3BvcnQoc2FwLCAmYXJncy0+bmZzX3NlcnZlci5wb3J0LCAwKTsKIAogCQluZnNfc2V0X21vdW50X3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMTg0Niw5ICsxODQ3LDEwIEBACiAJICAgIGRhdGEtPmFjZGlybWluICE9IG5mc3MtPmFjZGlybWluIC8gSFogfHwKIAkgICAgZGF0YS0+YWNkaXJtYXggIT0gbmZzcy0+YWNkaXJtYXggLyBIWiB8fAogCSAgICBkYXRhLT50aW1lbyAhPSAoMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFopIHx8CisJICAgIGRhdGEtPm5mc19zZXJ2ZXIucG9ydCAhPSBuZnNzLT5wb3J0IHx8CiAJICAgIGRhdGEtPm5mc19zZXJ2ZXIuYWRkcmxlbiAhPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuIHx8Ci0JICAgIG1lbWNtcCgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKLQkJICAgZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKSAhPSAwKQorCSAgICAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLAorCQkJICAoc3RydWN0IHNvY2thZGRyICopJm5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtMTg5MSw2ICsxODkzLDcgQEAKIAlkYXRhLT5hY2Rpcm1pbiA9IG5mc3MtPmFjZGlybWluIC8gSFo7CiAJZGF0YS0+YWNkaXJtYXggPSBuZnNzLT5hY2Rpcm1heCAvIEhaOwogCWRhdGEtPnRpbWVvID0gMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFo7CisJZGF0YS0+bmZzX3NlcnZlci5wb3J0ID0gbmZzcy0+cG9ydDsKIAlkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4gPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuOwogCW1lbWNweSgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKIAkJZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKTsKQEAgLTIxMDQsNyArMjEwNyw3IEBACiAJfTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YShORlNfTU9VTlRfVkVSMyB8IE5GU19NT1VOVF9UQ1ApOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoMyk7CiAJbW50ZmggPSBremFsbG9jKHNpemVvZigqbW50ZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMIHx8IG1udGZoID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZmg7CkBAIC0yMzI5LDcgKzIzMzIsNyBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3M7CiAKLQluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOworCW5mc19zZXRfcG9ydChzYXAsICZhcmdzLT5uZnNfc2VydmVyLnBvcnQsIE5GU19QT1JUKTsKIAogCW5mc192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7CiAKQEAgLTIzNzQsNyArMjM3Nyw2IEBACiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9fZGF0YTsKIAotCWFyZ3MtPnZlcnNpb24JCT0gNDsKIAlzd2l0Y2ggKGRhdGEtPnZlcnNpb24pIHsKIAljYXNlIDE6CiAJCWlmIChkYXRhLT5ob3N0X2FkZHJsZW4gPiBzaXplb2YoYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzKSkKQEAgLTI2NTgsNyArMjY2MCw3IEBACiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgwKTsKKwlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKDQpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZGF0YTsKIApAQCAtMjY4OCw3ICsyNjkwLDYgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAluZnNfc3VwZXJfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhzYik7CiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKLQluZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcik7CiAJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc2IpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzeGRyLmMgYi9mcy9uZnNkL25mczN4ZHIuYwppbmRleCBlZGY5MjZlLi5kMGEyY2UxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczN4ZHIuYworKysgYi9mcy9uZnNkL25mczN4ZHIuYwpAQCAtOTU4LDcgKzk1OCw3IEBACiAJCXAxID0gZW5jb2RlX2VudHJ5X2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4sIGlubyk7CiAKIAkJaWYgKHBsdXMpCi0JCQlwID0gZW5jb2RlX2VudHJ5cGx1c19iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuKTsKKwkJCXAxID0gZW5jb2RlX2VudHJ5cGx1c19iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuKTsKIAogCQkvKiBkZXRlcm1pbmUgZW50cnkgd29yZCBsZW5ndGggYW5kIGxlbmd0aHMgdG8gZ28gaW4gcGFnZXMgKi8KIAkJbnVtX2VudHJ5X3dvcmRzID0gcDEgLSB0bXA7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCAwMDM4OGQyLi41YzAxZmMxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IG5mc2RfcG9vbF9zdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0bm9kZS5jIGIvZnMvbmlsZnMyL2J0bm9kZS5jCmluZGV4IDZhMjcxMWYuLjg0YzI1MzggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idG5vZGUuYworKysgYi9mcy9uaWxmczIvYnRub2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogdm9pZCBuaWxmc19idG5vZGVfY2FjaGVfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jKQogeworCW1lbXNldChidG5jLCAwLCBzaXplb2YoKmJ0bmMpKTsKIAlJTklUX1JBRElYX1RSRUUoJmJ0bmMtPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CiAJc3Bpbl9sb2NrX2luaXQoJmJ0bmMtPnRyZWVfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ0bmMtPnByaXZhdGVfbGlzdCk7CkBAIC04Niw2ICs4Nyw3IEBACiAJCQlicmVsc2UoYmgpOwogCQkJQlVHKCk7CiAJCX0KKwkJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiAJCWJoLT5iX2JkZXYgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfYmRldjsKIAkJYmgtPmJfYmxvY2tuciA9IGJsb2NrbnI7CiAJCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKQEAgLTI3NSw4ICsyNzcsNyBAQAogCQkJCSAgICAgICAiaW52YWxpZCBvbGRrZXkgJWxsZCAobmV3a2V5PSVsbGQpIiwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvbGRrZXksCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3a2V5KTsKLQkJaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkob2JoKSAmJiBUZXN0U2V0UGFnZURpcnR5KG9wYWdlKSkKLQkJCUJVRygpOworCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShvYmgpOwogCiAJCXNwaW5fbG9ja19pcnEoJmJ0bmMtPnRyZWVfbG9jayk7CiAJCXJhZGl4X3RyZWVfZGVsZXRlKCZidG5jLT5wYWdlX3RyZWUsIG9sZGtleSk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvY3BmaWxlLmMgYi9mcy9uaWxmczIvY3BmaWxlLmMKaW5kZXggMWM2Y2ZiNS4uM2Y1ZDVkMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2NwZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9jcGZpbGUuYwpAQCAtODcxLDcgKzg3MSw2IEBACiAJCSAqIGV4Y2x1c2l2ZSB3aXRoIGEgbmV3IG1vdW50IGpvYi4gIFRob3VnaCBpdCBkb2Vzbid0IGNvdmVyCiAJCSAqIHVtb3VudCwgaXQncyBlbm91Z2ggZm9yIHRoZSBwdXJwb3NlLgogCQkgKi8KLQkJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJaWYgKG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChuaWxmcywgY25vLCAxKSkgewogCQkJLyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHByb3RlY3QKIAkJCSAgIHBsYWluIHJlYWQtb25seSBtb3VudHMgc2luY2UgdGhleSBhcmUgZXhjbHVzaXZlCkBAIC04ODAsNyArODc5LDYgQEAKIAkJCXJldCA9IC1FQlVTWTsKIAkJfSBlbHNlCiAJCQlyZXQgPSBuaWxmc19jcGZpbGVfY2xlYXJfc25hcHNob3QoY3BmaWxlLCBjbm8pOwotCQltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSBOSUxGU19TTkFQU0hPVDoKIAkJcmV0dXJuIG5pbGZzX2NwZmlsZV9zZXRfc25hcHNob3QoY3BmaWxlLCBjbm8pOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2Rpci5jIGIvZnMvbmlsZnMyL2Rpci5jCmluZGV4IDFhNGZhMDQuLmUwOTcwOTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXIuYworKysgYi9mcy9uaWxmczIvZGlyLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IG5pbGZzX3JlYWRkaXIsCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCBmYzgyNzhjLi4zMDI5MmRmIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmlsZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5pbGZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBuaWxmc19wYWdlX21rd3JpdGUsCiB9OwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMJ3MgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIG9rIGZvcgogICogdGhlIG5pbGZzIGZpbGVzeXN0ZW0uCiAgKi8KLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggMmQyYzUwMS4uMmEwYTVhMyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTQwMCw2ICs0MDAsNyBAQAogCWlpLT5pX2Rpcl9hY2wgPSBTX0lTUkVHKGlub2RlLT5pX21vZGUpID8KIAkJMCA6IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9kaXJfYWNsKTsKICNlbmRpZgorCWlpLT5pX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCWlpLT5pX2NubyA9IDA7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9nZW5lcmF0aW9uKTsKIApAQCAtNjYzLDcgKzY2NCw2IEBACiAJaW50IGVycjsKIAogCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwotCS8qIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIE1VU1QgbG9jayBzX2lub2RlX2xvY2sgKi8KIAlpZiAoaWktPmlfYmggPT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwogCQllcnIgPSBuaWxmc19pZmlsZV9nZXRfaW5vZGVfYmxvY2soc2JpLT5zX2lmaWxlLCBpbm9kZS0+aV9pbm8sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW9jdGwuYyBiL2ZzL25pbGZzMi9pb2N0bC5jCmluZGV4IDY1NzJlYTQuLmY2YWY3NjAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pb2N0bC5jCisrKyBiL2ZzL25pbGZzMi9pb2N0bC5jCkBAIC05OSw3ICs5OSw4IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmNwZmlsZSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmcy0+bnNfY3BmaWxlOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCXN0cnVjdCBpbm9kZSAqY3BmaWxlID0gbmlsZnMtPm5zX2NwZmlsZTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKIAlzdHJ1Y3QgbmlsZnNfY3Btb2RlIGNwbW9kZTsKIAlpbnQgcmV0OwpAQCAtMTA5LDE0ICsxMTAsMTcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNwbW9kZSwgYXJncCwgc2l6ZW9mKGNwbW9kZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCW11dGV4X2xvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CiAJcmV0ID0gbmlsZnNfY3BmaWxlX2NoYW5nZV9jcG1vZGUoCiAJCWNwZmlsZSwgY3Btb2RlLmNtX2NubywgY3Btb2RlLmNtX21vZGUpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewogCQluaWxmc190cmFuc2FjdGlvbl9hYm9ydChpbm9kZS0+aV9zYik7CisJCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KKwltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk3LDcgKzMwMSwxOCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JYmgtPmJfcHJpdmF0ZSA9IHZkZXNjOworCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYmgtPmJfYXNzb2NfYnVmZmVycykpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjb25mbGljdGluZyAlcyBidWZmZXI6IGlubz0lbGx1LCAiCisJCSAgICAgICAiY25vPSVsbHUsIG9mZnNldD0lbGx1LCBibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfaW5vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfYmxvY2tuciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQogCWxpc3RfYWRkX3RhaWwoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsIGJ1ZmZlcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzM1LDI0ICszNTAsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJcmV0ID0gbmlsZnNfZ2NjYWNoZV93YWl0X2FuZF9tYXJrX2RpcnR5KGJoKTsKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKLQkJCQl2ZGVzYyA9IGJoLT5iX3ByaXZhdGU7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVAotCQkJCSAgICAgICAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogIgotCQkJCSAgICAgICAiaW5vPSVsbHUsIGNubz0lbGx1LCBvZmZzZXQ9JWxsdSwgIgotCQkJCSAgICAgICAiYmxvY2tucj0lbGx1LCB2YmxvY2tucj0lbGx1XG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywKLQkJCQkgICAgICAgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2NubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF92YmxvY2tucik7Ci0JCQl9CisJCQlXQVJOX09OKHJldCA9PSAtRUVYSVNUKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJcmV0dXJuIG5tZW1iczsKQEAgLTM2MCw3ICszNjEsNiBAQAogIGZhaWxlZDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNDcxLDcgKzQ3MSw2IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsZWQ6Ci0JbmlsZnNfcmVtb3ZlX2FsbF9nY2lub2RlKG5pbGZzKTsKIAlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBHQyBmYWlsZWQgZHVyaW5nIHByZXBhcmF0aW9uOiAlczogZXJyPSVkXG4iLAogCSAgICAgICBtc2csIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU2MCw2ICs1NTksOCBAQAogCWVsc2UKIAkJcmV0ID0gbmlsZnNfY2xlYW5fc2VnbWVudHMoaW5vZGUtPmlfc2IsIGFyZ3YsIGtidWZzKTsKIAorCWlmIChyZXQgPCAwKQorCQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCiAgb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbWR0LmMgYi9mcy9uaWxmczIvbWR0LmMKaW5kZXggYjE4YzQ5OS4uZjYzMjYxMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL21kdC5jCisrKyBiL2ZzL25pbGZzMi9tZHQuYwpAQCAtNDMzLDcgKzQzMyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVmX21kdF9pb3BzOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX21kdF9mb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX21kdF9mb3BzOwogCiAvKgogICogTklMRlMyIHVzZXMgcHNldWRvIGlub2RlcyBmb3IgbWV0YSBkYXRhIGZpbGVzIHN1Y2ggYXMgREFULCBjcGZpbGUsIHN1ZmlsZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9uaWxmcy5oIGIvZnMvbmlsZnMyL25pbGZzLmgKaW5kZXggYmFkNzM2OC4uNGRhNmY2NyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL25pbGZzLmgKQEAgLTI5NCw5ICsyOTQsOSBAQAogLyoKICAqIElub2RlcyBhbmQgZmlsZXMgb3BlcmF0aW9ucwogICovCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNjgzZGY4OS4uNmVmZjY2YSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yNDY4LDE3ICsyNDY4LDIyIEBACiAJLyogQ2xlYXIgcmVxdWVzdHMgKGV2ZW4gd2hlbiB0aGUgY29uc3RydWN0aW9uIGZhaWxlZCkgKi8KIAlzcGluX2xvY2soJnNjaS0+c2Nfc3RhdGVfbG9jayk7CiAKLQlzY2ktPnNjX3N0YXRlICY9IH5OSUxGU19TRUdDVE9SX0NPTU1JVDsKLQogCWlmIChyZXEtPm1vZGUgPT0gU0NfTFNFR19TUikgeworCQlzY2ktPnNjX3N0YXRlICY9IH5OSUxGU19TRUdDVE9SX0NPTU1JVDsKIAkJc2NpLT5zY19zZXFfZG9uZSA9IHJlcS0+c2VxX2FjY2VwdGVkOwogCQluaWxmc19zZWdjdG9yX3dha2V1cChzY2ksIHJlcS0+c2NfZXJyID8gOiByZXEtPnNiX2Vycik7CiAJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCA9IDA7Ci0JfSBlbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfRklMRSkKLQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9GSUxFX0JJVDsKLQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0RBVF9CSVQ7CisJfSBlbHNlIHsKKwkJaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9GSUxFX0JJVDsKKwkJZWxzZSBpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0RBVCkKKwkJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKIAorCQkvKiByZS1lbmFibGUgdGltZXIgaWYgY2hlY2twb2ludCBjcmVhdGlvbiB3YXMgbm90IGRvbmUgKi8KKwkJaWYgKHNjaS0+c2NfdGltZXIgJiYgKHNjaS0+c2Nfc3RhdGUgJiBOSUxGU19TRUdDVE9SX0NPTU1JVCkgJiYKKwkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNjaS0+c2NfdGltZXItPmV4cGlyZXMpKQorCQkJYWRkX3RpbWVyKHNjaS0+c2NfdGltZXIpOworCX0KIAlzcGluX3VubG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmxzL25sc19iYXNlLmMgYi9mcy9ubHMvbmxzX2Jhc2UuYwppbmRleCAyMjI0YjRkLi40NGE4OGE5IDEwMDY0NAotLS0gYS9mcy9ubHMvbmxzX2Jhc2UuYworKysgYi9mcy9ubHMvbmxzX2Jhc2UuYwpAQCAtMTI0LDEwICsxMjQsMTAgQEAKIAl3aGlsZSAoKnMgJiYgbGVuID4gMCkgewogCQlpZiAoKnMgJiAweDgwKSB7CiAJCQlzaXplID0gdXRmOF90b191dGYzMihzLCBsZW4sICZ1KTsKLQkJCWlmIChzaXplIDwgMCkgewotCQkJCS8qIElnbm9yZSBjaGFyYWN0ZXIgYW5kIG1vdmUgb24gKi8KLQkJCQlzaXplID0gMTsKLQkJCX0gZWxzZSBpZiAodSA+PSBQTEFORV9TSVpFKSB7CisJCQlpZiAoc2l6ZSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmICh1ID49IFBMQU5FX1NJWkUpIHsKIAkJCQl1IC09IFBMQU5FX1NJWkU7CiAJCQkJKm9wKysgPSAod2NoYXJfdCkgKFNVUlJPR0FURV9QQUlSIHwKIAkJCQkJCSgodSA+PiAxMCkgJiBTVVJST0dBVEVfQklUUykpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jIGIvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCmluZGV4IDgyOGE4ODkuLjdlNTRlNTIgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKQEAgLTkxLDYgKzkxLDcgQEAKIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmRuOwogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqKnByZXY7CiAJc3RydWN0IGZvd25fc3RydWN0ICpmb3duOworCV9fdTMyIHRlc3RfbWFzayA9IGV2ZW50LT5tYXNrICYgfkZTX0VWRU5UX09OX0NISUxEOwogCiAJdG9fdGVsbCA9IGV2ZW50LT50b190ZWxsOwogCkBAIC0xMDYsNyArMTA3LDcgQEAKIAlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKIAlwcmV2ID0gJmRuZW50cnktPmRuOwogCXdoaWxlICgoZG4gPSAqcHJldikgIT0gTlVMTCkgewotCQlpZiAoKGRuLT5kbl9tYXNrICYgZXZlbnQtPm1hc2spID09IDApIHsKKwkJaWYgKChkbi0+ZG5fbWFzayAmIHRlc3RfbWFzaykgPT0gMCkgewogCQkJcHJldiA9ICZkbi0+ZG5fbmV4dDsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vZGVfbWFyay5jIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwppbmRleCBjOGEwN2M2Li4zMTY1ZDg1IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCisrKyBiL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKQEAgLTMyNCwxMSArMzI0LDExIEBACiAJc3Bpbl9sb2NrKCZncm91cC0+bWFya19sb2NrKTsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCi0JZW50cnktPmdyb3VwID0gZ3JvdXA7Ci0JZW50cnktPmlub2RlID0gaW5vZGU7Ci0KIAlsZW50cnkgPSBmc25vdGlmeV9maW5kX21hcmtfZW50cnkoZ3JvdXAsIGlub2RlKTsKIAlpZiAoIWxlbnRyeSkgeworCQllbnRyeS0+Z3JvdXAgPSBncm91cDsKKwkJZW50cnktPmlub2RlID0gaW5vZGU7CisKIAkJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5pX2xpc3QsICZpbm9kZS0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMpOwogCQlsaXN0X2FkZCgmZW50cnktPmdfbGlzdCwgJmdyb3VwLT5tYXJrX2VudHJpZXMpOwogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMgYi9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKaW5kZXggMzgxNmQ1Ny4uYjhiZjUzYiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCisrKyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCQkvKiByZW1lbWJlciwgYWZ0ZXIgb2xkIHdhcyBwdXQgb24gdGhlIHdhaXRfcSB3ZSBhcmVuJ3QKIAkJCSAqIGFsbG93ZWQgdG8gbG9vayBhdCB0aGUgaW5vZGUgYW55IG1vcmUsIG9ubHkgdGhpbmcKIAkJCSAqIGxlZnQgdG8gY2hlY2sgd2FzIGlmIHRoZSBmaWxlX25hbWUgaXMgdGhlIHNhbWUgKi8KLQkJCWlmIChvbGQtPm5hbWVfbGVuICYmCisJCQlpZiAoIW9sZC0+bmFtZV9sZW4gfHwKIAkJCSAgICAhc3RyY21wKG9sZC0+ZmlsZV9uYW1lLCBuZXctPmZpbGVfbmFtZSkpCiAJCQkJcmV0dXJuIHRydWU7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDA5Y2MyNWQuLmM0NTJkMTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtOTY2LDcgKzk2Niw3IEBACiB9CiAjZW5kaWYgIC8qIENPTkZJR19ERUJVR19GUyAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvMmhiX2RlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvMmhiX2RlYnVnX2ZvcHMgPSB7CiAJLm9wZW4gPQkJbzJoYl9kZWJ1Z19vcGVuLAogCS5yZWxlYXNlID0JbzJoYl9kZWJ1Z19yZWxlYXNlLAogCS5yZWFkID0JCW8yaGJfZGVidWdfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYwppbmRleCBjZmIyYmU3Li5kYTc5NGJjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zdF9zZXFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zdF9zZXFfZm9wcyA9IHsKIAkub3BlbiA9IG5zdF9mb3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC0zODgsNyArMzg4LDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjX3NlcV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Nfc2VxX2ZvcHMgPSB7CiAJLm9wZW4gPSBzY19mb3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCmluZGV4IGNhNDYwMDIuLjQyYjBiYWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfcHVyZ2VsaXN0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19wdXJnZWxpc3RfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19wdXJnZWxpc3Rfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAogCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLApAQCAtNTM4LDcgKzUzOCw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX21sZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbWxlX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfbWxlX29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKIAkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKQEAgLTc0MSw3ICs3NDEsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX2xvY2tyZXNfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2xvY2tyZXNfcmVsZWFzZSwKIAkucmVhZCA9CQlzZXFfcmVhZCwKQEAgLTkyNSw3ICs5MjUsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19zdGF0ZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19zdGF0ZV9vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9tbWFwLmMgYi9mcy9vY2ZzMi9tbWFwLmMKaW5kZXggYjYwNjQ5Ni4uMzk3Mzc2MSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbW1hcC5jCisrKyBiL2ZzL29jZnMyL21tYXAuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBvY2ZzMl9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgb2NmczJfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IG9jZnMyX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBvY2ZzMl9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggNGNjM2M4OS4uYzBlNDhhZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0zNzMsNyArMzczLDcgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfb3NiX2RlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKIAkub3BlbiA9CQlvY2ZzMl9vc2JfZGVidWdfb3BlbiwKIAkucmVsZWFzZSA9CW9jZnMyX2RlYnVnX3JlbGVhc2UsCiAJLnJlYWQgPQkJb2NmczJfZGVidWdfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jCmluZGV4IDM2ODBiYWUuLmI0MmQ2MjQgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZGlyLmMKKysrIGIvZnMvb21mcy9kaXIuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJLnJtZGlyID0gb21mc19ybWRpciwKIH07CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIgPSBvbWZzX3JlYWRkaXIsCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCmRpZmYgLS1naXQgYS9mcy9vbWZzL2ZpbGUuYyBiL2ZzL29tZnMvZmlsZS5jCmluZGV4IDQ4NDVmYmIuLjM5OTQ4N2MgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZmlsZS5jCisrKyBiL2ZzL29tZnMvZmlsZS5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBvbWZzX2dldF9ibG9jayk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkID0gZG9fc3luY19yZWFkLAogCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9vbWZzL29tZnMuaCBiL2ZzL29tZnMvb21mcy5oCmluZGV4IGRmNzEwMzkuLmViZTJmZGIgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvb21mcy5oCisrKyBiL2ZzL29tZnMvb21mcy5oCkBAIC00NCwxNCArNDQsMTQgQEAKIGV4dGVybiBpbnQgb21mc19jbGVhcl9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgYmxvY2ssIGludCBjb3VudCk7CiAKIC8qIGRpci5jICovCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKIGV4dGVybiBpbnQgb21mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBvbWZzX2lzX2JhZChzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmksIHN0cnVjdCBvbWZzX2hlYWRlciAqaGVhZGVyLAogCQkJdTY0IGZzYmxvY2spOwogCiAvKiBmaWxlLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb21mc19maWxlX2lub3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb21mc19hb3BzOwogZXh0ZXJuIHZvaWQgb21mc19tYWtlX2VtcHR5X3RhYmxlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDUyYzQxNTEuLmFlMTdkMDIgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTc3NywzNiArNzc3LDU1IEBACiBzdGF0aWMgaW50CiBwaXBlX3JlYWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQkvKiBXZSBjb3VsZCBoYXZlIHBlcmhhcHMgdXNlZCBhdG9taWNfdCwgYnV0IHRoaXMgYW5kIGZyaWVuZHMKLQkgICBiZWxvdyBhcmUgdGhlIG9ubHkgcGxhY2VzLiAgU28gaXQgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUuICAqLworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBwaXBlX3Jkd3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggMGM2YmM2MC4uODIyYzJkNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMzIyLDYgKzMyMiw4IEBACiAJCQlwLT5uaXZjc3cpOwogfQogCisjaWZkZWYgQ09ORklHX01NVQorCiBzdHJ1Y3Qgc3RhY2tfc3RhdHMgewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcJc3RhcnRwYWdlOwpAQCAtNDAyLDYgKzQwNCwxMSBAQAogCQltbXB1dChtbSk7CiAJfQogfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHRhc2tfc2hvd19zdGFja191c2FnZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KKyNlbmRpZgkJLyogQ09ORklHX01NVSAqLwogCiBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCQkJc3RydWN0IHBpZCAqcGlkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC01NjQsNyArNTcxLDcgQEAKIAkJcnNzbGltLAogCQltbSA/IG1tLT5zdGFydF9jb2RlIDogMCwKIAkJbW0gPyBtbS0+ZW5kX2NvZGUgOiAwLAotCQkocGVybWl0dGVkKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKKwkJKHBlcm1pdHRlZCAmJiBtbSkgPyB0YXNrLT5zdGFja19zdGFydCA6IDAsCiAJCWVzcCwKIAkJZWlwLAogCQkvKiBUaGUgc2lnbmFsIGluZm9ybWF0aW9uIGhlcmUgaXMgb2Jzb2xldGUuCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDgzNzQ2OWEuLmFmNjQzYjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yNTk3LDggKzI1OTcsNyBAQAogCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgcGlkKTsKIAlkZW50cnkgPSBkX2hhc2hfYW5kX2xvb2t1cChtbnQtPm1udF9yb290LCAmbmFtZSk7CiAJaWYgKGRlbnRyeSkgewotCQlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGVudHJ5KTsKKwkJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGVudHJ5KTsKIAkJZF9kcm9wKGRlbnRyeSk7CiAJCWRwdXQoZGVudHJ5KTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2tjb3JlLmMgYi9mcy9wcm9jL2tjb3JlLmMKaW5kZXggNTYwMTMzNy4uYTQ0YTc4OSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9rY29yZS5jCisrKyBiL2ZzL3Byb2Mva2NvcmUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCmRpZmYgLS1naXQgYS9mcy9wcm9jL21lbWluZm8uYyBiL2ZzL3Byb2MvbWVtaW5mby5jCmluZGV4IGM3YmZmNGYuLmE2NTIzOWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvbWVtaW5mby5jCisrKyBiL2ZzL3Byb2MvbWVtaW5mby5jCkBAIC05OSw3ICs5OSw3IEBACiAJCSJWbWFsbG9jVXNlZDogICAgJThsdSBrQlxuIgogCQkiVm1hbGxvY0NodW5rOiAgICU4bHUga0JcbiIKICNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLQkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlOGx1IGtCXG4iCisJCSJIYXJkd2FyZUNvcnJ1cHRlZDogJTVsdSBrQlxuIgogI2VuZGlmCiAJCSwKIAkJSyhpLnRvdGFscmFtKSwKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcGFnZS5jIGIvZnMvcHJvYy9wYWdlLmMKaW5kZXggMjI4MWMyYy4uNTAzM2NlMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wYWdlLmMKKysrIGIvZnMvcHJvYy9wYWdlLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAogCiAjZGVmaW5lIEtQRl9LU00JCQkyMQpAQCAtMTgwLDYgKzE4MSwxMCBAQAogCXUgfD0ga3BmX2NvcHlfYml0KGssIEtQRl9VTkVWSUNUQUJMRSwJUEdfdW5ldmljdGFibGUpOwogCXUgfD0ga3BmX2NvcHlfYml0KGssIEtQRl9NTE9DS0VELAlQR19tbG9ja2VkKTsKIAorI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQorCXUgfD0ga3BmX2NvcHlfYml0KGssIEtQRl9IV1BPSVNPTiwJUEdfaHdwb2lzb24pOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKIAl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfVU5DQUNIRUQsCVBHX3VuY2FjaGVkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvcm9tZnMvc3RvcmFnZS5jIGIvZnMvcm9tZnMvc3RvcmFnZS5jCmluZGV4IGIzMjA4YWQuLjcxZTJiNGQgMTAwNjQ0Ci0tLSBhL2ZzL3JvbWZzL3N0b3JhZ2UuYworKysgYi9mcy9yb21mcy9zdG9yYWdlLmMKQEAgLTI1MywxMSArMjUzLDExIEBACiAKICNpZmRlZiBDT05GSUdfUk9NRlNfT05fTVRECiAJaWYgKHNiLT5zX210ZCkKLQkJcmV0dXJuIHJvbWZzX210ZF9zdHJubGVuKHNiLCBwb3MsIGxpbWl0KTsKKwkJcmV0dXJuIHJvbWZzX210ZF9zdHJubGVuKHNiLCBwb3MsIG1heGxlbik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUk9NRlNfT05fQkxPQ0sKIAlpZiAoc2ItPnNfYmRldikKLQkJcmV0dXJuIHJvbWZzX2Jsa19zdHJubGVuKHNiLCBwb3MsIGxpbWl0KTsKKwkJcmV0dXJuIHJvbWZzX2Jsa19zdHJubGVuKHNiLCBwb3MsIG1heGxlbik7CiAjZW5kaWYKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2ZzL3NlbGVjdC5jIGIvZnMvc2VsZWN0LmMKaW5kZXggYTIwMWZjMy4uZmQzOGNlMmUgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDI1MjQ3MTQuLjYwYzcwMmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC00MCw3ICs0MCw3IEBACiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAJdm9pZAkJCQkqYnVmZmVyOwogCWludAkJCQltbWFwcGVkOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAJKnZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAlzdHJ1Y3QgZmlsZQkJCSpmaWxlOwogCXN0cnVjdCBobGlzdF9ub2RlCQlsaXN0OwogfTsKQEAgLTMzMSw3ICszMzEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBiaW5fdm1hX29wZW4sCiAJLmNsb3NlCQk9IGJpbl92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGJpbl9mYXVsdCwKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMDA1MGZjNC4uZTAyMDE4MyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogCiBERUZJTkVfTVVURVgoc3lzZnNfbXV0ZXgpOwpAQCAtMjg1LDYgKzI4Niw5IEBACiAJCXN5c2ZzX3B1dChzZC0+c19zeW1saW5rLnRhcmdldF9zZCk7CiAJaWYgKHN5c2ZzX3R5cGUoc2QpICYgU1lTRlNfQ09QWV9OQU1FKQogCQlrZnJlZShzZC0+c19uYW1lKTsKKwlpZiAoc2QtPnNfaWF0dHIgJiYgc2QtPnNfaWF0dHItPmlhX3NlY2RhdGEpCisJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhLAorCQkJCQlzZC0+c19pYXR0ci0+aWFfc2VjZGF0YV9sZW4pOwogCWtmcmVlKHNkLT5zX2lhdHRyKTsKIAlzeXNmc19mcmVlX2lubyhzZC0+c19pbm8pOwogCWttZW1fY2FjaGVfZnJlZShzeXNmc19kaXJfY2FjaGVwLCBzZCk7CkBAIC04OTQsNyArODk4LDggQEAKIAogCW11dGV4X2xvY2soJnN5c2ZzX3JlbmFtZV9tdXRleCk7CiAJQlVHX09OKCFzZC0+c19wYXJlbnQpOwotCW5ld19wYXJlbnRfc2QgPSBuZXdfcGFyZW50X2tvYmotPnNkID8gbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OworCW5ld19wYXJlbnRfc2QgPSAobmV3X3BhcmVudF9rb2JqICYmIG5ld19wYXJlbnRfa29iai0+c2QpID8KKwkJbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OwogCiAJZXJyb3IgPSAwOwogCWlmIChzZC0+c19wYXJlbnQgPT0gbmV3X3BhcmVudF9zZCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA1NjFhOWMwLi5mNWVhNDY4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kLCAqbmV3X29kID0gTlVMTDsKIAogIHJldHJ5OgotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAoIXNkLT5zX2F0dHIub3BlbiAmJiBuZXdfb2QpIHsKIAkJc2QtPnNfYXR0ci5vcGVuID0gbmV3X29kOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJm9kLT5idWZmZXJzKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmIChvZCkgewogCQlrZnJlZShuZXdfb2QpOwpAQCAtMzE1LDggKzMxNSw5IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZnNfYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCA9IHNkLT5zX2F0dHIub3BlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9kLT5yZWZjbnQpKQpAQCAtMzI0LDcgKzMyNSw3IEBACiAJZWxzZQogCQlvZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJa2ZyZWUob2QpOwogfQpAQCAtNDU2LDggKzQ1Nyw5IEBACiB2b2lkIHN5c2ZzX25vdGlmeV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJb2QgPSBzZC0+c19hdHRyLm9wZW47CiAJaWYgKG9kKSB7CkBAIC00NjUsNyArNDY3LDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvZC0+cG9sbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX25vdGlmeV9kaXJlbnQpOwogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggMmU2NDgxYTcuLjEwMDlhZGMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTE1MzQsNyArMTUzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1Ymlmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWJpZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0ICAgICAgICA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IHViaWZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggMzgxODU0NC4uYzJlMzBlZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMTg2LDE5ICsxODYsMzcgQEAKIH0KIAogLyoKKyAqIElmIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgaW9lbmQgaXMgYmV5b25kIHRoZSBjdXJyZW50IEVPRiwKKyAqIHJldHVybiB0aGUgbmV3IEVPRiB2YWx1ZSwgb3RoZXJ3aXNlIHplcm8uCisgKi8KK1NUQVRJQyB4ZnNfZnNpemVfdAoreGZzX2lvZW5kX25ld19lb2YoCisJeGZzX2lvZW5kX3QJCSppb2VuZCkKK3sKKwl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKKwl4ZnNfZnNpemVfdAkJaXNpemU7CisJeGZzX2ZzaXplX3QJCWJzaXplOworCisJYnNpemUgPSBpb2VuZC0+aW9fb2Zmc2V0ICsgaW9lbmQtPmlvX3NpemU7CisJaXNpemUgPSBNQVgoaXAtPmlfc2l6ZSwgaXAtPmlfbmV3X3NpemUpOworCWlzaXplID0gTUlOKGlzaXplLCBic2l6ZSk7CisJcmV0dXJuIGlzaXplID4gaXAtPmlfZC5kaV9zaXplID8gaXNpemUgOiAwOworfQorCisvKgogICogVXBkYXRlIG9uLWRpc2sgZmlsZSBzaXplIG5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBkaXNrLgogICogVGhlIGN1cnJlbnQgaW4tbWVtb3J5IGZpbGUgc2l6ZSBpcyBpX3NpemUuICBJZiBhIHdyaXRlIGlzIGJleW9uZAogICogZW9mIGlfbmV3X3NpemUgd2lsbCBiZSB0aGUgaW50ZW5kZWQgZmlsZSBzaXplIHVudGlsIGlfc2l6ZSBpcwogICogdXBkYXRlZC4gIElmIHRoaXMgd3JpdGUgZG9lcyBub3QgZXh0ZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSB2YWxpZAogICogZmlsZSBzaXplIHRoZW4gcmVzdHJpY3QgdGhpcyB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgd3JpdGUuCiAgKi8KKwogU1RBVElDIHZvaWQKIHhmc19zZXRmaWxlc2l6ZSgKIAl4ZnNfaW9lbmRfdAkJKmlvZW5kKQogewogCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOwogCXhmc19mc2l6ZV90CQlpc2l6ZTsKLQl4ZnNfZnNpemVfdAkJYnNpemU7CiAKIAlBU1NFUlQoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyk7CiAJQVNTRVJUKGlvZW5kLT5pb190eXBlICE9IElPTUFQX1JFQUQpOwpAQCAtMjA2LDE2ICsyMjQsMTAgQEAKIAlpZiAodW5saWtlbHkoaW9lbmQtPmlvX2Vycm9yKSkKIAkJcmV0dXJuOwogCi0JYnNpemUgPSBpb2VuZC0+aW9fb2Zmc2V0ICsgaW9lbmQtPmlvX3NpemU7Ci0KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQotCWlzaXplID0gTUFYKGlwLT5pX3NpemUsIGlwLT5pX25ld19zaXplKTsKLQlpc2l6ZSA9IE1JTihpc2l6ZSwgYnNpemUpOwotCi0JaWYgKGlwLT5pX2QuZGlfc2l6ZSA8IGlzaXplKSB7CisJaXNpemUgPSB4ZnNfaW9lbmRfbmV3X2VvZihpb2VuZCk7CisJaWYgKGlzaXplKSB7CiAJCWlwLT5pX2QuZGlfc2l6ZSA9IGlzaXplOwotCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwogCX0KIApAQCAtNDA0LDEwICs0MTYsMTYgQEAKIAlzdHJ1Y3QgYmlvCSpiaW8pCiB7CiAJYXRvbWljX2luYygmaW9lbmQtPmlvX3JlbWFpbmluZyk7Ci0KIAliaW8tPmJpX3ByaXZhdGUgPSBpb2VuZDsKIAliaW8tPmJpX2VuZF9pbyA9IHhmc19lbmRfYmlvOwogCisJLyoKKwkgKiBJZiB0aGUgSS9PIGlzIGJleW9uZCBFT0Ygd2UgbWFyayB0aGUgaW5vZGUgZGlydHkgaW1tZWRpYXRlbHkKKwkgKiBidXQgZG9uJ3QgdXBkYXRlIHRoZSBpbm9kZSBzaXplIHVudGlsIEkvTyBjb21wbGV0aW9uLgorCSAqLworCWlmICh4ZnNfaW9lbmRfbmV3X2VvZihpb2VuZCkpCisJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoWEZTX0koaW9lbmQtPmlvX2lub2RlKSk7CisKIAlzdWJtaXRfYmlvKFdSSVRFLCBiaW8pOwogCUFTU0VSVCghYmlvX2ZsYWdnZWQoYmlvLCBCSU9fRU9QTk9UU1VQUCkpOwogCWJpb19wdXQoYmlvKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCA5ODhkOGY4Li5lZmY2MWUyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC00Miw3ICs0Miw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb19yZWFkKApAQCAtMTc2LDE0ICsxNzYsNyBAQAogCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCiAJaW50CQkJZGF0YXN5bmMpCiB7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7Ci0JaW50CQkJZXJyb3I7Ci0KLQkvKiBjYXB0dXJlIHNpemUgdXBkYXRlcyBpbiBJL08gY29tcGxldGlvbiBiZWZvcmUgd3JpdGluZyB0aGUgaW5vZGUuICovCi0JZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJcmV0dXJuIC14ZnNfZnN5bmMoaXApOwpAQCAtMjgwLDcgKzI3Myw3IEBACiAJLmZzeW5jCQk9IHhmc19maWxlX2ZzeW5jLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0geGZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggZGEwMTU5ZC4uY2Q0MmVmNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNTcsMTkgKzU3LDIyIEBACiAjaW5jbHVkZSA8bGludXgvZmllbWFwLmg+CiAKIC8qCi0gKiBCcmluZyB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSB1cHRvZGF0ZS4KLSAqIFVzZWQgYmVmb3JlIGxvZ2dpbmcgdGhlIGlub2RlIHRvIGRpc2sgb3Igd2hlbiB0aGUgTGludXggaW5vZGUgZ29lcyBhd2F5LgorICogQnJpbmcgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIFhGUyBpbm9kZSB1cHRvZGF0ZS4KKyAqCisgKiBVc2VkIGJlZm9yZSB3cml0aW5nIHRoZSBpbm9kZSB0byBkaXNrLgogICovCiB2b2lkCi14ZnNfc3luY2hyb25pemVfYXRpbWUoCit4ZnNfc3luY2hyb25pemVfdGltZXMoCiAJeGZzX2lub2RlX3QJKmlwKQogewogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBWRlNfSShpcCk7CiAKLQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpKSB7Ci0JCWlwLT5pX2QuZGlfYXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X3NlYzsKLQkJaXAtPmlfZC5kaV9hdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X25zZWM7Ci0JfQorCWlwLT5pX2QuZGlfYXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X3NlYzsKKwlpcC0+aV9kLmRpX2F0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlpcC0+aV9kLmRpX2N0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9jdGltZS50dl9zZWM7CisJaXAtPmlfZC5kaV9jdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisJaXAtPmlfZC5kaV9tdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfbXRpbWUudHZfc2VjOworCWlwLT5pX2QuZGlfbXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9tdGltZS50dl9uc2VjOwogfQogCiAvKgpAQCAtMTA2LDMyICsxMDksMjAgQEAKIAlpZiAoKGZsYWdzICYgWEZTX0lDSEdUSU1FX01PRCkgJiYKIAkgICAgIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJnR2KSkgewogCQlpbm9kZS0+aV9tdGltZSA9IHR2OwotCQlpcC0+aV9kLmRpX210aW1lLnRfc2VjID0gKF9faW50MzJfdCl0di50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfbXRpbWUudF9uc2VjID0gKF9faW50MzJfdCl0di50dl9uc2VjOwogCQlzeW5jX2l0ID0gMTsKIAl9CiAJaWYgKChmbGFncyAmIFhGU19JQ0hHVElNRV9DSEcpICYmCiAJICAgICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZ0dikpIHsKIAkJaW5vZGUtPmlfY3RpbWUgPSB0djsKLQkJaXAtPmlfZC5kaV9jdGltZS50X3NlYyA9IChfX2ludDMyX3QpdHYudHZfc2VjOwotCQlpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpdHYudHZfbnNlYzsKIAkJc3luY19pdCA9IDE7CiAJfQogCiAJLyoKLQkgKiBXZSB1cGRhdGUgdGhlIGlfdXBkYXRlX2NvcmUgZmllbGQgX2FmdGVyXyBjaGFuZ2luZwotCSAqIHRoZSB0aW1lc3RhbXBzIGluIG9yZGVyIHRvIGNvb3JkaW5hdGUgcHJvcGVybHkgd2l0aAotCSAqIHhmc19pZmx1c2goKSBzbyB0aGF0IHdlIGRvbid0IGxvc2UgdGltZXN0YW1wIHVwZGF0ZXMuCi0JICogVGhpcyBrZWVwcyB1cyBmcm9tIGhhdmluZyB0byBob2xkIHRoZSBpbm9kZSBsb2NrCi0JICogd2hpbGUgZG9pbmcgdGhpcy4gIFdlIHVzZSB0aGUgU1lOQ0hST05JWkUgbWFjcm8gdG8KLQkgKiBlbnN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QgcmVvcmRlciB0aGUgdXBkYXRlCi0JICogb2YgaV91cGRhdGVfY29yZSBhYm92ZSB0aGUgdGltZXN0YW1wIHVwZGF0ZXMgYWJvdmUuCisJICogVXBkYXRlIGNvbXBsZXRlIC0gbm93IG1ha2Ugc3VyZSBldmVyeW9uZSBrbm93cyB0aGF0IHRoZSBpbm9kZQorCSAqIGlzIGRpcnR5LgogCSAqLwotCWlmIChzeW5jX2l0KSB7Ci0JCVNZTkNIUk9OSVpFKCk7Ci0JCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKKwlpZiAoc3luY19pdCkKIAkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7Ci0JfQogfQogCiAvKgpAQCAtNTA2LDEwICs0OTcsOCBAQAogCXN0YXQtPmdpZCA9IGlwLT5pX2QuZGlfZ2lkOwogCXN0YXQtPmlubyA9IGlwLT5pX2lubzsKIAlzdGF0LT5hdGltZSA9IGlub2RlLT5pX2F0aW1lOwotCXN0YXQtPm10aW1lLnR2X3NlYyA9IGlwLT5pX2QuZGlfbXRpbWUudF9zZWM7Ci0Jc3RhdC0+bXRpbWUudHZfbnNlYyA9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjOwotCXN0YXQtPmN0aW1lLnR2X3NlYyA9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWM7Ci0Jc3RhdC0+Y3RpbWUudHZfbnNlYyA9IGlwLT5pX2QuZGlfY3RpbWUudF9uc2VjOworCXN0YXQtPm10aW1lID0gaW5vZGUtPmlfbXRpbWU7CisJc3RhdC0+Y3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKIAlzdGF0LT5ibG9ja3MgPQogCQlYRlNfRlNCX1RPX0JCKG1wLCBpcC0+aV9kLmRpX25ibG9ja3MgKyBpcC0+aV9kZWxheWVkX2Jsa3MpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDQ5ZTRhNmEuLjA3MjA1MGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAkJeGlwLT5pX25ld19zaXplID0gbmV3X3NpemU7CiAKIAlpZiAobGlrZWx5KCEoaW9mbGFncyAmIElPX0lOVklTKSkpCi0JCXhmc19pY2hndGltZSh4aXAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKKwkJZmlsZV91cGRhdGVfdGltZShmaWxlKTsKIAogCS8qCiAJICogSWYgdGhlIG9mZnNldCBpcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUsIHdlIGhhdmUgYSBjb3VwbGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCmluZGV4IDllNDFmOTEuLjNkNGEwYzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtODAsNyArODAsNyBAQAogCiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gLUVST0ZTOwotCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCWlmIChvcCAhPSBRX1hRVU9UQVJNICYmICFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCiAJCXJldHVybiAtRU5PU1lTOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IGJkZDQxYzguLjE4YTRiOGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtOTc3LDYgKzk3NywyOCBAQAogfQogCiAvKgorICogRGlydHkgdGhlIFhGUyBpbm9kZSB3aGVuIG1hcmtfaW5vZGVfZGlydHlfc3luYygpIGlzIGNhbGxlZCBzbyB0aGF0CisgKiB3ZSBjYXRjaCB1bmxvZ2dlZCBWRlMgbGV2ZWwgdXBkYXRlcyB0byB0aGUgaW5vZGUuIENhcmUgbXVzdCBiZSB0YWtlbgorICogaGVyZSAtIHRoZSB0cmFuc2FjdGlvbiBjb2RlIGNhbGxzIG1hcmtfaW5vZGVfZGlydHlfc3luYygpIHRvIG1hcmsgdGhlCisgKiBWRlMgaW5vZGUgZGlydHkgaW4gYSB0cmFuc2FjdGlvbiBhbmQgY2xlYXJzIHRoZSBpX3VwZGF0ZV9jb3JlIGZpZWxkOworICogaXQgbXVzdCBjbGVhciB0aGUgZmllbGQgYWZ0ZXIgY2FsbGluZyBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSB0bworICogY29ycmVjdGx5IGluZGljYXRlIHRoYXQgdGhlIGRpcnR5IHN0YXRlIGhhcyBiZWVuIHByb3BhZ2F0ZWQgaW50byB0aGUKKyAqIGlub2RlIGxvZyBpdGVtLgorICoKKyAqIFdlIG5lZWQgdGhlIGJhcnJpZXIoKSB0byBtYWludGFpbiBjb3JyZWN0IG9yZGVyaW5nIGJldHdlZW4gdW5sb2dnZWQKKyAqIHVwZGF0ZXMgYW5kIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgY29kZSB0aGF0IGNsZWFycyB0aGUgaV91cGRhdGVfY29yZQorICogZmllbGQuIFRoaXMgcmVxdWlyZXMgYWxsIHVwZGF0ZXMgdG8gYmUgY29tcGxldGVkIGJlZm9yZSBtYXJraW5nIHRoZQorICogaW5vZGUgZGlydHkuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfZnNfZGlydHlfaW5vZGUoCisJc3RydWN0IGlub2RlCSppbm9kZSkKK3sKKwliYXJyaWVyKCk7CisJWEZTX0koaW5vZGUpLT5pX3VwZGF0ZV9jb3JlID0gMTsKK30KKworLyoKICAqIEF0dGVtcHQgdG8gZmx1c2ggdGhlIGlub2RlLCB0aGlzIHdpbGwgYWN0dWFsbHkgZmFpbAogICogaWYgdGhlIGlub2RlIGlzIHBpbm5lZCwgYnV0IHdlIGRpcnR5IHRoZSBpbm9kZSBhZ2FpbgogICogYXQgdGhlIHBvaW50IHdoZW4gaXQgaXMgdW5waW5uZWQgYWZ0ZXIgYSBsb2cgd3JpdGUsCkBAIC0xMTI2LDcgKzExNDgsNyBAQAogfQogCiBTVEFUSUMgaW50Ci14ZnNfZnNfc3luY19zdXBlcigKK3hmc19mc19zeW5jX2ZzKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJaW50CQkJd2FpdCkKIHsKQEAgLTExMzQsMjMgKzExNTYsMjMgQEAKIAlpbnQJCQllcnJvcjsKIAogCS8qCi0JICogVHJlYXQgYSBzeW5jIG9wZXJhdGlvbiBsaWtlIGEgZnJlZXplLiAgVGhpcyBpcyB0byB3b3JrCi0JICogYXJvdW5kIGEgcmFjZSBpbiBzeW5jX2lub2RlcygpIHdoaWNoIHdvcmtzIGluIHR3byBwaGFzZXMKLQkgKiAtIGFuIGFzeW5jaHJvbm91cyBmbHVzaCwgd2hpY2ggY2FuIHdyaXRlIG91dCBhbiBpbm9kZQotCSAqIHdpdGhvdXQgd2FpdGluZyBmb3IgZmlsZSBzaXplIHVwZGF0ZXMgdG8gY29tcGxldGUsIGFuZCBhCi0JICogc3luY2hyb25vdXMgZmx1c2gsIHdoaWNoIHdvbnQgZG8gYW55dGhpbmcgYmVjYXVzZSB0aGUKLQkgKiBhc3luYyBmbHVzaCByZW1vdmVkIHRoZSBpbm9kZSdzIGRpcnR5IGZsYWcuICBBbHNvCi0JICogc3luY19pbm9kZXMoKSB3aWxsIG5vdCBzZWUgYW55IGZpbGVzIHRoYXQganVzdCBoYXZlCi0JICogb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGJlIGZsdXNoZWQgYmVjYXVzZSB3ZSBkb24ndAotCSAqIGRpcnR5IHRoZSBMaW51eCBpbm9kZSB1bnRpbCBhZnRlciB0aGUgdHJhbnNhY3Rpb24gSS9PCi0JICogY29tcGxldGVzLgorCSAqIE5vdCBtdWNoIHdlIGNhbiBkbyBmb3IgdGhlIGZpcnN0IGFzeW5jIHBhc3MuICBXcml0aW5nIG91dCB0aGUKKwkgKiBzdXBlcmJsb2NrIHdvdWxkIGJlIGNvdW50ZXItcHJvZHVjdGl2ZSBhcyB3ZSBhcmUgZ29pbmcgdG8gcmVkaXJ0eQorCSAqIHdoZW4gd3JpdGluZyBvdXQgb3RoZXIgZGF0YSBhbmQgbWV0YWRhdGEgKGFuZCB3cml0aW5nIG91dCBhIHNpbmdsZQorCSAqIGJsb2NrIGlzIHF1aXRlIGZhc3QgYW55d2F5KS4KKwkgKgorCSAqIFRyeSB0byBhc3luY2hyb25vdXNseSBraWNrIG9mZiBxdW90YSBzeW5jaW5nIGF0IGxlYXN0LgogCSAqLwotCWlmICh3YWl0IHx8IHVubGlrZWx5KHNiLT5zX2Zyb3plbiA9PSBTQl9GUkVFWkVfV1JJVEUpKQotCQllcnJvciA9IHhmc19xdWllc2NlX2RhdGEobXApOwotCWVsc2UKLQkJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIDApOworCWlmICghd2FpdCkgeworCQl4ZnNfcW1fc3luYyhtcCwgU1lOQ19UUllMT0NLKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JaWYgKHVubGlrZWx5KGxhcHRvcF9tb2RlKSkgeworCWVycm9yID0geGZzX3F1aWVzY2VfZGF0YShtcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLWVycm9yOworCisJaWYgKGxhcHRvcF9tb2RlKSB7CiAJCWludAlwcmV2X3N5bmNfc2VxID0gbXAtPm1fc3luY19zZXE7CiAKIAkJLyoKQEAgLTExNjksNyArMTE5MSw3IEBACiAJCQkJbXAtPm1fc3luY19zZXEgIT0gcHJldl9zeW5jX3NlcSk7CiAJfQogCi0JcmV0dXJuIC1lcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogU1RBVElDIGludApAQCAtMTUzOSwxMCArMTU2MSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zID0gewogCS5hbGxvY19pbm9kZQkJPSB4ZnNfZnNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJCT0geGZzX2ZzX2Rlc3Ryb3lfaW5vZGUsCisJLmRpcnR5X2lub2RlCQk9IHhmc19mc19kaXJ0eV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJCT0geGZzX2ZzX3dyaXRlX2lub2RlLAogCS5jbGVhcl9pbm9kZQkJPSB4ZnNfZnNfY2xlYXJfaW5vZGUsCiAJLnB1dF9zdXBlcgkJPSB4ZnNfZnNfcHV0X3N1cGVyLAotCS5zeW5jX2ZzCQk9IHhmc19mc19zeW5jX3N1cGVyLAorCS5zeW5jX2ZzCQk9IHhmc19mc19zeW5jX2ZzLAogCS5mcmVlemVfZnMJCT0geGZzX2ZzX2ZyZWV6ZSwKIAkuc3RhdGZzCQkJPSB4ZnNfZnNfc3RhdGZzLAogCS5yZW1vdW50X2ZzCQk9IHhmc19mc19yZW1vdW50LApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IDMyMGJlNmEuLjk2MWRmMGEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTMwOSwxMSArMzA5LDE1IEBACiBTVEFUSUMgaW50CiB4ZnNfY29tbWl0X2R1bW15X3RyYW5zKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAotCXVpbnQJCQlsb2dfZmxhZ3MpCisJdWludAkJCWZsYWdzKQogewogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gbXAtPm1fcm9vdGlwOwogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwogCWludAkJCWVycm9yOworCWludAkJCWxvZ19mbGFncyA9IFhGU19MT0dfRk9SQ0U7CisKKwlpZiAoZmxhZ3MgJiBTWU5DX1dBSVQpCisJCWxvZ19mbGFncyB8PSBYRlNfTE9HX1NZTkM7CiAKIAkvKgogCSAqIFB1dCBhIGR1bW15IHRyYW5zYWN0aW9uIGluIHRoZSBsb2cgdG8gdGVsbCByZWNvdmVyeQpAQCAtMzMxLDEzICszMzUsMTIgQEAKIAl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwotCS8qIFhYWChoY2gpOiBpZ25vcmluZyB0aGUgZXJyb3IgaGVyZS4uICovCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKKwkvKiB0aGUgbG9nIGZvcmNlIGVuc3VyZXMgdGhpcyB0cmFuc2FjdGlvbiBpcyBwdXNoZWQgdG8gZGlzayAqLwogCXhmc19sb2dfZm9yY2UobXAsIDAsIGxvZ19mbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQogCiBpbnQKQEAgLTM4NSw3ICszODgsMjAgQEAKIAllbHNlCiAJCVhGU19CVUZfQVNZTkMoYnApOwogCi0JcmV0dXJuIHhmc19id3JpdGUobXAsIGJwKTsKKwllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGRhdGEgaW50ZWdyaXR5IHN5bmMgbWFrZSBzdXJlIGFsbCBwZW5kaW5nIGJ1ZmZlcnMKKwkgKiBhcmUgZmx1c2hlZCBvdXQgZm9yIHRoZSBsb2cgY292ZXJhZ2UgY2hlY2sgYmVsb3cuCisJICovCisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQorCQl4ZnNfZmx1c2hfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwLCAxKTsKKworCWlmICh4ZnNfbG9nX25lZWRfY292ZXJlZChtcCkpCisJCWVycm9yID0geGZzX2NvbW1pdF9kdW1teV90cmFucyhtcCwgZmxhZ3MpOworCXJldHVybiBlcnJvcjsKIAogIG91dF9icmVsc2U6CiAJeGZzX2J1Zl9yZWxzZShicCk7CkBAIC00MTksMTQgKzQzNSwxNiBAQAogCS8qIHB1c2ggbm9uLWJsb2NraW5nICovCiAJeGZzX3N5bmNfZGF0YShtcCwgMCk7CiAJeGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7Ci0JeGZzX2ZpbGVzdHJlYW1fZmx1c2gobXApOwogCi0JLyogcHVzaCBhbmQgYmxvY2sgKi8KKwkvKiBwdXNoIGFuZCBibG9jayB0aWxsIGNvbXBsZXRlICovCiAJeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19XQUlUKTsKIAl4ZnNfcW1fc3luYyhtcCwgU1lOQ19XQUlUKTsKIAorCS8qIGRyb3AgaW5vZGUgcmVmZXJlbmNlcyBwaW5uZWQgYnkgZmlsZXN0cmVhbXMgKi8KKwl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7CisKIAkvKiB3cml0ZSBzdXBlcmJsb2NrIGFuZCBob292ZXIgdXAgc2h1dGRvd24gZXJyb3JzICovCi0JZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIDApOworCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCBTWU5DX1dBSVQpOwogCiAJLyogZmx1c2ggZGF0YS1vbmx5IGRldmljZXMgKi8KIAlpZiAobXAtPm1fcnRkZXZfdGFyZ3ApCkBAIC01NzAsOCArNTg4LDYgQEAKIAkJLyogZGdjOiBlcnJvcnMgaWdub3JlZCBoZXJlICovCiAJCWVycm9yID0geGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CiAJCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCBTWU5DX1RSWUxPQ0spOwotCQlpZiAoeGZzX2xvZ19uZWVkX2NvdmVyZWQobXApKQotCQkJZXJyb3IgPSB4ZnNfY29tbWl0X2R1bW15X3RyYW5zKG1wLCBYRlNfTE9HX0ZPUkNFKTsKIAl9CiAJbXAtPm1fc3luY19zZXErKzsKIAl3YWtlX3VwKCZtcC0+bV93YWl0X3NpbmdsZV9zeW5jX3Rhc2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDRlNDI3NmI5Li41ZDFhM2I5IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC04NzYsNyArODc2LDYgQEAKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9CiAJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKLQlJUkVMRShpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA3NDY1ZjllLi5hYjg5YTdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0yMDYsMTAgKzIwNiwxMCBAQAogCSAqIHByb2Nlc3MgdGhhdCB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQgb3V0IGZyb20KIAkgKiB1bmRlciBpdC4KIAkgKi8KLQlpZiAoKHNicC0+YnNfY3RpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWMpIHx8Ci0JICAgIChzYnAtPmJzX2N0aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9jdGltZS50X25zZWMpIHx8Ci0JICAgIChzYnAtPmJzX210aW1lLnR2X3NlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjKSB8fAotCSAgICAoc2JwLT5ic19tdGltZS50dl9uc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjKSkgeworCWlmICgoc2JwLT5ic19jdGltZS50dl9zZWMgIT0gVkZTX0koaXApLT5pX2N0aW1lLnR2X3NlYykgfHwKKwkgICAgKHNicC0+YnNfY3RpbWUudHZfbnNlYyAhPSBWRlNfSShpcCktPmlfY3RpbWUudHZfbnNlYykgfHwKKwkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IFZGU19JKGlwKS0+aV9tdGltZS50dl9zZWMpIHx8CisJICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gVkZTX0koaXApLT5pX210aW1lLnR2X25zZWMpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IGZhOTEzZTQ1Li40MWFkNTM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKQEAgLTg1NCw2ICs4NTQsNyBAQAogCQkJICovCiAJCQlyYV93YW50ID0gaG93bWFueShidWZzaXplICsgbXAtPm1fZGlyYmxrc2l6ZSwKIAkJCQkJICBtcC0+bV9zYi5zYl9ibG9ja3NpemUpIC0gMTsKKwkJCUFTU0VSVChyYV93YW50ID49IDApOwogCiAJCQkvKgogCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhcyBtYW55IGFzIHdlIHdhbnQsIGFuZCB3ZSBoYXZlbid0CkBAIC0xMDg4LDcgKzEwODksOCBAQAogCQkgKi8KIAkJcHRyICs9IGxlbmd0aDsKIAkJY3Vyb2ZmICs9IGxlbmd0aDsKLQkJYnVmc2l6ZSAtPSBsZW5ndGg7CisJCS8qIGJ1ZnNpemUgbWF5IGhhdmUganVzdCBiZWVuIGEgZ3Vlc3M7IGRvbid0IGdvIG5lZ2F0aXZlICovCisJCWJ1ZnNpemUgPSBidWZzaXplID4gbGVuZ3RoID8gYnVmc2l6ZSAtIGxlbmd0aCA6IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGFiNjRmM2UuLjA3ODU3OTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtODgwLDYgKzg4MCw3IEBACiAJCQkJICogTm90IGluIHJhbmdlIC0gc2F2ZSBsYXN0IHNlYXJjaAogCQkJCSAqIGxvY2F0aW9uIGFuZCBhbGxvY2F0ZSBhIG5ldyBpbm9kZQogCQkJCSAqLworCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJCQlwYWctPnBhZ2xfbGVmdHJlYyA9IHRyZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3JpZ2h0cmVjID0gcmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9wYWdpbm8gPSBwYWdpbm87CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYzFkYzdlZi4uYjkyYTRmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMzA2OCw5ICszMDY4LDkgQEAKIAlTWU5DSFJPTklaRSgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUuCisJICogTWFrZSBzdXJlIHRvIGdldCB0aGUgbGF0ZXN0IHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUuCiAJICovCi0JeGZzX3N5bmNocm9uaXplX2F0aW1lKGlwKTsKKwl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCiAJaWYgKFhGU19URVNUX0VSUk9SKGJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpICE9IFhGU19ESU5PREVfTUFHSUMsCiAJCQkgICAgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzEsIFhGU19SQU5ET01fSUZMVVNIXzEpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMGIzOGI5YS4uNDE1NTVkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNTA0LDcgKzUwNCw3IEBACiB2b2lkCQl4ZnNfbG9ja19pbm9kZXMoeGZzX2lub2RlX3QgKiosIGludCwgdWludCk7CiB2b2lkCQl4ZnNfbG9ja190d29faW5vZGVzKHhmc19pbm9kZV90ICosIHhmc19pbm9kZV90ICosIHVpbnQpOwogCi12b2lkCQl4ZnNfc3luY2hyb25pemVfYXRpbWUoeGZzX2lub2RlX3QgKik7Cit2b2lkCQl4ZnNfc3luY2hyb25pemVfdGltZXMoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKHhmc19pbm9kZV90ICopOwogCiAjaWYgZGVmaW5lZChYRlNfSU5PREVfVFJBQ0UpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDQ3ZDViNjYuLjk3OTRiODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0yMzIsNiArMjMyLDE1IEBACiAJbnZlY3MJICAgICA9IDE7CiAKIAkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbGludXggaW5vZGUgaXMgZGlydHkuIFdlIGRvIHRoaXMgYmVmb3JlCisJICogY2xlYXJpbmcgaV91cGRhdGVfY29yZSBhcyB0aGUgVkZTIHdpbGwgY2FsbCBiYWNrIGludG8KKwkgKiBYRlMgaGVyZSBhbmQgc2V0IGlfdXBkYXRlX2NvcmUsIHNvIHdlIG5lZWQgdG8gZGlydHkgdGhlCisJICogaW5vZGUgZmlyc3Qgc28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgaV91cGRhdGVfY29yZSBhbmQKKwkgKiB1bmxvZ2dlZCBtb2RpZmljYXRpb25zIHN0aWxsIHdvcmtzIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkgKi8KKwl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKworCS8qCiAJICogQ2xlYXIgaV91cGRhdGVfY29yZSBpZiB0aGUgdGltZXN0YW1wcyAob3IgYW55IG90aGVyCiAJICogbm9uLXRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9uKSBuZWVkIGZsdXNoaW5nL2xvZ2dpbmcKIAkgKiBhbmQgd2UncmUgYWJvdXQgdG8gbG9nIHRoZW0gd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29yZS4KQEAgLTI2MywxNCArMjcyLDkgQEAKIAl9CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZS4KKwkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZS4KIAkgKi8KLQl4ZnNfc3luY2hyb25pemVfYXRpbWUoaXApOwotCi0JLyoKLQkgKiBtYWtlIHN1cmUgdGhlIGxpbnV4IGlub2RlIGlzIGRpcnR5Ci0JICovCi0JeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CisJeGZzX3N5bmNocm9uaXplX3RpbWVzKGlwKTsKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBiNjhmOTEwLi42MmVmYWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHsKIAl4ZnNfaWNkaW5vZGVfdAkqZGljOwkvKiBkaW5vZGUgY29yZSBpbmZvIHBvaW50ZXIgKi8KIAl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CiAJaW50CQllcnJvcjsKIAogCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywKQEAgLTcyLDYgKzczLDcgQEAKIAlBU1NFUlQoaXAtPmlfaW1hcC5pbV9ibGtubyAhPSAwKTsKIAogCWRpYyA9ICZpcC0+aV9kOworCWlub2RlID0gVkZTX0koaXApOwogCiAJLyogeGZzX2lnZXQgcmV0dXJucyB0aGUgZm9sbG93aW5nIHdpdGhvdXQgbmVlZGluZwogCSAqIGZ1cnRoZXIgY2hhbmdlLgpAQCAtODMsMTYgKzg1LDE5IEBACiAJYnVmLT5ic191aWQgPSBkaWMtPmRpX3VpZDsKIAlidWYtPmJzX2dpZCA9IGRpYy0+ZGlfZ2lkOwogCWJ1Zi0+YnNfc2l6ZSA9IGRpYy0+ZGlfc2l6ZTsKKwogCS8qCi0JICogV2UgYXJlIHJlYWRpbmcgdGhlIGF0aW1lIGZyb20gdGhlIExpbnV4IGlub2RlIGJlY2F1c2UgdGhlCi0JICogZGlub2RlIG1pZ2h0IG5vdCBiZSB1cHRvZGF0ZS4KKwkgKiBXZSBuZWVkIHRvIHJlYWQgdGhlIHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZQorCSAqIHRoZSBWRlMga2VlcHMgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgaW5zdGVhZAorCSAqIG9mIHRlbGxpbmcgdXMgYWJvdXQgdGhlIHVwZGF0ZXMuCiAJICovCi0JYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOwotCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwotCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKLQlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKLQlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7Ci0JYnVmLT5ic19jdGltZS50dl9uc2VjID0gZGljLT5kaV9jdGltZS50X25zZWM7CisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJYnVmLT5ic19hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlidWYtPmJzX210aW1lLnR2X3NlYyA9IGlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlidWYtPmJzX210aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfbnNlYyA9IGlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisKIAlidWYtPmJzX3hmbGFncyA9IHhmc19pcDJ4ZmxhZ3MoaXApOwogCWJ1Zi0+YnNfZXh0c2l6ZSA9IGRpYy0+ZGlfZXh0c2l6ZSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAlidWYtPmJzX2V4dGVudHMgPSBkaWMtPmRpX25leHRlbnRzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDEwOTkzOTUuLmZiMTdmODIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCQkJCSJYRlM6IE5VTEwgZHF1b3QgaW4gJXMuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gbmV4dDsKIAkJCX0KLQkJCWlmIChpdGVtLT5yaV9idWZbaV0uaV9sZW4gPCBzaXplb2YoeGZzX2RxYmxrX3QpKSB7CisJCQlpZiAoaXRlbS0+cmlfYnVmW2ldLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCQkJY21uX2VycihDRV9BTEVSVCwKIAkJCQkJIlhGUzogZHF1b3QgdG9vIHNtYWxsICglZCkgaW4gJXMuIiwKIAkJCQkJaXRlbS0+cmlfYnVmW2ldLmlfbGVuLCBfX2Z1bmNfXyk7CkBAIC0yNjM1LDcgKzI2MzUsNyBAQAogCQkJIlhGUzogTlVMTCBkcXVvdCBpbiAlcy4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9Ci0JaWYgKGl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiA8IHNpemVvZih4ZnNfZHFibGtfdCkpIHsKKwlpZiAoaXRlbS0+cmlfYnVmWzFdLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCWNtbl9lcnIoQ0VfQUxFUlQsCiAJCQkiWEZTOiBkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJaXRlbS0+cmlfYnVmWzFdLmlfbGVuLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCBmMzEyNzFjLi4yZmZjNTcwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcCA9IE5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSptbGlwOwkvKiBwdHIgdG8gbWluaW11bSBsaXAgKi8KKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCiAJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOwogCkBAIC00ODMsOCArNDg0LDE2IEBACiAKIAlpZiAobWxpcCA9PSBkbGlwKSB7CiAJCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwkJLyoKKwkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrIGlzCisJCSAqIGRyb3BwZWQsIHNvIHdlIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvCisJCSAqIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBvbiAzMi1iaXQgcGxhdGZvcm1zCisJCSAqIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcgNjQtYml0IHZhbHVlcyBsaWtlIGxpX2xzbgorCQkgKiBpcyBub3QgYXRvbWljLgorCQkgKi8KKwkJdGFpbF9sc24gPSBtbGlwLT5saV9sc247CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIG1saXAtPmxpX2xzbik7CisJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwogCX0KQEAgLTUxNCw2ICs1MjMsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CisJeGZzX2xzbl90CQl0YWlsX2xzbjsKIAogCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewogCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CkBAIC01MjcsOSArNTM3LDE2IEBACiAKIAkJaWYgKG1saXAgPT0gZGxpcCkgewogCQkJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCQkJLyoKKwkJCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jaworCQkJICogaXMgZHJvcHBlZCwgc28gd2UgbXVzdCBnZXQgYSBjb3B5IG9mIGxpX2xzbgorCQkJICogYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudAorCQkJICogb24gMzItYml0IHBsYXRmb3JtcyB3aGVyZSBhY2Nlc3NpbmcgYW5kIHVwZGF0aW5nCisJCQkgKiA2NC1iaXQgdmFsdWVzIGxpa2UgbGlfbHNuIGlzIG5vdCBhdG9taWMuCisJCQkgKi8KKwkJCXRhaWxfbHNuID0gbWxpcCA/IG1saXAtPmxpX2xzbiA6IDA7CiAJCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwKLQkJCQkJCShtbGlwID8gbWxpcC0+bGlfbHNuIDogMCkpOworCQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIHRhaWxfbHNuKTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGE0MzRmMjguLmI1NzJmN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI0NzYsMTIgKzI0NzYsNiBAQAogCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSB8fCBpcC0+aV9kZWxheWVkX2Jsa3MgPT0gMCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSBpcyBjb3JyZWN0IGJlZm9yZSBmcmVlaW5nIHRoZQotCSAqIExpbnV4IGlub2RlLgotCSAqLwotCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7Ci0KLQkvKgogCSAqIElmIHdlIGhhdmUgbm90aGluZyB0byBmbHVzaCB3aXRoIHRoaXMgaW5vZGUgdGhlbiBjb21wbGV0ZSB0aGUKIAkgKiB0ZWFyZG93biBub3csIG90aGVyd2lzZSBicmVhayB0aGUgbGluayBiZXR3ZWVuIHRoZSB4ZnMgaW5vZGUgYW5kIHRoZQogCSAqIGxpbnV4IGlub2RlIGFuZCBjbGVhbiB1cCB0aGUgeGZzIGlub2RlIGxhdGVyLiBUaGlzIGF2b2lkcyBmbHVzaGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAxY2VmMTM5Li4zY2Q5Y2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtNzAsNyArNzAsNiBAQAogCUFDUElfQlVTX1RZUEVfUE9XRVIsCiAJQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1IsCiAJQUNQSV9CVVNfVFlQRV9USEVSTUFMLAotCUFDUElfQlVTX1RZUEVfU1lTVEVNLAogCUFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OLAogCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAogCUFDUElfQlVTX0RFVklDRV9UWVBFX0NPVU5UCkBAIC0xNDIsMTAgKzE0MSw3IEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV9mbGFncyB7CiAJdTMyIGR5bmFtaWNfc3RhdHVzOjE7Ci0JdTMyIGhhcmR3YXJlX2lkOjE7Ci0JdTMyIGNvbXBhdGlibGVfaWRzOjE7CiAJdTMyIGJ1c19hZGRyZXNzOjE7Ci0JdTMyIHVuaXF1ZV9pZDoxOwogCXUzMiByZW1vdmFibGU6MTsKIAl1MzIgZWplY3RhYmxlOjE7CiAJdTMyIGxvY2thYmxlOjE7CkBAIC0xNTQsNyArMTUwLDcgQEAKIAl1MzIgcGVyZm9ybWFuY2VfbWFuYWdlYWJsZToxOwogCXUzMiB3YWtlX2NhcGFibGU6MTsJLyogV2FrZXVwKF9QUlcpIHN1cHBvcnRlZD8gKi8KIAl1MzIgZm9yY2VfcG93ZXJfc3RhdGU6MTsKLQl1MzIgcmVzZXJ2ZWQ6MTk7CisJdTMyIHJlc2VydmVkOjIyOwogfTsKIAogLyogRmlsZSBTeXN0ZW0gKi8KQEAgLTE3MiwyMCArMTY4LDIzIEBACiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfbmFtZVs0MF07CiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfY2xhc3NbMjBdOwogCitzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKmlkOworfTsKKwogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLwogCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaWRzOwkJLyogX0hJRCBhbmQgX0NJRHMgKi8KIAlhY3BpX2RldmljZV9uYW1lIGRldmljZV9uYW1lOwkvKiBEcml2ZXItZGV0ZXJtaW5lZCAqLwogCWFjcGlfZGV2aWNlX2NsYXNzIGRldmljZV9jbGFzczsJLyogICAgICAgICIgICAgICAgICAgKi8KIH07CiAKICNkZWZpbmUgYWNwaV9kZXZpY2VfYmlkKGQpCSgoZCktPnBucC5idXNfaWQpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2FkcihkKQkoKGQpLT5wbnAuYnVzX2FkZHJlc3MpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX2hpZChkKQkoKGQpLT5wbnAuaGFyZHdhcmVfaWQpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX3VpZChkKQkoKGQpLT5wbnAudW5pcXVlX2lkKQorY2hhciAqYWNwaV9kZXZpY2VfaGlkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKICNkZWZpbmUgYWNwaV9kZXZpY2VfbmFtZShkKQkoKGQpLT5wbnAuZGV2aWNlX25hbWUpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2NsYXNzKGQpCSgoZCktPnBucC5kZXZpY2VfY2xhc3MpCiAKQEAgLTI2Miw3ICsyNjEsOCBAQAogLyogRGV2aWNlICovCiAKIHN0cnVjdCBhY3BpX2RldmljZSB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBkZXZpY2VfdHlwZTsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CQkvKiBubyBoYW5kbGUgZm9yIGZpeGVkIGhhcmR3YXJlICovCiAJc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CkBAIC0zMjIsNiArMzIyLDggQEAKIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwogdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpOwogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogaW50IGFjcGlfYnVzX2dldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqc3RhdGUpOwogaW50IGFjcGlfYnVzX3NldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggMGMzZGQ4Ni4uNDk1ZGM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtNzMsMTQgKzczLDIzIEBACiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX0dFVFNJRwkxMQkvKiBmb3Igc29ja2V0cy4gKi8KICNlbmRpZgorCisjaWZuZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBGX0dFVExLNjQKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEZfU0VUT1dOX0VYCi0jZGVmaW5lIEZfU0VUT1dOX0VYCTEyCi0jZGVmaW5lIEZfR0VUT1dOX0VYCTEzCisjZGVmaW5lIEZfU0VUT1dOX0VYCTE1CisjZGVmaW5lIEZfR0VUT1dOX0VYCTE2CiAjZW5kaWYKIAogI2RlZmluZSBGX09XTkVSX1RJRAkwCiAjZGVmaW5lIEZfT1dORVJfUElECTEKLSNkZWZpbmUgRl9PV05FUl9HSUQJMgorI2RlZmluZSBGX09XTkVSX1BHUlAJMgogCiBzdHJ1Y3QgZl9vd25lcl9leCB7CiAJaW50CXR5cGU7CkBAIC0xMzksMTIgKzE0OCw2IEBACiAKICNpZm5kZWYgQ09ORklHXzY0QklUCiAKLSNpZm5kZWYgRl9HRVRMSzY0Ci0jZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLwotI2RlZmluZSBGX1NFVExLNjQJMTMKLSNkZWZpbmUgRl9TRVRMS1c2NAkxNAotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSzY0CiAjaWZuZGVmIF9fQVJDSF9GTE9DSzY0X1BBRAogI2RlZmluZSBfX0FSQ0hfRkxPQ0s2NF9QQUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggOWNjYTM3ODUuLjY2ZDYxMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfR1BJT19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19HUElPX0gKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAppbmRleCAyM2JiNGRhLi42MmY1OTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaApAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKIAogI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggMjljYThmNS4uYjZlODE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtNzIxLDEyICs3MjEsMTIgQEAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsJCQkJCQlcCiAJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CQkJCVwKIAkJSU5JVF9UQVNLX0RBVEEoaW5pdHRhc2spCQkJCVwKKwkJTk9TQVZFX0RBVEEJCQkJCQlcCisJCVBBR0VfQUxJR05FRF9EQVRBKHBhZ2VhbGlnbmVkKQkJCQlcCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoY2FjaGVsaW5lKQkJCVwKIAkJUkVBRF9NT1NUTFlfREFUQShjYWNoZWxpbmUpCQkJCVwKIAkJREFUQV9EQVRBCQkJCQkJXAogCQlDT05TVFJVQ1RPUlMJCQkJCQlcCi0JCU5PU0FWRV9EQVRBCQkJCQkJXAotCQlQQUdFX0FMSUdORURfREFUQShwYWdlYWxpZ25lZCkJCQkJXAogCX0KIAogI2RlZmluZSBJTklUX1RFWFRfU0VDVElPTihpbml0dGV4dF9hbGlnbikJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWUxZTllMS4uYjY5MzQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0zODcsNiArMzg3LDcgQEAKICAqIEBnZXRfbW9kZXM6IGdldCBtb2RlIGxpc3QgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAc2V0X3Byb3BlcnR5OiBwcm9wZXJ0eSBmb3IgdGhpcyBjb25uZWN0b3IgbWF5IG5lZWQgdXBkYXRlCiAgKiBAZGVzdHJveTogbWFrZSBvYmplY3QgZ28gYXdheQorICogQGZvcmNlOiBub3RpZnkgdGhlIGRyaXZlciB0aGUgY29ubmVjdG9yIGlzIGZvcmNlZCBvbgogICoKICAqIEVhY2ggQ1JUQyBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBjb25uZWN0b3JzIGF0dGFjaGVkIHRvIGl0LiAgVGhlIGZ1bmN0aW9ucwogICogYmVsb3cgYWxsb3cgdGhlIGNvcmUgRFJNIGNvZGUgdG8gY29udHJvbCBjb25uZWN0b3JzLCBlbnVtZXJhdGUgYXZhaWxhYmxlIG1vZGVzLApAQCAtNDAxLDYgKzQwMiw3IEBACiAJaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKIAkJCSAgICAgdWludDY0X3QgdmFsKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJdm9pZCAoKmZvcmNlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CkBAIC00MjksNiArNDMxLDEzIEBACiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiB9OwogCitlbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgeworCURSTV9GT1JDRV9VTlNQRUNJRklFRCwKKwlEUk1fRk9SQ0VfT0ZGLAorCURSTV9GT1JDRV9PTiwgICAgICAgICAvKiBmb3JjZSBvbiBhbmFsb2cgcGFydCBub3JtYWxseSAqLworCURSTV9GT1JDRV9PTl9ESUdJVEFMLCAvKiBmb3IgRFZJLUkgdXNlIGRpZ2l0YWwgY29ubmVjdG9yICovCit9OworCiAvKioKICAqIGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3IgY29udHJvbCBzdHJ1Y3R1cmUKICAqIEBjcnRjOiBDUlRDIHRoaXMgY29ubmVjdG9yIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8sIE5VTEwgaWYgbm9uZQpAQCAtNDc4LDkgKzQ4NywxMiBAQAogCiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiAKKwkvKiBmb3JjZWQgb24gY29ubmVjdG9yICovCisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlOwogCXVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwogCXVpbnQzMl90IGZvcmNlX2VuY29kZXJfaWQ7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIGVuY29kZXIgKi8KKwl2b2lkICpmYl9oZWxwZXJfcHJpdmF0ZTsKIH07CiAKIC8qKgpAQCAtNzQ2LDcgKzc1OCw3IEBACiBleHRlcm4gYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCk7CiBleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpOworCQkJCWJvb2wgcmVkdWNlZCwgYm9vbCBpbnRlcmxhY2VkLCBib29sIG1hcmdpbnMpOwogZXh0ZXJuIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fZ3RmX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNoLAogCQkJCWJvb2wgaW50ZXJsYWNlZCwgaW50IG1hcmdpbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAppbmRleCA0YzhkYWNhLi5iMjllMjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaApAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgewogCS8qCiAJICogQ29udHJvbCBwb3dlciBsZXZlbHMgb24gdGhlIENSVEMuICBJZiB0aGUgbW9kZSBwYXNzZWQgaW4gaXMKQEAgLTYwLDYgKzYxLDkgQEAKIAkvKiBNb3ZlIHRoZSBjcnRjIG9uIHRoZSBjdXJyZW50IGZiIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiAqb3B0aW9uYWwqICovCiAJaW50ICgqbW9kZV9zZXRfYmFzZSkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCiAJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CisKKwkvKiByZWxvYWQgdGhlIGN1cnJlbnQgY3J0YyBMVVQgKi8KKwl2b2lkICgqbG9hZF9sdXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHsKQEAgLTExOSwxMCArMTIzLDExIEBACiAJZW5jb2Rlci0+aGVscGVyX3ByaXZhdGUgPSAodm9pZCAqKWZ1bmNzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCitzdGF0aWMgaW5saW5lIGludCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqZnVuY3MpCiB7CiAJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZSA9ICh2b2lkICopZnVuY3M7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogfQogCiBleHRlcm4gaW50IGRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggODhmZmZiZC4uNThjODkyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtMzUsOSArMzUsMzAgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OwogfTsKIAorCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB7CiAJdm9pZCAoKmdhbW1hX3NldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkgIHUxNiBibHVlLCBpbnQgcmVnbm8pOworCXZvaWQgKCpnYW1tYV9nZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKK307CisKKy8qIG1vZGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KK3N0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSB7CisJYm9vbCBzcGVjaWZpZWQ7CisJYm9vbCByZWZyZXNoX3NwZWNpZmllZDsKKwlib29sIGJwcF9zcGVjaWZpZWQ7CisJaW50IHhyZXMsIHlyZXM7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaDsKKwlib29sIHJiOworCWJvb2wgaW50ZXJsYWNlOworCWJvb2wgY3Z0OworCWJvb2wgbWFyZ2luczsKK307CisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlIGNtZGxpbmVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1fZmJfaGVscGVyIHsKQEAgLTUyLDExICs3MywxNCBAQAogfTsKIAogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBpbnQgcHJlZmVycmVkX2JwcCwKIAkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKIAkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9kZXB0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpOwogaW50IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsIGludCBjcnRjX2NvdW50LAogCQkJCSAgaW50IG1heF9jb25uKTsKQEAgLTc3LDYgKzEwMSwxMSBAQAogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQpOwotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCk7Cit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoLAorCQkJICAgIHVpbnQzMl90IGRlcHRoKTsKKworaW50IGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2ludCBkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggM2Y2ZTU0NS4uZTZmM2IxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtODAsNyArODAsNyBAQAogCXsweDEwMDIsIDB4NTE1OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjIwMH0sIFwKIAl7MHgxMDAyLCAweDUxNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCiAJezB4MTAwMiwgMHg1MTVBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NTE1RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKKwl7MHgxMDAyLCAweDUxNUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB8UkFERU9OX1NJTkdMRV9DUlRDfSwgXAogCXsweDEwMDIsIDB4NTQ2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXApAQCAtMTEzLDcgKzExMyw3IEBACiAJezB4MTAwMiwgMHg1OTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCi0JezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAorCXsweDEwMDIsIDB4NTk2OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCiAJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBjZmY0YTEwLi4xZmVlZDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTI2LDYgKzEyNiw3IEBACiBoZWFkZXIteSArPSBubDgwMjExLmgKIGhlYWRlci15ICs9IHBhcmFtLmgKIGhlYWRlci15ICs9IHBjaV9yZWdzLmgKK2hlYWRlci15ICs9IHBlcmZfZXZlbnQuaAogaGVhZGVyLXkgKz0gcGZrZXl2Mi5oCiBoZWFkZXIteSArPSBwZy5oCiBoZWFkZXIteSArPSBwaGFudG9tLmgKQEAgLTM2Myw2ICszNjQsNyBAQAogdW5pZmRlZi15ICs9IHZpZGVvZGV2Mi5oCiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYuaAogdW5pZmRlZi15ICs9IHZpcnRpb19jb25maWcuaAordW5pZmRlZi15ICs9IHZpcnRpb19pZHMuaAogdW5pZmRlZi15ICs9IHZpcnRpb19ibGsuaAogdW5pZmRlZi15ICs9IHZpcnRpb19uZXQuaAogdW5pZmRlZi15ICs9IHZpcnRpb185cC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmggYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKaW5kZXggODgwMTMwZi4uOTEwMWVkNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKQEAgLTUzLDcgKzUzLDcgQEAKIAlpbnQgY3VycmVudF9tZW1vcnk7CiAJYm9vbCBjYW50X3VzZV9hcGVydHVyZTsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbWFzazsKLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCmluZGV4IGI0OTBlY2MuLjZiNDI0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaApAQCAtMSwxNyArMSwxOCBAQAogLyoKLSAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCisgKiAgaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaAogICovCi0jaWZuZGVmIEFTTUFSTV9NQUNIX01NQ19ICi0jZGVmaW5lIEFTTUFSTV9NQUNIX01NQ19ICisjaWZuZGVmIEFNQkFfTU1DSV9ICisjZGVmaW5lIEFNQkFfTU1DSV9ICiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCi1zdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgeworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgaW50IG9jcl9tYXNrOwkJCS8qIGF2YWlsYWJsZSB2b2x0YWdlcyAqLwogCXUzMiAoKnRyYW5zbGF0ZV92ZGQpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCpzdGF0dXMpKHN0cnVjdCBkZXZpY2UgKik7CiAJaW50CWdwaW9fd3A7CiAJaW50CWdwaW9fY2Q7CisJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9wbDAyMi5oIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKaW5kZXggZGNhZDBmZmQuLmU0ODM2YzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaApAQCAtMTM2LDEyICsxMzYsMTIgQEAKIAogLyoqCiAgKiBlbnVtIFNQSSBDbG9jayBQaGFzZSAtIGNsb2NrIHBoYXNlIChNb3Rvcm9sYSBTUEkgaW50ZXJmYWNlIG9ubHkpCi0gKiBAU1NQX0NMS19SSVNJTkdfRURHRTogUmVjZWl2ZSBkYXRhIG9uIHJpc2luZyBlZGdlCi0gKiBAU1NQX0NMS19GQUxMSU5HX0VER0U6IFJlY2VpdmUgZGF0YSBvbiBmYWxsaW5nIGVkZ2UKKyAqIEBTU1BfQ0xLX0ZJUlNUX0VER0U6IFJlY2VpdmUgZGF0YSBvbiBmaXJzdCBlZGdlIHRyYW5zaXRpb24gKGFjdHVhbCBkaXJlY3Rpb24gZGVwZW5kcyBvbiBwb2xhcml0eSkKKyAqIEBTU1BfQ0xLX1NFQ09ORF9FREdFOiBSZWNlaXZlIGRhdGEgb24gc2Vjb25kIGVkZ2UgdHJhbnNpdGlvbiAoYWN0dWFsIGRpcmVjdGlvbiBkZXBlbmRzIG9uIHBvbGFyaXR5KQogICovCiBlbnVtIHNzcF9zcGlfY2xrX3BoYXNlIHsKLQlTU1BfQ0xLX1JJU0lOR19FREdFLAotCVNTUF9DTEtfRkFMTElOR19FREdFCisJU1NQX0NMS19GSVJTVF9FREdFLAorCVNTUF9DTEtfU0VDT05EX0VER0UKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggNjI5OWEyNS4uNGZiMzU3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0zMzQsOSArMzM0LDEyIEBACiAJU0VURkVBVFVSRVNfU0FUQV9ESVNBQkxFID0gMHg5MCwgLyogRGlzYWJsZSB1c2Ugb2YgU0FUQSBmZWF0dXJlICovCiAKIAkvKiBTRVRGRUFUVVJFIFNlY3RvciBjb3VudHMgZm9yIFNBVEEgZmVhdHVyZXMgKi8KLQlTQVRBX0FOCQkJPSAweDA1LCAgLyogQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbiAqLwotCVNBVEFfRElQTQkJPSAweDAzLCAgLyogRGV2aWNlIEluaXRpYXRlZCBQb3dlciBNYW5hZ2VtZW50ICovCi0JU0FUQV9GUERNQV9BQQkJPSAweDAyLCAgLyogRE1BIFNldHVwIEZJUyBBdXRvLUFjdGl2YXRlICovCisJU0FUQV9GUERNQV9PRkZTRVQJPSAweDAxLAkvKiBGUERNQSBub24temVybyBidWZmZXIgb2Zmc2V0cyAqLworCVNBVEFfRlBETUFfQUEJCT0gMHgwMiwgLyogRlBETUEgU2V0dXAgRklTIEF1dG8tQWN0aXZhdGUgKi8KKwlTQVRBX0RJUE0JCT0gMHgwMywJLyogRGV2aWNlIEluaXRpYXRlZCBQb3dlciBNYW5hZ2VtZW50ICovCisJU0FUQV9GUERNQV9JTl9PUkRFUgk9IDB4MDQsCS8qIEZQRE1BIGluLW9yZGVyIGRhdGEgZGVsaXZlcnkgKi8KKwlTQVRBX0FOCQkJPSAweDA1LAkvKiBBc3luY2hyb25vdXMgTm90aWZpY2F0aW9uICovCisJU0FUQV9TU1AJCT0gMHgwNiwJLyogU29mdHdhcmUgU2V0dGluZ3MgUHJlc2VydmF0aW9uICovCiAKIAkvKiBmZWF0dXJlIHZhbHVlcyBmb3IgU0VUX01BWCAqLwogCUFUQV9TRVRfTUFYX0FERFIJPSAweDAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCmluZGV4IDBlZTMzYzIuLmI0NDllNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKQEAgLTEwMSw3ICsxMDEsOCBAQAogCQljb25zdCBjaGFyICpmbXQsIC4uLik7CiBpbnQgYmRpX3JlZ2lzdGVyX2RldihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBkZXZfdCBkZXYpOwogdm9pZCBiZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKTsKLXZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKTsKK3ZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCWxvbmcgbnJfcGFnZXMpOwogaW50IGJkaV93cml0ZWJhY2tfdGFzayhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpOwogaW50IGJkaV9oYXNfZGlydHlfaW8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IDc5Y2EyZGEuLjBmNWY1NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtMjcsNiArMjcsMTEgQEAKICAqIEFueSBvdGhlciB1c2Ugb2YgdGhlIGxvY2tzIGJlbG93IGlzIHByb2JhYmx5IHdyb25nLgogICovCiAKK2VudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24geworCUJBQ0tMSUdIVF9VUERBVEVfSE9US0VZLAorCUJBQ0tMSUdIVF9VUERBVEVfU1lTRlMsCit9OworCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogCkBAIC0xMDAsNiArMTA1LDggQEAKIGV4dGVybiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAogCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZCBiYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKK2V4dGVybiB2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKTsKIAogI2RlZmluZSB0b19iYWNrbGlnaHRfZGV2aWNlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UsIGRldikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggZTIzYTg2Yy4uMjIxY2VjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04Miw3ICs4Miw2IEBACiBlbnVtIHsKIAlSRVFfTEJfT1BfRUpFQ1QJPSAweDQwLAkJLyogZWplY3QgcmVxdWVzdCAqLwogCVJFUV9MQl9PUF9GTFVTSCA9IDB4NDEsCQkvKiBmbHVzaCByZXF1ZXN0ICovCi0JUkVRX0xCX09QX0RJU0NBUkQgPSAweDQyLAkvKiBkaXNjYXJkIHNlY3RvcnMgKi8KIH07CiAKIC8qCkBAIC0yNjEsNyArMjYwLDYgQEAKIHR5cGVkZWYgaW50IChtYWtlX3JlcXVlc3RfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKIHR5cGVkZWYgaW50IChwcmVwX3JxX2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKHVucGx1Z19mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwotdHlwZWRlZiBpbnQgKHByZXBhcmVfZGlzY2FyZF9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiBzdHJ1Y3QgYmlvX3ZlYzsKIHN0cnVjdCBidmVjX21lcmdlX2RhdGEgewpAQCAtMzEzLDYgKzMxMSw3IEBACiAJdW5zaWduZWQgaW50CQlhbGlnbm1lbnRfb2Zmc2V0OwogCXVuc2lnbmVkIGludAkJaW9fbWluOwogCXVuc2lnbmVkIGludAkJaW9fb3B0OworCXVuc2lnbmVkIGludAkJbWF4X2Rpc2NhcmRfc2VjdG9yczsKIAogCXVuc2lnbmVkIHNob3J0CQlsb2dpY2FsX2Jsb2NrX3NpemU7CiAJdW5zaWduZWQgc2hvcnQJCW1heF9od19zZWdtZW50czsKQEAgLTM0MCw3ICszMzksNiBAQAogCW1ha2VfcmVxdWVzdF9mbgkJKm1ha2VfcmVxdWVzdF9mbjsKIAlwcmVwX3JxX2ZuCQkqcHJlcF9ycV9mbjsKIAl1bnBsdWdfZm4JCSp1bnBsdWdfZm47Ci0JcHJlcGFyZV9kaXNjYXJkX2ZuCSpwcmVwYXJlX2Rpc2NhcmRfZm47CiAJbWVyZ2VfYnZlY19mbgkJKm1lcmdlX2J2ZWNfZm47CiAJcHJlcGFyZV9mbHVzaF9mbgkqcHJlcGFyZV9mbHVzaF9mbjsKIAlzb2Z0aXJxX2RvbmVfZm4JCSpzb2Z0aXJxX2RvbmVfZm47CkBAIC00NjAsNiArNDU4LDcgQEAKICNkZWZpbmUgUVVFVUVfRkxBR19WSVJUICAgICAgICBRVUVVRV9GTEFHX05PTlJPVCAvKiBwYXJhdmlydCBkZXZpY2UgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19JT19TVEFUICAgICAxNQkvKiBkbyBJTyBzdGF0cyAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0NRCSAgICAgICAxNgkvKiBoYXJkd2FyZSBkb2VzIHF1ZXVpbmcgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNwkvKiBzdXBwb3J0cyBESVNDQVJEICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCkBAIC01OTEsNiArNTkwLDcgQEAKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpCSgocSktPm9yZHNlcSkKICNkZWZpbmUgYmxrX3F1ZXVlX3N0YWNrYWJsZShxKQlcCiAJdGVzdF9iaXQoUVVFVUVfRkxBR19TVEFDS0FCTEUsICYocSktPnF1ZXVlX2ZsYWdzKQorI2RlZmluZSBibGtfcXVldWVfZGlzY2FyZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX0RJU0NBUkQsICYocSktPnF1ZXVlX2ZsYWdzKQogCiAjZGVmaW5lIGJsa19mc19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCiAjZGVmaW5lIGJsa19wY19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpCkBAIC05MjksNiArOTI5LDggQEAKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKQEAgLTk1NSw3ICs5NTcsNiBAQAogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzb2Z0aXJxX2RvbmVfZm4gKik7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfc2V0X2Rpc2NhcmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgcHJlcGFyZV9kaXNjYXJkX2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVkX291dChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBycV90aW1lZF9vdXRfZm4gKik7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcnFfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CkBAIC0xMDgwLDI1ICsxMDgxLDM3IEBACiAJcmV0dXJuIHEtPmxpbWl0cy5waHlzaWNhbF9ibG9ja19zaXplOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2lvX21pbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlyZXR1cm4gcS0+bGltaXRzLmlvX21pbjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9pb19taW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaW9fbWluKGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcXVldWVfaW9fb3B0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxLT5saW1pdHMuaW9fb3B0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X2lvX29wdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBxdWV1ZV9pb19vcHQoYmRldl9nZXRfcXVldWUoYmRldikpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewotCWlmIChxICYmIHEtPmxpbWl0cy5taXNhbGlnbmVkKQorCWlmIChxLT5saW1pdHMubWlzYWxpZ25lZCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHEgJiYgcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQpCi0JCXJldHVybiBxLT5saW1pdHMuYWxpZ25tZW50X29mZnNldDsKLQotCXJldHVybiAwOworCXJldHVybiBxLT5saW1pdHMuYWxpZ25tZW50X29mZnNldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcXVldWVfc2VjdG9yX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC0xMTA4LDYgKzExMjEsMTkgQEAKIAkJJiAocS0+bGltaXRzLmlvX21pbiAtIDEpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiZGV2X2FsaWdubWVudF9vZmZzZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOworCisJaWYgKHEtPmxpbWl0cy5taXNhbGlnbmVkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKKwkJcmV0dXJuIGJkZXYtPmJkX3BhcnQtPmFsaWdubWVudF9vZmZzZXQ7CisKKwlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJcmV0dXJuIHEgPyBxLT5kbWFfYWxpZ25tZW50IDogNTExOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggN2U0MzUwZS4uM2I3M2I5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0xOTgsNiArMTk4LDcgQEAKIAkJCSAgIGNoYXIgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpOwogZXh0ZXJuIGludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK2V4dGVybiB2b2lkIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX2luaXRfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxrX3RyYWNlX2F0dHJfZ3JvdXA7CkBAIC0yMTEsNiArMjEyLDcgQEAKICMgZGVmaW5lIGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpCQkJKC1FTk9UVFkpCiAjIGRlZmluZSBibGtfdHJhY2VfcmVtb3ZlKHEpCQkJCSgtRU5PVFRZKQogIyBkZWZpbmUgYmxrX2FkZF90cmFjZV9tc2cocSwgZm10LCAuLi4pCQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhkZXYpCQkJZG8geyB9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSBpbnQgYmxrX3RyYWNlX2luaXRfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggYjYyYmI5Mi4uMDAwOGRlZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMzcsNyArMzcsNyBAQAogZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cF9vcGVyYXRpb25zOwogCiAvKiBEZWZpbmUgdGhlIGVudW1lcmF0aW9uIG9mIGFsbCBjZ3JvdXAgc3Vic3lzdGVtcyAqLwogI2RlZmluZSBTVUJTWVMoX3gpIF94ICMjIF9zdWJzeXNfaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDQ0NzE3ZWIuLjc5YTIzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0yOTEsOCArMjkxLDE1IEBACiBpbnQgY3B1ZnJlcV9nZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBxdWVyeSB0aGUgbGFzdCBrbm93biBDUFUgZnJlcSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFjYTMxYmYuLjJlYTNlNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTI0LDcgKzEyNCw5IEBACiAJc3RydWN0IGJ1c190eXBlCQkqYnVzOwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIgCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKwljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKworCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlhIHN5c2ZzICovCiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IDQ1YTkzN2IuLjkwYTRlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMzYxLDYgKzM2MSw3IEBACiAjZGVmaW5lIE5UX1BQQ19WU1gJMHgxMDIJCS8qIFBvd2VyUEMgVlNYIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KICNkZWZpbmUgTlRfMzg2X0lPUEVSTQkweDIwMQkJLyogeDg2IGlvIHBlcm1pc3Npb24gYml0bWFwICgxPWRlbnkpICovCisjZGVmaW5lIE5UX1BSWFNUQVRVUwkweDMwMAkJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KIAogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggY2ExYmZlOS4uOTNlNzQyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0xMzcsNiArMTM3LDE0IEBACiAJICogYnkgb3RoZXIgbWVhbnMsIHNvIHdlIGhhdmUgdHJ1bmNhdGVfbXV0ZXguCiAJICovCiAJc3RydWN0IG11dGV4IHRydW5jYXRlX211dGV4OworCisJLyoKKwkgKiBUcmFuc2FjdGlvbnMgdGhhdCBjb250YWluIGlub2RlJ3MgbWV0YWRhdGEgbmVlZGVkIHRvIGNvbXBsZXRlCisJICogZnN5bmMgYW5kIGZkYXRhc3luYywgcmVzcGVjdGl2ZWx5LgorCSAqLworCWF0b21pY190IGlfc3luY190aWQ7CisJYXRvbWljX3QgaV9kYXRhc3luY190aWQ7CisKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IGY4NDdkZjkuLmRlOWM3MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIyMzAgOTYJLyogTmVvTWFnaWMgTk0yMjMwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzNjAgOTcJLyogTmVvTWFnaWMgTk0yMzYwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTgJLyogTmVvTWFnaWMgTk0yMzgwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QWEEzWFgJCSA5OQkvKiBQWEEzeHgJCQkqLwogCiAjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTQgICAgICAgIDB4ODAJLyogUzMgU2F2YWdlNCAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAgICAgICAweDgxCS8qIFMzIFNhdmFnZTNEICAgICAgICAgICAgICAgICAgKi8KQEAgLTY2OCwxMiArNjY5LDYgQEAKIAkvKiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKi8KIAlpbnQgKCpmYl9tbWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCi0JLyogc2F2ZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCi0Jdm9pZCAoKmZiX3NhdmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotCS8qIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKi8KLQl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCiAJLyogZ2V0IGNhcGFiaWxpdHkgZ2l2ZW4gdmFyICovCiAJdm9pZCAoKmZiX2dldF9jYXBzKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcywKIAkJCSAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMmFkYWEyNS4uMjYyMGE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzAwLDYgKzMwMCwxMCBAQAogI2RlZmluZSBCTEtUUkFDRVNUT1AgX0lPKDB4MTIsMTE3KQogI2RlZmluZSBCTEtUUkFDRVRFQVJET1dOIF9JTygweDEyLDExOCkKICNkZWZpbmUgQkxLRElTQ0FSRCBfSU8oMHgxMiwxMTkpCisjZGVmaW5lIEJMS0lPTUlOIF9JTygweDEyLDEyMCkKKyNkZWZpbmUgQkxLSU9PUFQgX0lPKDB4MTIsMTIxKQorI2RlZmluZSBCTEtBTElHTk9GRiBfSU8oMHgxMiwxMjIpCisjZGVmaW5lIEJMS1BCU1pHRVQgX0lPKDB4MTIsMTIzKQogCiAjZGVmaW5lIEJNQVBfSU9DVEwgMQkJLyogb2Jzb2xldGUgLSBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIEZJQk1BUAkgICBfSU8oMHgwMCwxKQkvKiBibWFwIGFjY2VzcyAqLwpAQCAtMjQ0Niw3ICsyNDUwLDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzaW1wbGVfYXR0cl9vcGVuKGlub2RlLCBmaWxlLCBfX2dldCwgX19zZXQsIF9fZm10KTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fZm9wcyA9IHsJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAkJCQkJCVwKIAkub3BlbgkgPSBfX2ZvcHMgIyMgX29wZW4sCQkJCQlcCiAJLnJlbGVhc2UgPSBzaW1wbGVfYXR0cl9yZWxlYXNlLAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggY2QzZDJhYi4uMGI0Zjk3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICMgZGVmaW5lIGZ0cmFjZV9zZXRfZmlsdGVyKGJ1ZiwgbGVuLCByZXNldCkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2Rpc2FibGVfZGFlbW9uKCkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGZ0cmFjZV9lbmFibGVfZGFlbW9uKCkJCQlkbyB7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2Uodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2VfbW9kKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggOGVjMTc5OS4uMWU1YTI2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtMzMsOCArMzMsOCBAQAogI2RlZmluZSBGVVRFWF9MT0NLX1BJX1BSSVZBVEUJKEZVVEVYX0xPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1VOTE9DS19QSV9QUklWQVRFCShGVVRFWF9VTkxPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1RSWUxPQ0tfUElfUFJJVkFURSAoRlVURVhfVFJZTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKLSNkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVRfUFJJVkFURQkoRlVURVhfV0FJVF9CSVRTIHwgRlVURVhfUFJJVkFURV9GTEFHKQotI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFMgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBSVRfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBSVRfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFNFVCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfV0FJVF9SRVFVRVVFX1BJX1BSSVZBVEUJKEZVVEVYX1dBSVRfUkVRVUVVRV9QSSB8IFwKIAkJCQkJIEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfQ01QX1JFUVVFVUVfUEkgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDExYWIxOWEuLjQxYTU5YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0zLDE1ICszLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IHVzZXJfc3RydWN0OworCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgdXNlcl9zdHJ1Y3Q7Ci0KIGludCBQYWdlSHVnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtX2h1Z2V0bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7CiBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCBpbnQgYWNjdCwKIAkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpOwogaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKQEAgLTE4Nyw3ICsxODcsMTEgQEAKIAogI2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKQkJCTAKICNkZWZpbmUgc2V0X2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQlCVUcoKQotI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcixjcmVhdCkJRVJSX1BUUigtRU5PU1lTKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLAorCQlpbnQgYWNjdGZsYWcsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIsIGludCBjcmVhdF9mbGFncykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQkZTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDU3ZDQxYjAuLjdiNDBjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMzYxLDYgKzM2MSwyNCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCisvKioKKyAqIGkyY19sb2NrX2FkYXB0ZXIgLSBQcmV2ZW50IGFjY2VzcyB0byBhbiBJMkMgYnVzIHNlZ21lbnQKKyAqIEBhZGFwdGVyOiBUYXJnZXQgSTJDIGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfbG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKKy8qKgorICogaTJjX3VubG9ja19hZGFwdGVyIC0gUmVhdXRob3JpemUgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY191bmxvY2tfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKIC8qZmxhZ3MgZm9yIHRoZSBjbGllbnQgc3RydWN0OiAqLwogI2RlZmluZSBJMkNfQ0xJRU5UX1BFQwkweDA0CQkvKiBVc2UgUGFja2V0IEVycm9yIENoZWNraW5nICovCiAjZGVmaW5lIEkyQ19DTElFTlRfVEVOCTB4MTAJCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCmluZGV4IDJkMDJkZmQuLjUwODgyNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCkBAIC0zNDksMTEgKzM0OSwxMSBAQAogCWludAkJaXJxX2xpbmU7CiB9OwogCi0vKiBCb2FyZHMgaGF2ZSB1bmlxZSBtYXBwaW5ncyBvZiB7Y29sLCByb3d9IC0tPiBrZXljb2RlLgotICogQ29sdW1uIGFuZCByb3cgYXJlIDQgYml0cywgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgorLyogQm9hcmRzIGhhdmUgdW5pcWUgbWFwcGluZ3Mgb2Yge3JvdywgY29sfSAtLT4ga2V5Y29kZS4KKyAqIENvbHVtbiBhbmQgcm93IGFyZSA4IGJpdHMgZWFjaCwgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgogICogYSBQRVJTSVNURU5UX0tFWSBpcyAiYWx3YXlzIG9uIiBhbmQgbmV2ZXIgcmVwb3J0ZWQuCiAgKi8KLSNkZWZpbmUgUEVSU0lTVEVOVF9LRVkoYywgcikJS0VZKChjKSwgKHIpLCBLRVlfUkVTRVJWRUQpCisjZGVmaW5lIFBFUlNJU1RFTlRfS0VZKHIsIGMpCUtFWSgociksIChjKSwgS0VZX1JFU0VSVkVEKQogCiBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7CiAJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDQwMGFkYmIuLmZmOGJkZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yNzEsNiArMjcxLDcgQEAKICNlbHNlIC8qIE1PRFVMRSAqLwogCiAvKiBEb24ndCB1c2UgdGhlc2UgaW4gbW9kdWxlcywgYnV0IHNvbWUgcGVvcGxlIGRvLi4uICovCisjZGVmaW5lIGVhcmx5X2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgcG9zdGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDBjY2ZjMzAuLmMyYjFhN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTEzNzcsNiArMTM3NywxMCBAQAogICogbWV0aG9kczsgZXJhc2UoKSBpcyBvcHRpb25hbC4gc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBuZWVkCiAgKiBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGRyaXZlciBzZXRzIHVwIEZGX0dBSU4gYW5kIEZGX0FVVE9DRU5URVIKICAqIGJpdHMuCisgKgorICogTm90ZSB0aGF0IHBsYXliYWNrKCksIHNldF9nYWluKCkgYW5kIHNldF9hdXRvY2VudGVyKCkgYXJlIGNhbGxlZCB3aXRoCisgKiBkZXYtPmV2ZW50X2xvY2sgc3BpbmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBvZmYgYW5kIHRodXMgbWF5IG5vdAorICogc2xlZXAuCiAgKi8KIHN0cnVjdCBmZl9kZXZpY2UgewogCWludCAoKnVwbG9hZCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBiNzhjZjgxLi43Y2E3MmI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CkBAIC02MTAsNiArNjA5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KICNlbmRpZgogCitzdHJ1Y3Qgc2VxX2ZpbGU7CiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjLmggYi9pbmNsdWRlL2xpbnV4L2lwYy5oCmluZGV4IGI4ODI2MTAuLjNiMTU5NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcGMuaApAQCAtNzgsOCArNzgsNiBAQAogI2RlZmluZSBJUENDQUxMKHZlcnNpb24sb3ApCSgodmVyc2lvbik8PDE2IHwgKG9wKSkKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIElQQ01OSSAzMjc2OCAgLyogPD0gTUFYX0lOVCBsaW1pdCBmb3IgaXBjIGFycmF5cyAoaW5jbHVkaW5nIHN5c2N0bCBjaGFuZ2VzKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCA1MjY5NWQzLi5mMTAxMWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNDY0LDkgKzQ2NCw5IEBACiAgKi8KIHN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyB7CiAJdW5zaWduZWQgbG9uZwkJY3NfY2hwX3RpbWU7Ci0JdW5zaWduZWQgbG9uZwkJY3NfZm9yY2VkX3RvX2Nsb3NlOwotCXVuc2lnbmVkIGxvbmcJCWNzX3dyaXR0ZW47Ci0JdW5zaWduZWQgbG9uZwkJY3NfZHJvcHBlZDsKKwlfX3UzMgkJCWNzX2ZvcmNlZF90b19jbG9zZTsKKwlfX3UzMgkJCWNzX3dyaXR0ZW47CisJX191MzIJCQljc19kcm9wcGVkOwogfTsKIAogLyogVGhlIHRyYW5zYWN0aW9uX3QgdHlwZSBpcyB0aGUgZ3V0cyBvZiB0aGUgam91cm5hbGluZyBtZWNoYW5pc20uICBJdApAQCAtNjY4LDIzICs2NjgsMTYgQEAKIAl1bnNpZ25lZCBsb25nCQlyc19mbHVzaGluZzsKIAl1bnNpZ25lZCBsb25nCQlyc19sb2dnaW5nOwogCi0JdW5zaWduZWQgbG9uZwkJcnNfaGFuZGxlX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJCXJzX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nCQlyc19ibG9ja3NfbG9nZ2VkOworCV9fdTMyCQkJcnNfaGFuZGxlX2NvdW50OworCV9fdTMyCQkJcnNfYmxvY2tzOworCV9fdTMyCQkJcnNfYmxvY2tzX2xvZ2dlZDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zIHsKLQlpbnQgCQkJdHNfdHlwZTsKIAl1bnNpZ25lZCBsb25nCQl0c190aWQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgY2hwOwotCX0gdTsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwogfTsKIAotI2RlZmluZSBKQkQyX1NUQVRTX1JVTgkJMQotI2RlZmluZSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQJMgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGpiZDJfdGltZV9kaWZmKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtOTg4LDEyICs5ODEsNiBAQAogCS8qCiAJICogSm91cm5hbCBzdGF0aXN0aWNzCiAJICovCi0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKmpfaGlzdG9yeTsKLQlpbnQJCQlqX2hpc3RvcnlfbWF4OwotCWludAkJCWpfaGlzdG9yeV9jdXI7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSB0cmFuc2FjdGlvbnMgc3RhdGlzdGljcyBoaXN0b3J5Ci0JICovCiAJc3BpbmxvY2tfdAkJal9oaXN0b3J5X2xvY2s7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpqX3Byb2NfZW50cnk7CiAJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3Mgal9zdGF0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQzY2QyM2YuLmY0ZTMxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNjU5LDYgKzY1OSwxMiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fRVhQT1JURURfSEVBREVSU19fCisjaWZuZGVmIF9fS0VSTkVMX18KKyN3YXJuaW5nIEF0dGVtcHQgdG8gdXNlIGtlcm5lbCBoZWFkZXJzIGZyb20gdXNlciBzcGFjZSwgc2VlIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxIZWFkZXJzCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRVhQT1JURURfSEVBREVSU19fICovCisKICNkZWZpbmUgU0lfTE9BRF9TSElGVAkxNgogc3RydWN0IHN5c2luZm8gewogCWxvbmcgdXB0aW1lOwkJCS8qIFNlY29uZHMgc2luY2UgYm9vdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcmVmLmggYi9pbmNsdWRlL2xpbnV4L2tyZWYuaAppbmRleCAwY2VmNmJhLi5iMGNiMGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tyZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfS1JFRl9IXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBrcmVmIHsKIAlhdG9taWNfdCByZWZjb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDc2MzE5YmYuLjg3Njk4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNDE4LDYgKzQxOCwxNyBAQAogCQkJCSAgQVRBX1RJTUlOR19BQ1RJVkUgfCBBVEFfVElNSU5HX1JFQ09WRVIgfAogCQkJCSAgQVRBX1RJTUlOR19ETUFDS19IT0xEIHwgQVRBX1RJTUlOR19DWUNMRSB8CiAJCQkJICBBVEFfVElNSU5HX1VETUEsCisKKwkvKiBBQ1BJIGNvbnN0YW50cyAqLworCUFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSCT0gMSA8PCAwLAorCUFUQV9BQ1BJX0ZJTFRFUl9MT0NLCT0gMSA8PCAxLAorCUFUQV9BQ1BJX0ZJTFRFUl9ESVBNCT0gMSA8PCAyLAorCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQgPSAxIDw8IDMsCS8qIEZQRE1BIG5vbi16ZXJvIG9mZnNldCAqLworCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9BQSA9IDEgPDwgNCwJLyogRlBETUEgYXV0byBhY3RpdmF0ZSAqLworCisJQVRBX0FDUElfRklMVEVSX0RFRkFVTFQJPSBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUiB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfTE9DSyB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfRElQTSwKIH07CiAKIGVudW0gYXRhX3hmZXJfbWFzayB7CkBAIC01ODcsNiArNTk4LDcgQEAKICNpZmRlZiBDT05GSUdfQVRBX0FDUEkKIAlhY3BpX2hhbmRsZQkJYWNwaV9oYW5kbGU7CiAJdW5pb24gYWNwaV9vYmplY3QJKmd0Zl9jYWNoZTsKKwl1bnNpZ25lZCBpbnQJCWd0Zl9maWx0ZXI7CiAjZW5kaWYKIAkvKiBuX3NlY3RvciBpcyBDTEVBUl9CRUdJTiwgcmVhZCBjb21tZW50IGFib3ZlIENMRUFSX0JFR0lOICovCiAJdTY0CQkJbl9zZWN0b3JzOwkvKiBzaXplIG9mIGRldmljZSwgaWYgQVRBICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjMDkwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3N0YXR1cy5oIC0tIFN0YXR1cyBMRURzIGZvciBXTTgzMXgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004MzFYX1NUQVRVU19IX18KKyNkZWZpbmUgX19NRkRfV004MzFYX1NUQVRVU19IX18KKworI2RlZmluZSBXTTgzMVhfTEVEX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweEMwMDAgIC8qIExFRF9TUkMgLSBbMTU6MTRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTEVEX1NSQyAtIFsxNToxNF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfU1JDIC0gWzE1OjE0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzMDAgIC8qIExFRF9NT0RFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRURfTU9ERSAtIFs5OjhdICovCisjZGVmaW5lIFdNODMxWF9MRURfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX01PREUgLSBbOTo4XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NFUV9MRU5fTUFTSyAgICAgICAgICAgICAgICAweDAwMzAgIC8qIExFRF9TRVFfTEVOIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TRVFfTEVOX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBMRURfU0VRX0xFTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU0VRX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX1NFUV9MRU4gLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVVFlfQ1lDX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIExFRF9EVVRZX0NZQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVUWV9DWUNfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogTEVEX0RVVFlfQ1lDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9EVVRZX0NZQ19XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfRFVUWV9DWUMgLSBbMTowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZjA4NTUxLi4yNGMzOTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiAjZWxzZQotc3RhdGljIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCitzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggMjFkNmFhNC4uODRhNTI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTcxLDcgKzE3MSw3IEBACiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsJLyogU2VyaWFsaXplZCBieSBwYWdlX3RhYmxlX2xvY2sgKi8KIAogCS8qIEZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRlYWwgd2l0aCB0aGlzIHN0cnVjdC4gKi8KLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKiB2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCBvdXIgYmFja2luZyBzdG9yZTogKi8KIAl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwkJLyogT2Zmc2V0ICh3aXRoaW4gdm1fZmlsZSkgaW4gUEFHRV9TSVpFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggODFiYjQyMy4uZWFmMzYzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSU5VWF9NTUNfSE9TVF9ICiAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCA2NTQ3YzNjLi44MmE5MTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIGludCAoKnBhcmFtX2dldF9mbikoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKIC8qIEZsYWcgYml0cyBmb3Iga2VybmVsX3BhcmFtLmZsYWdzICovCi0jZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMQogI2RlZmluZSBLUEFSQU1fSVNCT09MCQkyCiAKIHN0cnVjdCBrZXJuZWxfcGFyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggZjZiOTAyNC4uZDA5ZGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCA3OWZlYzZhZi4uY2U1MjA0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCkBAIC00MjUsMTUgKzQyNSw2IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBuaWxmc19kYXRfZ3JvdXBfZGVzYyAtIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IKLSAqIEBkZ19uZnJlZXM6IG51bWJlciBvZiBmcmVlIHZpcnR1YWwgYmxvY2sgbnVtYmVycyBpbiBibG9jayBncm91cAotICovCi1zdHJ1Y3QgbmlsZnNfZGF0X2dyb3VwX2Rlc2MgewotCV9fbGUzMiBkZ19uZnJlZXM7Ci19OwotCi0KLS8qKgogICogc3RydWN0IG5pbGZzX3NuYXBzaG90X2xpc3QgLSBzbmFwc2hvdCBsaXN0CiAgKiBAc3NsX25leHQ6IG5leHQgY2hlY2twb2ludCBudW1iZXIgb24gc25hcHNob3QgbGlzdAogICogQHNzbF9wcmV2OiBwcmV2aW91cyBjaGVja3BvaW50IG51bWJlciBvbiBzbmFwc2hvdCBsaXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGRhMWZkYTguLjg0Y2YxZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0zNzksOSArMzc5LDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERQkweDQzOGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEJMHg0MzkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUJMHg0MzljCi0vKiBBTUQgU0IgQ2hpcHNldCAqLwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUJIDB4NzgwYwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSAweDc4MDAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDg1LDYgKzQ4Miw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETV9QQ0lFIDB4MDM2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0ZPVVJfUE9SVF9NT0RFTAkweDI1MgogCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfSUJNCQkweDEwMTQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVAkweDAzZDQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VOSVNZUwkJMHgxMDE4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU5JU1lTX0RNQV9ESVJFQ1RPUiAweDAwMUMKIApAQCAtNTQzLDcgKzU0Myw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMJMHg3NDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzJfQlJJREdFCTB4NzQ1OAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TTUJVUwkweDc4MGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TTUJVUwkweDc4MGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM1X0lERSAgICAweDIwOEYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKQEAgLTU1Myw5ICs1NTMsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VEQyAgICAweDIwOTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VPQyAgICAweDIwOTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSAgICAweDIwOUEKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9WSURFTyAgMHgyMDgxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX0FFUyAgICAweDIwODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUJCTB4NzgwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFCTB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVAkJMHgxMDIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgJMHgyMDAwCkBAIC03NzYsNiArNzc3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YNTE1CQkweDgwMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDEyCQkweDgwMzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDEyX0ZNCTB4ODAzYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hJTzIwMDBBCTB4ODIzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzAJCTB4YWMxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEwMzEJCTB4YWMxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzEJCTB4YWMxNQpAQCAtMTk1NCw2ICsxOTU2LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX0RTRVJJQUwJMHgwMTAwIC8qIDJ4IDE2NTUwICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUUk9fQQkweDAxMDEgLyogMnggMTY1NTAsIGhhbGYgb2YgNCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUUk9fQgkweDAxMDIgLyogMnggMTY1NTAsIGhhbGYgb2YgNCBwb3J0ICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0EJMHgwMTIwIC8qIDJ4IDE2NTUwQSwgaGFsZiBvZiA0IHBvcnQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQgkweDAxMjEgLyogMnggMTY1NTBBLCBoYWxmIG9mIDQgcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BCTB4MDE4MCAvKiA0eCAxNjU1MEEsIGhhbGYgb2YgOCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0IJMHgwMTgxIC8qIDR4IDE2NTUwQSwgaGFsZiBvZiA4IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1BPUlRfUExVUwkweDAyMDAgLyogMnggMTY2NTAgKi8KQEAgLTIxNjEsNiArMjE2NSwxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3NDIwXzMgICAgICAweDcwMEQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzMwMF8zICAgICAgMHg3MDBFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTc4MDBfMyAgICAgIDB4NzAwRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzMwMCAgICAgICAweDcwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc0MjAgICAgICAgMHg3MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NTAwICAgICAgIDB4NzAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzgwMCAgICAgICAweDcwMTMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BEQwkJMHgxNWU5CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCmluZGV4IDM2OGJkNzAuLjdiN2ZiZjQzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX0ZPUksJCQk9IDcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGFjZWZhZjcuLjllNzAxMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX1JFQ09SRF9GT1JLCQkJPSA3LApAQCAtNDQyLDYgKzQ0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBQRVJGX01BWF9TVEFDS19ERVBUSAkJMjU1CkBAIC00NzAsOCArNDcxLDggQEAKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OwogCQl9OwotCQl1bmlvbiB7IC8qIHNvZnR3YXJlICovCi0JCQlhdG9taWM2NF90CWNvdW50OworCQlzdHJ1Y3QgeyAvKiBzb2Z0d2FyZSAqLworCQkJczY0CQlyZW1haW5pbmc7CiAJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwogCQl9OwogCX07CkBAIC01MTMsNiArNTE0LDEwIEBACiAKIHN0cnVjdCBwZXJmX21tYXBfZGF0YSB7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7CisjaWZkZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcms7CisjZW5kaWYKKwlpbnQJCQkJZGF0YV9vcmRlcjsKIAlpbnQJCQkJbnJfcGFnZXM7CS8qIG5yIG9mIGRhdGEgcGFnZXMgICovCiAJaW50CQkJCXdyaXRhYmxlOwkvKiBhcmUgd2Ugd3JpdGFibGUgICAqLwogCWludAkJCQlucl9sb2NrZWQ7CS8qIG5yIHBhZ2VzIG1sb2NrZWQgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvbGwuaCBiL2luY2x1ZGUvbGludXgvcG9sbC5oCmluZGV4IGZhMjg3ZjIuLjY2NzM3NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9sbC5oCkBAIC02LDEwICs2LDEwIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogLyogfjgzMiBieXRlcyBvZiBzdGFjayBzcGFjZSB1c2VkIG1heCBpbiBzeXNfc2VsZWN0L3N5c19wb2xsIGJlZm9yZSBhbGxvY2F0aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW1mcy5oIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCmluZGV4IDM3YWFmMmIuLjRlNzY4ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFtZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CiBleHRlcm4gaW50IF9faW5pdCBpbml0X3Jvb3Rmcyh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNmZlMDM2My4uM2ViZDBiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNzcsNyArNzcsNyBAQAogI2Vycm9yICJVbmtub3duIFJDVSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24iCiAjZW5kaWYKIAotI2RlZmluZSBSQ1VfSEVBRF9JTklUIAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KKyNkZWZpbmUgUkNVX0hFQURfSU5JVAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KICNkZWZpbmUgUkNVX0hFQUQoaGVhZCkgc3RydWN0IHJjdV9oZWFkIGhlYWQgPSBSQ1VfSEVBRF9JTklUCiAjZGVmaW5lIElOSVRfUkNVX0hFQUQocHRyKSBkbyB7IFwKICAgICAgICAocHRyKS0+bmV4dCA9IE5VTEw7IChwdHIpLT5mdW5jID0gTlVMTDsgXApAQCAtMTI5LDEyICsxMjksNiBAQAogCXJjdV9yZWFkX2FjcXVpcmUoKTsKIH0KIAotLyoqCi0gKiByY3VfcmVhZF91bmxvY2sgLSBtYXJrcyB0aGUgZW5kIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqCi0gKiBTZWUgcmN1X3JlYWRfbG9jaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi0KIC8qCiAgKiBTbyB3aGVyZSBpcyByY3Vfd3JpdGVfbG9jaygpPyAgSXQgZG9lcyBub3QgZXhpc3QsIGFzIHRoZXJlIGlzIG5vCiAgKiB3YXkgZm9yIHdyaXRlcnMgdG8gbG9jayBvdXQgUkNVIHJlYWRlcnMuICBUaGlzIGlzIGEgZmVhdHVyZSwgbm90CkBAIC0xNDQsNiArMTM4LDEyIEBACiAgKiB1c2VkIGFzIHdlbGwuICBSQ1UgZG9lcyBub3QgY2FyZSBob3cgdGhlIHdyaXRlcnMga2VlcCBvdXQgb2YgZWFjaAogICogb3RoZXJzJyB3YXksIGFzIGxvbmcgYXMgdGhleSBkbyBzby4KICAqLworCisvKioKKyAqIHJjdV9yZWFkX3VubG9jayAtIG1hcmtzIHRoZSBlbmQgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICoKKyAqIFNlZSByY3VfcmVhZF9sb2NrKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2sodm9pZCkKIHsKIAlyY3VfcmVhZF9yZWxlYXNlKCk7CkBAIC0xOTYsNiArMTk2LDggQEAKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKIAlyY3VfcmVhZF9hY3F1aXJlKCk7CiB9CisKKy8qIFVzZWQgYnkgbG9ja2RlcCBhbmQgdHJhY2luZzogY2Fubm90IGJlIHRyYWNlZCwgY2Fubm90IGNhbGwgbG9ja2RlcC4gKi8KIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB2b2lkIHJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CkBAIC0yMTMsNiArMjE1LDggQEAKIAlfX3JlbGVhc2UoUkNVX1NDSEVEKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQorCisvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCiBzdGF0aWMgaW5saW5lIG5vdHJhY2Ugdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCAzNzY4Mjc3Li45NjQyYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzAsMTAgKzMwLDE0IEBACiAjaWZuZGVmIF9fTElOVVhfUkNVVFJFRV9ICiAjZGVmaW5lIF9fTElOVVhfUkNVVFJFRV9ICiAKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKwogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwotCitleHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOworZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQogCkBAIC03MiwxMSArNzYsNyBAQAogCiBleHRlcm4gdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCiAJCQkgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKLXsKLQlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKLX0KK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkKHZvaWQpCiB7CkBAIC04NSwxNiArODUsMTEgQEAKIAogZXh0ZXJuIHZvaWQgX19yY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwotZXh0ZXJuIHZvaWQgcmN1X3Jlc3RhcnRfY3B1KGludCBjcHUpOwogCiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfaW5pdF9zY2hlZCh2b2lkKQotewotfQotCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwogdm9pZCByY3VfZXhpdF9ub2h6KHZvaWQpOwpAQCAtMTA3LDcgKzEwMiw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05PX0haICovCiAKLS8qIEEgY29udGV4dCBzd2l0Y2ggaXMgYSBncmFjZSBwZXJpb2QgZm9yIHJjdXRyZWUuICovCisvKiBBIGNvbnRleHQgc3dpdGNoIGlzIGEgZ3JhY2UgcGVyaW9kIGZvciBSQ1Utc2NoZWQgYW5kIFJDVS1iaC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQogewogCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmluZGV4IDczMWFmNzEuLmZjYjk4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKQEAgLTExNCw4ICsxMTQsNyBAQAogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKIAkJdW5zaWduZWQgbG9uZyB2YWwpOwogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCwKLQkJc3RydWN0IHJlc19jb3VudGVyICoqc29mdF9saW1pdF9hdCk7CisJCXVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KTsKIAogLyoKICAqIHVuY2hhcmdlIC0gdGVsbCB0aGF0IHNvbWUgcG9ydGlvbiBvZiB0aGUgcmVzb3VyY2UgaXMgcmVsZWFzZWQKQEAgLTEyOCw4ICsxMjcsNyBAQAogICovCiAKIHZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwotdm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCWJvb2wgKndhc19zb2Z0X2xpbWl0X2V4Y2Vzcyk7Cit2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfbGltaXRfY2hlY2tfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY250KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGZlNjYxYWYuLmRiNTMyY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE3Niw2ICsxNzYsOSBAQAogLyogUXVhbGNvbW0gTVNNIFNvQ3MgKi8KICNkZWZpbmUgUE9SVF9NU00JODgKIAorLyogQkNNNjN4eCBmYW1pbHkgU29DcyAqLworI2RlZmluZSBQT1JUX0JDTTYzWFgJODkKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1ZDI1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogbG1zMjgzZ2YwNS5oIC0gUGxhdGZvcm0gZ2x1ZSBmb3IgU2Ftc3VuZyBMTVMyODNHRjA1IExDRAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpZm5kZWYgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKyNkZWZpbmUgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKworc3RydWN0IGxtczI4M2dmMDVfcGRhdGEgeworCXVuc2lnbmVkIGxvbmcJcmVzZXRfZ3BpbzsKKwlib29sCQlyZXNldF9pbnZlcnRlZDsKK307CisKKyNlbmRpZiAvKiBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNDg5MDE5ZS4uYjg1MDg4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC02Miw3ICs2Miw3IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlJDSFIKIGV4dGVybiBjaGFyICogc3RycmNocihjb25zdCBjaGFyICosaW50KTsKICNlbmRpZgotZXh0ZXJuIGNoYXIgKiBzdHJzdHJpcChjaGFyICopOworZXh0ZXJuIGNoYXIgKiBfX211c3RfY2hlY2sgc3Ryc3RyaXAoY2hhciAqKTsKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1RSCiBleHRlcm4gY2hhciAqIHN0cnN0cihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCBjZDE1ZGY2Li41ZTc4MWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaApAQCAtMzAxLDYgKzMwMSw4IEBACiAjZGVmaW5lIHBtX25vdGlmaWVyKGZuLCBwcmkpCWRvIHsgKHZvaWQpKGZuKTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CisKICNpZm5kZWYgQ09ORklHX0hJQkVSTkFUSU9OCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKIHsKQEAgLTMwOCw4ICszMTAsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uX2xhdGUodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpCiB7CiB9Ci0jZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkge30KKworI2Vsc2UKKworLyogTGV0IHNvbWUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBob3RhZGQgZXhjbHVkZSBoaWJlcm5hdGlvbiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zeXN0ZW1fc2xlZXAodm9pZCkKK3sKKwltdXRleF9sb2NrKCZwbV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBmYzBiZjNlLi41N2U2MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAxKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDEqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCmluZGV4IGMxMzRkZDEuLjA5MDc3ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaApAQCAtNyw3ICs3LDcgQEAKIAogLyoKICAqIFRyYWNlIHNlcXVlbmNlcyBhcmUgdXNlZCB0byBhbGxvdyBhIGZ1bmN0aW9uIHRvIGNhbGwgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMKLSAqIHRvIGNyZWF0ZSBhIHN0cmluZyBvZiBkYXRhIHRvIHVzZSAodXAgdG8gYSBtYXggb2YgUEFHRV9TSVpFLgorICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUpLgogICovCiAKIHN0cnVjdCB0cmFjZV9zZXEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCA2NjBhOWRlLi4yYWFjOGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMzYsNyArMzYsNyBAQAogI2lmbmRlZiBERUNMQVJFX1RSQUNFCiAKICNkZWZpbmUgVFBfUFJPVE8oYXJncy4uLikJYXJncwotI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCQlhcmdzCisjZGVmaW5lIFRQX0FSR1MoYXJncy4uLikJYXJncwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggMzU2NjEyOS4uYjA4Njc3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTQ1LDggKzQ1LDE2IEBACiAgKgogICogdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAgKgotICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZSBpcyBjbG9zZWQgZm9yCi0gKgl0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZQorICoJaXMgY2xvc2VkIGZvciB0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqCisgKgorICogdm9pZCAoKmNsZWFudXApKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKKyAqCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5IHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UKKyAqCWlzIGNsb3NlZCBmb3IgdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuIFRoaXMgaXMKKyAqCWFjdHVhbGx5IHRoZSBzZWNvbmQgcGFydCBvZiBzaHV0ZG93biBmb3Igcm91dGluZXMgdGhhdCBtaWdodCBzbGVlcC4KKyAqCiAgKgogICogaW50ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAogICogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtMjMzLDYgKzI0MSw3IEBACiAJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCWludCAgKCpwdXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IGMxN2ViNjQuLmNlOTExZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xNTAsNiArMTUwLDcgQEAKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmludGVyZmFjZTsKIAl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CiAJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKKwl1bnNpZ25lZCBjaGFyCQkJYXR0YWNoZWQ6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlYTcyMjZhLi4wOTVlMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnRpbyBjaGFubmVscyBwZXIgcGFydGl0aW9uICgxIGZvciBub3cpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMDlkNzMwMC4uMTQxOGYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE1Y2I2NjYuLmZkMjk0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogRmVhdHVyZSBiaXRzICovCkBAIC0xMywxMSArMTQsOCBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfUk8JCTUJLyogRGlzayBpcyByZWFkLW9ubHkgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCi0jZGVmaW5lIFZJUlRJT19CTEtfRl9JREVOVElGWQk4CS8qIEFUQSBJREVOVElGWSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCiAKLSNkZWZpbmUgVklSVElPX0JMS19JRF9CWVRFUwkoc2l6ZW9mKF9fdTE2WzI1Nl0pKQkvKiBJREVOVElGWSBEQVRBICovCi0KIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KIAlfX3U2NCBjYXBhY2l0eTsKQEAgLTMzLDcgKzMxLDYgQEAKIAl9IGdlb21ldHJ5OwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7Ci0JX191OCBpZGVudGlmeVtWSVJUSU9fQkxLX0lEX0JZVEVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggYjVmNTE5OC4uZmU4ODUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDFmNDE3MzQuLjA4NWU0MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCmluZGV4IDQ4MTIxYzMuLmM0ZDVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX1JOR19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDdlZjBjN2IuLmNmMjRjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjA3LDYgKzIwNyw3IEBACiAKIGV4dGVybiB2b2lkIGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yayk7CiAKIGV4dGVybiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGUyNjgxMjIuLmZiMDBiMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0xNTksOCArMTU5LDcgQEAKICAqIEBxaWQ6IHRoZSAmcDlfcWlkIHNlcnZlciBpZGVudGlmaWVyIHRoaXMgaGFuZGxlIHBvaW50cyB0bwogICogQGlvdW5pdDogdGhlIHNlcnZlciByZXBvcnRlZCBtYXhpbXVtIHRyYW5zYWN0aW9uIHNpemUgZm9yIHRoaXMgZmlsZQogICogQHVpZDogdGhlIG51bWVyaWMgdWlkIG9mIHRoZSBsb2NhbCB1c2VyIHdobyBvd25zIHRoaXMgaGFuZGxlCi0gKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKHVudXNlZD8pCi0gKiBAcmRpcl9mcG9zOiB0cmFja3Mgb2Zmc2V0IG9mIGZpbGUgcG9zaXRpb24gd2hlbiByZWFkaW5nIGRpcmVjdG9yeSBjb250ZW50cworICogQHJkaXI6IHJlYWRkaXIgYWNjb3VudGluZyBzdHJ1Y3R1cmUgKGFsbG9jYXRlZCBvbiBkZW1hbmQpCiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtMTc0LDkgKzE3Myw5IEBACiAJc3RydWN0IHA5X3FpZCBxaWQ7CiAJdTMyIGlvdW5pdDsKIAl1aWRfdCB1aWQ7Ci0Jdm9pZCAqYXV4OwogCi0JaW50IHJkaXJfZnBvczsKKwl2b2lkICpyZGlyOworCiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggOWEzYjQ5OC4uZTBmNmZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0yNjIsNiArMjYyLDggQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KIAl2b2lkCQkJCSpkcml2ZXJfZGF0YTsKKwkvKiBzdGF0dXMgb2YgdGhlIGNhcmQgZHVyaW5nIHJlc3VtZSBmcm9tIGEgc3lzdGVtIHNsZWVwIHN0YXRlICovCisJaW50CQkJCXJlc3VtZV9zdGF0dXM7CiB9OwogCiAKQEAgLTI3OSw3ICsyODEsOSBAQAogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9ub25zdGF0aWNfb3BzOwogCiAvKiBzb2NrZXQgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIGNhbGxiYWNrcyBpbiB0aGVpciAuZHJ2IHN0cnVjdCAqLwotZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIAogLyogc29ja2V0IGRyaXZlcnMgdXNlIHRoaXMgY2FsbGJhY2sgaW4gdGhlaXIgSVJRIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKaW5kZXggODg3ZTU3ZS4uYTcyZWRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKQEAgLTMwMyw2ICszMDMsNyBAQAogCWludAkJCWNtZHNfbWF4OwkvKiBzaXplIG9mIGNtZHMgYXJyYXkgKi8KIAlzdHJ1Y3QgaXNjc2lfdGFzawkqKmNtZHM7CQkvKiBPcmlnaW5hbCBDbWRzIGFyciAqLwogCXN0cnVjdCBpc2NzaV9wb29sCWNtZHBvb2w7CS8qIFBEVSdzIHBvb2wgKi8KKwl2b2lkCQkJKmRkX2RhdGE7CS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIH07CiAKIGVudW0gewpAQCAtMzYzLDcgKzM2NCw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICosIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAotCQkgICAgdWludDE2X3QsIGludCwgdWludDMyX3QsIHVuc2lnbmVkIGludCk7CisJCSAgICB1aW50MTZfdCwgaW50LCBpbnQsIHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKik7CiBleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0KHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqKTsKIGV4dGVybiBpbnQgaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCAwODQ0NzhlLi4zNGM0NmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTEyOSw2ICsxMjksOSBAQAogI2RlZmluZSBNSV9SRVBPUlRfVEFSR0VUX1BHUyAgMHgwYQogLyogdmFsdWVzIGZvciBtYWludGVuYW5jZSBvdXQgKi8KICNkZWZpbmUgTU9fU0VUX1RBUkdFVF9QR1MgICAgIDB4MGEKKy8qIHZhbHVlcyBmb3IgdmFyaWFibGUgbGVuZ3RoIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVBRF8zMgkJICAgICAgMHgwOQorI2RlZmluZSBXUklURV8zMgkgICAgICAweDBiCiAKIC8qIFZhbHVlcyBmb3IgVDEwLzA0LTI2MnI3ICovCiAjZGVmaW5lCUFUQV8xNgkJICAgICAgMHg4NQkvKiAxNi1ieXRlIHBhc3MtdGhydSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCmluZGV4IDM4NzhkMWQuLmE1ZTg4NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTIyOSwxMCArMjI5LDYgQEAKIAkvKiBPUy1IQkE6IFByb3RlY3RlZCwgSEJBLVRhcmdldDogUHJvdGVjdGVkICovCiAJU0NTSV9QUk9UX1JFQURfUEFTUywKIAlTQ1NJX1BST1RfV1JJVEVfUEFTUywKLQotCS8qIE9TLUhCQTogUHJvdGVjdGVkLCBIQkEtVGFyZ2V0OiBQcm90ZWN0ZWQsIGNoZWNrc3VtIGNvbnZlcnNpb24gKi8KLQlTQ1NJX1BST1RfUkVBRF9DT05WRVJULAotCVNDU0lfUFJPVF9XUklURV9DT05WRVJULAogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNjc2lfc2V0X3Byb3Rfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgY2hhciBvcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAppbmRleCBiNjJhMDk3Li40Nzk0MWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC03OTcsMjQgKzc5NywyNCBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGludCB0YXJnZXRfdHlwZSkKIHsKLQlzd2l0Y2ggKHRhcmdldF90eXBlKSB7Ci0JY2FzZSAxOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT047Ci0JY2FzZSAyOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT047Ci0JY2FzZSAzOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT047Ci0JfQorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhcFtdID0geyAwLAorCQkJCSAgICAgICBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OIH07CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgY2FwW3RhcmdldF90eXBlXSA/IHRhcmdldF90eXBlIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NzaV9ob3N0X2RpeF9jYXBhYmxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0X3R5cGUpCiB7Ci0Jc3dpdGNoICh0YXJnZXRfdHlwZSkgewotCWNhc2UgMDogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OOwotCWNhc2UgMTogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OOwotCWNhc2UgMjogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OOwotCWNhc2UgMzogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OOwotCX0KKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYXBbXSA9IHsgU0hPU1RfRElYX1RZUEUwX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESVhfVFlQRTJfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElYX1RZUEUzX1BST1RFQ1RJT04gfTsKIAorCXJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBjYXBbdGFyZ2V0X3R5cGVdOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCmluZGV4IGQ4NmFmOTQuLjAwNDA1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaApAQCAtNDg4LDYgKzQ4OCwzOSBAQAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+b2xkX3NlY3RvcikKICk7CiAKK1RSQUNFX0VWRU5UKGJsb2NrX3JxX3JlbWFwLAorCisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LAorCQkgc2VjdG9yX3QgZnJvbSksCisKKwlUUF9BUkdTKHEsIHJxLCBkZXYsIGZyb20pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggZGV2X3QsCQlkZXYJCSkKKwkJX19maWVsZCggc2VjdG9yX3QsCXNlY3RvcgkJKQorCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkpCisJCV9fZmllbGQoIGRldl90LAkJb2xkX2RldgkJKQorCQlfX2ZpZWxkKCBzZWN0b3JfdCwJb2xkX3NlY3RvcgkpCisJCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBkaXNrX2RldnQocnEtPnJxX2Rpc2spOworCQlfX2VudHJ5LT5zZWN0b3IJCT0gYmxrX3JxX3BvcyhycSk7CisJCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJsa19ycV9zZWN0b3JzKHJxKTsKKwkJX19lbnRyeS0+b2xkX2Rldgk9IGRldjsKKwkJX19lbnRyeS0+b2xkX3NlY3Rvcgk9IGZyb207CisJCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCSksCisKKwlUUF9wcmludGsoIiVkLCVkICVzICVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHUiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPnJ3YnMsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5zZWN0b3IsCisJCSAgX19lbnRyeS0+bnJfc2VjdG9yLAorCQkgIE1BSk9SKF9fZW50cnktPm9sZF9kZXYpLCBNSU5PUihfX2VudHJ5LT5vbGRfZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPm9sZF9zZWN0b3IpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0JMT0NLX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKaW5kZXggYzFiZDhmMS4uZDA5NTUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaApAQCAtMTEsNiArMTEsNyBAQAogc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0Owogc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2U7CiBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvOworc3RydWN0IG1wYWdlX2RhX2RhdGE7CiAKICNkZWZpbmUgRVhUNF9JKGlub2RlKSAoY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpKQogCkBAIC0yMzYsNiArMjM3LDcgQEAKIAkJX19maWVsZCgJY2hhciwJZm9yX2t1cGRhdGUJCSkKIAkJX19maWVsZCgJY2hhciwJZm9yX3JlY2xhaW0JCSkKIAkJX19maWVsZCgJY2hhciwJcmFuZ2VfY3ljbGljCQkpCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTI0OSwxNSArMjUxLDE3IEBACiAJCV9fZW50cnktPmZvcl9rdXBkYXRlCT0gd2JjLT5mb3Jfa3VwZGF0ZTsKIAkJX19lbnRyeS0+Zm9yX3JlY2xhaW0JPSB3YmMtPmZvcl9yZWNsYWltOwogCQlfX2VudHJ5LT5yYW5nZV9jeWNsaWMJPSB3YmMtPnJhbmdlX2N5Y2xpYzsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3RvX3dyaXRlICVsZCBwYWdlc19za2lwcGVkICVsZCByYW5nZV9zdGFydCAlbGx1IHJhbmdlX2VuZCAlbGx1IG5vbmJsb2NraW5nICVkIGZvcl9rdXBkYXRlICVkIGZvcl9yZWNsYWltICVkIHJhbmdlX2N5Y2xpYyAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBucl90b193cml0ZSAlbGQgcGFnZXNfc2tpcHBlZCAlbGQgcmFuZ2Vfc3RhcnQgJWxsdSByYW5nZV9lbmQgJWxsdSBub25ibG9ja2luZyAlZCBmb3Jfa3VwZGF0ZSAlZCBmb3JfcmVjbGFpbSAlZCByYW5nZV9jeWNsaWMgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPm5yX3RvX3dyaXRlLAogCQkgIF9fZW50cnktPnBhZ2VzX3NraXBwZWQsIF9fZW50cnktPnJhbmdlX3N0YXJ0LAogCQkgIF9fZW50cnktPnJhbmdlX2VuZCwgX19lbnRyeS0+bm9uYmxvY2tpbmcsCiAJCSAgX19lbnRyeS0+Zm9yX2t1cGRhdGUsIF9fZW50cnktPmZvcl9yZWNsYWltLAotCQkgIF9fZW50cnktPnJhbmdlX2N5Y2xpYykKKwkJICBfX2VudHJ5LT5yYW5nZV9jeWNsaWMsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfcGFnZXMsCkBAIC0zMDksNiArMzEzLDcgQEAKIAkJX19maWVsZCgJY2hhciwJZW5jb3VudGVyZWRfY29uZ2VzdGlvbgkpCiAJCV9fZmllbGQoCWNoYXIsCW1vcmVfaW8JCQkpCQogCQlfX2ZpZWxkKAljaGFyLAlub19ucndyaXRlX2luZGV4X3VwZGF0ZSApCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMyMCwxNCArMzI1LDE2IEBACiAJCV9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24JPSB3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb247CiAJCV9fZW50cnktPm1vcmVfaW8JPSB3YmMtPm1vcmVfaW87CiAJCV9fZW50cnktPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IHJldCAlZCBwYWdlc193cml0dGVuICVkIHBhZ2VzX3NraXBwZWQgJWxkIGNvbmdlc3Rpb24gJWQgbW9yZV9pbyAlZCBub19ucndyaXRlX2luZGV4X3VwZGF0ZSAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSByZXQgJWQgcGFnZXNfd3JpdHRlbiAlZCBwYWdlc19za2lwcGVkICVsZCBjb25nZXN0aW9uICVkIG1vcmVfaW8gJWQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPnJldCwKIAkJICBfX2VudHJ5LT5wYWdlc193cml0dGVuLCBfX2VudHJ5LT5wYWdlc19za2lwcGVkLAogCQkgIF9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24sIF9fZW50cnktPm1vcmVfaW8sCi0JCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpCisJCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfYmVnaW4sCkBAIC03MzcsNiArNzQ0LDE2OSBAQAogCQkgIF9fZW50cnktPmRhdGFfYmxvY2tzLCBfX2VudHJ5LT5tZXRhX2Jsb2NrcykKICk7CiAKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19hbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MTYsCWZvdW5kCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJZ3JvdXBzCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJYnVkZHkJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlmbGFncwkJCSkKKwkJX19maWVsZCgJX191MTYsCXRhaWwJCQkpCisJCV9fZmllbGQoCV9fdTgsCWNyCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfbGVuCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlnb2FsX3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJZ29hbF9sZW4JCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfbGVuCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX2lub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPmZvdW5kCQk9IGFjLT5hY19mb3VuZDsKKwkJX19lbnRyeS0+ZmxhZ3MJCT0gYWMtPmFjX2ZsYWdzOworCQlfX2VudHJ5LT5ncm91cHMJCT0gYWMtPmFjX2dyb3Vwc19zY2FubmVkOworCQlfX2VudHJ5LT5idWRkeQkJPSBhYy0+YWNfYnVkZHk7CisJCV9fZW50cnktPnRhaWwJCT0gYWMtPmFjX3RhaWw7CisJCV9fZW50cnktPmNyCQk9IGFjLT5hY19jcml0ZXJpYTsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5nb2FsX2xvZ2ljYWwJPSBhYy0+YWNfZ19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5nb2FsX3N0YXJ0CT0gYWMtPmFjX2dfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPmdvYWxfZ3JvdXAJPSBhYy0+YWNfZ19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+Z29hbF9sZW4JPSBhYy0+YWNfZ19leC5mZV9sZW47CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2ZfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2ZfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19mX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2ZfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgb3JpZyAldS8lZC8ldUAldSBnb2FsICV1LyVkLyV1QCV1ICIKKwkJICAicmVzdWx0ICV1LyVkLyV1QCV1IGJsa3MgJXUgZ3JwcyAldSBjciAldSBmbGFncyAweCUwNHggIgorCQkgICJ0YWlsICV1IGJyb2tlbiAldSIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPm9yaWdfZ3JvdXAsIF9fZW50cnktPm9yaWdfc3RhcnQsCisJCSAgX19lbnRyeS0+b3JpZ19sZW4sIF9fZW50cnktPm9yaWdfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5nb2FsX2dyb3VwLCBfX2VudHJ5LT5nb2FsX3N0YXJ0LAorCQkgIF9fZW50cnktPmdvYWxfbGVuLCBfX2VudHJ5LT5nb2FsX2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+Zm91bmQsIF9fZW50cnktPmdyb3VwcywgX19lbnRyeS0+Y3IsCisJCSAgX19lbnRyeS0+ZmxhZ3MsIF9fZW50cnktPnRhaWwsCisJCSAgX19lbnRyeS0+YnVkZHkgPyAxIDw8IF9fZW50cnktPmJ1ZGR5IDogMCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19wcmVhbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlvcmlnX2xlbgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IG9yaWcgJXUvJWQvJXVAJXUgcmVzdWx0ICV1LyVkLyV1QCV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+b3JpZ19ncm91cCwgX19lbnRyeS0+b3JpZ19zdGFydCwKKwkJICBfX2VudHJ5LT5vcmlnX2xlbiwgX19lbnRyeS0+b3JpZ19sb2dpY2FsLAorCQkgIF9fZW50cnktPnJlc3VsdF9ncm91cCwgX19lbnRyeS0+cmVzdWx0X3N0YXJ0LAorCQkgIF9fZW50cnktPnJlc3VsdF9sZW4sIF9fZW50cnktPnJlc3VsdF9sb2dpY2FsKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2Rpc2NhcmQsCisJVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyksCisKKwlUUF9BUkdTKGFjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWlub190LAlpbm8JCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IGV4dGVudCAldS8lZC8ldUAldSAiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19mcmVlLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwJPSBhYy0+YWNfYl9leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5yZXN1bHRfc3RhcnQJPSBhYy0+YWNfYl9leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+cmVzdWx0X2dyb3VwCT0gYWMtPmFjX2JfZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPnJlc3VsdF9sZW4JPSBhYy0+YWNfYl9leC5mZV9sZW47CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlub2RlICVsdSBleHRlbnQgJXUvJWQvJXVAJXUgIiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0VYVDRfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCBiODUxZjBiLi4zYzYwYjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC03LDYgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKK3N0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfczsKK3N0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfczsKKwogVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50LAogCiAJVFBfUFJPVE8oam91cm5hbF90ICpqb3VybmFsLCBpbnQgcmVzdWx0KSwKQEAgLTE2Miw2ICsxNjUsODEgQEAKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8pCiApOwogCitUUkFDRV9FVkVOVChqYmQyX3J1bl9zdGF0cywKKwlUUF9QUk9UTyhkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgdGlkLAorCQkgc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zICpzdGF0cyksCisKKwlUUF9BUkdTKGRldiwgdGlkLCBzdGF0cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAkJZGV2X3QsCWRldgkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl0aWQJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJd2FpdAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlydW5uaW5nCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvY2tlZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlmbHVzaGluZwkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvZ2dpbmcJCSkKKwkJX19maWVsZCgJCV9fdTMyLAloYW5kbGVfY291bnQJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2NrcwkJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2Nrc19sb2dnZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+d2FpdAkJPSBzdGF0cy0+cnNfd2FpdDsKKwkJX19lbnRyeS0+cnVubmluZwk9IHN0YXRzLT5yc19ydW5uaW5nOworCQlfX2VudHJ5LT5sb2NrZWQJCT0gc3RhdHMtPnJzX2xvY2tlZDsKKwkJX19lbnRyeS0+Zmx1c2hpbmcJPSBzdGF0cy0+cnNfZmx1c2hpbmc7CisJCV9fZW50cnktPmxvZ2dpbmcJPSBzdGF0cy0+cnNfbG9nZ2luZzsKKwkJX19lbnRyeS0+aGFuZGxlX2NvdW50CT0gc3RhdHMtPnJzX2hhbmRsZV9jb3VudDsKKwkJX19lbnRyeS0+YmxvY2tzCQk9IHN0YXRzLT5yc19ibG9ja3M7CisJCV9fZW50cnktPmJsb2Nrc19sb2dnZWQJPSBzdGF0cy0+cnNfYmxvY2tzX2xvZ2dlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgdGlkICVsdSB3YWl0ICV1IHJ1bm5pbmcgJXUgbG9ja2VkICV1IGZsdXNoaW5nICV1ICIKKwkJICAibG9nZ2luZyAldSBoYW5kbGVfY291bnQgJXUgYmxvY2tzICV1IGJsb2Nrc19sb2dnZWQgJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+d2FpdCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5ydW5uaW5nKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmxvY2tlZCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5mbHVzaGluZyksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5sb2dnaW5nKSwKKwkJICBfX2VudHJ5LT5oYW5kbGVfY291bnQsIF9fZW50cnktPmJsb2NrcywKKwkJICBfX2VudHJ5LT5ibG9ja3NfbG9nZ2VkKQorKTsKKworVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50X3N0YXRzLAorCVRQX1BST1RPKGRldl90IGRldiwgdW5zaWduZWQgbG9uZyB0aWQsCisJCSBzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgKnN0YXRzKSwKKworCVRQX0FSR1MoZGV2LCB0aWQsIHN0YXRzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCQlkZXZfdCwJZGV2CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAljaHBfdGltZQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZm9yY2VkX3RvX2Nsb3NlCSkKKwkJX19maWVsZCgJCV9fdTMyLAl3cml0dGVuCQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZHJvcHBlZAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+Y2hwX3RpbWUJPSBzdGF0cy0+Y3NfY2hwX3RpbWU7CisJCV9fZW50cnktPmZvcmNlZF90b19jbG9zZT0gc3RhdHMtPmNzX2ZvcmNlZF90b19jbG9zZTsKKwkJX19lbnRyeS0+d3JpdHRlbgk9IHN0YXRzLT5jc193cml0dGVuOworCQlfX2VudHJ5LT5kcm9wcGVkCT0gc3RhdHMtPmNzX2Ryb3BwZWQ7CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIHRpZCAlbHUgY2hwX3RpbWUgJXUgZm9yY2VkX3RvX2Nsb3NlICV1ICIKKwkJICAid3JpdHRlbiAldSBkcm9wcGVkICV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRpZCwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmNocF90aW1lKSwKKwkJICBfX2VudHJ5LT5mb3JjZWRfdG9fY2xvc2UsIF9fZW50cnktPndyaXR0ZW4sIF9fZW50cnktPmRyb3BwZWQpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0pCRDJfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKaW5kZXggZmNmZDlhMS4uZTQ2MTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwogCSksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwRiIsIF9fZW50cnktPnRocmVhZF9jb21tLAorCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCkBAIC00OCw3ICs0OCw3IEBACiAJCV9fZW50cnktPmZ1bmMJCT0gd29yay0+ZnVuYzsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgZnVuYz0lcEYiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwKKwlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwZiIsIF9fZW50cnktPnRocmVhZF9jb21tLAogCQlfX2VudHJ5LT50aHJlYWRfcGlkLCBfX2VudHJ5LT5mdW5jKQogKTsKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGM3YmFjMzlkLi45ZTAzZWY4IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogY29uZmlnIEFVRElUU1lTQ0FMTAogCWJvb2wgIkVuYWJsZSBzeXN0ZW0tY2FsbCBhdWRpdGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUFBDNjQgfHwgUzM5MCB8fCBJQTY0IHx8IFVNTCB8fCBTUEFSQzY0fHwgU1VQRVJIKQorCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUzM5MCB8fCBJQTY0IHx8IFVNTCB8fCBTUEFSQzY0IHx8IFNVUEVSSCkKIAlkZWZhdWx0IHkgaWYgU0VDVVJJVFlfU0VMSU5VWAogCWhlbHAKIAkgIEVuYWJsZSBsb3ctb3ZlcmhlYWQgc3lzdGVtLWNhbGwgYXVkaXRpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdApAQCAtOTIxLDYgKzkyMSwxMSBAQAogCWhlbHAKIAkgIFNlZSB0b29scy9wZXJmL2Rlc2lnbi50eHQgZm9yIGRldGFpbHMuCiAKK2NvbmZpZyBQRVJGX1VTRV9WTUFMTE9DCisJYm9vbAorCWhlbHAKKwkgIFNlZSB0b29scy9wZXJmL2Rlc2lnbi50eHQgZm9yIGRldGFpbHMKKwogbWVudSAiS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMiCiAKIGNvbmZpZyBQRVJGX0VWRU5UUwpAQCAtOTMyLDcgKzkzNyw3IEBACiAJICBFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIHZhcmlvdXMgcGVyZm9ybWFuY2UgZXZlbnRzIHByb3ZpZGVkCiAJICBieSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUuCiAKLQkgIFNvZnR3YXJlIGV2ZW50cyBhcmUgc3VwcG9ydGVkIGVpdGhlciBidWlsZC1pbiBvciB2aWEgdGhlCisJICBTb2Z0d2FyZSBldmVudHMgYXJlIHN1cHBvcnRlZCBlaXRoZXIgYnVpbHQtaW4gb3IgdmlhIHRoZQogCSAgdXNlIG9mIGdlbmVyaWMgdHJhY2Vwb2ludHMuCiAKIAkgIE1vc3QgbW9kZXJuIENQVXMgc3VwcG9ydCBwZXJmb3JtYW5jZSBldmVudHMgdmlhIHBlcmZvcm1hbmNlCkBAIC05NDQsNyArOTQ5LDcgQEAKIAkgIHVzZWQgdG8gcHJvZmlsZSB0aGUgY29kZSB0aGF0IHJ1bnMgb24gdGhhdCBDUFUuCiAKIAkgIFRoZSBMaW51eCBQZXJmb3JtYW5jZSBFdmVudCBzdWJzeXN0ZW0gcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb2YKLQkgIHRoZXNlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBjZXZlbnQgYXBhYmlsaXRpZXMsIGF2YWlsYWJsZSB2aWEgYQorCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGV2ZW50IGNhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCiAJICBzeXN0ZW0gY2FsbCBhbmQgdXNlZCBieSB0aGUgInBlcmYiIHV0aWxpdHkgaW4gdG9vbHMvcGVyZi8uIEl0CiAJICBwcm92aWRlcyBwZXIgdGFzayBhbmQgcGVyIENQVSBjb3VudGVycywgYW5kIGl0IHByb3ZpZGVzIGV2ZW50CiAJICBjYXBhYmlsaXRpZXMgb24gdG9wIG9mIHRob3NlLgpAQCAtOTc2LDYgKzk4MSwxOSBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKK2NvbmZpZyBERUJVR19QRVJGX1VTRV9WTUFMTE9DCisJZGVmYXVsdCBuCisJYm9vbCAiRGVidWc6IHVzZSB2bWFsbG9jIHRvIGJhY2sgcGVyZiBtbWFwKCkgYnVmZmVycyIKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTICYmIERFQlVHX0tFUk5FTAorCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCisJaGVscAorCSBVc2Ugdm1hbGxvYyBtZW1vcnkgdG8gYmFjayBwZXJmIG1tYXAoKSBidWZmZXJzLgorCisJIE1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUgdm1hbGxvYyBjb2RlIG9uIHBsYXRmb3JtcworCSB0aGF0IGRvbid0IHJlcXVpcmUgaXQuCisKKwkgU2F5IE4gaWYgdW5zdXJlLgorCiBlbmRtZW51CiAKIGNvbmZpZyBWTV9FVkVOVF9DT1VOVEVSUwpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA3NDQ5ODE5YS4uNTk4OGRlYiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTc3OCw3ICs3NzgsNiBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9fYmFzaWNfc2V0dXAodm9pZCkKIHsKLQlyY3VfaW5pdF9zY2hlZCgpOyAvKiBuZWVkZWQgYnkgbW9kdWxlX2luaXQgc3RhZ2UuICovCiAJaW5pdF93b3JrcXVldWVzKCk7CiAJY3B1c2V0X2luaXRfc21wKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDllYjE0ODguLjQ2NDY5NGUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgc2htX2ZpbGVfZGF0YShmaWxlKSAoKigoc3RydWN0IHNobV9maWxlX2RhdGEgKiopJihmaWxlKS0+cHJpdmF0ZV9kYXRhKSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htX2ZpbGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKIAogI2RlZmluZSBzaG1faWRzKG5zKQkoKG5zKS0+aWRzW0lQQ19TSE1fSURTXSkKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAJLmdldF91bm1hcHBlZF9hcmVhCT0gc2htX2dldF91bm1hcHBlZF9hcmVhLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0gewogCS5vcGVuCT0gc2htX29wZW4sCS8qIGNhbGxiYWNrIGZvciBhIG5ldyB2bS1hcmVhIG9wZW4gKi8KIAkuY2xvc2UJPSBzaG1fY2xvc2UsCS8qIGNhbGxiYWNrIGZvciB3aGVuIHRoZSB2bS1hcmVhIGlzIHJlbGVhc2VkICovCiAJLmZhdWx0CT0gc2htX2ZhdWx0LApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDdjY2JhNGIuLjAyNDlmNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogc3RhdGljIGludCBjZ3JvdXBfcm1kaXIoc3RydWN0IGlub2RlICp1bnVzZWRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RhdGljIGludCBjZ3JvdXBfcG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnApOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNncm91cF9iYWNraW5nX2Rldl9pbmZvID0gewogCS5uYW1lCQk9ICJjZ3JvdXAiLApAQCAtMTcxMCwxNCArMTcxMCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwogCWlmIChjZnQtPndyaXRlX3U2NCkgewotCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXU2NCB2YWwgPSBzaW1wbGVfc3RydG91bGwoc3Ryc3RyaXAoYnVmZmVyKSwgJmVuZCwgMCk7CiAJCWlmICgqZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHZhbCA9IGNmdC0+d3JpdGVfdTY0KGNncnAsIGNmdCwgdmFsKTsKIAl9IGVsc2UgewotCQlzNjQgdmFsID0gc2ltcGxlX3N0cnRvbGwoYnVmZmVyLCAmZW5kLCAwKTsKKwkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3M2NChjZ3JwLCBjZnQsIHZhbCk7CkBAIC0xNzUzLDggKzE3NTIsNyBAQAogCX0KIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwotCXJldHZhbCA9IGNmdC0+d3JpdGVfc3RyaW5nKGNncnAsIGNmdCwgYnVmZmVyKTsKKwlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIHN0cnN0cmlwKGJ1ZmZlcikpOwogCWlmICghcmV0dmFsKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQ6CkBAIC0xODYzLDcgKzE4NjEsNyBAQAogCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9zZXFmaWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfc2VxZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gY2dyb3VwX2ZpbGVfd3JpdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTE5MjIsNyArMTkyMCw3IEBACiAJcmV0dXJuIHNpbXBsZV9yZW5hbWUob2xkX2Rpciwgb2xkX2RlbnRyeSwgbmV3X2RpciwgbmV3X2RlbnRyeSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9maWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gY2dyb3VwX2ZpbGVfcmVhZCwKIAkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTMzNjksNyArMzM2Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3VwX3Nob3csIHBpZCk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBjZ3JvdXBfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKQEAgLTMzOTgsNyArMzM5Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiA9IGNncm91cHN0YXRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzcwOCw4ICszNzA2LDEwIEBACiB2b2lkIF9fY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKKwlpbnQgdmFsOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KSA9PSAxKSB7CisJdmFsID0gYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KTsKKwlpZiAodmFsID09IDEpIHsKIAkJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7CiAJCQlzZXRfYml0KENHUlBfUkVMRUFTQUJMRSwgJmNncnAtPmZsYWdzKTsKIAkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNncnApOwpAQCAtMzcxNyw2ICszNzE3LDcgQEAKIAkJY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXIoY2dycCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOworCVdBUk5fT05fT05DRSh2YWwgPCAxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDU4NTlmNTkuLmY3ODY0YWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzU5LDEwICszNTksOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CisJaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7Ci0JCXByb2Nfc2lkX2Nvbm5lY3RvcihjdXJyKTsKLQl9CiAKIAlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7CkBAIC05OTEsOCArOTg5LDYgQEAKIAl0c2stPm1lbXBvbGljeSA9IE5VTEw7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnRzay0+cGlfc3RhdGVfbGlzdCkpKQotCQlleGl0X3BpX3N0YXRlX2xpc3QodHNrKTsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpKQogCQlrZnJlZShjdXJyZW50LT5waV9zdGF0ZV9jYWNoZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDI2NmM2YWYuLjE2NmI4YzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtOTEsNyArOTEsNyBAQAogCWludCBjcHU7CiAJaW50IHRvdGFsID0gMDsKIAotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXRvdGFsICs9IHBlcl9jcHUocHJvY2Vzc19jb3VudHMsIGNwdSk7CiAKIAlyZXR1cm4gdG90YWw7CkBAIC01NzAsMTIgKzU3MCwxOCBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgZnV0ZXhlcyB3aGVuIHJlbGVhc2luZyB0aGUgbW0gKi8KICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkodHNrLT5yb2J1c3RfbGlzdCkpCisJaWYgKHVubGlrZWx5KHRzay0+cm9idXN0X2xpc3QpKSB7CiAJCWV4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5yb2J1c3RfbGlzdCA9IE5VTEw7CisJfQogI2lmZGVmIENPTkZJR19DT01QQVQKLQlpZiAodW5saWtlbHkodHNrLT5jb21wYXRfcm9idXN0X2xpc3QpKQorCWlmICh1bmxpa2VseSh0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCkpIHsKIAkJY29tcGF0X2V4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5jb21wYXRfcm9idXN0X2xpc3QgPSBOVUxMOworCX0KICNlbmRpZgorCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmdHNrLT5waV9zdGF0ZV9saXN0KSkpCisJCWV4aXRfcGlfc3RhdGVfbGlzdCh0c2spOwogI2VuZGlmCiAKIAkvKiBHZXQgcmlkIG9mIGFueSBjYWNoZWQgcmVnaXN0ZXIgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggMjQ4ZGQxMS4uZmI2NWU4MiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTg5LDM2ICs4OSwzNiBAQAogCXVuaW9uIGZ1dGV4X2tleSBrZXk7CiB9OwogCi0vKgotICogV2UgdXNlIHRoaXMgaGFzaGVkIHdhaXRxdWV1ZSBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KKy8qKgorICogc3RydWN0IGZ1dGV4X3EgLSBUaGUgaGFzaGVkIGZ1dGV4IHF1ZXVlIGVudHJ5LCBvbmUgcGVyIHdhaXRpbmcgdGFzaworICogQHRhc2s6CQl0aGUgdGFzayB3YWl0aW5nIG9uIHRoZSBmdXRleAorICogQGxvY2tfcHRyOgkJdGhlIGhhc2ggYnVja2V0IGxvY2sKKyAqIEBrZXk6CQl0aGUga2V5IHRoZSBmdXRleCBpcyBoYXNoZWQgb24KKyAqIEBwaV9zdGF0ZToJCW9wdGlvbmFsIHByaW9yaXR5IGluaGVyaXRhbmNlIHN0YXRlCisgKiBAcnRfd2FpdGVyOgkJcnRfd2FpdGVyIHN0b3JhZ2UgZm9yIHVzZSB3aXRoIHJlcXVldWVfcGkKKyAqIEByZXF1ZXVlX3BpX2tleToJdGhlIHJlcXVldWVfcGkgdGFyZ2V0IGZ1dGV4IGtleQorICogQGJpdHNldDoJCWJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAKKyAqCisgKiBXZSB1c2UgdGhpcyBoYXNoZWQgd2FpdHF1ZXVlLCBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KICAqIHdlIGNhbiB3YWtlIG9ubHkgdGhlIHJlbGV2YW50IG9uZXMgKGhhc2hlZCBxdWV1ZXMgbWF5IGJlIHNoYXJlZCkuCiAgKgogICogQSBmdXRleF9xIGhhcyBhIHdva2VuIHN0YXRlLCBqdXN0IGxpa2UgdGFza3MgaGF2ZSBUQVNLX1JVTk5JTkcuCiAgKiBJdCBpcyBjb25zaWRlcmVkIHdva2VuIHdoZW4gcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkgfHwgcS0+bG9ja19wdHIgPT0gMC4KICAqIFRoZSBvcmRlciBvZiB3YWt1cCBpcyBhbHdheXMgdG8gbWFrZSB0aGUgZmlyc3QgY29uZGl0aW9uIHRydWUsIHRoZW4KLSAqIHdha2UgdXAgcS0+d2FpdGVyLCB0aGVuIG1ha2UgdGhlIHNlY29uZCBjb25kaXRpb24gdHJ1ZS4KKyAqIHRoZSBzZWNvbmQuCisgKgorICogUEkgZnV0ZXhlcyBhcmUgdHlwaWNhbGx5IHdva2VuIGJlZm9yZSB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCB2aWEKKyAqIHRoZSBydF9tdXRleCBjb2RlLiBTZWUgdW5xdWV1ZV9tZV9waSgpLgogICovCiBzdHJ1Y3QgZnV0ZXhfcSB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsKLQkvKiBXYWl0ZXIgcmVmZXJlbmNlICovCisKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KLQkvKiBXaGljaCBoYXNoIGxpc3QgbG9jayB0byB1c2U6ICovCiAJc3BpbmxvY2tfdCAqbG9ja19wdHI7Ci0KLQkvKiBLZXkgd2hpY2ggdGhlIGZ1dGV4IGlzIGhhc2hlZCBvbjogKi8KIAl1bmlvbiBmdXRleF9rZXkga2V5OwotCi0JLyogT3B0aW9uYWwgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc3RhdGU6ICovCiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZTsKLQotCS8qIHJ0X3dhaXRlciBzdG9yYWdlIGZvciByZXF1ZXVlX3BpOiAqLwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnJ0X3dhaXRlcjsKLQotCS8qIFRoZSBleHBlY3RlZCByZXF1ZXVlIHBpIHRhcmdldCBmdXRleCBrZXk6ICovCiAJdW5pb24gZnV0ZXhfa2V5ICpyZXF1ZXVlX3BpX2tleTsKLQotCS8qIEJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAgKi8KIAl1MzIgYml0c2V0OwogfTsKIApAQCAtMTUwLDcgKzE1MCw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Z1dGV4KHVuaW9uIGZ1dGV4X2tleSAqa2V5MSwgdW5pb24gZnV0ZXhfa2V5ICprZXkyKQogewotCXJldHVybiAoa2V5MS0+Ym90aC53b3JkID09IGtleTItPmJvdGgud29yZAorCXJldHVybiAoa2V5MSAmJiBrZXkyCisJCSYmIGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKIAkJJiYga2V5MS0+Ym90aC5wdHIgPT0ga2V5Mi0+Ym90aC5wdHIKIAkJJiYga2V5MS0+Ym90aC5vZmZzZXQgPT0ga2V5Mi0+Ym90aC5vZmZzZXQpOwogfQpAQCAtMTk4LDExICsxOTksMTIgQEAKIH0KIAogLyoqCi0gKiBnZXRfZnV0ZXhfa2V5IC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4LgotICogQHVhZGRyOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4Ci0gKiBAZnNoYXJlZDogMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECi0gKiBAa2V5OiBhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCi0gKiBAcnc6IG1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwgVkVSSUZZX1dSSVRFKQorICogZ2V0X2Z1dGV4X2tleSgpIC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4CisgKiBAdWFkZHI6CXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKKyAqIEBmc2hhcmVkOgkwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKKyAqIEBrZXk6CWFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KKyAqIEBydzoJCW1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwKKyAqIAkJVkVSSUZZX1dSSVRFKQogICoKICAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAKICAqIFRoZSBrZXkgd29yZHMgYXJlIHN0b3JlZCBpbiAqa2V5IG9uIHN1Y2Nlc3MuCkBAIC0yODgsOCArMjkwLDggQEAKIAlkcm9wX2Z1dGV4X2tleV9yZWZzKGtleSk7CiB9CiAKLS8qCi0gKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSAtIGZhdWx0IGluIHVzZXIgYWRkcmVzcyBhbmQgdmVyaWZ5IFJXIGFjY2VzcworLyoqCisgKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSgpIC0gRmF1bHQgaW4gdXNlciBhZGRyZXNzIGFuZCB2ZXJpZnkgUlcgYWNjZXNzCiAgKiBAdWFkZHI6CXBvaW50ZXIgdG8gZmF1bHRpbmcgdXNlciBzcGFjZSBhZGRyZXNzCiAgKgogICogU2xvdyBwYXRoIHRvIGZpeHVwIHRoZSBmYXVsdCB3ZSBqdXN0IHRvb2sgaW4gdGhlIGF0b21pYyB3cml0ZQpAQCAtMzA5LDggKzMxMSw4IEBACiAKIC8qKgogICogZnV0ZXhfdG9wX3dhaXRlcigpIC0gUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdhaXRlciBvbiBhIGZ1dGV4Ci0gKiBAaGI6ICAgICB0aGUgaGFzaCBidWNrZXQgdGhlIGZ1dGV4X3EncyByZXNpZGUgaW4KLSAqIEBrZXk6ICAgIHRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKQorICogQGhiOgkJdGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluCisgKiBAa2V5Ogl0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EncykKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBoYiBsb2NrIGhlbGQuCiAgKi8KQEAgLTU4OCw3ICs1OTAsNyBAQAogfQogCiAvKioKLSAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBhdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKKyAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBBdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKICAqIEB1YWRkcjoJCXRoZSBwaSBmdXRleCB1c2VyIGFkZHJlc3MKICAqIEBoYjoJCQl0aGUgcGkgZnV0ZXggaGFzaCBidWNrZXQKICAqIEBrZXk6CQl0aGUgZnV0ZXgga2V5IGFzc29jaWF0ZWQgd2l0aCB1YWRkciBhbmQgaGIKQEAgLTkxNSw4ICs5MTcsOCBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCi0JZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogcmV0cnlfcHJpdmF0ZToKKwlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiAJb3BfcmV0ID0gZnV0ZXhfYXRvbWljX29wX2ludXNlcihvcCwgdWFkZHIyKTsKIAlpZiAodW5saWtlbHkob3BfcmV0IDwgMCkpIHsKIApAQCAtMTAxMSw5ICsxMDEzLDkgQEAKIAogLyoqCiAgKiByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoKSAtIFdha2UgYSB0YXNrIHRoYXQgYWNxdWlyZWQgdGhlIGxvY2sgZHVyaW5nIHJlcXVldWUKLSAqIHE6CXRoZSBmdXRleF9xCi0gKiBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4Ci0gKiBoYjogIHRoZSBoYXNoX2J1Y2tldCBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKKyAqIEBxOgkJdGhlIGZ1dGV4X3EKKyAqIEBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CisgKiBAaGI6CQl0aGUgaGFzaF9idWNrZXQgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CiAgKgogICogRHVyaW5nIGZ1dGV4X3JlcXVldWUsIHdpdGggcmVxdWV1ZV9waT0xLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJlIHRoZQogICogdGFyZ2V0IGZ1dGV4IGlmIGl0IGlzIHVuY29udGVuZGVkIG9yIHZpYSBhIGxvY2sgc3RlYWwuICBTZXQgdGhlIGZ1dGV4X3Ega2V5CkBAIC0xMDI3LDcgKzEwMjksNiBAQAogdm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LAogCQkJICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKLQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwogCWdldF9mdXRleF9rZXlfcmVmcyhrZXkpOwogCXEtPmtleSA9ICprZXk7CiAKQEAgLTEyMjUsNiArMTIyNiw3IEBACiAJCSAqLwogCQlpZiAocmV0ID09IDEpIHsKIAkJCVdBUk5fT04ocGlfc3RhdGUpOworCQkJZHJvcF9jb3VudCsrOwogCQkJdGFza19jb3VudCsrOwogCQkJcmV0ID0gZ2V0X2Z1dGV4X3ZhbHVlX2xvY2tlZCgmY3VydmFsMiwgdWFkZHIyKTsKIAkJCWlmICghcmV0KQpAQCAtMTMwMyw2ICsxMzA1LDcgQEAKIAkJCWlmIChyZXQgPT0gMSkgewogCQkJCS8qIFdlIGdvdCB0aGUgbG9jay4gKi8KIAkJCQlyZXF1ZXVlX3BpX3dha2VfZnV0ZXgodGhpcywgJmtleTIsIGhiMik7CisJCQkJZHJvcF9jb3VudCsrOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChyZXQpIHsKIAkJCQkvKiAtRURFQURMSyAqLwpAQCAtMTM1MCw2ICsxMzUzLDI1IEBACiAJcmV0dXJuIGhiOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3F1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKK3sKKwlzcGluX3VubG9jaygmaGItPmxvY2spOworCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Cit9CisKKy8qKgorICogcXVldWVfbWUoKSAtIEVucXVldWUgdGhlIGZ1dGV4X3Egb24gdGhlIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gZW5xdWV1ZQorICogQGhiOglUaGUgZGVzdGluYXRpb24gaGFzaCBidWNrZXQKKyAqCisgKiBUaGUgaGItPmxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIsIGFuZCBpcyByZWxlYXNlZCBoZXJlLiBBIGNhbGwgdG8KKyAqIHF1ZXVlX21lKCkgaXMgdHlwaWNhbGx5IHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGNhbGwgdG8gdW5xdWV1ZV9tZSgpLiAgVGhlCisgKiBleGNlcHRpb25zIGludm9sdmUgdGhlIFBJIHJlbGF0ZWQgb3BlcmF0aW9ucywgd2hpY2ggbWF5IHVzZSB1bnF1ZXVlX21lX3BpKCkKKyAqIG9yIG5vdGhpbmcgaWYgdGhlIHVucXVldWUgaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSB3YWtlIHByb2Nlc3MgYW5kIHRoZSB1bnF1ZXVlCisgKiBzdGF0ZSBpcyBpbXBsaWNpdCBpbiB0aGUgc3RhdGUgb2Ygd29rZW4gdGFzayAoc2VlIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIGZvcgorICogYW4gZXhhbXBsZSkuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKIAlpbnQgcHJpbzsKQEAgLTEzNzMsMTkgKzEzOTUsMTcgQEAKIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXF1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKLXsKLQlzcGluX3VubG9jaygmaGItPmxvY2spOwotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Ci19Ci0KLS8qCi0gKiBxdWV1ZV9tZSBhbmQgdW5xdWV1ZV9tZSBtdXN0IGJlIGNhbGxlZCBhcyBhIHBhaXIsIGVhY2gKLSAqIGV4YWN0bHkgb25jZS4gIFRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBoYXNoZWQgc3BpbmxvY2sgaGVsZC4KKy8qKgorICogdW5xdWV1ZV9tZSgpIC0gUmVtb3ZlIHRoZSBmdXRleF9xIGZyb20gaXRzIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gdW5xdWV1ZQorICoKKyAqIFRoZSBxLT5sb2NrX3B0ciBtdXN0IG5vdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuIEEgY2FsbCB0byB1bnF1ZXVlX21lKCkgbXVzdAorICogYmUgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgZWFybGllciBjYWxsIHRvIHF1ZXVlX21lKCkuCisgKgorICogUmV0dXJuczoKKyAqICAgMSAtIGlmIHRoZSBmdXRleF9xIHdhcyBzdGlsbCBxdWV1ZWQgKGFuZCB3ZSByZW1vdmVkIHVucXVldWVkIGl0KQorICogICAwIC0gaWYgdGhlIGZ1dGV4X3Egd2FzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgd2FraW5nIHRocmVhZAogICovCi0KLS8qIFJldHVybiAxIGlmIHdlIHdlcmUgc3RpbGwgcXVldWVkIChpZS4gMCBtZWFucyB3ZSB3ZXJlIHdva2VuKSAqLwogc3RhdGljIGludCB1bnF1ZXVlX21lKHN0cnVjdCBmdXRleF9xICpxKQogewogCXNwaW5sb2NrX3QgKmxvY2tfcHRyOwpAQCAtMTYzOCwxNyArMTY1OCwxNCBAQAogc3RhdGljIHZvaWQgZnV0ZXhfd2FpdF9xdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKIAkJCQlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0aW1lb3V0KQogewotCXF1ZXVlX21lKHEsIGhiKTsKLQogCS8qCi0JICogVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxpbmcgc2luY2UgdGhlIHF1ZXVlX21lKCksIGFzIHdlCi0JICogY2Fubm90IGhvbGQgYSBzcGlubG9jayBhY3Jvc3MgdGhlIGdldF91c2VyKCkgaW4gY2FzZSBpdAotCSAqIGZhdWx0cywgYW5kIHdlIGNhbm5vdCBqdXN0IHNldCBUQVNLX0lOVEVSUlVQVElCTEUgc3RhdGUgd2hlbgotCSAqIHF1ZXVlaW5nIG91cnNlbHZlcyBpbnRvIHRoZSBmdXRleCBoYXNoLiBUaGlzIGNvZGUgdGh1cyBoYXMgdG8KLQkgKiByZWx5IG9uIHRoZSBmdXRleF93YWtlKCkgY29kZSByZW1vdmluZyB1cyBmcm9tIGhhc2ggd2hlbiBpdAotCSAqIHdha2VzIHVzIHVwLgorCSAqIFRoZSB0YXNrIHN0YXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJlZm9yZSBhbm90aGVyIHRhc2sgY2FuCisJICogd2FrZSBpdC4gc2V0X2N1cnJlbnRfc3RhdGUoKSBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZXRfbWIoKSBhbmQKKwkgKiBxdWV1ZV9tZSgpIGNhbGxzIHNwaW5fdW5sb2NrKCkgdXBvbiBjb21wbGV0aW9uLCBib3RoIHNlcmlhbGl6aW5nCisJICogYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3QgYW5kIGZvcmNpbmcgYW5vdGhlciBtZW1vcnkgYmFycmllci4KIAkgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXF1ZXVlX21lKHEsIGhiKTsKIAogCS8qIEFybSB0aGUgdGltZXIgKi8KIAlpZiAodGltZW91dCkgewpAQCAtMTY1OCw4ICsxNjc1LDggQEAKIAl9CiAKIAkvKgotCSAqICFwbGlzdF9ub2RlX2VtcHR5KCkgaXMgc2FmZSBoZXJlIHdpdGhvdXQgYW55IGxvY2suCi0JICogcS5sb2NrX3B0ciAhPSAwIGlzIG5vdCBzYWZlLCBiZWNhdXNlIG9mIG9yZGVyaW5nIGFnYWluc3Qgd2FrZXVwLgorCSAqIElmIHdlIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCwgdGhlbiBhbm90aGVyIHRhc2sKKwkgKiBoYXMgdHJpZWQgdG8gd2FrZSB1cywgYW5kIHdlIGNhbiBza2lwIHRoZSBjYWxsIHRvIHNjaGVkdWxlKCkuCiAJICovCiAJaWYgKGxpa2VseSghcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkpKSB7CiAJCS8qCkBAIC0xNzc2LDYgKzE3OTMsNyBAQAogCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAl9CiAKK3JldHJ5OgogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0xNzkzLDkgKzE4MTEsMTQgQEAKIAkJZ290byBvdXRfcHV0X2tleTsKIAogCS8qCi0JICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgYW5vdGhlciB0aHJlYWQgbWF5Ci0JICogaGF2ZSBoYW5kbGVkIGl0IGZvciB1cyBhbHJlYWR5LgorCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IHdlIG1pZ2h0IGJlIHRoZQorCSAqIHZpY3RpbSBvZiBhIHNwdXJpb3VzIHdha2V1cCBhcyB3ZWxsLgogCSAqLworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OworCX0KKwogCXJldCA9IC1FUkVTVEFSVFNZUzsKIAlpZiAoIWFic190aW1lKQogCQlnb3RvIG91dF9wdXRfa2V5OwpAQCAtMjEwMiwxMSArMjEyNSwxMiBAQAogCQkgKiBVbnF1ZXVlIHRoZSBmdXRleF9xIGFuZCBkZXRlcm1pbmUgd2hpY2ggaXQgd2FzLgogCQkgKi8KIAkJcGxpc3RfZGVsKCZxLT5saXN0LCAmcS0+bGlzdC5wbGlzdCk7Ci0JCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAKKwkJLyogSGFuZGxlIHNwdXJpb3VzIHdha2V1cHMgZ3JhY2VmdWxseSAqLworCQlyZXQgPSAtRVdPVUxEQkxPQ0s7CiAJCWlmICh0aW1lb3V0ICYmICF0aW1lb3V0LT50YXNrKQogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldCA9IC1FUkVTVEFSVE5PSU5UUjsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIxMTQsMTIgKzIxMzgsMTIgQEAKIAogLyoqCiAgKiBmdXRleF93YWl0X3JlcXVldWVfcGkoKSAtIFdhaXQgb24gdWFkZHIgYW5kIHRha2UgdWFkZHIyCi0gKiBAdWFkZHI6CXRoZSBmdXRleCB3ZSBpbml0aWFseWwgd2FpdCBvbiAobm9uLXBpKQorICogQHVhZGRyOgl0aGUgZnV0ZXggd2UgaW5pdGlhbGx5IHdhaXQgb24gKG5vbi1waSkKICAqIEBmc2hhcmVkOgl3aGV0aGVyIHRoZSBmdXRleGVzIGFyZSBzaGFyZWQgKDEpIG9yIG5vdCAoMCkuICBUaGV5IG11c3QgYmUKICAqIAkJdGhlIHNhbWUgdHlwZSwgbm8gcmVxdWV1ZWluZyBmcm9tIHByaXZhdGUgdG8gc2hhcmVkLCBldGMuCiAgKiBAdmFsOgl0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdWFkZHIKICAqIEBhYnNfdGltZToJYWJzb2x1dGUgdGltZW91dAotICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsLgorICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsCiAgKiBAY2xvY2tydDoJd2hldGhlciB0byB1c2UgQ0xPQ0tfUkVBTFRJTUUgKDEpIG9yIENMT0NLX01PTk9UT05JQyAoMCkKICAqIEB1YWRkcjI6CXRoZSBwaSBmdXRleCB3ZSB3aWxsIHRha2UgcHJpb3IgdG8gcmV0dXJuaW5nIHRvIHVzZXItc3BhY2UKICAqCkBAIC0yMjQ2LDcgKzIyNzAsNyBAQAogCQlyZXMgPSBmaXh1cF9vd25lcih1YWRkcjIsIGZzaGFyZWQsICZxLCAhcmV0KTsKIAkJLyoKIAkJICogSWYgZml4dXBfb3duZXIoKSByZXR1cm5lZCBhbiBlcnJvciwgcHJvcHJvZ2F0ZSB0aGF0LiAgSWYgaXQKLQkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIG91ciAtRVRJTUVET1VUIG9yIC1FSU5UUi4KKwkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIC1FVElNRURPVVQgb3IgLUVJTlRSLgogCQkgKi8KIAkJaWYgKHJlcykKIAkJCXJldCA9IChyZXMgPCAwKSA/IHJlcyA6IDA7CkBAIC0yMzAyLDkgKzIzMjYsOSBAQAogICovCiAKIC8qKgotICogc3lzX3NldF9yb2J1c3RfbGlzdCAtIHNldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKLSAqIEBoZWFkOiBwb2ludGVyIHRvIHRoZSBsaXN0LWhlYWQKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgbGlzdC1oZWFkLCBhcyB1c2Vyc3BhY2UgZXhwZWN0cworICogc3lzX3NldF9yb2J1c3RfbGlzdCgpIC0gU2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzaworICogQGhlYWQ6CXBvaW50ZXIgdG8gdGhlIGxpc3QtaGVhZAorICogQGxlbjoJbGVuZ3RoIG9mIHRoZSBsaXN0LWhlYWQsIGFzIHVzZXJzcGFjZSBleHBlY3RzCiAgKi8KIFNZU0NBTExfREVGSU5FMihzZXRfcm9idXN0X2xpc3QsIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqLCBoZWFkLAogCQlzaXplX3QsIGxlbikKQEAgLTIzMjMsMTAgKzIzNDcsMTAgQEAKIH0KIAogLyoqCi0gKiBzeXNfZ2V0X3JvYnVzdF9saXN0IC0gZ2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzawotICogQHBpZDogcGlkIG9mIHRoZSBwcm9jZXNzIFt6ZXJvIGZvciBjdXJyZW50IHRhc2tdCi0gKiBAaGVhZF9wdHI6IHBvaW50ZXIgdG8gYSBsaXN0LWhlYWQgcG9pbnRlciwgdGhlIGtlcm5lbCBmaWxscyBpdCBpbgotICogQGxlbl9wdHI6IHBvaW50ZXIgdG8gYSBsZW5ndGggZmllbGQsIHRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIGhlYWRlciBzaXplCisgKiBzeXNfZ2V0X3JvYnVzdF9saXN0KCkgLSBHZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCisgKiBAcGlkOglwaWQgb2YgdGhlIHByb2Nlc3MgW3plcm8gZm9yIGN1cnJlbnQgdGFza10KKyAqIEBoZWFkX3B0cjoJcG9pbnRlciB0byBhIGxpc3QtaGVhZCBwb2ludGVyLCB0aGUga2VybmVsIGZpbGxzIGl0IGluCisgKiBAbGVuX3B0cjoJcG9pbnRlciB0byBhIGxlbmd0aCBmaWVsZCwgdGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgaGVhZGVyIHNpemUKICAqLwogU1lTQ0FMTF9ERUZJTkUzKGdldF9yb2J1c3RfbGlzdCwgaW50LCBwaWQsCiAJCXN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqIF9fdXNlciAqLCBoZWFkX3B0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGU1ZDk4Y2UuLjNlMWMzNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNTA5LDEzICs1MDksMTQgQEAKICAqIG5leHQgZXZlbnQKICAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIGJhc2UtPmxvY2sgaGVsZAogICovCi1zdGF0aWMgdm9pZCBocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UpCitzdGF0aWMgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlLCBpbnQgc2tpcF9lcXVhbCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2U7Ci0Ja3RpbWVfdCBleHBpcmVzOworCWt0aW1lX3QgZXhwaXJlcywgZXhwaXJlc19uZXh0OwogCi0JY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOworCWV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyssIGJhc2UrKykgewogCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CkBAIC01MzEsMTAgKzUzMiwxNSBAQAogCQkgKi8KIAkJaWYgKGV4cGlyZXMudHY2NCA8IDApCiAJCQlleHBpcmVzLnR2NjQgPSAwOwotCQlpZiAoZXhwaXJlcy50djY0IDwgY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQotCQkJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJCWlmIChleHBpcmVzLnR2NjQgPCBleHBpcmVzX25leHQudHY2NCkKKwkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CiAJfQogCisJaWYgKHNraXBfZXF1YWwgJiYgZXhwaXJlc19uZXh0LnR2NjQgPT0gY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQorCQlyZXR1cm47CisKKwljcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPSBleHBpcmVzX25leHQudHY2NDsKKwogCWlmIChjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgIT0gS1RJTUVfTUFYKQogCQl0aWNrX3Byb2dyYW1fZXZlbnQoY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCwgMSk7CiB9CkBAIC02MTcsNyArNjIzLDcgQEAKIAliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5vZmZzZXQgPQogCQl0aW1lc3BlY190b19rdGltZShyZWFsdGltZV9vZmZzZXQpOwogCi0JaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSk7CisJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSwgMCk7CiAJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwogfQogCkBAIC03MjAsOCArNzI2LDYgQEAKIAkvKiAiUmV0cmlnZ2VyIiB0aGUgaW50ZXJydXB0IHRvIGdldCB0aGluZ3MgZ29pbmcgKi8KIAlyZXRyaWdnZXJfbmV4dF9ldmVudChOVUxMKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlN3aXRjaGVkIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIG9uIENQVSAlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzMwLDcgKzczNCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2hyZXNfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaXNfaHJlc19lbmFibGVkKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfc3dpdGNoX3RvX2hyZXModm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UsIGludCBza2lwX2VxdWFsKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfZW5xdWV1ZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXIgKnRpbWVyLAogCQkJCQkgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwKIAkJCQkJICAgIGludCB3YWtldXApCkBAIC04NzMsMTkgKzg3OCwyOSBAQAogCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld3N0YXRlLCBpbnQgcmVwcm9ncmFtKQogewotCWlmICh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZQotCQkgKiBmaXJzdCBlbnRyeSBwb2ludGVyIGlmIG5lY2Vzc2FyeS4KLQkJICovCi0JCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKLQkJCWJhc2UtPmZpcnN0ID0gcmJfbmV4dCgmdGltZXItPm5vZGUpOwotCQkJLyogUmVwcm9ncmFtIHRoZSBjbG9jayBldmVudCBkZXZpY2UuIGlmIGVuYWJsZWQgKi8KLQkJCWlmIChyZXByb2dyYW0gJiYgaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQotCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlKTsKKwlpZiAoISh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZSBmaXJzdAorCSAqIGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKKwkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCQkvKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gaWYgZW5hYmxlZCAqLworCQlpZiAocmVwcm9ncmFtICYmIGhydGltZXJfaHJlc19hY3RpdmUoKSkgeworCQkJa3RpbWVfdCBleHBpcmVzOworCisJCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLAorCQkJCQkgICAgYmFzZS0+b2Zmc2V0KTsKKwkJCWlmIChiYXNlLT5jcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPT0gZXhwaXJlcy50djY0KQorCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlLCAxKTsKIAkJfQotCQlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOworI2VuZGlmCiAJfQorCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7CitvdXQ6CiAJdGltZXItPnN0YXRlID0gbmV3c3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IGE4MWNmODAuLjE3YzcxYmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCAxMTRlNzA0Li5iZDcyNzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMjEsNyArMTIxLDkgQEAKIAkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKIAkJCWNvbnRpbnVlOwogCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBjZmFkYzEyLi41MjQwZDc1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZrcHJvYmVzX3NlcV9vcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2twcm9iZXNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfa3Byb2Jlc19vcGVyYXRpb25zID0gewogCS5vcGVuICAgICAgICAgICA9IGtwcm9iZXNfb3BlbiwKIAkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19rcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfa3AgPSB7CiAJLnJlYWQgPSAgICAgICAgIHJlYWRfZW5hYmxlZF9maWxlX2Jvb2wsCiAJLndyaXRlID0gICAgICAgIHdyaXRlX2VuYWJsZWRfZmlsZV9ib29sLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDVmZTcwOTkuLmFiN2FlNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTUwLDI5ICsxNTAsNiBAQAogRVhQT1JUX1NZTUJPTChrdGhyZWFkX2NyZWF0ZSk7CiAKIC8qKgotICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgotICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCi0gKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCi0gKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKLSAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfdGFza19jcHUoaywgY3B1KTsKLQlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7Ci0Jay0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCi0vKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzgxNWFjMWQuLjlhZjU2NzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMTQyLDYgKzE0MiwxMSBAQAogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbG9ja19jbGFzc19zdGF0c1tNQVhfTE9DS0RFUF9LRVlTXSwgbG9ja19zdGF0cyk7CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGxvY2tzdGF0X2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCiBzdGF0aWMgaW50IGxvY2tfcG9pbnQodW5zaWduZWQgbG9uZyBwb2ludHNbXSwgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAlpbnQgaTsKQEAgLTE1OCw3ICsxNjMsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgdm9pZCBsb2NrX3RpbWVfaW5jKHN0cnVjdCBsb2NrX3RpbWUgKmx0LCBzNjQgdGltZSkKK3N0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHU2NCB0aW1lKQogewogCWlmICh0aW1lID4gbHQtPm1heCkKIAkJbHQtPm1heCA9IHRpbWU7CkBAIC0yMzQsMTIgKzIzOSwxMiBAQAogc3RhdGljIHZvaWQgbG9ja19yZWxlYXNlX2hvbGR0aW1lKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQogewogCXN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzICpzdGF0czsKLQlzNjQgaG9sZHRpbWU7CisJdTY0IGhvbGR0aW1lOwogCiAJaWYgKCFsb2NrX3N0YXQpCiAJCXJldHVybjsKIAotCWhvbGR0aW1lID0gc2NoZWRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKKwlob2xkdGltZSA9IGxvY2tzdGF0X2Nsb2NrKCkgLSBobG9jay0+aG9sZHRpbWVfc3RhbXA7CiAKIAlzdGF0cyA9IGdldF9sb2NrX3N0YXRzKGhsb2NrX2NsYXNzKGhsb2NrKSk7CiAJaWYgKGhsb2NrLT5yZWFkKQpAQCAtMjc5Miw3ICsyNzk3LDcgQEAKIAlobG9jay0+cmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7CiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IDA7Ci0JaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogI2VuZGlmCiAKIAlpZiAoY2hlY2sgPT0gMiAmJiAhbWFya19pcnFmbGFncyhjdXJyLCBobG9jaykpCkBAIC0zMzIyLDcgKzMzMjcsNyBAQAogCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jaykKIAkJcmV0dXJuOwogCi0JaGxvY2stPndhaXR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogCiAJY29udGVudGlvbl9wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW50aW9uX3BvaW50LCBpcCk7CiAJY29udGVuZGluZ19wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW5kaW5nX3BvaW50LApAQCAtMzM0NSw4ICszMzUwLDcgQEAKIAlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jaywgKnByZXZfaGxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBkZXB0aDsKLQl1NjQgbm93OwotCXM2NCB3YWl0dGltZSA9IDA7CisJdTY0IG5vdywgd2FpdHRpbWUgPSAwOwogCWludCBpLCBjcHU7CiAKIAlkZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGg7CkBAIC0zMzc0LDcgKzMzNzgsNyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChobG9jay0+d2FpdHRpbWVfc3RhbXApIHsKLQkJbm93ID0gc2NoZWRfY2xvY2soKTsKKwkJbm93ID0gbG9ja3N0YXRfY2xvY2soKTsKIAkJd2FpdHRpbWUgPSBub3cgLSBobG9jay0+d2FpdHRpbWVfc3RhbXA7CiAJCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IG5vdzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNWEyOTM5Ny4uOGI3ZDg4MCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTk5MiwxMiArMTk5MiwxNCBAQAogCQkJCQkgIEVsZl9TaGRyICpzZWNoZHJzLAogCQkJCQkgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgc3RyaW5kZXgsCi0JCQkJCSAgY29uc3QgRWxmX0hkciAqaGRyLAorCQkJCQkgIGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJCSAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpwc3Ryb2ZmcywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpzdHJtYXApCiB7CisJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJCUVsZl9TaGRyICpzZWNoZHJzLAogCQkJCXVuc2lnbmVkIGludCBzaG51bSwKQEAgLTIwODEsOSArMjA4Myw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIAl1bnNpZ25lZCBsb25nIHN5bW9mZnMsIHN0cm9mZnMsICpzdHJtYXA7Ci0jZW5kaWYKKwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKIAlERUJVR1AoImxvYWRfbW9kdWxlOiB1bW9kPSVwLCBsZW49JWx1LCB1YXJncz0lcFxuIiwKQEAgLTMwOTEsNyArMzA5Miw2IEBACiAJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKIAkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCiAJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKLQkJICAgc3RydWN0IG1hcmtlciAqbWFya2VyLAogCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCiB7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCmluZGV4IDUwZDAyMmUuLmVjODE1YTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggYmNkZWYyNi4uOTZiNDVkMCAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTkwLDYgKzkwLDggQEAKIAogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZwYW5pY19ub3RpZmllcl9saXN0LCAwLCBidWYpOwogCisJYnVzdF9zcGlubG9ja3MoMCk7CisKIAlpZiAoIXBhbmljX2JsaW5rKQogCQlwYW5pY19ibGluayA9IG5vX2JsaW5rOwogCkBAIC0xMzYsNyArMTM4LDYgQEAKIAkJbWRlbGF5KDEpOwogCQlpKys7CiAJfQotCWJ1c3Rfc3BpbmxvY2tzKDApOwogfQogCiBFWFBPUlRfU1lNQk9MKHBhbmljKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA5ZGE1OGVhLi5kNjU2YzI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yMTgsMTUgKzIxOCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOwotCiAJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKIAkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLwogCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7Ci0JCWtwLT5mbGFncyB8PSBLUEFSQU1fS01BTExPQ0VEOwogCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrcC0+YXJnKQorCQlpZiAoISooY2hhciAqKilrcC0+YXJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlCiAJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOwpAQCAtMzA0LDYgKzMwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LAogCQkgICAgICAgdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAogCQkgICAgICAgaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKKwkJICAgICAgIHUxNiBmbGFncywKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbnVtKQogewogCWludCByZXQ7CkBAIC0zMTMsNiArMzEwLDcgQEAKIAkvKiBHZXQgdGhlIG5hbWUgcmlnaHQgZm9yIGVycm9ycy4gKi8KIAlrcC5uYW1lID0gbmFtZTsKIAlrcC5hcmcgPSBlbGVtOworCWtwLmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBObyBlcXVhbHMgc2lnbj8gKi8KIAlpZiAoIXZhbCkgewpAQCAtMzU4LDcgKzM1Niw4IEBACiAJdW5zaWduZWQgaW50IHRlbXBfbnVtOwogCiAJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIDEsIGFyci0+bWF4LCBhcnItPmVsZW0sCi0JCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKKwkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBrcC0+ZmxhZ3MsCisJCQkgICBhcnItPm51bSA/OiAmdGVtcF9udW0pOwogfQogCiBpbnQgcGFyYW1fYXJyYXlfZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC02MDUsMTEgKzYwNCw3IEBACiAKIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWlmIChwYXJhbXNbaV0uZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBmcmVlIGttYWxsb2NlZCBjaGFycCBwYXJhbWV0ZXJzLiAgSXQgZG9lc24ndC4gKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDc2YWM0ZGIuLjdmMjk2NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTEwMzAsMTQgKzEwMzEsMTAgQEAKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKIAlwZXJmX2Rpc2FibGUoKTsKLQlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQotCQkJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQkJZWxzZQotCQkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQl9Ci0JfQorCWlmIChjdHgtPm5yX2FjdGl2ZSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKwogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgogCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwpAQCAtMTI1OCwxMiArMTI1NSw4IEBACiAJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQogCQkJY29udGludWU7CiAKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQlldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCWVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKLQkJCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCX0KKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKKwkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKIAogCQkvKgogCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCkBAIC0xMjkxLDE1ICsxMjg0LDkgQEAKIAkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikgewotCQkJaWYgKGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKKwkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCiAJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7Ci0JCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKLQkJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCQl9Ci0JCX0KIAl9CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CkBAIC0xMzY4LDcgKzEzNTUsNyBAQAogCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwogCiAJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCiAJCQljb250aW51ZTsKIApAQCAtMjEwNSw0OSArMjA5MiwzMSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2RhdGFfc2l6ZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7Ci0KLQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgewotCQlpZiAodm1mLT5wZ29mZiA9PSAwKQotCQkJcmV0ID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQotCQlnb3RvIHVubG9jazsKLQotCWlmICh2bWYtPnBnb2ZmID09IDApIHsKLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7Ci0JfSBlbHNlIHsKLQkJaW50IG5yID0gdm1mLT5wZ29mZiAtIDE7Ci0KLQkJaWYgKCh1bnNpZ25lZCluciA+IGRhdGEtPm5yX3BhZ2VzKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbbnJdKTsKLQl9Ci0KLQlnZXRfcGFnZSh2bWYtPnBhZ2UpOwotCXZtZi0+cGFnZS0+bWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwotCXZtZi0+cGFnZS0+aW5kZXggICA9IHZtZi0+cGdvZmY7Ci0KLQlyZXQgPSAwOwotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZGF0YS0+bnJfcGFnZXMgPDwgKFBBR0VfU0hJRlQgKyBkYXRhLT5kYXRhX29yZGVyKTsKIH0KIAotc3RhdGljIGludCBwZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKKyNpZm5kZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKworLyoKKyAqIEJhY2sgcGVyZl9tbWFwKCkgd2l0aCByZWd1bGFyIEdGUF9LRVJORUwtMCBwYWdlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHBhZ2UgKgorcGVyZl9tbWFwX3RvX3BhZ2Uoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCWlmIChwZ29mZiA+IGRhdGEtPm5yX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwZ29mZiA9PSAwKQorCQlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7CisKKwlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbcGdvZmYgLSAxXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTIxNzIsMTkgKzIxNDEsMTAgQEAKIAkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOwogCX0KIAorCWRhdGEtPmRhdGFfb3JkZXIgPSAwOwogCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOwogCi0JaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgewotCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKLQkJCQkgICAgICBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKLQl9Ci0JaWYgKCFkYXRhLT53YXRlcm1hcmspCi0JCWRhdGEtPndhdGVybWFyayA9IG1heChQQUdFX1NJWkUsIFBBR0VfU0laRSAqIG5yX3BhZ2VzIC8gNCk7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRhdGE7CiAKIGZhaWxfZGF0YV9wYWdlczoKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCkBAIC0yMTk2LDcgKzIxNTYsNyBAQAogCWtmcmVlKGRhdGEpOwogCiBmYWlsOgotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX21tYXBfZnJlZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIyMDcsMjggKzIxNjcsMTY5IEBACiAJX19mcmVlX3BhZ2UocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQorc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCWludCBpOwogCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7Ci0KIAlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPnVzZXJfcGFnZSk7CiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yX3BhZ2VzOyBpKyspCiAJCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+ZGF0YV9wYWdlc1tpXSk7Cit9CiAKKyNlbHNlCisKKy8qCisgKiBCYWNrIHBlcmZfbW1hcCgpIHdpdGggdm1hbGxvYyBtZW1vcnkuCisgKgorICogUmVxdWlyZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGQtY2FjaGUgYWxpYXNpbmcgaXNzdWVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJaWYgKHBnb2ZmID4gKDFVTCA8PCBkYXRhLT5kYXRhX29yZGVyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopZGF0YS0+dXNlcl9wYWdlICsgcGdvZmYgKiBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfdW5tYXJrX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKworCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl2b2lkICpiYXNlOworCWludCBpLCBucjsKKworCWRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCB3b3JrKTsKKwluciA9IDEgPDwgZGF0YS0+ZGF0YV9vcmRlcjsKKworCWJhc2UgPSBkYXRhLT51c2VyX3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IG5yICsgMTsgaSsrKQorCQlwZXJmX21tYXBfdW5tYXJrX3BhZ2UoYmFzZSArIChpICogUEFHRV9TSVpFKSk7CisKKwl2ZnJlZShiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCit7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICphbGxfYnVmOworCisJV0FSTl9PTihhdG9taWNfcmVhZCgmZXZlbnQtPm1tYXBfY291bnQpKTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplICs9IHNpemVvZih2b2lkICopOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlnb3RvIGZhaWw7CisKKwlJTklUX1dPUksoJmRhdGEtPndvcmssIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayk7CisKKwlhbGxfYnVmID0gdm1hbGxvY191c2VyKChucl9wYWdlcyArIDEpICogUEFHRV9TSVpFKTsKKwlpZiAoIWFsbF9idWYpCisJCWdvdG8gZmFpbF9hbGxfYnVmOworCisJZGF0YS0+dXNlcl9wYWdlID0gYWxsX2J1ZjsKKwlkYXRhLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKKwlkYXRhLT5kYXRhX29yZGVyID0gaWxvZzIobnJfcGFnZXMpOworCWRhdGEtPm5yX3BhZ2VzID0gMTsKKworCXJldHVybiBkYXRhOworCitmYWlsX2FsbF9idWY6CisJa2ZyZWUoZGF0YSk7CisKK2ZhaWw6CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgeworCQlpZiAodm1mLT5wZ29mZiA9PSAwKQorCQkJcmV0ID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7CisJaWYgKCFkYXRhKQorCQlnb3RvIHVubG9jazsKKworCWlmICh2bWYtPnBnb2ZmICYmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19XUklURSkpCisJCWdvdG8gdW5sb2NrOworCisJdm1mLT5wYWdlID0gcGVyZl9tbWFwX3RvX3BhZ2UoZGF0YSwgdm1mLT5wZ29mZik7CisJaWYgKCF2bWYtPnBhZ2UpCisJCWdvdG8gdW5sb2NrOworCisJZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKKwl2bWYtPnBhZ2UtPm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKKwl2bWYtPnBhZ2UtPmluZGV4ICAgPSB2bWYtPnBnb2ZmOworCisJcmV0ID0gMDsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX21tYXBfZGF0YV9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQoreworCWxvbmcgbWF4X3NpemUgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKTsKKworCWF0b21pY19zZXQoJmRhdGEtPmxvY2ssIC0xKTsKKworCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKKwkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgbWF4X3NpemUsCisJCQkJCWV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOworCX0KKworCWlmICghZGF0YS0+d2F0ZXJtYXJrKQorCQlkYXRhLT53YXRlcm1hcmsgPSBtYXhfdChsb25nLCBQQUdFX1NJWkUsIG1heF9zaXplIC8gMik7CisKKworCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7CisJcGVyZl9tbWFwX2RhdGFfZnJlZShkYXRhKTsKIAlrZnJlZShkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9yZWxlYXNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBldmVudC0+ZGF0YTsKIAogCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIE5VTEwpOwotCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgX19wZXJmX21tYXBfZGF0YV9mcmVlKTsKKwljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC0yMjQ0LDE2ICsyMzQ1LDE3IEBACiAKIAlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmV2ZW50LT5tbWFwX2NvdW50LCAmZXZlbnQtPm1tYXBfbXV0ZXgpKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGV2ZW50LT5kYXRhKTsKIAkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CiAKLQkJYXRvbWljX2xvbmdfc3ViKGV2ZW50LT5kYXRhLT5ucl9wYWdlcyArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOworCQlhdG9taWNfbG9uZ19zdWIoKHNpemUgPj4gUEFHRV9TSElGVCkgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAkJdm1hLT52bV9tbS0+bG9ja2VkX3ZtIC09IGV2ZW50LT5kYXRhLT5ucl9sb2NrZWQ7Ci0JCXBlcmZfbW1hcF9kYXRhX2ZyZWUoZXZlbnQpOworCQlwZXJmX21tYXBfZGF0YV9yZWxlYXNlKGV2ZW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBlcmZfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0gewogCS5vcGVuCQk9IHBlcmZfbW1hcF9vcGVuLAogCS5jbG9zZQkJPSBwZXJmX21tYXBfY2xvc2UsCiAJLmZhdWx0CQk9IHBlcmZfbW1hcF9mYXVsdCwKQEAgLTIyNjYsNiArMjM2OCw3IEBACiAJdW5zaWduZWQgbG9uZyB1c2VyX2xvY2tlZCwgdXNlcl9sb2NrX2xpbWl0OwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwogCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIHZtYV9zaXplOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJbG9uZyB1c2VyX2V4dHJhLCBleHRyYTsKQEAgLTIzMjgsMTAgKzI0MzEsMTUgQEAKIAl9CiAKIAlXQVJOX09OKGV2ZW50LT5kYXRhKTsKLQlyZXQgPSBwZXJmX21tYXBfZGF0YV9hbGxvYyhldmVudCwgbnJfcGFnZXMpOwotCWlmIChyZXQpCisKKwlkYXRhID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKKwlyZXQgPSAtRU5PTUVNOworCWlmICghZGF0YSkKIAkJZ290byB1bmxvY2s7CiAKKwlyZXQgPSAwOworCXBlcmZfbW1hcF9kYXRhX2luaXQoZXZlbnQsIGRhdGEpOworCiAJYXRvbWljX3NldCgmZXZlbnQtPm1tYXBfY291bnQsIDEpOwogCWF0b21pY19sb25nX2FkZCh1c2VyX2V4dHJhLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAl2bWEtPnZtX21tLT5sb2NrZWRfdm0gKz0gZXh0cmE7CkBAIC0yNTE5LDcgKzI2MjcsNyBAQAogCWlmICghZGF0YS0+d3JpdGFibGUpCiAJCXJldHVybiB0cnVlOwogCi0JbWFzayA9IChkYXRhLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKSAtIDE7CisJbWFzayA9IHBlcmZfZGF0YV9zaXplKGRhdGEpIC0gMTsKIAogCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7CiAJaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKQEAgLTI2MjQsNyArMjczMiw3IEBACiAJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbWFzazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBzaXplOwogCXZvaWQgKipwYWdlczsKIApAQCAtMjYzMywxMiArMjc0MSwxNCBAQAogCXBhZ2VzCQk9IGhhbmRsZS0+ZGF0YS0+ZGF0YV9wYWdlczsKIAogCWRvIHsKLQkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTsKIAkJaW50IG5yOwogCiAJCW5yCSAgICA9IChvZmZzZXQgPj4gUEFHRV9TSElGVCkgJiBwYWdlc19tYXNrOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUgLSAxKTsKLQkJc2l6ZQkgICAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0LCBsZW4pOworCQlwYWdlX3NpemUgICA9IDFVTCA8PCAoaGFuZGxlLT5kYXRhLT5kYXRhX29yZGVyICsgUEFHRV9TSElGVCk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKHBhZ2Vfc2l6ZSAtIDEpOworCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZV9zaXplIC0gcGFnZV9vZmZzZXQsIGxlbik7CiAKIAkJbWVtY3B5KHBhZ2VzW25yXSArIHBhZ2Vfb2Zmc2V0LCBidWYsIHNpemUpOwogCkBAIC0zODQ5LDggKzM5NTksOSBAQAogCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCiAJaWYgKHJlZ3MpIHsKLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCQlpZiAoIShldmVudC0+YXR0ci5leGNsdWRlX2lkbGUgJiYgY3VycmVudC0+cGlkID09IDApKQorCQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAl9CiAKIAlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CkBAIC0zODU5LDYgKzM5NzAsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2Q7CisKKwkJaWYgKGh3Yy0+cmVtYWluaW5nKSB7CisJCQlpZiAoaHdjLT5yZW1haW5pbmcgPCAwKQorCQkJCXBlcmlvZCA9IDEwMDAwOworCQkJZWxzZQorCQkJCXBlcmlvZCA9IGh3Yy0+cmVtYWluaW5nOworCQkJaHdjLT5yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJfQorCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJa3RpbWVfdCByZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcik7CisJCWh3Yy0+cmVtYWluaW5nID0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKKworCQlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKKwl9Cit9CisKIC8qCiAgKiBTb2Z0d2FyZSBldmVudDogY3B1IHdhbGwgdGltZSBjbG9jawogICovCkBAIC0zODgxLDIyICs0MDI4LDE0IEBACiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAljcHVfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQpOwogfQogCkBAIC0zOTMzLDIyICs0MDcyLDE1IEBACiAJbm93ID0gZXZlbnQtPmN0eC0+dGltZTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAl0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBldmVudC0+Y3R4LT50aW1lKTsKIAogfQpAQCAtNDc4MSw5ICs0OTEzLDcgQEAKIAkgKiBXZSBkb250IGhhdmUgdG8gZGlzYWJsZSBOTUlzIC0gd2UgYXJlIG9ubHkgbG9va2luZyBhdAogCSAqIHRoZSBsaXN0LCBub3QgbWFuaXB1bGF0aW5nIGl0OgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmcGFyZW50X2N0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQljb250aW51ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAogCQlpZiAoIWV2ZW50LT5hdHRyLmluaGVyaXQpIHsKIAkJCWluaGVyaXRlZF9hbGwgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDA0YjNhODMuLjA0YTllOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTY5MywyMSArNjkzLDIyIEBACiAJLyogVGhlIHNuYXBzaG90IGRldmljZSBzaG91bGQgbm90IGJlIG9wZW5lZCB3aGlsZSB3ZSdyZSBydW5uaW5nICovCiAJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSwgLTEsIDApKSB7CiAJCWVycm9yID0gLUVCVVNZOworCQlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CiAJCWdvdG8gVW5sb2NrOwogCX0KIAogCXBtX3ByZXBhcmVfY29uc29sZSgpOwogCWVycm9yID0gcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9SRVNUT1JFX1BSRVBBUkUpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBjbG9zZV9maW5pc2g7CiAKIAllcnJvciA9IGNyZWF0ZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJcHJfZGVidWcoIlBNOiBQcmVwYXJpbmcgcHJvY2Vzc2VzIGZvciByZXN0b3JlLlxuIik7CiAJZXJyb3IgPSBwcmVwYXJlX3Byb2Nlc3NlcygpOwpAQCAtNzE5LDYgKzcyMCw3IEBACiAJcHJfZGVidWcoIlBNOiBSZWFkaW5nIGhpYmVybmF0aW9uIGltYWdlLlxuIik7CiAKIAllcnJvciA9IHN3c3VzcF9yZWFkKCZmbGFncyk7CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOwogCWlmICghZXJyb3IpCiAJCWhpYmVybmF0aW9uX3Jlc3RvcmUoZmxhZ3MgJiBTRl9QTEFURk9STV9NT0RFKTsKIApAQCAtNzM3LDYgKzczOSw5IEBACiAJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7CiAJcHJfZGVidWcoIlBNOiBSZXN1bWUgZnJvbSBkaXNrIGZhaWxlZC5cbiIpOwogCXJldHVybiBlcnJvcjsKK2Nsb3NlX2ZpbmlzaDoKKwlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CisJZ290byBGaW5pc2g7CiB9CiAKIGxhdGVfaW5pdGNhbGwoc29mdHdhcmVfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwppbmRleCAxN2Q4YmIxYS4uMjU1OTZlNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwpAQCAtMTksNyArMTksNyBAQAogICogVGhlIHRpbWUgaXQgdGFrZXMgaXMgc3lzdGVtLXNwZWNpZmljIHRob3VnaCwgc28gd2hlbiB3ZSB0ZXN0IHRoaXMKICAqIGR1cmluZyBzeXN0ZW0gYm9vdHVwIHdlIGFsbG93IGEgTE9UIG9mIHRpbWUuCiAgKi8KLSNkZWZpbmUgVEVTVF9TVVNQRU5EX1NFQ09ORFMJNQorI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwkxMAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXNwZW5kX3Rlc3Rfc3RhcnRfdGltZTsKIApAQCAtNDksNyArNDksOCBAQAogCSAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGlzc3Vlcy4gIFRoZSBzdGFjayBkdW1wIG9mIGEgV0FSTl9PTgogCSAqIGlzIG1vcmUgbGlrZWx5IHRvIGdldCB0aGUgcmlnaHQgYXR0ZW50aW9uIHRoYW4gYSBwcmludGsuLi4KIAkgKi8KLQlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwgIkNvbXBvbmVudDogJXNcbiIsIGxhYmVsKTsKKwlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwKKwkgICAgICJDb21wb25lbnQ6ICVzLCB0aW1lOiAldVxuIiwgbGFiZWwsIG1zZWMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggYjEwMWNkYy4uODkwZjZiMSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC0zMTQsNyArMzE0LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbTsKIAlpbnQgcmV0OwotCWludCBlcnJvciA9IDA7CiAJaW50IG5yX3BhZ2VzOwogCWludCBlcnIyOwogCXN0cnVjdCBiaW8gKmJpbzsKQEAgLTMyOSwyNiArMzI4LDI3IEBACiAJbnJfcGFnZXMgPSAwOwogCWJpbyA9IE5VTEw7CiAJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7Ci0JZG8geworCXdoaWxlICgxKSB7CiAJCXJldCA9IHNuYXBzaG90X3JlYWRfbmV4dChzbmFwc2hvdCwgUEFHRV9TSVpFKTsKLQkJaWYgKHJldCA+IDApIHsKLQkJCWVycm9yID0gc3dhcF93cml0ZV9wYWdlKGhhbmRsZSwgZGF0YV9vZigqc25hcHNob3QpLAotCQkJCQkJJmJpbyk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIShucl9wYWdlcyAlIG0pKQotCQkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7Ci0JCQlucl9wYWdlcysrOwotCQl9Ci0JfSB3aGlsZSAocmV0ID4gMCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQlyZXQgPSBzd2FwX3dyaXRlX3BhZ2UoaGFuZGxlLCBkYXRhX29mKCpzbmFwc2hvdCksICZiaW8pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWlmICghKG5yX3BhZ2VzICUgbSkpCisJCQlwcmludGsoIlxiXGJcYlxiJTNkJSUiLCBucl9wYWdlcyAvIG0pOworCQlucl9wYWdlcysrOworCX0KIAllcnIyID0gd2FpdF9vbl9iaW9fY2hhaW4oJmJpbyk7CiAJZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IGVycjI7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIXJldCkKKwkJcmV0ID0gZXJyMjsKKwlpZiAoIXJldCkKIAkJcHJpbnRrKCJcYlxiXGJcYmRvbmVcbiIpOworCWVsc2UKKwkJcHJpbnRrKCJcbiIpOwogCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3dyaXRlLCAiV3JvdGUiKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01MzYsNyArNTM2LDggQEAKIAkJc25hcHNob3Rfd3JpdGVfZmluYWxpemUoc25hcHNob3QpOwogCQlpZiAoIXNuYXBzaG90X2ltYWdlX2xvYWRlZChzbmFwc2hvdCkpCiAJCQllcnJvciA9IC1FTk9EQVRBOwotCX0KKwl9IGVsc2UKKwkJcHJpbnRrKCJcbiIpOwogCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTcyLDggKzU3Myw2IEBACiAJCWVycm9yID0gbG9hZF9pbWFnZSgmaGFuZGxlLCAmc25hcHNob3QsIGhlYWRlci0+cGFnZXMgLSAxKTsKIAlyZWxlYXNlX3N3YXBfcmVhZGVyKCZoYW5kbGUpOwogCi0JYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfUkVBRCk7Ci0KIAlpZiAoIWVycm9yKQogCQlwcl9kZWJ1ZygiUE06IEltYWdlIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCWVsc2UKQEAgLTU5Niw3ICs1OTUsNyBAQAogCQllcnJvciA9IGJpb19yZWFkX3BhZ2Uoc3dzdXNwX3Jlc3VtZV9ibG9jaywKIAkJCQkJc3dzdXNwX2hlYWRlciwgTlVMTCk7CiAJCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKKwkJCWdvdG8gcHV0OwogCiAJCWlmICghbWVtY21wKFNXU1VTUF9TSUcsIHN3c3VzcF9oZWFkZXItPnNpZywgMTApKSB7CiAJCQltZW1jcHkoc3dzdXNwX2hlYWRlci0+c2lnLCBzd3N1c3BfaGVhZGVyLT5vcmlnX3NpZywgMTApOwpAQCAtNjA0LDggKzYwMywxMCBAQAogCQkJZXJyb3IgPSBiaW9fd3JpdGVfcGFnZShzd3N1c3BfcmVzdW1lX2Jsb2NrLAogCQkJCQkJc3dzdXNwX2hlYWRlciwgTlVMTCk7CiAJCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVycm9yID0gLUVJTlZBTDsKIAkJfQorCitwdXQ6CiAJCWlmIChlcnJvcikKIAkJCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYsIEZNT0RFX1JFQUQpOwogCQllbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDM3YWM0NTQuLjQwMDE4MzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC00NiwyMiArNDYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCi1lbnVtIHJjdV9iYXJyaWVyIHsKLQlSQ1VfQkFSUklFUl9TVEQsCi0JUkNVX0JBUlJJRVJfQkgsCi0JUkNVX0JBUlJJRVJfU0NIRUQsCi19OworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrIiwgJnJjdV9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOworI2VuZGlmCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2hlYWQsIHJjdV9iYXJyaWVyX2hlYWQpID0ge05VTEx9Owotc3RhdGljIGF0b21pY190IHJjdV9iYXJyaWVyX2NwdV9jb3VudDsKLXN0YXRpYyBERUZJTkVfTVVURVgocmN1X2JhcnJpZXJfbXV0ZXgpOwotc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHJjdV9iYXJyaWVyX2NvbXBsZXRpb247CiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmUgX19yZWFkX21vc3RseTsKIAotc3RhdGljIGF0b21pY190IHJjdV9taWdyYXRlX3R5cGVfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgcmN1X21pZ3JhdGVfaGVhZFszXTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyY3VfbWlncmF0ZV93cSk7Ci0KIC8qCiAgKiBBd2FrZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3luY2hyb25pemVfcmN1KCkgaW5zdGFuY2Ugbm93IHRoYXQgYQogICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgpAQCAtMTY0LDEyOSArMTU3LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfYmgpOwogCi1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCi0JCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLX0KLQotLyoKLSAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQsIGFuZCBmcm9tIGNyb3NzLWNwdSBJUlEgY29udGV4dC4KLSAqLwotc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfZnVuYyh2b2lkICp0eXBlKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHJjdV9oZWFkICpoZWFkID0gJnBlcl9jcHUocmN1X2JhcnJpZXJfaGVhZCwgY3B1KTsKLQotCWF0b21pY19pbmMoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCk7Ci0Jc3dpdGNoICgoZW51bSByY3VfYmFycmllcil0eXBlKSB7Ci0JY2FzZSBSQ1VfQkFSUklFUl9TVEQ6Ci0JCWNhbGxfcmN1KGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBSQ1VfQkFSUklFUl9CSDoKLQkJY2FsbF9yY3VfYmgoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOwotCQlicmVhazsKLQljYXNlIFJDVV9CQVJSSUVSX1NDSEVEOgotCQljYWxsX3JjdV9zY2hlZChoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKHZvaWQpCi17Ci0Jd2FpdF9ldmVudChyY3VfbWlncmF0ZV93cSwgIWF0b21pY19yZWFkKCZyY3VfbWlncmF0ZV90eXBlX2NvdW50KSk7Ci0Jc21wX21iKCk7IC8qIEluIGNhc2Ugd2UgZGlkbid0IHNsZWVwLiAqLwotfQotCi0vKgotICogT3JjaGVzdHJhdGUgdGhlIHNwZWNpZmllZCB0eXBlIG9mIFJDVSBiYXJyaWVyLCB3YWl0aW5nIGZvciBhbGwKLSAqIFJDVSBjYWxsYmFja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRvIGNvbXBsZXRlLgotICovCi1zdGF0aWMgdm9pZCBfcmN1X2JhcnJpZXIoZW51bSByY3VfYmFycmllciB0eXBlKQotewotCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7Ci0JLyogVGFrZSBjcHVjb250cm9sIG11dGV4IHRvIHByb3RlY3QgYWdhaW5zdCBDUFUgaG90cGx1ZyAqLwotCW11dGV4X2xvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwotCS8qCi0JICogSW5pdGlhbGl6ZSByY3VfYmFycmllcl9jcHVfY291bnQgdG8gMSwgdGhlbiBpbnZva2UKLQkgKiByY3VfYmFycmllcl9mdW5jKCkgb24gZWFjaCBDUFUsIHNvIHRoYXQgZWFjaCBDUFUgYWxzbyBoYXMKLQkgKiBpbmNyZW1lbnRlZCByY3VfYmFycmllcl9jcHVfY291bnQuICBPbmx5IHRoZW4gaXMgaXQgc2FmZSB0bwotCSAqIGRlY3JlbWVudCByY3VfYmFycmllcl9jcHVfY291bnQgLS0gb3RoZXJ3aXNlIHRoZSBmaXJzdCBDUFUKLQkgKiBtaWdodCBjb21wbGV0ZSBpdHMgZ3JhY2UgcGVyaW9kIGJlZm9yZSBhbGwgb2YgdGhlIG90aGVyIENQVXMKLQkgKiBkaWQgdGhlaXIgaW5jcmVtZW50LCBjYXVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHRvbwotCSAqIGVhcmx5LgotCSAqLwotCWF0b21pY19zZXQoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCwgMSk7Ci0Jb25fZWFjaF9jcHUocmN1X2JhcnJpZXJfZnVuYywgKHZvaWQgKil0eXBlLCAxKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKLQkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwotCW11dGV4X3VubG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOwotCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7Ci19Ci0KLS8qKgotICogcmN1X2JhcnJpZXIgLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3UoKSBjYWxsYmFja3MgY29tcGxldGUuCi0gKi8KLXZvaWQgcmN1X2JhcnJpZXIodm9pZCkKLXsKLQlfcmN1X2JhcnJpZXIoUkNVX0JBUlJJRVJfU1REKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyKTsKLQotLyoqCi0gKiByY3VfYmFycmllcl9iaCAtIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCBjYWxsX3JjdV9iaCgpIGNhbGxiYWNrcyBjb21wbGV0ZS4KLSAqLwotdm9pZCByY3VfYmFycmllcl9iaCh2b2lkKQotewotCV9yY3VfYmFycmllcihSQ1VfQkFSUklFUl9CSCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9iaCk7Ci0KLS8qKgotICogcmN1X2JhcnJpZXJfc2NoZWQgLSBXYWl0IGZvciBpbi1mbGlnaHQgY2FsbF9yY3Vfc2NoZWQoKSBjYWxsYmFja3MuCi0gKi8KLXZvaWQgcmN1X2JhcnJpZXJfc2NoZWQodm9pZCkKLXsKLQlfcmN1X2JhcnJpZXIoUkNVX0JBUlJJRVJfU0NIRUQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfc2NoZWQpOwotCi1zdGF0aWMgdm9pZCByY3VfbWlncmF0ZV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKQotCQl3YWtlX3VwKCZyY3VfbWlncmF0ZV93cSk7Ci19Ci0KLWV4dGVybiBpbnQgcmN1X2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSk7Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7Ci0JcmN1X2NwdV9ub3RpZnkoc2VsZiwgYWN0aW9uLCBoY3B1KTsKLQlpZiAoYWN0aW9uID09IENQVV9EWUlORykgewotCQkvKgotCQkgKiBwcmVlbXB0X2Rpc2FibGUoKSBpbiBvbl9lYWNoX2NwdSgpIHByZXZlbnRzIHN0b3BfbWFjaGluZSgpLAotCQkgKiBzbyB3aGVuICJvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOyIKLQkJICogcmV0dXJucywgYWxsIG9ubGluZSBjcHVzIGhhdmUgcXVldWVkIHJjdV9iYXJyaWVyX2Z1bmMoKSwKLQkJICogYW5kIHRoZSBkZWFkIGNwdShpZiBpdCBleGlzdCkgcXVldWVzIHJjdV9taWdyYXRlX2NhbGxiYWNrKClzLgotCQkgKgotCQkgKiBUaGVzZSBjYWxsYmFja3MgZW5zdXJlIF9yY3VfYmFycmllcigpIHdhaXRzIGZvciBhbGwKLQkJICogUkNVIGNhbGxiYWNrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgdG8gY29tcGxldGUuCi0JCSAqLwotCQlhdG9taWNfc2V0KCZyY3VfbWlncmF0ZV90eXBlX2NvdW50LCAzKTsKLQkJY2FsbF9yY3VfYmgocmN1X21pZ3JhdGVfaGVhZCwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwotCQljYWxsX3JjdV9zY2hlZChyY3VfbWlncmF0ZV9oZWFkICsgMSwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwotCQljYWxsX3JjdShyY3VfbWlncmF0ZV9oZWFkICsgMiwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwotCX0gZWxzZSBpZiAoYWN0aW9uID09IENQVV9ET1dOX1BSRVBBUkUpIHsKLQkJLyogRG9uJ3QgbmVlZCB0byB3YWl0IHVudGlsIG5leHQgcmVtb3ZhbCBvcGVyYXRpb24uICovCi0JCS8qIHJjdV9taWdyYXRlX2hlYWQgaXMgcHJvdGVjdGVkIGJ5IGNwdV9hZGRfcmVtb3ZlX2xvY2sgKi8KLQkJd2FpdF9taWdyYXRlZF9jYWxsYmFja3MoKTsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX09LOworCXJldHVybiByY3VfY3B1X25vdGlmeShzZWxmLCBhY3Rpb24sIGhjcHUpOwogfQogCiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggMjMzNzY4Zi4uNjk3YzBhMCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC02MDYsOCArNjA2LDYgQEAKIAkubmFtZQkJPSAic2NoZWRfc3luYyIKIH07CiAKLWV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwotCiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzY2hlZF9leHBlZGl0ZWRfb3BzID0gewogCS5pbml0CQk9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKIAkuY2xlYW51cAk9IE5VTEwsCkBAIC02NTAsNyArNjQ4LDcgQEAKIAkJb2xkX3JwID0gcmN1X3RvcnR1cmVfY3VycmVudDsKIAkJcnAtPnJ0b3J0X21idGVzdCA9IDE7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihyY3VfdG9ydHVyZV9jdXJyZW50LCBycCk7Ci0JCXNtcF93bWIoKTsKKwkJc21wX3dtYigpOyAvKiBNb2RzIHRvIG9sZF9ycCBtdXN0IGZvbGxvdyByY3VfYXNzaWduX3BvaW50ZXIoKSAqLwogCQlpZiAob2xkX3JwKSB7CiAJCQlpID0gb2xkX3JwLT5ydG9ydF9waXBlX2NvdW50OwogCQkJaWYgKGkgPiBSQ1VfVE9SVFVSRV9QSVBFX0xFTikKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IDUyYjA2ZjYuLmYzMDc3YzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtNDksMTMgKzQ5LDYgQEAKIAogI2luY2x1ZGUgInJjdXRyZWUuaCIKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKLXN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQotCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrIiwgJnJjdV9sb2NrX2tleSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOwotI2VuZGlmCi0KIC8qIERhdGEgc3RydWN0dXJlcy4gKi8KIAogI2RlZmluZSBSQ1VfU1RBVEVfSU5JVElBTElaRVIobmFtZSkgeyBcCkBAIC02NiwxMCArNTksMTMgQEAKIAkJTlVNX1JDVV9MVkxfMiwgXAogCQlOVU1fUkNVX0xWTF8zLCAvKiA9PSBNQVhfUkNVX0xWTFMgKi8gXAogCX0sIFwKLQkuc2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQsIFwKKwkuc2lnbmFsZWQgPSBSQ1VfR1BfSURMRSwgXAogCS5ncG51bSA9IC0zMDAsIFwKIAkuY29tcGxldGVkID0gLTMwMCwgXAogCS5vbm9mZmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCisJLm9ycGhhbl9jYnNfbGlzdCA9IE5VTEwsIFwKKwkub3JwaGFuX2Nic190YWlsID0gJm5hbWUub3JwaGFuX2Nic19saXN0LCBcCisJLm9ycGhhbl9xbGVuID0gMCwgXAogCS5mcXNsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKIAkubl9mb3JjZV9xcyA9IDAsIFwKIAkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCkBAIC04MSwyNCArNzcsMTYgQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAotZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOwotc3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7Ci1zdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1zdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHZvaWQgX19yY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCi1zdGF0aWMgdm9pZCBfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKLXN0YXRpYyB2b2lkIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLAotCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSwKLQkJICAgICAgIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7Ci1zdGF0aWMgaW50IF9fcmN1X3BlbmRpbmcoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7Ci1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCQkgICBpbnQgcHJlZW1wdGFibGUpOwogCi0jaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCisgKiBwZXJtaXQgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdpdGhvdXQgaG9sZGluZyB0aGUgcm9vdCByY3Vfbm9kZQorICogc3RydWN0dXJlJ3MgLT5sb2NrLCBidXQgb2YgY291cnNlIHJlc3VsdHMgY2FuIGJlIHN1YmplY3QgdG8gY2hhbmdlLgorICovCitzdGF0aWMgaW50IHJjdV9ncF9pbl9wcm9ncmVzcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSAhPSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKTsKK30KIAogLyoKICAqIE5vdGUgYSBxdWllc2NlbnQgc3RhdGUuICBCZWNhdXNlIHdlIGRvIG5vdCBuZWVkIHRvIGtub3cKQEAgLTEzNyw2ICsxMjUsMTAgQEAKIHN0YXRpYyBpbnQgcWhpbWFyayA9IDEwMDAwOwkvKiBJZiB0aGlzIG1hbnkgcGVuZGluZywgaWdub3JlIGJsaW1pdC4gKi8KIHN0YXRpYyBpbnQgcWxvd21hcmsgPSAxMDA7CS8qIE9uY2Ugb25seSB0aGlzIG1hbnkgcGVuZGluZywgdXNlIGJsaW1pdC4gKi8KIAorbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOworCiBzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCk7CiBzdGF0aWMgaW50IHJjdV9wZW5kaW5nKGludCBjcHUpOwogCkBAIC0xNzMsOSArMTY1LDcgQEAKIHN0YXRpYyBpbnQKIGNwdV9uZWVkc19hbm90aGVyX2dwKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7Ci0JLyogQUNDRVNTX09OQ0UoKSBiZWNhdXNlIHdlIGFyZSBhY2Nlc3Npbmcgb3V0c2lkZSBvZiBsb2NrLiAqLwotCXJldHVybiAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICYmCi0JICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKTsKKwlyZXR1cm4gKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAmJiAhcmN1X2dwX2luX3Byb2dyZXNzKHJzcCk7CiB9CiAKIC8qCkBAIC0zNjksNyArMzU5LDcgQEAKIC8qCiAgKiBTbmFwc2hvdCB0aGUgc3BlY2lmaWVkIENQVSdzIGR5bnRpY2tzIGNvdW50ZXIgc28gdGhhdCB3ZSBjYW4gbGF0ZXIKICAqIGNyZWRpdCB0aGVtIHdpdGggYW4gaW1wbGljaXQgcXVpZXNjZW50IHN0YXRlLiAgUmV0dXJuIDEgaWYgdGhpcyBDUFUKLSAqIGlzIGFscmVhZHkgaW4gYSBxdWllc2NlbnQgc3RhdGUgY291cnRlc3kgb2YgZHludGlja3MgaWRsZSBtb2RlLgorICogaXMgaW4gZHludGlja3MgaWRsZSBtb2RlLCB3aGljaCBpcyBhbiBleHRlbmRlZCBxdWllc2NlbnQgc3RhdGUuCiAgKi8KIHN0YXRpYyBpbnQgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CkBAIC00NzUsMzAgKzQ2NSwzNCBAQAogCWxvbmcgZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKIAogCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWRlbHRhID0gamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbDsKLQlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8IHJzcC0+Z3BudW0gPT0gcnNwLT5jb21wbGV0ZWQpIHsKKwlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8ICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlyc3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOworCisJLyoKKwkgKiBOb3cgcmF0IG9uIGFueSB0YXNrcyB0aGF0IGdvdCBraWNrZWQgdXAgdG8gdGhlIHJvb3QgcmN1X25vZGUKKwkgKiBkdWUgdG8gQ1BVIG9mZmxpbmluZy4KKwkgKi8KKwlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJLyogT0ssIHRpbWUgdG8gcmF0IG9uIG91ciBidWRkeS4uLiAqLwogCiAJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVIHN0YWxsczoiKTsKLQlmb3IgKDsgcm5wX2N1ciA8IHJucF9lbmQ7IHJucF9jdXIrKykgeworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKIAkJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKLQkJaWYgKHJucF9jdXItPnFzbWFzayA9PSAwKQorCQlpZiAocm5wLT5xc21hc2sgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnBfY3VyLT5ncnBoaSAtIHJucF9jdXItPmdycGxvOyBjcHUrKykKLQkJCWlmIChybnBfY3VyLT5xc21hc2sgJiAoMVVMIDw8IGNwdSkpCi0JCQkJcHJpbnRrKCIgJWQiLCBybnBfY3VyLT5ncnBsbyArIGNwdSk7CisJCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucC0+Z3JwaGkgLSBybnAtPmdycGxvOyBjcHUrKykKKwkJCWlmIChybnAtPnFzbWFzayAmICgxVUwgPDwgY3B1KSkKKwkJCQlwcmludGsoIiAlZCIsIHJucC0+Z3JwbG8gKyBjcHUpOwogCX0KIAlwcmludGsoIiAoZGV0ZWN0ZWQgYnkgJWQsIHQ9JWxkIGppZmZpZXMpXG4iLAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIChsb25nKShqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCkpOwpAQCAtNTM3LDggKzUzMSw3IEBACiAJCS8qIFdlIGhhdmVuJ3QgY2hlY2tlZCBpbiwgc28gZ28gZHVtcCBzdGFjay4gKi8KIAkJcHJpbnRfY3B1X3N0YWxsKHJzcCk7CiAKLQl9IGVsc2UgaWYgKHJzcC0+Z3BudW0gIT0gcnNwLT5jb21wbGV0ZWQgJiYKLQkJICAgZGVsdGEgPj0gUkNVX1NUQUxMX1JBVF9ERUxBWSkgeworCX0gZWxzZSBpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYgZGVsdGEgPj0gUkNVX1NUQUxMX1JBVF9ERUxBWSkgewogCiAJCS8qIFRoZXkgaGFkIHR3byB0aW1lIHVuaXRzIHRvIGR1bXAgc3RhY2ssIHNvIGNvbXBsYWluLiAqLwogCQlwcmludF9vdGhlcl9jcHVfc3RhbGwocnNwKTsKQEAgLTYxNyw5ICs2MTAsMTUgQEAKIAlub3RlX25ld19ncG51bShyc3AsIHJkcCk7CiAKIAkvKgotCSAqIEJlY2F1c2Ugd2UgYXJlIGZpcnN0LCB3ZSBrbm93IHRoYXQgYWxsIG91ciBjYWxsYmFja3Mgd2lsbAotCSAqIGJlIGNvdmVyZWQgYnkgdGhpcyB1cGNvbWluZyBncmFjZSBwZXJpb2QsIGV2ZW4gdGhlIG9uZXMKLQkgKiB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBhcmJpdHJhcmlseSByZWNlbnRseS4KKwkgKiBCZWNhdXNlIHRoaXMgQ1BVIGp1c3Qgbm93IHN0YXJ0ZWQgdGhlIG5ldyBncmFjZSBwZXJpb2QsIHdlIGtub3cKKwkgKiB0aGF0IGFsbCBvZiBpdHMgY2FsbGJhY2tzIHdpbGwgYmUgY292ZXJlZCBieSB0aGlzIHVwY29taW5nIGdyYWNlCisJICogcGVyaW9kLCBldmVuIHRoZSBvbmVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIGFyYml0cmFyaWx5IHJlY2VudGx5LgorCSAqIFRoZXJlZm9yZSwgYWR2YW5jZSBhbGwgb3V0c3RhbmRpbmcgY2FsbGJhY2tzIHRvIFJDVV9XQUlUX1RBSUwuCisJICoKKwkgKiBPdGhlciBDUFVzIGNhbm5vdCBiZSBzdXJlIGV4YWN0bHkgd2hlbiB0aGUgZ3JhY2UgcGVyaW9kIHN0YXJ0ZWQuCisJICogVGhlcmVmb3JlLCB0aGVpciByZWNlbnRseSByZWdpc3RlcmVkIGNhbGxiYWNrcyBtdXN0IHBhc3MgdGhyb3VnaAorCSAqIGFuIGFkZGl0aW9uYWwgUkNVX05FWFRfUkVBRFkgc3RhZ2UsIHNvIHRoYXQgdGhleSB3aWxsIGJlIGhhbmRsZWQKKwkgKiBieSB0aGUgbmV4dCBSQ1UgZ3JhY2UgcGVyaW9kLgogCSAqLwogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKIAlyZHAtPm54dHRhaWxbUkNVX1dBSVRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CkBAIC02NTcsMTUgKzY1NiwxOCBAQAogCSAqIG9uZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgQ1BVLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlCiAJICogaXJxcyBkaXNhYmxlZC4KIAkgKi8KLQlmb3IgKHJucCA9ICZyc3AtPm5vZGVbMF07IHJucCA8ICZyc3AtPm5vZGVbTlVNX1JDVV9OT0RFU107IHJucCsrKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKKwkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlyY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHJucCk7CiAJCXJucC0+cXNtYXNrID0gcm5wLT5xc21hc2tpbml0OwogCQlybnAtPmdwbnVtID0gcnNwLT5ncG51bTsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCX0KIAorCXJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIG5vdyBPSy4gKi8KKwlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKQEAgLTcwMywxMCArNzA1LDExIEBACiAgKiBob2xkIHJucC0+bG9jaywgYXMgcmVxdWlyZWQgYnkgcmN1X3N0YXJ0X2dwKCksIHdoaWNoIHdpbGwgcmVsZWFzZSBpdC4KICAqLwogc3RhdGljIHZvaWQgY3B1X3F1aWV0X21za19maW5pc2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotCV9fcmVsZWFzZXMocm5wLT5sb2NrKQorCV9fcmVsZWFzZXMocmN1X2dldF9yb290KHJzcCktPmxvY2spCiB7Ci0JV0FSTl9PTl9PTkNFKHJzcC0+Y29tcGxldGVkID09IHJzcC0+Z3BudW0pOworCVdBUk5fT05fT05DRSghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpOwogCXJzcC0+Y29tcGxldGVkID0gcnNwLT5ncG51bTsKKwlyc3AtPnNpZ25hbGVkID0gUkNVX0dQX0lETEU7CiAJcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CiAJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm9vdCBub2RlJ3Mgcm5wLT5sb2NrLiAqLwogfQpAQCAtODQyLDE3ICs4NDUsNjMgQEAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKKyAqIE1vdmUgYSBkeWluZyBDUFUncyBSQ1UgY2FsbGJhY2tzIHRvIHRoZSAtPm9ycGhhbl9jYnNfbGlzdCBmb3IgdGhlCisgKiBzcGVjaWZpZWQgZmxhdm9yIG9mIFJDVS4gIFRoZSBjYWxsYmFja3Mgd2lsbCBiZSBhZG9wdGVkIGJ5IHRoZSBuZXh0CisgKiBfcmN1X2JhcnJpZXIoKSBpbnZvY2F0aW9uIG9yIGJ5IHRoZSBDUFVfREVBRCBub3RpZmllciwgd2hpY2hldmVyCisgKiBjb21lcyBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBpbnZva2VkIGZyb20gdGhlIENQVV9EWUlORyBub3RpZmllciwKKyAqIGlycXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2Uoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCWludCBpOworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCWlmIChyZHAtPm54dGxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuOyAgLyogaXJxcyBkaXNhYmxlZCwgc28gY29tcGFyaXNvbiBpcyBzdGFibGUuICovCisJc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJKnJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHRsaXN0OworCXJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOworCXJkcC0+bnh0bGlzdCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IFJDVV9ORVhUX1NJWkU7IGkrKykKKwkJcmRwLT5ueHR0YWlsW2ldID0gJnJkcC0+bnh0bGlzdDsKKwlyc3AtPm9ycGhhbl9xbGVuICs9IHJkcC0+cWxlbjsKKwlyZHAtPnFsZW4gPSAwOworCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KK30KKworLyoKKyAqIEFkb3B0IHByZXZpb3VzbHkgb3JwaGFuZWQgUkNVIGNhbGxiYWNrcy4KKyAqLworc3RhdGljIHZvaWQgcmN1X2Fkb3B0X29ycGhhbl9jYnMoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJjdV9kYXRhICpyZHA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOworCWlmIChyc3AtPm9ycGhhbl9jYnNfbGlzdCA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJKnJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJzcC0+b3JwaGFuX2Nic19saXN0OworCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJzcC0+b3JwaGFuX2Nic190YWlsOworCXJkcC0+cWxlbiArPSByc3AtPm9ycGhhbl9xbGVuOworCXJzcC0+b3JwaGFuX2Nic19saXN0ID0gTlVMTDsKKwlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9ICZyc3AtPm9ycGhhbl9jYnNfbGlzdDsKKwlyc3AtPm9ycGhhbl9xbGVuID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworfQorCisvKgogICogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgYml0bWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeQogICogYW5kIG1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBvdXRnb2luZyBDUFUgdG8gdGhlIGN1cnJlbnQgb25lLgogICovCiBzdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGxhc3Rjb21wOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW2NwdV07Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHBfbWU7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuICovCkBAIC04NjgsMzkgKzkxNywyOSBAQAogCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQkJYnJlYWs7CiAJCX0KLQkJcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgYSB0YXNrIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwKKwkJICogYW5kIGlmIGFsbCBDUFVzIGhhdmUgY2hlY2tlZCBpbiwgd2UgbmVlZCB0byBwcm9wYWdhdGUKKwkJICogdGhlIHF1aWVzY2VudCBzdGF0ZSB1cCB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAgQnV0IHRoYXQKKwkJICogaXMgaW5jb252ZW5pZW50IGF0IHRoZSBtb21lbnQgZHVlIHRvIGRlYWRsb2NrIGlzc3VlcyBpZgorCQkgKiB0aGlzIHNob3VsZCBlbmQgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLiAgU28gc2V0IHRoZQorCQkgKiBvZmZsaW5lZCBDUFUncyBiaXQgaW4gLT5xc21hc2sgaW4gb3JkZXIgdG8gZm9yY2UgdGhlCisJCSAqIG5leHQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaW52b2NhdGlvbiB0byBjbGVhbiB1cCB0aGlzCisJCSAqIG1lc3MgaW4gYSBkZWFkbG9jay1mcmVlIG1hbm5lci4KKwkJICovCisJCWlmIChyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApICYmICFybnAtPnFzbWFzaykKKwkJCXJucC0+cXNtYXNrIHw9IG1hc2s7CisKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCk7CiAJbGFzdGNvbXAgPSByc3AtPmNvbXBsZXRlZDsKIAotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCi0JLyoKLQkgKiBNb3ZlIGNhbGxiYWNrcyBmcm9tIHRoZSBvdXRnb2luZyBDUFUgdG8gdGhlIHJ1bm5pbmcgQ1BVLgotCSAqIE5vdGUgdGhhdCB0aGUgb3V0Z29pbmcgQ1BVIGlzIG5vdyBxdWlzY2VudCwgc28gaXQgaXMgbm93Ci0JICogKHVuY2hhcmFjdGVyaXN0aWNhbGx5KSBzYWZlIHRvIGFjY2VzcyBpdHMgcmN1X2RhdGEgc3RydWN0dXJlLgotCSAqIE5vdGUgYWxzbyB0aGF0IHdlIG11c3QgY2FyZWZ1bGx5IHJldGFpbiB0aGUgb3JkZXIgb2YgdGhlCi0JICogb3V0Z29pbmcgQ1BVJ3MgY2FsbGJhY2tzIGluIG9yZGVyIGZvciByY3VfYmFycmllcigpIHRvIHdvcmsKLQkgKiBjb3JyZWN0bHkuICBGaW5hbGx5LCBub3RlIHRoYXQgd2Ugc3RhcnQgYWxsIHRoZSBjYWxsYmFja3MKLQkgKiBhZnJlc2gsIGV2ZW4gdGhvc2UgdGhhdCBoYXZlIHBhc3NlZCB0aHJvdWdoIGEgZ3JhY2UgcGVyaW9kCi0JICogYW5kIGFyZSB0aGVyZWZvcmUgcmVhZHkgdG8gaW52b2tlLiAgVGhlIHRoZW9yeSBpcyB0aGF0IGhvdHBsdWcKLQkgKiBldmVudHMgYXJlIHJhcmUsIGFuZCB0aGF0IGlmIHRoZXkgYXJlIGZyZXF1ZW50IGVub3VnaCB0bwotCSAqIGluZGVmaW5pdGVseSBkZWxheSBjYWxsYmFja3MsIHlvdSBoYXZlIGZhciB3b3JzZSB0aGluZ3MgdG8KLQkgKiBiZSB3b3JyeWluZyBhYm91dC4KLQkgKi8KLQlyZHBfbWUgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCWlmIChyZHAtPm54dGxpc3QgIT0gTlVMTCkgewotCQkqcmRwX21lLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHRsaXN0OwotCQlyZHBfbWUtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07Ci0JCXJkcC0+bnh0bGlzdCA9IE5VTEw7Ci0JCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCi0JCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OwotCQlyZHBfbWUtPnFsZW4gKz0gcmRwLT5xbGVuOwotCQlyZHAtPnFsZW4gPSAwOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmN1X2Fkb3B0X29ycGhhbl9jYnMocnNwKTsKIH0KIAogLyoKQEAgLTkxOCw2ICs5NTcsMTQgQEAKIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCitzdGF0aWMgdm9pZCByY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKworc3RhdGljIHZvaWQgcmN1X2Fkb3B0X29ycGhhbl9jYnMoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCiBzdGF0aWMgdm9pZCByY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSkKIHsKIH0KQEAgLTkyOCw3ICs5NzUsNyBAQAogICogSW52b2tlIGFueSBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBtYWRlIGl0IHRvIHRoZSBlbmQgb2YgdGhlaXIgZ3JhY2UKICAqIHBlcmlvZC4gIFRob3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC0+YmxpbWl0LgogICovCi1zdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3VfaGVhZCAqbmV4dCwgKmxpc3QsICoqdGFpbDsKQEAgLTk4MSw2ICsxMDI4LDEzIEBACiAJaWYgKHJkcC0+YmxpbWl0ID09IExPTkdfTUFYICYmIHJkcC0+cWxlbiA8PSBxbG93bWFyaykKIAkJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAKKwkvKiBSZXNldCAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgdHJpZ2dlciBpZiBlbm91Z2ggQ0JzIGhhdmUgZHJhaW5lZC4gKi8KKwlpZiAocmRwLT5xbGVuID09IDAgJiYgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICE9IDApIHsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJfSBlbHNlIGlmIChyZHAtPnFsZW4gPCByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgLSBxaGltYXJrKQorCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBSZS1yYWlzZSB0aGUgUkNVIHNvZnRpcnEgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyByZW1haW5pbmcuICovCkBAIC0xMDUwLDMzICsxMTA0LDMyIEBACiAJaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9jdXIgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2VuZCA9ICZyc3AtPm5vZGVbTlVNX1JDVV9OT0RFU107CisJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKLQlmb3IgKDsgcm5wX2N1ciA8IHJucF9lbmQ7IHJucF9jdXIrKykgeworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKIAkJbWFzayA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJzcC0+Y29tcGxldGVkICE9IGxhc3Rjb21wKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCWlmIChybnBfY3VyLT5xc21hc2sgPT0gMCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQlpZiAocm5wLT5xc21hc2sgPT0gMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQotCQljcHUgPSBybnBfY3VyLT5ncnBsbzsKKwkJY3B1ID0gcm5wLT5ncnBsbzsKIAkJYml0ID0gMTsKLQkJZm9yICg7IGNwdSA8PSBybnBfY3VyLT5ncnBoaTsgY3B1KyssIGJpdCA8PD0gMSkgewotCQkJaWYgKChybnBfY3VyLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKKwkJZm9yICg7IGNwdSA8PSBybnAtPmdycGhpOyBjcHUrKywgYml0IDw8PSAxKSB7CisJCQlpZiAoKHJucC0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCiAJCQkJbWFzayB8PSBiaXQ7CiAJCX0KIAkJaWYgKG1hc2sgIT0gMCAmJiByc3AtPmNvbXBsZXRlZCA9PSBsYXN0Y29tcCkgewogCi0JCQkvKiBjcHVfcXVpZXRfbXNrKCkgcmVsZWFzZXMgcm5wX2N1ci0+bG9jay4gKi8KLQkJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnBfY3VyLCBmbGFncyk7CisJCQkvKiBjcHVfcXVpZXRfbXNrKCkgcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCQkJY3B1X3F1aWV0X21zayhtYXNrLCByc3AsIHJucCwgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDkyLDcgKzExNDUsNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAJdTggc2lnbmFsZWQ7CiAKLQlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pKQorCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpCiAJCXJldHVybjsgIC8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcywgbm90aGluZyB0byBmb3JjZS4gKi8KIAlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKSkgewogCQlyc3AtPm5fZm9yY2VfcXNfbGgrKzsgLyogSW5leGFjdCwgY2FuIGxvc2UgY291bnRzLiAgVG91Z2ghICovCkBAIC0xMTEzLDkgKzExNjYsMTAgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CiAJc3dpdGNoIChzaWduYWxlZCkgeworCWNhc2UgUkNVX0dQX0lETEU6CiAJY2FzZSBSQ1VfR1BfSU5JVDoKIAotCQlicmVhazsgLyogZ3JhY2UgcGVyaW9kIHN0aWxsIGluaXRpYWxpemluZywgaWdub3JlLiAqLworCQlicmVhazsgLyogZ3JhY2UgcGVyaW9kIGlkbGUgb3IgaW5pdGlhbGl6aW5nLCBpZ25vcmUuICovCiAKIAljYXNlIFJDVV9TQVZFX0RZTlRJQ0s6CiAKQEAgLTExMjksNyArMTE4Myw4IEBACiAKIAkJLyogVXBkYXRlIHN0YXRlLCByZWNvcmQgY29tcGxldGlvbiBjb3VudGVyLiAqLwogCQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JCWlmIChsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCkgeworCQlpZiAobGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQgJiYKKwkJICAgIHJzcC0+c2lnbmFsZWQgPT0gUkNVX1NBVkVfRFlOVElDSykgewogCQkJcnNwLT5zaWduYWxlZCA9IFJDVV9GT1JDRV9RUzsKIAkJCWR5bnRpY2tfcmVjb3JkX2NvbXBsZXRlZChyc3AsIGxhc3Rjb21wKTsKIAkJfQpAQCAtMTE5NSw3ICsxMjUwLDcgQEAKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlYWR5LCBpbnZva2UgdGhlbS4gKi8KLQlyY3VfZG9fYmF0Y2gocmRwKTsKKwlyY3VfZG9fYmF0Y2gocnNwLCByZHApOwogfQogCiAvKgpAQCAtMTI1MSw3ICsxMzA2LDcgQEAKIAlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSAmaGVhZC0+bmV4dDsKIAogCS8qIFN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZCBpZiBvbmUgbm90IGFscmVhZHkgc3RhcnRlZC4gKi8KLQlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pKSB7CisJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQl1bnNpZ25lZCBsb25nIG5lc3RmbGFnOwogCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CiAKQEAgLTEyNTksMTAgKzEzMTQsMjAgQEAKIAkJcmN1X3N0YXJ0X2dwKHJzcCwgbmVzdGZsYWcpOyAgLyogcmVsZWFzZXMgcm5wX3Jvb3QtPmxvY2suICovCiAJfQogCi0JLyogRm9yY2UgdGhlIGdyYWNlIHBlcmlvZCBpZiB0b28gbWFueSBjYWxsYmFja3Mgb3IgdG9vIGxvbmcgd2FpdGluZy4gKi8KLQlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiBxaGltYXJrKSkgeworCS8qCisJICogRm9yY2UgdGhlIGdyYWNlIHBlcmlvZCBpZiB0b28gbWFueSBjYWxsYmFja3Mgb3IgdG9vIGxvbmcgd2FpdGluZy4KKwkgKiBFbmZvcmNlIGh5c3RlcmVzaXMsIGFuZCBkb24ndCBpbnZva2UgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkKKwkgKiBpZiBzb21lIG90aGVyIENQVSBoYXMgcmVjZW50bHkgZG9uZSBzby4gIEFsc28sIGRvbid0IGJvdGhlcgorCSAqIGludm9raW5nIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGlmIHRoZSBuZXdseSBlbnF1ZXVlZCBjYWxsYmFjaworCSAqIGlzIHRoZSBvbmx5IG9uZSB3YWl0aW5nIGZvciBhIGdyYWNlIHBlcmlvZCB0byBjb21wbGV0ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgKyBxaGltYXJrKSkgewogCQlyZHAtPmJsaW1pdCA9IExPTkdfTUFYOwotCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKKwkJaWYgKHJzcC0+bl9mb3JjZV9xcyA9PSByZHAtPm5fZm9yY2VfcXNfc25hcCAmJgorCQkgICAgKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAhPSBoZWFkKQorCQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOworCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CiAJfSBlbHNlIGlmICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTMzMSw3ICsxMzk2LDcgQEAKIAl9CiAKIAkvKiBIYXMgYW4gUkNVIEdQIGdvbmUgbG9uZyBlbm91Z2ggdG8gc2VuZCByZXNjaGVkIElQSXMgJmM/ICovCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSAhPSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSAmJgorCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJgogCSAgICAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApKSB7CiAJCXJkcC0+bl9ycF9uZWVkX2ZxcysrOwogCQlyZXR1cm4gMTsKQEAgLTEzNjgsNiArMTQzMyw4MiBAQAogCSAgICAgICByY3VfcHJlZW1wdF9uZWVkc19jcHUoY3B1KTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfaGVhZCwgcmN1X2JhcnJpZXJfaGVhZCkgPSB7TlVMTH07CitzdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChyY3VfYmFycmllcl9tdXRleCk7CitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gcmN1X2JhcnJpZXJfY29tcGxldGlvbjsKKworc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQorCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgZnJvbSBjcm9zcy1jcHUgSVJRIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2Z1bmModm9pZCAqdHlwZSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHJjdV9iYXJyaWVyX2hlYWQsIGNwdSk7CisJdm9pZCAoKmNhbGxfcmN1X2Z1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKKwkJCSAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKKworCWF0b21pY19pbmMoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCk7CisJY2FsbF9yY3VfZnVuYyA9IHR5cGU7CisJY2FsbF9yY3VfZnVuYyhoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Cit9CisKKy8qCisgKiBPcmNoZXN0cmF0ZSB0aGUgc3BlY2lmaWVkIHR5cGUgb2YgUkNVIGJhcnJpZXIsIHdhaXRpbmcgZm9yIGFsbAorICogUkNVIGNhbGxiYWNrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgdG8gY29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkIF9yY3VfYmFycmllcihzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkgdm9pZCAoKmNhbGxfcmN1X2Z1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKSkKK3sKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCS8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi8KKwltdXRleF9sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKKwkvKgorCSAqIEluaXRpYWxpemUgcmN1X2JhcnJpZXJfY3B1X2NvdW50IHRvIDEsIHRoZW4gaW52b2tlCisJICogcmN1X2JhcnJpZXJfZnVuYygpIG9uIGVhY2ggQ1BVLCBzbyB0aGF0IGVhY2ggQ1BVIGFsc28gaGFzCisJICogaW5jcmVtZW50ZWQgcmN1X2JhcnJpZXJfY3B1X2NvdW50LiAgT25seSB0aGVuIGlzIGl0IHNhZmUgdG8KKwkgKiBkZWNyZW1lbnQgcmN1X2JhcnJpZXJfY3B1X2NvdW50IC0tIG90aGVyd2lzZSB0aGUgZmlyc3QgQ1BVCisJICogbWlnaHQgY29tcGxldGUgaXRzIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWxsIG9mIHRoZSBvdGhlciBDUFVzCisJICogZGlkIHRoZWlyIGluY3JlbWVudCwgY2F1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB0b28KKwkgKiBlYXJseS4KKwkgKi8KKwlhdG9taWNfc2V0KCZyY3VfYmFycmllcl9jcHVfY291bnQsIDEpOworCXByZWVtcHRfZGlzYWJsZSgpOyAvKiBzdG9wIENQVV9EWUlORyBmcm9tIGZpbGxpbmcgb3JwaGFuX2Nic19saXN0ICovCisJcmN1X2Fkb3B0X29ycGhhbl9jYnMocnNwKTsKKwlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKWNhbGxfcmN1X2Z1bmMsIDEpOworCXByZWVtcHRfZW5hYmxlKCk7IC8qIENQVV9EWUlORyBjYW4gYWdhaW4gZmlsbCBvcnBoYW5fY2JzX2xpc3QgKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKKwkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCW11dGV4X3VubG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOworfQorCisvKioKKyAqIHJjdV9iYXJyaWVyX2JoIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1X2JoKCkgY2FsbGJhY2tzIGNvbXBsZXRlLgorICovCit2b2lkIHJjdV9iYXJyaWVyX2JoKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3VfYmhfc3RhdGUsIGNhbGxfcmN1X2JoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX2JoKTsKKworLyoqCisgKiByY3VfYmFycmllcl9zY2hlZCAtIFdhaXQgZm9yIGluLWZsaWdodCBjYWxsX3JjdV9zY2hlZCgpIGNhbGxiYWNrcy4KKyAqLwordm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKQoreworCV9yY3VfYmFycmllcigmcmN1X3NjaGVkX3N0YXRlLCBjYWxsX3JjdV9zY2hlZCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7CisKIC8qCiAgKiBEbyBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgYSBDUFUncyBwZXItQ1BVIFJDVSBkYXRhLgogICovCkBAIC0xNDE4LDYgKzE1NTksOCBAQAogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KIAlyZHAtPnByZWVtcHRhYmxlID0gcHJlZW1wdGFibGU7CiAJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IGxhc3Rjb21wIC0gMTsKKwlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOworCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKQEAgLTE0NjQsNiArMTYwNywyMiBAQAogCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgogCQlyY3Vfb25saW5lX2NwdShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9EWUlORzoKKwljYXNlIENQVV9EWUlOR19GUk9aRU46CisJCS8qCisJCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIF9yY3VfYmFycmllcigpIHByZXZlbnRzIHN0b3BfbWFjaGluZSgpLAorCQkgKiBzbyB3aGVuICJvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOyIKKwkJICogcmV0dXJucywgYWxsIG9ubGluZSBjcHVzIGhhdmUgcXVldWVkIHJjdV9iYXJyaWVyX2Z1bmMoKS4KKwkJICogVGhlIGR5aW5nIENQVSBjbGVhcnMgaXRzIGNwdV9vbmxpbmVfbWFzayBiaXQgYW5kCisJCSAqIG1vdmVzIGFsbCBvZiBpdHMgUkNVIGNhbGxiYWNrcyB0byAtPm9ycGhhbl9jYnNfbGlzdAorCQkgKiBpbiB0aGUgY29udGV4dCBvZiBzdG9wX21hY2hpbmUoKSwgc28gc3Vic2VxdWVudCBjYWxscworCQkgKiB0byBfcmN1X2JhcnJpZXIoKSB3aWxsIGFkb3B0IHRoZXNlIGNhbGxiYWNrcyBhbmQgb25seQorCQkgKiB0aGVuIHF1ZXVlIHJjdV9iYXJyaWVyX2Z1bmMoKSBvbiBhbGwgcmVtYWluaW5nIENQVXMuCisJCSAqLworCQlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3VfYmhfc3RhdGUpOworCQlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3Vfc2NoZWRfc3RhdGUpOworCQlyY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2UoKTsKKwkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKQEAgLTE1MjYsNyArMTY4NSw4IEBACiAJCWNwdXN0cmlkZSAqPSByc3AtPmxldmVsc3ByZWFkW2ldOwogCQlybnAgPSByc3AtPmxldmVsW2ldOwogCQlmb3IgKGogPSAwOyBqIDwgcnNwLT5sZXZlbGNudFtpXTsgaisrLCBybnArKykgewotCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CisJCQlpZiAocm5wICE9IHJjdV9nZXRfcm9vdChyc3ApKQorCQkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOwogCQkJcm5wLT5ncG51bSA9IDA7CiAJCQlybnAtPnFzbWFzayA9IDA7CiAJCQlybnAtPnFzbWFza2luaXQgPSAwOwpAQCAtMTU0OSw2ICsxNzA5LDcgQEAKIAkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbMV0pOwogCQl9CiAJfQorCXNwaW5fbG9ja19pbml0KCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jayk7CiB9CiAKIC8qCkBAIC0xNTU4LDYgKzE3MTksMTAgQEAKICAqLwogI2RlZmluZSBSQ1VfSU5JVF9GTEFWT1IocnNwLCByY3VfZGF0YSkgXAogZG8geyBcCisJaW50IGk7IFwKKwlpbnQgajsgXAorCXN0cnVjdCByY3Vfbm9kZSAqcm5wOyBcCisJXAogCXJjdV9pbml0X29uZShyc3ApOyBcCiAJcm5wID0gKHJzcCktPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOyBcCiAJaiA9IDA7IFwKQEAgLTE1NzAsMzEgKzE3MzUsOCBAQAogCX0gXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCi0KLXZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQotewotCWludCBpOwkJCS8qIEFsbCB1c2VkIGJ5IFJDVV9JTklUX0ZMQVZPUigpLiAqLwotCWludCBqOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwotCi0JUkNVX0lOSVRfRkxBVk9SKCZyY3VfcHJlZW1wdF9zdGF0ZSwgcmN1X3ByZWVtcHRfZGF0YSk7Ci19Ci0KLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCi12b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKLXsKLX0KLQotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCiB2b2lkIF9faW5pdCBfX3JjdV9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CQkJLyogQWxsIHVzZWQgYnkgUkNVX0lOSVRfRkxBVk9SKCkuICovCi0JaW50IGo7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnA7Ci0KIAlyY3VfYm9vdHVwX2Fubm91bmNlKCk7CiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAlwcmludGsoS0VSTl9JTkZPICJSQ1UtYmFzZWQgZGV0ZWN0aW9uIG9mIHN0YWxsZWQgQ1BVcyBpcyBlbmFibGVkLlxuIik7CkBAIC0xNjA1LDYgKzE3NDcsNCBAQAogCW9wZW5fc29mdGlycShSQ1VfU09GVElSUSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKTsKIH0KIAotbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOworI2luY2x1ZGUgInJjdXRyZWVfcGx1Z2luLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCA4ZTgyODdhLi4xODk5MDIzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTQ4LDE0ICs0OCwxNCBAQAogI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX1NRCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDIKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgICgoKE5SX0NQVVMpICsgUkNVX0ZBTk9VVCAtIDEpIC8gUkNVX0ZBTk9VVCkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKE5SX0NQVVMpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCiAjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfQ1VCRQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAzCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoKChOUl9DUFVTKSArIFJDVV9GQU5PVVRfU1EgLSAxKSAvIFJDVV9GQU5PVVRfU1EpCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoKChOUl9DUFVTKSArIChSQ1VfRkFOT1VUKSAtIDEpIC8gKFJDVV9GQU5PVVQpKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfU1EpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVCkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIE5SX0NQVVMKICNlbHNlCiAjIGVycm9yICJDT05GSUdfUkNVX0ZBTk9VVCBpbnN1ZmZpY2llbnQgZm9yIE5SX0NQVVMiCkBAIC03OSwxNSArNzksMjEgQEAKICAqIERlZmluaXRpb24gZm9yIG5vZGUgd2l0aGluIHRoZSBSQ1UgZ3JhY2UtcGVyaW9kLWRldGVjdGlvbiBoaWVyYXJjaHkuCiAgKi8KIHN0cnVjdCByY3Vfbm9kZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgbG9jazsJLyogUm9vdCByY3Vfbm9kZSdzIGxvY2sgcHJvdGVjdHMgc29tZSAqLworCQkJCS8qICByY3Vfc3RhdGUgZmllbGRzIGFzIHdlbGwgYXMgZm9sbG93aW5nLiAqLwogCWxvbmcJZ3BudW07CQkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFzazsJLyogQ1BVcyBvciBncm91cHMgdGhhdCBuZWVkIHRvIHN3aXRjaCBpbiAqLwogCQkJCS8qICBvcmRlciBmb3IgY3VycmVudCBncmFjZSBwZXJpb2QgdG8gcHJvY2VlZC4qLworCQkJCS8qICBJbiBsZWFmIHJjdV9ub2RlLCBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byAqLworCQkJCS8qICBhbiByY3VfZGF0YSBzdHJ1Y3R1cmUsIG90aGVyd2lzZSwgZWFjaCAqLworCQkJCS8qICBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGlsZCByY3Vfbm9kZSAqLworCQkJCS8qICBzdHJ1Y3R1cmUuICovCiAJdW5zaWduZWQgbG9uZyBxc21hc2tpbml0OwogCQkJCS8qIFBlci1HUCBpbml0aWFsaXphdGlvbiBmb3IgcXNtYXNrLiAqLwogCXVuc2lnbmVkIGxvbmcgZ3JwbWFzazsJLyogTWFzayB0byBhcHBseSB0byBwYXJlbnQgcXNtYXNrLiAqLworCQkJCS8qICBPbmx5IG9uZSBiaXQgd2lsbCBiZSBzZXQgaW4gdGhpcyBtYXNrLiAqLwogCWludAlncnBsbzsJCS8qIGxvd2VzdC1udW1iZXJlZCBDUFUgb3IgZ3JvdXAgaGVyZS4gKi8KIAlpbnQJZ3JwaGk7CQkvKiBoaWdoZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLwogCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCkBAIC05NSw4ICsxMDEsMjMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnBhcmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrZWRfdGFza3NbMl07CiAJCQkJLyogVGFza3MgYmxvY2tlZCBpbiBSQ1UgcmVhZC1zaWRlIGNyaXRzZWN0LiAqLworCQkJCS8qICBHcmFjZSBwZXJpb2QgbnVtYmVyICgtPmdwbnVtKSB4IGJsb2NrZWQgKi8KKwkJCQkvKiAgYnkgdGFza3Mgb24gdGhlICh4ICYgMHgxKSBlbGVtZW50IG9mIHRoZSAqLworCQkJCS8qICBibG9ja2VkX3Rhc2tzW10gYXJyYXkuICovCiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKKy8qCisgKiBEbyBhIGZ1bGwgYnJlYWR0aC1maXJzdCBzY2FuIG9mIHRoZSByY3Vfbm9kZSBzdHJ1Y3R1cmVzIGZvciB0aGUKKyAqIHNwZWNpZmllZCByY3Vfc3RhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIHJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIFwKKwlmb3IgKChybnApID0gJihyc3ApLT5ub2RlWzBdOyBcCisJICAgICAocm5wKSA8ICYocnNwKS0+bm9kZVtOVU1fUkNVX05PREVTXTsgKHJucCkrKykKKworI2RlZmluZSByY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSBcCisJZm9yICgocm5wKSA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAorCSAgICAgKHJucCkgPCAmKHJzcCktPm5vZGVbTlVNX1JDVV9OT0RFU107IChybnApKyspCisKIC8qIEluZGV4IHZhbHVlcyBmb3Igbnh0dGFpbCBhcnJheSBpbiBzdHJ1Y3QgcmN1X2RhdGEuICovCiAjZGVmaW5lIFJDVV9ET05FX1RBSUwJCTAJLyogQWxzbyBSQ1VfV0FJVCBoZWFkLiAqLwogI2RlZmluZSBSQ1VfV0FJVF9UQUlMCQkxCS8qIEFsc28gUkNVX05FWFRfUkVBRFkgaGVhZC4gKi8KQEAgLTEyNiwyMyArMTQ3LDMwIEBACiAJICogQW55IG9mIHRoZSBwYXJ0aXRpb25zIG1pZ2h0IGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZQogCSAqIHBvaW50ZXIgdG8gdGhhdCBwYXJ0aXRpb24gd2lsbCBiZSBlcXVhbCB0byB0aGUgcG9pbnRlciBmb3IKIAkgKiB0aGUgZm9sbG93aW5nIHBhcnRpdGlvbi4gIFdoZW4gdGhlIGxpc3QgaXMgZW1wdHksIGFsbCBvZgotCSAqIHRoZSBueHR0YWlsIGVsZW1lbnRzIHBvaW50IHRvIG54dGxpc3QsIHdoaWNoIGlzIE5VTEwuCisJICogdGhlIG54dHRhaWwgZWxlbWVudHMgcG9pbnQgdG8gdGhlIC0+bnh0bGlzdCBwb2ludGVyIGl0c2VsZiwKKwkgKiB3aGljaCBpbiB0aGF0IGNhc2UgaXMgTlVMTC4KIAkgKgotCSAqIFsqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSwgTlVMTCA9ICpueHR0YWlsW1JDVV9ORVhUX1RBSUxdKToKLQkgKglFbnRyaWVzIHRoYXQgbWlnaHQgaGF2ZSBhcnJpdmVkIGFmdGVyIGN1cnJlbnQgR1AgZW5kZWQKLQkgKiBbKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdKToKLQkgKglFbnRyaWVzIGtub3duIHRvIGhhdmUgYXJyaXZlZCBiZWZvcmUgY3VycmVudCBHUCBlbmRlZAotCSAqIFsqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSwgKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0pOgotCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkIC0gMTogd2FpdGluZyBmb3IgY3VycmVudCBHUAogCSAqIFtueHRsaXN0LCAqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSk6CiAJICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQKIAkgKglUaGUgZ3JhY2UgcGVyaW9kIGZvciB0aGVzZSBlbnRyaWVzIGhhcyBjb21wbGV0ZWQsIGFuZAogCSAqCXRoZSBvdGhlciBncmFjZS1wZXJpb2QtY29tcGxldGVkIGVudHJpZXMgbWF5IGJlIG1vdmVkCiAJICoJaGVyZSB0ZW1wb3JhcmlseSBpbiByY3VfcHJvY2Vzc19jYWxsYmFja3MoKS4KKwkgKiBbKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0sICpueHR0YWlsW1JDVV9XQUlUX1RBSUxdKToKKwkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZCAtIDE6IHdhaXRpbmcgZm9yIGN1cnJlbnQgR1AKKwkgKiBbKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdKToKKwkgKglFbnRyaWVzIGtub3duIHRvIGhhdmUgYXJyaXZlZCBiZWZvcmUgY3VycmVudCBHUCBlbmRlZAorCSAqIFsqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBtaWdodCBoYXZlIGFycml2ZWQgYWZ0ZXIgY3VycmVudCBHUCBlbmRlZAorCSAqCU5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgKm54dHRhaWxbUkNVX05FWFRfVEFJTF0gd2lsbAorCSAqCWFsd2F5cyBiZSBOVUxMLCBhcyB0aGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAJICovCiAJc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWxbUkNVX05FWFRfU0laRV07CiAJbG9uZwkJcWxlbjsJCS8qICMgb2YgcXVldWVkIGNhbGxiYWNrcyAqLworCWxvbmcJCXFsZW5fbGFzdF9mcXNfY2hlY2s7CisJCQkJCS8qIHFsZW4gYXQgbGFzdCBjaGVjayBmb3IgUVMgZm9yY2luZyAqLworCXVuc2lnbmVkIGxvbmcJbl9mb3JjZV9xc19zbmFwOworCQkJCQkvKiBkaWQgb3RoZXIgQ1BVIGZvcmNlIFFTIHJlY2VudGx5PyAqLwogCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTE3Myw5ICsyMDEsMTAgQEAKIH07CiAKIC8qIFZhbHVlcyBmb3Igc2lnbmFsZWQgZmllbGQgaW4gc3RydWN0IHJjdV9zdGF0ZS4gKi8KLSNkZWZpbmUgUkNVX0dQX0lOSVQJCTAJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLwotI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTEJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCi0jZGVmaW5lIFJDVV9GT1JDRV9RUwkJMgkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0dQX0lETEUJCTAJLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLiAqLworI2RlZmluZSBSQ1VfR1BfSU5JVAkJMQkvKiBHcmFjZSBwZXJpb2QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCisjZGVmaW5lIFJDVV9TQVZFX0RZTlRJQ0sJMgkvKiBOZWVkIHRvIHNjYW4gZHludGljayBzdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkzCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLwogI2lmZGVmIENPTkZJR19OT19IWgogI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0RZTlRJQ0sKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KQEAgLTIxNiw4ICsyNDUsMTkgQEAKIAkJCQkJCS8qIEZvcmNlIFFTIHN0YXRlLiAqLwogCWxvbmcJZ3BudW07CQkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLwogCWxvbmcJY29tcGxldGVkOwkJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCisKKwkvKiBFbmQgIG9mIGZpZWxkcyBndWFyZGVkIGJ5IHJvb3QgcmN1X25vZGUncyBsb2NrLiAqLworCiAJc3BpbmxvY2tfdCBvbm9mZmxvY2s7CQkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLwotCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gKi8KKwkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICBBbHNvICovCisJCQkJCQkvKiAgcHJvdGVjdHMgdGhlIGZvbGxvd2luZyAqLworCQkJCQkJLyogIG9ycGhhbl9jYnMgZmllbGRzLiAqLworCXN0cnVjdCByY3VfaGVhZCAqb3JwaGFuX2Nic19saXN0OwkvKiBsaXN0IG9mIHJjdV9oZWFkIHN0cnVjdHMgKi8KKwkJCQkJCS8qICBvcnBoYW5lZCBieSBhbGwgQ1BVcyBpbiAqLworCQkJCQkJLyogIGEgZ2l2ZW4gbGVhZiByY3Vfbm9kZSAqLworCQkJCQkJLyogIGdvaW5nIG9mZmxpbmUuICovCisJc3RydWN0IHJjdV9oZWFkICoqb3JwaGFuX2Nic190YWlsOwkvKiBBbmQgdGFpbCBwb2ludGVyLiAqLworCWxvbmcgb3JwaGFuX3FsZW47CQkJLyogTnVtYmVyIG9mIG9ycGhhbmVkIGNicy4gKi8KIAlzcGlubG9ja190IGZxc2xvY2s7CQkJLyogT25seSBvbmUgdGFzayBmb3JjaW5nICovCiAJCQkJCQkvKiAgcXVpZXNjZW50IHN0YXRlcy4gKi8KIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfZm9yY2VfcXM7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIGludm9rZSAqLwpAQCAtMjU1LDUgKzI5NSwzMCBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKLSNlbmRpZiAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2Vsc2UgLyogI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOworbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpOworc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApOworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfY3B1KGludCBjcHUpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpOwordm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOworc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpOworc3RhdGljIGludCByY3VfcHJlZW1wdF9uZWVkc19jcHUoaW50IGNwdSk7CitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCAxY2VlMDRmLi5lZjJhNThjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtMTUwLDYgKzE1MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19yY3VfcmVhZF9sb2NrKTsKIAorLyoKKyAqIENoZWNrIGZvciBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisgKiBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuICBJZiB0aGUgY2FsbGVyIG5lZWRzIGEgcmVsaWFibGUKKyAqIGFuc3dlciwgaXQgbXVzdCBob2xkIHRoZSByY3Vfbm9kZSdzIC0+bG9jay4KKyAqLworc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOworfQorCiBzdGF0aWMgdm9pZCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJaW50IGVtcHR5OwpAQCAtMTk2LDcgKzIwNiw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9Ci0JCWVtcHR5ID0gbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKTsKKwkJZW1wdHkgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJCWxpc3RfZGVsX2luaXQoJnQtPnJjdV9ub2RlX2VudHJ5KTsKIAkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IE5VTEw7CiAKQEAgLTIwNyw3ICsyMTcsNyBAQAogCQkgKiBkcm9wIHJucC0+bG9jayBhbmQgcmVzdG9yZSBpcnEuCiAJCSAqLwogCQlpZiAoIWVtcHR5ICYmIHJucC0+cXNtYXNrID09IDAgJiYKLQkJICAgIGxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpIHsKKwkJICAgICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKIAogCQkJaWYgKHJucC0+cGFyZW50ID09IE5VTEwpIHsKQEAgLTI1NywxMiArMjY3LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKLQlpbnQgcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOworCWludCBwaGFzZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pKSB7CisJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOyAvKiByZS1yZWFkIHVuZGVyIGxvY2suICovCisJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKIAkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCiAJCQlwcmludGsoIiBQJWQiLCB0LT5waWQpOwpAQCAtMjgxLDIwICsyOTEsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKLQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpOworCVdBUk5fT05fT05DRShyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSk7CiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIAotLyoKLSAqIENoZWNrIGZvciBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgZm9yIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgotICogSWYgdGhlIGNhbGxlciBuZWVkcyBhIHJlbGlhYmxlIGFuc3dlciwgaXQgbXVzdCBob2xkIHRoZSByY3Vfbm9kZSdzCi0gKiA+bG9jay4KLSAqLwotc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCi17Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCkBAIC0zMDQsMjEgKzMwNCwyNSBAQAogICogcGFyZW50IGlzIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwoKSB0bwogICogbWFrZSBtb3JlIHRoYW4gdHdvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHRhcmdldCByY3Vfbm9kZSdzIGxvY2suCiAgKgorICogUmV0dXJucyAxIGlmIHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZQorICogcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgorICoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJaW50IGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHBfcm9vdDsKKwlpbnQgcmV0dmFsID0gcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHA7CiAKIAlpZiAocm5wID09IHJucF9yb290KSB7CiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKLQkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCisJCXJldHVybiAwOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQogCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKIAkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKQEAgLTM0Miw2ICszNDYsOCBAQAogCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KKworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC0zOTMsNiArMzk5LDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QuICBXZSBhcmUgc3VwcG9zZWQgdG8gZXhwZWRpdGUgdGhlCisgKiBncmFjZSBwZXJpb2QsIGJ1dCB0aGlzIGlzIHRoZSBjcnVkZSBzbG93IGNvbXBhdGFiaWxpdHkgaGFjaywgc28ganVzdAorICogaW52b2tlIHN5bmNocm9uaXplX3JjdSgpLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbW1lZGlhdGUgcHJlZW1wdGFibGUtUkNVLXJlbGF0ZWQgd29yawogICogdG8gYmUgZG9uZS4KICAqLwpAQCAtNDEwLDYgKzQyNywxNSBAQAogCXJldHVybiAhIXBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5ueHRsaXN0OwogfQogCisvKioKKyAqIHJjdV9iYXJyaWVyIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1KCkgY2FsbGJhY2tzIGNvbXBsZXRlLgorICovCit2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3VfcHJlZW1wdF9zdGF0ZSwgY2FsbF9yY3UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOworCiAvKgogICogSW5pdGlhbGl6ZSBwcmVlbXB0YWJsZSBSQ1UncyBwZXItQ1BVIGRhdGEuCiAgKi8KQEAgLTQxOSw2ICs0NDUsMjIgQEAKIH0KIAogLyoKKyAqIE1vdmUgcHJlZW1wdGFibGUgUkNVJ3MgY2FsbGJhY2tzIHRvIC0+b3JwaGFuX2Nic19saXN0LgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCkKK3sKKwlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3VfcHJlZW1wdF9zdGF0ZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHByZWVtcHRhYmxlIFJDVSdzIHN0YXRlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKK3sKKwlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9wcmVlbXB0X3N0YXRlLCByY3VfcHJlZW1wdF9kYXRhKTsKK30KKworLyoKICAqIENoZWNrIGZvciBhIHRhc2sgZXhpdGluZyB3aGlsZSBpbiBhIHByZWVtcHRhYmxlLVJDVSByZWFkLXNpZGUKICAqIGNyaXRpY2FsIHNlY3Rpb24sIGNsZWFuIHVwIGlmIHNvLiAgTm8gbmVlZCB0byBpc3N1ZSB3YXJuaW5ncywKICAqIGFzIGRlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoKSBhbHJlYWR5IGRvZXMgdGhpcyBpZiBsb2NrZGVwCkBAIC00NjEsNiArNTAzLDE1IEBACiB7CiB9CiAKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKKyAqIFJDVSByZWFkZXJzLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiAKIC8qCkBAIC00ODMsMjUgKzUzNCwxOSBAQAogCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7CiB9CiAKLS8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKLSAqIFJDVSByZWFkZXJzLgotICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCiAvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIG5lZWRzIHRvIG1pZ3JhdGUKLSAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgorICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZAorICogc3VjaCBub24tZXhpc3RlbnQgdGFza3MgY2Fubm90IHBvc3NpYmx5IGhhdmUgYmVlbiBibG9ja2luZyB0aGUgY3VycmVudAorICogZ3JhY2UgcGVyaW9kLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogeworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTE4LDcgKzU2Myw3IEBACiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKICAqIHRvIGNoZWNrLgogICovCi12b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCiB7CiB9CiAKQEAgLTUyNiw3ICs1NzEsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBwcm9jZXNzLgogICovCi12b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQogewogfQogCkBAIC01NDAsNiArNTg1LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBtYWtlIGl0IGhhcHBlbiBxdWlja2x5LgorICogQnV0IGJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgd29yayB0byBkby4KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpCkBAIC01NTYsNiArNjExLDE2IEBACiB9CiAKIC8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgcmN1X2JhcnJpZXIoKSBpcyBqdXN0CisgKiBhbm90aGVyIG5hbWUgZm9yIHJjdV9iYXJyaWVyX3NjaGVkKCkuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXIodm9pZCkKK3sKKwlyY3VfYmFycmllcl9zY2hlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5vIHBlci1DUFUKICAqIGRhdGEgdG8gaW5pdGlhbGl6ZS4KICAqLwpAQCAtNTYzLDQgKzYyOCwxOCBAQAogewogfQogCisvKgorICogQmVjYXVzZSB0aGVyZSBpcyBubyBwcmVlbXB0YWJsZSBSQ1UsIHRoZXJlIGFyZSBubyBjYWxsYmFja3MgdG8gbW92ZS4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpCit7Cit9CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmVlZCBub3QgYmUgaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKK3sKK30KKwogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggYzg5ZjVlOS4uNGIzMWM3NyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC05Myw3ICs5Myw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1ZGF0YSwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWRhdGFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1ZGF0YV9jc3YsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2Nzdl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9jc3ZfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWRhdGFfY3N2X29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTE1OSwxMyArMTU5LDEzIEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlzZXFfcHJpbnRmKG0sICJjPSVsZCBnPSVsZCBzPSVkIGpmcT0lbGQgaj0leCAiCi0JICAgICAgICAgICAgICAibmZxcz0lbHUvbmZxc25nPSVsdSglbHUpIGZxbGg9JWx1XG4iLAorCQkgICAgICAibmZxcz0lbHUvbmZxc25nPSVsdSglbHUpIGZxbGg9JWx1IG9xbGVuPSVsZFxuIiwKIAkJICAgcnNwLT5jb21wbGV0ZWQsIHJzcC0+Z3BudW0sIHJzcC0+c2lnbmFsZWQsCiAJCSAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSwKIAkJICAgKGludCkoamlmZmllcyAmIDB4ZmZmZiksCiAJCSAgIHJzcC0+bl9mb3JjZV9xcywgcnNwLT5uX2ZvcmNlX3FzX25ncCwKIAkJICAgcnNwLT5uX2ZvcmNlX3FzIC0gcnNwLT5uX2ZvcmNlX3FzX25ncCwKLQkJICAgcnNwLT5uX2ZvcmNlX3FzX2xoKTsKKwkJICAgcnNwLT5uX2ZvcmNlX3FzX2xoLCByc3AtPm9ycGhhbl9xbGVuKTsKIAlmb3IgKHJucCA9ICZyc3AtPm5vZGVbMF07IHJucCAtICZyc3AtPm5vZGVbMF0gPCBOVU1fUkNVX05PREVTOyBybnArKykgewogCQlpZiAocm5wLT5sZXZlbCAhPSBsZXZlbCkgewogCQkJc2VxX3B1dHMobSwgIlxuIik7CkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VoaWVyLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1aGllcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1aGllcl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1aGllcl9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VncCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWdwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VncF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1Z3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1X3BlbmRpbmcsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VfcGVuZGluZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1X3BlbmRpbmdfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdV9wZW5kaW5nX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggYmMxODg1NC4uNzYwYzI2MiAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTYwLDcgKzYwLDcgQEAKIC8qCiAgKiB2bV9vcHMgZm9yIHJlbGF5IGZpbGUgbWFwcGluZ3MuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmVsYXlfZmlsZV9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmVsYXlfZmlsZV9tbWFwX29wcyA9IHsKIAkuZmF1bHQgPSByZWxheV9idWZfZmF1bHQsCiAJLmNsb3NlID0gcmVsYXlfZmlsZV9tbWFwX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNfY291bnRlci5jIGIva2VybmVsL3Jlc19jb3VudGVyLmMKaW5kZXggODhmYWVjMi4uYmNkYWJmMyAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc19jb3VudGVyLmMKKysrIGIva2VybmVsL3Jlc19jb3VudGVyLmMKQEAgLTM3LDI3ICszNywxNyBAQAogfQogCiBpbnQgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0LAotCQkJc3RydWN0IHJlc19jb3VudGVyICoqc29mdF9saW1pdF9mYWlsX2F0KQorCQkJc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJlc19jb3VudGVyICpjLCAqdTsKIAogCSpsaW1pdF9mYWlsX2F0ID0gTlVMTDsKLQlpZiAoc29mdF9saW1pdF9mYWlsX2F0KQotCQkqc29mdF9saW1pdF9mYWlsX2F0ID0gTlVMTDsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yIChjID0gY291bnRlcjsgYyAhPSBOVUxMOyBjID0gYy0+cGFyZW50KSB7CiAJCXNwaW5fbG9jaygmYy0+bG9jayk7CiAJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZV9sb2NrZWQoYywgdmFsKTsKLQkJLyoKLQkJICogV2l0aCBzb2Z0IGxpbWl0cywgd2UgcmV0dXJuIHRoZSBoaWdoZXN0IGFuY2VzdG9yCi0JCSAqIHRoYXQgZXhjZWVkcyBpdHMgc29mdCBsaW1pdAotCQkgKi8KLQkJaWYgKHNvZnRfbGltaXRfZmFpbF9hdCAmJgotCQkJIXJlc19jb3VudGVyX3NvZnRfbGltaXRfY2hlY2tfbG9ja2VkKGMpKQotCQkJKnNvZnRfbGltaXRfZmFpbF9hdCA9IGM7CiAJCXNwaW5fdW5sb2NrKCZjLT5sb2NrKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCSpsaW1pdF9mYWlsX2F0ID0gYzsKQEAgLTg1LDggKzc1LDcgQEAKIAljb3VudGVyLT51c2FnZSAtPSB2YWw7CiB9CiAKLXZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCQlib29sICp3YXNfc29mdF9saW1pdF9leGNlc3MpCit2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmM7CkBAIC05NCw5ICs4Myw2IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvciAoYyA9IGNvdW50ZXI7IGMgIT0gTlVMTDsgYyA9IGMtPnBhcmVudCkgewogCQlzcGluX2xvY2soJmMtPmxvY2spOwotCQlpZiAod2FzX3NvZnRfbGltaXRfZXhjZXNzKQotCQkJKndhc19zb2Z0X2xpbWl0X2V4Y2VzcyA9Ci0JCQkJIXJlc19jb3VudGVyX3NvZnRfbGltaXRfY2hlY2tfbG9ja2VkKGMpOwogCQlyZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoYywgdmFsKTsKIAkJc3Bpbl91bmxvY2soJmMtPmxvY2spOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZWU2MWY0NS4uM2MxMWFlMCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTMwOSw2ICszMDksOCBAQAogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tfZ3JvdXBfbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKIHsKQEAgLTMxNiw3ICszMTgsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECiAjIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAkoMipOSUNFXzBfTE9BRCkKICNlbHNlIC8qICFDT05GSUdfVVNFUl9TQ0hFRCAqLwpAQCAtNjc2LDYgKzY3Nyw3IEBACiAKIC8qKgogICogcnVucXVldWVfaXNfbG9ja2VkCisgKiBAY3B1OiB0aGUgcHJvY2Vzc29yIGluIHF1ZXN0aW9uLgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBjcHUgcnVucXVldWUgaXMgbG9ja2VkLgogICogVGhpcyBpbnRlcmZhY2UgYWxsb3dzIHByaW50ayB0byBiZSBjYWxsZWQgd2l0aCB0aGUgcnVucXVldWUgbG9jawpAQCAtNzgwLDcgKzc4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHNjaGVkX2ZlYXRfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX2ZlYXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjaGVkX2ZlYXRfZm9wcyA9IHsKIAkub3BlbgkJPSBzY2hlZF9mZWF0X29wZW4sCiAJLndyaXRlCQk9IHNjaGVkX2ZlYXRfd3JpdGUsCiAJLnJlYWQJCT0gc2VxX3JlYWQsCkBAIC0xNTYzLDExICsxNTY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAKLXN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgcnFfd2VpZ2h0W05SX0NQVVNdOwotfTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEsIHVwZGF0ZV9zaGFyZXNfZGF0YSk7CitzdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nICp1cGRhdGVfc2hhcmVzX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwogCkBAIC0xNTc3LDEyICsxNTc1LDEyIEBACiBzdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2Rfc2hhcmVzLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNkX3JxX3dlaWdodCwKLQkJCQkgICAgc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkKQorCQkJCSAgICB1bnNpZ25lZCBsb25nICp1c2RfcnFfd2VpZ2h0KQogewogCXVuc2lnbmVkIGxvbmcgc2hhcmVzLCBycV93ZWlnaHQ7CiAJaW50IGJvb3N0ID0gMDsKIAotCXJxX3dlaWdodCA9IHVzZC0+cnFfd2VpZ2h0W2NwdV07CisJcnFfd2VpZ2h0ID0gdXNkX3JxX3dlaWdodFtjcHVdOwogCWlmICghcnFfd2VpZ2h0KSB7CiAJCWJvb3N0ID0gMTsKIAkJcnFfd2VpZ2h0ID0gTklDRV8wX0xPQUQ7CkBAIC0xNjE3LDcgKzE2MTUsNyBAQAogc3RhdGljIGludCB0Z19zaGFyZXNfdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgd2VpZ2h0LCBycV93ZWlnaHQgPSAwLCBzaGFyZXMgPSAwOwotCXN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgKnVzZDsKKwl1bnNpZ25lZCBsb25nICp1c2RfcnFfd2VpZ2h0OwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwpAQCAtMTYyNiwxMSArMTYyNCwxMSBAQAogCQlyZXR1cm4gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1c2QgPSAmX19nZXRfY3B1X3Zhcih1cGRhdGVfc2hhcmVzX2RhdGEpOworCXVzZF9ycV93ZWlnaHQgPSBwZXJfY3B1X3B0cih1cGRhdGVfc2hhcmVzX2RhdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKSB7CiAJCXdlaWdodCA9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OwotCQl1c2QtPnJxX3dlaWdodFtpXSA9IHdlaWdodDsKKwkJdXNkX3JxX3dlaWdodFtpXSA9IHdlaWdodDsKIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHRhc2tzIG9uIHRoZSBjcHUgcHJldGVuZCB0aGVyZQpAQCAtMTY1MSw3ICsxNjQ5LDcgQEAKIAkJc2hhcmVzID0gdGctPnNoYXJlczsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpCi0JCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkKTsKKwkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2RfcnFfd2VpZ2h0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMTk5NSw2ICsxOTkzLDM4IEBACiAJCXAtPnNjaGVkX2NsYXNzLT5wcmlvX2NoYW5nZWQocnEsIHAsIG9sZHByaW8sIHJ1bm5pbmcpOwogfQogCisvKioKKyAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KKyAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgorICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAorICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCisgKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCisgKgorICogRnVuY3Rpb24gbGl2ZXMgaGVyZSBpbnN0ZWFkIG9mIGt0aHJlYWQuYyBiZWNhdXNlIGl0IG1lc3NlcyB3aXRoCisgKiBzY2hlZHVsZXIgaW50ZXJuYWxzIHdoaWNoIHJlcXVpcmUgbG9ja2luZy4KKyAqLwordm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLworCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CisJcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOworCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOworCiAjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIElzIHRoaXMgdGFzayBsaWtlbHkgY2FjaGUtaG90OgpAQCAtMjAwNyw3ICsyMDM3LDcgQEAKIAkvKgogCSAqIEJ1ZGR5IGNhbmRpZGF0ZXMgYXJlIGNhY2hlIGhvdDoKIAkgKi8KLQlpZiAoc2NoZWRfZmVhdChDQUNIRV9IT1RfQlVERFkpICYmCisJaWYgKHNjaGVkX2ZlYXQoQ0FDSEVfSE9UX0JVRERZKSAmJiB0aGlzX3JxKCktPm5yX3J1bm5pbmcgJiYKIAkJCSgmcC0+c2UgPT0gY2ZzX3JxX29mKCZwLT5zZSktPm5leHQgfHwKIAkJCSAmcC0+c2UgPT0gY2ZzX3JxX29mKCZwLT5zZSktPmxhc3QpKQogCQlyZXR1cm4gMTsKQEAgLTIzMTEsNyArMjM0MSw3IEBACiB7CiAJaW50IGNwdSwgb3JpZ19jcHUsIHRoaXNfY3B1LCBzdWNjZXNzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBycSAqcnE7CisJc3RydWN0IHJxICpycSwgKm9yaWdfcnE7CiAKIAlpZiAoIXNjaGVkX2ZlYXQoU1lOQ19XQUtFVVBTKSkKIAkJd2FrZV9mbGFncyAmPSB+V0ZfU1lOQzsKQEAgLTIzMTksNyArMjM0OSw3IEBACiAJdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAKIAlzbXBfd21iKCk7Ci0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwlycSA9IG9yaWdfcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCWlmICghKHAtPnN0YXRlICYgc3RhdGUpKQogCQlnb3RvIG91dDsKQEAgLTIzNTAsNiArMjM4MCwxMCBAQAogCQlzZXRfdGFza19jcHUocCwgY3B1KTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisKKwlpZiAocnEgIT0gb3JpZ19ycSkKKwkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKKwogCVdBUk5fT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwogCWNwdSA9IHRhc2tfY3B1KHApOwogCkBAIC0yNTE1LDIyICsyNTQ5LDE3IEBACiAJX19zY2hlZF9mb3JrKHApOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhlIGNoaWxkLgotCSAqLwotCXAtPnByaW8gPSBjdXJyZW50LT5ub3JtYWxfcHJpbzsKLQotCS8qCiAJICogUmV2ZXJ0IHRvIGRlZmF1bHQgcHJpb3JpdHkvcG9saWN5IG9uIGZvcmsgaWYgcmVxdWVzdGVkLgogCSAqLwogCWlmICh1bmxpa2VseShwLT5zY2hlZF9yZXNldF9vbl9mb3JrKSkgewotCQlpZiAocC0+cG9saWN5ID09IFNDSEVEX0ZJRk8gfHwgcC0+cG9saWN5ID09IFNDSEVEX1JSKQorCQlpZiAocC0+cG9saWN5ID09IFNDSEVEX0ZJRk8gfHwgcC0+cG9saWN5ID09IFNDSEVEX1JSKSB7CiAJCQlwLT5wb2xpY3kgPSBTQ0hFRF9OT1JNQUw7Ci0KLQkJaWYgKHAtPm5vcm1hbF9wcmlvIDwgREVGQVVMVF9QUklPKQotCQkJcC0+cHJpbyA9IERFRkFVTFRfUFJJTzsKKwkJCXAtPm5vcm1hbF9wcmlvID0gcC0+c3RhdGljX3ByaW87CisJCX0KIAogCQlpZiAoUFJJT19UT19OSUNFKHAtPnN0YXRpY19wcmlvKSA8IDApIHsKIAkJCXAtPnN0YXRpY19wcmlvID0gTklDRV9UT19QUklPKDApOworCQkJcC0+bm9ybWFsX3ByaW8gPSBwLT5zdGF0aWNfcHJpbzsKIAkJCXNldF9sb2FkX3dlaWdodChwKTsKIAkJfQogCkBAIC0yNTQxLDYgKzI1NzAsMTEgQEAKIAkJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IDA7CiAJfQogCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhlIGNoaWxkLgorCSAqLworCXAtPnByaW8gPSBjdXJyZW50LT5ub3JtYWxfcHJpbzsKKwogCWlmICghcnRfcHJpbyhwLT5wcmlvKSkKIAkJcC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKIApAQCAtMjU4MSw4ICsyNjE1LDYgQEAKIAlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCi0JcC0+cHJpbyA9IGVmZmVjdGl2ZV9wcmlvKHApOwotCiAJaWYgKCFwLT5zY2hlZF9jbGFzcy0+dGFza19uZXcgfHwgIWN1cnJlbnQtPnNlLm9uX3JxKSB7CiAJCWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwogCX0gZWxzZSB7CkBAIC0zNjU4LDYgKzM2OTAsNyBAQAogCiAvKioKICAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCiAgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCiAgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCiAgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKQEAgLTY3MjAsOSArNjc1Myw2IEBACiAvKgogICogVGhpcyB0YXNrIGlzIGFib3V0IHRvIGdvIHRvIHNsZWVwIG9uIElPLiBJbmNyZW1lbnQgcnEtPm5yX2lvd2FpdCBzbwogICogdGhhdCBwcm9jZXNzIGFjY291bnRpbmcga25vd3MgdGhhdCB0aGlzIGlzIGEgdGFzayBpbiBJTyB3YWl0IHN0YXRlLgotICoKLSAqIEJ1dCBkb24ndCBkbyB0aGF0IGlmIGl0IGlzIGEgZGVsaWJlcmF0ZSwgdGhyb3R0bGluZyBJTyB3YWl0ICh0aGlzIHRhc2sKLSAqIGhhcyBzZXQgaXRzIGJhY2tpbmdfZGV2X2luZm86IHRoZSBxdWV1ZSBhZ2FpbnN0IHdoaWNoIGl0IHNob3VsZCB0aHJvdHRsZSkKICAqLwogdm9pZCBfX3NjaGVkIGlvX3NjaGVkdWxlKHZvaWQpCiB7CkBAIC05NDA2LDYgKzk0MzYsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogI2VuZGlmIC8qIENPTkZJR19HUk9VUF9TQ0hFRCAqLwogCisjaWYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAmJiBkZWZpbmVkIENPTkZJR19TTVAKKwl1cGRhdGVfc2hhcmVzX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgX19hbGlnbm9mX18odW5zaWduZWQgbG9uZykpOworI2VuZGlmCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IHJxICpycTsKIApAQCAtOTUzMSwxMyArOTU2NSwxMyBAQAogCWN1cnJlbnQtPnNjaGVkX2NsYXNzID0gJmZhaXJfc2NoZWRfY2xhc3M7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgbm9oel9jcHVfbWFzayBpZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwotCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKKwl6YWxsb2NfY3B1bWFza192YXIoJm5vaHpfY3B1X21hc2ssIEdGUF9OT1dBSVQpOwogI2lmZGVmIENPTkZJR19TTVAKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlhbGxvY19jcHVtYXNrX3Zhcigmbm9oei5jcHVfbWFzaywgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmNwdV9tYXNrLCBHRlBfTk9XQUlUKTsKIAlhbGxvY19jcHVtYXNrX3Zhcigmbm9oei5pbGJfZ3JwX25vaHpfbWFzaywgR0ZQX05PV0FJVCk7CiAjZW5kaWYKLQlhbGxvY19jcHVtYXNrX3ZhcigmY3B1X2lzb2xhdGVkX21hcCwgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKICNlbmRpZiAvKiBTTVAgKi8KIAogCXBlcmZfZXZlbnRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwppbmRleCBhYzJlMWRjLi40NzljZTU2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJY2xvY2sgPSB3cmFwX21heChjbG9jaywgbWluX2Nsb2NrKTsKIAljbG9jayA9IHdyYXBfbWluKGNsb2NrLCBtYXhfY2xvY2spOwogCi0JaWYgKGNtcHhjaGcoJnNjZC0+Y2xvY2ssIG9sZF9jbG9jaywgY2xvY2spICE9IG9sZF9jbG9jaykKKwlpZiAoY21weGNoZzY0KCZzY2QtPmNsb2NrLCBvbGRfY2xvY2ssIGNsb2NrKSAhPSBvbGRfY2xvY2spCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gY2xvY2s7CkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJdmFsID0gcmVtb3RlX2Nsb2NrOwogCX0KIAotCWlmIChjbXB4Y2hnKHB0ciwgb2xkX3ZhbCwgdmFsKSAhPSBvbGRfdmFsKQorCWlmIChjbXB4Y2hnNjQocHRyLCBvbGRfdmFsLCB2YWwpICE9IG9sZF92YWwpCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gdmFsOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNGU3NzdiNC4uMzcwODdhNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC04MjIsNiArODIyLDI2IEBACiAJCSAqIHJlLWVsZWN0ZWQgZHVlIHRvIGJ1ZGR5IGZhdm91cnMuCiAJCSAqLwogCQljbGVhcl9idWRkaWVzKGNmc19ycSwgY3Vycik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGEgdGFzayB0aGF0IG1pc3NlZCB3YWtldXAgcHJlZW1wdGlvbiBieSBhCisJICogbmFycm93IG1hcmdpbiBkb2Vzbid0IGhhdmUgdG8gd2FpdCBmb3IgYSBmdWxsIHNsaWNlLgorCSAqIFRoaXMgYWxzbyBtaXRpZ2F0ZXMgYnVkZHkgaW5kdWNlZCBsYXRlbmNpZXMgdW5kZXIgbG9hZC4KKwkgKi8KKwlpZiAoIXNjaGVkX2ZlYXQoV0FLRVVQX1BSRUVNUFQpKQorCQlyZXR1cm47CisKKwlpZiAoZGVsdGFfZXhlYyA8IHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpCisJCXJldHVybjsKKworCWlmIChjZnNfcnEtPm5yX3J1bm5pbmcgPiAxKSB7CisJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gX19waWNrX25leHRfZW50aXR5KGNmc19ycSk7CisJCXM2NCBkZWx0YSA9IGN1cnItPnZydW50aW1lIC0gc2UtPnZydW50aW1lOworCisJCWlmIChkZWx0YSA+IGlkZWFsX3J1bnRpbWUpCisJCQlyZXNjaGVkX3Rhc2socnFfb2YoY2ZzX3JxKS0+Y3Vycik7CiAJfQogfQogCkBAIC04NjEsMTIgKzg4MSwxOCBAQAogc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfbmV4dF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQogewogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gX19waWNrX25leHRfZW50aXR5KGNmc19ycSk7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqbGVmdCA9IHNlOwogCi0JaWYgKGNmc19ycS0+bmV4dCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5uZXh0LCBzZSkgPCAxKQotCQlyZXR1cm4gY2ZzX3JxLT5uZXh0OworCWlmIChjZnNfcnEtPm5leHQgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bmV4dCwgbGVmdCkgPCAxKQorCQlzZSA9IGNmc19ycS0+bmV4dDsKIAotCWlmIChjZnNfcnEtPmxhc3QgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bGFzdCwgc2UpIDwgMSkKLQkJcmV0dXJuIGNmc19ycS0+bGFzdDsKKwkvKgorCSAqIFByZWZlciBsYXN0IGJ1ZGR5LCB0cnkgdG8gcmV0dXJuIHRoZSBDUFUgdG8gYSBwcmVlbXB0ZWQgdGFzay4KKwkgKi8KKwlpZiAoY2ZzX3JxLT5sYXN0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPmxhc3QsIGxlZnQpIDwgMSkKKwkJc2UgPSBjZnNfcnEtPmxhc3Q7CisKKwljbGVhcl9idWRkaWVzKGNmc19ycSwgc2UpOwogCiAJcmV0dXJuIHNlOwogfQpAQCAtMTU2OCw2ICsxNTk0LDcgQEAKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZjdXJyLT5zZSwgKnBzZSA9ICZwLT5zZTsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSB0YXNrX2Nmc19ycShjdXJyKTsKIAlpbnQgc3luYyA9IHdha2VfZmxhZ3MgJiBXRl9TWU5DOworCWludCBzY2FsZSA9IGNmc19ycS0+bnJfcnVubmluZyA+PSBzY2hlZF9ucl9sYXRlbmN5OwogCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKIApAQCAtMTU4MiwxOCArMTYwOSw3IEBACiAJaWYgKHVubGlrZWx5KHNlID09IHBzZSkpCiAJCXJldHVybjsKIAotCS8qCi0JICogT25seSBzZXQgdGhlIGJhY2t3YXJkIGJ1ZGR5IHdoZW4gdGhlIGN1cnJlbnQgdGFzayBpcyBzdGlsbCBvbiB0aGUKLQkgKiBycS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSB3YWtldXAgZ2V0cyBpbnRlcmxlYXZlZCB3aXRoIHNjaGVkdWxlIG9uCi0JICogdGhlIC0+cHJlX3NjaGVkdWxlKCkgb3IgaWRsZV9iYWxhbmNlKCkgcG9pbnQsIGVpdGhlciBvZiB3aGljaCBjYW4KLQkgKiBkcm9wIHRoZSBycSBsb2NrLgotCSAqCi0JICogQWxzbywgZHVyaW5nIGVhcmx5IGJvb3QgdGhlIGlkbGUgdGhyZWFkIGlzIGluIHRoZSBmYWlyIGNsYXNzLCBmb3IKLQkgKiBvYnZpb3VzIHJlYXNvbnMgaXRzIGEgYmFkIGlkZWEgdG8gc2NoZWR1bGUgYmFjayB0byB0aGUgaWRsZSB0aHJlYWQuCi0JICovCi0JaWYgKHNjaGVkX2ZlYXQoTEFTVF9CVUREWSkgJiYgbGlrZWx5KHNlLT5vbl9ycSAmJiBjdXJyICE9IHJxLT5pZGxlKSkKLQkJc2V0X2xhc3RfYnVkZHkoc2UpOwotCWlmIChzY2hlZF9mZWF0KE5FWFRfQlVERFkpICYmICEod2FrZV9mbGFncyAmIFdGX0ZPUkspKQorCWlmIChzY2hlZF9mZWF0KE5FWFRfQlVERFkpICYmIHNjYWxlICYmICEod2FrZV9mbGFncyAmIFdGX0ZPUkspKQogCQlzZXRfbmV4dF9idWRkeShwc2UpOwogCiAJLyoKQEAgLTE2MzksOCArMTY1NSwyMiBAQAogCiAJQlVHX09OKCFwc2UpOwogCi0JaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKQorCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoc2UsIHBzZSkgPT0gMSkgewogCQlyZXNjaGVkX3Rhc2soY3Vycik7CisJCS8qCisJCSAqIE9ubHkgc2V0IHRoZSBiYWNrd2FyZCBidWRkeSB3aGVuIHRoZSBjdXJyZW50IHRhc2sgaXMgc3RpbGwKKwkJICogb24gdGhlIHJxLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHdha2V1cCBnZXRzIGludGVybGVhdmVkCisJCSAqIHdpdGggc2NoZWR1bGUgb24gdGhlIC0+cHJlX3NjaGVkdWxlKCkgb3IgaWRsZV9iYWxhbmNlKCkKKwkJICogcG9pbnQsIGVpdGhlciBvZiB3aGljaCBjYW4gKiBkcm9wIHRoZSBycSBsb2NrLgorCQkgKgorCQkgKiBBbHNvLCBkdXJpbmcgZWFybHkgYm9vdCB0aGUgaWRsZSB0aHJlYWQgaXMgaW4gdGhlIGZhaXIgY2xhc3MsCisJCSAqIGZvciBvYnZpb3VzIHJlYXNvbnMgaXRzIGEgYmFkIGlkZWEgdG8gc2NoZWR1bGUgYmFjayB0byBpdC4KKwkJICovCisJCWlmICh1bmxpa2VseSghc2UtPm9uX3JxIHx8IGN1cnIgPT0gcnEtPmlkbGUpKQorCQkJcmV0dXJuOworCQlpZiAoc2NoZWRfZmVhdChMQVNUX0JVRERZKSAmJiBzY2FsZSAmJiBlbnRpdHlfaXNfdGFzayhzZSkpCisJCQlzZXRfbGFzdF9idWRkeShzZSk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19mYWlyKHN0cnVjdCBycSAqcnEpCkBAIC0xNjU0LDE2ICsxNjg0LDYgQEAKIAogCWRvIHsKIAkJc2UgPSBwaWNrX25leHRfZW50aXR5KGNmc19ycSk7Ci0JCS8qCi0JCSAqIElmIHNlIHdhcyBhIGJ1ZGR5LCBjbGVhciBpdCBzbyB0aGF0IGl0IHdpbGwgaGF2ZSB0byBlYXJuCi0JCSAqIHRoZSBmYXZvdXIgYWdhaW4uCi0JCSAqCi0JCSAqIElmIHNlIHdhcyBub3QgYSBidWRkeSwgY2xlYXIgdGhlIGJ1ZGRpZXMgYmVjYXVzZSBuZWl0aGVyCi0JCSAqIHdhcyBlbGVnaWJsZSB0byBydW4sIGxldCB0aGVtIGVhcm4gaXQgYWdhaW4uCi0JCSAqCi0JCSAqIElPVy4gdW5jb25kaXRpb25hbGx5IGNsZWFyIGJ1ZGRpZXMuCi0JCSAqLwotCQlfX2NsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBOVUxMKTsKIAkJc2V0X25leHRfZW50aXR5KGNmc19ycSwgc2UpOwogCQljZnNfcnEgPSBncm91cF9jZnNfcnEoc2UpOwogCX0gd2hpbGUgKGNmc19ycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMjU1NDc1ZC4uY2UxNzc2MCAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTExMCw2ICsxMTEwLDggQEAKIAllcnIgPSBzZXNzaW9uOwogb3V0OgogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCWlmIChlcnIgPiAwKQorCQlwcm9jX3NpZF9jb25uZWN0b3IoZ3JvdXBfbGVhZGVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTQ2LDI0ICsxNTQ4LDM3IEBACiAJCQlpZiAoYXJnNCB8IGFyZzUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlzd2l0Y2ggKGFyZzIpIHsKLQkJCWNhc2UgMDoKKwkJCWNhc2UgUFJfTUNFX0tJTExfQ0xFQVI6CiAJCQkJaWYgKGFyZzMgIT0gMCkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01DRV9QUk9DRVNTOwogCQkJCWJyZWFrOwotCQkJY2FzZSAxOgorCQkJY2FzZSBQUl9NQ0VfS0lMTF9TRVQ6CiAJCQkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUNFX1BST0NFU1M7Ci0JCQkJaWYgKGFyZzMgIT0gMCkKKwkJCQlpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9FQVJMWSkKIAkJCQkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUNFX0VBUkxZOwotCQkJCWVsc2UKKwkJCQllbHNlIGlmIChhcmczID09IFBSX01DRV9LSUxMX0xBVEUpCiAJCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfRUFSTFk7CisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9ERUZBVUxUKQorCQkJCQljdXJyZW50LT5mbGFncyAmPQorCQkJCQkJfihQRl9NQ0VfRUFSTFl8UEZfTUNFX1BST0NFU1MpOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJZXJyb3IgPSAwOwogCQkJYnJlYWs7Ci0KKwkJY2FzZSBQUl9NQ0VfS0lMTF9HRVQ6CisJCQlpZiAoYXJnMiB8IGFyZzMgfCBhcmc0IHwgYXJnNSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9QUk9DRVNTKQorCQkJCWVycm9yID0gKGN1cnJlbnQtPmZsYWdzICYgUEZfTUNFX0VBUkxZKSA/CisJCQkJCVBSX01DRV9LSUxMX0VBUkxZIDogUFJfTUNFX0tJTExfTEFURTsKKwkJCWVsc2UKKwkJCQllcnJvciA9IFBSX01DRV9LSUxMX0RFRkFVTFQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bF9jaGVjay5jIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCmluZGV4IGIzODQyM2MuLmI2ZTdhYWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0xNTIxLDcgKzE1MjEsNyBAQAogCQkJaWYgKCF0YWJsZS0+Y3RsX25hbWUgJiYgdGFibGUtPnN0cmF0ZWd5KQogCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIlN0cmF0ZWd5IHdpdGhvdXQgY3RsX25hbWUiKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAJCQlpZiAodGFibGUtPnByb2NuYW1lICYmICF0YWJsZS0+cHJvY19oYW5kbGVyKQogCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIk5vIHByb2NfaGFuZGxlciIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCAwOTExMzM0Li41ZTE4YzZhIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTM5NCwxNSArMzk0LDExIEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpjczsKIAotCW11dGV4X2xvY2soJmNsb2Nrc291cmNlX211dGV4KTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZjbG9ja3NvdXJjZV9saXN0LCBsaXN0KQogCQlpZiAoY3MtPnJlc3VtZSkKIAkJCWNzLT5yZXN1bWUoKTsKIAogCWNsb2Nrc291cmNlX3Jlc3VtZV93YXRjaGRvZygpOwotCi0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IGUwZjU5YTIuLjg5YWVkNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTIzMSw2ICsyMzEsMTMgQEAKIAlpZiAoIWluaWRsZSAmJiAhdHMtPmluaWRsZSkKIAkJZ290byBlbmQ7CiAKKwkvKgorCSAqIFNldCB0cy0+aW5pZGxlIHVuY29uZGl0aW9uYWxseS4gRXZlbiBpZiB0aGUgc3lzdGVtIGRpZCBub3QKKwkgKiBzd2l0Y2ggdG8gTk9IWiBtb2RlIHRoZSBjcHUgZnJlcXVlbmN5IGdvdmVybmVycyByZWx5IG9uIHRoZQorCSAqIHVwZGF0ZSBvZiB0aGUgaWRsZSB0aW1lIGFjY291bnRpbmcgaW4gdGlja19ub2h6X3N0YXJ0X2lkbGUoKS4KKwkgKi8KKwl0cy0+aW5pZGxlID0gMTsKKwogCW5vdyA9IHRpY2tfbm9oel9zdGFydF9pZGxlKHRzKTsKIAogCS8qCkBAIC0yNDgsOCArMjU1LDYgQEAKIAlpZiAodW5saWtlbHkodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSU5BQ1RJVkUpKQogCQlnb3RvIGVuZDsKIAotCXRzLT5pbmlkbGUgPSAxOwotCiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlnb3RvIGVuZDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggZmIwZjQ2Zi4uYzNhNGUyOSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwppbmRleCBmZGRkNjlkLi4xYjViN2FhIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgdGltZXJfbGlzdF9zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGltZXJfbGlzdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGltZXJfbGlzdF9mb3BzID0gewogCS5vcGVuCQk9IHRpbWVyX2xpc3Rfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCmluZGV4IDRjZGU4YjkuLmVlNTY4MWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHRzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSB0c3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gdHN0YXRzX3dyaXRlLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCAzZWIxNTljLi5kOWQ2MjA2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtODU2LDYgKzg1NiwzNyBAQAogfQogCiAvKioKKyAqIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAgLSBBZGQgYSB0cmFjZSBmb3IgYSByZXF1ZXN0LXJlbWFwIG9wZXJhdGlvbgorICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCisgKiBAcnE6CQl0aGUgc291cmNlIHJlcXVlc3QKKyAqIEBkZXY6CXRhcmdldCBkZXZpY2UKKyAqIEBmcm9tOglzb3VyY2Ugc2VjdG9yCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgRGV2aWNlIG1hcHBlciByZW1hcHMgcmVxdWVzdCB0byBvdGhlciBkZXZpY2VzLgorICogICAgIEFkZCBhIHRyYWNlIGZvciB0aGF0IGFjdGlvbi4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlbWFwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCSAgIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LAorCQkJCSAgIHNlY3Rvcl90IGZyb20pCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisJc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlyLmRldmljZV9mcm9tID0gY3B1X3RvX2JlMzIoZGV2KTsKKwlyLmRldmljZV90byAgID0gY3B1X3RvX2JlMzIoZGlza19kZXZ0KHJxLT5ycV9kaXNrKSk7CisJci5zZWN0b3JfZnJvbSA9IGNwdV90b19iZTY0KGZyb20pOworCisJX19ibGtfYWRkX3RyYWNlKGJ0LCBibGtfcnFfcG9zKHJxKSwgYmxrX3JxX2J5dGVzKHJxKSwKKwkJCXJxX2RhdGFfZGlyKHJxKSwgQkxLX1RBX1JFTUFQLCAhIXJxLT5lcnJvcnMsCisJCQlzaXplb2YociksICZyKTsKK30KKworLyoqCiAgKiBibGtfYWRkX2RyaXZlcl9kYXRhIC0gQWRkIGJpbmFyeSBtZXNzYWdlIHdpdGggZHJpdmVyLXNwZWNpZmljIGRhdGEKICAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgogICogQHJxOgkJaW8gcmVxdWVzdApAQCAtOTIyLDEwICs5NTMsMTMgQEAKIAlXQVJOX09OKHJldCk7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7CiAJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlbWFwKGJsa19hZGRfdHJhY2VfcnFfcmVtYXApOworCVdBUk5fT04ocmV0KTsKIH0KIAogc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKIHsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlbWFwKGJsa19hZGRfdHJhY2VfcnFfcmVtYXApOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7CkBAIC0xNjU3LDYgKzE2OTEsMTEgQEAKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZibGtfdHJhY2VfYXR0cl9ncm91cCk7CiB9CiAKK3ZvaWQgYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZibGtfdHJhY2VfYXR0cl9ncm91cCk7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSAqLwogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCBhMTQyNTc5Li42ZGM0ZTVlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC0yMjUsNyArMjI1LDExIEBACiAJaWYgKGZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9PSBmdHJhY2Vfc3R1YikKIAkJcmV0dXJuOwogCisjaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKIAlmdW5jID0gZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOworI2Vsc2UKKwlmdW5jID0gX19mdHJhY2VfdHJhY2VfZnVuY3Rpb247CisjZW5kaWYKIAogCWlmIChmdHJhY2VfcGlkX3RyYWNlKSB7CiAJCXNldF9mdHJhY2VfcGlkX2Z1bmN0aW9uKGZ1bmMpOwpAQCAtNzM2LDcgKzc0MCw3IEBACiAgb3V0OgogCW11dGV4X3VubG9jaygmZnRyYWNlX3Byb2ZpbGVfbG9jayk7CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJcmV0dXJuIGNudDsKIH0KQEAgLTEwNzQsMTQgKzEwNzgsOSBAQAogCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOwogCQlpZiAoZmFpbGVkKSB7CiAJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7Ci0JCQlpZiAoKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgfHwKLQkJCSAgICAhY29yZV9rZXJuZWxfdGV4dChyZWMtPmlwKSkgewotCQkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHJlYy0+aXApOwotCQkJCQkvKiBTdG9wIHByb2Nlc3NpbmcgKi8KLQkJCQkJcmV0dXJuOwotCQkJCX0KKwkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKKwkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLworCQkJcmV0dXJuOwogCQl9CiAJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CiB9CkBAIC0xNjIxLDggKzE2MjAsMTAgQEAKIAkJaWYgKCFyZXQpIHsKIAkJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJCW0tPnByaXZhdGUgPSBpdGVyOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCXRyYWNlX3BhcnNlcl9wdXQoJml0ZXItPnBhcnNlcik7CiAJCQlrZnJlZShpdGVyKTsKKwkJfQogCX0gZWxzZQogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpdGVyOwogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwpAQCAtMjIwMiw3ICsyMjAzLDcgQEAKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyICpwYXJzZXI7CiAJc3NpemVfdCByZXQsIHJlYWQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKQEAgLTIyMTYsMjAgKzIyMTcsMjAgQEAKIAlwYXJzZXIgPSAmaXRlci0+cGFyc2VyOwogCXJlYWQgPSB0cmFjZV9nZXRfdXNlcihwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZChwYXJzZXIpICYmCisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKHBhcnNlcikgJiYKIAkgICAgIXRyYWNlX3BhcnNlcl9jb250KHBhcnNlcikpIHsKIAkJcmV0ID0gZnRyYWNlX3Byb2Nlc3NfcmVnZXgocGFyc2VyLT5idWZmZXIsCiAJCQkJCSAgIHBhcnNlci0+aWR4LCBlbmFibGUpOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJdHJhY2VfcGFyc2VyX2NsZWFyKHBhcnNlcik7CiAJfQogCiAJcmV0ID0gcmVhZDsKLQorb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKLW91dDoKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI1NTIsOCArMjU1Myw3IEBACiAJCSAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyIHBhcnNlcjsKLQlzaXplX3QgcmVhZCA9IDA7Ci0Jc3NpemVfdCByZXQ7CisJc3NpemVfdCByZWFkLCByZXQ7CiAKIAlpZiAoIWNudCB8fCBjbnQgPCAwKQogCQlyZXR1cm4gMDsKQEAgLTI1NjIsMjkgKzI1NjIsMzEgQEAKIAogCWlmIChmdHJhY2VfZ3JhcGhfY291bnQgPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykgewogCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKHRyYWNlX3BhcnNlcl9nZXRfaW5pdCgmcGFyc2VyLCBGVFJBQ0VfQlVGRl9NQVgpKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJcmVhZCA9IHRyYWNlX2dldF91c2VyKCZwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKIAkJcGFyc2VyLmJ1ZmZlcltwYXJzZXIuaWR4XSA9IDA7CiAKIAkJLyogd2UgYWxsb3cgb25seSBvbmUgZXhwcmVzc2lvbiBhdCBhIHRpbWUgKi8KIAkJcmV0ID0gZnRyYWNlX3NldF9mdW5jKGZ0cmFjZV9ncmFwaF9mdW5jcywgJmZ0cmFjZV9ncmFwaF9jb3VudCwKIAkJCQkJcGFyc2VyLmJ1ZmZlcik7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJcmV0ID0gcmVhZDsKLSBvdXQ6CisKK291dF9mcmVlOgogCXRyYWNlX3BhcnNlcl9wdXQoJnBhcnNlcik7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZ3JhcGhfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjY1NSwxOSArMjY1NywxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLXZvaWQgZnRyYWNlX3JlbGVhc2Uodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3ZvaWQgZnRyYWNlX3JlbGVhc2VfbW9kKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7Ci0JdW5zaWduZWQgbG9uZyBzID0gKHVuc2lnbmVkIGxvbmcpc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlID0gKHVuc2lnbmVkIGxvbmcpZW5kOwogCi0JaWYgKGZ0cmFjZV9kaXNhYmxlZCB8fCAhc3RhcnQgfHwgc3RhcnQgPT0gZW5kKQorCWlmIChmdHJhY2VfZGlzYWJsZWQpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKLQkJaWYgKChyZWMtPmlwID49IHMpICYmIChyZWMtPmlwIDwgZSkpIHsKKwkJaWYgKHdpdGhpbl9tb2R1bGVfY29yZShyZWMtPmlwLCBtb2QpKSB7CiAJCQkvKgogCQkJICogcmVjLT5pcCBpcyBjaGFuZ2VkIGluIGZ0cmFjZV9mcmVlX3JlYygpCiAJCQkgKiBJdCBzaG91bGQgbm90IGJldHdlZW4gcyBhbmQgZSBpZiByZWNvcmQgd2FzIGZyZWVkLgpAQCAtMjY5OSw5ICsyNjk5LDcgQEAKIAkJCQkgICBtb2QtPm51bV9mdHJhY2VfY2FsbHNpdGVzKTsKIAkJYnJlYWs7CiAJY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6Ci0JCWZ0cmFjZV9yZWxlYXNlKG1vZC0+ZnRyYWNlX2NhbGxzaXRlcywKLQkJCSAgICAgICBtb2QtPmZ0cmFjZV9jYWxsc2l0ZXMgKwotCQkJICAgICAgIG1vZC0+bnVtX2Z0cmFjZV9jYWxsc2l0ZXMpOworCQlmdHJhY2VfcmVsZWFzZV9tb2QobW9kKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKaW5kZXggODFiMTY0NS4uYTkxZGE2OSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICghcmVnaXN0ZXJfdHJhY2VyKCZrbWVtX3RyYWNlcikpIHsKKwlpZiAocmVnaXN0ZXJfdHJhY2VyKCZrbWVtX3RyYWNlcikgIT0gMCkgewogCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgdGhlIGttZW0gdHJhY2VyXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBkNGZmMDE5Li41ZGQwMTdmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAvKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLwogI2RlZmluZSBERUJVR19TSElGVCAwCiAKLXN0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCitzdGF0aWMgaW5saW5lIHU2NCByYl90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKQogewogCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCiAJcmV0dXJuIGJ1ZmZlci0+Y2xvY2soKSA8PCBERUJVR19TSElGVDsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCXU2NCB0aW1lOwogCiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIsIGNwdSk7CisJdGltZSA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKIAogCXJldHVybiB0aW1lOwpAQCAtNTk5LDcgKzU5OSw3IEBACiB9CiAKIC8qCi0gKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlIHBhZ2UgaXMgdGhlIGhlYWQgcGFnZQorICogcmJfaXNfaGVhZF9wYWdlIC0gdGVzdCBpZiB0aGUgZ2l2ZW4gcGFnZSBpcyB0aGUgaGVhZCBwYWdlCiAgKgogICogQmVjYXVzZSB0aGUgcmVhZGVyIG1heSBtb3ZlIHRoZSBoZWFkX3BhZ2UgcG9pbnRlciwgd2UgY2FuCiAgKiBub3QgdHJ1c3Qgd2hhdCB0aGUgaGVhZCBwYWdlIGlzIChpdCBtYXkgYmUgcG9pbnRpbmcgdG8KQEAgLTExOTMsNiArMTE5Myw3IEBACiAJYXRvbWljX2luYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCisJc3Bpbl9sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCXJiX2hlYWRfcGFnZV9kZWFjdGl2YXRlKGNwdV9idWZmZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKQEAgLTEyMDcsNiArMTIwOCw3IEBACiAJCXJldHVybjsKIAogCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKwlzcGluX3VubG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAogCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOwogCkBAIC0xODY4LDcgKzE4NzAsNyBAQAogCQkgKiBOZXN0ZWQgY29tbWl0cyBhbHdheXMgaGF2ZSB6ZXJvIGRlbHRhcywgc28KIAkJICoganVzdCByZXJlYWQgdGhlIHRpbWUgc3RhbXAKIAkJICovCi0JCSp0cyA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOworCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlcik7CiAJCW5leHRfcGFnZS0+cGFnZS0+dGltZV9zdGFtcCA9ICp0czsKIAl9CiAKQEAgLTIxMTEsNyArMjExMyw3IEBACiAJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgKytucl9sb29wcyA+IDEwMDApKQogCQlnb3RvIG91dF9mYWlsOwogCi0JdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwl0cyA9IHJiX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+YnVmZmVyKTsKIAogCS8qCiAJICogT25seSB0aGUgZmlyc3QgY29tbWl0IGNhbiB1cGRhdGUgdGhlIHRpbWVzdGFtcC4KQEAgLTI2ODEsNyArMjY4Myw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzKTsKIAogLyoqCi0gKiByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlcgorICogcmluZ19idWZmZXJfb3ZlcnJ1bnMgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKICAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlcgogICoKICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBvdmVycnVucyBpbiB0aGUgcmluZyBidWZmZXIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggNDExYWYzNy4uYjIwZDNlYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCiAJLyogcmVhZCB0aGUgbm9uLXNwYWNlIGlucHV0ICovCiAJd2hpbGUgKGNudCAmJiAhaXNzcGFjZShjaCkpIHsKLQkJaWYgKHBhcnNlci0+aWR4IDwgcGFyc2VyLT5zaXplKQorCQlpZiAocGFyc2VyLT5pZHggPCBwYXJzZXItPnNpemUgLSAxKQogCQkJcGFyc2VyLT5idWZmZXJbcGFyc2VyLT5pZHgrK10gPSBjaDsKIAkJZWxzZSB7CiAJCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTM5Myw3ICsxMzkzLDcgQEAKIAogaW50IHRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7Ci0JcmV0dXJuIHRyYWNlX2FycmF5X3ByaW50aygmZ2xvYmFsX3RyYWNlLCBpcCwgZm10LCBhcmdzKTsKKwlyZXR1cm4gdHJhY2VfYXJyYXlfdnByaW50aygmZ2xvYmFsX3RyYWNlLCBpcCwgZm10LCBhcmdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZwcmludGspOwogCkBAIC0yNDQwLDcgKzI0NDAsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJcmV0dXJuIGNudDsKIH0KQEAgLTI1ODIsNyArMjU4Miw3IEBACiAJfQogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJcmV0dXJuIGNudDsKIH0KQEAgLTI3NjQsNyArMjc2NCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWZpbHAtPmZfcG9zICs9IHJldDsKKwkqcHBvcyArPSByZXQ7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzI5OSw3ICszMjk5LDcgQEAKIAkJfQogCX0KIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAkvKiBJZiBjaGVjayBwYWdlcyBmYWlsZWQsIHJldHVybiBFTk9NRU0gKi8KIAlpZiAodHJhY2luZ19kaXNhYmxlZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwppbmRleCA3YTdhOWZkLi40YTE5NGYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCkBAIC0zNCw2ICszNCw3IEBACiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGJyYW5jaF90cmFjZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfYnJhbmNoICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUsIHBjOwogCWNvbnN0IGNoYXIgKnA7CkBAIC01NCw3ICs1NSw4IEBACiAJCWdvdG8gb3V0OwogCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CUkFOQ0gsCisJYnVmZmVyID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CUkFOQ0gsCiAJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CkBAIC03NCw4ICs3Niw4IEBACiAJZW50cnktPmxpbmUgPSBmLT5saW5lOwogCWVudHJ5LT5jb3JyZWN0ID0gdmFsID09IGV4cGVjdDsKIAotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKICBvdXQ6CiAJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggZGQ0NGI4Ny4uOGQ1YzE3MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC0zMSw3ICszMSw3IEBACiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZldmVudC0+cHJvZmlsZV9jb3VudCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KyspIHsKKwlpZiAoIXRvdGFsX3Byb2ZpbGVfY291bnQpIHsKIAkJYnVmID0gKGNoYXIgKilhbGxvY19wZXJjcHUocHJvZmlsZV9idWZfdCk7CiAJCWlmICghYnVmKQogCQkJZ290byBmYWlsX2J1ZjsKQEAgLTQ2LDE0ICs0NiwxOSBAQAogCX0KIAogCXJldCA9IGV2ZW50LT5wcm9maWxlX2VuYWJsZSgpOwotCWlmICghcmV0KQorCWlmICghcmV0KSB7CisJCXRvdGFsX3Byb2ZpbGVfY291bnQrKzsKIAkJcmV0dXJuIDA7CisJfQogCi0Ja2ZyZWUodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKIGZhaWxfYnVmX25taToKLQlrZnJlZSh0cmFjZV9wcm9maWxlX2J1Zik7CisJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7CisJCWZyZWVfcGVyY3B1KHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CisJCWZyZWVfcGVyY3B1KHRyYWNlX3Byb2ZpbGVfYnVmKTsKKwkJdHJhY2VfcHJvZmlsZV9idWZfbm1pID0gTlVMTDsKKwkJdHJhY2VfcHJvZmlsZV9idWYgPSBOVUxMOworCX0KIGZhaWxfYnVmOgotCXRvdGFsX3Byb2ZpbGVfY291bnQtLTsKIAlhdG9taWNfZGVjKCZldmVudC0+cHJvZmlsZV9jb3VudCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDZmMDNjOGEuLmQxMjhmNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTIzMiwxMCArMjMyLDkgQEAKIAkJICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9wYXJzZXIgcGFyc2VyOwotCXNpemVfdCByZWFkID0gMDsKLQlzc2l6ZV90IHJldDsKKwlzc2l6ZV90IHJlYWQsIHJldDsKIAotCWlmICghY250IHx8IGNudCA8IDApCisJaWYgKCFjbnQpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gdHJhY2luZ191cGRhdGVfYnVmZmVycygpOwpAQCAtMjQ3LDcgKzI0Niw3IEBACiAKIAlyZWFkID0gdHJhY2VfZ2V0X3VzZXIoJnBhcnNlciwgdWJ1ZiwgY250LCBwcG9zKTsKIAotCWlmICh0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKKwlpZiAocmVhZCA+PSAwICYmIHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgewogCQlpbnQgc2V0ID0gMTsKIAogCQlpZiAoKnBhcnNlci5idWZmZXIgPT0gJyEnKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggMjMyNDU3OC4uOThhNmNjNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC05MzMsOCArOTMzLDkgQEAKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHMtPnBvc3RmaXgpKSB7CiAJCWVsdCA9IGxpc3RfZmlyc3RfZW50cnkoJnBzLT5wb3N0Zml4LCBzdHJ1Y3QgcG9zdGZpeF9lbHQsIGxpc3QpOwotCQlrZnJlZShlbHQtPm9wZXJhbmQpOwogCQlsaXN0X2RlbCgmZWx0LT5saXN0KTsKKwkJa2ZyZWUoZWx0LT5vcGVyYW5kKTsKKwkJa2ZyZWUoZWx0KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKaW5kZXggMjNiNjM4NS4uNjk1NDNhOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKQEAgLTE2NSw2ICsxNjUsNyBAQAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9od19icmFuY2g7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGh3X2JyYW5jaF90cmFjZTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmOwogCXN0cnVjdCBod19icmFuY2hfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgaXJxMTsKIAlpbnQgY3B1OwpAQCAtMTgwLDcgKzE4MSw4IEBACiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCkgIT0gMSkKIAkJZ290byBvdXQ7CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0hXX0JSQU5DSEVTLAorCWJ1ZiA9IHRyLT5idWZmZXI7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZiwgVFJBQ0VfSFdfQlJBTkNIRVMsCiAJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwpAQCAtMTg5LDggKzE5MSw4IEBACiAJZW50cnktPmVudC50eXBlID0gVFJBQ0VfSFdfQlJBTkNIRVM7CiAJZW50cnktPmZyb20gPSBmcm9tOwogCWVudHJ5LT50byAgID0gdG87Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgdHItPmJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZiwgZXZlbnQpKQorCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWYsIGV2ZW50LCAwLCAwKTsKIAogIG91dDoKIAlhdG9taWNfZGVjKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKaW5kZXggZjU3MmY0NC4uYjZjMTJjNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtNjksNiArNjksOSBAQAogICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKICAqIEBmbXQ6IHByaW50ZiBmb3JtYXQgc3RyaW5nCiAgKgorICogSXQgcmV0dXJucyAwIGlmIHRoZSB0cmFjZSBvdmVyc2l6ZXMgdGhlIGJ1ZmZlcidzIGZyZWUKKyAqIHNwYWNlLCAxIG90aGVyd2lzZS4KKyAqCiAgKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgogICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUbyBzaW1wbGlmeSBmb3JtYXRpbmcgb2YgYSB0cmFjZQogICogdHJhY2Vfc2VxX3ByaW50ZiBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKQEAgLTk1LDcgKzk4LDcgQEAKIAogCXMtPmxlbiArPSByZXQ7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX3ByaW50Zik7CiAKQEAgLTQ4NiwxNiArNDg5LDE4IEBACiAJCQkJaGFyZGlycSA/ICdoJyA6IHNvZnRpcnEgPyAncycgOiAnLicpKQogCQlyZXR1cm4gMDsKIAotCWlmIChlbnRyeS0+bG9ja19kZXB0aCA8IDApCi0JCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICcuJyk7CisJaWYgKGVudHJ5LT5wcmVlbXB0X2NvdW50KQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIleCIsIGVudHJ5LT5wcmVlbXB0X2NvdW50KTsKIAllbHNlCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgZW50cnktPmxvY2tfZGVwdGgpOworCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCi0JaWYgKGVudHJ5LT5wcmVlbXB0X2NvdW50KQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7Ci0JcmV0dXJuIHRyYWNlX3NlcV9wdXRjKHMsICcuJyk7CisJaWYgKGVudHJ5LT5sb2NrX2RlcHRoIDwgMCkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wdXRjKHMsICcuJyk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQiLCBlbnRyeS0+bG9ja19kZXB0aCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTg4Myw3ICs4ODgsNyBAQAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCiAJaWYgKCFTKQotCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKIAlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiVkICVkICVjICVkICVkICVkICVjXG4iLAogCQkJICAgICAgZmllbGQtPnByZXZfcGlkLApAQCAtOTE4LDcgKzkyMyw3IEBACiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CiAKIAlpZiAoIVMpCi0JCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CisJCVMgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwogCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwogCiAJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IDlmYmNlNmMuLjUyN2UxN2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKIAkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIsCiAJCQkgICAgICAgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldCkpOworCQkJICAgICAgIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQodW5zaWduZWQgbG9uZywgcmV0KSwgMCwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgU1lTQ0FMTF9GSUVMRChsb25nLCByZXQpLCAwLAogCQkJCSBGSUxURVJfT1RIRVIpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IDJjMDAwZTcuLjQ2ZDAxNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMzMwLDkgKzMzMCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZyZWVfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZ1cC0+d29yaywgY2xlYW51cF91c2VyX3N0cnVjdCk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ1cC0+d29yaywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKICNlbHNlCS8qIENPTkZJR19VU0VSX1NDSEVEICYmIENPTkZJR19TWVNGUyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IGFkZGZlMmQuLjY3ZTUyNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTY0MCw2ICs2NDAsMjQgQEAKIEVYUE9SVF9TWU1CT0woc2NoZWR1bGVfZGVsYXllZF93b3JrKTsKIAogLyoqCisgKiBmbHVzaF9kZWxheWVkX3dvcmsgLSBibG9jayB1bnRpbCBhIGR3b3JrX3N0cnVjdCdzIGNhbGxiYWNrIGhhcyB0ZXJtaW5hdGVkCisgKiBAZHdvcms6IHRoZSBkZWxheWVkIHdvcmsgd2hpY2ggaXMgdG8gYmUgZmx1c2hlZAorICoKKyAqIEFueSB0aW1lb3V0IGlzIGNhbmNlbGxlZCwgYW5kIGFueSBwZW5kaW5nIHdvcmsgaXMgcnVuIGltbWVkaWF0ZWx5LgorICovCit2b2lkIGZsdXNoX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKK3sKKwlpZiAoZGVsX3RpbWVyX3N5bmMoJmR3b3JrLT50aW1lcikpIHsKKwkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7CisJCWN3cSA9IHdxX3Blcl9jcHUoa2V2ZW50ZF93cSwgZ2V0X2NwdSgpKTsKKwkJX19xdWV1ZV93b3JrKGN3cSwgJmR3b3JrLT53b3JrKTsKKwkJcHV0X2NwdSgpOworCX0KKwlmbHVzaF93b3JrKCZkd29yay0+d29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RlbGF5ZWRfd29yayk7CisKKy8qKgogICogc2NoZWR1bGVfZGVsYXllZF93b3JrX29uIC0gcXVldWUgd29yayBpbiBnbG9iYWwgd29ya3F1ZXVlIG9uIENQVSBhZnRlciBkZWxheQogICogQGNwdTogY3B1IHRvIHVzZQogICogQGR3b3JrOiBqb2IgdG8gYmUgZG9uZQpAQCAtNjY3LDYgKzY4NSw3IEBACiBpbnQgc2NoZWR1bGVfb25fZWFjaF9jcHUod29ya19mdW5jX3QgZnVuYykKIHsKIAlpbnQgY3B1OworCWludCBvcmlnID0gLTE7CiAJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrczsKIAogCXdvcmtzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCk7CkBAIC02NzQsMTQgKzY5MywyOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWdldF9vbmxpbmVfY3B1cygpOworCisJLyoKKwkgKiBXaGVuIHJ1bm5pbmcgaW4ga2V2ZW50ZCBkb24ndCBzY2hlZHVsZSBhIHdvcmsgaXRlbSBvbgorCSAqIGl0c2VsZi4gIENhbiBqdXN0IGNhbGwgZGlyZWN0bHkgYmVjYXVzZSB0aGUgd29yayBxdWV1ZSBpcworCSAqIGFscmVhZHkgYm91bmQuICBUaGlzIGFsc28gaXMgZmFzdGVyLgorCSAqLworCWlmIChjdXJyZW50X2lzX2tldmVudGQoKSkKKwkJb3JpZyA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSBwZXJfY3B1X3B0cih3b3JrcywgY3B1KTsKIAogCQlJTklUX1dPUksod29yaywgZnVuYyk7Ci0JCXNjaGVkdWxlX3dvcmtfb24oY3B1LCB3b3JrKTsKKwkJaWYgKGNwdSAhPSBvcmlnKQorCQkJc2NoZWR1bGVfd29ya19vbihjcHUsIHdvcmspOwogCX0KKwlpZiAob3JpZyA+PSAwKQorCQlmdW5jKHBlcl9jcHVfcHRyKHdvcmtzLCBvcmlnKSk7CisKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJZmx1c2hfd29yayhwZXJfY3B1X3B0cih3b3JrcywgY3B1KSk7CisKIAlwdXRfb25saW5lX2NwdXMoKTsKIAlmcmVlX3BlcmNwdSh3b3Jrcyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDg5MTE1NTguLjIzNGNlYjEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNDYsOCArMzQ2LDkgQEAKIAogY29uZmlnIERFQlVHX0tNRU1MRUFLCiAJYm9vbCAiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAoWDg2IHx8IEFSTSB8fCBQUEMpICYmIFwKLQkJIU1FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmICFNRU1PUllfSE9UUExVRyAmJiBcCisJCShYODYgfHwgQVJNIHx8IFBQQyB8fCBTMzkwKQorCiAJc2VsZWN0IERFQlVHX0ZTIGlmIFNZU0ZTCiAJc2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJc2VsZWN0IEtBTExTWU1TCkBAIC0zNzAsNyArMzcxLDcgQEAKIGNvbmZpZyBERUJVR19LTUVNTEVBS19FQVJMWV9MT0dfU0laRQogCWludCAiTWF4aW11bSBrbWVtbGVhayBlYXJseSBsb2cgZW50cmllcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tNRU1MRUFLCi0JcmFuZ2UgMjAwIDIwMDAKKwlyYW5nZSAyMDAgNDAwMDAKIAlkZWZhdWx0IDQwMAogCWhlbHAKIAkgIEttZW1sZWFrIG11c3QgdHJhY2sgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gYXZvaWQKQEAgLTM5MSw3ICszOTIsNyBAQAogCiBjb25maWcgREVCVUdfUFJFRU1QVAogCWJvb2wgIkRlYnVnIHByZWVtcHRpYmxlIGtlcm5lbCIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIChUUkFDRV9JUlFGTEFHU19TVVBQT1JUIHx8IFBQQzY0KQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHVzZSBhIGRlYnVnIHZhcmlhbnQgb2YgdGhlCmRpZmYgLS1naXQgYS9saWIvZGVidWdvYmplY3RzLmMgYi9saWIvZGVidWdvYmplY3RzLmMKaW5kZXggMjc1NWEzYi4uZWFlNTZmZCAxMDA2NDQKLS0tIGEvbGliL2RlYnVnb2JqZWN0cy5jCisrKyBiL2xpYi9kZWJ1Z29iamVjdHMuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgpkaWZmIC0tZ2l0IGEvbGliL2RtYS1kZWJ1Zy5jIGIvbGliL2RtYS1kZWJ1Zy5jCmluZGV4IDU4YTlmOWYuLmNlNmI3ZWEgMTAwNjQ0Ci0tLSBhL2xpYi9kbWEtZGVidWcuYworKysgYi9saWIvZG1hLWRlYnVnLmMKQEAgLTgxOSw5ICs4MTksMTEgQEAKIAkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKIAkJCSAgICJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IENQVSBhZGRyZXNzICIKIAkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCi0JCQkgICAiW2NwdSBhbGxvYyBhZGRyZXNzPSVwXSBbY3B1IGZyZWUgYWRkcmVzcz0lcF0iLAorCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0weCUwMTZsbHhdICIKKwkJCSAgICJbY3B1IGZyZWUgYWRkcmVzcz0weCUwMTZsbHhdIiwKIAkJCSAgIHJlZi0+ZGV2X2FkZHIsIHJlZi0+c2l6ZSwKLQkJCSAgICh2b2lkICopZW50cnktPnBhZGRyLCAodm9pZCAqKXJlZi0+cGFkZHIpOworCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllbnRyeS0+cGFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZi0+cGFkZHIpOwogCX0KIAogCWlmIChyZWYtPnNnX2NhbGxfZW50cyAmJiByZWYtPnR5cGUgPT0gZG1hX2RlYnVnX3NnICYmCmRpZmYgLS1naXQgYS9saWIvZmF1bHQtaW5qZWN0LmMgYi9saWIvZmF1bHQtaW5qZWN0LmMKaW5kZXggZjk3YWY1NWIuLjdlNjVhZjcgMTAwNjQ0Ci0tLSBhL2xpYi9mYXVsdC1pbmplY3QuYworKysgYi9saWIvZmF1bHQtaW5qZWN0LmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCBiMTliODdhLi5lOTY0MjFhIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0yNDYsMTMgKzI0NiwxNyBAQAogI3VuZGVmIHN0cmNtcAogaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpCiB7Ci0Jc2lnbmVkIGNoYXIgX19yZXM7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKIAl3aGlsZSAoMSkgewotCQlpZiAoKF9fcmVzID0gKmNzIC0gKmN0KyspICE9IDAgfHwgISpjcysrKQorCQljMSA9ICpjcysrOworCQljMiA9ICpjdCsrOworCQlpZiAoYzEgIT0gYzIpCisJCQlyZXR1cm4gYzEgPCBjMiA/IC0xIDogMTsKKwkJaWYgKCFjMSkKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gX19yZXM7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHN0cmNtcCk7CiAjZW5kaWYKQEAgLTI2NiwxNCArMjcwLDE4IEBACiAgKi8KIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCwgc2l6ZV90IGNvdW50KQogewotCXNpZ25lZCBjaGFyIF9fcmVzID0gMDsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogCXdoaWxlIChjb3VudCkgewotCQlpZiAoKF9fcmVzID0gKmNzIC0gKmN0KyspICE9IDAgfHwgISpjcysrKQorCQljMSA9ICpjcysrOworCQljMiA9ICpjdCsrOworCQlpZiAoYzEgIT0gYzIpCisJCQlyZXR1cm4gYzEgPCBjMiA/IC0xIDogMTsKKwkJaWYgKCFjMSkKIAkJCWJyZWFrOwogCQljb3VudC0tOwogCX0KLQlyZXR1cm4gX19yZXM7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHN0cm5jbXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGI5MTgzOWUuLjMzYmVkNWUgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0xNzcxLDcgKzE3NzEsNyBAQAogCQkgKiBhZHZhbmNlIGJvdGggc3RyaW5ncyB0byBuZXh0IHdoaXRlIHNwYWNlCiAJCSAqLwogCQlpZiAoKmZtdCA9PSAnKicpIHsKLQkJCXdoaWxlICghaXNzcGFjZSgqZm10KSAmJiAqZm10KQorCQkJd2hpbGUgKCFpc3NwYWNlKCpmbXQpICYmICpmbXQgIT0gJyUnICYmICpmbXQpCiAJCQkJZm10Kys7CiAJCQl3aGlsZSAoIWlzc3BhY2UoKnN0cikgJiYgKnN0cikKIAkJCQlzdHIrKzsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDI0Nzc2MDcuLjQ0Y2Y2ZjAgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtNjcsNyArNjcsNyBAQAogCiBjb25maWcgU1BBUlNFTUVNCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU1BBUlNFTUVNX01BTlVBTAorCWRlcGVuZHMgb24gKCFTRUxFQ1RfTUVNT1JZX01PREVMICYmIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSkgfHwgU1BBUlNFTUVNX01BTlVBTAogCiBjb25maWcgRkxBVE1FTQogCWRlZl9ib29sIHkKQEAgLTEyOCwxMSArMTI4LDggQEAKIGNvbmZpZyBNRU1PUllfSE9UUExVRwogCWJvb2wgIkFsbG93IGZvciBtZW1vcnkgaG90LWFkZCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSB8fCBYODZfNjRfQUNQSV9OVU1BCi0JZGVwZW5kcyBvbiBIT1RQTFVHICYmICEoSElCRVJOQVRJT04gJiYgIVMzOTApICYmIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCi0JZGVwZW5kcyBvbiAoSUE2NCB8fCBYODYgfHwgUFBDNjQgfHwgU1VQRVJIIHx8IFMzOTApCi0KLWNvbW1lbnQgIk1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kIgotCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmIEhPVFBMVUcgJiYgSElCRVJOQVRJT04gJiYgIVMzOTAKKwlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKKwlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUENfQk9PSzNTXzY0IHx8IFNVUEVSSCB8fCBTMzkwKQogCiBjb25maWcgTUVNT1JZX0hPVFBMVUdfU1BBUlNFCiAJZGVmX2Jvb2wgeQpAQCAtMjI0LDcgKzIyMSw5IEBACiAJICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcmVzaWRlbnQgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc28KIAkgIHNhdmluZyBtZW1vcnkgdW50aWwgb25lIG9yIGFub3RoZXIgYXBwIG5lZWRzIHRvIG1vZGlmeSB0aGUgY29udGVudC4KIAkgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLgotCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb246IEtTTSBpcyBpbmFjdGl2ZQorCSAgdW50aWwgYSBwcm9ncmFtIGhhcyBtYWR2aXNlZCB0aGF0IGFuIGFyZWEgaXMgTUFEVl9NRVJHRUFCTEUsIGFuZAorCSAgcm9vdCBoYXMgc2V0IC9zeXMva2VybmVsL21tL2tzbS9ydW4gdG8gMSAoaWYgQ09ORklHX1NZU0ZTIGlzIHNldCkuCiAKIGNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFIKICAgICAgICAgaW50ICJMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uIgpAQCAtMjQ0LDEwICsyNDMsMTIgQEAKIAkgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYm9vdCB1c2luZyB0aGUKIAkgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuCiAKK2NvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFCisJYm9vbAogCiBjb25maWcgTUVNT1JZX0ZBSUxVUkUKIAlkZXBlbmRzIG9uIE1NVQotCWRlcGVuZHMgb24gWDg2X01DRQorCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRQogCWJvb2wgIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnMiCiAJaGVscAogCSAgRW5hYmxlcyBjb2RlIHRvIHJlY292ZXIgZnJvbSBzb21lIG1lbW9yeSBmYWlsdXJlcyBvbiBzeXN0ZW1zCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDUxNWZkNzkuLmViZjg0OTAgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC01LDE0ICs1LDE0IEBACiBtbXUteQkJCTo9IG5vbW11Lm8KIG1tdS0kKENPTkZJR19NTVUpCTo9IGZyZW1hcC5vIGhpZ2htZW0ubyBtYWR2aXNlLm8gbWVtb3J5Lm8gbWluY29yZS5vIFwKIAkJCSAgIG1sb2NrLm8gbW1hcC5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gbXN5bmMubyBybWFwLm8gXAotCQkJICAgdm1hbGxvYy5vCisJCQkgICB2bWFsbG9jLm8gcGFnZXdhbGsubwogCiBvYmoteQkJCTo9IGJvb3RtZW0ubyBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFwKIAkJCSAgIG1hY2Nlc3MubyBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBcCiAJCQkgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaG1lbS5vIFwKIAkJCSAgIHByaW9fdHJlZS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFwKIAkJCSAgIHBhZ2VfaXNvbGF0aW9uLm8gbW1faW5pdC5vIG1tdV9jb250ZXh0Lm8gXAotCQkJICAgcGFnZXdhbGsubyAkKG1tdS15KQorCQkJICAgJChtbXUteSkKIG9iai15ICs9IGluaXQtbW0ubwogCiBvYmotJChDT05GSUdfQk9VTkNFKQkrPSBib3VuY2UubwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggM2QzYWNjYi4uMTFhZWUwOSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC05Miw3ICs5Miw3IEBACiAJCSAgICJCZGlEaXJ0eVRocmVzaDogICAlOGx1IGtCXG4iCiAJCSAgICJEaXJ0eVRocmVzaDogICAgICAlOGx1IGtCXG4iCiAJCSAgICJCYWNrZ3JvdW5kVGhyZXNoOiAlOGx1IGtCXG4iCi0JCSAgICJXcml0ZUJhY2sgdGhyZWFkczolOGx1XG4iCisJCSAgICJXcml0ZWJhY2tUaHJlYWRzOiAlOGx1XG4iCiAJCSAgICJiX2RpcnR5OiAgICAgICAgICAlOGx1XG4iCiAJCSAgICJiX2lvOiAgICAgICAgICAgICAlOGx1XG4iCiAJCSAgICJiX21vcmVfaW86ICAgICAgICAlOGx1XG4iCkBAIC02MTAsOSArNjEwLDI2IEBACiAJCWt0aHJlYWRfc3RvcCh3Yi0+dGFzayk7CiB9CiAKKy8qCisgKiBUaGlzIGJkaSBpcyBnb2luZyBhd2F5IG5vdywgbWFrZSBzdXJlIHRoYXQgbm8gc3VwZXJfYmxvY2tzIHBvaW50IHRvIGl0CisgKi8KK3N0YXRpYyB2b2lkIGJkaV9wcnVuZV9zYihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisKKwlzcGluX2xvY2soJnNiX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCQlpZiAoc2ItPnNfYmRpID09IGJkaSkKKwkJCXNiLT5zX2JkaSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKK30KKwogdm9pZCBiZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCWlmIChiZGktPmRldikgeworCQliZGlfcHJ1bmVfc2IoYmRpKTsKKwogCQlpZiAoIWJkaV9jYXBfZmx1c2hfZm9ya2VyKGJkaSkpCiAJCQliZGlfd2Jfc2h1dGRvd24oYmRpKTsKIAkJYmRpX2RlYnVnX3VucmVnaXN0ZXIoYmRpKTsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA2Yzg0ZTU5OC4uZWYxNjlmMyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxMSw3ICsxNjExLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmlsZW1hcF9mYXVsdCk7CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwX3hpcC5jIGIvbW0vZmlsZW1hcF94aXAuYwppbmRleCA0MjdkZmUzLi4xODg4YjJkIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwX3hpcC5jCisrKyBiL21tL2ZpbGVtYXBfeGlwLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4aXBfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhpcF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJPSB4aXBfZmlsZV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCAyNTg3OGNjLi45YzFlNjI3IDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC00MjYsMTYgKzQyNiwyMSBAQAogCiB2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKQogewotCXN0YXRpYyB1bnNpZ25lZCB3YXJuX2NvdW50ID0gMTA7CisJc3RhdGljIGludCB3YXJuX2NvdW50ID0gMTA7CiAKLQlpZiAodW5saWtlbHkod2Fybl9jb3VudCA9PSAwKSkKKwlpZiAodW5saWtlbHkod2Fybl9jb3VudCA8IDApKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKSB7Ci0JCWlmIChpbl9pcnEoKSkgeworCQlpZiAoaW5fbm1pKCkpIHsKKwkJCWlmICh0eXBlICE9IEtNX05NSSAmJiB0eXBlICE9IEtNX05NSV9QVEUpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCXdhcm5fY291bnQtLTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpbl9pcnEoKSkgewogCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKIAkJCSAgICB0eXBlICE9IEtNX0JJT19TUkNfSVJRICYmIHR5cGUgIT0gS01fQklPX0RTVF9JUlEgJiYKLQkJCSAgICB0eXBlICE9IEtNX0JPVU5DRV9SRUFEKSB7CisJCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCAmJiB0eXBlICE9IEtNX0lSUV9QVEUpIHsKIAkJCQlXQVJOX09OKDEpOwogCQkJCXdhcm5fY291bnQtLTsKIAkJCX0KQEAgLTQ1Miw3ICs0NTcsOSBAQAogCX0KIAogCWlmICh0eXBlID09IEtNX0lSUTAgfHwgdHlwZSA9PSBLTV9JUlExIHx8IHR5cGUgPT0gS01fQk9VTkNFX1JFQUQgfHwKLQkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSkgeworCQkJdHlwZSA9PSBLTV9CSU9fU1JDX0lSUSB8fCB0eXBlID09IEtNX0JJT19EU1RfSVJRIHx8CisJCQl0eXBlID09IEtNX0lSUV9QVEUgfHwgdHlwZSA9PSBLTV9OTUkgfHwKKwkJCXR5cGUgPT0gS01fTk1JX1BURSApIHsKIAkJaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsKIAkJCVdBUk5fT04oMSk7CiAJCQl3YXJuX2NvdW50LS07CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNmYwNDhmYy4uNWQ3NjAxYiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTcyMSw3ICsxNzIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzID0gewogCS5mYXVsdCA9IGh1Z2V0bGJfdm1fb3BfZmF1bHQsCiAJLm9wZW4gPSBodWdldGxiX3ZtX29wX29wZW4sCiAJLmNsb3NlID0gaHVnZXRsYl92bV9vcF9jbG9zZSwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDRlYTQ1MTAuLjhiZjc2NWMgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKKysrIGIvbW0va21lbWxlYWsuYwpAQCAtODMzLDEyICs4MzMsMTUgQEAKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJb2JqZWN0ID0gY3JlYXRlX29iamVjdCgodW5zaWduZWQgbG9uZylsb2ctPnB0ciwgbG9nLT5zaXplLAotCQkJICAgICAgIGxvZy0+bWluX2NvdW50LCBHRlBfS0VSTkVMKTsKKwkJCSAgICAgICBsb2ctPm1pbl9jb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFvYmplY3QpCisJCWdvdG8gb3V0OwogCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9nLT50cmFjZV9sZW47IGkrKykKIAkJb2JqZWN0LT50cmFjZVtpXSA9IGxvZy0+dHJhY2VbaV07CiAJb2JqZWN0LT50cmFjZV9sZW4gPSBsb2ctPnRyYWNlX2xlbjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKK291dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCBmN2VkYWMzLi41NTc1Zjg2IDEwMDY0NAotLS0gYS9tbS9rc20uYworKysgYi9tbS9rc20uYwpAQCAtMTg0LDExICsxODQsNiBAQAogCQlzaXplb2Yoc3RydWN0IF9fc3RydWN0KSwgX19hbGlnbm9mX18oc3RydWN0IF9fc3RydWN0KSxcCiAJCShfX2ZsYWdzKSwgTlVMTCkKIAotc3RhdGljIHZvaWQgX19pbml0IGtzbV9pbml0X21heF9rZXJuZWxfcGFnZXModm9pZCkKLXsKLQlrc21fbWF4X2tlcm5lbF9wYWdlcyA9IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkgLyA0OwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBrc21fc2xhYl9pbml0KHZvaWQpCiB7CiAJcm1hcF9pdGVtX2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUocm1hcF9pdGVtLCAwKTsKQEAgLTEwMTcsNiArMTAxMiw3IEBACiAJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOwogCQlpbnQgcmV0OwogCisJCWNvbmRfcmVzY2hlZCgpOwogCQl0cmVlX3JtYXBfaXRlbSA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBybWFwX2l0ZW0sIG5vZGUpOwogCQlwYWdlMlswXSA9IGdldF9tZXJnZWFibGVfcGFnZSh0cmVlX3JtYXBfaXRlbSk7CiAJCWlmICghcGFnZTJbMF0pCkBAIC0xNjczLDcgKzE2NjksNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3NtX3RocmVhZDsKIAlpbnQgZXJyOwogCi0Ja3NtX2luaXRfbWF4X2tlcm5lbF9wYWdlcygpOworCWtzbV9tYXhfa2VybmVsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMgLyA0OwogCiAJZXJyID0ga3NtX3NsYWJfaW5pdCgpOwogCWlmIChlcnIpCkBAIC0xNjk3LDYgKzE2OTMsOSBAQAogCQlrdGhyZWFkX3N0b3Aoa3NtX3RocmVhZCk7CiAJCWdvdG8gb3V0X2ZyZWUyOwogCX0KKyNlbHNlCisJa3NtX3J1biA9IEtTTV9SVU5fTUVSR0U7CS8qIG5vIHdheSBmb3IgdXNlciB0byBzdGFydCBpdCAqLworCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBlMmI5OGE2Li5mOTlmNTk5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIHN0YXRpYyB2b2lkCiBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCisJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eiwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmbWN0ei0+cmJfcm9vdC5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtMzIyLDcgKzMyMyw5IEBACiAJaWYgKG16LT5vbl90cmVlKQogCQlyZXR1cm47CiAKLQltei0+dXNhZ2VfaW5fZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm1lbS0+cmVzKTsKKwltei0+dXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzczsKKwlpZiAoIW16LT51c2FnZV9pbl9leGNlc3MpCisJCXJldHVybjsKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCW16X25vZGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lLApAQCAtMzUzLDE2ICszNTYsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCi0JCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKLXsKLQlzcGluX2xvY2soJm1jdHotPmxvY2spOwotCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAogbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKQEAgLTM5MiwzNCArMzg1LDM2IEBACiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXZfdXNhZ2VfaW5fZXhjZXNzLCBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWJvb2wgdXBkYXRlZF90cmVlID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKLQotCW16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIHBhZ2VfdG9fbmlkKHBhZ2UpLCBwYWdlX3pvbmVudW0ocGFnZSkpOworCWludCBuaWQgPSBwYWdlX3RvX25pZChwYWdlKTsKKwlpbnQgemlkID0gcGFnZV96b25lbnVtKHBhZ2UpOwogCW1jdHogPSBzb2Z0X2xpbWl0X3RyZWVfZnJvbV9wYWdlKHBhZ2UpOwogCiAJLyoKLQkgKiBXZSBkbyB1cGRhdGVzIGluIGxhenkgbW9kZSwgbWVtJ3MgYXJlIHJlbW92ZWQKLQkgKiBsYXppbHkgZnJvbSB0aGUgcGVyLXpvbmUsIHBlci1ub2RlIHJiIHRyZWUKKwkgKiBOZWNlc3NhcnkgdG8gdXBkYXRlIGFsbCBhbmNlc3RvcnMgd2hlbiBoaWVyYXJjaHkgaXMgdXNlZC4KKwkgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuCiAJICovCi0JcHJldl91c2FnZV9pbl9leGNlc3MgPSBtei0+dXNhZ2VfaW5fZXhjZXNzOwotCi0JbmV3X3VzYWdlX2luX2V4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7Ci0JaWYgKHByZXZfdXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCW1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOwotCQl1cGRhdGVkX3RyZWUgPSB0cnVlOwotCX0KLQlpZiAoIW5ld191c2FnZV9pbl9leGNlc3MpCi0JCWdvdG8gZG9uZTsKLQltZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKLQotZG9uZToKLQlpZiAodXBkYXRlZF90cmVlKSB7Ci0JCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCQlzcGluX3VubG9jaygmbWN0ei0+bG9jayk7CisJZm9yICg7IG1lbTsgbWVtID0gcGFyZW50X21lbV9jZ3JvdXAobWVtKSkgeworCQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CisJCWV4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3IKKwkJICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC4KKwkJICovCisJCWlmIChleGNlc3MgfHwgbXotPm9uX3RyZWUpIHsKKwkJCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7CisJCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KKwkJCWlmIChtei0+b25fdHJlZSkKKwkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOworCQkJLyoKKwkJCSAqIEluc2VydCBhZ2Fpbi4gbXotPnVzYWdlX2luX2V4Y2VzcyB3aWxsIGJlIHVwZGF0ZWQuCisJCQkgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuCisJCQkgKi8KKwkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKKwkJCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKKwkJfQogCX0KIH0KIApAQCAtNDQ3LDkgKzQ0MiwxMCBAQAogX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCiB7CiAJc3RydWN0IHJiX25vZGUgKnJpZ2h0bW9zdCA9IE5VTEw7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gTlVMTDsKKwlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAKIHJldHJ5OgorCW16ID0gTlVMTDsKIAlyaWdodG1vc3QgPSByYl9sYXN0KCZtY3R6LT5yYl9yb290KTsKIAlpZiAoIXJpZ2h0bW9zdCkKIAkJZ290byBkb25lOwkJLyogTm90aGluZyB0byByZWNsYWltIGZyb20gKi8KQEAgLTEyNzAsOSArMTI2Niw5IEBACiAJCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywKIAkJCWJvb2wgb29tLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQsICptZW1fb3Zlcl9zb2Z0X2xpbWl0OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0sICptZW1fb3Zlcl9saW1pdDsKIAlpbnQgbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwotCXN0cnVjdCByZXNfY291bnRlciAqZmFpbF9yZXMsICpzb2Z0X2ZhaWxfcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOwogCiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSB7CiAJCS8qIERvbid0IGFjY291bnQgdGhpcyEgKi8KQEAgLTEzMDQsMTcgKzEzMDAsMTYgQEAKIAogCQlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbSkpCiAJCQlnb3RvIGRvbmU7Ci0JCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgJmZhaWxfcmVzLAotCQkJCQkJJnNvZnRfZmFpbF9yZXMpOworCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZmYWlsX3Jlcyk7CiAJCWlmIChsaWtlbHkoIXJldCkpIHsKIAkJCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQkJCWJyZWFrOwogCQkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJJmZhaWxfcmVzLCBOVUxMKTsKKwkJCQkJCQkmZmFpbF9yZXMpOwogCQkJaWYgKGxpa2VseSghcmV0KSkKIAkJCQlicmVhazsKIAkJCS8qIG1lbStzd2FwIGNvdW50ZXIgZmFpbHMgKi8KLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywKIAkJCQkJCQkJCW1lbXN3KTsKQEAgLTEzNTMsMTYgKzEzNDgsMTEgQEAKIAkJfQogCX0KIAkvKgotCSAqIEluc2VydCBqdXN0IHRoZSBhbmNlc3Rvciwgd2Ugc2hvdWxkIHRyaWNrbGUgZG93biB0byB0aGUgY29ycmVjdAotCSAqIGNncm91cCBmb3IgcmVjbGFpbSwgc2luY2UgdGhlIG90aGVyIG5vZGVzIHdpbGwgYmUgYmVsb3cgdGhlaXIKLQkgKiBzb2Z0IGxpbWl0CisJICogSW5zZXJ0IGFuY2VzdG9yIChhbmQgYW5jZXN0b3IncyBhbmNlc3RvcnMpLCB0byBzb2Z0bGltaXQgUkItdHJlZS4KKwkgKiBpZiB0aGV5IGV4Y2VlZHMgc29mdGxpbWl0LgogCSAqLwotCWlmIChzb2Z0X2ZhaWxfcmVzKSB7Ci0JCW1lbV9vdmVyX3NvZnRfbGltaXQgPQotCQkJbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKHNvZnRfZmFpbF9yZXMsIHJlcyk7Ci0JCWlmIChtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtX292ZXJfc29mdF9saW1pdCkpCi0JCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbV9vdmVyX3NvZnRfbGltaXQsIHBhZ2UpOwotCX0KKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCisJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiBub21lbToKQEAgLTE0MzcsMTAgKzE0MjcsOSBAQAogCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJfQogCQljc3NfcHV0KCZtZW0tPmNzcyk7CiAJCXJldHVybjsKQEAgLTE1MTksNyArMTUwOCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSk7CiAJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhmcm9tLCBwYywgZmFsc2UpOwogCiAJcGFnZSA9IHBjLT5wYWdlOwpAQCAtMTUzOSw3ICsxNTI4LDcgQEAKIAl9CiAKIAlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmZyb20tPm1lbXN3LCBQQUdFX1NJWkUpOwogCWNzc19wdXQoJmZyb20tPmNzcyk7CiAKIAljc3NfZ2V0KCZ0by0+Y3NzKTsKQEAgLTE2MTAsOSArMTU5OSw5IEBACiAJY3NzX3B1dCgmcGFyZW50LT5jc3MpOwogCS8qIHVuY2hhcmdlIGlmIG1vdmUgZmFpbHMgKi8KIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChwYXJlbnQpKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+cmVzLCBQQUdFX1NJWkUpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmcGFyZW50LT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MDMsOCArMTc5Miw3IEBACiAJCQkgKiBjYWxsaW5nIGNzc190cnlnZXQKIAkJCSAqLwogCQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJfQpAQCAtMTgzMSw5ICsxODE5LDkgQEAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsIE5VTEwpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOwogCX0KIAljc3NfcHV0KCZtZW0tPmNzcyk7CiB9CkBAIC0xODQ4LDcgKzE4MzYsNiBAQAogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWJvb2wgc29mdF9saW1pdF9leGNlc3MgPSBmYWxzZTsKIAogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTg4OCwxMCArMTg3NSwxMCBAQAogCX0KIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZzb2Z0X2xpbWl0X2V4Y2Vzcyk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCAmJgogCQkJCShjdHlwZSAhPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtLCB0cnVlKTsKQEAgLTE5MDgsNyArMTg5NSw3IEBACiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAotCWlmIChzb2Z0X2xpbWl0X2V4Y2VzcyAmJiBtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtKSkKKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCiAJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIAkvKiBhdCBzd2Fwb3V0LCB0aGlzIG1lbWNnIHdpbGwgYmUgYWNjZXNzZWQgdG8gcmVjb3JkIHRvIHN3YXAgKi8KIAlpZiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQpAQCAtMTk4Niw3ICsxOTczLDcgQEAKIAkJICogVGhpcyBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBXZSBhdm9pZCBjYWxsaW5nIGNzc190cnlnZXQKIAkJICovCiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW1jZywgZmFsc2UpOwogCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJfQpAQCAtMjIzMyw2ICsyMjIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDsKIAlpbnQgbG9vcCA9IDA7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXNzOwogCiAJaWYgKG9yZGVyID4gMCkKIAkJcmV0dXJuIDA7CkBAIC0yMjg0LDkgKzIyNzIsOCBAQAogCQkJCQlicmVhazsKIAkJCX0gd2hpbGUgKDEpOwogCQl9Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPQotCQkJcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm16LT5tZW0tPnJlcyk7CiAJCV9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbXotPm1lbS0+cmVzKTsKIAkJLyoKIAkJICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZAogCQkgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLgpAQCAtMjI5NSw4ICsyMjgyLDggQEAKIAkJICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlcgogCQkgKiB0ZXJtIFRPRE8uCiAJCSAqLwotCQlpZiAobXotPnVzYWdlX2luX2V4Y2VzcykKLQkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQkvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi8KKwkJX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtei0+bWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKIAkJc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwogCQljc3NfcHV0KCZtei0+bWVtLT5jc3MpOwogCQlsb29wKys7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA3MjlkNGIxLi5kYWNjNjQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtMzcwLDkgKzM3MSw2IEBACiAJaW50IHJldCA9IEZBSUxFRDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCiAJLyoKIAkgKiBGb3IgYW5vbnltb3VzIHBhZ2VzIHdlJ3JlIGRvbmUgdGhlIG9ubHkgcmVmZXJlbmNlIGxlZnQKIAkgKiBzaG91bGQgYmUgdGhlIG9uZSBtX2YoKSBob2xkcy4KQEAgLTQ5OCwzMCArNDk2LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCiAJQ2xlYXJQYWdlRGlydHkocCk7CiAJLyogVHJpZ2dlciBFSU8gaW4gc2htZW06ICovCiAJQ2xlYXJQYWdlVXB0b2RhdGUocCk7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBERUxBWUVEOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIERFTEFZRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gUkVDT1ZFUkVEOwotCX0KIAlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gUkVDT1ZFUkVEOwogfQogCiAvKgpAQCAtNjExLDggKzU5Nyw2IEBACiAJeyAwLAkJMCwJCSJ1bmtub3duIHBhZ2Ugc3RhdGUiLAltZV91bmtub3duIH0sCiB9OwogCi0jdW5kZWYgbHJ1Ci0KIHN0YXRpYyB2b2lkIGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKm1zZywgaW50IHJlc3VsdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC02MjksMTMgKzYxMywxNiBAQAogCQkJdW5zaWduZWQgbG9uZyBwZm4sIGludCByZWYpCiB7CiAJaW50IHJlc3VsdDsKKwlpbnQgY291bnQ7CiAKIAlyZXN1bHQgPSBwcy0+YWN0aW9uKHAsIHBmbik7CiAJYWN0aW9uX3Jlc3VsdChwZm4sIHBzLT5tc2csIHJlc3VsdCk7Ci0JaWYgKHBhZ2VfY291bnQocCkgIT0gMSArIHJlZikKKworCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDEgLSByZWY7CisJaWYgKGNvdW50ICE9IDApCiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIk1DRSAlI2x4OiAlcyBwYWdlIHN0aWxsIHJlZmVyZW5jZWQgYnkgJWQgdXNlcnNcbiIsCi0JCSAgICAgICBwZm4sIHBzLT5tc2csIHBhZ2VfY291bnQocCkgLSAxKTsKKwkJICAgICAgIHBmbiwgcHMtPm1zZywgY291bnQpOwogCiAJLyogQ291bGQgZG8gbW9yZSBjaGVja3MgaGVyZSBpZiBwYWdlIGxvb2tzIG9rICovCiAJLyoKQEAgLTY2MSwxMiArNjQ4LDkgQEAKIAlpbnQgaTsKIAlpbnQga2lsbCA9IDE7CiAKLQlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSkKKwlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSB8fCBQYWdlS3NtKHApKQogCQlyZXR1cm47CiAKLQlpZiAoIVBhZ2VMUlUocCkpCi0JCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0KIAkvKgogCSAqIFRoaXMgY2hlY2sgaW1wbGllcyB3ZSBkb24ndCBraWxsIHByb2Nlc3NlcyBpZiB0aGVpciBwYWdlcwogCSAqIGFyZSBpbiB0aGUgc3dhcCBjYWNoZSBlYXJseS4gVGhvc2UgYXJlIGFsd2F5cyBsYXRlIGtpbGxzLgpAQCAtNzM4LDYgKzcyMiw3IEBACiAKIGludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgcmVmKQogeworCXVuc2lnbmVkIGxvbmcgbHJ1X2ZsYWc7CiAJc3RydWN0IHBhZ2Vfc3RhdGUgKnBzOwogCXN0cnVjdCBwYWdlICpwOwogCWludCByZXM7CkBAIC03NzUsNiArNzYwLDI0IEBACiAJfQogCiAJLyoKKwkgKiBXZSBpZ25vcmUgbm9uLUxSVSBwYWdlcyBmb3IgZ29vZCByZWFzb25zLgorCSAqIC0gUEdfbG9ja2VkIGlzIG9ubHkgd2VsbCBkZWZpbmVkIGZvciBMUlUgcGFnZXMgYW5kIGEgZmV3IG90aGVycworCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX3NldF9wYWdlX2xvY2tlZCgpCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fU2V0UGFnZVNsYWIqKCkgKGFuZCBtb3JlIG5vbi1hdG9taWMgb3BzKQorCSAqIFRoZSBjaGVjayAodW5uZWNlc3NhcmlseSkgaWdub3JlcyBMUlUgcGFnZXMgYmVpbmcgaXNvbGF0ZWQgYW5kCisJICogd2Fsa2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gY29kZSwgaG93ZXZlciB0aGF0J3Mgbm90IGEgYmlnIGxvc3MuCisJICovCisJaWYgKCFQYWdlTFJVKHApKQorCQlscnVfYWRkX2RyYWluX2FsbCgpOworCWxydV9mbGFnID0gcC0+ZmxhZ3MgJiBscnU7CisJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKKwkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7CisJCXB1dF9wYWdlKHApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocCk7CisKKwkvKgogCSAqIExvY2sgdGhlIHBhZ2UgYW5kIHdhaXQgZm9yIHdyaXRlYmFjayB0byBmaW5pc2guCiAJICogSXQncyB2ZXJ5IGRpZmZpY3VsdCB0byBtZXNzIHdpdGggcGFnZXMgY3VycmVudGx5IHVuZGVyIElPCiAJICogYW5kIGluIG1hbnkgY2FzZXMgaW1wb3NzaWJsZSwgc28gd2UganVzdCBhdm9pZCBpdCBoZXJlLgpAQCAtNzkwLDcgKzc5Myw3IEBACiAJLyoKIAkgKiBUb3JuIGRvd24gYnkgc29tZW9uZSBlbHNlPwogCSAqLwotCWlmIChQYWdlTFJVKHApICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgeworCWlmICgobHJ1X2ZsYWcgJiBscnUpICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImFscmVhZHkgdHJ1bmNhdGVkIExSVSIsIElHTk9SRUQpOwogCQlyZXMgPSAwOwogCQlnb3RvIG91dDsKQEAgLTc5OCw3ICs4MDEsNyBAQAogCiAJcmVzID0gLUVCVVNZOwogCWZvciAocHMgPSBlcnJvcl9zdGF0ZXM7OyBwcysrKSB7Ci0JCWlmICgocC0+ZmxhZ3MgJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgeworCQlpZiAoKChwLT5mbGFncyB8IGxydV9mbGFnKSYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKIAkJCXJlcyA9IHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4sIHJlZik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA3ZTkxYjVmLi42YWIxOWRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjQxLDYgKzY0MSw3IEBACiAJCXBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJcHRlX3QgKm9yaWdfc3JjX3B0ZSwgKm9yaWdfZHN0X3B0ZTsKIAlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGU7CiAJc3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKQEAgLTY1NCw2ICs2NTUsOCBAQAogCXNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKKwlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCiAJZG8gewpAQCAtNjc3LDkgKzY4MCw5IEBACiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlzcGluX3VubG9jayhzcmNfcHRsKTsKLQlwdGVfdW5tYXBfbmVzdGVkKHNyY19wdGUgLSAxKTsKKwlwdGVfdW5tYXBfbmVzdGVkKG9yaWdfc3JjX3B0ZSk7CiAJYWRkX21tX3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKLQlwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUgLSAxLCBkc3RfcHRsKTsKKwlwdGVfdW5tYXBfdW5sb2NrKG9yaWdfZHN0X3B0ZSwgZHN0X3B0bCk7CiAJY29uZF9yZXNjaGVkKCk7CiAJaWYgKGFkZHIgIT0gZW5kKQogCQlnb3RvIGFnYWluOwpAQCAtMTgyMCwxMCArMTgyMywxMCBAQAogCXRva2VuID0gcG1kX3BndGFibGUoKnBtZCk7CiAKIAlkbyB7Ci0JCWVyciA9IGZuKHB0ZSwgdG9rZW4sIGFkZHIsIGRhdGEpOworCQllcnIgPSBmbihwdGUrKywgdG9rZW4sIGFkZHIsIGRhdGEpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCkBAIC0yNTM5LDcgKzI1NDIsNyBAQAogCX0gZWxzZSBpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7CiAJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwogCQlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMjYxMSw2ICsyNjE0LDcgQEAKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CiBvdXRfcGFnZToKIAl1bmxvY2tfcGFnZShwYWdlKTsKK291dF9yZWxlYXNlOgogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggODIxZGVlNS4uMjA0NzQ2NSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKQEAgLTQ0Nyw3ICs0NDgsOCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UgKi8KIAotc3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX25ld19wZ2RhdChpbnQgbmlkLCB1NjQgc3RhcnQpCisvKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHICovCitzdGF0aWMgcGdfZGF0YV90IF9fcmVmICpob3RhZGRfbmV3X3BnZGF0KGludCBuaWQsIHU2NCBzdGFydCkKIHsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwogCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0gezB9OwpAQCAtNDg0LDE0ICs0ODYsMTggQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCisJbG9ja19zeXN0ZW1fc2xlZXAoKTsKKwogCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSk7CisJcmV0ID0gLUVFWElTVDsKIAlpZiAoIXJlcykKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCWdvdG8gb3V0OwogCiAJaWYgKCFub2RlX29ubGluZShuaWQpKSB7CiAJCXBnZGF0ID0gaG90YWRkX25ld19wZ2RhdChuaWQsIHN0YXJ0KTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJaWYgKCFwZ2RhdCkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBvdXQ7CiAJCW5ld19wZ2RhdCA9IDE7CiAJfQogCkBAIC01MTQsNyArNTIwLDggQEAKIAkJQlVHX09OKHJldCk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlnb3RvIG91dDsKKwogZXJyb3I6CiAJLyogcm9sbGJhY2sgcGdkYXQgYWxsb2NhdGlvbiBhbmQgb3RoZXJzICovCiAJaWYgKG5ld19wZ2RhdCkKQEAgLTUyMiw2ICs1MjksOCBAQAogCWlmIChyZXMpCiAJCXJlbGVhc2VfbWVtb3J5X3Jlc291cmNlKHJlcyk7CiAKK291dDoKKwl1bmxvY2tfc3lzdGVtX3NsZWVwKCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpOwpAQCAtNzU4LDYgKzc2Nyw4IEBACiAJaWYgKCF0ZXN0X3BhZ2VzX2luX2Ffem9uZShzdGFydF9wZm4sIGVuZF9wZm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWxvY2tfc3lzdGVtX3NsZWVwKCk7CisKIAl6b25lID0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpOwogCW5vZGUgPSB6b25lX3RvX25pZCh6b25lKTsKIAlucl9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CkBAIC03NjUsNyArNzc2LDcgQEAKIAkvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi8KIAlyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCWFyZy5zdGFydF9wZm4gPSBzdGFydF9wZm47CiAJYXJnLm5yX3BhZ2VzID0gbnJfcGFnZXM7CkBAIC04NDMsNiArODU0LDcgQEAKIAl3cml0ZWJhY2tfc2V0X3JhdGVsaW1pdCgpOwogCiAJbWVtb3J5X25vdGlmeShNRU1fT0ZGTElORSwgJmFyZyk7CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiAwOwogCiBmYWlsZWRfcmVtb3ZhbDoKQEAgLTg1Miw2ICs4NjQsOCBAQAogCS8qIHB1c2hiYWNrIHRvIGZyZWUgYXJlYSAqLwogCXVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAKK291dDoKKwl1bmxvY2tfc3lzdGVtX3NsZWVwKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA3ZGQ5ZDlmLi40NTQ1ZDU5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAogCQllcnIgPSBtaWdyYXRlX3ByZXAoKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG1wb2xfb3V0OwogCX0KIAl7CiAJCU5PREVNQVNLX1NDUkFUQ0goc2NyYXRjaCk7CkBAIC0xMDM5LDEwICsxMDM5LDkgQEAKIAkJCWVyciA9IC1FTk9NRU07CiAJCU5PREVNQVNLX1NDUkFUQ0hfRlJFRShzY3JhdGNoKTsKIAl9Ci0JaWYgKGVycikgewotCQltcG9sX3B1dChuZXcpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIG1wb2xfb3V0OworCiAJdm1hID0gY2hlY2tfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLAogCQkJICBmbGFncyB8IE1QT0xfTUZfSU5WRVJULCAmcGFnZWxpc3QpOwogCkBAIC0xMDU4LDkgKzEwNTcsMTEgQEAKIAogCQlpZiAoIWVyciAmJiBucl9mYWlsZWQgJiYgKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpKQogCQkJZXJyID0gLUVJTzsKLQl9CisJfSBlbHNlCisJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKyBtcG9sX291dDoKIAltcG9sX3B1dChuZXcpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMWE0YmY0OC4uN2RiY2IyMiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBnZXRfbmV3X3BhZ2UocGFnZSwgcHJpdmF0ZSwgJnJlc3VsdCk7CiAJaW50IHJjdV9sb2NrZWQgPSAwOwogCWludCBjaGFyZ2UgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAKIAlpZiAoIW5ld3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDIxZDQwMjkuLjczZjVlNGIgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTIyODIsNyArMjI4Miw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3BlY2lhbF9tYXBwaW5nX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcGVjaWFsX21hcHBpbmdfdm1vcHMgPSB7CiAJLmNsb3NlID0gc3BlY2lhbF9tYXBwaW5nX2Nsb3NlLAogCS5mYXVsdCA9IHNwZWNpYWxfbWFwcGluZ19mYXVsdCwKIH07CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA1NmE0NDZmLi45ODc2ZmEwIDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTc5LDcgKzc5LDcgQEAKIHN0cnVjdCByYl9yb290IG5vbW11X3JlZ2lvbl90cmVlID0gUkJfUk9PVDsKIERFQ0xBUkVfUldTRU0obm9tbXVfcmVnaW9uX3NlbSk7CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0geworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7CiB9OwogCiAvKgpAQCAtODI2LDcgKzgyNiw3IEBACiAJaW50IHJldDsKIAogCS8qIGRvIHRoZSBzaW1wbGUgY2hlY2tzIGZpcnN0ICovCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEIHx8IGFkZHIpIHsKKwlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICIlZDogQ2FuJ3QgZG8gZml4ZWQtYWRkcmVzcy9vdmVybGF5IG1tYXAgb2YgUkFNXG4iLAogCQkgICAgICAgY3VycmVudC0+cGlkKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAJcmV0ID0gdm1hLT52bV9maWxlLT5mX29wLT5tbWFwKHZtYS0+dm1fZmlsZSwgdm1hKTsKIAlpZiAocmV0ID09IDApIHsKIAkJdm1hLT52bV9yZWdpb24tPnZtX3RvcCA9IHZtYS0+dm1fcmVnaW9uLT52bV9lbmQ7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAwOwogCX0KIAlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCXJldHVybiByZXQ7CkBAIC0xMDUxLDcgKzEwNTEsOCBAQAogICovCiBzdGF0aWMgaW50IGRvX21tYXBfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgIHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKQorCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICB1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXM7CiAJdW5zaWduZWQgbG9uZyB0b3RhbCwgcG9pbnQsIG4sIHJsZW47CkBAIC0xMDYyLDEzICsxMDYzLDEzIEBACiAJICogc2hhcmVkIG1hcHBpbmdzIG9uIGRldmljZXMgb3IgbWVtb3J5CiAJICogLSBWTV9NQVlTSEFSRSB3aWxsIGJlIHNldCBpZiBpdCBtYXkgYXR0ZW1wdCB0byBzaGFyZQogCSAqLwotCWlmICh2bWEtPnZtX2ZpbGUpIHsKKwlpZiAoY2FwYWJpbGl0aWVzICYgQkRJX0NBUF9NQVBfRElSRUNUKSB7CiAJCXJldCA9IHZtYS0+dm1fZmlsZS0+Zl9vcC0+bW1hcCh2bWEtPnZtX2ZpbGUsIHZtYSk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJLyogc2hvdWxkbid0IHJldHVybiBzdWNjZXNzIGlmIHdlJ3JlIG5vdCBzaGFyaW5nICovCiAJCQlCVUdfT04oISh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKTsKIAkJCXZtYS0+dm1fcmVnaW9uLT52bV90b3AgPSB2bWEtPnZtX3JlZ2lvbi0+dm1fZW5kOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiAwOwogCQl9CiAJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCXJldHVybiByZXQ7CkBAIC0xMTgxLDkgKzExODIsNiBAQAogCiAJa2VudGVyKCIsJWx4LCVseCwlbHgsJWx4LCVseCIsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmKTsKIAotCWlmICghKGZsYWdzICYgTUFQX0ZJWEVEKSkKLQkJYWRkciA9IHJvdW5kX2hpbnRfdG9fbWluKGFkZHIpOwotCiAJLyogZGVjaWRlIHdoZXRoZXIgd2Ugc2hvdWxkIGF0dGVtcHQgdGhlIG1hcHBpbmcsIGFuZCBpZiBzbyB3aGF0IHNvcnQgb2YKIAkgKiBtYXBwaW5nICovCiAJcmV0ID0gdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmLApAQCAtMTE5Myw2ICsxMTkxLDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwkvKiB3ZSBpZ25vcmUgdGhlIGFkZHJlc3MgaGludCAqLworCWFkZHIgPSAwOworCiAJLyogd2UndmUgZGV0ZXJtaW5lZCB0aGF0IHdlIGNhbiBtYWtlIHRoZSBtYXBwaW5nLCBub3cgdHJhbnNsYXRlIHdoYXQgd2UKIAkgKiBub3cga25vdyBpbnRvIFZNQSBmbGFncyAqLwogCXZtX2ZsYWdzID0gZGV0ZXJtaW5lX3ZtX2ZsYWdzKGZpbGUsIHByb3QsIGZsYWdzLCBjYXBhYmlsaXRpZXMpOwpAQCAtMTMwNiw3ICsxMzA3LDcgQEAKIAkJICogLSB0aGlzIGlzIHRoZSBob29rIGZvciBxdWFzaS1tZW1vcnkgY2hhcmFjdGVyIGRldmljZXMgdG8KIAkJICogICB0ZWxsIHVzIHRoZSBsb2NhdGlvbiBvZiBhIHNoYXJlZCBtYXBwaW5nCiAJCSAqLwotCQlpZiAoZmlsZSAmJiBmaWxlLT5mX29wLT5nZXRfdW5tYXBwZWRfYXJlYSkgeworCQlpZiAoY2FwYWJpbGl0aWVzICYgQkRJX0NBUF9NQVBfRElSRUNUKSB7CiAJCQlhZGRyID0gZmlsZS0+Zl9vcC0+Z2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLAogCQkJCQkJCSAgICAgcGdvZmYsIGZsYWdzKTsKIAkJCWlmIChJU19FUlIoKHZvaWQgKikgYWRkcikpIHsKQEAgLTEzMzAsMTUgKzEzMzEsMTcgQEAKIAl9CiAKIAl2bWEtPnZtX3JlZ2lvbiA9IHJlZ2lvbjsKLQlhZGRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7CiAKLQkvKiBzZXQgdXAgdGhlIG1hcHBpbmcgKi8KKwkvKiBzZXQgdXAgdGhlIG1hcHBpbmcKKwkgKiAtIHRoZSByZWdpb24gaXMgZmlsbGVkIGluIGlmIEJESV9DQVBfTUFQX0RJUkVDVCBpcyBzdGlsbCBzZXQKKwkgKi8KIAlpZiAoZmlsZSAmJiB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQogCQlyZXQgPSBkb19tbWFwX3NoYXJlZF9maWxlKHZtYSk7CiAJZWxzZQotCQlyZXQgPSBkb19tbWFwX3ByaXZhdGUodm1hLCByZWdpb24sIGxlbik7CisJCXJldCA9IGRvX21tYXBfcHJpdmF0ZSh2bWEsIHJlZ2lvbiwgbGVuLCBjYXBhYmlsaXRpZXMpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yX3B1dF9yZWdpb247CisJCWdvdG8gZXJyb3JfanVzdF9mcmVlOworCWFkZF9ub21tdV9yZWdpb24ocmVnaW9uKTsKIAogCS8qIG9rYXkuLi4gd2UgaGF2ZSBhIG1hcHBpbmc7IG5vdyB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGl0ICovCiAJcmVzdWx0ID0gdm1hLT52bV9zdGFydDsKQEAgLTEzNTYsMjUgKzEzNTksMTQgQEAKIAlrbGVhdmUoIiA9ICVseCIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIAotZXJyb3JfcHV0X3JlZ2lvbjoKLQlfX3B1dF9ub21tdV9yZWdpb24ocmVnaW9uKTsKLQlpZiAodm1hKSB7Ci0JCWlmICh2bWEtPnZtX2ZpbGUpIHsKLQkJCWZwdXQodm1hLT52bV9maWxlKTsKLQkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKLQkJCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYSh2bWEtPnZtX21tKTsKLQkJfQotCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7Ci0JfQotCWtsZWF2ZSgiID0gJWQgW3ByXSIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLQogZXJyb3JfanVzdF9mcmVlOgogCXVwX3dyaXRlKCZub21tdV9yZWdpb25fc2VtKTsKIGVycm9yOgotCWZwdXQocmVnaW9uLT52bV9maWxlKTsKKwlpZiAocmVnaW9uLT52bV9maWxlKQorCQlmcHV0KHJlZ2lvbi0+dm1fZmlsZSk7CiAJa21lbV9jYWNoZV9mcmVlKHZtX3JlZ2lvbl9qYXIsIHJlZ2lvbik7Ci0JZnB1dCh2bWEtPnZtX2ZpbGUpOworCWlmICh2bWEtPnZtX2ZpbGUpCisJCWZwdXQodm1hLT52bV9maWxlKTsKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCiAJCXJlbW92ZWRfZXhlX2ZpbGVfdm1hKHZtYS0+dm1fbW0pOwogCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IGQ5OTY2NGUuLjJjNWQ3OTIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNDQsMTggKzQ0LDIxIEBACiAvKgogICogV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzIGRlY2lkZXMgdGhhdCB0aGUgY2FsbGVyIG5lZWRzIHRvIHBlcmZvcm0gc29tZQogICogbm9uLWJhY2tncm91bmQgd3JpdGViYWNrLCB0aGlzIGlzIGhvdyBtYW55IHBhZ2VzIGl0IHdpbGwgYXR0ZW1wdCB0byB3cml0ZS4KLSAqIEl0IHNob3VsZCBiZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBSQVRFTElNSVRfUEFHRVMgdG8gZW5zdXJlIHRoYXQgcmVhc29uYWJseQorICogSXQgc2hvdWxkIGJlIHNvbWV3aGF0IGxhcmdlciB0aGFuIGRpcnRpZWQgcGFnZXMgdG8gZW5zdXJlIHRoYXQgcmVhc29uYWJseQogICogbGFyZ2UgYW1vdW50cyBvZiBJL08gYXJlIHN1Ym1pdHRlZC4KICAqLwotc3RhdGljIGlubGluZSBsb25nIHN5bmNfd3JpdGViYWNrX3BhZ2VzKHZvaWQpCitzdGF0aWMgaW5saW5lIGxvbmcgc3luY193cml0ZWJhY2tfcGFnZXModW5zaWduZWQgbG9uZyBkaXJ0aWVkKQogewotCXJldHVybiByYXRlbGltaXRfcGFnZXMgKyByYXRlbGltaXRfcGFnZXMgLyAyOworCWlmIChkaXJ0aWVkIDwgcmF0ZWxpbWl0X3BhZ2VzKQorCQlkaXJ0aWVkID0gcmF0ZWxpbWl0X3BhZ2VzOworCisJcmV0dXJuIGRpcnRpZWQgKyBkaXJ0aWVkIC8gMjsKIH0KIAogLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleHBvcnRlZCB2aWEgL3Byb2Mvc3lzL3ZtICovCiAKIC8qCi0gKiBTdGFydCBiYWNrZ3JvdW5kIHdyaXRlYmFjayAodmlhIHBkZmx1c2gpIGF0IHRoaXMgcGVyY2VudGFnZQorICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSB3cml0ZWJhY2sgdGhyZWFkcykgYXQgdGhpcyBwZXJjZW50YWdlCiAgKi8KIGludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gMTA7CiAKQEAgLTQ3NCwxMCArNDc3LDExIEBACiAgKiBiYWxhbmNlX2RpcnR5X3BhZ2VzKCkgbXVzdCBiZSBjYWxsZWQgYnkgcHJvY2Vzc2VzIHdoaWNoIGFyZSBnZW5lcmF0aW5nIGRpcnR5CiAgKiBkYXRhLiAgSXQgbG9va3MgYXQgdGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBpbiB0aGUgbWFjaGluZSBhbmQgd2lsbCBmb3JjZQogICogdGhlIGNhbGxlciB0byBwZXJmb3JtIHdyaXRlYmFjayBpZiB0aGUgc3lzdGVtIGlzIG92ZXIgYHZtX2RpcnR5X3JhdGlvJy4KLSAqIElmIHdlJ3JlIG92ZXIgYGJhY2tncm91bmRfdGhyZXNoJyB0aGVuIHBkZmx1c2ggaXMgd29rZW4gdG8gcGVyZm9ybSBzb21lCi0gKiB3cml0ZW91dC4KKyAqIElmIHdlJ3JlIG92ZXIgYGJhY2tncm91bmRfdGhyZXNoJyB0aGVuIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBhcmUgd29rZW4gdG8KKyAqIHBlcmZvcm0gc29tZSB3cml0ZW91dC4KICAqLwotc3RhdGljIHZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3N0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJdW5zaWduZWQgbG9uZyB3cml0ZV9jaHVuaykKIHsKIAlsb25nIG5yX3JlY2xhaW1hYmxlLCBiZGlfbnJfcmVjbGFpbWFibGU7CiAJbG9uZyBucl93cml0ZWJhY2ssIGJkaV9ucl93cml0ZWJhY2s7CkBAIC00ODUsNyArNDg5LDYgQEAKIAl1bnNpZ25lZCBsb25nIGRpcnR5X3RocmVzaDsKIAl1bnNpZ25lZCBsb25nIGJkaV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBwYWdlc193cml0dGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHdyaXRlX2NodW5rID0gc3luY193cml0ZWJhY2tfcGFnZXMoKTsKIAl1bnNpZ25lZCBsb25nIHBhdXNlID0gMTsKIAogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwpAQCAtNTYzLDcgKzU2Niw4IEBACiAJCWlmIChwYWdlc193cml0dGVuID49IHdyaXRlX2NodW5rKQogCQkJYnJlYWs7CQkvKiBXZSd2ZSBkb25lIG91ciBkdXR5ICovCiAKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHBhdXNlKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpb19zY2hlZHVsZV90aW1lb3V0KHBhdXNlKTsKIAogCQkvKgogCQkgKiBJbmNyZWFzZSB0aGUgZGVsYXkgZm9yIGVhY2ggbG9vcCwgdXAgdG8gb3VyIHByZXZpb3VzCkBAIC01NzksNyArNTgzLDcgQEAKIAkJYmRpLT5kaXJ0eV9leGNlZWRlZCA9IDA7CiAKIAlpZiAod3JpdGViYWNrX2luX3Byb2dyZXNzKGJkaSkpCi0JCXJldHVybjsJCS8qIHBkZmx1c2ggaXMgYWxyZWFkeSB3b3JraW5nIHRoaXMgcXVldWUgKi8KKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBJbiBsYXB0b3AgbW9kZSwgd2Ugd2FpdCB1bnRpbCBoaXR0aW5nIHRoZSBoaWdoZXIgdGhyZXNob2xkIGJlZm9yZQpAQCAtNTkwLDEwICs1OTQsMTAgQEAKIAkgKiBiYWNrZ3JvdW5kX3RocmVzaCwgdG8ga2VlcCB0aGUgYW1vdW50IG9mIGRpcnR5IG1lbW9yeSBsb3cuCiAJICovCiAJaWYgKChsYXB0b3BfbW9kZSAmJiBwYWdlc193cml0dGVuKSB8fAotCSAgICAoIWxhcHRvcF9tb2RlICYmICgobnJfd3JpdGViYWNrID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkKLQkJCQkJICArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykpCisJICAgICghbGFwdG9wX21vZGUgJiYgKChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKQorCQkJICAgICAgICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSkKIAkJCQkJICA+IGJhY2tncm91bmRfdGhyZXNoKSkpCi0JCWJkaV9zdGFydF93cml0ZWJhY2soYmRpLCBucl93cml0ZWJhY2spOworCQliZGlfc3RhcnRfd3JpdGViYWNrKGJkaSwgTlVMTCwgMCk7CiB9CiAKIHZvaWQgc2V0X3BhZ2VfZGlydHlfYmFsYW5jZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VfbWt3cml0ZSkKQEAgLTY0MCw5ICs2NDQsMTAgQEAKIAlwID0gICZfX2dldF9jcHVfdmFyKGJkcF9yYXRlbGltaXRzKTsKIAkqcCArPSBucl9wYWdlc19kaXJ0aWVkOwogCWlmICh1bmxpa2VseSgqcCA+PSByYXRlbGltaXQpKSB7CisJCXJhdGVsaW1pdCA9IHN5bmNfd3JpdGViYWNrX3BhZ2VzKCpwKTsKIAkJKnAgPSAwOwogCQlwcmVlbXB0X2VuYWJsZSgpOwotCQliYWxhbmNlX2RpcnR5X3BhZ2VzKG1hcHBpbmcpOworCQliYWxhbmNlX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHJhdGVsaW1pdCk7CiAJCXJldHVybjsKIAl9CiAJcHJlZW1wdF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBiZjcyMDU1Li4yYmMyYWM2IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xNzY5LDcgKzE3NjksNyBAQAogCQkgKiBTZWUgYWxzbyBjcHVzZXRfem9uZV9hbGxvd2VkKCkgY29tbWVudCBpbiBrZXJuZWwvY3B1c2V0LmMuCiAJCSAqLwogCQlhbGxvY19mbGFncyAmPSB+QUxMT0NfQ1BVU0VUOwotCX0gZWxzZSBpZiAodW5saWtlbHkocnRfdGFzayhwKSkpCisJfSBlbHNlIGlmICh1bmxpa2VseShydF90YXNrKHApKSAmJiAhaW5faW50ZXJydXB0KCkpCiAJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX0hBUkRFUjsKIAogCWlmIChsaWtlbHkoIShnZnBfbWFzayAmIF9fR0ZQX05PTUVNQUxMT0MpKSkgewpAQCAtMTgxNyw5ICsxODE3LDkgQEAKIAlpZiAoTlVNQV9CVUlMRCAmJiAoZ2ZwX21hc2sgJiBHRlBfVEhJU05PREUpID09IEdGUF9USElTTk9ERSkKIAkJZ290byBub3BhZ2U7CiAKK3Jlc3RhcnQ6CiAJd2FrZV9hbGxfa3N3YXBkKG9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4KTsKIAotcmVzdGFydDoKIAkvKgogCSAqIE9LLCB3ZSdyZSBiZWxvdyB0aGUga3N3YXBkIHdhdGVybWFyayBhbmQgaGF2ZSBraWNrZWQgYmFja2dyb3VuZAogCSAqIHJlY2xhaW0uIE5vdyB0aGluZ3MgZ2V0IG1vcmUgY29tcGxleCwgc28gc2V0IHVwIGFsbG9jX2ZsYWdzIGFjY29yZGluZwpAQCAtMjE4Myw3ICsyMTgzLDcgQEAKIAlwcmludGsoImFjdGl2ZV9hbm9uOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdSBpc29sYXRlZF9hbm9uOiVsdVxuIgogCQkiIGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9maWxlOiVsdSBpc29sYXRlZF9maWxlOiVsdVxuIgogCQkiIHVuZXZpY3RhYmxlOiVsdSIKLQkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHUgYnVmZmVyOiVsdVxuIgorCQkiIGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgogCQkiIGZyZWU6JWx1IHNsYWJfcmVjbGFpbWFibGU6JWx1IHNsYWJfdW5yZWNsYWltYWJsZTolbHVcbiIKIAkJIiBtYXBwZWQ6JWx1IHNobWVtOiVsdSBwYWdldGFibGVzOiVsdSBib3VuY2U6JWx1XG4iLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfQU5PTiksCkBAIC0yMTk2LDcgKzIxOTYsNiBAQAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKLQkJbnJfYmxvY2tkZXZfcGFnZXMoKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpLApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCA0M2Q4Y2FjLi41YWRmYzI2IDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYworKysgYi9tbS9wZXJjcHUuYwpAQCAtMTUzLDcgKzE1MywxMCBAQAogICoKICAqIER1cmluZyBhbGxvY2F0aW9uLCBwY3B1X2FsbG9jX211dGV4IGlzIGtlcHQgbG9ja2VkIGFsbCB0aGUgdGltZSBhbmQKICAqIHBjcHVfbG9jayBpcyBncmFiYmVkIGFuZCByZWxlYXNlZCBhcyBuZWNlc3NhcnkuICBBbGwgYWN0dWFsIG1lbW9yeQotICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4KKyAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuICBJbgorICogZ2VuZXJhbCwgcGVyY3B1IG1lbW9yeSBjYW4ndCBiZSBhbGxvY2F0ZWQgd2l0aCBpcnEgb2ZmIGJ1dAorICogaXJxc2F2ZS9yZXN0b3JlIGFyZSBzdGlsbCB1c2VkIGluIGFsbG9jIHBhdGggc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogZnJvbSBlYXJseSBpbml0IHBhdGggLSBzY2hlZF9pbml0KCkgc3BlY2lmaWNhbGx5LgogICoKICAqIEZyZWUgcGF0aCBhY2Nlc3NlcyBhbmQgYWx0ZXJzIG9ubHkgdGhlIGluZGV4IGRhdGEgc3RydWN0dXJlcywgc28gaXQKICAqIGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuICBXaGVuIG1lbW9yeSBuZWVkcyB0byBiZQpAQCAtMzUyLDYyICszNTUsODYgQEAKIH0KIAogLyoqCi0gKiBwY3B1X2V4dGVuZF9hcmVhX21hcCAtIGV4dGVuZCBhcmVhIG1hcCBmb3IgYWxsb2NhdGlvbgotICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqIHBjcHVfbmVlZF90b19leHRlbmQgLSBkZXRlcm1pbmUgd2hldGhlciBjaHVuayBhcmVhIG1hcCBuZWVkcyB0byBiZSBleHRlbmRlZAorICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAogICoKLSAqIEV4dGVuZCBhcmVhIG1hcCBvZiBAY2h1bmsgc28gdGhhdCBpdCBjYW4gYWNjb21vZGF0ZSBhbiBhbGxvY2F0aW9uLgotICogQSBzaW5nbGUgYWxsb2NhdGlvbiBjYW4gc3BsaXQgYW4gYXJlYSBpbnRvIHRocmVlIGFyZWFzLCBzbyB0aGlzCi0gKiBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgQGNodW5rLT5tYXAgaGFzIGF0IGxlYXN0IHR3byBleHRyYSBzbG90cy4KKyAqIERldGVybWluZSB3aGV0aGVyIGFyZWEgbWFwIG9mIEBjaHVuayBuZWVkcyB0byBiZSBleHRlbmRlZCB0bworICogYWNjb21vZGF0ZSBhIG5ldyBhbGxvY2F0aW9uLgogICoKICAqIENPTlRFWFQ6Ci0gKiBwY3B1X2FsbG9jX211dGV4LCBwY3B1X2xvY2suICBwY3B1X2xvY2sgaXMgcmVsZWFzZWQgYW5kIHJlYWNxdWlyZWQKLSAqIGlmIGFyZWEgbWFwIGlzIGV4dGVuZGVkLgorICogcGNwdV9sb2NrLgogICoKICAqIFJFVFVSTlM6Ci0gKiAwIGlmIG5vb3AsIDEgaWYgc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLCAtZXJybm8gb24gZmFpbHVyZS4KKyAqIE5ldyB0YXJnZXQgbWFwIGFsbG9jYXRpb24gbGVuZ3RoIGlmIGV4dGVuc2lvbiBpcyBuZWNlc3NhcnksIDAKKyAqIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBwY3B1X2V4dGVuZF9hcmVhX21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCitzdGF0aWMgaW50IHBjcHVfbmVlZF90b19leHRlbmQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQogewogCWludCBuZXdfYWxsb2M7Ci0JaW50ICpuZXc7Ci0Jc2l6ZV90IHNpemU7CiAKLQkvKiBoYXMgZW5vdWdoPyAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IGNodW5rLT5tYXBfdXNlZCArIDIpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOwotCiAJbmV3X2FsbG9jID0gUENQVV9ERkxfTUFQX0FMTE9DOwogCXdoaWxlIChuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKQogCQluZXdfYWxsb2MgKj0gMjsKIAotCW5ldyA9IHBjcHVfbWVtX2FsbG9jKG5ld19hbGxvYyAqIHNpemVvZihuZXdbMF0pKTsKLQlpZiAoIW5ldykgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXJldHVybiBuZXdfYWxsb2M7Cit9CisKKy8qKgorICogcGNwdV9leHRlbmRfYXJlYV9tYXAgLSBleHRlbmQgYXJlYSBtYXAgb2YgYSBjaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQG5ld19hbGxvYzogbmV3IHRhcmdldCBhbGxvY2F0aW9uIGxlbmd0aCBvZiB0aGUgYXJlYSBtYXAKKyAqCisgKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHRvIGhhdmUgQG5ld19hbGxvYyBlbnRyaWVzLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4gIEdyYWJzIGFuZCByZWxlYXNlcyBwY3B1X2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgbmV3X2FsbG9jKQoreworCWludCAqb2xkID0gTlVMTCwgKm5ldyA9IE5VTEw7CisJc2l6ZV90IG9sZF9zaXplID0gMCwgbmV3X3NpemUgPSBuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmV3ID0gcGNwdV9tZW1fYWxsb2MobmV3X3NpemUpOworCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQkvKgotCSAqIEFjcXVpcmUgcGNwdV9sb2NrIGFuZCBzd2l0Y2ggdG8gbmV3IGFyZWEgbWFwLiAgT25seSBmcmVlCi0JICogY291bGQgaGF2ZSBoYXBwZW5lZCBpbmJldHdlZW4sIHNvIG1hcF91c2VkIGNvdWxkbid0IGhhdmUKLQkgKiBncm93bi4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOwotCUJVR19PTihuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKTsKKwkvKiBhY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAotCXNpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOwotCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIHNpemUpOworCWlmIChuZXdfYWxsb2MgPD0gY2h1bmstPm1hcF9hbGxvYykKKwkJZ290byBvdXRfdW5sb2NrOworCisJb2xkX3NpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOworCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIG9sZF9zaXplKTsKIAogCS8qCiAJICogbWFwX2FsbG9jIDwgUENQVV9ERkxfTUFQX0FMTE9DIGluZGljYXRlcyB0aGF0IHRoZSBjaHVuayBpcwogCSAqIG9uZSBvZiB0aGUgZmlyc3QgY2h1bmtzIGFuZCBzdGlsbCB1c2luZyBzdGF0aWMgbWFwLgogCSAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IFBDUFVfREZMX01BUF9BTExPQykKLQkJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBzaXplKTsKKwkJb2xkID0gY2h1bmstPm1hcDsKIAogCWNodW5rLT5tYXBfYWxsb2MgPSBuZXdfYWxsb2M7CiAJY2h1bmstPm1hcCA9IG5ldzsKKwluZXcgPSBOVUxMOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBwY3B1X21lbV9mcmVlKCkgbWlnaHQgZW5kIHVwIGNhbGxpbmcgdmZyZWUoKSB3aGljaCB1c2VzCisJICogSVJRLXVuc2FmZSBsb2NrIGFuZCB0aHVzIGNhbid0IGJlIGNhbGxlZCB1bmRlciBwY3B1X2xvY2suCisJICovCisJcGNwdV9tZW1fZnJlZShvbGQsIG9sZF9zaXplKTsKKwlwY3B1X21lbV9mcmVlKG5ldywgbmV3X3NpemUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDMsOCArMTA3MCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCAqcGNwdV9hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkKQogeworCXN0YXRpYyBpbnQgd2Fybl9saW1pdCA9IDEwOwogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKLQlpbnQgc2xvdCwgb2ZmOworCWNvbnN0IGNoYXIgKmVycjsKKwlpbnQgc2xvdCwgb2ZmLCBuZXdfYWxsb2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh1bmxpa2VseSghc2l6ZSB8fCBzaXplID4gUENQVV9NSU5fVU5JVF9TSVpFIHx8IGFsaWduID4gUEFHRV9TSVpFKSkgewogCQlXQVJOKHRydWUsICJpbGxlZ2FsIHNpemUgKCV6dSkgb3IgYWxpZ24gKCV6dSkgZm9yICIKQEAgLTEwNTMsMTcgKzEwODMsMzEgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAogCS8qIHNlcnZlIHJlc2VydmVkIGFsbG9jYXRpb25zIGZyb20gdGhlIHJlc2VydmVkIGNodW5rIGlmIGF2YWlsYWJsZSAqLwogCWlmIChyZXNlcnZlZCAmJiBwY3B1X3Jlc2VydmVkX2NodW5rKSB7CiAJCWNodW5rID0gcGNwdV9yZXNlcnZlZF9jaHVuazsKLQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQgfHwKLQkJICAgIHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSA8IDApCisKKwkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpIHsKKwkJCWVyciA9ICJhbGxvYyBmcm9tIHJlc2VydmVkIGNodW5rIGZhaWxlZCI7CiAJCQlnb3RvIGZhaWxfdW5sb2NrOworCQl9CisKKwkJd2hpbGUgKChuZXdfYWxsb2MgPSBwY3B1X25lZWRfdG9fZXh0ZW5kKGNodW5rKSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQkJaWYgKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCBuZXdfYWxsb2MpIDwgMCkgeworCQkJCWVyciA9ICJmYWlsZWQgdG8gZXh0ZW5kIGFyZWEgbWFwIG9mIHJlc2VydmVkIGNodW5rIjsKKwkJCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCQkJfQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQl9CisKIAkJb2ZmID0gcGNwdV9hbGxvY19hcmVhKGNodW5rLCBzaXplLCBhbGlnbik7CiAJCWlmIChvZmYgPj0gMCkKIAkJCWdvdG8gYXJlYV9mb3VuZDsKKworCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIApAQCAtMTA3NCwxMyArMTExOCwyMCBAQAogCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJZ290byByZXN0YXJ0OwkvKiBwY3B1X2xvY2sgZHJvcHBlZCwgcmVzdGFydCAqLwotCQkJZGVmYXVsdDoKLQkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJbmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuayk7CisJCQlpZiAobmV3X2FsbG9jKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CisJCQkJaWYgKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLAorCQkJCQkJCSBuZXdfYWxsb2MpIDwgMCkgeworCQkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCI7CisJCQkJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisJCQkJfQorCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCQkvKgorCQkJCSAqIHBjcHVfbG9jayBoYXMgYmVlbiBkcm9wcGVkLCBuZWVkIHRvCisJCQkJICogcmVzdGFydCBjcHVfc2xvdCBsaXN0IHdhbGtpbmcuCisJCQkJICovCisJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCiAJCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKQEAgLTEwOTAsMjMgKzExNDEsMjYgQEAKIAl9CiAKIAkvKiBobW1tLi4uIG5vIHNwYWNlIGxlZnQsIGNyZWF0ZSBhIG5ldyBjaHVuayAqLwotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAogCWNodW5rID0gYWxsb2NfcGNwdV9jaHVuaygpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQllcnIgPSAiZmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBjaHVuayI7CiAJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJcGNwdV9jaHVua19yZWxvY2F0ZShjaHVuaywgLTEpOwogCWdvdG8gcmVzdGFydDsKIAogYXJlYV9mb3VuZDoKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBwb3B1bGF0ZSwgbWFwIGFuZCBjbGVhciB0aGUgYXJlYSAqLwogCWlmIChwY3B1X3BvcHVsYXRlX2NodW5rKGNodW5rLCBvZmYsIHNpemUpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAkJcGNwdV9mcmVlX2FyZWEoY2h1bmssIG9mZik7CisJCWVyciA9ICJmYWlsZWQgdG8gcG9wdWxhdGUiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIApAQCAtMTExNiw5ICsxMTcwLDE2IEBACiAJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+YmFzZV9hZGRyICsgb2ZmKTsKIAogZmFpbF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogZmFpbF91bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKKwlpZiAod2Fybl9saW1pdCkgeworCQlwcl93YXJuaW5nKCJQRVJDUFU6IGFsbG9jYXRpb24gZmFpbGVkLCBzaXplPSV6dSBhbGlnbj0lenUsICIKKwkJCSAgICIlc1xuIiwgc2l6ZSwgYWxpZ24sIGVycik7CisJCWR1bXBfc3RhY2soKTsKKwkJaWYgKCEtLXdhcm5fbGltaXQpCisJCQlwcl9pbmZvKCJQRVJDUFU6IGxpbWl0IHJlYWNoZWQsIGRpc2FibGUgd2FybmluZ1xuIik7CisJfQogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMzQ3LDYgKzE0MDgsMTAgQEAKIAlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKIAl1bnNpZ25lZCBpbnQgKmNwdV9tYXA7CiAKKwkvKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgKi8KKwltZW1zZXQoZ3JvdXBfbWFwLCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7CisJbWVtc2V0KGdyb3VwX2NudCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpOworCiAJLyoKIAkgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXQKIAkgKiBhbGxvY19zaXplIGlzIG11bHRpcGxlIG9mIGF0b21fc2l6ZSBhbmQgaXMgdGhlIHNtYWxsZXN0CkBAIC0xNTc0LDYgKzE2MzksNyBAQAogaW50IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCQkJCSAgdm9pZCAqYmFzZV9hZGRyKQogeworCXN0YXRpYyBjaGFyIGNwdXNfYnVmWzQwOTZdIF9faW5pdGRhdGE7CiAJc3RhdGljIGludCBzbWFwWzJdLCBkbWFwWzJdOwogCXNpemVfdCBkeW5fc2l6ZSA9IGFpLT5keW5fc2l6ZTsKIAlzaXplX3Qgc2l6ZV9zdW0gPSBhaS0+c3RhdGljX3NpemUgKyBhaS0+cmVzZXJ2ZWRfc2l6ZSArIGR5bl9zaXplOwpAQCAtMTU4NSwxNyArMTY1MSwyNiBAQAogCWludCAqdW5pdF9tYXA7CiAJaW50IGdyb3VwLCB1bml0LCBpOwogCisJY3B1bWFza19zY25wcmludGYoY3B1c19idWYsIHNpemVvZihjcHVzX2J1ZiksIGNwdV9wb3NzaWJsZV9tYXNrKTsKKworI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKQlkbyB7CQkJCQlcCisJaWYgKHVubGlrZWx5KGNvbmQpKSB7CQkJCQkJXAorCQlwcl9lbWVyZygiUEVSQ1BVOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSwgJXMiLCAjY29uZCk7CVwKKwkJcHJfZW1lcmcoIlBFUkNQVTogY3B1X3Bvc3NpYmxlX21hc2s9JXNcbiIsIGNwdXNfYnVmKTsJXAorCQlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0VNRVJHLCBhaSk7CQkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKIAkvKiBzYW5pdHkgY2hlY2tzICovCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoc21hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DIHx8CiAJCSAgICAgQVJSQVlfU0laRShkbWFwKSA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MpOwotCUJVR19PTihhaS0+bnJfZ3JvdXBzIDw9IDApOwotCUJVR19PTighYWktPnN0YXRpY19zaXplKTsKLQlCVUdfT04oIWJhc2VfYWRkcik7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgPCBzaXplX3N1bSk7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgJiB+UEFHRV9NQVNLKTsKLQlCVUdfT04oYWktPnVuaXRfc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSk7Ci0KLQlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0RFQlVHLCBhaSk7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPm5yX2dyb3VwcyA8PSAwKTsKKwlQQ1BVX1NFVFVQX0JVR19PTighYWktPnN0YXRpY19zaXplKTsKKwlQQ1BVX1NFVFVQX0JVR19PTighYmFzZV9hZGRyKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplIDwgc2l6ZV9zdW0pOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgJiB+UEFHRV9NQVNLKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKIAogCS8qIHByb2Nlc3MgZ3JvdXAgaW5mb3JtYXRpb24gYW5kIGJ1aWxkIGNvbmZpZyB0YWJsZXMgYWNjb3JkaW5nbHkgKi8KIAlncm91cF9vZmZzZXRzID0gYWxsb2NfYm9vdG1lbShhaS0+bnJfZ3JvdXBzICogc2l6ZW9mKGdyb3VwX29mZnNldHNbMF0pKTsKQEAgLTE2MDQsNyArMTY3OSw3IEBACiAJdW5pdF9vZmYgPSBhbGxvY19ib290bWVtKG5yX2NwdV9pZHMgKiBzaXplb2YodW5pdF9vZmZbMF0pKTsKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCi0JCXVuaXRfbWFwW2NwdV0gPSBOUl9DUFVTOworCQl1bml0X21hcFtjcHVdID0gVUlOVF9NQVg7CiAJcGNwdV9maXJzdF91bml0X2NwdSA9IE5SX0NQVVM7CiAKIAlmb3IgKGdyb3VwID0gMCwgdW5pdCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKywgdW5pdCArPSBpKSB7CkBAIC0xNjE4LDggKzE2OTMsOSBAQAogCQkJaWYgKGNwdSA9PSBOUl9DUFVTKQogCQkJCWNvbnRpbnVlOwogCi0JCQlCVUdfT04oY3B1ID4gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpOwotCQkJQlVHX09OKHVuaXRfbWFwW2NwdV0gIT0gTlJfQ1BVUyk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTihjcHUgPiBucl9jcHVfaWRzKTsKKwkJCVBDUFVfU0VUVVBfQlVHX09OKCFjcHVfcG9zc2libGUoY3B1KSk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTih1bml0X21hcFtjcHVdICE9IFVJTlRfTUFYKTsKIAogCQkJdW5pdF9tYXBbY3B1XSA9IHVuaXQgKyBpOwogCQkJdW5pdF9vZmZbY3B1XSA9IGdpLT5iYXNlX29mZnNldCArIGkgKiBhaS0+dW5pdF9zaXplOwpAQCAtMTYzMiw3ICsxNzA4LDExIEBACiAJcGNwdV9ucl91bml0cyA9IHVuaXQ7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlCVUdfT04odW5pdF9tYXBbY3B1XSA9PSBOUl9DUFVTKTsKKwkJUENQVV9TRVRVUF9CVUdfT04odW5pdF9tYXBbY3B1XSA9PSBVSU5UX01BWCk7CisKKwkvKiB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlIGlucHV0LCB1bmRlZmluZSBCVUcgbWFjcm8gYW5kIGR1bXAgY29uZmlnICovCisjdW5kZWYgUENQVV9TRVRVUF9CVUdfT04KKwlwY3B1X2R1bXBfYWxsb2NfaW5mbyhLRVJOX0lORk8sIGFpKTsKIAogCXBjcHVfbnJfZ3JvdXBzID0gYWktPm5yX2dyb3VwczsKIAlwY3B1X2dyb3VwX29mZnNldHMgPSBncm91cF9vZmZzZXRzOwpAQCAtMTc4Miw3ICsxODYyLDcgQEAKIAl2b2lkICpiYXNlID0gKHZvaWQgKilVTE9OR19NQVg7CiAJdm9pZCAqKmFyZWFzID0gTlVMTDsKIAlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKLQlzaXplX3Qgc2l6ZV9zdW0sIGFyZWFzX3NpemU7CisJc2l6ZV90IHNpemVfc3VtLCBhcmVhc19zaXplLCBtYXhfZGlzdGFuY2U7CiAJaW50IGdyb3VwLCBpLCByYzsKIAogCWFpID0gcGNwdV9idWlsZF9hbGxvY19pbmZvKHJlc2VydmVkX3NpemUsIGR5bl9zaXplLCBhdG9tX3NpemUsCkBAIC0xODMyLDggKzE5MTIsMjUgQEAKIAl9CiAKIAkvKiBiYXNlIGFkZHJlc3MgaXMgbm93IGtub3duLCBkZXRlcm1pbmUgZ3JvdXAgYmFzZSBvZmZzZXRzICovCi0JZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykKKwltYXhfZGlzdGFuY2UgPSAwOworCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyspIHsKIAkJYWktPmdyb3Vwc1tncm91cF0uYmFzZV9vZmZzZXQgPSBhcmVhc1tncm91cF0gLSBiYXNlOworCQltYXhfZGlzdGFuY2UgPSBtYXhfdChzaXplX3QsIG1heF9kaXN0YW5jZSwKKwkJCQkgICAgIGFpLT5ncm91cHNbZ3JvdXBdLmJhc2Vfb2Zmc2V0KTsKKwl9CisJbWF4X2Rpc3RhbmNlICs9IGFpLT51bml0X3NpemU7CisKKwkvKiB3YXJuIGlmIG1heGltdW0gZGlzdGFuY2UgaXMgZnVydGhlciB0aGFuIDc1JSBvZiB2bWFsbG9jIHNwYWNlICovCisJaWYgKG1heF9kaXN0YW5jZSA+IChWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpICogMyAvIDQpIHsKKwkJcHJfd2FybmluZygiUEVSQ1BVOiBtYXhfZGlzdGFuY2U9MHglenggdG9vIGxhcmdlIGZvciB2bWFsbG9jICIKKwkJCSAgICJzcGFjZSAweCVseFxuIiwKKwkJCSAgIG1heF9kaXN0YW5jZSwgVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKTsKKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKKwkJLyogYW5kIGZhaWwgaWYgd2UgaGF2ZSBmYWxsYmFjayAqLworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CisjZW5kaWYKKwl9CiAKIAlwcl9pbmZvKCJQRVJDUFU6IEVtYmVkZGVkICV6dSBwYWdlcy9jcHUgQCVwIHMlenUgciV6dSBkJXp1IHUlenVcbiIsCiAJCVBGTl9ET1dOKHNpemVfc3VtKSwgYmFzZSwgYWktPnN0YXRpY19zaXplLCBhaS0+cmVzZXJ2ZWRfc2l6ZSwKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAyOGFhZmUyLi5kZDQzMzczIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC0yNDIsOCArMjQyLDggQEAKIH0KIAogLyoKLSAqIEF0IHdoYXQgdXNlciB2aXJ0dWFsIGFkZHJlc3MgaXMgcGFnZSBleHBlY3RlZCBpbiB2bWE/IGNoZWNraW5nIHRoYXQgdGhlCi0gKiBwYWdlIG1hdGNoZXMgdGhlIHZtYTogY3VycmVudGx5IG9ubHkgdXNlZCBvbiBhbm9uIHBhZ2VzLCBieSB1bnVzZV92bWE7CisgKiBBdCB3aGF0IHVzZXIgdmlydHVhbCBhZGRyZXNzIGlzIHBhZ2UgZXhwZWN0ZWQgaW4gdm1hPworICogY2hlY2tpbmcgdGhhdCB0aGUgcGFnZSBtYXRjaGVzIHRoZSB2bWEuCiAgKi8KIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA5ODYzMWMyNi4uMzU2ZGQ5OTUgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjE4LDcgKzIxOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KQEAgLTEwNDYsOCArMTA0Niw5IEBACiAJICogc3luYyBmcm9tIGV2ZXIgY2FsbGluZyBzaG1lbV93cml0ZXBhZ2U7IGJ1dCBhIHN0YWNraW5nIGZpbGVzeXN0ZW0KIAkgKiBtYXkgdXNlIHRoZSAtPndyaXRlcGFnZSBvZiBpdHMgdW5kZXJseWluZyBmaWxlc3lzdGVtLCBpbiB3aGljaCBjYXNlCiAJICogdG1wZnMgc2hvdWxkIHdyaXRlIG91dCB0byBzd2FwIG9ubHkgaW4gcmVzcG9uc2UgdG8gbWVtb3J5IHByZXNzdXJlLAotCSAqIGFuZCBub3QgZm9yIHBkZmx1c2ggb3Igc3luYy4gIEhvd2V2ZXIsIGluIHRob3NlIGNhc2VzLCB3ZSBkbyBzdGlsbAotCSAqIHdhbnQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHJlZHVuZGFudCBzd2FwcGFnZSB0byBiZSBkaXNjYXJkZWQuCisJICogYW5kIG5vdCBmb3IgdGhlIHdyaXRlYmFjayB0aHJlYWRzIG9yIHN5bmMuICBIb3dldmVyLCBpbiB0aG9zZSBjYXNlcywKKwkgKiB3ZSBkbyBzdGlsbCB3YW50IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWR1bmRhbnQgc3dhcHBhZ2UgdG8gYmUKKwkgKiBkaXNjYXJkZWQuCiAJICovCiAJaWYgKHdiYy0+Zm9yX3JlY2xhaW0pCiAJCXN3YXAgPSBnZXRfc3dhcF9wYWdlKCk7CkBAIC0yNDk3LDcgKzI0OTgsNyBAQAogCS5wdXRfc3VwZXIJPSBzaG1lbV9wdXRfc3VwZXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzID0gewogCS5mYXVsdAkJPSBzaG1lbV9mYXVsdCwKICNpZmRlZiBDT05GSUdfTlVNQQogCS5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0ZGU3ZjAyLi45YzU5MGVlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTExNTEsOCArMTE1MSw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXJldHZhbCA9IHVudXNlX21tKG1tLCBlbnRyeSwgcGFnZSk7CiAKLQkJCQlpZiAoc2V0X3N0YXJ0X21tICYmCi0JCQkJICAgIHN3YXBfY291bnQoKnN3YXBfbWFwKSA8IHN3Y291bnQpIHsKKwkJCQlpZiAoc2V0X3N0YXJ0X21tICYmICpzd2FwX21hcCA8IHN3Y291bnQpIHsKIAkJCQkJbW1wdXQobmV3X3N0YXJ0X21tKTsKIAkJCQkJYXRvbWljX2luYygmbW0tPm1tX3VzZXJzKTsKIAkJCQkJbmV3X3N0YXJ0X21tID0gbW07CkBAIC0xOTc0LDEyICsxOTczLDE0IEBACiAJCWdvdG8gYmFkX3N3YXA7CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7Ci0JCXAtPmZsYWdzIHw9IFNXUF9TT0xJRFNUQVRFOwotCQlwLT5jbHVzdGVyX25leHQgPSAxICsgKHJhbmRvbTMyKCkgJSBwLT5oaWdoZXN0X2JpdCk7CisJaWYgKHAtPmJkZXYpIHsKKwkJaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7CisJCQlwLT5mbGFncyB8PSBTV1BfU09MSURTVEFURTsKKwkJCXAtPmNsdXN0ZXJfbmV4dCA9IDEgKyAocmFuZG9tMzIoKSAlIHAtPmhpZ2hlc3RfYml0KTsKKwkJfQorCQlpZiAoZGlzY2FyZF9zd2FwKHApID09IDApCisJCQlwLT5mbGFncyB8PSBTV1BfRElTQ0FSREFCTEU7CiAJfQotCWlmIChkaXNjYXJkX3N3YXAocCkgPT0gMCkKLQkJcC0+ZmxhZ3MgfD0gU1dQX0RJU0NBUkRBQkxFOwogCiAJbXV0ZXhfbG9jaygmc3dhcG9uX211dGV4KTsKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggNjk1MTFlNi4uMGY1NTFhNCAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yNSwxMCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogCiAKIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KQEAgLTExNTYsMTIgKzExNTcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKKwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaywgdm9pZCAqY2FsbGVyKQogewogCXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwotCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoZmxhZ3MgJiBWTV9JT1JFTUFQKSB7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCiAJCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19nZXRfdm1fYXJlYSk7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgICAgdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAogCQkJCSAgY2FsbGVyKTsKIH0KIApAQCAtMTIyNSwyMiArMTIyNSwyMiBAQAogICovCiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiAJCQkJLTEsIEdGUF9LRVJORUwsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAogCQkJCQkJLTEsIEdGUF9LRVJORUwsIGNhbGxlcik7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwKLQkJCQkgIGdmcF9tYXNrLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCQkJCSAgbm9kZSwgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpmaW5kX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKQEAgLTE0MDMsNyArMTQwMyw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtYXApOwogCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCiAJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcik7CiBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzaywKIAkJCQkgcGdwcm90X3QgcHJvdCwgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKQEAgLTE0MTcsNyArMTQxOCw3IEBACiAJYXJlYS0+bnJfcGFnZXMgPSBucl9wYWdlczsKIAkvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSByZWN1cnNpb24gaXMgc3RyaWN0bHkgYm91bmRlZC4gKi8KIAlpZiAoYXJyYXlfc2l6ZSA+IFBBR0VfU0laRSkgewotCQlwYWdlcyA9IF9fdm1hbGxvY19ub2RlKGFycmF5X3NpemUsIGdmcF9tYXNrIHwgX19HRlBfWkVSTywKKwkJcGFnZXMgPSBfX3ZtYWxsb2Nfbm9kZShhcnJheV9zaXplLCAxLCBnZnBfbWFzayB8IF9fR0ZQX1pFUk8sCiAJCQkJUEFHRV9LRVJORUwsIG5vZGUsIGNhbGxlcik7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX1ZQQUdFUzsKIAl9IGVsc2UgewpAQCAtMTQ3Niw2ICsxNDc3LDcgQEAKIC8qKgogICoJX192bWFsbG9jX25vZGUgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeQogICoJQHNpemU6CQlhbGxvY2F0aW9uIHNpemUKKyAqCUBhbGlnbjoJCWRlc2lyZWQgYWxpZ25tZW50CiAgKglAZ2ZwX21hc2s6CWZsYWdzIGZvciB0aGUgcGFnZSBsZXZlbCBhbGxvY2F0b3IKICAqCUBwcm90OgkJcHJvdGVjdGlvbiBtYXNrIGZvciB0aGUgYWxsb2NhdGVkIHBhZ2VzCiAgKglAbm9kZToJCW5vZGUgdG8gdXNlIGZvciBhbGxvY2F0aW9uIG9yIC0xCkBAIC0xNDg1LDggKzE0ODcsOSBAQAogICoJYWxsb2NhdG9yIHdpdGggQGdmcF9tYXNrIGZsYWdzLiAgTWFwIHRoZW0gaW50byBjb250aWd1b3VzCiAgKglrZXJuZWwgdmlydHVhbCBzcGFjZSwgdXNpbmcgYSBwYWdldGFibGUgcHJvdGVjdGlvbiBvZiBAcHJvdC4KICAqLwotc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCi0JCQkJCQlpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKKwkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqYWRkcjsKQEAgLTE0OTYsOCArMTQ5OSw4IEBACiAJaWYgKCFzaXplIHx8IChzaXplID4+IFBBR0VfU0hJRlQpID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCi0JYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCi0JCQkJCQlub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKKwlhcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwKKwkJCQkgIFZNQUxMT0NfRU5ELCBub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKIAogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNTE2LDcgKzE1MTksNyBAQAogCiB2b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgZ2ZwX21hc2ssIHByb3QsIC0xLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBnZnBfbWFzaywgcHJvdCwgLTEsCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX192bWFsbG9jKTsKQEAgLTE1MzIsNyArMTUzNSw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKIAkJCQkJLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2MpOwpAQCAtMTU0OSw3ICsxNTUyLDggQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXZvaWQgKnJldDsKIAotCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKKwlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCBTSE1MQkEsCisJCQkgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKIAkJCSAgICAgUEFHRV9LRVJORUwsIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmIChyZXQpIHsKIAkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwpAQCAtMTU3Miw3ICsxNTc2LDcgQEAKICAqLwogdm9pZCAqdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAogCQkJCQlub2RlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vZGUpOwpAQCAtMTU5NSw3ICsxNTk5LDcgQEAKIAogdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMX0VYRUMsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTF9FWEVDLAogCQkJICAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKQEAgLTE2MTYsNyArMTYyMCw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2NfMzIodW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfVk1BTExPQzMyLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX1ZNQUxMT0MzMiwgUEFHRV9LRVJORUwsCiAJCQkgICAgICAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMik7CkBAIC0xNjMzLDcgKzE2MzcsNyBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqcmV0OwogCi0JcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLAorCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCwKIAkJCSAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJaWYgKHJldCkgewogCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDEyMTljZWIuLjc3N2FmNTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01NDQsNiArNTQ0LDE2IEBACiAJCSAqLwogCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CiAJCWFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QocGFnZSk7CisJCS8qCisJCSAqIFdoZW4gcmFjaW5nIHdpdGggYW4gbWxvY2sgY2xlYXJpbmcgKHBhZ2UgaXMKKwkJICogdW5sb2NrZWQpLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgb3RoZXIgdGhyZWFkIGRvZXMKKwkJICogbm90IG9ic2VydmUgb3VyIHNldHRpbmcgb2YgUEdfbHJ1IGFuZCBmYWlscworCQkgKiBpc29sYXRpb24sIHdlIHNlZSBQR19tbG9ja2VkIGNsZWFyZWQgYmVsb3cgYW5kIG1vdmUKKwkJICogdGhlIHBhZ2UgYmFjayB0byB0aGUgZXZpY3RhYmxlIGxpc3QuCisJCSAqCisJCSAqIFRoZSBvdGhlciBzaWRlIGlzIFRlc3RDbGVhclBhZ2VNbG9ja2VkKCkuCisJCSAqLworCQlzbXBfbWIoKTsKIAl9CiAKIAkvKgpAQCAtMTA4OCw3ICsxMDk4LDcgQEAKIAlpbnQgbHVtcHlfcmVjbGFpbSA9IDA7CiAKIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQoem9uZSwgZmlsZSwgc2MpKSkgewotCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKKwkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwogCiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KIAkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtMTM1Niw3ICsxMzY2LDcgQEAKIAkJCSAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIHBhZ2VzLAogCQkJICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS4KIAkJCSAqLwotCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmICFQYWdlQW5vbihwYWdlKSkgeworCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkgewogCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2FjdGl2ZSk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xNzA5LDEwICsxNzE5LDEwIEBACiAgKgogICogSWYgdGhlIGNhbGxlciBpcyAhX19HRlBfRlMgdGhlbiB0aGUgcHJvYmFiaWxpdHkgb2YgYSBmYWlsdXJlIGlzIHJlYXNvbmFibHkKICAqIGhpZ2ggLSB0aGUgem9uZSBtYXkgYmUgZnVsbCBvZiBkaXJ0eSBvciB1bmRlci13cml0ZWJhY2sgcGFnZXMsIHdoaWNoIHRoaXMKLSAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayBwZGZsdXNoIGFuZCB0YWtlIGV4cGxpY2l0IG5hcHMgaW4gdGhlCi0gKiBob3BlIHRoYXQgc29tZSBvZiB0aGVzZSBwYWdlcyBjYW4gYmUgd3JpdHRlbi4gIEJ1dCBpZiB0aGUgYWxsb2NhdGluZyB0YXNrCi0gKiBob2xkcyBmaWxlc3lzdGVtIGxvY2tzIHdoaWNoIHByZXZlbnQgd3JpdGVvdXQgdGhpcyBtaWdodCBub3Qgd29yaywgYW5kIHRoZQotICogYWxsb2NhdGlvbiBhdHRlbXB0IHdpbGwgZmFpbC4KKyAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayB0aGUgd3JpdGViYWNrIHRocmVhZHMgYW5kIHRha2UgZXhwbGljaXQKKyAqIG5hcHMgaW4gdGhlIGhvcGUgdGhhdCBzb21lIG9mIHRoZXNlIHBhZ2VzIGNhbiBiZSB3cml0dGVuLiAgQnV0IGlmIHRoZQorICogYWxsb2NhdGluZyB0YXNrIGhvbGRzIGZpbGVzeXN0ZW0gbG9ja3Mgd2hpY2ggcHJldmVudCB3cml0ZW91dCB0aGlzIG1pZ2h0IG5vdAorICogd29yaywgYW5kIHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgd2lsbCBmYWlsLgogICoKICAqIHJldHVybnM6CTAsIGlmIG5vIHBhZ2VzIHJlY2xhaW1lZAogICogCQllbHNlLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHJlY2xhaW1lZApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDViZjVmMjIuLjhhZjk1YjIgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTU4MiwxMSArNTgyLDkgQEAKIAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7Ci0JZmlkLT5yZGlyX2Zwb3MgPSAwOwogCWZpZC0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCWZpZC0+Y2xudCA9IGNsbnQ7Ci0JZmlkLT5hdXggPSBOVUxMOwotCisJZmlkLT5yZGlyID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZmaWQtPmZsaXN0LCAmY2xudC0+ZmlkbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOwpAQCAtNjA5LDYgKzYwNyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmZmlkLT5mbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOworCWtmcmVlKGZpZC0+cmRpcik7CiAJa2ZyZWUoZmlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGIyZTA3ZjAuLmVhMWUzZGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAKICNkZWZpbmUgVklSVFFVRVVFX05VTQkxMjgKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNmViOGQ0Ny4uNTRjNjM0ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM2Myw2ICszNjMsNyBAQAogCQkJCSAgKiBkZXZpY2UgbmFtZSAobm90IHdoZW4gdGhlIGluamVjdCBpcwogCQkJCSAgKiBzdGFydGVkIGFzIGl0IHVzZWQgdG8gZG8uKQogCQkJCSAgKi8KKwljaGFyIG9kZXZuYW1lWzMyXTsKIAlzdHJ1Y3QgZmxvd19zdGF0ZSAqZmxvd3M7CiAJdW5zaWduZWQgY2Zsb3dzOwkvKiBDb25jdXJyZW50IGZsb3dzIChjb25maWcpICovCiAJdW5zaWduZWQgbGZsb3c7CQkvKiBGbG93IGxlbmd0aCAgKGNvbmZpZykgKi8KQEAgLTUyOCw3ICs1MjksNyBAQAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAlbGx1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAogCQkgICBwa3RfZGV2LT5uZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmRlbGF5LAotCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKIAkJICAgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTY4OCwxMyArMTY4OSwxMyBAQAogCWlmX2xvY2sodCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuU3RvcHBlZDogIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQogCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlpZiAodC0+cmVzdWx0WzBdKQogCQlzZXFfcHJpbnRmKHNlcSwgIlxuUmVzdWx0OiAlc1xuIiwgdC0+cmVzdWx0KTsKQEAgLTE5OTQsNyArMTk5NSw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21pbiAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gbnR4cSAtIDE7CiAJfQogCWlmIChwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID49IG50eHEpIHsKQEAgLTIwMDIsNyArMjAwMyw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21heCAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgsIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQogCkBAIC0zMjYyLDcgKzMyNjMsNyBAQAogCiAJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5ICIKLQkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKKwkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzQ2NCw3ICszNDY1LDcgQEAKIAlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInBrdGdlbjogJXMgeG1pdCBlcnJvcjogJWRcbiIsCi0JCQkJb2Rldi0+bmFtZSwgcmV0KTsKKwkJCQlwa3RfZGV2LT5vZGV2bmFtZSwgcmV0KTsKIAkJcGt0X2Rldi0+ZXJyb3JzKys7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBORVRERVZfVFhfTE9DS0VEOgpAQCAtMzU3Miw3ICszNTczLDcgQEAKIAlpZl9sb2NrKHQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdC0+aWZfbGlzdCwgbGlzdCkKLQkJaWYgKHN0cm5jbXAocC0+b2Rldi0+bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgeworCQlpZiAoc3RybmNtcChwLT5vZGV2bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgewogCQkJcGt0X2RldiA9IHA7CiAJCQlicmVhazsKIAkJfQpAQCAtMzYyOCw2ICszNjI5LDcgQEAKIAlpZiAoIXBrdF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc3RyY3B5KHBrdF9kZXYtPm9kZXZuYW1lLCBpZm5hbWUpOwogCXBrdF9kZXYtPmZsb3dzID0gdm1hbGxvYyhNQVhfQ0ZMT1dTICogc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CiAJaWYgKHBrdF9kZXYtPmZsb3dzID09IE5VTEwpIHsKIAkJa2ZyZWUocGt0X2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IGVhZmMwMTAuLjNjMTc1NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwppbmRleCA2MjExNjgyLi4zMTVlYWQzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDdiNmI2MzEuLmQzNDAxMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCmluZGV4IGNmOWE0YjUzLi5jY2NjMmU5IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNpbmNsdWRlICJpcm5ldF9pcmRhLmgiCQkvKiBQcml2YXRlIGhlYWRlciAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKaW5kZXggNjhjYmNiMS4uN2RlYTg4MiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqCTIpIGFzIGEgY29udHJvbCBjaGFubmVsICh3cml0ZSBjb21tYW5kcywgcmVhZCBldmVudHMpCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlICJpcm5ldF9wcHAuaCIJCS8qIFByaXZhdGUgaGVhZGVyICovCiAvKiBQbGVhc2UgcHV0IG90aGVyIGhlYWRlcnMgaW4gaXJuZXQuaCAtIFRoYW5rcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9kZWJ1Z2ZzLmMKaW5kZXggYTU5MDQzZmIuLjQ1NjY3MDUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9kZWJ1Z2ZzLmMKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwpAQCAtNiw2ICs2LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDBjZGZiMzguLmI5MTY4YzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCmluZGV4IGM5MzQ5NGYuLmQ2NWQzNDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwpAQCAtMTI4LDkgKzEyOCw4IEBACiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgKnNlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhSQ1UpCiB7Ci0JcmN1X3JlYWRfbG9jaygpOworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAKIAlpZiAoKnBvcyA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE0OSw5ICsxNDgsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBzZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi0JX19yZWxlYXNlcyhSQ1UpCiB7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKQEAgLTE2MSw3ICsxNTksNyBAQAogCXN0cnVjdCBuZl9sb2dnZXIgKnQ7CiAJaW50IHJldDsKIAotCWxvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzWypwb3NdKTsKKwlsb2dnZXIgPSBuZl9sb2dnZXJzWypwb3NdOwogCiAJaWYgKCFsb2dnZXIpCiAJCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkIE5PTkUgKCIsICpwb3MpOwpAQCAtMTcxLDIyICsxNjksMTYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbmZfbG9nZ2Vyc19sWypwb3NdLCBsaXN0Wypwb3NdKSB7CiAJCXJldCA9IHNlcV9wcmludGYocywgIiVzIiwgdC0+bmFtZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlpZiAoJnQtPmxpc3RbKnBvc10gIT0gbmZfbG9nZ2Vyc19sWypwb3NdLnByZXYpIHsKIAkJCXJldCA9IHNlcV9wcmludGYocywgIiwiKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKLQkJCX0KIAkJfQogCX0KLQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CiAKIAlyZXR1cm4gc2VxX3ByaW50ZihzLCAiKVxuIik7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKaW5kZXggMmU4MDg5ZS4uMjc3M2JlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAKIAlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIHN0YXRlLiAqLwogCXItPm1hc3RlciA9IHByaXY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwppbmRleCA2M2UxOTA1Li40ZDFhNDFiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKnNmOwotCWludCBlcnIgPSBFTk9FTlQ7CisJaW50IGVyciA9IC1FTk9FTlQ7CiAKIAlpZiAoIW9zZl9hdHRyc1tPU0ZfQVRUUl9GSU5HRVJdKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDQ4YjE4ZGEuLmYyZDExNmEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMjA4MSw3ICsyMDgxLDcgQEAKIAkJYXRvbWljX2RlYygmcGt0X3NrKHNrKS0+bWFwcGVkKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYWNrZXRfbW1hcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBhY2tldF9tbWFwX29wcyA9IHsKIAkub3Blbgk9CXBhY2tldF9tbV9vcGVuLAogCS5jbG9zZQk9CXBhY2tldF9tbV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IDdjYjU3ZmYuLmEwMDFmN2MgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvY29yZS5jCisrKyBiL25ldC9yZmtpbGwvY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwppbmRleCAwY2Y1ZThjLi4zZmE1NzUxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjX3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvcnBjX3JkbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggNDViMmJlMy4uYTU5NWY3MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJubDgwMjExLmgiCmRpZmYgLS1naXQgYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKaW5kZXggOWNmODBhMS4uMjZmYWIzMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCisrKyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwpAQCAtMjgsNyArMjgsNyBAQAogCXJldHVybiAtRVBFUk07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1hcmtfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFya19vcHMgPSB7CiAJLm9wZW4gPSBteV9vcGVuLAogfTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNGY5YzE5MC4uYzY3ZTczZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC0xMDAsNyArMTAwLDcgQEAKICMgVXNhZ2U6IGNmbGFncy15ICs9ICQoY2FsbCBhcy1pbnN0cixpbnN0cixvcHRpb24xLG9wdGlvbjIpCiAKIGFzLWluc3RyID0gJChjYWxsIHRyeS1ydW4sXAotCWVjaG8gLWUgIiQoMSkiIHwgJChDQykgJChLQlVJTERfQUZMQUdTKSAtYyAteGFzc2VtYmxlciAtbyAiJCRUTVAiIC0sJCgyKSwkKDMpKQorCS9iaW4vZWNobyAtZSAiJCgxKSIgfCAkKENDKSAkKEtCVUlMRF9BRkxBR1MpIC1jIC14YXNzZW1ibGVyIC1vICIkJFRNUCIgLSwkKDIpLCQoMykpCiAKICMgY2Mtb3B0aW9uCiAjIFVzYWdlOiBjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD13aW5jaGlwLWM2LC1tYXJjaD1pNTg2KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCA3YTc3Nzg3Li5mZmRhZmIyIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtMjA4LDcgKzIwOCw3IEBACiAKICMgQnppcDIgYW5kIExaTUEgZG8gbm90IGluY2x1ZGUgc2l6ZSBpbiBmaWxlLi4uIHNvIHdlIGhhdmUgdG8gZmFrZSB0aGF0OwogIyBhcHBlbmQgdGhlIHNpemUgYXMgYSAzMi1iaXQgbGl0dGxlZW5kaWFuIG51bWJlciBhcyBnemlwIGRvZXMuCi1zaXplX2FwcGVuZCA9IGVjaG8gLW5lICQoc2hlbGwJCQkJCQlcCitzaXplX2FwcGVuZCA9IC9iaW4vZWNobyAtbmUgJChzaGVsbAkJCQkJXAogZGVjX3NpemU9MDsJCQkJCQkJCVwKIGZvciBGIGluICQxOyBkbwkJCQkJCQkJXAogCWZzaXplPSQkKHN0YXQgLWMgIiVzIiAkJEYpOwkJCQkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoIGIvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCmluZGV4IDM5Njc3YzguLjQ2YmUzYzUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaAorKysgYi9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKQEAgLTksNyArOSw3IEBACiAjIERvaW5nIHRoaXMgb25jZSBhdCB0aGUgYmVnaW5uaW5nIHNhdmVzIGEgbG90IG9mIHRpbWUsIG9uIGEgY2FjaGUtaG90IHRyZWUuCiBLY29uZmlncz0iYGZpbmQgLiAtbmFtZSAnS2NvbmZpZycgLW8gLW5hbWUgJ0tjb25maWcqW15+XSdgIgogCi1lY2hvIC1lICJGaWxlIGxpc3QgXHR1bmRlZmluZWQgc3ltYm9sIHVzZWQiCisvYmluL2VjaG8gLWUgIkZpbGUgbGlzdCBcdHVuZGVmaW5lZCBzeW1ib2wgdXNlZCIKIGZpbmQgJHBhdGhzIC1uYW1lICcqLltjaFNdJyAtbyAtbmFtZSAnTWFrZWZpbGUnIC1vIC1uYW1lICdNYWtlZmlsZSpbXn5dJ3wgd2hpbGUgcmVhZCBpCiBkbwogCSMgT3V0cHV0IHRoZSBiYXJlIEtjb25maWcgdmFyaWFibGUgYW5kIHRoZSBmaWxlbmFtZTsgdGhlIF9NT0RVTEUgcGFydCBhdApAQCAtNTQsNiArNTQsNiBAQAogCSMgYmV5b25kIHRoZSBwdXJwb3NlIG9mIHRoaXMgc2NyaXB0LgogCXN5bWJfYmFyZT1gZWNobyAkc3ltYiB8IHNlZCAtZSAncy9fTU9EVUxFLy8nYAogCWlmICEgZ3JlcCAtcSAiXDwkc3ltYl9iYXJlXD4iICRLY29uZmlnczsgdGhlbgotCQllY2hvIC1lICIkZmlsZXM6IFx0JHN5bWIiCisJCS9iaW4vZWNobyAtZSAiJGZpbGVzOiBcdCRzeW1iIgogCWZpCiBkb25lfHNvcnQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCA4N2JiYjhiLi5iYzQxMTRmIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0yLDcgKzIsNyBAQAogIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCiAjIChjKSAyMDA1LCBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4gKHRoZSB1Z2x5IGJpdCkKICMgKGMpIDIwMDcsMjAwOCwgQW5keSBXaGl0Y3JvZnQgPGFwd0B1ay5pYm0uY29tPiAobmV3IGNvbmRpdGlvbnMsIHRlc3Qgc3VpdGUpCi0jIChjKSAyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisjIChjKSAyMDA4LDIwMDksIEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAKIHVzZSBzdHJpY3Q7CkBAIC0xMCw3ICsxMCw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMjknOworbXkgJFYgPSAnMC4zMCc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTEzMCw3ICsxMzAsMTAgQEAKIAogbXkgJGVtaXR0ZWRfY29ycnVwdCA9IDA7CiAKLW91ciAkSWRlbnQgICAgICAgPSBxcntbQS1aYS16X11bQS1aYS16XGRfXSp9Oworb3VyICRJZGVudAk9IHFyeworCQkJW0EtWmEtel9dW0EtWmEtelxkX10qCisJCQkoPzpccypcI1wjXHMqW0EtWmEtel9dW0EtWmEtelxkX10qKSoKKwkJfXg7CiBvdXIgJFN0b3JhZ2UJPSBxcntleHRlcm58c3RhdGljfGFzbWxpbmthZ2V9Owogb3VyICRTcGFyc2UJPSBxcnsKIAkJCV9fdXNlcnwKQEAgLTk5NywyMyArMTAwMCwyNSBAQAogCiBzdWIgcG9zc2libGUgewogCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOwotCi0JcHJpbnQgIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOwotCWlmICgkcG9zc2libGUgIX4gLyg/OgorCW15ICRub3RQZXJtaXR0ZWQgPSBxcnsoPzoKIAkJXig/OgogCQkJJE1vZGlmaWVyfAogCQkJJFN0b3JhZ2V8CiAJCQkkVHlwZXwKLQkJCURFRklORV9cUyt8CisJCQlERUZJTkVfXFMrCisJCSkkfAorCQleKD86CiAJCQlnb3RvfAogCQkJcmV0dXJufAogCQkJY2FzZXwKIAkJCWVsc2V8CiAJCQlhc218X19hc21fX3wKIAkJCWRvCi0JCSkkfAorCQkpKD86XHN8JCl8CiAJCV4oPzp0eXBlZGVmfHN0cnVjdHxlbnVtKVxiCi0JICAgICkveCkgeworCSAgICApfXg7CisJd2FybiAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAkbm90UGVybWl0dGVkKSB7CiAJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KIAkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CkBAIC0xMDIyLDggKzEwMjcsMTAgQEAKIAkJfSBlbHNpZiAoJHBvc3NpYmxlID1+IC9ccy8pIHsKIAkJCSRwb3NzaWJsZSA9fiBzL1xzKiRUeXBlXHMqLy9nOwogCQkJZm9yIG15ICRtb2RpZmllciAoc3BsaXQoJyAnLCAkcG9zc2libGUpKSB7Ci0JCQkJd2FybiAiTU9ESUZJRVI6ICRtb2RpZmllciAoJHBvc3NpYmxlKSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlKTsKLQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJaWYgKCRtb2RpZmllciAhfiAkbm90UGVybWl0dGVkKSB7CisJCQkJCXdhcm4gIk1PRElGSUVSOiAkbW9kaWZpZXIgKCRwb3NzaWJsZSkgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSk7CisJCQkJCXB1c2goQG1vZGlmaWVyTGlzdCwgJG1vZGlmaWVyKTsKKwkJCQl9CiAJCQl9CiAKIAkJfSBlbHNlIHsKQEAgLTExMzgsNiArMTE0NSw3IEBACiAJIyBzdXBwcmVzc2lvbiBmbGFncwogCW15ICVzdXBwcmVzc19pZmJyYWNlczsKIAlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKKwlteSAlc3VwcHJlc3NfZXhwb3J0OwogCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KQEAgLTEyMzAsNyArMTIzOCw2IEBACiAJCSRsaW5lbnIrKzsKIAogCQlteSAkcmF3bGluZSA9ICRyYXdsaW5lc1skbGluZW5yIC0gMV07Ci0JCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CiAKICNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCiAJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewpAQCAtMTI0Nyw2ICsxMjU0LDcgQEAKIAogCQkJJXN1cHByZXNzX2lmYnJhY2VzID0gKCk7CiAJCQklc3VwcHJlc3Nfd2hpbGV0cmFpbGVycyA9ICgpOworCQkJJXN1cHByZXNzX2V4cG9ydCA9ICgpOwogCQkJbmV4dDsKIAogIyB0cmFjayB0aGUgbGluZSBudW1iZXIgYXMgd2UgbW92ZSB0aHJvdWdoIHRoZSBodW5rLCBub3RlIHRoYXQKQEAgLTEyNzAsNiArMTI3OCw4IEBACiAJCQkkcmVhbGNudC0tOwogCQl9CiAKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKKwogI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKIAkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JHJlYWxsaW5lOiAiIGlmICgkZW1hY3MgJiYgJGZpbGUpOwogCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokbGluZW5yOiAiIGlmICgkZW1hY3MgJiYgISRmaWxlKTsKQEAgLTE0MjAsMTMgKzE0MzAsMjIgQEAKIAkJfQogCiAjIENoZWNrIGZvciBwb3RlbnRpYWwgJ2JhcmUnIHR5cGVzCi0JCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQsCisJCSAgICAkcmVhbGxpbmVfbmV4dCk7CiAJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgewogCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KIAkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKIAkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOwogCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CiAKKwkJCSMgRmluZCB0aGUgcmVhbCBuZXh0IGxpbmUuCisJCQkkcmVhbGxpbmVfbmV4dCA9ICRsaW5lX25yX25leHQ7CisJCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkJICAgICghZGVmaW5lZCAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSB8fAorCQkJICAgICBzdWJzdHIoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0sICRvZmZfbmV4dCkgPX4gL15ccyokLykpIHsKKwkJCQkkcmVhbGxpbmVfbmV4dCsrOworCQkJfQorCiAJCQlteSAkcyA9ICRzdGF0OwogCQkJJHMgPX4gcy97LiokLy9zOwogCkBAIC0xNjYxLDggKzE2ODAsOCBAQAogCQl9CiAKICMgY2hlY2sgZm9yIGluaXRpYWxpc2F0aW9uIHRvIGFnZ3JlZ2F0ZXMgb3BlbiBicmFjZSBvbiB0aGUgbmV4dCBsaW5lCi0JCWlmICgkcHJldmxpbmUgPX4gLyREZWNsYXJlXHMqJElkZW50XHMqPVxzKiQvICYmCi0JCSAgICAkbGluZSA9fiAvXi5ccyp7LykgeworCQlpZiAoJGxpbmUgPX4gL14uXHMqey8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvKD86XnxbXj1dKT1ccyokLykgewogCQkJRVJST1IoInRoYXQgb3BlbiBicmFjZSB7IHNob3VsZCBiZSBvbiB0aGUgcHJldmlvdXMgbGluZVxuIiAuICRoZXJlcHJldik7CiAJCX0KIApAQCAtMTY4NywyMSArMTcwNiw0MCBAQAogCQkkbGluZSA9fiBzQC8vLipAQDsKIAkJJG9wbGluZSA9fiBzQC8vLipAQDsKIAotI0VYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24gY2xvc2luZyB9LgotCQlpZiAoKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8pIHx8Ci0JCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjIEVYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgdGhpbmcgaXQgaXMgZXhwb3J0aW5nLCBjb25zaWRlcgorIyB0aGUgd2hvbGUgc3RhdGVtZW50LgorI3ByaW50ICJBUFcgPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPlxuIjsKKwkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJICAgIGV4aXN0cyAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSAmJgorCQkgICAgIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gJiYKKwkJICAgICgkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CiAJCQlteSAkbmFtZSA9ICQxOwotCQkJaWYgKCRwcmV2bGluZSAhfiAvKD86Ci0JCQkJXi59fAorCQkJaWYgKCRzdGF0ICF+IC8oPzoKKwkJCQlcbi59XHMqJHwKIAkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKLQkJCQleLiRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8Ci0JCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD18XFspCisJCQkJXi4oPzokU3RvcmFnZVxzKyk/JFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKKwkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpKlxzKig/Ojt8PXxcW3xcKCkKIAkJCSAgICApL3gpIHsKLQkJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKKyNwcmludCAiRk9PIEE8JGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0+IHN0YXQ8JHN0YXQ+IG5hbWU8JG5hbWU+XG4iOworCQkJCSRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAxOwogCQkJfQogCQl9CisJCWlmICghZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ICYmCisJCSAgICAkcHJldmxpbmUgPX4gL14uXHMqJC8gJiYKKwkJICAgICgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjcHJpbnQgIkZPTyBCIDwkbGluZXNbJGxpbmVuciAtIDFdPlxuIjsKKwkJCSRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPSAyOworCQl9CisJCWlmIChkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPT0gMikgeworCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CisJCX0KIAogIyBjaGVjayBmb3IgZXh0ZXJuYWwgaW5pdGlhbGlzZXJzLgogCQlpZiAoJGxpbmUgPX4gL14uJFR5cGVccyokSWRlbnRccyooPzpccyskTW9kaWZpZXIpKlxzKj1ccyooMHxOVUxMfGZhbHNlKVxzKjsvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kYXRhLmMgYi9zY3JpcHRzL2R0Yy9kYXRhLmMKaW5kZXggZGQyZTNkMy4uZmU1NTVlOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvZGF0YS5jCisrKyBiL3NjcmlwdHMvZHRjL2RhdGEuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJcmV0dXJuIGQ7CiB9CiAKLXN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX21hcmtlcnMoc3RydWN0IGRhdGEgZCwgc3RydWN0IG1hcmtlciAqbSkKK3N0YXRpYyBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9tYXJrZXJzKHN0cnVjdCBkYXRhIGQsIHN0cnVjdCBtYXJrZXIgKm0pCiB7CiAJc3RydWN0IG1hcmtlciAqKm1wID0gJmQubWFya2VyczsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmwgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubAppbmRleCA0NGRiZmQzLi5hNjI3YmJlIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubAorKysgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubApAQCAtMTgsNyArMTgsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBCiAgKi8KIAotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IHl5bGluZW5vCislb3B0aW9uIG5veXl3cmFwIG5vaW5wdXQgbm91bnB1dCB5eWxpbmVubwogCiAleCBJTkNMVURFCiAleCBCWVRFU1RSSU5HCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZCBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCmluZGV4IGFjMzkyY2IuLmUyN2NjNjMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM0CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQogI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKICNkZWZpbmUgRkxFWF9CRVRBCiAjZW5kaWYKQEAgLTU0LDcgKzU0LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KIAogLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLwogI2lmbmRlZiBJTlQ4X01JTgpAQCAtODUsNiArODQsOCBAQAogI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKICNlbmRpZgogCisjZW5kaWYgLyogISBDOTkgKi8KKwogI2VuZGlmIC8qICEgRkxFWElOVF9IICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMTQxLDcgKzE0MiwxNSBAQAogCiAvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwogI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQogI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KQEAgLTE5MiwxMyArMjAxLDYgQEAKIAogI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKIAotLyogVGhlIGZvbGxvd2luZyBpcyBiZWNhdXNlIHdlIGNhbm5vdCBwb3J0YWJseSBnZXQgb3VyIGhhbmRzIG9uIHNpemVfdAotICogKHdpdGhvdXQgYXV0b2NvbmYncyBoZWxwLCB3aGljaCBpc24ndCBhdmFpbGFibGUgYmVjYXVzZSB3ZSB3YW50Ci0gKiBmbGV4LWdlbmVyYXRlZCBzY2FubmVycyB0byBjb21waWxlIG9uIHRoZWlyIG93bikuCi0gKiBHaXZlbiB0aGF0IHRoZSBzdGFuZGFyZCBoYXMgZGVjcmVlZCB0aGF0IHNpemVfdCBleGlzdHMgc2luY2UgMTk4OSwKLSAqIEkgZ3Vlc3Mgd2UgY2FuIGFmZm9yZCB0byBkZXBlbmQgb24gaXQuIE1hbm9qLgotICovCi0KICNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKICNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKQEAgLTYwNCw2ICs2MDYsNyBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0EKICAqLworI2RlZmluZSBZWV9OT19JTlBVVCAxCiAKIAogCkBAIC02MzQsNyArNjM3LDcgQEAKIAogc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKIHN0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCk7Ci0jbGluZSA2MzggImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDY0MSAiZHRjLWxleGVyLmxleC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAogI2RlZmluZSBJTkNMVURFIDEKQEAgLTY1Niw2ICs2NTksMzUgQEAKIAogc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKIAorLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHl5bGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lkIHl5c2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK2ludCB5eWdldF9sZW5nICh2b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAodm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCiAvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgogICogc2VjdGlvbiAxLgogICovCkBAIC02ODgsNyArNzIwLDEyIEBACiAKIC8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KICNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTYzODQKKyNlbHNlCiAjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KQEAgLTY5Niw3ICs3MzMsNyBAQAogLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCiAgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgogICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkpIHt9IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLApAQCAtNzA3LDcgKzc0NCw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJaW50IG47IFwKKwkJc2l6ZV90IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtNzkxLDcgKzgyOCw3IEBACiAgICAgCiAjbGluZSA2NCAiZHRjLWxleGVyLmwiCiAKLSNsaW5lIDc5NSAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgODMyICJkdGMtbGV4ZXIubGV4LmMiCiAKIAlpZiAoICEoeXlfaW5pdCkgKQogCQl7CkBAIC0xMTE2LDcgKzExNTMsNyBAQAogI2xpbmUgMjIyICJkdGMtbGV4ZXIubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDExMjAgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDExNTcgImR0Yy1sZXhlci5sZXguYyIKIAogCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKIAkJewpAQCAtMTg0MCw4ICsxODc3LDggQEAKIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCiAgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCiAgKiAKICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMgYi9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMKaW5kZXggZmJiYmE0NC4uMjJlNjkyOTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYworKysgYi9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJCQkgICAgICZwaGFuZGxlLCBzaXplb2YocGhhbmRsZSkpOwogfQogCi1pbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3QgY2hhciAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3QgY2hhciAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpbnQgbGVuID0gc3RybGVuKHN0cik7CiAJY29uc3QgY2hhciAqcDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYyBiL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYwppbmRleCBlYmViNmViLi4xNTIxZmYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy90cmVlc291cmNlLmMKKysrIGIvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJCWZwdXRjKCdcdCcsIGYpOwogfQogCi1pbnQgaXNzdHJpbmcoY2hhciBjKQorc3RhdGljIGludCBpc3N0cmluZyhjaGFyIGMpCiB7CiAJcmV0dXJuIChpc3ByaW50KGMpCiAJCXx8IChjID09ICdcMCcpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZCBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCmluZGV4IDk3MWUwMTEuLjI4NzQ2N2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkCkBAIC0xLDQgKzEsNCBAQAotLyogQU5TSS1DIGNvZGUgcHJvZHVjZWQgYnkgZ3BlcmYgdmVyc2lvbiAzLjAuMiAqLworLyogQU5TSS1DIGNvZGUgcHJvZHVjZWQgYnkgZ3BlcmYgdmVyc2lvbiAzLjAuMyAqLwogLyogQ29tbWFuZC1saW5lOiBncGVyZiAtTCBBTlNJLUMgLWEgLUMgLUUgLWcgLUggaXNfcmVzZXJ2ZWRfaGFzaCAtayAnMSwzLCQnIC1OIGlzX3Jlc2VydmVkX3dvcmQgLXAgLXQgc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiAgKi8KIAogI2lmICEoKCcgJyA9PSAzMikgJiYgKCchJyA9PSAzMykgJiYgKCciJyA9PSAzNCkgJiYgKCcjJyA9PSAzNSkgXApAQCAtMzAsNyArMzAsOSBAQAogCiAjbGluZSAxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogCi0jbGluZSAzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorc3RydWN0IHJlc3dvcmQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgKmlzX3Jlc2VydmVkX3dvcmQocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKKyNsaW5lIDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiBzdHJ1Y3QgcmVzd29yZCB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCB0b2tlbjsgfTsKIC8qIG1heGltdW0ga2V5IHJhbmdlID0gNjIsIGR1cGxpY2F0ZXMgPSAwICovCiAKQEAgLTc4LDYgKzgwLDkgQEAKIAogI2lmZGVmIF9fR05VQ19fCiBfX2lubGluZQorI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorI2VuZGlmCiAjZW5kaWYKIGNvbnN0IHN0cnVjdCByZXN3b3JkICoKIGlzX3Jlc2VydmVkX3dvcmQgKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbikKQEAgLTk0LDEwNSArOTksMTA1IEBACiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCB3b3JkbGlzdFtdID0KICAgICB7CiAgICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LAotI2xpbmUgMjYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiYXNtIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDExICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbV9fIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDUyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdHlwZW9mX18iLCBUWVBFT0ZfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19jb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fYXR0cmlidXRlX18iLCBBVFRSSUJVVEVfS0VZV30sCiAjbGluZSAxMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKKyNsaW5lIDE1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0X18iLCBDT05TVF9LRVlXfSwKLSNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNDQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InN0YXRpYyIsIFNUQVRJQ19LRVlXfSwKICNsaW5lIDIwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAorI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InN0YXRpYyIsIFNUQVRJQ19LRVlXfSwKKyNsaW5lIDIyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX3ZvbGF0aWxlX18iLCBWT0xBVElMRV9LRVlXfSwKLSNsaW5lIDM5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImludCIsIElOVF9LRVlXfSwKLSNsaW5lIDMyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImNoYXIiLCBDSEFSX0tFWVd9LAotI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiY29uc3QiLCBDT05TVF9LRVlXfSwKLSNsaW5lIDQ1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InN0cnVjdCIsIFNUUlVDVF9LRVlXfSwKLSNsaW5lIDI0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fcmVzdHJpY3RfXyIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsicmVzdHJpY3QiLCBSRVNUUklDVF9LRVlXfSwKLSNsaW5lIDIzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9yZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19pbmxpbmVfXyIsIElOTElORV9LRVlXfSwKLSNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXR0cmlidXRlIiwgQVRUUklCVVRFX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJT05fS0VZV30sCi0jbGluZSAzNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJlbnVtIiwgRU5VTV9LRVlXfSwKLSNsaW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGUiLCBWT0xBVElMRV9LRVlXfSwKLSNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX3NpZ25lZCIsIFNJR05FRF9LRVlXfSwKLSNsaW5lIDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDUxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InR5cGVvZiIsIFRZUEVPRl9LRVlXfSwKLSNsaW5lIDQ2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InR5cGVkZWYiLCBUWVBFREVGX0tFWVd9LAotI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19pbmxpbmUiLCBJTkxJTkVfS0VZV30sCi0jbGluZSAzMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDMzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhdXRvIiwgQVVUT19LRVlXfSwKLSNsaW5lIDQ3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InVuaW9uIiwgVU5JT05fS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5zaWduZWQiLCBVTlNJR05FRF9LRVlXfSwKLSNsaW5lIDQ5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvaWQiLCBWT0lEX0tFWVd9LAotI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic2hvcnQiLCBTSE9SVF9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA1MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ2b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImZsb2F0IiwgRkxPQVRfS0VZV30sCi0jbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJkb3VibGUiLCBET1VCTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDM4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImlubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJFWFBPUlRfU1lNQk9MX0dQTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCi0jbGluZSA0MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZWdpc3RlciIsIFJFR0lTVEVSX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDIyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9Cb29sIiwgQk9PTF9LRVlXfSwKLSNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InNpZ25lZCIsIFNJR05FRF9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA0MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJsb25nIiwgTE9OR19LRVlXfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCmluZGV4IDVlZjM3MzMuLjhmZTk3N2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgpAQCAtMSw0ICsxLDYgQEAKICV7CitzdHJ1Y3QgcmVzd29yZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCAqaXNfcmVzZXJ2ZWRfd29yZChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOwogJX0KIHN0cnVjdCByZXN3b3JkIHsgY29uc3QgY2hhciAqbmFtZTsgaW50IHRva2VuOyB9CiAlJQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggY2RiNDRiNi4uODFhNjdhNCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC01LDE1ICs1LDE1IEBACiAjIFByaW50IHNlbGVjdGVkIE1BSU5UQUlORVJTIGluZm9ybWF0aW9uIGZvcgogIyB0aGUgZmlsZXMgbW9kaWZpZWQgaW4gYSBwYXRjaCBvciBmb3IgYSBmaWxlCiAjCi0jIHVzYWdlOiBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXJzLnBsIFtPUFRJT05TXSA8cGF0Y2g+Ci0jICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXJzLnBsIFtPUFRJT05TXSAtZiA8ZmlsZT4KKyMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBbT1BUSU9OU10gPHBhdGNoPgorIyAgICAgICAgcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSAtZiA8ZmlsZT4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAKIHVzZSBzdHJpY3Q7CiAKIG15ICRQID0gJDA7Ci1teSAkViA9ICcwLjIwJzsKK215ICRWID0gJzAuMjEnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC0zNyw2ICszNyw3IEBACiBteSAkd2ViID0gMDsKIG15ICRzdWJzeXN0ZW0gPSAwOwogbXkgJHN0YXR1cyA9IDA7CitteSAka2V5d29yZHMgPSAxOwogbXkgJGZyb21fZmlsZW5hbWUgPSAwOwogbXkgJHBhdHRlcm5fZGVwdGggPSAwOwogbXkgJHZlcnNpb24gPSAwOwpAQCAtODQsNiArODUsNyBAQAogCQknc2NtIScgPT4gXCRzY20sCiAJCSd3ZWIhJyA9PiBcJHdlYiwKIAkJJ3BhdHRlcm4tZGVwdGg9aScgPT4gXCRwYXR0ZXJuX2RlcHRoLAorCQkna3xrZXl3b3JkcyEnID0+IFwka2V5d29yZHMsCiAJCSdmfGZpbGUnID0+IFwkZnJvbV9maWxlbmFtZSwKIAkJJ3Z8dmVyc2lvbicgPT4gXCR2ZXJzaW9uLAogCQknaHxoZWxwJyA9PiBcJGhlbHAsCkBAIC0xMzIsNiArMTM0LDggQEAKICMjIFJlYWQgTUFJTlRBSU5FUlMgZm9yIHR5cGUvdmFsdWUgcGFpcnMKIAogbXkgQHR5cGV2YWx1ZSA9ICgpOworbXkgJWtleXdvcmRfaGFzaDsKKwogb3BlbihNQUlOVCwgIjwke2xrX3BhdGh9TUFJTlRBSU5FUlMiKSB8fCBkaWUgIiRQOiBDYW4ndCBvcGVuIE1BSU5UQUlORVJTXG4iOwogd2hpbGUgKDxNQUlOVD4pIHsKICAgICBteSAkbGluZSA9ICRfOwpAQCAtMTQ5LDYgKzE1Myw4IEBACiAJICAgIGlmICgoLWQgJHZhbHVlKSkgewogCQkkdmFsdWUgPX4gc0AoW14vXSkkQCQxL0A7CiAJICAgIH0KKwl9IGVsc2lmICgkdHlwZSBlcSAiSyIpIHsKKwkgICAgJGtleXdvcmRfaGFzaHtAdHlwZXZhbHVlfSA9ICR2YWx1ZTsKIAl9CiAJcHVzaChAdHlwZXZhbHVlLCAiJHR5cGU6JHZhbHVlIik7CiAgICAgfSBlbHNpZiAoIS9eKFxzKSokLykgewpAQCAtMTg4LDYgKzE5NCw3IEBACiAKIG15IEBmaWxlcyA9ICgpOwogbXkgQHJhbmdlID0gKCk7CitteSBAa2V5d29yZF90dmkgPSAoKTsKIAogZm9yZWFjaCBteSAkZmlsZSAoQEFSR1YpIHsKICAgICAjI2lmICRmaWxlIGlzIGEgZGlyZWN0b3J5IGFuZCBpdCBsYWNrcyBhIHRyYWlsaW5nIHNsYXNoLCBhZGQgb25lCkBAIC0xOTgsMTEgKzIwNSwyNCBAQAogICAgIH0KICAgICBpZiAoJGZyb21fZmlsZW5hbWUpIHsKIAlwdXNoKEBmaWxlcywgJGZpbGUpOworCWlmICgtZiAkZmlsZSAmJiAka2V5d29yZHMpIHsKKwkgICAgb3BlbihGSUxFLCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOworCSAgICB3aGlsZSAoPEZJTEU+KSB7CisJCW15ICRwYXRjaF9saW5lID0gJF87CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXi4qJGtleXdvcmRfaGFzaHskbGluZX0veCkgeworCQkJcHVzaChAa2V5d29yZF90dmksICRsaW5lKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGNsb3NlKEZJTEUpOworCX0KICAgICB9IGVsc2UgewogCW15ICRmaWxlX2NudCA9IEBmaWxlczsKIAlteSAkbGFzdGZpbGU7CiAJb3BlbihQQVRDSCwgIjwkZmlsZSIpIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJHtmaWxlfVxuIjsKIAl3aGlsZSAoPFBBVENIPikgeworCSAgICBteSAkcGF0Y2hfbGluZSA9ICRfOwogCSAgICBpZiAobS9eXCtcK1wrXHMrKFxTKykvKSB7CiAJCW15ICRmaWxlbmFtZSA9ICQxOwogCQkkZmlsZW5hbWUgPX4gc0BeW14vXSovQEA7CkBAIC0yMTMsNiArMjMzLDEyIEBACiAJCWlmICgkZW1haWxfZ2l0X2JsYW1lKSB7CiAJCSAgICBwdXNoKEByYW5nZSwgIiRsYXN0ZmlsZTokMTokMiIpOwogCQl9CisJICAgIH0gZWxzaWYgKCRrZXl3b3JkcykgeworCQlmb3JlYWNoIG15ICRsaW5lIChrZXlzICVrZXl3b3JkX2hhc2gpIHsKKwkJICAgIGlmICgkcGF0Y2hfbGluZSA9fiBtL15bKy1dLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CiAJICAgIH0KIAl9CiAJY2xvc2UoUEFUQ0gpOwpAQCAtMjg2LDYgKzMxMiwxMyBAQAogICAgIH0KIH0KIAoraWYgKCRrZXl3b3JkcykgeworICAgIEBrZXl3b3JkX3R2aSA9IHNvcnRfYW5kX3VuaXEoQGtleXdvcmRfdHZpKTsKKyAgICBmb3JlYWNoIG15ICRsaW5lIChAa2V5d29yZF90dmkpIHsKKwlhZGRfY2F0ZWdvcmllcygkbGluZSk7CisgICAgfQorfQorCiBpZiAoJGVtYWlsKSB7CiAgICAgZm9yZWFjaCBteSAkY2hpZWYgKEBwZW5ndWluX2NoaWVmKSB7CiAJaWYgKCRjaGllZiA9fiBtL14oLiopOiguKikvKSB7CkBAIC0zODQsNiArNDE3LDcgQEAKIAogT3RoZXIgb3B0aW9uczoKICAgLS1wYXR0ZXJuLWRlcHRoID0+IE51bWJlciBvZiBwYXR0ZXJuIGRpcmVjdG9yeSB0cmF2ZXJzYWxzIChkZWZhdWx0OiAwIChhbGwpKQorICAtLWtleXdvcmRzID0+IHNjYW4gcGF0Y2ggZm9yIGtleXdvcmRzIChkZWZhdWx0OiAxIChvbikpCiAgIC0tdmVyc2lvbiA9PiBzaG93IHZlcnNpb24KICAgLS1oZWxwID0+IHNob3cgdGhpcyBoZWxwIGluZm9ybWF0aW9uCiAKQEAgLTQ4Niw3ICs1MjAsNiBAQAogfQogCiBzdWIgZmluZF9zdGFydGluZ19pbmRleCB7Ci0KICAgICBteSAoJGluZGV4KSA9IEBfOwogCiAgICAgd2hpbGUgKCRpbmRleCA+IDApIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKaW5kZXggYzZhZTQwNS4uYjg5Y2EyYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKKysrIGIvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwKQEAgLTIwLDcgKzIwLDcgQEAKIAogbXkgKCRyZWFkZGlyLCAkaW5zdGFsbGRpciwgJGFyY2gsIEBmaWxlcykgPSBAQVJHVjsKIAotbXkgJHVuaWZkZWYgPSAic2NyaXB0cy91bmlmZGVmIC1VX19LRVJORUxfXyI7CitteSAkdW5pZmRlZiA9ICJzY3JpcHRzL3VuaWZkZWYgLVVfX0tFUk5FTF9fIC1EX19FWFBPUlRFRF9IRUFERVJTX18iOwogCiBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKIAlsb2NhbCAqSU5GSUxFOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xleC56Y29uZi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZAppbmRleCBkYzNlODE4Li5mZGM3MTEzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZApAQCAtMTYwLDcgKzE2MCwxNSBAQAogCiAvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwogI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQogI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KQEAgLTgwMiw3ICs4MTAsNyBAQAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKLXZvaWQgbmV3X3N0cmluZyh2b2lkKQorc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CkBAIC04MTAsNyArODE4LDcgQEAKIAkqdGV4dCA9IDA7CiB9CiAKLXZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKQEAgLTgyNCw3ICs4MzIsNyBAQAogCXRleHRbdGV4dF9zaXplXSA9IDA7CiB9CiAKLXZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKIHsKIAl0ZXh0ID0gbWFsbG9jKHNpemUgKyAxKTsKIAltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKQEAgLTkxNCw3ICs5MjIsMTIgQEAKIAogLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwogI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKICNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwpAQCAtOTIyLDcgKzkzNSw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHpjb25mdGV4dCwgemNvbmZsZW5nLCAxLCB6Y29uZm91dCApCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB6Y29uZnRleHQsIHpjb25mbGVuZywgMSwgemNvbmZvdXQgKSkge30gfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCkBAIC0yMDYwLDggKzIwNzMsOCBAQAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgppbmRleCAyNWVmNWQwLi5kOGJjNzQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCkBAIC05LDYgKzksOCBAQAogCiBzdHJ1Y3Qga2NvbmZfaWQ7CiAKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworCiAlJQogbWFpbm1lbnUsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkQKIG1lbnUsCQlUX01FTlUsCQlURl9DT01NQU5ECmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKaW5kZXggNWM3M2Q1MTMzLi5jMTc0OGZhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkCkBAIC0zMCw2ICszMCw4IEBACiAjZW5kaWYKIAogc3RydWN0IGtjb25mX2lkOworCitzdGF0aWMgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9sb29rdXAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKIC8qIG1heGltdW0ga2V5IHJhbmdlID0gNDcsIGR1cGxpY2F0ZXMgPSAwICovCiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmwgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubAppbmRleCAyMWZmNjljLi5kOGY3MjM2Y2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkqdGV4dCA9IDA7CiB9CiAKLXZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKQEAgLTYxLDcgKzYxLDcgQEAKIAl0ZXh0W3RleHRfc2l6ZV0gPSAwOwogfQogCi12b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJdGV4dCA9IG1hbGxvYyhzaXplICsgMSk7CiAJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCmluZGV4IDk1ZGY4MzMuLjZlOWRjZDUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0xLDI0ICsxLDIzIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4xLiAgKi8KIAogLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSw3ICsyOCw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMSIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTcgKzU0LDg0IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMAogCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVERUQgMAogCiAvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHpjb25mcGFyc2UKLSNkZWZpbmUgeXlsZXggICB6Y29uZmxleAotI2RlZmluZSB5eWVycm9yIHpjb25mZXJyb3IKLSNkZWZpbmUgeXlsdmFsICB6Y29uZmx2YWwKLSNkZWZpbmUgeXljaGFyICB6Y29uZmNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyB6Y29uZmRlYnVnCi0jZGVmaW5lIHl5bmVycnMgemNvbmZuZXJycworI2RlZmluZSB5eXBhcnNlICAgICAgICAgemNvbmZwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgemNvbmZsZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIHpjb25mZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHpjb25mbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgemNvbmZjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICB6Y29uZmRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICB6Y29uZm5lcnJzCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCisKKyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2ludCBjZGVidWcgPSBQUklOVEQ7CisKK2V4dGVybiBpbnQgemNvbmZsZXgodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mZXJyb3IoY29uc3QgY2hhciAqZXJyKTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFsyNTddOworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CisKKyNkZWZpbmUgWVlERUJVRyAwCisjaWYgWVlERUJVRworI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UKKyNlbmRpZgorCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCiAKIAogLyogVG9rZW5zLiAgKi8KQEAgLTEwOCwxMjkgKzE3NCwzNiBAQAogICAgICBUX05PVCA9IDI4OQogICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVF9NQUlOTUVOVSAyNTgKLSNkZWZpbmUgVF9NRU5VIDI1OQotI2RlZmluZSBUX0VORE1FTlUgMjYwCi0jZGVmaW5lIFRfU09VUkNFIDI2MQotI2RlZmluZSBUX0NIT0lDRSAyNjIKLSNkZWZpbmUgVF9FTkRDSE9JQ0UgMjYzCi0jZGVmaW5lIFRfQ09NTUVOVCAyNjQKLSNkZWZpbmUgVF9DT05GSUcgMjY1Ci0jZGVmaW5lIFRfTUVOVUNPTkZJRyAyNjYKLSNkZWZpbmUgVF9IRUxQIDI2NwotI2RlZmluZSBUX0hFTFBURVhUIDI2OAotI2RlZmluZSBUX0lGIDI2OQotI2RlZmluZSBUX0VORElGIDI3MAotI2RlZmluZSBUX0RFUEVORFMgMjcxCi0jZGVmaW5lIFRfT1BUSU9OQUwgMjcyCi0jZGVmaW5lIFRfUFJPTVBUIDI3MwotI2RlZmluZSBUX1RZUEUgMjc0Ci0jZGVmaW5lIFRfREVGQVVMVCAyNzUKLSNkZWZpbmUgVF9TRUxFQ1QgMjc2Ci0jZGVmaW5lIFRfUkFOR0UgMjc3Ci0jZGVmaW5lIFRfT1BUSU9OIDI3OAotI2RlZmluZSBUX09OIDI3OQotI2RlZmluZSBUX1dPUkQgMjgwCi0jZGVmaW5lIFRfV09SRF9RVU9URSAyODEKLSNkZWZpbmUgVF9VTkVRVUFMIDI4MgotI2RlZmluZSBUX0NMT1NFX1BBUkVOIDI4MwotI2RlZmluZSBUX09QRU5fUEFSRU4gMjg0Ci0jZGVmaW5lIFRfRU9MIDI4NQotI2RlZmluZSBUX09SIDI4NgotI2RlZmluZSBUX0FORCAyODcKLSNkZWZpbmUgVF9FUVVBTCAyODgKLSNkZWZpbmUgVF9OT1QgMjg5CiAKIAogCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Ci0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KLSAqLwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLQotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKLSNpbmNsdWRlICJsa2MuaCIKLQotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKLQotI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQotCi0jZGVmaW5lIFBSSU5URAkJMHgwMDAxCi0jZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgotCi1pbnQgY2RlYnVnID0gUFJJTlREOwotCi1leHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOwotc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKLQotc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbMjU3XTsKLQotc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OwotCi0jZGVmaW5lIFlZREVCVUcgMAotI2lmIFlZREVCVUcKLSNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFCi0jZW5kaWYKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQogeworCisKIAljaGFyICpzdHJpbmc7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IHN5bWJvbCAqc3ltYm9sOwogCXN0cnVjdCBleHByICpleHByOwogCXN0cnVjdCBtZW51ICptZW51OwogCXN0cnVjdCBrY29uZl9pZCAqaWQ7Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKy8qIEluY2x1ZGUgemNvbmYuaGFzaC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLworI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKwogCiAKICNpZmRlZiBzaG9ydApAQCAtMzA2LDE0ICsyNzksMTQgQEAKICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTM5NCw5ICszNjcsOSBAQAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC00MzAsMTIgKzQwMywxMiBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNTU4LDE4ICs1MzEsMTggQEAKIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgIDEwNCwgICAxMDQsICAgMTA2LCAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLAotICAgICAxMTQsICAgMTE4LCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjYsCi0gICAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTM1LCAgIDEzNiwgICAxNDIsICAgMTUwLCAgIDE1NiwKLSAgICAgMTY0LCAgIDE3NCwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODQsICAgMTkyLAotICAgICAxOTgsICAgMjA4LCAgIDIxNCwgICAyMjAsICAgMjIzLCAgIDIyNSwgICAyMzYsICAgMjM3LCAgIDI0MiwgICAyNTEsCi0gICAgIDI1NiwgICAyNjQsICAgMjY3LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc2LCAgIDI4MiwKLSAgICAgMjkzLCAgIDI5OSwgICAzMDksICAgMzExLCAgIDMxNiwgICAzMjQsICAgMzMyLCAgIDMzNSwgICAzMzcsICAgMzM4LAotICAgICAzMzksICAgMzQ0LCAgIDM1MSwgICAzNTYsICAgMzY0LCAgIDM2NywgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzQsCi0gICAgIDM4MiwgICAzODksICAgMzk2LCAgIDQwMiwgICA0MDksICAgNDExLCAgIDQxMiwgICA0MTMsICAgNDE2LCAgIDQyNCwKLSAgICAgNDI2LCAgIDQzMSwgICA0MzIsICAgNDM1LCAgIDQzNiwgICA0MzcsICAgNDQxLCAgIDQ0MiwgICA0NDUsICAgNDQ2LAotICAgICA0NDksICAgNDUwLCAgIDQ1MSwgICA0NTIsICAgNDUzLCAgIDQ1NCwgICA0NTUsICAgNDU4LCAgIDQ1OSwgICA0NjIsCi0gICAgIDQ2MworICAgICAgIDAsICAgMTA3LCAgIDEwNywgICAxMDksICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsCisgICAgIDExNywgICAxMjEsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyOSwKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgIDEzNCwgICAxMzgsICAgMTM5LCAgIDE0NSwgICAxNTMsICAgMTU5LAorICAgICAxNjcsICAgMTc3LCAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NywgICAxOTUsCisgICAgIDIwMSwgICAyMTEsICAgMjE3LCAgIDIyMywgICAyMjYsICAgMjI4LCAgIDIzOSwgICAyNDAsICAgMjQ1LCAgIDI1NCwKKyAgICAgMjU5LCAgIDI2NywgICAyNzAsICAgMjcyLCAgIDI3MywgICAyNzQsICAgMjc1LCAgIDI3NiwgICAyNzksICAgMjg1LAorICAgICAyOTYsICAgMzAyLCAgIDMxMiwgICAzMTQsICAgMzE5LCAgIDMyNywgICAzMzUsICAgMzM4LCAgIDM0MCwgICAzNDEsCisgICAgIDM0MiwgICAzNDcsICAgMzU0LCAgIDM1OSwgICAzNjcsICAgMzcwLCAgIDM3MiwgICAzNzMsICAgMzc0LCAgIDM3NywKKyAgICAgMzg1LCAgIDM5MiwgICAzOTksICAgNDA1LCAgIDQxMiwgICA0MTQsICAgNDE1LCAgIDQxNiwgICA0MTksICAgNDI3LAorICAgICA0MjksICAgNDM0LCAgIDQzNSwgICA0MzgsICAgNDM5LCAgIDQ0MCwgICA0NDQsICAgNDQ1LCAgIDQ0OCwgICA0NDksCisgICAgIDQ1MiwgICA0NTMsICAgNDU0LCAgIDQ1NSwgICA0NTYsICAgNDU3LCAgIDQ1OCwgICA0NjEsICAgNDYyLCAgIDQ2NSwKKyAgICAgNDY2CiB9OwogI2VuZGlmCiAKQEAgLTk4NSwxNyArOTU4LDIwIEBACiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTAyOSwxMSArMTAwNSwxMSBAQAogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJICAgICAgIAkJICAgICAgICk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTM0MywxMCArMTMxOSw4IEBACiAJYnJlYWs7CiAgICAgfQogfQotDAogCiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTM2MiwxMSArMTMzNiwxMCBAQAogI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwogCiAKLQotLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCiAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwpAQCAtMTM3NCw5ICsxMzQ3LDkgQEAKIAogCiAKLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRlZiBZWVBBUlNFX1BBUkFNCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKQEAgLTE0MDAsMTQgKzEzNzMsMzkgQEAKICNlbmRpZgogI2VuZGlmCiB7Ci0gIAotICBpbnQgeXlzdGF0ZTsKKworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwogICBpbnQgeXluOwogICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKwogI2lmIFlZRVJST1JfVkVSQk9TRQogICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KICAgY2hhciB5eW1zZ2J1ZlsxMjhdOwpAQCAtMTQxNSw1MSArMTQxMywyOCBAQAogICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKICNlbmRpZgogCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0KLQogI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQotCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBAIC0xNDg5LDcgKzE0NjQsNiBAQAogCVlZU1RZUEUgKnl5dnMxID0geXl2czsKIAl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKIAotCiAJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCiAJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQogCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKQEAgLTE0OTcsNyArMTQ3MSw2IEBACiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpAQCAtMTUyMCw5ICsxNDkzLDggQEAKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0xNTMzLDcgKzE1MDUsNiBAQAogICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKICAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKLQogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAogCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIApAQCAtMTU0Myw2ICsxNTE0LDkgQEAKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTE1NTEsMTYgKzE1MjUsMTYgQEAKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTE1OTIsMjAgKzE1NjYsMTYgQEAKICAgICAgIGdvdG8geXlyZWR1Y2U7CiAgICAgfQogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQogICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCiAgICAgIHN0YXR1cy4gICovCiAgIGlmICh5eWVycnN0YXR1cykKICAgICB5eWVycnN0YXR1cy0tOwogCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CiAKLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKIAogICB5eXN0YXRlID0geXluOwogICAqKyt5eXZzcCA9IHl5bHZhbDsKQEAgLTIwMjksNyArMTk5OSw2IEBACiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTIwNDEsNyArMjAxMCw2IEBACiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotCiAgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCiAgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQogICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCkBAIC0yMTA2LDcgKzIwNzQsNyBAQAogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTIxMjMsNyArMjA5MSw3IEBACiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC0yMTgwLDkgKzIxNDgsNiBAQAogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKQEAgLTIyMDcsNyArMjE3Miw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMjE4LDcgKzIxODMsNyBAQAogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsKTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApAQCAtMjI4NCw3ICsyMjQ5LDcgQEAKIAlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKIH0KIAotY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQogewogCXN3aXRjaCAodG9rZW4pIHsKIAljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CkBAIC0yMzQ4LDcgKzIzMTMsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgbGVuOwpAQCAtMjM2NSw3ICsyMzMwLDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYueSBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CmluZGV4IDk3MTBiODIuLjhjNDM0OTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CkBAIC0xNCw4ICsxNCw2IEBACiAjZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCi0jaW5jbHVkZSAiemNvbmYuaGFzaC5jIgotCiAjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCiAKICNkZWZpbmUgUFJJTlRECQkweDAwMDEKQEAgLTEwMCw2ICs5OCwxMSBAQAogCQltZW51X2VuZF9tZW51KCk7CiB9IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CiAKKyV7CisvKiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCislfQorCiAlJQogaW5wdXQ6IHN0bXRfbGlzdDsKIApAQCAtNTAxLDcgKzUwNCw3IEBACiAJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CiB9CiAKLWNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKIHsKIAlzd2l0Y2ggKHRva2VuKSB7CiAJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwpAQCAtNTY1LDcgKzU2OCw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAljb25zdCBjaGFyICpwOwogCWludCBsZW47CkBAIC01ODIsNyArNTg1LDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rY29tcGlsZV9oIGIvc2NyaXB0cy9ta2NvbXBpbGVfaAppbmRleCA2YTEyZGQ5Li5iY2UzZDBmIDEwMDc1NQotLS0gYS9zY3JpcHRzL21rY29tcGlsZV9oCisrKyBiL3NjcmlwdHMvbWtjb21waWxlX2gKQEAgLTEsMyArMSw1IEBACisjIS9iaW4vc2gKKwogVEFSR0VUPSQxCiBBUkNIPSQyCiBTTVA9JDMKQEAgLTUwLDcgKzUyLDcgQEAKICMgVHJ1bmNhdGUgdG8gbWF4aW11bSBsZW5ndGgKIAogVVRTX0xFTj02NAotVVRTX1RSVU5DQVRFPSJzZWQgLWUgcy9cKC5cezEsJFVUU19MRU5cfVwpLiovXDEvIgorVVRTX1RSVU5DQVRFPSJjdXQgLWIgLSRVVFNfTEVOIgogCiAjIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGNvbXBpbGUuaAogCkBAIC02Niw5ICs2OCwxMyBAQAogICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfSE9TVCBcImBob3N0bmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKIAogICBpZiBbIC14IC9iaW4vZG5zZG9tYWlubmFtZSBdOyB0aGVuCi0gICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBkbnNkb21haW5uYW1lIHwgJFVUU19UUlVOQ0FURWBcIgorICAgIGRvbWFpbj1gZG5zZG9tYWlubmFtZSAyPiAvZGV2L251bGxgCiAgIGVsaWYgWyAteCAvYmluL2RvbWFpbm5hbWUgXTsgdGhlbgotICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZG9tYWlubmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKKyAgICBkb21haW49YGRvbWFpbm5hbWUgMj4gL2Rldi9udWxsYAorICBmaQorCisgIGlmIFsgLW4gIiRkb21haW4iIF07IHRoZW4KKyAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGVjaG8gJGRvbWFpbiB8ICRVVFNfVFJVTkNBVEVgXCIKICAgZWxzZQogICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4KICAgZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZSBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQppbmRleCBmYTRhMGExLi5mNjdjYzg4IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw5IEBACiAjIGUpIGdlbmVyYXRlIHRoZSBycG0gZmlsZXMsIGJhc2VkIG9uIGtlcm5lbC5zcGVjCiAjIC0gVXNlIC8uIHRvIGF2b2lkIHRhciBwYWNraW5nIGp1c3QgdGhlIHN5bWxpbmsKIAorIyBOb3RlIHRoYXQgdGhlIHJwbS1wa2cgdGFyZ2V0IGNhbm5vdCBiZSB1c2VkIHdpdGggS0JVSUxEX09VVFBVVCwKKyMgYnV0IHRoZSBiaW5ycG0tcGtnIHRhcmdldCBjYW47IGZvciBzb21lIHJlYXNvbiBPPSBnZXRzIGlnbm9yZWQuCisKICMgRG8gd2UgaGF2ZSBycG1idWlsZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgcnBtCiBSUE0gOj0gJChzaGVsbCBpZiBbIC14ICIvdXNyL2Jpbi9ycG1idWlsZCIgXTsgdGhlbiBlY2hvIHJwbWJ1aWxkOyBcCiAJICAgICAgICAgICBlbHNlIGVjaG8gcnBtOyBmaSkKQEAgLTMzLDYgKzM2LDEyIEBACiAJJChDT05GSUdfU0hFTEwpICQoTUtTUEVDKSA+ICRACiAKIHJwbS1wa2cgcnBtOiAkKG9ianRyZWUpL2tlcm5lbC5zcGVjIEZPUkNFCisJQGlmIHRlc3QgLW4gIiQoS0JVSUxEX09VVFBVVCkiOyB0aGVuIFwKKwkJZWNobyAiQnVpbGRpbmcgc291cmNlICsgYmluYXJ5IFJQTSBpcyBub3QgcG9zc2libGUgb3V0c2lkZSB0aGUiOyBcCisJCWVjaG8gImtlcm5lbCBzb3VyY2UgdHJlZS4gRG9uJ3Qgc2V0IEtCVUlMRF9PVVRQVVQsIG9yIHVzZSB0aGUiOyBcCisJCWVjaG8gImJpbnJwbS1wa2cgdGFyZ2V0IGluc3RlYWQuIjsgXAorCQlmYWxzZTsgXAorCWZpCiAJJChNQUtFKSBjbGVhbgogCSQoUFJFVikgbG4gLXNmICQoc3JjdHJlZSkgJChLRVJORUxQQVRIKQogCSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uID4gJChvYmp0cmVlKS8uc2NtdmVyc2lvbgpAQCAtNjEsNyArNzAsNyBAQAogCXNldCAtZTsgXAogCW12IC1mICQob2JqdHJlZSkvLnRtcF92ZXJzaW9uICQob2JqdHJlZSkvLnZlcnNpb24KIAotCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChzcmN0cmVlKSIgLS10YXJnZXQgXAorCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChvYmp0cmVlKSIgLS10YXJnZXQgXAogCQkkKFVUU19NQUNISU5FKSAtYmIgJDwKIAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9iaW5rZXJuZWwuc3BlYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggM2Q5M2Y4Yy4uNDdiZGQyZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC03MCw3ICs3MCw3IEBACiBlY2hvICdta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvbGliL2Zpcm13YXJlJwogZWNobyAiJWVuZGlmIgogCi1lY2hvICdJTlNUQUxMX01PRF9QQVRIPSRSUE1fQlVJTERfUk9PVCBtYWtlICV7X3NtcF9tZmxhZ3N9IG1vZHVsZXNfaW5zdGFsbCcKK2VjaG8gJ0lOU1RBTExfTU9EX1BBVEg9JFJQTV9CVUlMRF9ST09UIG1ha2UgJXtfc21wX21mbGFnc30gS0JVSUxEX1NSQz0gbW9kdWxlc19pbnN0YWxsJwogZWNobyAiJWlmYXJjaCBpYTY0IgogZWNobyAnY3AgJEtCVUlMRF9JTUFHRSAkUlBNX0JVSUxEX1JPT1QnIi9ib290L2VmaS92bWxpbnV6LSRLRVJORUxSRUxFQVNFIgogZWNobyAnbG4gLXMgJyJlZmkvdm1saW51ei0kS0VSTkVMUkVMRUFTRSIgJyRSUE1fQlVJTERfUk9PVCciL2Jvb3QvIgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKaW5kZXggOGU5Nzc3Yi4uMGM3MmM5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC00Myw3ICs0Myw3IEBACiAJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucwogfTsKIApAQCAtNTUsNyArNTUsNyBAQAogCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKIH07CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzEzLDcgKzMxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0gewogCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAogCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCiAJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwppbmRleCBiOGRkNjkzLi5hNGUyYjFkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCkBAIC01OCwxMSArNTgsMTEgQEAKIAogCWlmICghaW1hX2luaXRpYWxpemVkKQogCQlyZXR1cm4gaWludDsKLQlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfTk9GUyk7CiAJaWYgKCFpaW50KQogCQlyZXR1cm4gaWludDsKIAotCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggMmZiMjhlZi4uMDZlYzcyMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC04NzMsNyArODczLDcgQEAKIAkvKiBvdGhlcndpc2Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24ga2V5cmluZyByZWNvcmRlZCBpbiB0aGUKIAkgKiBhdXRob3Jpc2F0aW9uIGtleSAoYW55IEtFWV9TUEVDXypfS0VZUklORykgKi8KIAlpZiAocmluZ2lkID49IEtFWV9TUEVDX1JFUVVFU1RPUl9LRVlSSU5HKSB7Ci0JCSpfZGVzdF9rZXlyaW5nID0gcmthLT5kZXN0X2tleXJpbmc7CisJCSpfZGVzdF9rZXlyaW5nID0ga2V5X2dldChya2EtPmRlc3Rfa2V5cmluZyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvZGVjcy90YXMuYyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKaW5kZXggZjBlYmM5NzEuLjFkZDY2ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKKysrIGIvc291bmQvYW9hL2NvZGVjcy90YXMuYwpAQCAtODk3LDYgKzg5NywxNSBAQAogCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKIAlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBXZSBrbm93IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisJICogYWxyZWFkeSBib3VuZC4gSWYgbm90IGl0IG1lYW5zIGJpbmRpbmcgZmFpbGVkLCBhbmQgdGhlbiB0aGVyZQorCSAqIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQuCisJICovCisJaWYgKCFjbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggZGM3ODI3Mi4uMWYwZjgyMSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05MzcsNiArOTM3LDcgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CiAJaW50IHJldDsKIAorCXdyaXRlbCgwLCBhYWNpLT5iYXNlICsgQUM5N19QT1dFUkRPV04pOwogCS8qCiAJICogQXNzZXJ0IEFBQ0lSRVNFVCBmb3IgMnVzCiAJICovCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDRlMzRkMTkuLmI0YjQ4YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0xMzcsOSArMTM3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMTU5LDkgKzE1OSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlCi0jZGVmaW5lIHB4YTJ4eF9hYzk3X3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9hYzk3X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTI0MSwxMSArMjQyLDEyIEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9hYzk3X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2FjOTdfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyeHhfYWM5N19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMGMxNDQwMTIuLmM2OWM2MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtOTUzLDExICs5NTMsMTIgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ub3RpZnkgKm5vdGlmeTsKIAljaGFyIHN0clsxNl07Ci0Jc3RydWN0IHNuZF9wY20gKnBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlpZiAoc25kX0JVR19PTighcGNtIHx8ICFkZXZpY2UpKQorCWlmIChzbmRfQlVHX09OKCFkZXZpY2UgfHwgIWRldmljZS0+ZGV2aWNlX2RhdGEpKQogCQlyZXR1cm4gLUVOWElPOworCXBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWVyciA9IHNuZF9wY21fYWRkKHBjbSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCA1NjFkNmQ5Li5hYjczZWRmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjk4NSw3ICsyOTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQogewogCS5mYXVsdCA9CXNuZF9wY21fbW1hcF9zdGF0dXNfZmF1bHQsCiB9OwpAQCAtMzAyNCw3ICszMDI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19jb250cm9sID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfY29udHJvbCA9CiB7CiAJLmZhdWx0ID0Jc25kX3BjbV9tbWFwX2NvbnRyb2xfZmF1bHQsCiB9OwpAQCAtMzA5NCw3ICszMDk0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfZGF0YSA9CiB7CiAJLm9wZW4gPQkJc25kX3BjbV9tbWFwX2RhdGFfb3BlbiwKIAkuY2xvc2UgPQlzbmRfcGNtX21tYXBfZGF0YV9jbG9zZSwKQEAgLTMxMTgsNyArMzExOCw3IEBACiAgKiBtbWFwIHRoZSBETUEgYnVmZmVyIG9uIEkvTyBtZW1vcnkgYXJlYQogICovCiAjaWYgU05EUlZfUENNX0lORk9fTU1BUF9JT01FTQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQogewogCS5vcGVuID0JCXNuZF9wY21fbW1hcF9kYXRhX29wZW4sCiAJLmNsb3NlID0Jc25kX3BjbV9tbWFwX2RhdGFfY2xvc2UsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IGMwYWRjMTRjLi43MGQ2ZjI1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjQ4LDcgKzI0OCw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJzdHJlYW0sICZzLT5zdWJzdHJlYW1zLCBsaXN0KSB7CiAJCWlmIChzdWJzdHJlYW0tPm9wZW5lZCkgewogCQkJaWYgKHN0cmVhbSA9PSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCB8fAotCQkJICAgICEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpKQorCQkJICAgICEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpIHx8CisJCQkgICAgIXN1YnN0cmVhbS0+YXBwZW5kKQogCQkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChzdWJkZXZpY2UgPCAwIHx8IHN1YmRldmljZSA9PSBzdWJzdHJlYW0tPm51bWJlcikgewpAQCAtMjY2LDE3ICsyNjcsMjEgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKLQlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQrKyA9PSAwKQorCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCA9PSAwKSB7CisJCWVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlzdWJzdHJlYW0tPm9wZW5lZCA9IDE7CiAJCXN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcgPSAwOwotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKLQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAxOworCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCisJCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJfQorCXN1YnN0cmVhbS0+dXNlX2NvdW50Kys7CiAJcm1pZGktPnN0cmVhbXNbc3Vic3RyZWFtLT5zdHJlYW1dLnN1YnN0cmVhbV9vcGVuZWQrKzsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NywyNyArMzAyLDI3IEBACiAJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAogCQkJCSAgICAgICBtb2RlLCAmc2lucHV0KTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKIAkJZXJyID0gYXNzaWduX3N1YnN0cmVhbShybWlkaSwgc3ViZGV2aWNlLAogCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsCiAJCQkJICAgICAgIG1vZGUsICZzb3V0cHV0KTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmIChzaW5wdXQpIHsKIAkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgbW9kZSk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKHNvdXRwdXQpIHsKIAkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNvdXRwdXQsIG1vZGUpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJaWYgKHNpbnB1dCkKIAkJCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgMCk7Ci0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCkBAIC0zMjUsMTMgKzMzMCw2IEBACiAJcmZpbGUtPmlucHV0ID0gc2lucHV0OwogCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OwogCXJldHVybiAwOwotCi0gICAgICBfX2Vycm9yOgotCWlmIChzaW5wdXQgJiYgc2lucHV0LT5ydW50aW1lKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc2lucHV0KTsKLQlpZiAoc291dHB1dCAmJiBzb3V0cHV0LT5ydW50aW1lKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7Ci0JcmV0dXJuIGVycjsKIH0KIAogLyogY2FsbGVkIGZyb20gc291bmQvY29yZS9zZXEvc2VxX21pZGkuYyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9kdW1teS5jIGIvc291bmQvZHJpdmVycy9kdW1teS5jCmluZGV4IDZiYTA2NmMuLjI1MmUwNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYworKysgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9kZXZzLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwY21fZGV2cywgIlBDTSBkZXZpY2VzICMgKDAtNCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fc3Vic3RyZWFtcywgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocGNtX3N1YnN0cmVhbXMsICJQQ00gc3Vic3RyZWFtcyAjICgxLTE2KSBmb3IgZHVtbXkgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhwY21fc3Vic3RyZWFtcywgIlBDTSBzdWJzdHJlYW1zICMgKDEtMTI4KSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogLy9tb2R1bGVfcGFyYW1fYXJyYXkobWlkaV9kZXZzLCBpbnQsIE5VTEwsIDA0NDQpOwogLy9NT0RVTEVfUEFSTV9ERVNDKG1pZGlfZGV2cywgIk1JREkgZGV2aWNlcyAjICgwLTIpIGZvciBkdW1teSBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW0oZmFrZV9idWZmZXIsIGJvb2wsIDA0NDQpOwpAQCAtODA4LDggKzgwOCw2IEBACiAJdW5zaWduZWQgaW50IGlkeDsKIAlpbnQgZXJyOwogCi0JaWYgKHNuZF9CVUdfT04oIWR1bW15KSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJc3Bpbl9sb2NrX2luaXQoJmR1bW15LT5taXhlcl9sb2NrKTsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiRHVtbXkgTWl4ZXIiKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCmluZGV4IDZlN2QwOWEuLjdkNzIyYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKQEAgLTI5LDYgKzI5LDggQEAKIAogZXh0ZXJuIGludCB1c2VfaW50ZXJuYWxfZHJ1bXM7CiAKK3N0YXRpYyB2b2lkIHNuZF9vcGwzX25vdGVfb2ZmX3Vuc2FmZSh2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKTsKIC8qCiAgKiBUaGUgbmV4dCB0YWJsZSBsb29rcyBtYWdpY2FsLCBidXQgaXQgY2VydGFpbmx5IGlzIG5vdC4gSXRzIHZhbHVlcyBoYXZlCiAgKiBiZWVuIGNhbGN1bGF0ZWQgYXMgdGFibGVbaV09OCpsb2coaS82NCkvbG9nKDIpIHdpdGggYW4gb2J2aW91cyBleGNlcHRpb24KQEAgLTI0MiwxNiArMjQ0LDIwIEBACiAJaW50IGFnYWluID0gMDsKIAlpbnQgaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT5zeXNfdGltZXJfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IG9wbDMtPm1heF92b2ljZXM7IGkrKykgewogCQlzdHJ1Y3Qgc25kX29wbDNfdm9pY2UgKnZwID0gJm9wbDMtPnZvaWNlc1tpXTsKIAkJaWYgKHZwLT5zdGF0ZSA+IDAgJiYgdnAtPm5vdGVfb2ZmX2NoZWNrKSB7CiAJCQlpZiAodnAtPm5vdGVfb2ZmID09IGppZmZpZXMpCi0JCQkJc25kX29wbDNfbm90ZV9vZmYob3BsMywgdnAtPm5vdGUsIDAsIHZwLT5jaGFuKTsKKwkJCQlzbmRfb3BsM19ub3RlX29mZl91bnNhZmUob3BsMywgdnAtPm5vdGUsIDAsCisJCQkJCQkJIHZwLT5jaGFuKTsKIAkJCWVsc2UKIAkJCQlhZ2FpbisrOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT5zeXNfdGltZXJfbG9jaywgZmxhZ3MpOwogCWlmIChhZ2FpbikgewogCQlvcGwzLT50bGlzdC5leHBpcmVzID0gamlmZmllcyArIDE7CS8qIGludm9rZSBhZ2FpbiAqLwogCQlhZGRfdGltZXIoJm9wbDMtPnRsaXN0KTsKQEAgLTY1OCwxNSArNjY0LDE0IEBACiAvKgogICogUmVsZWFzZSBhIG5vdGUgaW4gcmVzcG9uc2UgdG8gYSBtaWRpIG5vdGUgb2ZmLgogICovCi12b2lkIHNuZF9vcGwzX25vdGVfb2ZmKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLCBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbikKK3N0YXRpYyB2b2lkIHNuZF9vcGwzX25vdGVfb2ZmX3Vuc2FmZSh2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKQogewogICAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCiAJaW50IHZvaWNlOwogCXN0cnVjdCBzbmRfb3BsM192b2ljZSAqdnA7CiAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJb3BsMyA9IHA7CiAKICNpZmRlZiBERUJVR19NSURJCkBAIC02NzQsMTIgKzY3OSw5IEBACiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlKTsKICNlbmRpZgogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKLQogCWlmIChvcGwzLT5zeW50aF9tb2RlID09IFNORFJWX09QTDNfTU9ERV9TRVEpIHsKIAkJaWYgKGNoYW4tPmRydW1fY2hhbm5lbCAmJiB1c2VfaW50ZXJuYWxfZHJ1bXMpIHsKIAkJCXNuZF9vcGwzX2RydW1fc3dpdGNoKG9wbDMsIG5vdGUsIHZlbCwgMCwgY2hhbik7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJLyogdGhpcyBsb29wIHdpbGwgaG9wZWZ1bGx5IGtpbGwgYWxsIGV4dHJhIHZvaWNlcywgYmVjYXVzZQpAQCAtNjk3LDYgKzY5OSwxNiBAQAogCQkJc25kX29wbDNfa2lsbF92b2ljZShvcGwzLCB2b2ljZSk7CiAJCX0KIAl9Cit9CisKK3ZvaWQgc25kX29wbDNfbm90ZV9vZmYodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsCisJCSAgICAgICBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDMgPSBwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOworCXNuZF9vcGwzX25vdGVfb2ZmX3Vuc2FmZShwLCBub3RlLCB2ZWwsIGNoYW4pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYwppbmRleCA4NGNjMjY1Li5lMTE0NWFjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYwpAQCAtMzksMjUgKzM5LDIwIEBACiAvKiB3cml0ZSB0aGUgcG9ydCBhbmQgcmV0dXJucyB0aGUgbmV4dCBleHBpcmUgdGltZSBpbiBuczsKICAqIGNhbGxlZCBhdCB0aGUgdHJpZ2dlci1zdGFydCBhbmQgaW4gaHJ0aW1lciBjYWxsYmFjawogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwY3NwX3RpbWVyX3VwZGF0ZShzdHJ1Y3QgaHJ0aW1lciAqaGFuZGxlKQorc3RhdGljIHU2NCBwY3NwX3RpbWVyX3VwZGF0ZShzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXApCiB7CiAJdW5zaWduZWQgY2hhciB0aW1lcl9jbnQsIHZhbDsKIAl1NjQgbnM7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGNoaXAtPnRoYWxmKSB7CiAJCW91dGIoY2hpcC0+dmFsNjEsIDB4NjEpOwogCQljaGlwLT50aGFsZiA9IDA7Ci0JCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCQlyZXR1cm4gMDsKIAkJcmV0dXJuIGNoaXAtPm5zX3JlbTsKIAl9CiAKLQlpZiAoIWF0b21pY19yZWFkKCZjaGlwLT50aW1lcl9hY3RpdmUpKQotCQlyZXR1cm4gMDsKIAlzdWJzdHJlYW0gPSBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW07CiAJaWYgKCFzdWJzdHJlYW0pCiAJCXJldHVybiAwOwpAQCAtODgsMjQgKzgzLDE3IEBACiAJcmV0dXJuIG5zOwogfQogCi1lbnVtIGhydGltZXJfcmVzdGFydCBwY3NwX2RvX3RpbWVyKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdm9pZCBwY3NwX3BvaW50ZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlpbnQgcGVyaW9kc19lbGFwc2VkLCBwb2ludGVyX3VwZGF0ZTsKIAlzaXplX3QgcGVyaW9kX2J5dGVzLCBidWZmZXJfYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZyBuczsKKwlpbnQgcGVyaW9kc19lbGFwc2VkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKLQlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGhhbmRsZSk7Ci0JaWYgKCFucykKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotCiAJLyogdXBkYXRlIHRoZSBwbGF5YmFjayBwb3NpdGlvbiAqLwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCQlyZXR1cm47CiAKIAlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKIAlidWZmZXJfYnl0ZXMgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKQEAgLTEzNCw2ICsxMjIsMjYgQEAKIAogCWlmIChwZXJpb2RzX2VsYXBzZWQpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJnBjc3BfcGNtX3Rhc2tsZXQpOworfQorCitlbnVtIGhydGltZXJfcmVzdGFydCBwY3NwX2RvX3RpbWVyKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCit7CisJc3RydWN0IHNuZF9wY3NwICpjaGlwID0gY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHNuZF9wY3NwLCB0aW1lcik7CisJaW50IHBvaW50ZXJfdXBkYXRlOworCXU2NCBuczsKKworCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkgfHwgIWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCisJcG9pbnRlcl91cGRhdGUgPSAhY2hpcC0+dGhhbGY7CisJbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZShjaGlwKTsKKwlpZiAoIW5zKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDU1A6IHVuZXhwZWN0ZWQgc3RvcFxuIik7CisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKwl9CisKKwlpZiAocG9pbnRlcl91cGRhdGUpCisJCXBjc3BfcG9pbnRlcl91cGRhdGUoY2hpcCk7CiAKIAlocnRpbWVyX2ZvcndhcmQoaGFuZGxlLCBocnRpbWVyX2dldF9leHBpcmVzKGhhbmRsZSksIG5zX3RvX2t0aW1lKG5zKSk7CiAKQEAgLTE0Miw4ICsxNTAsNiBAQAogCiBzdGF0aWMgaW50IHBjc3Bfc3RhcnRfcGxheWluZyhzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXApCiB7Ci0JdW5zaWduZWQgbG9uZyBuczsKLQogI2lmIFBDU1BfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJQQ1NQOiBzdGFydF9wbGF5aW5nIGNhbGxlZFxuIik7CiAjZW5kaWYKQEAgLTE1OSwxMSArMTY1LDcgQEAKIAlhdG9taWNfc2V0KCZjaGlwLT50aW1lcl9hY3RpdmUsIDEpOwogCWNoaXAtPnRoYWxmID0gMDsKIAotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoJnBjc3BfY2hpcC50aW1lcik7Ci0JaWYgKCFucykKLQkJcmV0dXJuIC1FSU87Ci0KLQlocnRpbWVyX3N0YXJ0KCZwY3NwX2NoaXAudGltZXIsIGt0aW1lX3NldCgwLCBucyksIEhSVElNRVJfTU9ERV9SRUwpOworCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIDApLCBIUlRJTUVSX01PREVfUkVMKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMyLDIxICsyMzQsMjIgQEAKIHN0YXRpYyBpbnQgc25kX3Bjc3BfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0jaWYgUENTUF9ERUJVRwotCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCi0JCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpXG4iLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzKTsKLSNlbmRpZgogCXBjc3Bfc3luY19zdG9wKGNoaXApOwogCWNoaXAtPnBsYXliYWNrX3B0ciA9IDA7CiAJY2hpcC0+cGVyaW9kX3B0ciA9IDA7CiAJY2hpcC0+Zm10X3NpemUgPQogCQlzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCkgPj4gMzsKIAljaGlwLT5pc19zaWduZWQgPSBzbmRfcGNtX2Zvcm1hdF9zaWduZWQoc3Vic3RyZWFtLT5ydW50aW1lLT5mb3JtYXQpOworI2lmIFBDU1BfREVCVUcKKwlwcmludGsoS0VSTl9JTkZPICJQQ1NQOiBwcmVwYXJlIGNhbGxlZCwgIgorCQkJInNpemU9JXppIHBzaXplPSV6aSBmPSV6aSBmMT0laSBmc2l6ZT0laVxuIiwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSAvCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXN1YnN0cmVhbS0+cnVudGltZS0+cGVyaW9kcywKKwkJCWNoaXAtPmZtdF9zaXplKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwppbmRleCAxOTliMDMzLi45MDNiYzg0IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAlpZiAodHJlYmxlICE9IGNoaXAtPnRyZWJsZSkgewogCQljaGlwLT50cmVibGUgPSB0cmVibGU7CiAjaWYgUENTUF9ERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJQQ1NQOiByYXRlIHNldCB0byAlaVxuIiwgUENTUF9SQVRFKCkpOworCQlwcmludGsoS0VSTl9JTkZPICJQQ1NQOiByYXRlIHNldCB0byAlbGlcbiIsIFBDU1BfUkFURSgpKTsKICNlbmRpZgogCQljaGFuZ2VkID0gMTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL2hhbDIuYyBiL3NvdW5kL21pcHMvaGFsMi5jCmluZGV4IGM1MjY5MWMuLjlhODhjZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvaGFsMi5jCisrKyBiL3NvdW5kL21pcHMvaGFsMi5jCkBAIC05MTUsNyArOTE1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgaGFsMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGhhbDJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKaW5kZXggZTQ5NzUyNS4uODY5MWY0YyAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKKysrIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBzbmRfc2dpbzJhdWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9zZ2lvMmF1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwppbmRleCA3OTNiN2Y0Li4zZjNjM2Y3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKQEAgLTIxOSw3ICsyMTksOSBAQAogICAgICAqICBNaWQgbGV2ZWwgc3R1ZmYKICAgICAgKi8KIAotc3RydWN0IHNvdW5kX3NldHRpbmdzIGRtYXNvdW5kID0geyAubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCB9Oworc3RydWN0IHNvdW5kX3NldHRpbmdzIGRtYXNvdW5kID0geworCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZG1hc291bmQubG9jaykKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb3VuZF9zaWxlbmNlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvaGV4MmhleC5jIGIvc291bmQvb3NzL2hleDJoZXguYwppbmRleCA1NDYwZmFhLi4wNDFlZjVjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvaGV4MmhleC5jCisrKyBiL3NvdW5kL29zcy9oZXgyaGV4LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNkZWZpbmUgTUFYX1NJWkUgKDI1NioxMDI0KQogdW5zaWduZWQgY2hhciBidWZbTUFYX1NJWkVdOwogCi1pbnQgbG9hZGhleChGSUxFICppbmYsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgbG9hZGhleChGSUxFICppbmYsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKIAlpbnQgbD0wLCBjLCBpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMgYi9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKaW5kZXggNzdkMGU1ZS4uY2U0ZGI0OSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX2NvbW1vbi5jCisrKyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJLyogcHJpbnRrKEtFUk5fV0FSTiAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLworCQkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KIAkJCQk7CiAJCX0KIAl9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQkvKiBwcmludGsoS0VSTl9XQVJOICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCQkJCTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9lc3MuYyBiL3NvdW5kL29zcy9zYl9lc3MuYwppbmRleCAxODBlOTVjLi41MWEzZDM4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfZXNzLmMKKysrIGIvc291bmQvb3NzL3NiX2Vzcy5jCkBAIC03ODIsNyArNzgyLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6OwotCQkJLyogcHJpbnRrKEtFUk5fV0FSTiAiRVNTOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJFU1M6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IGU5MjQ0OTIuLmY0N2Y5ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtNjI0LDYgKzYyNCw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCisJaWYgKHNuZF9CVUdfT04oIWgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWhhcm1vbnlfZGlzYWJsZV9pbnRlcnJ1cHRzKGgpOwogCQogICAgCWVyciA9IHNuZF9wY21fbmV3KGgtPmNhcmQsICJoYXJtb255IiwgMCwgMSwgMSwgJnBjbSk7CkBAIC04NjUsMTEgKzg2OCwxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHNuZF9oYXJtb255X21peGVyX2luaXQoc3RydWN0IHNuZF9oYXJtb255ICpoKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGgtPmNhcmQ7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBpZHgsIGVycjsKIAogCWlmIChzbmRfQlVHX09OKCFoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJY2FyZCA9IGgtPmNhcmQ7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkhhcm1vbnkgR2FpbiBjb250cm9sIGludGVyZmFjZSIpOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBIQVJNT05ZX0NPTlRST0xTOyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCBmYjVlZTNjLi43NWM2MDJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMjU5LDcgKzI1OSw2IEBACiAKIGNvbmZpZyBTTkRfQ1M1NTM1QVVESU8KIAl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBBdWRpbyIKLQlkZXBlbmRzIG9uIFg4NiAmJiAhWDg2XzY0CiAJc2VsZWN0IFNORF9QQ00KIAlzZWxlY3QgU05EX0FDOTdfQ09ERUMKIAloZWxwCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggYjQ1OGQyMC4uYWFmNGRhNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtOTczLDcgKzk3Myw3IEBACiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCiAJc25kX2FsaV9wcmludGsoImZyZWVfdm9pY2U6IGNoYW5uZWw9JWRcbiIscHZvaWNlLT5udW1iZXIpOwotCWlmIChwdm9pY2UgPT0gTlVMTCB8fCAhcHZvaWNlLT51c2UpCisJaWYgKCFwdm9pY2UtPnVzZSkKIAkJcmV0dXJuOwogCXNuZF9hbGlfY2xlYXJfdm9pY2VzKGNvZGVjLCBwdm9pY2UtPm51bWJlciwgcHZvaWNlLT5udW1iZXIpOwogCXNwaW5fbG9ja19pcnEoJmNvZGVjLT52b2ljZV9hbGxvYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDI0NTg1YzYuLjRlMmI5MjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04MDgsNiArODA4LDggQEAKIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDEwMDIsIDB4MDAwMSwgR0VORVJJQyksCiAJLyogTGVhZHRlayBXaW5mYXN0IHR2IDIwMDB4cCBkZWx1eCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTA3ZCwgMHg2NjA2LCBHRU5FUklDKSwKKwkvKiBQaW5uYWNsZSBQQ1RWICovCisJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMWJkLCAweDAwMTIsIEdFTkVSSUMpLAogCS8qIFZvb2RvbyBUViAyMDAgKi8KIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDEyMWEsIDB4MzAwMCwgR0VORVJJQyksCiAJLyogQXNrZXkgQ29tcHV0ZXIgQ29ycC4gTWFnaWNUVmlldyc5OSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwppbmRleCBiMWIzYTY0Li43NTQ1NDY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKIAogc3RhdGljIGludCBhdGNfbGluZV9zdXJyb3VuZF91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQogewotCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU80KTsKKwlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPMik7CiB9CiAKIHN0YXRpYyBpbnQgYXRjX2xpbmVfY2xmZV91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIAogc3RhdGljIGludCBhdGNfbGluZV9yZWFyX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCiB7Ci0JcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzIpOworCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU80KTsKIH0KIAogc3RhdGljIGludCBhdGNfbGluZV9pbl91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKaW5kZXggZGEyMDY1Yy4uMTMwNWY3YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCkBAIC05NTAsNyArOTUwLDcgQEAKIAlDb250cm9sIGludGVyZmFjZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNpZiAhZGVmaW5lZChFQ0hPQ0FSRF9IQVNfVk1JWEVSKSB8fCBkZWZpbmVkKEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOKQogCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMTAwMyw2ICsxMDAzLDE5IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTgorLyogT24gdGhlIE1pYSB0aGlzIG9uZSBjb250cm9scyB0aGUgbGluZS1vdXQgdm9sdW1lICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAorCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKKwkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAorCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCisJLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKK307CisjZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAxMiw5ICsxMDI1LDEwIEBACiAJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKIAkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAogfTsKLQogI2VuZGlmCiAKKyNlbmRpZiAvKiAhRUNIT0NBUkRfSEFTX1ZNSVhFUiB8fCBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTiAqLworCiAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCkBAIC0yMDMwLDEwICsyMDQ0LDE4IEBACiAJc25kX2VjaG9fdm1peGVyLmNvdW50ID0gbnVtX3BpcGVzX291dChjaGlwKSAqIG51bV9idXNzZXNfb3V0KGNoaXApOwogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob192bWl4ZXIsIGNoaXApKSkgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKLSNlbHNlCi0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiwgY2hpcCkpKSA8IDApCisjaWZkZWYgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4KKwllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZW5kaWYKKyNlbHNlIC8qIEVDSE9DQVJEX0hBU19WTUlYRVIgKi8KKwllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiwgY2hpcCkpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGN0bF9lcnJvcjsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19saW5lX2lucHV0X2dhaW4sIGNoaXApKSkgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKaW5kZXggZjNiOWI0NS4uZjA1YzhjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEVDSE9DQVJEX0hBU19BREFUCUZBTFNFCiAjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCiAjZGVmaW5lIEVDSE9DQVJEX0hBU19NSURJCisjZGVmaW5lIEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOCiAKIC8qIFBpcGUgaW5kZXhlcyAqLwogI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMjBhNjZmOC4uNjUxN2Y1OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC03MjIsOSArNzIyLDEwIEBACiAJCSAgIGNoaXAtPmxhc3RfY21kW2FkZHJdKTsKIAljaGlwLT5zaW5nbGVfY21kID0gMTsKIAlidXMtPnJlc3BvbnNlX3Jlc2V0ID0gMDsKLQkvKiByZS1pbml0aWFsaXplIENPUkIvUklSQiAqLworCS8qIHJlbGVhc2UgQ09SQi9SSVJCICovCiAJYXp4X2ZyZWVfY21kX2lvKGNoaXApOwotCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKKwkvKiBkaXNhYmxlIHVuc29saWNpdGVkIHJlc3BvbnNlcyAqLworCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpICYgfklDSDZfR0NUTF9VTlNPTCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC04NjUsNyArODY2LDkgQEAKIAl9CiAKIAkvKiBBY2NlcHQgdW5zb2xpY2l0ZWQgcmVzcG9uc2VzICovCi0JYXp4X3dyaXRlbChjaGlwLCBHQ1RMLCBhenhfcmVhZGwoY2hpcCwgR0NUTCkgfCBJQ0g2X0dDVExfVU5TT0wpOworCWlmICghY2hpcC0+c2luZ2xlX2NtZCkKKwkJYXp4X3dyaXRlbChjaGlwLCBHQ1RMLCBhenhfcmVhZGwoY2hpcCwgR0NUTCkgfAorCQkJICAgSUNINl9HQ1RMX1VOU09MKTsKIAogCS8qIGRldGVjdCBjb2RlY3MgKi8KIAlpZiAoIWNoaXAtPmNvZGVjX21hc2spIHsKQEAgLTk4MCw3ICs5ODMsOCBAQAogCWF6eF9pbnRfZW5hYmxlKGNoaXApOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgY29kZWMgY29tbWFuZCBJL08gKi8KLQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CisJaWYgKCFjaGlwLT5zaW5nbGVfY21kKQorCQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CiAKIAkvKiBwcm9ncmFtIHRoZSBwb3NpdGlvbiBidWZmZXIgKi8KIAlhenhfd3JpdGVsKGNoaXAsIERQTEJBU0UsICh1MzIpY2hpcC0+cG9zYnVmLmFkZHIpOwpAQCAtMjMwMyw2ICsyMzA3LDcgQEAKICAqIHdoaXRlLWxpc3QgZm9yIGVuYWJsZV9tc2kKICAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIG1zaV93aGl0ZV9saXN0W10gX19kZXZpbml0ZGF0YSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGY3LCAiSFAgUGF2aWxpb24gZHY0dC0xMzAwIiwgMSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzYwNywgIkhQIENvbXBhIENRNDAiLCAxKSwKIAl7fQogfTsKQEAgLTI2NzMsNiArMjY3OCw3IEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNDRiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1ZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTkwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDIxNWU3MmEuLjJkNjAzZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtNDAzMiw2ICs0MDMyLDEyNyBAQAogfQogCiAvKgorICogSFAgVG91Y2hzbWFydAorICogcG9ydC1BICgweDExKSAgICAgIC0gZnJvbnQgaHAtb3V0CisgKiBwb3J0LUIgKDB4MTQpICAgICAgLSB1bnVzZWQKKyAqIHBvcnQtQyAoMHgxNSkgICAgICAtIHVudXNlZAorICogcG9ydC1EICgweDEyKSAgICAgIC0gcmVhciBsaW5lIG91dAorICogcG9ydC1FICgweDFjKSAgICAgIC0gZnJvbnQgbWljLWluCisgKiBwb3J0LUYgKDB4MTYpICAgICAgLSBJbnRlcm5hbCBzcGVha2VycworICogZGlnaXRhbC1taWMgKDB4MTcpIC0gSW50ZXJuYWwgbWljCisgKi8KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODRhX3RvdWNoc21hcnRfdmVyYnNbXSA9IHsKKwkvKiBEQUNzOyB1bm11dGUgYXMgZGVmYXVsdCAqLworCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDI3fSwgLyogMGRCICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KKwkvKiBQb3J0LUEgKEhQKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwkvKiBQb3J0LUEgcGluICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwkvKiBQb3J0LUEgKEhQKSBwaW4gLSBhbHdheXMgdW5tdXRlZCAqLworCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUG9ydC1FIChpbnQgc3BlYWtlcikgbWl4ZXIgLSByb3V0ZSBvbmx5IGZyb20gYW5hbG9nIG1peGVyICovCisJezB4MjUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4MDN9LAorCS8qIFBvcnQtRSBwaW4gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJLyogUG9ydC1GIChpbnQgc3BlYWtlcikgbWl4ZXIgLSByb3V0ZSBvbmx5IGZyb20gYW5hbG9nIG1peGVyICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLyogUG9ydC1GIHBpbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJLyogQW5hbG9nIG1peGVyOyBtdXRlIGFzIGRlZmF1bHQgKi8KKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwKKwkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBjYXB0dXJlIHNvdXJjZXMgKi8KKwkvKiB7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sICovIC8qIHNldCB2aWEgdW5zb2wgKi8KKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIHBpbi1zZW5zZSAqLworCXsweDExLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUQxODg0QV9IUF9FVkVOVH0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE4ODRBX01JQ19FVkVOVH0sCisJLyogYWxsb3cgdG8gdG91Y2ggR1BJTzEgKGZvciBtdXRlIGNvbnRyb2wpICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAyfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAyfSwgLyogZmlyc3QgbXV0ZWQgKi8KKwkvKiBpbnRlcm5hbCBtaWMgLSBkbWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkvKiBzZXQgbWFnaWMgQ09FRnMgZm9yIGRtaWMgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgxM2Y3fSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDA4fSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0YV90b3VjaHNtYXJ0X21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAorLyoJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLCovCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCisJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAorCQkucHV0ID0gYWQxODg0YV9tb2JpbGVfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBzd2l0Y2ggdG8gZXh0ZXJuYWwgbWljIGlmIHBsdWdnZWQgKi8KK3N0YXRpYyB2b2lkIGFkMTk4NGFfdG91Y2hzbWFydF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWlmIChzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWMsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMCkgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBjLCAwLAorCQkJCSAgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4NCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwYywgMCwKKwkJCQkgICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDUpOworCX0KK30KKworCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBhZDE5ODRhX3RvdWNoc21hcnRfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUQxODg0QV9IUF9FVkVOVDoKKwkJYWQxODg0YV9ocF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUQxODg0QV9NSUNfRVZFTlQ6CisJCWFkMTk4NGFfdG91Y2hzbWFydF9hdXRvbWljKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCitzdGF0aWMgaW50IGFkMTk4NGFfdG91Y2hzbWFydF9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFkMTk4eF9pbml0KGNvZGVjKTsKKwlhZDE4ODRhX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwlhZDE5ODRhX3RvdWNoc21hcnRfYXV0b21pYyhjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKICAqLwogCiBlbnVtIHsKQEAgLTQwMzksNiArNDE2MCw3IEBACiAJQUQxODg0QV9MQVBUT1AsCiAJQUQxODg0QV9NT0JJTEUsCiAJQUQxODg0QV9USElOS1BBRCwKKwlBRDE5ODRBX1RPVUNIU01BUlQsCiAJQUQxODg0QV9NT0RFTFMKIH07CiAKQEAgLTQwNDcsNiArNDE2OSw3IEBACiAJW0FEMTg4NEFfTEFQVE9QXQk9ICJsYXB0b3AiLAogCVtBRDE4ODRBX01PQklMRV0JPSAibW9iaWxlIiwKIAlbQUQxODg0QV9USElOS1BBRF0JPSAidGhpbmtwYWQiLAorCVtBRDE5ODRBX1RPVUNIU01BUlRdCT0gInRvdWNoc21hcnQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTg4NGFfY2ZnX3RibFtdID0gewpAQCAtNDA1OSw2ICs0MTgyLDcgQEAKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzYwMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4NzAxMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTU9CSUxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGFjLCAiVGhpbmtwYWQgWDMwMCIsIEFEMTg4NEFfVEhJTktQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhODIsICJUb3VjaHNtYXJ0IiwgQUQxOTg0QV9UT1VDSFNNQVJUKSwKIAl7fQogfTsKIApAQCAtNDE0Miw2ICs0MjY2LDIxIEBACiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBhZDE5ODRhX3RoaW5rcGFkX3Vuc29sX2V2ZW50OwogCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE5ODRhX3RoaW5rcGFkX2luaXQ7CiAJCWJyZWFrOworCWNhc2UgQUQxOTg0QV9UT1VDSFNNQVJUOgorCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODRhX3RvdWNoc21hcnRfbWl4ZXJzOworCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gYWQxOTg0YV90b3VjaHNtYXJ0X3ZlcmJzOworCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBhZDE5ODRhX3RvdWNoc21hcnRfdW5zb2xfZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTk4NGFfdG91Y2hzbWFydF9pbml0OworCQkvKiBzZXQgdGhlIHVwcGVyLWxpbWl0IGZvciBtaXhlciBhbXAgdG8gMGRCIGZvciBhdm9pZGluZyB0aGUKKwkJICogcG9zc2libGUgZGFtYWdlIGJ5IG92ZXJsb2FkaW5nCisJCSAqLworCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDIwLCBIREFfSU5QVVQsCisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKKwkJCQkJICAoMHgwNSA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CisJCQkJCSAgKDEgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggOWQ4OTllZGEuLjkwNTg1OWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCiAJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOworCXVuc2lnbmVkIGNoYXIgZXh0X21pY19iaWFzOwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtNjgyLDExICs2ODMsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ1X2NhcHR1cmVfc291cmNlX2JlbnEgPSB7Ci0JLm51bV9pdGVtcyA9IDMsCisJLm51bV9pdGVtcyA9IDUsCiAJLml0ZW1zID0gewogCQl7ICJJbnRNaWMiLCAweDEgfSwKIAkJeyAiRXh0TWljIiwgMHgyIH0sCiAJCXsgIkxpbmVJbiIsIDB4MyB9LAorCQl7ICJDRCIsICAgICAweDQgfSwKKwkJeyAiTWl4ZXIiLCAgMHgwIH0sCiAJfQogfTsKIApAQCAtODExLDExICs4MTQsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X2JlbnFfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCisKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBJbiBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBJbiBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAogCisJSERBX0NPREVDX1ZPTFVNRSgiTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfSU5QVVQpLAorCiAJe30KIH07CiAKQEAgLTE5MTcsNiArMTkyOCwxMSBAQAogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2NhcHNyY19uaWRzWzFdID0geyAweDE3IH07CiAjZGVmaW5lIENYVDUwNjZfU1BESUZfT1VUCTB4MjEKIAorLyogT0xQQydzIG1pY3JvcGhvbmUgcG9ydCBpcyBEQyBjb3VwbGVkIGZvciB1c2Ugd2l0aCBleHRlcm5hbCBzZW5zb3JzLAorICogdGhlcmVmb3JlIHdlIHVzZSBhIDUwJSBtaWMgYmlhcyBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGlucHV0IHNpZ25hbCB3aXRoCisgKiB0aGUgREMgaW5wdXQgcmFuZ2Ugb2YgdGhlIGNvZGVjLiAqLworI2RlZmluZSBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTIFBJTl9WUkVGNTAKKwogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNjZfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwpAQCAtMTk3MCw5ICsxOTg2LDEwIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0gewogCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCiAKIAkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLwogCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LApAQCAtMjIyNSw3ICsyMjQyLDcgQEAKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCiAKIAkvKiBQb3J0IEI6IGV4dGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTfSwKIAogCS8qIFBvcnQgQzogaW50ZXJuYWwgbWljcm9waG9uZSAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMjMxNSw2ICsyMzMyLDcgQEAKIAkJICAgICAgQ1hUNTA2Nl9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjUsICJEZWxsIiwKIAkJICAgICAgQ1hUNTA2Nl9ERUxMX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJe30KIH07CiAKQEAgLTIzNDIsNiArMjM2MCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKKwlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yMzczLDYgKzIzOTIsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZXh0X21pY19iaWFzID0gQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUzsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCmluZGV4IGM4NDM1YzkuLjZhZmRhYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgogCisvKiBkZWZpbmUgYmVsb3cgdG8gcmVzdHJpY3QgdGhlIHN1cHBvcnRlZCByYXRlcyBhbmQgZm9ybWF0cyAqLworLyogI2RlZmluZSBMSU1JVEVEX1JBVEVfRk1UX1NVUFBPUlQgKi8KKwogc3RydWN0IG52aGRtaV9zcGVjIHsKIAlzdHJ1Y3QgaGRhX211bHRpX291dCBtdWx0aW91dDsKIApAQCAtNjAsNiArNjMsMjIgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCisjaWZkZWYgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUCisvKiBzdXBwb3J0IG9ubHkgdGhlIHNhZmUgZm9ybWF0IGFuZCByYXRlICovCisjZGVmaW5lIFNVUFBPUlRFRF9SQVRFUwkJU05EUlZfUENNX1JBVEVfNDgwMDAKKyNkZWZpbmUgU1VQUE9SVEVEX01BWEJQUwkxNgorI2RlZmluZSBTVVBQT1JURURfRk9STUFUUwlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQorI2Vsc2UKKy8qIHN1cHBvcnQgYWxsIHJhdGVzIGFuZCBmb3JtYXRzICovCisjZGVmaW5lIFNVUFBPUlRFRF9SQVRFUyBcCisJKFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAorCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDAgfCBTTkRSVl9QQ01fUkFURV8xNzY0MDAgfFwKKwkgU05EUlZfUENNX1JBVEVfMTkyMDAwKQorI2RlZmluZSBTVVBQT1JURURfTUFYQlBTCTI0CisjZGVmaW5lIFNVUFBPUlRFRF9GT1JNQVRTIFwKKwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKyNlbmRpZgorCiAvKgogICogQ29udHJvbHMKICAqLwpAQCAtMjU4LDkgKzI3Nyw5IEBACiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDgsCiAJLm5pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZCwKLQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkubWF4YnBzID0gMTYsCi0JLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCisJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCisJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKIAkub3BzID0gewogCQkub3BlbiA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzhjaCwKQEAgLTI3Myw5ICsyOTIsOSBAQAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLAogCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCi0JLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLm1heGJwcyA9IDE2LAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAorCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAorCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV8yY2gsCkBAIC0zNzgsNiArMzk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9udmhkbWlbXSA9IHsKIAl7IC5pZCA9IDB4MTBkZTAwMDIsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDAzLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAorCXsgLmlkID0gMHgxMGRlMDAwNSwgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwMDYsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA3LCAubmFtZSA9ICJNQ1A3QSBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDA2NywgLm5hbWUgPSAiTUNQNjcgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV8yY2ggfSwKQEAgLTM4Nyw2ICs0MDcsNyBAQAogCiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDIiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwMyIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA1Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDYiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDY3Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDEyOTYwNTguLjcwNTgzNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2FwX21peGVyOwkvKiBjYXB0dXJlIG1peGVyICovCiAJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCi0JY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1sxMF07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTAogCQkJCQkJICogdGVybWluYXRpb24hCiAJCQkJCQkgKi8KQEAgLTk2NSw2ICs5NjUsOCBAQAogCXVuc2lnbmVkIGludCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJaW50IGk7CiAKKwlpZiAoIW5pZCkKKwkJcmV0dXJuOwogCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9UUklHX1JFUSkgLyogbmVlZCB0cmlnZ2VyPyAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKQEAgLTEzMzIsMTUgKzEzMzQsMjAgQEAKIAkgKgkgICAgICAgIHdoZW4gdGhlIGV4dGVybmFsIGhlYWRwaG9uZSBvdXQgamFjayBpcyBwbHVnZ2VkIgogCSAqLwogCWlmICghc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdKSB7CisJCWhkYV9uaWRfdCBuaWQ7CiAJCXRtcCA9IChhc3MgPj4gMTEpICYgMHgzOwkvKiBIUCB0byBjaGFzc2lzICovCiAJCWlmICh0bXAgPT0gMCkKLQkJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IHBvcnRhOworCQkJbmlkID0gcG9ydGE7CiAJCWVsc2UgaWYgKHRtcCA9PSAxKQotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gcG9ydGU7CisJCQluaWQgPSBwb3J0ZTsKIAkJZWxzZSBpZiAodG1wID09IDIpCi0JCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBwb3J0ZDsKKwkJCW5pZCA9IHBvcnRkOwogCQllbHNlCiAJCQlyZXR1cm4gMTsKKwkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspCisJCQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldID09IG5pZCkKKwkJCQlyZXR1cm4gMTsKKwkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gbmlkOwogCX0KIAogCWFsY19pbml0X2F1dG9faHAoY29kZWMpOwpAQCAtMTM2Miw3ICsxMzY5LDcgQEAKIH0KIAogLyoKLSAqIEZpeC11cCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucworICogRml4LXVwIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFuZCBhZGQgZGVmYXVsdCB2ZXJicwogICovCiAKIHN0cnVjdCBhbGNfcGluY2ZnIHsKQEAgLTEzNzAsOSArMTM3NywxNCBAQAogCXUzMiB2YWw7CiB9OwogCi1zdGF0aWMgdm9pZCBhbGNfZml4X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKK3N0cnVjdCBhbGNfZml4dXAgeworCWNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICpwaW5zOworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqdmVyYnM7Cit9OworCitzdGF0aWMgdm9pZCBhbGNfcGlja19maXh1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCSAgIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxdWlyaywKLQkJCSAgIGNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICoqcGluZml4KQorCQkJICAgY29uc3Qgc3RydWN0IGFsY19maXh1cCAqZml4KQogewogCWNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICpjZmc7CiAKQEAgLTEzODAsOSArMTM5MiwxNCBAQAogCWlmICghcXVpcmspCiAJCXJldHVybjsKIAotCWNmZyA9IHBpbmZpeFtxdWlyay0+dmFsdWVdOwotCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCi0JCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKKwlmaXggKz0gcXVpcmstPnZhbHVlOworCWNmZyA9IGZpeC0+cGluczsKKwlpZiAoY2ZnKSB7CisJCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CisJfQorCWlmIChmaXgtPnZlcmJzKQorCQlhZGRfdmVyYihjb2RlYy0+c3BlYywgZml4LT52ZXJicyk7CiB9CiAKIC8qCkBAIC00NjY3LDkgKzQ2ODQsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtNjIzMiw3ICs2MjQ5LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0hQXzMwMTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9BVVRPKSwgLyogbm8gcXVpcmsgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEwLCAiSFAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMSwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTIsICJIUCIsIEFMQzI2MF9IUF9EQzc2MDApLApAQCAtODg5NCwxMCArODkxMSwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDM4MDAsICJNYWNib29rUHJvIDQsMSIsIEFMQzg4NV9NQlAzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZTAwLCAiaU1hYyAyNCBBbHVtaW51bSIsIEFMQzg4NV9JTUFDMjQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDNmMDAsICJNYWNib29rIDUsMSIsIEFMQzg4NV9NQjUpLAotCS8qIEZJWE1FOiBIUCBqYWNrIHNlbnNlIHNlZW1zIG5vdCB3b3JraW5nIGZvciBNQlAgNSwxLCBzbyBhcHBhcmVudGx5Ci0JICogbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKKwkvKiBGSVhNRTogSFAgamFjayBzZW5zZSBzZWVtcyBub3Qgd29ya2luZyBmb3IgTUJQIDUsMSBvciA1LDIsCisJICogc28gYXBwYXJlbnRseSBubyBwZXJmZWN0IHNvbHV0aW9uIHlldAogCSAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQwMDAsICJNYWNib29rUHJvIDUsMSIsIEFMQzg4NV9NQjUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQ2MDAsICJNYWNib29rUHJvIDUsMiIsIEFMQzg4NV9NQjUpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTk1OTMsMTEgKzk2MTEsMTMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqYWxjODgyX3Bpbl9maXhlc1tdID0gewotCVtQSU5GSVhfQUJJVF9BVzlEX01BWF0gPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzg4Ml9maXh1cHNbXSA9IHsKKwlbUElORklYX0FCSVRfQVc5RF9NQVhdID0geworCQkucGlucyA9IGFsYzg4Ml9hYml0X2F3OWRfcGluZml4CisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfcGluZml4X3RibFtdID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKIAl7fQogfTsKQEAgLTk3OTQsOSArOTgxNCw5IEBACiAJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CiAJCWVsc2UgewogCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKLQkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7Ci0JCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCiAJCQkJYnJlYWs7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwogCQl9CiAJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCkBAIC05ODY5LDcgKzk4ODksNyBAQAogCQlib2FyZF9jb25maWcgPSBBTEM4ODJfQVVUTzsKIAl9CiAKLQlhbGNfZml4X3BpbmNmZyhjb2RlYywgYWxjODgyX3BpbmZpeF90YmwsIGFsYzg4Ml9waW5fZml4ZXMpOworCWFsY19waWNrX2ZpeHVwKGNvZGVjLCBhbGM4ODJfZml4dXBfdGJsLCBhbGM4ODJfZml4dXBzKTsKIAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDODgyX0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCkBAIC0xMTQ0MSw2ICsxMTQ2MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwZiwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE2LCAiU29ueSBWQUlPIiwgQUxDMjYyX0FVVE8pLCAvKiBkaWctb25seSAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMjUsICJTb255IFZBSU8gWjIxTU4iLCBBTEMyNjJfVE9TSElCQV9TMDYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMzUsICJTb255IFZBSU8gVkdOLUZXMTcwSiIsIEFMQzI2Ml9BVVRPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDQ3LCAiU29ueSBWQUlPIFR5cGUgRyIsIEFMQzI2Ml9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDRkLCAweGZmMDAsIDB4OTAwMCwgIlNvbnkgVkFJTyIsCiAJCQkgICBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIGR5bmFib29rIFNTIFJYMSIsCkBAIC0xMjU4NSw3ICsxMjYwNyw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1YiwgIkFjZXIgQXNwaXJlIE9uZSIsCiAJCQkJCQlBTEMyNjhfQUNFUl9BU1BJUkVfT05FKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjUzLCAiRGVsbCBPRU0iLCBBTEMyNjhfREVMTCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDJiMCwgIkRlbGwgSW5zcGlyb24gTWluaTkiLCBBTEMyNjhfREVMTCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAyOCwgMHhmZmYwLCAweDAyYjAsCisJCQkiRGVsbCBJbnNwaXJvbiBNaW5pOS9Wb3N0cm8gQTkwIiwgQUxDMjY4X0RFTEwpLAogCS8qIGFsbW9zdCBjb21wYXRpYmxlIHdpdGggdG9zaGliYSBidXQgd2l0aCBvcHRpb25hbCBkaWdpdGFsIG91dHM7CiAJICogYXV0by1wcm9iaW5nIHNlZW1zIHdvcmtpbmcgZmluZQogCSAqLwpAQCAtMTI2NjAsNyArMTI2ODMsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUsCiAJfSwKIAlbQUxDMjY4X0FDRVJdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIsCisJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX21peGVyLCBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCiAJCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX3ZlcmJzIH0sCkBAIC0xMjg0MiwxMiArMTI4NjUsMTUgQEAKIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCQlpbnQgaTsKIAorCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OF9jYXBzcmNfbmlkczsKIAkJLyogZ2V0IHR5cGUgKi8KIAkJd2NhcCA9IGdldF93Y2Fwc190eXBlKHdjYXApOwogCQlpZiAoc3BlYy0+YXV0b19taWMgfHwKIAkJICAgIHdjYXAgIT0gQUNfV0lEX0FVRF9JTiB8fCBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKSB7CiAJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzI2OF9hZGNfbmlkc19hbHQ7CiAJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OF9hZGNfbmlkc19hbHQpOworCQkJaWYgKHNwZWMtPmF1dG9fbWljKQorCQkJCWZpeHVwX2F1dG9taWNfYWRjKGNvZGVjKTsKIAkJCWlmIChzcGVjLT5hdXRvX21pYyB8fCBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKQogCQkJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlcik7CiAJCQllbHNlCkBAIC0xMjg1Nyw3ICsxMjg4Myw2IEBACiAJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OF9hZGNfbmlkcyk7CiAJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfbWl4ZXIpOwogCQl9Ci0JCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY4X2NhcHNyY19uaWRzOwogCQkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9hZGNfbmlkczsgaSsrKQogCQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYWxjMjY4X2NhcHNyY19uaWRzW2ldLApAQCAtMTQzNTcsMTUgKzE0MzgyLDE2IEBACiBzdGF0aWMgdm9pZCBhbGM4NjFfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgcGluOwogCi0JcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCWlmIChwaW4pCi0JCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsCisJaWYgKHNwZWMtPmF1dG9jZmcuaHBfb3V0cykKKwkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLAorCQkJCQkJICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCisJCQkJCQkgIFBJTl9IUCwKIAkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKLQlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKLQlpZiAocGluKQotCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwKKwlpZiAoc3BlYy0+YXV0b2NmZy5zcGVha2VyX291dHMpCisJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywKKwkJCQkJCSAgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCisJCQkJCQkgIFBJTl9PVVQsCiAJCQkJCQkgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKTsKIH0KIApAQCAtMTUxNTgsNyArMTUxODQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweGE4OGQsICJSZWFsdGVrIEFMQzY2MCBkZW1vIiwgQUxDNjYwVkRfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGJmLCAiSFAgVFgxMDAwIiwgQUxDODYxVkRfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyZTIsICJBc3VzIHozNW0iLCBBTEM2NjBWRF8zU1QpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBc3VzIEcxIiwgQUxDNjYwVkRfM1NUKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBc3VzIEcxIiwgQUxDNjYwVkRfM1NUKSwqLyAvKiBhdXRvICovCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTYzMywgIkFzdXMgVjFTbiIsIEFMQzY2MFZEX0FTVVNfVjFTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWU3LCAiQVNVUyIsIEFMQzY2MFZEXzNTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweDAzZjAsICJSZWFsdGVrIEFMQzY2MCBkZW1vIiwgQUxDNjYwVkRfM1NUKSwKQEAgLTE1NTUxLDYgKzE1NTc3LDI5IEBACiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKK2VudW0geworCUFMQzY2MFZEX0ZJWF9BU1VTX0dQSU8xCit9OworCisvKiByZXNldCBHUElPMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjB2ZF9maXhfYXN1c19ncGlvMV92ZXJic1tdID0geworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDN9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJeyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGM4NjF2ZF9maXh1cHNbXSA9IHsKKwlbQUxDNjYwVkRfRklYX0FTVVNfR1BJTzFdID0geworCQkudmVyYnMgPSBhbGM2NjB2ZF9maXhfYXN1c19ncGlvMV92ZXJicywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg2MXZkX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIEE3LUsiLCBBTEM2NjBWRF9GSVhfQVNVU19HUElPMSksCisJe30KK307CisKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODYxdmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwpAQCAtMTU1NzIsNiArMTU2MjEsOCBAQAogCQlib2FyZF9jb25maWcgPSBBTEM4NjFWRF9BVVRPOwogCX0KIAorCWFsY19waWNrX2ZpeHVwKGNvZGVjLCBhbGM4NjF2ZF9maXh1cF90YmwsIGFsYzg2MXZkX2ZpeHVwcyk7CisKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MVZEX0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJCWVyciA9IGFsYzg2MXZkX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKQEAgLTE2ODUyLDYgKzE2OTAzLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBkNDcsICJGb3hjb25uIDQ1Q01YLzQ1R01YLzQ1Q01YLUsiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNmUsICJUb3NoaWJhIE5CMjAwIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCkBAIC0xNzE0NSw3MCArMTcxOTcsMTQ1IEBACiAgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgogICovCiAKLS8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCi1zdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQorLyogY29udmVydCBmcm9tIE1JWCBuaWQgdG8gREFDICovCitzdGF0aWMgaW5saW5lIGhkYV9uaWRfdCBhbGM2NjJfbWl4X3RvX2RhYyhoZGFfbmlkX3QgbmlkKQoreworCWlmIChuaWQgPT0gMHgwZikKKwkJcmV0dXJuIDB4MDI7CisJZWxzZSBpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MGUpCisJCXJldHVybiBuaWQgLSAweDBjICsgMHgwMjsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBnZXQgTUlYIG5pZCBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIHBpbiB0YXJnZXRlZCB0byBEQUMgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2RhY190b19taXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCisJCQkJICAgaGRhX25pZF90IGRhYykKK3sKKwloZGFfbmlkX3QgbWl4WzRdOworCWludCBpLCBudW07CisKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBtaXgsIEFSUkFZX1NJWkUobWl4KSk7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChhbGM2NjJfbWl4X3RvX2RhYyhtaXhbaV0pID09IGRhYykKKwkJCXJldHVybiBtaXhbaV07CisJfQorCXJldHVybiAwOworfQorCisvKiBsb29rIGZvciBhbiBlbXB0eSBEQUMgc2xvdCAqLworc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfbG9va19mb3JfZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBzcmNzWzVdOworCWludCBpLCBqLCBudW07CisKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBhbGM2NjJfbWl4X3RvX2RhYyhzcmNzW2ldKTsKKwkJaWYgKCFuaWQpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzOyBqKyspCisJCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbal0gPT0gbmlkKQorCQkJCWJyZWFrOworCQlpZiAoaiA+PSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcykKKwkJCXJldHVybiBuaWQ7CisJfQorCXJldHVybiAwOworfQorCisvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaTsKKwloZGFfbmlkX3QgZGFjOworCisJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOworCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJCWRhYyA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSk7CisJCWlmICghZGFjKQorCQkJY29udGludWU7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGM2NjJfYWRkX3ZvbF9jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQogewogCWNoYXIgbmFtZVszMl07CisJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKKwlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAorCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOworfQorCitzdGF0aWMgaW50IGFsYzY2Ml9hZGRfc3dfY3RsKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQoreworCWNoYXIgbmFtZVszMl07CisJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKKwlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9JTlBVVCkpOworfQorCisjZGVmaW5lIGFsYzY2Ml9hZGRfc3RlcmVvX3ZvbChzcGVjLCBwZngsIG5pZCkgXAorCWFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgMykKKyNkZWZpbmUgYWxjNjYyX2FkZF9zdGVyZW9fc3coc3BlYywgcGZ4LCBuaWQpIFwKKwlhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCBwZngsIG5pZCwgMykKKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWQ7CisJaGRhX25pZF90IG5pZCwgbWl4OwogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgewotCQlpZiAoIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQorCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsKKwkJaWYgKCFuaWQpCiAJCQljb250aW51ZTsKLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoaSk7CisJCW1peCA9IGFsYzY2Ml9kYWNfdG9fbWl4KGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0sIG5pZCk7CisJCWlmICghbWl4KQorCQkJY29udGludWU7CiAJCWlmIChpID09IDIpIHsKIAkJCS8qIENlbnRlci9MRkUgKi8KLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJICAiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJICAiTEZFIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsICJMRkUiLCBuaWQsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMSwgMCwKLQkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsICJDZW50ZXIiLCBtaXgsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkxGRSBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMiwgMCwKLQkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsICJMRkUiLCBtaXgsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKIAkJCWNvbnN0IGNoYXIgKnBmeDsKIAkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCiAJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKSB7Ci0JCQkJaWYgKCFjZmctPmhwX3BpbnMpCisJCQkJaWYgKGNmZy0+aHBfb3V0cykKIAkJCQkJcGZ4ID0gIlNwZWFrZXIiOwogCQkJCWVsc2UKIAkJCQkJcGZ4ID0gIlBDTSI7CiAJCQl9IGVsc2UKIAkJCQlwZnggPSBjaG5hbWVbaV07Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYKIAkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpCiAJCQkJcGZ4ID0gIlNwZWFrZXIiOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChhbGM4ODBfaWR4X3RvX21peGVyKGkpLAotCQkJCQkJICAgIDMsIDAsIEhEQV9JTlBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBtaXgsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTcyMTcsODYgKzE3MzQ0LDc1IEBACiB9CiAKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmb3Igc3BlYWtlciBhbmQgSFAgb3V0cHV0cyAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgaGRhX25pZF90IHBpbiwKKy8qIHJldHVybiBEQUMgbmlkIGlmIGFueSBuZXcgREFDIGlzIGFzc2lnbmVkICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCiAJCQkJCWNvbnN0IGNoYXIgKnBmeCkKIHsKLQloZGFfbmlkX3QgbmlkOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBuaWQsIG1peDsKIAlpbnQgZXJyOwotCWNoYXIgbmFtZVszMl07CiAKIAlpZiAoIXBpbikKIAkJcmV0dXJuIDA7Ci0KLQlpZiAocGluID09IDB4MTcpIHsKLQkJLyogQUxDNjYzIGhhcyBhIG1vbm8gb3V0cHV0IHBpbiBvbiAweDE3ICovCisJbmlkID0gYWxjNjYyX2xvb2tfZm9yX2RhYyhjb2RlYywgcGluKTsKKwlpZiAoIW5pZCkgeworCQljaGFyIG5hbWVbMzJdOworCQkvKiB0aGUgY29ycmVzcG9uZGluZyBEQUMgaXMgYWxyZWFkeSBvY2N1cGllZCAqLworCQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIHBpbikgJiBBQ19XQ0FQX09VVF9BTVApKQorCQkJcmV0dXJuIDA7IC8qIG5vIHdheSAqLworCQkvKiBjcmVhdGUgYSBzd2l0Y2ggb25seSAqLwogCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDIsIDAsIEhEQV9PVVRQVVQpKTsKKwkJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKTsKKwl9CisKKwltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgcGluLCBuaWQpOworCWlmICghbWl4KQorCQlyZXR1cm4gMDsKKwllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKHBpbikpIHsKLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0JCS8qIHByaW50ayhLRVJOX0RFQlVHICJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCi0JCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCi0JCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQotCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOwotCQllbHNlCi0JCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdID0gbmlkOwotCQkvKiBjb250cm9sIEhQIHZvbHVtZS9zd2l0Y2ggb24gdGhlIG91dHB1dCBtaXhlciBhbXAgKi8KLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwgSERBX0lOUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9IGVsc2UgaWYgKGFsYzg4MF9pc19tdWx0aV9waW4ocGluKSkgewotCQkvKiBzZXQgbWFudWFsIGNvbm5lY3Rpb24gKi8KLQkJLyogd2UgaGF2ZSBvbmx5IGEgc3dpdGNoIG9uIEhQLW91dCBQSU4gKi8KLQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAzLCAwLCBIREFfT1VUUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7CisJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBtaXgsIDMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBuaWQ7CiB9CiAKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCiAjZGVmaW5lIGFsYzY2Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzIFwKLQlhbGM4ODBfYXV0b19jcmVhdGVfaW5wdXRfY3RscworCWFsYzg4Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzCiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJICAgICAgaGRhX25pZF90IG5pZCwgaW50IHBpbl90eXBlLAotCQkJCQkgICAgICBpbnQgZGFjX2lkeCkKKwkJCQkJICAgICAgaGRhX25pZF90IGRhYykKIHsKKwlpbnQgaSwgbnVtOworCWhkYV9uaWRfdCBzcmNzWzRdOworCiAJYWxjX3NldF9waW5fb3V0cHV0KGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKIAkvKiBuZWVkIHRoZSBtYW51YWwgY29ubmVjdGlvbj8gKi8KLQlpZiAoYWxjODgwX2lzX211bHRpX3BpbihuaWQpKSB7Ci0JCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCQlpbnQgaWR4ID0gYWxjODgwX211bHRpX3Bpbl9pZHgobmlkKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgYWxjODgwX2lkeF90b19zZWxlY3RvcihpZHgpLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKLQkJCQkgICAgYWxjODgwX2RhY190b19pZHgoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbZGFjX2lkeF0pKTsKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDw9IDEpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKGFsYzY2Ml9taXhfdG9fZGFjKHNyY3NbaV0pICE9IGRhYykKKwkJCWNvbnRpbnVlOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBpKTsKKwkJcmV0dXJuOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdF9tdWx0aV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IEhEQV9TSURFOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKLQkJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJCWlmIChuaWQpCiAJCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgcGluX3R5cGUsCi0JCQkJCQkJICBpKTsKKwkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pOwogCX0KIH0KIApAQCAtMTczMDYsMTIgKzE3NDIyLDEzIEBACiAJaGRhX25pZF90IHBpbjsKIAogCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQlpZiAocGluKSAvKiBjb25uZWN0IHRvIGZyb250ICovCi0JCS8qIHVzZSBkYWMgMCAqLwotCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCAwKTsKKwlpZiAocGluKQorCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLAorCQkJCQkJICBzcGVjLT5tdWx0aW91dC5ocF9uaWQpOwogCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOwogCWlmIChwaW4pCi0JCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKKwkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsCisJCQkJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0pOwogfQogCiAjZGVmaW5lIEFMQzY2Ml9QSU5fQ0RfTklECQlBTEM4ODBfUElOX0NEX05JRApAQCAtMTczNDksMjEgKzE3NDY2LDI1IEBACiAJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKLQllcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19maWxsX2RhY19uaWRzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsCisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChjb2RlYywKIAkJCQkJICAgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCiAJCQkJCSAgICJTcGVha2VyIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCisJaWYgKGVycikKKwkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IGVycjsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCiAJCQkJCSAgICJIZWFkcGhvbmUiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKQorCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBlcnI7CiAJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA4MjYxMzdlLi44NmRlMzA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgpAQCAtMTU4LDYgKzE1OSw3IEBACiAJU1RBQ19EOTY1XzVTVF9OT19GUCwKIAlTVEFDX0RFTExfM1NULAogCVNUQUNfREVMTF9CSU9TLAorCVNUQUNfOTI3WF9WT0xLTk9CLAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKQEAgLTE4Miw4ICsxODQsOCBAQAogCiBzdHJ1Y3Qgc2lnbWF0ZWxfbWljX3JvdXRlIHsKIAloZGFfbmlkX3QgcGluOwotCXVuc2lnbmVkIGNoYXIgbXV4X2lkeDsKLQl1bnNpZ25lZCBjaGFyIGRtdXhfaWR4OworCXNpZ25lZCBjaGFyIG11eF9pZHg7CisJc2lnbmVkIGNoYXIgZG11eF9pZHg7CiB9OwogCiBzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyB7CkBAIC05MDcsNiArOTA5LDE2IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZGVsbF8zc3RfY29yZV9pbml0W10gPSB7CisJLyogZG9uJ3Qgc2V0IGRlbHRhIGJpdCAqLworCXsweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweDdmfSwKKwkvKiB1bm11dGUgbm9kZSAweDFiICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJLyogc2VsZWN0IG5vZGUgMHgwMyBhcyBEQUMgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwkKIAl7IDB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LApAQCAtOTE1LDYgKzkyNywxNCBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X3ZvbGtub2JfY29yZV9pbml0W10gPSB7CisJLyogZG9uJ3Qgc2V0IGRlbHRhIGJpdCAqLworCXsweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweDdmfSwKKwkvKiBlbmFibGUgYW5hbG9nIHBjIGJlZXAgcGF0aCAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMiwgMSA8PCA1fSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIwNV9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKQEAgLTE1NzAsNiArMTU5MCw4IEBACiAJCQkJIkRlbGwgU3R1ZGlvIDE3IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmUsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1NTUiLCBTVEFDX0RFTExfTTZfRE1JQyksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiZCwKKwkJCQkiRGVsbCBTdHVkaW8gMTU1NyIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0xNjc0LDYgKzE2OTYsOCBAQAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmYiwKIAkJICAgICAgIkhQIGR2NC0xMjIybnIiLCBTVEFDX0hQX0RWNF8xMjIyTlIpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MTcyMCwKKwkJCSAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzA4MCwKIAkJICAgICAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzBmMCwKQEAgLTE5OTksNiArMjAyMyw3IEBACiAJW1NUQUNfRDk2NV81U1RfTk9fRlBdICA9IGQ5NjVfNXN0X25vX2ZwX3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfM1NUXSAgPSBkZWxsXzNzdF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMX0JJT1NdID0gTlVMTCwKKwlbU1RBQ185MjdYX1ZPTEtOT0JdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTI3eF9tb2RlbHNbU1RBQ185MjdYX01PREVMU10gPSB7CkBAIC0yMDEwLDYgKzIwMzUsNyBAQAogCVtTVEFDX0Q5NjVfNVNUX05PX0ZQXQk9ICI1c3RhY2stbm8tZnAiLAogCVtTVEFDX0RFTExfM1NUXQkJPSAiZGVsbC0zc3RhY2siLAogCVtTVEFDX0RFTExfQklPU10JPSAiZGVsbC1iaW9zIiwKKwlbU1RBQ185MjdYX1ZPTEtOT0JdCT0gInZvbGtub2IiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5Mjd4X2NmZ190YmxbXSA9IHsKQEAgLTIwNDUsNiArMjA3MSw4IEBACiAJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjUwMCwKIAkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJLyogdm9sdW1lLWtub2IgZml4ZXMgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwY2YsICJGU0MiLCBTVEFDXzkyN1hfVk9MS05PQiksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMzQ2OSwxOCArMzQ5NywyNiBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKSB7CiAJCS8qIGFuYWxvZyBwaW4gKi8KLQkJbWljLT5kbXV4X2lkeCA9IDA7CiAJCWkgPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgc3BlYy0+bXV4X25pZHNbMF0sIHBpbik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJbWljLT5tdXhfaWR4ID0gaTsKKwkJbWljLT5kbXV4X2lkeCA9IC0xOworCQlpZiAoc3BlYy0+ZG11eF9uaWRzKQorCQkJbWljLT5kbXV4X2lkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLAorCQkJCQkJCSAgICAgc3BlYy0+ZG11eF9uaWRzWzBdLAorCQkJCQkJCSAgICAgc3BlYy0+bXV4X25pZHNbMF0pOwogCX0gIGVsc2UgaWYgKHNwZWMtPmRtdXhfbmlkcykgewogCQkvKiBkaWdpdGFsIHBpbiAqLwotCQltaWMtPm11eF9pZHggPSAwOwogCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgcGluKTsKIAkJaWYgKGkgPCAwKQogCQkJcmV0dXJuIC0xOwogCQltaWMtPmRtdXhfaWR4ID0gaTsKKwkJbWljLT5tdXhfaWR4ID0gLTE7CisJCWlmIChzcGVjLT5tdXhfbmlkcykKKwkJCW1pYy0+bXV4X2lkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLAorCQkJCQkJCSAgICBzcGVjLT5tdXhfbmlkc1swXSwKKwkJCQkJCQkgICAgc3BlYy0+ZG11eF9uaWRzWzBdKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00NTU3LDExICs0NTkzLDExIEBACiAJCW1pYyA9ICZzcGVjLT5leHRfbWljOwogCWVsc2UKIAkJbWljID0gJnNwZWMtPmludF9taWM7Ci0JaWYgKG1pYy0+ZG11eF9pZHgpCisJaWYgKG1pYy0+ZG11eF9pZHggPj0gMCkKIAkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgc3BlYy0+ZG11eF9uaWRzWzBdLCAwLAogCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJCQkgIG1pYy0+ZG11eF9pZHgpOwotCWVsc2UKKwlpZiAobWljLT5tdXhfaWR4ID49IDApCiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPm11eF9uaWRzWzBdLCAwLAogCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJCQkgIG1pYy0+bXV4X2lkeCk7CkBAIC00NjM0LDYgKzQ2NzAsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaHBfYnNlcmllc19zeXN0ZW0odTMyIHN1YnN5c3RlbV9pZCkKK3sKKwlzd2l0Y2ggKHN1YnN5c3RlbV9pZCkgeworCWNhc2UgMHgxMDNjMzA3ZToKKwljYXNlIDB4MTAzYzMwN2Y6CisJY2FzZSAweDEwM2MzMDgwOgorCWNhc2UgMHgxMDNjMzA4MToKKwljYXNlIDB4MTAzYzE3MjI6CisJY2FzZSAweDEwM2MxNzIzOgorCWNhc2UgMHgxMDNjMTcyNDoKKwljYXNlIDB4MTAzYzE3MjU6CisJY2FzZSAweDEwM2MxNzI2OgorCWNhc2UgMHgxMDNjMTcyNzoKKwljYXNlIDB4MTAzYzE3Mjg6CisJY2FzZSAweDEwM2MxNzI5OgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgc3RhYzkyaGRfcHJvY19ob29rKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKIAkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTQ3MjMsNiArNDc3OSwxMSBAQAogCQllbHNlCiAJCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCiAKKwkJaWYgKGhwX2JzZXJpZXNfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CisJCQkvKiBMRUQgc3RhdGUgaXMgaW52ZXJ0ZWQgb24gdGhlc2Ugc3lzdGVtcyAqLworCQkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOworCQl9CisKIAkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAogCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCiAJCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOwpAQCAtNTIxMiw2ICs1MjczLDcgQEAKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKIAlzdHJ1Y3QgaGRhX3ZlcmIgKnVubXV0ZV9pbml0ID0gc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0OworCXVuc2lnbmVkIGludCBwaW5fY2ZnOwogCWludCBlcnIgPSAwOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwpAQCAtNTM5NSw2ICs1NDU3LDQ1IEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCQlwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKKwkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfTElORV9PVVQgfHwKKwkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfU1BFQUtFUiAgfHwKKwkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfSFBfT1VUKSB7CisJCQkvKiBJdCB3YXMgY2hhbmdlZCBpbiB0aGUgQklPUyB0byBqdXN0IHNhdGlzZnkgTVMgRFRNLgorCQkJICogTGV0cyB0dXJuIGl0IGJhY2sgaW50byBzbGF2ZWQgSFAKKwkJCSAqLworCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH5BQ19ERUZDRkdfREVWSUNFKSkKKwkJCQkJfCAoQUNfSkFDS19IUF9PVVQgPDwKKwkJCQkJCUFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpOworCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH4oQUNfREVGQ0ZHX0RFRl9BU1NPQworCQkJCQkJCXwgQUNfREVGQ0ZHX1NFUVVFTkNFKSkpCisJCQkJCQkJCXwgMHgxZjsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgcGluX2NmZyk7CisJCX0KKwl9CisKKwlpZiAoKGNvZGVjLT5zdWJzeXN0ZW1faWQgPj4gMTYpID09IFBDSV9WRU5ET1JfSURfSFApIHsKKwkJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmRldiA9IE5VTEw7CisJCXdoaWxlICgoZGV2ID0gZG1pX2ZpbmRfZGV2aWNlKERNSV9ERVZfVFlQRV9PRU1fU1RSSU5HLAorCQkJCQkgICAgICBOVUxMLCBkZXYpKSkgeworCQkJaWYgKHN0cmNtcChkZXYtPm5hbWUsICJIUF9NdXRlX0xFRF8xIikpIHsKKwkJCQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwkJCQljYXNlIDB4MTExZDc2MDg6CisJCQkJCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDExMWQ3NjAwOgorCQkJCWNhc2UgMHgxMTFkNzYwMToKKwkJCQljYXNlIDB4MTExZDc2MDI6CisJCQkJY2FzZSAweDExMWQ3NjAzOgorCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoc3BlYy0+Z3Bpb19sZWQpIHsKIAkJc3BlYy0+Z3Bpb19tYXNrIHw9IHNwZWMtPmdwaW9fbGVkOwpAQCAtNTYwNCwxMCArNTcwNSwxNCBAQAogCQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTI3eF9kbWljX25pZHM7CiAJCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MjdYX05VTV9ETUlDUzsKIAotCQlzcGVjLT5pbml0ID0gZDk2NV9jb3JlX2luaXQ7CisJCXNwZWMtPmluaXQgPSBkZWxsXzNzdF9jb3JlX2luaXQ7CiAJCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5Mjd4X2RtdXhfbmlkczsKIAkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfZG11eF9uaWRzKTsKIAkJYnJlYWs7CisJY2FzZSBTVEFDXzkyN1hfVk9MS05PQjoKKwkJc3BlYy0+bnVtX2RtaWNzID0gMDsKKwkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X3ZvbGtub2JfY29yZV9pbml0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyN3hfY29yZV9pbml0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwppbmRleCAzNzU2NDMwLi42ZGEyMWEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwpAQCAtNTIsMTEgKzUyLDEzIEBACiAKIAkvKiBvbmx5IHVzZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciBub3cgKi8KIAotCWljZS0+bnVtX3RvdGFsX2RhY3MgPSAyOwkvKiBvbmx5IFBTRE9VVDAgaXMgY29ubmVjdGVkICovCisJLyogVlQxNjE2IDZjaCBjb2RlYyBjb25uZWN0ZWQgdG8gUFNET1VUMCB1c2luZyBwYWNrZWQgbW9kZSAqLworCWljZS0+bnVtX3RvdGFsX2RhY3MgPSA2OwogCWljZS0+bnVtX3RvdGFsX2FkY3MgPSAyOwogCi0JLyogQ2hhaW50ZWNoIEFWLTcxMCBoYXMgYW5vdGhlciBjb2RlY3MsIHdoaWNoIG5lZWQgaW5pdGlhbGl6YXRpb24gKi8KLQkvKiBpbml0aWFsaXplIFdNODcyOCBjb2RlYyAqLworCS8qIENoYWludGVjaCBBVi03MTAgaGFzIGFub3RoZXIgV004NzI4IGNvZGVjIGNvbm5lY3RlZCB0byBQU0RPVVQ0CisJICAgKHNoYXJlZCB3aXRoIHRoZSBTUERJRiBvdXRwdXQpLiBNaXhlciBjb250cm9sIGZvciB0aGlzIGNvZGVjCisJICAgaXMgbm90IHlldCBzdXBwb3J0ZWQuICovCiAJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX0FWNzEwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtX2luaXRzKTsgaSArPSAyKQogCQkJd21fcHV0KGljZSwgd21faW5pdHNbaV0sIHdtX2luaXRzW2krMV0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IGNlY2YxZmYuLmQ3NDAzM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTIyNTksNyArMjI1OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0gewotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fcGVha19pbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCmluZGV4IDlkYTJkYWU2NC4uZDA2MzE0OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaApAQCAtMzgyLDggKzM4Miw4IEBACiAjaWZkZWYgQ09ORklHX1BNCiAJaW50ICgqcG1fc3VzcGVuZCkoc3RydWN0IHNuZF9pY2UxNzEyICopOwogCWludCAoKnBtX3Jlc3VtZSkoc3RydWN0IHNuZF9pY2UxNzEyICopOwotCWludCBwbV9zdXNwZW5kX2VuYWJsZWQ6MTsKLQlpbnQgcG1fc2F2ZWRfaXNfc3BkaWZfbWFzdGVyOjE7CisJdW5zaWduZWQgaW50IHBtX3N1c3BlbmRfZW5hYmxlZDoxOworCXVuc2lnbmVkIGludCBwbV9zYXZlZF9pc19zcGRpZl9tYXN0ZXI6MTsKIAl1bnNpZ25lZCBpbnQgcG1fc2F2ZWRfc3BkaWZfY3RybDsKIAl1bnNpZ25lZCBjaGFyIHBtX3NhdmVkX3NwZGlmX2NmZzsKIAl1bnNpZ25lZCBpbnQgcG1fc2F2ZWRfcm91dGU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYWY2ZTAwMS4uMTBmYzkyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJICAgIChpbmIoSUNFTVQxNzI0KGljZSwgRE1BX1BBVVNFKSkgJiBETUFfUEFVU0VTKSkgewogCQkvKiBydW5uaW5nPyB3ZSBjYW5ub3QgY2hhbmdlIHRoZSByYXRlIG5vdy4uLiAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2UtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiAoKHJhdGUgPT0gaWNlLT5jdXJfcmF0ZSkgJiYgIWZvcmNlKSA/IDAgOiAtRUJVU1k7CiAJfQogCWlmICghZm9yY2UgJiYgaXNfcHJvX3JhdGVfbG9ja2VkKGljZSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoaWNlLT5wY2kpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgMjU2KjEwMjQsIDI1NioxMDI0KTsKIAogCWljZS0+cGNtID0gcGNtOwogCkBAIC0xNDA4LDcgKzE0MDgsNyBAQAogCiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShpY2UtPnBjaSksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworCQkJCQkgICAgICAyNTYqMTAyNCwgMjU2KjEwMjQpOwogCiAJaWNlLT5wY21fZHMgPSBwY207CiAKQEAgLTIxMTAsNyArMjExMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X21peGVyX3Byb19wZWFrIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAogCS5uYW1lID0gIk11bHRpIFRyYWNrIFBlYWsiLAogCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSwKIAkuaW5mbyA9IHNuZF92dDE3MjRfcHJvX3BlYWtfaW5mbywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMKaW5kZXggYzc1NTE1Zi4uNmE5ZmVlMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMKQEAgLTExMDAsNyArMTEwMCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHByb2RpZ3lfaGQyX3Jlc3VtZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3N0YXRpYyBpbnQgcHJvZGlneV9oZDJfcmVzdW1lKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCS8qIGluaXRpYWxpemUgYWs0Mzk2IGNvZGVjIGFuZCByZXN0b3JlIHByZXZpb3VzIG1peGVyIHZvbHVtZXMgKi8KIAlzdHJ1Y3QgcHJvZGlneV9oaWZpX3NwZWMgKnNwZWMgPSBpY2UtPnNwZWM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDE3MWFkYTUuLmFhYzIwZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0xOTUwLDEwICsxOTUwLDI4IEBACiAJfSwKIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxNDQsCisJCS5uYW1lID0gIlNvbnkiLAorCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDRkLAogCQkuc3ViZGV2aWNlID0gMHg4MTk3LAogCQkubmFtZSA9ICJTb255IFMxWFAiLAogCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAogCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDRkLAorCQkuc3ViZGV2aWNlID0gMHg4MWMwLAorCQkubmFtZSA9ICJTb255IFZBSU8gVkdOLVQzNTBQIiwgLypBRDE5ODFCKi8KKwkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKKwl9LAorCXsKKwkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKKwkJLnN1YmRldmljZSA9IDB4ODFjNSwKKwkJLm5hbWUgPSAiU29ueSBWQUlPIFZHTi1CMVZQIiwgLypBRDE5ODFCKi8KKwkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKKwl9LAogIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwNDMsCiAJCS5zdWJkZXZpY2UgPSAweDgwZjMsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCBhY2ZhNDc2Li44YTMzMmQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTM4Niw2ICszODYsNyBAQAogCiAJc3RydWN0IHNuZF9wY20gKnBjbXNbMl07CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpkeHNfY29udHJvbHNbNF07CiAKIAlzdHJ1Y3Qgc25kX2FjOTdfYnVzICphYzk3X2J1czsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CkBAIC0xMjE2LDkgKzEyMTcsOSBAQAogCiAKIC8qCi0gKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE2ODYgYW5kIHZpYTgyM3ggRFNYCisgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE2ODYKICAqLwotc3RhdGljIGludCBzbmRfdmlhODJ4eF9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfdmlhNjg2X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHZpYWRldiAqdmlhZGV2ID0gJmNoaXAtPmRldnNbY2hpcC0+cGxheWJhY2tfZGV2bm8gKyBzdWJzdHJlYW0tPm51bWJlcl07CkBAIC0xMjMwLDYgKzEyMzEsMzIgQEAKIH0KIAogLyoKKyAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTgyM3ggRFhTCisgKi8KK3N0YXRpYyBpbnQgc25kX3ZpYTgyMzNfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgdmlhZGV2ICp2aWFkZXY7CisJdW5zaWduZWQgaW50IHN0cmVhbTsKKwlpbnQgZXJyOworCisJdmlhZGV2ID0gJmNoaXAtPmRldnNbY2hpcC0+cGxheWJhY2tfZGV2bm8gKyBzdWJzdHJlYW0tPm51bWJlcl07CisJaWYgKChlcnIgPSBzbmRfdmlhODJ4eF9wY21fb3BlbihjaGlwLCB2aWFkZXYsIHN1YnN0cmVhbSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdHJlYW0gPSB2aWFkZXYtPnJlZ19vZmZzZXQgLyAweDEwOworCWlmIChjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXSkgeworCQljaGlwLT5wbGF5YmFja192b2x1bWVbc3RyZWFtXVswXSA9IDA7CisJCWNoaXAtPnBsYXliYWNrX3ZvbHVtZVtzdHJlYW1dWzFdID0gMDsKKwkJY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPnZkWzBdLmFjY2VzcyAmPQorCQkJflNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKKwkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUgfAorCQkJICAgICAgIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sCisJCQkgICAgICAgJmNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT5pZCk7CisJfQorCXJldHVybiAwOworfQorCisvKgogICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhODIzeCBtdWx0aS1jaGFubmVsCiAgKi8KIHN0YXRpYyBpbnQgc25kX3ZpYTgyMzNfbXVsdGlfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTEzMDIsMTAgKzEzMjksMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzbmRfdmlhODIzM19wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgdmlhZGV2ICp2aWFkZXYgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtOworCisJc3RyZWFtID0gdmlhZGV2LT5yZWdfb2Zmc2V0IC8gMHgxMDsKKwlpZiAoY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0pIHsKKwkJY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPnZkWzBdLmFjY2VzcyB8PQorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLAorCQkJICAgICAgICZjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+aWQpOworCX0KKwlyZXR1cm4gc25kX3ZpYTgyeHhfcGNtX2Nsb3NlKHN1YnN0cmVhbSk7Cit9CisKIAogLyogdmlhNjg2IHBsYXliYWNrIGNhbGxiYWNrcyAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfdmlhNjg2X3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQlzbmRfdmlhODJ4eF9wbGF5YmFja19vcGVuLAorCS5vcGVuID0JCXNuZF92aWE2ODZfcGxheWJhY2tfb3BlbiwKIAkuY2xvc2UgPQlzbmRfdmlhODJ4eF9wY21fY2xvc2UsCiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF92aWE4Mnh4X2h3X3BhcmFtcywKQEAgLTEzMzEsOCArMTM3NCw4IEBACiAKIC8qIHZpYTgyM3ggRFNYIHBsYXliYWNrIGNhbGxiYWNrcyAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfdmlhODIzM19wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4gPQkJc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbiwKLQkuY2xvc2UgPQlzbmRfdmlhODJ4eF9wY21fY2xvc2UsCisJLm9wZW4gPQkJc25kX3ZpYTgyMzNfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPQlzbmRfdmlhODIzM19wbGF5YmFja19jbG9zZSwKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX3ZpYTgyeHhfaHdfcGFyYW1zLAogCS5od19mcmVlID0Jc25kX3ZpYTgyeHhfaHdfZnJlZSwKQEAgLTE2MjYsNyArMTY2OSw3IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JdW5zaWduZWQgaW50IGlkeCA9IHNuZF9jdGxfZ2V0X2lvZmYoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOworCXVuc2lnbmVkIGludCBpZHggPSBrY29udHJvbC0+aWQuc3ViZGV2aWNlOwogCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBWSUFfRFhTX01BWF9WT0xVTUUgLSBjaGlwLT5wbGF5YmFja192b2x1bWVbaWR4XVswXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IFZJQV9EWFNfTUFYX1ZPTFVNRSAtIGNoaXAtPnBsYXliYWNrX3ZvbHVtZVtpZHhdWzFdOwpAQCAtMTY0Niw3ICsxNjg5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQl1bnNpZ25lZCBpbnQgaWR4ID0gc25kX2N0bF9nZXRfaW9mZihrY29udHJvbCwgJnVjb250cm9sLT5pZCk7CisJdW5zaWduZWQgaW50IGlkeCA9IGtjb250cm9sLT5pZC5zdWJkZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gY2hpcC0+cG9ydCArIDB4MTAgKiBpZHg7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAJaW50IGksIGNoYW5nZSA9IDA7CkBAIC0xNzA1LDExICsxNzQ4LDEzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSAiVklBIERYUyBQbGF5YmFjayBWb2x1bWUiLAotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCS5hY2Nlc3MgPSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8Ci0JCSAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCksCi0JLmNvdW50ID0gNCwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJLmRldmljZSA9IDAsCisJLyogLnN1YmRldmljZSBzZXQgbGF0ZXIgKi8KKwkubmFtZSA9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUsCiAJLmluZm8gPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX2luZm8sCiAJLmdldCA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfZ2V0LAogCS5wdXQgPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX3B1dCwKQEAgLTE5MzYsMTAgKzE5ODEsMTkgQEAKIAkJfQogCQllbHNlIC8qIFVzaW5nIERYUyB3aGVuIFBDTSBlbXVsYXRpb24gaXMgZW5hYmxlZCBpcyByZWFsbHkgd2VpcmQgKi8KIAkJewotCQkJLyogU3RhbmRhbG9uZSBEWFMgY29udHJvbHMgKi8KLQkJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9jb250cm9sLCBjaGlwKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisKKwkJCQlrY3RsID0gc25kX2N0bF9uZXcxKAorCQkJCQkmc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9jb250cm9sLCBjaGlwKTsKKwkJCQlpZiAoIWtjdGwpCisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCWtjdGwtPmlkLnN1YmRldmljZSA9IGk7CisJCQkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwga2N0bCk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQkJY2hpcC0+ZHhzX2NvbnRyb2xzW2ldID0ga2N0bDsKKwkJCX0KIAkJfQogCX0KIAkvKiBzZWxlY3Qgc3BkaWYgZGF0YSBzbG90IDEwLzExICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA3ZGVhNzRiLi42NGI4NTk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTIxNywyMCArMjE3LDI1IEBACiAgKiBjb25maWd1cmF0aW9uIGNhbGxiYWNrCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHBkYWNmX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZiA9IGxpbmstPnByaXY7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJwZGFjZl9jb25maWcgY2FsbGVkXG4iKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg1OwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJaWYgKHNuZF9wZGFjZl9hc3NpZ25fcmVzb3VyY2VzKHBkYWNmLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKQEAgLTIzOCw4ICsyNDMsNiBAQAogCWxpbmstPmRldl9ub2RlID0gJnBkYWNmLT5ub2RlOwogCXJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggNzQ0NWNjOC4uMTQ5Mjc0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTIxMywxNCArMjEzLDExIEBACiAgKiBjb25maWd1cmF0aW9uIGNhbGxiYWNrCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHZ4cG9ja2V0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAidnhwb2NrZXRfY29uZmlnIGNhbGxlZFxuIik7CiAKQEAgLTIzNSw5ICsyMzIsMTcgQEAKIAkJc3RyY3B5KGNoaXAtPmNhcmQtPmRyaXZlciwgdnhwNDQwX2h3Lm5hbWUpOwogCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCWNoaXAtPmRldiA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKQEAgLTI0OCw4ICsyNTMsNiBAQAogCWxpbmstPmRldl9ub2RlID0gJnZ4cC0+bm9kZTsKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvS2NvbmZpZyBiL3NvdW5kL3BwYy9LY29uZmlnCmluZGV4IGJkMjMzOGEuLjA1MTljNjBmIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIAogbWVudWNvbmZpZyBTTkRfUFBDCiAJYm9vbCAiUG93ZXJQQyBzb3VuZCBkZXZpY2VzIgotCWRlcGVuZHMgb24gUFBDNjQgfHwgUFBDMzIKKwlkZXBlbmRzIG9uIFBQQwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNvdW5kIGRldmljZXMgc3BlY2lmaWMgdG8gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2tleXdlc3QuYyBiL3NvdW5kL3BwYy9rZXl3ZXN0LmMKaW5kZXggODM1ZmExOS4uZDA2Zjc4MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2tleXdlc3QuYworKysgYi9zb3VuZC9wcGMva2V5d2VzdC5jCkBAIC01OSw2ICs1OSwxOCBAQAogCXN0cmxjcHkoaW5mby50eXBlLCAia2V5d2VzdCIsIEkyQ19OQU1FX1NJWkUpOwogCWluZm8uYWRkciA9IGtleXdlc3RfY3R4LT5hZGRyOwogCWtleXdlc3RfY3R4LT5jbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaWYgKCFrZXl3ZXN0X2N0eC0+Y2xpZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIFdlIGtub3cgdGhlIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZCwgc28gdGhlIGRldmljZSBzaG91bGQgYmUKKwkgKiBhbHJlYWR5IGJvdW5kLiBJZiBub3QgaXQgbWVhbnMgYmluZGluZyBmYWlsZWQsIGFuZCB0aGVuIHRoZXJlCisJICogaXMgbm8gcG9pbnQgaW4ga2VlcGluZyB0aGUgZGV2aWNlIGluc3RhbnRpYXRlZC4KKwkgKi8KKwlpZiAoIWtleXdlc3RfY3R4LT5jbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2Uoa2V5d2VzdF9jdHgtPmNsaWVudCk7CisJCWtleXdlc3RfY3R4LT5jbGllbnQgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpAQCAtODYsNyArOTgsNyBAQAogCXsgfQogfTsKIAotc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiUE1hYyBLZXl3ZXN0IEF1ZGlvIiwKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvc2gvYWljYS5jIGIvc291bmQvc2gvYWljYS5jCmluZGV4IDU4M2EzNjkuLmEwZGY0MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NoL2FpY2EuYworKysgYi9zb3VuZC9zaC9haWNhLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJlYW1jYXN0IEFJQ0Egc291bmQgKHBjbSkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tZYW1haGEvU0VHQSwgQUlDQX19Iik7CitNT0RVTEVfRklSTVdBUkUoImFpY2FfZmlybXdhcmUuYmluIik7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIENBUkRfTkFNRSAiQUlDQSIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKaW5kZXggYWM5MjdmZi4uOTdmMWEyNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKKysrIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKQEAgLTcsMTUgKzcsNiBAQAogCSAgbW9kZSAoc3VwcG9ydHMgc2luZ2xlIHN0ZXJlbyBJbi9PdXQpLgogCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgogCi1jb25maWcgU05EX0JGNVhYX1RETQotCXRyaXN0YXRlICJTb0MgSTJTKFRETSBtb2RlKSBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgotCWRlcGVuZHMgb24gKEJMQUNLRklOICYmIFNORF9TT0MpCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCi0JICB0aGUgQmxhY2tmaW4gU1BPUlQgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cykgaW50ZXJmYWNlIGluIFRETQotCSAgbW9kZS4KLQkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KLQogY29uZmlnIFNORF9CRjVYWF9TT0NfU1NNMjYwMgogCXRyaXN0YXRlICJTb0MgU1NNMjYwMiBBdWRpbyBzdXBwb3J0IGZvciBCRjUyeCBlemtpdCIKIAlkZXBlbmRzIG9uIFNORF9CRjVYWF9JMlMKQEAgLTQxLDYgKzMyLDMxIEBACiAJICBFbnRlciB0aGUgR1BJTyB1c2VkIHRvIGNvbnRyb2wgQUQ3MzMxMSdzIFNFIHBpbi4gQWNjZXB0YWJsZQogCSAgdmFsdWVzIGFyZSAwIHRvIDcKIAorY29uZmlnIFNORF9CRjVYWF9URE0KKwl0cmlzdGF0ZSAiU29DIEkyUyhURE0gbW9kZSkgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKKwlkZXBlbmRzIG9uIChCTEFDS0ZJTiAmJiBTTkRfU09DKQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bworCSAgdGhlIEJsYWNrZmluIFNQT1JUIChzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMpIGludGVyZmFjZSBpbiBURE0KKwkgIG1vZGUuCisJICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCisKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTgzNgorCXRyaXN0YXRlICJTb0MgQUQxODM2IEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQorCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQorCXNlbGVjdCBTTkRfU09DX0FEMTgzNgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCisKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTkzOAorCXRyaXN0YXRlICJTb0MgQUQxOTM4IEF1ZGlvIHN1cHBvcnQgZm9yIEJsYWNrZmluIgorCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQorCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQorCXNlbGVjdCBTTkRfU09DX0FEMTkzOAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBRDE5MzggY29kZWMgb24gQmxhY2tmaW4uCisKIGNvbmZpZyBTTkRfQkY1WFhfQUM5NwogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgogCWRlcGVuZHMgb24gQkxBQ0tGSU4KQEAgLTcxLDYgKzg3LDMwIEBACiAJICBTYXkgeSBpZiB5b3Ugd2FudCBBQzk3IGRyaXZlciB0byBzdXBwb3J0IHVwIHRvIDUuMSBjaGFubmVsIGF1ZGlvLgogCSAgdGhpcyBtb2RlIHdpbGwgY29uc3VtZSBtdWNoIG1vcmUgbWVtb3J5IGZvciBETUEuCiAKK2NvbmZpZyBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCisJYm9vbCAiQk9BUkQgaGFzIENPTEQgUmVzZXQgR1BJTyIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3CisJZGVmYXVsdCB5IGlmIEJGSU41NDhfRVpLSVQKKwlkZWZhdWx0IG4gaWYgIUJGSU41NDhfRVpLSVQKKworY29uZmlnIFNORF9CRjVYWF9SRVNFVF9HUElPX05VTQorCWludCAiU2V0IGEgR1BJTyBmb3IgY29sZCByZXNldCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKKwlyYW5nZSAwIDE1OQorCWRlZmF1bHQgMTkgaWYgQkZJTjU0OF9FWktJVAorCWRlZmF1bHQgNSBpZiBCRklONTM3X1NUQU1QCisJZGVmYXVsdCAwCisJaGVscAorCSAgU2V0IHRoZSBjb3JyZWN0IEdQSU8gZm9yIFJFU0VUIHRoZSBzb3VuZCBjaGlwLgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE5ODAKKwl0cmlzdGF0ZSAiU29DIEFEMTk4MC8xIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19BQzk3CisJc2VsZWN0IFNORF9TT0NfQUQxOTgwCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KKwogY29uZmlnIFNORF9CRjVYWF9TT0NfU1BPUlQKIAl0cmlzdGF0ZQogCkBAIC04OCwzMCArMTI4LDYgQEAKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfQkY1WFhfU09DX1NQT1JUCiAKLWNvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTgzNgotCXRyaXN0YXRlICJTb0MgQUQxODM2IEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQotCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQotCXNlbGVjdCBTTkRfU09DX0FEMTgzNgotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCi0KLWNvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTk4MAotCXRyaXN0YXRlICJTb0MgQUQxOTgwLzEgQXVkaW8gc3VwcG9ydCBmb3IgQkY1eHgiCi0JZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NwotCXNlbGVjdCBTTkRfQkY1WFhfU09DX0FDOTcKLQlzZWxlY3QgU05EX1NPQ19BRDE5ODAKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgotCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE5MzgKLSAgICAgICAgdHJpc3RhdGUgIlNvQyBBRDE5MzggQXVkaW8gc3VwcG9ydCBmb3IgQmxhY2tmaW4iCi0gICAgICAgIGRlcGVuZHMgb24gU05EX0JGNVhYX1RETQotICAgICAgICBzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KLSAgICAgICAgc2VsZWN0IFNORF9TT0NfQUQxOTM4Ci0gICAgICAgIGhlbHAKLSAgICAgICAgICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQUQxOTM4IGNvZGVjIG9uIEJsYWNrZmluLgotCiBjb25maWcgU05EX0JGNVhYX1NQT1JUX05VTQogCWludCAiU2V0IGEgU1BPUlQgZm9yIFNvdW5kIGNoaXAiCiAJZGVwZW5kcyBvbiAoU05EX0JGNVhYX0kyUyB8fCBTTkRfQkY1WFhfQUM5NyB8fCBTTkRfQkY1WFhfVERNKQpAQCAtMTIwLDE5ICsxMzYsMyBAQAogCWRlZmF1bHQgMAogCWhlbHAKIAkgIFNldCB0aGUgY29ycmVjdCBTUE9SVCBmb3Igc291bmQgY2hpcC4KLQotY29uZmlnIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKLQlib29sICJCT0FSRCBoYXMgQ09MRCBSZXNldCBHUElPIgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKLQlkZWZhdWx0IHkgaWYgQkZJTjU0OF9FWktJVAotCWRlZmF1bHQgbiBpZiAhQkZJTjU0OF9FWktJVAotCi1jb25maWcgU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNCi0JaW50ICJTZXQgYSBHUElPIGZvciBjb2xkIHJlc2V0IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAotCXJhbmdlIDAgMTU5Ci0JZGVmYXVsdCAxOSBpZiBCRklONTQ4X0VaS0lUCi0JZGVmYXVsdCA1IGlmIEJGSU41MzdfU1RBTVAKLQlkZWZhdWx0IDAKLQloZWxwCi0JICBTZXQgdGhlIGNvcnJlY3QgR1BJTyBmb3IgUkVTRVQgdGhlIHNvdW5kIGNoaXAuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKaW5kZXggMWU5ZDE2MS4uMDg0YjY4OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwpAQCAtNzcsMTIgKzc3LDEyIEBACiAgKiBURlMuIFdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkIGFuZCBFTUFDIHRoZW4gdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuCiAgKiB0aGUgUEhZIGludGVycnVwdCBsaW5lIGFuZCBURlMuICBDdXJyZW50IHNldHRpbmdzIHByZXZlbnQgdGhlIGNvbmZsaWN0CiAgKiBieSBpZ25vcmluZyB0aGUgVEZTIHBpbiB3aGVuIFBvcnQgRyBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgYm90aAotICogc3NtMjYwMiB1c2luZyBQb3J0IEcgYW5kIEVNQUMgY29uY3VycmVudGx5LgorICogY29kZWNzIGFuZCBFTUFDIHVzaW5nIFBvcnQgRyBjb25jdXJyZW50bHkuCiAgKi8KLSNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRGCi0jZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKLSNlbHNlCisjaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwogI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQorI2Vsc2UKKyNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQogI2VuZGlmCiAKIHN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwppbmRleCAzMDk2YmFkLi5mZjU0NmU5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCkBAIC03OCwxMiArNzgsMTIgQEAKICAqIFRGUy4gV2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQgYW5kIEVNQUMgdGhlbiB0aGVyZSBpcyBhIGNvbmZsaWN0IGJldHdlZW4KICAqIHRoZSBQSFkgaW50ZXJydXB0IGxpbmUgYW5kIFRGUy4gIEN1cnJlbnQgc2V0dGluZ3MgcHJldmVudCB0aGUgY29uZmxpY3QKICAqIGJ5IGlnbm9yaW5nIHRoZSBURlMgcGluIHdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkLiBUaGlzIGFsbG93cyBib3RoCi0gKiBzc20yNjAyIHVzaW5nIFBvcnQgRyBhbmQgRU1BQyBjb25jdXJyZW50bHkuCisgKiBjb2RlY3MgYW5kIEVNQUMgdXNpbmcgUG9ydCBHIGNvbmN1cnJlbnRseS4KICAqLwotI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEYKLSNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQotI2Vsc2UKKyNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRHCiAjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKDApCisjZWxzZQorI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCiAjZW5kaWYKIAogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsge1BfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IDBiOGRjYjUuLjZiMjRkOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogI2RlZmluZSBVUFBFUl9HUk9VUCAoKDE8PDgpIHwgKDE8PDkpIHwgKDE8PDEwKSB8ICgxPDwxMSkgICAgICAgIHwgKDE8PDE1KSkKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzcl92YWxpZF9tYXNrW10gPSB7CiAJTE9XRVJfR1JPVVB8VVBQRVJfR1JPVVAsCS8qIE5vcm1hbCwgYm9zciAtIDAqLwotCUxPV0VSX0dST1VQfFVQUEVSX0dST1VQLAkvKiBOb3JtYWwsIGJvc3IgLSAxKi8KIAlMT1dFUl9HUk9VUCwJCQkvKiBVc2IsIGJvc3IgLSAwKi8KKwlMT1dFUl9HUk9VUHxVUFBFUl9HUk9VUCwJLyogTm9ybWFsLCBib3NyIC0gMSovCiAJVVBQRVJfR1JPVVAsCQkJLyogVXNiLCBib3NyIC0gMSovCiB9OwogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IDNmZjAzNzMuLjU5M2Q1YjljIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTU3OSw3ICs1NzksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX0wsIDksIDcsIDAsIG91dF9taXhfdGx2KSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQSBDYXB0dXJlIFN3aXRjaCIsCi0JCQlXTTgzNTBfTEVGVF9JTlBVVF9WT0xVTUUsIDE0LCAxLCAwKSwKKwkJCVdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogUmlnaHQgSW5wdXQgTWl4ZXIgKi8KQEAgLTU4OSw3ICs1ODksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX1IsIDEzLCA3LCAwLCBvdXRfbWl4X3RsdiksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLAotCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDApLAorCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogTGVmdCBNaWMgTWl4ZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCmluZGV4IGRhOTdhYWUuLjFlZjI0NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NDAtPnJlZ19jYWNoZTsKIAogCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDEyYTZjNTQuLjRhZTcwNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtOTcsMjIgKzk3LDE5IEBACiAJREFWSU5DSV9NQ0JTUF9XT1JEXzMyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGRhdmluY2lfaTJzX3BjbV9vdXQgPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBkYXZpbmNpX2kyc19wY21faW4gPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gaW4iLAotfTsKLQogc3RydWN0IGRhdmluY2lfbWNic3BfZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKICNkZWZpbmUgTU9EX0RTUF9BCTAKICNkZWZpbmUgTU9EX0RTUF9CCTEKIAlpbnQJCQkJbW9kZTsKIAl1MzIJCQkJcGNyOwogCXN0cnVjdCBjbGsJCQkqY2xrOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zCSpkbWFfcGFyYW1zWzJdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LApAQCAtMjE1LDE0ICsyMTIsNiBAQAogCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQljcHVfZGFpLT5kbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgREVGQVVMVF9CSVRQRVJTQU1QTEUJMTYKIAogc3RhdGljIGludCBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCkBAIC0zNTMsOCArMzQyLDkgQEAKIAkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gZGFpLT5kbWFfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KKwkJCQkJJmRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9pbnRlcnZhbCAqaSA9IE5VTEw7CiAJaW50IG1jYnNwX3dvcmRfbGVuZ3RoOwogCXVuc2lnbmVkIGludCByY3IsIHhjciwgc3JncjsKQEAgLTQ3Miw3ICs0NjIsNiBAQAogI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBkYXZpbmNpX2kyc19zaHV0ZG93biwKIAkucHJlcGFyZQk9IGRhdmluY2lfaTJzX3ByZXBhcmUsCiAJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLApAQCAtNTM0LDEyICs1MjMsMTAgQEAKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCi0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gJmRhdmluY2lfaTJzX3BjbV9vdXQ7Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5kbWFfYWRkciA9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EWFJfUkVHKTsKIAotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gJmRhdmluY2lfaTJzX3BjbV9pbjsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS0+ZG1hX2FkZHIgPQorCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EUlJfUkVHKTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCkBAIC01NDksNyArNTM2LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC01NTcsNyArNTQ0LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCiAJZGF2aW5jaV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGRldjsKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCA3YTA2YzBhLi41ZDFmOThhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC0zMzIsMTQgKzMzMiw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiR0JMQ1RMIHdyaXRlIGVycm9yXG4iKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCi17Ci0Jc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0JY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKIHsKIAltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEhDTEtSU1QpOwpAQCAtMzg2LDE3ICszNzgsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKIHsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChkZXYtPnR4bnVtZXZ0KQkvKiBlbmFibGUgRklGTyAqLworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdGFydF90eChkZXYpOwotCWVsc2UKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5yeG51bWV2dCkJLyogZW5hYmxlIEZJRk8gKi8KKwkJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RhcnRfcngoZGV2KTsKLQotCS8qIGVuYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBtY2FzcF9zdG9wX3J4KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQpAQCAtNDEzLDE3ICs0MDUsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQogewotCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKGRldi0+dHhudW1ldnQpCS8qIGRpc2FibGUgRklGTyAqLworCQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdG9wX3R4KGRldik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChkZXYtPnJ4bnVtZXZ0KQkvKiBkaXNhYmxlIEZJRk8gKi8KKwkJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RvcF9yeChkZXYpOwotCi0JLyogZGlzYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgaW50IGRhdmluY2lfbWNhc3Bfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLApAQCAtNzIwLDcgKzcxMiw3IEBACiB7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPQotCQkJCQlkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOworCQkJCQkmZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlpbnQgd29yZF9sZW5ndGg7CiAJdTggbnVtZXZ0OwogCkBAIC03OTgsNyArNzkwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9tY2FzcF9kYWlfb3BzID0gewotCS5zdGFydHVwIAk9IGRhdmluY2lfbWNhc3Bfc3RhcnR1cCwKIAkudHJpZ2dlcgk9IGRhdmluY2lfbWNhc3BfdHJpZ2dlciwKIAkuaHdfcGFyYW1zCT0gZGF2aW5jaV9tY2FzcF9od19wYXJhbXMsCiAJLnNldF9mbXQJPSBkYXZpbmNpX21jYXNwX3NldF9kYWlfZm10LApAQCAtODQ5LDIwICs4NDAsMTIgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYSwgKnJlczsKIAlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2OwotCWludCBjb3VudCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuCS1FTk9NRU07CiAKLQlkbWFfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zKSAqIDIsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghZG1hX2RhdGEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9kZXY7Ci0JfQotCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKQEAgLTg5NywxMSArODgwLDEwIEBACiAJZGV2LT50eG51bWV2dCA9IHBkYXRhLT50eG51bWV2dDsKIAlkZXYtPnJ4bnVtZXZ0ID0gcGRhdGEtPnJ4bnVtZXZ0OwogCi0JZG1hX2RhdGFbY291bnRdLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IjsKLQlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKLQlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CisJZG1hX2RhdGEtPmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87CisJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpIChwZGF0YS0+dHhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAkvKiBmaXJzdCBUWCwgdGhlbiBSWCAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CkBAIC05MTAsMTMgKzg5MiwxMiBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkbWFfZGF0YVtjb3VudF0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0JY291bnQrKzsKLQlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiI7Ci0JZG1hX2RhdGFbY291bnRdLmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87Ci0JZG1hX2RhdGFbY291bnRdLmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKKwlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKwogCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC05MjQsNyArOTA1LDcgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JZG1hX2RhdGFbY291bnRdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRtYV9kYXRhLT5jaGFubmVsID0gcmVzLT5zdGFydDsKIAlkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhID0gZGV2OwogCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5kZXYgPSAmcGRldi0+ZGV2OwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0pOwpAQCAtOTM2LDggKzkxNyw2IEBACiBlcnJfcmVsZWFzZV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiBlcnJfcmVsZWFzZV9kYXRhOgotCWtmcmVlKGRtYV9kYXRhKTsKLWVycl9yZWxlYXNlX2RldjoKIAlrZnJlZShkZXYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTk0Niw3ICs5MjUsNiBAQAogc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKQEAgLTk1OSw4ICs5MzcsNiBAQAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiAKLQlkbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKLQlrZnJlZShkbWFfZGF0YSk7CiAJa2ZyZWUoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU1NDM1NGMuLjlkMTc5Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTM5LDEwICszOSwxNSBAQAogfTsKIAogc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHNhbXBsZV9yYXRlOwogCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtc1syXTsKIAl1bnNpZ25lZCBpbnQgY29kZWNfZm10OwogCiAJLyogTWNBU1Agc3BlY2lmaWMgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMmY3ZGE0OS4uYzczYTkxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0xMjYsMTYgKzEyNiw5IEBACiBzdGF0aWMgaW50IGRhdmluY2lfcGNtX2RtYV9yZXF1ZXN0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CiAJc3RydWN0IGVkbWFjY19wYXJhbSBwX3JhbTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcnRkLT5wYXJhbXMgPSBkbWFfZGF0YTsKLQogCS8qIFJlcXVlc3QgbWFzdGVyIERNQSBjaGFubmVsICovCiAJcmV0ID0gZWRtYV9hbGxvY19jaGFubmVsKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkgIGRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKQEAgLTI0NCw2ICsyMzcsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKnBhID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gJnBhW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJmRhdmluY2lfcGNtX2hhcmR3YXJlKTsKIAkvKiBlbnN1cmUgdGhhdCBidWZmZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBlcmlvZCBzaXplICovCkBAIC0yNTcsNiArMjU1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+bG9jayk7CisJcHJ0ZC0+cGFyYW1zID0gcGFyYW1zOwogCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKaW5kZXggNjNkOTYyNS4uODc0NjYwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQgY2hhbm5lbDsJCQkvKiBzeW5jIGRtYSBjaGFubmVsIElEICovCiAJdW5zaWduZWQgc2hvcnQgYWNudDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwppbmRleCAzODA2ZmYyLi5jY2RlZmU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpAQCAtMzk3LDE0ICszOTcsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzeW5jICovCi0JaWYgKCEoZm10ICYgU05EX1NPQ19EQUlGTVRfQVNZTkMpKQotCQlzY3IgfD0gU1NJX1NDUl9TWU47Ci0KLQkvKiB0ZG0gLSBvbmx5IGZvciBzdGVyZW8gYXRtICovCi0JaWYgKGZtdCAmIFNORF9TT0NfREFJRk1UX1RETSkKLQkJc2NyIHw9IFNTSV9TQ1JfTkVUOwotCiAJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKIAkJU1NJMV9TVENSID0gc3RjcjsKIAkJU1NJMV9TUkNSID0gc3JjcjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDJkZWU5ODMuLjY1M2EzNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtMjEsNyArMjEsMTggQEAKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfQ1gyMDQ0MgogCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQW1zdHJhZCBEZWx0YS4KKwkgIFNheSBZICBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCAgZm9yIFNvQyBhdWRpbyBkZXZpY2UgIGNvbm5lY3RlZCB0bworCSAgYSBoYW5kc2V0IGFuZCBhIHNwZWFrZXJwaG9uZSBmb3VuZCBvbiBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZS4KKworCSAgTm90ZSB0aGF0IGluIG9yZGVyIHRvIGdldCB0aG9zZSBkZXZpY2VzIGZ1bGx5IHN1cHBvcnRlZCwgIHlvdSBoYXZlIHRvCisJICBidWlsZCAgdGhlIGtlcm5lbCAgd2l0aCAgc3RhbmRhcmQgIHNlcmlhbCBwb3J0ICBkcml2ZXIgIGluY2x1ZGVkICBhbmQKKwkgIGNvbmZpZ3VyZWQgZm9yIGF0IGxlYXN0IDQgcG9ydHMuICBUaGVuLCBmcm9tIHVzZXJzcGFjZSwgeW91IG11c3QgbG9hZAorCSAgYSBsaW5lIGRpc2NpcGxpbmUgIzE5IG9uIHRoZSBtb2RlbSAodHR5UzMpIHNlcmlhbCBsaW5lLiAgVGhlIHNpbXBsZXN0CisJICB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGluc3RhbGwgdXRpbC1saW51eC1uZyAgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKwkgIGxkYXR0YWNoICB1dGlsaXR5LiAgVGhpcyAgY2FuIGJlICBzdGFydGVkICBhdXRvbWF0aWNhbGx5ICBmcm9tICB1ZGV2LAorCSAgYSBzaW1wbGUgcnVsZSBsaWtlIHRoaXMgb25lIHNob3VsZCBkbyB0aGUgdHJpY2sgKGl0IGRvZXMgZm9yIG1lKToKKwkgIAlBQ1RJT049PSJhZGQiLCBLRVJORUw9PSJjb250cm9sQzAiLCBcCisJCQkJUlVOKz0iL3Vzci9zYmluL2xkYXR0YWNoIDE5IC9kZXYvdHR5UzMiCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggNTczNTk0NS4uNmE4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0xOTUsOCArMTk1LDEyIEBACiAJZWxzZQogCQlvbWFwX2VuYWJsZV9kbWFfaXJxKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfRlJBTUVfSVJRKTsKIAotCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOwotCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwlpZiAoIShjcHVfY2xhc3NfaXNfb21hcDEoKSkpIHsKKwkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKaW5kZXggOTExNGMyNi4uMTNhYTM4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCkBAIC0xNDQsNCArMTQ0LDQgQEAKIAogTU9EVUxFX0FVVEhPUigiQW51aiBBZ2dhcndhbCA8YW51ai5hZ2dhcndhbEB0aS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE9NQVAzIEVWTSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IGFkMjE5YWEuLjBjZDA2ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIlBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcGxpZmllciIsIFNORF9TT0NfTk9QTSwKIAkJCSAgIDAsIDAsIE5VTEwsIDAsIG9tYXAzcGFuZG9yYV9ocF9ldmVudCwKIAkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKQEAgLTE4MSw2ICsxODEsNyBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiVklCUkEiKTsKIAogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCA2Mzc1YjRlLi5kY2IzMTgxYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIGNvbmZpZyBTTkRfUFhBMlhYX1NPQ19JTU9URTIKICAgICAgICB0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIElNb3RlIDIiCi0gICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0lOVEVMTU9URTIKKyAgICAgICBkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfSU5URUxNT1RFMiAmJiBJMkMKICAgICAgICBzZWxlY3QgU05EX1BYQTJYWF9TT0NfSTJTCiAgICAgICAgc2VsZWN0IFNORF9TT0NfV004OTQwCiAgICAgICAgaGVscApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKaW5kZXggNWNiYmRjOC4uMWYzNWM2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCkBAIC03NSwxMSArNzUsMTkgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlkbWFfYWRkcl90IHBvcyA9IHBydGQtPmRtYV9wb3M7CisJdW5zaWduZWQgaW50IGxpbWl0OwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCi0Jd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBwcnRkLT5kbWFfbGltaXQpIHsKKwlpZiAoczNjX2RtYV9oYXNfY2lyY3VsYXIoKSkgeworCQlsaW1pdCA9IChwcnRkLT5kbWFfZW5kIC0gcHJ0ZC0+ZG1hX3N0YXJ0KSAvIHBydGQtPmRtYV9wZXJpb2Q7CisJfSBlbHNlCisJCWxpbWl0ID0gcHJ0ZC0+ZG1hX2xpbWl0OworCisJcHJfZGVidWcoIiVzOiBsb2FkZWQgJWQsIGxpbWl0ICVkXG4iLCBfX2Z1bmNfXywgcHJ0ZC0+ZG1hX2xvYWRlZCwgbGltaXQpOworCisJd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBsaW1pdCkgewogCQl1bnNpZ25lZCBsb25nIGxlbiA9IHBydGQtPmRtYV9wZXJpb2Q7CiAKIAkJcHJfZGVidWcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKQEAgLTEyMyw3ICsxMzEsNyBAQAogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwotCWlmIChwcnRkLT5zdGF0ZSAmIFNUX1JVTk5JTkcpIHsKKwlpZiAocHJ0ZC0+c3RhdGUgJiBTVF9SVU5OSU5HICYmICFzM2NfZG1hX2hhc19jaXJjdWxhcigpKSB7CiAJCXBydGQtPmRtYV9sb2FkZWQtLTsKIAkJczNjMjR4eF9wY21fZW5xdWV1ZShzdWJzdHJlYW0pOwogCX0KQEAgLTE2NCw2ICsxNzIsMTEgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisKKwkJLyogdXNlIHRoZSBjaXJjdWxhciBidWZmZXJpbmcgaWYgd2UgaGF2ZSBpdCBhdmFpbGFibGUuICovCisJCWlmIChzM2NfZG1hX2hhc19jaXJjdWxhcigpKQorCQkJczNjMjQxMF9kbWFfc2V0ZmxhZ3MocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLAorCQkJCQkgICAgIFMzQzI0MTBfRE1BRl9DSVJDVUxBUik7CiAJfQogCiAJczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IDNjMDZjNDAuLjEwNWE3N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMjIwLDYgKzIyMCw4IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWNsa19lbmFibGUoaTJzLT5paXNfY2Nsayk7CisKIAlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCBpMnMsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2NsazsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggN2ZmMDRhZC4uMGExYjJmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTgzNCw2ICs4MzQsOSBAQAogI2RlZmluZSBzb2NfcmVzdW1lCU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiBzdGF0aWMgdm9pZCBzbmRfc29jX2luc3RhbnRpYXRlX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29udGFpbmVyX29mKGNhcmQtPmRldiwKQEAgLTg3Nyw2ICs4ODAsMTEgQEAKIAkJCWFjOTcgPSAxOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgeworCQlpZiAoIWNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaS0+b3BzKQorCQkJY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMgPSAmbnVsbF9kYWlfb3BzOworCX0KKwogCS8qIElmIHdlIGhhdmUgQUM5NyBpbiB0aGUgc3lzdGVtIHRoZW4gZG9uJ3Qgd2FpdCBmb3IgdGhlCiAJICogY29kZWMuICBUaGlzIHdpbGwgbmVlZCByZXZpc2l0aW5nIGlmIHdlIGhhdmUgdG8gaGFuZGxlCiAJICogc3lzdGVtcyB3aXRoIG1peGVkIEFDOTcgYW5kIG5vbi1BQzk3IHBhcnRzLiAgT25seSBjaGVjayBmb3IKQEAgLTIzMjksOSArMjMzNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKLX07Ci0KIC8qKgogICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IGY3OTcxMWIuLmQ4OWY2ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAogCQkvKiBjb25uZWN0ZWQgamFjayBvciBzcGsgPyAqLwogCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1faHAgfHwgd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fc3BrIHx8Ci0JCQl3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQkgICAgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgJiYgIWxpc3RfZW1wdHkoJndpZGdldC0+c291cmNlcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC01NzMsNyArNTczLDggQEAKIAkJCXJldHVybiAxOwogCiAJCS8qIGNvbm5lY3RlZCBqYWNrID8gKi8KLQkJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX21pYyB8fCB3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8CisJCSAgICAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSAmJiAhbGlzdF9lbXB0eSgmd2lkZ2V0LT5zaW5rcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMDcxLDkgKzIwNzIsOSBAQAogCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAogCWRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgZXZlbnQpOworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlkdW1wX2RhcG0oY29kZWMsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKaW5kZXggMTIxYWYwNi4uODZiMmMzYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKQEAgLTYyLDEwICs2MiwxNCBAQAogYWN0aXZhdGVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsCiAJICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YikKIHsKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWRldi0+c3ViX3BsYXliYWNrW3N1Yi0+bnVtYmVyXSA9IHN1YjsKIAllbHNlCiAJCWRldi0+c3ViX2NhcHR1cmVbc3ViLT5udW1iZXJdID0gc3ViOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY5LDE2ICsyNzMsMjIgQEAKIHsKIAlpbnQgaW5kZXggPSBzdWItPm51bWJlcjsKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWIpOworCXNuZF9wY21fdWZyYW1lc190IHB0cjsKKworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CiAKIAlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykKLQkJcmV0dXJuIFNORFJWX1BDTV9QT1NfWFJVTjsKKwkJcHRyID0gU05EUlZfUENNX1BPU19YUlVOOwogCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQlwdHIgPSBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAogCQkJCQlkZXYtPmF1ZGlvX291dF9idWZfcG9zW2luZGV4XSk7CiAJZWxzZQotCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKKwkJcHRyID0gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKIAkJCQkJZGV2LT5hdWRpb19pbl9idWZfcG9zW2luZGV4XSk7CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJcmV0dXJuIHB0cjsKIH0KIAogLyogb3BlcmF0b3JzIGZvciBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKaW5kZXggODNlNmMxMy4uYTNmMDJkZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgImlucHV0LmgiCiAKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4yMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sM30sIgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmggYi9zb3VuZC91c2IvdXNiYXVkaW8uaAppbmRleCA4ZTdmNzg5Li5lOWEzYTlkYyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTIxMCw3ICsyMTAsNyBAQAogLyoKICAqLwogCi0jZGVmaW5lIGNvbWJpbmVfd29yZChzKSAgICAoKCpzKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKKyNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKihzKSkgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCiAjZGVmaW5lIGNvbWJpbmVfdHJpcGxlKHMpICAoY29tYmluZV93b3JkKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzJdIDw8IDE2KSkKICNkZWZpbmUgY29tYmluZV9xdWFkKHMpICAgIChjb21iaW5lX3RyaXBsZShzKSB8ICgodW5zaWduZWQgaW50KShzKVszXSA8PCAyNCkpCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggYWI1YTNhYzJhYy4uYzk5ODIyMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTg5OCw2ICs4OTgsMTEgQEAKICAqIGJ1aWxkIGEgZmVhdHVyZSBjb250cm9sCiAgKi8KIAorc3RhdGljIHNpemVfdCBhcHBlbmRfY3RsX25hbWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHJsY2F0KGtjdGwtPmlkLm5hbWUsIHN0ciwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKK30KKwogc3RhdGljIHZvaWQgYnVpbGRfZmVhdHVyZV9jdGwoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGVzYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjdGxfbWFzaywgaW50IGNvbnRyb2wsCiAJCQkgICAgICBzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm0gKml0ZXJtLCBpbnQgdW5pdGlkKQpAQCAtOTc4LDEzICs5ODMsMTMgQEAKIAkJICovCiAJCWlmICghIG1hcHBlZF9uYW1lICYmICEgKHN0YXRlLT5vdGVybS50eXBlID4+IDE2KSkgewogCQkJaWYgKChzdGF0ZS0+b3Rlcm0udHlwZSAmIDB4ZmYwMCkgPT0gMHgwMTAwKSB7Ci0JCQkJbGVuID0gc3RybGNhdChrY3RsLT5pZC5uYW1lLCAiIENhcHR1cmUiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJCWxlbiA9IGFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIENhcHR1cmUiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbGVuID0gc3RybGNhdChrY3RsLT5pZC5uYW1lICsgbGVuLCAiIFBsYXliYWNrIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCQlsZW4gPSBhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBQbGF5YmFjayIpOwogCQkJfQogCQl9Ci0JCXN0cmxjYXQoa2N0bC0+aWQubmFtZSArIGxlbiwgY29udHJvbCA9PSBVU0JfRkVBVFVSRV9NVVRFID8gIiBTd2l0Y2giIDogIiBWb2x1bWUiLAotCQkJc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsIGNvbnRyb2wgPT0gVVNCX0ZFQVRVUkVfTVVURSA/CisJCQkJIiBTd2l0Y2giIDogIiBWb2x1bWUiKTsKIAkJaWYgKGNvbnRyb2wgPT0gVVNCX0ZFQVRVUkVfVk9MVU1FKSB7CiAJCQlrY3RsLT50bHYuYyA9IG1peGVyX3ZvbF90bHY7CiAJCQlrY3RsLT52ZFswXS5hY2Nlc3MgfD0gCkBAIC0xMDY2LDYgKzEwNzEsMTUgQEAKIAljaGFubmVscyA9IChmdHJbMF0gLSA3KSAvIGNzaXplIC0gMTsKIAogCW1hc3Rlcl9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYsIGNzaXplKTsKKwkvKiBtYXN0ZXIgY29uZmlndXJhdGlvbiBxdWlya3MgKi8KKwlzd2l0Y2ggKHN0YXRlLT5jaGlwLT51c2JfaWQpIHsKKwljYXNlIFVTQl9JRCgweDA4YmIsIDB4MjcwMik6CisJCXNuZF9wcmludGsoS0VSTl9JTkZPCisJCQkgICAidXNibWl4ZXI6IG1hc3RlciB2b2x1bWUgcXVpcmsgZm9yIFBDTTI3MDIgY2hpcFxuIik7CisJCS8qIGRpc2FibGUgbm9uLWZ1bmN0aW9uYWwgdm9sdW1lIGNvbnRyb2wgKi8KKwkJbWFzdGVyX2JpdHMgJj0gfigxIDw8IChVU0JfRkVBVFVSRV9WT0xVTUUgLSAxKSk7CisJCWJyZWFrOworCX0KIAlpZiAoY2hhbm5lbHMgPiAwKQogCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSwgY3NpemUpOwogCWVsc2UKQEAgLTExNDMsNyArMTE1Nyw3IEBACiAJCWxlbiA9IGdldF90ZXJtX25hbWUoc3RhdGUsIGl0ZXJtLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSksIDApOwogCWlmICghIGxlbikKIAkJbGVuID0gc3ByaW50ZihrY3RsLT5pZC5uYW1lLCAiTWl4ZXIgU291cmNlICVkIiwgaW5fY2ggKyAxKTsKLQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sICIgVm9sdW1lIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBWb2x1bWUiKTsKIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBNVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkXG4iLAogCQkgICAgY3ZhbC0+aWQsIGtjdGwtPmlkLm5hbWUsIGN2YWwtPmNoYW5uZWxzLCBjdmFsLT5taW4sIGN2YWwtPm1heCk7CkBAIC0xNDAwLDggKzE0MTQsOCBAQAogCQkJaWYgKCEgbGVuKQogCQkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgbmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAkJfQotCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCB2YWxpbmZvLT5zdWZmaXgsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiICIpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgdmFsaW5mby0+c3VmZml4KTsKIAogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIlslZF0gUFUgWyVzXSBjaCA9ICVkLCB2YWwgPSAlZC8lZFxuIiwKIAkJCSAgICBjdmFsLT5pZCwga2N0bC0+aWQubmFtZSwgY3ZhbC0+Y2hhbm5lbHMsIGN2YWwtPm1pbiwgY3ZhbC0+bWF4KTsKQEAgLTE2MTAsOSArMTYyNCw5IEBACiAJCQlzdHJsY3B5KGtjdGwtPmlkLm5hbWUsICJVU0IiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCiAJCWlmICgoc3RhdGUtPm90ZXJtLnR5cGUgJiAweGZmMDApID09IDB4MDEwMCkKLQkJCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiBDYXB0dXJlIFNvdXJjZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBDYXB0dXJlIFNvdXJjZSIpOwogCQllbHNlCi0JCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgUGxheWJhY2sgU291cmNlIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFBsYXliYWNrIFNvdXJjZSIpOwogCX0KIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBTVSBbJXNdIGl0ZW1zID0gJWRcbiIsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggZmQ0NDk0Ni4uOTlmMzM3NiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiJWlcbiIsIGF0b21pY19yZWFkKCZ1czEyMmwtPm1tYXBfY291bnQpKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXNiX3N0cmVhbV9od2RlcF92bV9vcHMgPSB7CiAJLm9wZW4gPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wZW4sCiAJLmZhdWx0ID0gdXNiX3N0cmVhbV9od2RlcF92bV9mYXVsdCwKIAkuY2xvc2UgPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggZjNkOGY3MS4uNTJlMDRiMiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKaW5kZXggMTE3OTQ2Zi4uNGIyMzA0YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCkBAIC02OTcsNyArNjk3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX29wcyA9IHsKIAkub3BlbiA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BlbiwKIAkuY2xvc2UgPSBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX2Nsb3NlLAogCS5mYXVsdCA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fZmF1bHQsCmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggZDY5YTc1OS4uMDg1NGYxMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMTAsNiArMTAsNyBAQAogcGVyZi10b3AKIHBlcmYqLjEKIHBlcmYqLnhtbAorcGVyZiouaHRtbAogY29tbW9uLWNtZHMuaAogdGFncwogVEFHUwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKaW5kZXggMWMyZWQzMC4uYTc5MTAwOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CkBAIC0zMSw2ICszMSw5IEBACiAtdzo6CiAtLXdpZHRoPTo6CiAgICAgICAgIFNlbGVjdCB0aGUgd2lkdGggb2YgdGhlIFNWRyBmaWxlIChkZWZhdWx0OiAxMDAwKQorLXA6OgorLS1wb3dlci1vbmx5OjoKKyAgICAgICAgT25seSBvdXRwdXQgdGhlIENQVSBwb3dlciBzZWN0aW9uIG9mIHRoZSBkaWFncmFtCiAKIAogU0VFIEFMU08KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IGI1ZjE5NTMuLjdlMTkwZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTU3LDExICsxNTcsMTggQEAKIHVuYW1lX1AgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXAgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogdW5hbWVfViA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtdiAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCiAKLSMgSWYgd2UncmUgb24gYSA2NC1iaXQga2VybmVsLCB1c2UgLW02NAotaWZuZGVmIE5PXzY0QklUCi0JaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKLQkgIE02NCA6PSAtbTY0Ci0JZW5kaWYKKyMKKyMgQWRkIC1tMzIgZm9yIGNyb3NzLWJ1aWxkczoKKyMKK2lmZGVmIE5PXzY0QklUCisgIE1CSVRTIDo9IC1tMzIKK2Vsc2UKKyAgIworICAjIElmIHdlJ3JlIG9uIGEgNjQtYml0IGtlcm5lbCwgdXNlIC1tNjQ6CisgICMKKyAgaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKKyAgICBNQklUUyA6PSAtbTY0CisgIGVuZGlmCiBlbmRpZgogCiAjIENGTEFHUyBhbmQgTERGTEFHUyBhcmUgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCkBAIC0xNzAsOCArMTc3LDcgQEAKICMgSW5jbHVkZSBzYW5lciB3YXJuaW5ncyBoZXJlLCB3aGljaCBjYW4gY2F0Y2ggYnVnczoKICMKIAotRVhUUkFfV0FSTklOR1MgOj0gLVdjYXN0LWFsaWduCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdAorRVhUUkFfV0FSTklOR1MgOj0gLVdmb3JtYXQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXNlY3VyaXR5CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC15MmsKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc2hhZG93CkBAIC0xOTQsNyArMjAwLDcgQEAKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RyaWN0LXByb3RvdHlwZXMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CiAKLUNGTEFHUyA9ICQoTTY0KSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCitDRkxBR1MgPSAkKE1CSVRTKSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCiBMREZMQUdTID0gLWxwdGhyZWFkIC1scnQgLWxlbGYgLWxtCiBBTExfQ0ZMQUdTID0gJChDRkxBR1MpCiBBTExfTERGTEFHUyA9ICQoTERGTEFHUykKQEAgLTQxNSw4ICs0MjEsMTIgQEAKIAlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQotCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwpOworaWZlcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwkJQkFTSUNfQ0ZMQUdTICs9IC1ETElCRUxGX05PX01NQVAKKwllbmRpZgorZWxzZQorCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAogaWZkZWYgTk9fREVNQU5HTEUKQEAgLTcyOCw3ICs3MzgsNyBAQAogY29tbW9uLWNtZHMuaDogdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQKIAogY29tbW9uLWNtZHMuaDogJCh3aWxkY2FyZCBEb2N1bWVudGF0aW9uL3BlcmYtKi50eHQpCi0JJChRVUlFVF9HRU4pdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAorCSQoUVVJRVRfR0VOKS4gdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAogCiAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpIDogJSA6ICUuc2gKIAkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGE1YTA1MGEuLmE0YmU0NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQxLDYgKzQxLDcgQEAKIHN0YXRpYyBpbnQJCQlzeXN0ZW1fd2lkZQkJCT0gMDsKIHN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gLTE7CiBzdGF0aWMgaW50CQkJaW5oZXJpdAkJCQk9IDE7CiBzdGF0aWMgaW50CQkJZm9yY2UJCQkJPSAwOwogc3RhdGljIGludAkJCWFwcGVuZF9maWxlCQkJPSAwOwpAQCAtMTg0LDYgKzE4NSw5IEBACiAKIHN0YXRpYyB2b2lkIHNpZ19hdGV4aXQodm9pZCkKIHsKKwlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7CisKIAlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIApAQCAtNDIyLDcgKzQyNiw3IEBACiAJaWYgKGZkW25yX2NwdV1bY291bnRlcl0gPCAwKSB7CiAJCWludCBlcnIgPSBlcnJubzsKIAotCQlpZiAoZXJyID09IEVQRVJNKQorCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCiAJCQlkaWUoIlBlcm1pc3Npb24gZXJyb3IgLSBhcmUgeW91IHJvb3Q/XG4iKTsKIAkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgcHJvZmlsZV9jcHUgIT0gLTEpCiAJCQlkaWUoIk5vIHN1Y2ggZGV2aWNlIC0gZGlkIHlvdSBzcGVjaWZ5IGFuIG91dC1vZi1yYW5nZSBwcm9maWxlIENQVT9cbiIpOwpAQCAtNjEwLDYgKzYxNCw4IEBACiAJCQkJZXhpdCgtMSk7CiAJCQl9CiAJCX0KKworCQljaGlsZF9waWQgPSBwaWQ7CiAJfQogCiAJaWYgKHJlYWx0aW1lX3ByaW8pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggZWE5YzE1Yy4uY2UyZDViZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJaW50IGk7CiAKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAKIAlmcmVlKHN0cik7CiAKLQlzb3J0X2RpbWVuc2lvbl9fYWRkKChjaGFyICopInBpZCIsICZjbXBfcGlkKTsKKwlzb3J0X2RpbWVuc2lvbl9fYWRkKCJwaWQiLCAmY21wX3BpZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMTZhZjJkOC4uM2RiMzFlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC02OSw3ICs2OSw4IEBACiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKIHN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gIDE7CiBzdGF0aWMgaW50CQkJc2NhbGUJCQkJPSAgMTsKLXN0YXRpYyBpbnQJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBpbnQJCQludWxsX3J1bgkJCT0gIDA7CiAKIHN0YXRpYyBpbnQJCQlmZFtNQVhfTlJfQ1BVU11bTUFYX0NPVU5URVJTXTsKQEAgLTI4NSw2ICsyODYsOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKKwljaGlsZF9waWQgPSBwaWQ7CisKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgogCSAqLwpAQCAtMzM4LDE0ICszNDEsMjQgQEAKIAogc3RhdGljIHZvaWQgYWJzX3ByaW50b3V0KGludCBjb3VudGVyLCBkb3VibGUgYXZnKQogeworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisKIAlmcHJpbnRmKHN0ZGVyciwgIiAlMTQuMGYgICUtMjRzIiwgYXZnLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAogCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsCi0JCQkJYXZnIC8gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMpOworCisJCWlmICh0b3RhbCkKKwkJCXJhdGlvID0gYXZnIC8gdG90YWw7CisKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgSVBDICAiLCByYXRpbyk7CiAJfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLAotCQkJCTEwMDAuMCAqIGF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSAxMDAwLjAgKiBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBNL3NlYyIsIHJhdGlvKTsKIAl9CiB9CiAKQEAgLTQyMyw2ICs0MzYsOSBAQAogCiBzdGF0aWMgdm9pZCBzaWdfYXRleGl0KHZvaWQpCiB7CisJaWYgKGNoaWxkX3BpZCAhPSAtMSkKKwkJa2lsbChjaGlsZF9waWQsIFNJR1RFUk0pOworCiAJaWYgKHNpZ25yID09IC0xKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCA0NDA1NjgxLi5lOGE1MTBkOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBzdGF0aWMgdTY0CQlmaXJzdF90aW1lLCBsYXN0X3RpbWU7CiAKK3N0YXRpYyBpbnQJCXBvd2VyX29ubHk7CisKIAogc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOwogCkBAIC01NDcsNyArNTQ5LDcgQEAKIAl1NjQgY3B1OwogCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBudW1jcHVzOyBjcHUrKykgeworCWZvciAoY3B1ID0gMDsgY3B1IDw9IG51bWNwdXM7IGNwdSsrKSB7CiAJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CiAJCWlmICghcHdyKQogCQkJcmV0dXJuOwpAQCAtNzYzLDE5ICs3NjUsNDAgQEAKIAkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgewogCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKIAkJCQkJCQlmcm9tID0gYy0+WTsKLQkJCQkJCQl0YXNrX2Zyb20gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfZnJvbSA9IHN0cmR1cChjLT5jb21tKTsKIAkJCQkJCX0KIAkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlKSB7CiAJCQkJCQkJdG8gPSBjLT5ZOwotCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJYyA9IGMtPm5leHQ7CiAJCQkJfQorCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgJiYgIWZyb20pIHsKKwkJCQkJCWZyb20gPSBjLT5ZOworCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgeworCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQljID0gYy0+bmV4dDsKKwkJCQl9CiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJfQogCisJCWlmICghdGFza19mcm9tKSB7CisJCQl0YXNrX2Zyb20gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX2Zyb20sICJbJWldIiwgd2UtPndha2VyKTsKKwkJfQorCQlpZiAoIXRhc2tfdG8pIHsKKwkJCXRhc2tfdG8gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX3RvLCAiWyVpXSIsIHdlLT53YWtlZSk7CisJCX0KKwogCQlpZiAod2UtPndha2VyID09IC0xKQogCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOwogCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCkBAIC03ODMsNiArODA2LDkgQEAKIAkJZWxzZQogCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOwogCQl3ZSA9IHdlLT5uZXh0OworCisJCWZyZWUodGFza19mcm9tKTsKKwkJZnJlZSh0YXNrX3RvKTsKIAl9CiB9CiAKQEAgLTg3MSw3ICs4OTcsNyBAQAogCQkvKiBubyBleGl0IG1hcmtlciwgdGFzayBrZXB0IHJ1bm5pbmcgdG8gdGhlIGVuZCAqLwogCQlpZiAocC0+ZW5kX3RpbWUgPT0gMCkKIAkJCXAtPmVuZF90aW1lID0gbGFzdF90aW1lOwotCQlpZiAocC0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQpCisJCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCAmJiAhcG93ZXJfb25seSkKIAkJCXAtPmRpc3BsYXkgPSAxOwogCiAJCWMgPSBwLT5hbGw7CkBAIC04ODIsNyArOTA4LDcgQEAKIAkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCiAJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CiAKLQkJCWlmIChjLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkgeworCQkJaWYgKGMtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkICYmICFwb3dlcl9vbmx5KSB7CiAJCQkJYy0+ZGlzcGxheSA9IDE7CiAJCQkJY291bnQrKzsKIAkJCX0KQEAgLTExMzQsNiArMTE2MCw4IEBACiAJCSAgICAib3V0cHV0IGZpbGUgbmFtZSIpLAogCU9QVF9JTlRFR0VSKCd3JywgIndpZHRoIiwgJnN2Z19wYWdlX3dpZHRoLAogCQkgICAgInBhZ2Ugd2lkdGgiKSwKKwlPUFRfQk9PTEVBTigncCcsICJwb3dlci1vbmx5IiwgJnBvd2VyX29ubHksCisJCSAgICAib3V0cHV0IHBvd2VyIGRhdGEgb25seSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDFjYTg4ODkuLmUyM2JjNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTY4Niw2ICs2ODYsOCBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOwpAQCAtNzgyLDYgKzc4NCw3IEBACiAJImV4aXRfaWRsZSIsCiAJIm13YWl0X2lkbGUiLAogCSJtd2FpdF9pZGxlX3dpdGhfaGludHMiLAorCSJwb2xsX2lkbGUiLAogCSJwcGM2NF9ydW5sYXRjaF9vZmYiLAogCSJwc2VyaWVzX2RlZGljYXRlZF9pZGxlX3NsZWVwIiwKIAlOVUxMCkBAIC0xMDI0LDcgKzEwMjcsNyBAQAogCWlmIChmZFtpXVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwogCi0JCWlmIChlcnIgPT0gRVBFUk0pCisJCWlmIChlcnIgPT0gRVBFUk0gfHwgZXJyID09IEVBQ0NFUykKIAkJCWRpZSgiTm8gcGVybWlzc2lvbiAtIGFyZSB5b3Ugcm9vdD9cbiIpOwogCQkvKgogCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IGU5ZDI1NmUuLjBjNWU0ZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC0yMTksMTAgKzIxOSw2IEBACiBtb3JlOgogCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CiAKLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewogCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwogCQlpbnQgcmVzOwpAQCAtMjM3LDcgKzIzMyw2IEBACiAKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCi0KIAlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKIAogCQkvKgpAQCAtMjkwLDcgKzI4NSw2IEBACiAJCQl1c2FnZV93aXRoX29wdGlvbnMoYW5ub3RhdGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCiAJc2V0dXBfcGFnZXIoKTsKIAogCXJldHVybiBfX2NtZF90cmFjZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0IGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CmluZGV4IGYxOTQ2ZDEuLmZkZDQyYTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAorKysgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKQEAgLTQ1NSwzICs0NTUsNiBAQAogCiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIGhhdmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQogd2VhayBzdHViIGh3X3BlcmZfZXZlbnRfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgorCitBcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBkLWNhY2hlIGFsaWFzc2luZyBpc3N1ZXMsIHN1Y2ggYXMgU3BhcmMgYW5kIEFSTSwKK3Nob3VsZCBzZWxlY3QgUEVSRl9VU0VfVk1BTExPQyBpbiBvcmRlciB0byBhdm9pZCB0aGVzZSBmb3IgcGVyZiBtbWFwKCkuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IGM1NjFkMTUuLjU0NTUyYTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1QRVJGLVZFUlNJT04tRklMRQotREVGX1ZFUj12MC4wLjEuUEVSRgorREVGX1ZFUj12MC4wLjIuUEVSRgogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKaW5kZXggM2Q1NjdmZS4uMGQ4Yzg1ZGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYworKysgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSAibW9kdWxlLmgiCiAKICNpbmNsdWRlIDxsaWJlbGYuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KICNpbmNsdWRlIDxnZWxmLmg+CiAjaW5jbHVkZSA8ZWxmLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CkBAIC00MDksMzUgKzQxMCw0MCBAQAogc3RhdGljIGludCBtb2RfZHNvX19sb2FkX21vZHVsZV9wYXRocyhzdHJ1Y3QgbW9kX2RzbyAqc2VsZikKIHsKIAlzdHJ1Y3QgdXRzbmFtZSB1dHM7Ci0JaW50IGNvdW50ID0gMCwgbGVuOworCWludCBjb3VudCA9IDAsIGxlbiwgZXJyID0gLTE7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJRklMRSAqZmlsZTsKLQljaGFyICpwYXRoOworCWNoYXIgKmRwYXRoLCAqZGlyOwogCXNpemVfdCBuOwogCiAJaWYgKHVuYW1lKCZ1dHMpIDwgMCkKLQkJZ290byBvdXRfZmFpbHVyZTsKKwkJcmV0dXJuIGVycjsKIAogCWxlbiA9IHN0cmxlbigiL2xpYi9tb2R1bGVzLyIpOwogCWxlbiArPSBzdHJsZW4odXRzLnJlbGVhc2UpOwogCWxlbiArPSBzdHJsZW4oIi9tb2R1bGVzLmRlcCIpOwogCi0JcGF0aCA9IGNhbGxvYygxLCBsZW4pOwotCWlmIChwYXRoID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZhaWx1cmU7CisJZHBhdGggPSBjYWxsb2MoMSwgbGVuICsgMSk7CisJaWYgKGRwYXRoID09IE5VTEwpCisJCXJldHVybiBlcnI7CiAKLQlzdHJjYXQocGF0aCwgIi9saWIvbW9kdWxlcy8iKTsKLQlzdHJjYXQocGF0aCwgdXRzLnJlbGVhc2UpOwotCXN0cmNhdChwYXRoLCAiL21vZHVsZXMuZGVwIik7CisJc3RyY2F0KGRwYXRoLCAiL2xpYi9tb2R1bGVzLyIpOworCXN0cmNhdChkcGF0aCwgdXRzLnJlbGVhc2UpOworCXN0cmNhdChkcGF0aCwgIi9tb2R1bGVzLmRlcCIpOwogCi0JZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7Ci0JZnJlZShwYXRoKTsKKwlmaWxlID0gZm9wZW4oZHBhdGgsICJyIik7CiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXRfZmFpbHVyZTsKIAorCWRpciA9IGRpcm5hbWUoZHBhdGgpOworCWlmICghZGlyKQorCQlnb3RvIG91dF9mYWlsdXJlOworCXN0cmNhdChkaXIsICIvIik7CisKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJY2hhciAqbmFtZSwgKnRtcDsKIAkJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCQljaGFyICpuYW1lLCAqcGF0aCwgKnRtcDsKKwkJRklMRSAqbW9kZmlsZTsKIAkJaW50IGxpbmVfbGVuOwogCiAJCWxpbmVfbGVuID0gZ2V0bGluZSgmbGluZSwgJm4sIGZpbGUpOwpAQCAtNDQ1LDE3ICs0NTEsNDEgQEAKIAkJCWJyZWFrOwogCiAJCWlmICghbGluZSkKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7CisJCQlicmVhazsKIAogCQlsaW5lWy0tbGluZV9sZW5dID0gJ1wwJzsgLyogXG4gKi8KIAotCQlwYXRoID0gc3RydG9rKGxpbmUsICI6Iik7CisJCXBhdGggPSBzdHJjaHIobGluZSwgJzonKTsKIAkJaWYgKCFwYXRoKQotCQkJZ290byBvdXRfZmFpbHVyZTsKKwkJCWJyZWFrOworCQkqcGF0aCA9ICdcMCc7CisKKwkJcGF0aCA9IHN0cmR1cChsaW5lKTsKKwkJaWYgKCFwYXRoKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzdHJzdHIocGF0aCwgZGlyKSkgeworCQkJaWYgKHN0cm5jbXAocGF0aCwgImtlcm5lbC8iLCA3KSkKKwkJCQlicmVhazsKKworCQkJZnJlZShwYXRoKTsKKwkJCXBhdGggPSBjYWxsb2MoMSwgc3RybGVuKGRpcikgKyBzdHJsZW4obGluZSkgKyAxKTsKKwkJCWlmICghcGF0aCkKKwkJCQlicmVhazsKKwkJCXN0cmNhdChwYXRoLCBkaXIpOworCQkJc3RyY2F0KHBhdGgsIGxpbmUpOworCQl9CisKKwkJbW9kZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7CisJCWlmIChtb2RmaWxlID09IE5VTEwpCisJCQlicmVhazsKKwkJZmNsb3NlKG1vZGZpbGUpOwogCiAJCW5hbWUgPSBzdHJkdXAocGF0aCk7Ci0JCW5hbWUgPSBzdHJ0b2sobmFtZSwgIi8iKTsKKwkJaWYgKCFuYW1lKQorCQkJYnJlYWs7CiAKKwkJbmFtZSA9IHN0cnRvayhuYW1lLCAiLyIpOwogCQl0bXAgPSBuYW1lOwogCiAJCXdoaWxlICh0bXApIHsKQEAgLTQ2MywyNiArNDkzLDI1IEBACiAJCQlpZiAodG1wKQogCQkJCW5hbWUgPSB0bXA7CiAJCX0KLQkJbmFtZSA9IHN0cnNlcCgmbmFtZSwgIi4iKTsKIAotCQkvKiBRdWlyazogcmVwbGFjZSAnLScgd2l0aCAnXycgaW4gc291bmQgbW9kdWxlcyAqLworCQluYW1lID0gc3Ryc2VwKCZuYW1lLCAiLiIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKKworCQkvKiBRdWlyazogcmVwbGFjZSAnLScgd2l0aCAnXycgaW4gYWxsIG1vZHVsZXMgKi8KIAkJZm9yIChsZW4gPSBzdHJsZW4obmFtZSk7IGxlbjsgbGVuLS0pIHsKIAkJCWlmICgqKG5hbWUrbGVuKSA9PSAnLScpCiAJCQkJKihuYW1lK2xlbikgPSAnXyc7CiAJCX0KIAogCQltb2R1bGUgPSBtb2R1bGVfX25ldyhuYW1lLCBwYXRoKTsKLQkJaWYgKCFtb2R1bGUpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQkJZ290byBvdXRfZmFpbHVyZTsKLQkJfQorCQlpZiAoIW1vZHVsZSkKKwkJCWJyZWFrOwogCQltb2RfZHNvX19pbnNlcnRfbW9kdWxlKHNlbGYsIG1vZHVsZSk7CiAKIAkJbW9kdWxlLT5zZWN0aW9ucyA9IHNlY19kc29fX25ld19kc28oInNlY3Rpb25zIik7Ci0JCWlmICghbW9kdWxlLT5zZWN0aW9ucykgewotCQkJZnByaW50ZihzdGRlcnIsICJsb2FkX21vZHVsZV9wYXRoczogYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQlnb3RvIG91dF9mYWlsdXJlOwotCQl9CisJCWlmICghbW9kdWxlLT5zZWN0aW9ucykKKwkJCWJyZWFrOwogCiAJCW1vZHVsZS0+YWN0aXZlID0gbW9kX2Rzb19fbG9hZF9zZWN0aW9ucyhtb2R1bGUpOwogCkBAIC00OTAsMTMgKzUxOSwyMCBAQAogCQkJY291bnQrKzsKIAl9CiAKLQlmcmVlKGxpbmUpOwotCWZjbG9zZShmaWxlKTsKLQotCXJldHVybiBjb3VudDsKKwlpZiAoZmVvZihmaWxlKSkKKwkJZXJyID0gY291bnQ7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfbW9kdWxlX3BhdGhzOiBtb2R1bGVzLmRlcCBwYXJzaW5nIGZhaWx1cmUhXG4iKTsKIAogb3V0X2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOworCWlmIChkcGF0aCkKKwkJZnJlZShkcGF0aCk7CisJaWYgKGZpbGUpCisJCWZjbG9zZShmaWxlKTsKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKKworCXJldHVybiBlcnI7CiB9CiAKIGludCBtb2RfZHNvX19sb2FkX21vZHVsZXMoc3RydWN0IG1vZF9kc28gKmRzbykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCAxM2FiNGI4Li44Y2ZiNDhjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0xNjUsMzMgKzE2NSwzMSBAQAogCURJUiAqc3lzX2RpciwgKmV2dF9kaXI7CiAJc3RydWN0IGRpcmVudCAqc3lzX25leHQsICpldnRfbmV4dCwgc3lzX2RpcmVudCwgZXZ0X2RpcmVudDsKIAljaGFyIGlkX2J1Zls0XTsKLQlpbnQgc3lzX2Rpcl9mZCwgZmQ7CisJaW50IGZkOwogCXU2NCBpZDsKIAljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOworCWNoYXIgZGlyX3BhdGhbTUFYUEFUSExFTl07CiAKIAlpZiAodmFsaWRfZGVidWdmc19tb3VudChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm4gTlVMTDsKIAogCXN5c19kaXIgPSBvcGVuZGlyKGRlYnVnZnNfcGF0aCk7CiAJaWYgKCFzeXNfZGlyKQotCQlnb3RvIGNsZWFudXA7Ci0Jc3lzX2Rpcl9mZCA9IGRpcmZkKHN5c19kaXIpOworCQlyZXR1cm4gTlVMTDsKIAogCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgewotCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAotCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7Ci0JCWlmIChkZmQgPT0gLTEpCisKKwkJc25wcmludGYoZGlyX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGRlYnVnZnNfcGF0aCwKKwkJCSBzeXNfZGlyZW50LmRfbmFtZSk7CisJCWV2dF9kaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwkJaWYgKCFldnRfZGlyKQogCQkJY29udGludWU7Ci0JCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKLQkJaWYgKCFldnRfZGlyKSB7Ci0JCQljbG9zZShkZmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7Ci0JCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzL2lkIiwKKworCQkJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy9pZCIsIGRpcl9wYXRoLAogCQkJCSBldnRfZGlyZW50LmRfbmFtZSk7Ci0JCQlmZCA9IG9wZW5hdChldnRfZGlyX2ZkLCBldnRfcGF0aCwgT19SRE9OTFkpOworCQkJZmQgPSBvcGVuKGV2dF9wYXRoLCBPX1JET05MWSk7CiAJCQlpZiAoZmQgPCAwKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHJlYWQoZmQsIGlkX2J1Ziwgc2l6ZW9mKGlkX2J1ZikpIDwgMCkgewpAQCAtMjI1LDcgKzIyMyw2IEBACiAJCWNsb3NlZGlyKGV2dF9kaXIpOwogCX0KIAotY2xlYW51cDoKIAljbG9zZWRpcihzeXNfZGlyKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTY5NCw3ICs2OTEsMTAgQEAKIAlGSUxFICpmaWxlOwogCWludCBpZDsKIAotCXNwcmludGYoZmlsZW5hbWUsICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy8lcy9pZCIsIG9yZ25hbWUpOworCXNwcmludGYoZmlsZW5hbWUsICIlcy8iLCBkZWJ1Z2ZzX3BhdGgpOworCXN0cm5jYXQoZmlsZW5hbWUsIG9yZ25hbWUsIHN0cmxlbihvcmduYW1lKSk7CisJc3RyY2F0KGZpbGVuYW1lLCAiL2lkIik7CisKIAljID0gc3RyY2hyKGZpbGVuYW1lLCAnOicpOwogCWlmIChjKQogCQkqYyA9ICcvJzsKQEAgLTc2MSwyOCArNzYxLDI0IEBACiB7CiAJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKIAlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OwotCWludCBzeXNfZGlyX2ZkOwogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybjsKIAogCXN5c19kaXIgPSBvcGVuZGlyKGRlYnVnZnNfcGF0aCk7CiAJaWYgKCFzeXNfZGlyKQotCQlnb3RvIGNsZWFudXA7Ci0Jc3lzX2Rpcl9mZCA9IGRpcmZkKHN5c19kaXIpOworCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9zdWJzeXN0ZW0oc3lzX2Rpciwgc3lzX2RpcmVudCwgc3lzX25leHQpIHsKLQkJaW50IGRmZCA9IG9wZW5hdChzeXNfZGlyX2ZkLCBzeXNfZGlyZW50LmRfbmFtZSwKLQkJCQkgT19SRE9OTFl8T19ESVJFQ1RPUlkpLCBldnRfZGlyX2ZkOwotCQlpZiAoZGZkID09IC0xKQorCisJCXNucHJpbnRmKGRpcl9wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMiLCBkZWJ1Z2ZzX3BhdGgsCisJCQkgc3lzX2RpcmVudC5kX25hbWUpOworCQlldnRfZGlyID0gb3BlbmRpcihkaXJfcGF0aCk7CisJCWlmICghZXZ0X2RpcikKIAkJCWNvbnRpbnVlOwotCQlldnRfZGlyID0gZmRvcGVuZGlyKGRmZCk7Ci0JCWlmICghZXZ0X2RpcikgewotCQkJY2xvc2UoZGZkKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWV2dF9kaXJfZmQgPSBkaXJmZChldnRfZGlyKTsKKwogCQlmb3JfZWFjaF9ldmVudChzeXNfZGlyZW50LCBldnRfZGlyLCBldnRfZGlyZW50LCBldnRfbmV4dCkgewogCQkJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlczolcyIsCiAJCQkJIHN5c19kaXJlbnQuZF9uYW1lLCBldnRfZGlyZW50LmRfbmFtZSk7CkBAIC03OTEsOCArNzg3LDYgQEAKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKIAl9Ci0KLWNsZWFudXA6CiAJY2xvc2VkaXIoc3lzX2Rpcik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwppbmRleCBhNzc4ZmQwLi5iMzYzN2RiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIGludCBzdmdfcGFnZV93aWR0aCA9IDEwMDA7CiAKLSNkZWZpbmUgTUlOX1RFWFRfU0laRSAwLjAwMQorI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDEKIAogc3RhdGljIHU2NCB0b3RhbF9oZWlnaHQ7CiBzdGF0aWMgRklMRSAqc3ZnZmlsZTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QucHJvY2VzczIgeyBmaWxsOnJnYigxODAsMTgwLDE4MCk7IGZpbGwtb3BhY2l0eTowLjk7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5zYW1wbGUgICB7IGZpbGw6cmdiKCAgMCwgIDAsMjU1KTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmJsb2NrZWQgIHsgZmlsbDpyZ2IoMjU1LCAgMCwgIDApOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwotCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3Qud2FpdGluZyAgeyBmaWxsOnJnYigyMTQsMjE0LCAgMCk7IGZpbGwtb3BhY2l0eTowLjM7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIyNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LldBSVRJTkcgIHsgZmlsbDpyZ2IoMjU1LDIxNCwgNDgpOyBmaWxsLW9wYWNpdHk6MC42OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuY3B1ICAgICAgeyBmaWxsOnJnYigxOTIsMTkyLDE5Mik7IGZpbGwtb3BhY2l0eTowLjI7IHN0cm9rZS13aWR0aDowLjU7IHN0cm9rZTpyZ2IoMTI4LDEyOCwxMjgpOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wc3RhdGUgICB7IGZpbGw6cmdiKDEyOCwxMjgsMTI4KTsgZmlsbC1vcGFjaXR5OjAuODsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKQEAgLTIxNyw2ICsyMTcsMTggQEAKIAkJfQogCQlmY2xvc2UoZmlsZSk7CiAJfQorCisJLyogQ1BVIHR5cGUgKi8KKwlmaWxlID0gZm9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcyIsICJyIik7CisJaWYgKGZpbGUpIHsKKwkJd2hpbGUgKGZnZXRzKGJ1ZiwgMjU1LCBmaWxlKSkgeworCQkJdW5zaWduZWQgaW50IGZyZXE7CisJCQlmcmVxID0gc3RydG91bGwoYnVmLCBOVUxMLCAxMCk7CisJCQlpZiAoZnJlcSA+IG1heF9mcmVxKQorCQkJCW1heF9mcmVxID0gZnJlcTsKKwkJfQorCQlmY2xvc2UoZmlsZSk7CisJfQogCXJldHVybiBjcHVfbTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGZkM2Q5YzguLjIyNmY0NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTMyNCw4ICszMjQsNyBAQAogewogCXJldHVybiBlbGZfc3ltX190eXBlKHN5bSkgPT0gU1RUX0ZVTkMgJiYKIAkgICAgICAgc3ltLT5zdF9uYW1lICE9IDAgJiYKLQkgICAgICAgc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUYgJiYKLQkgICAgICAgc3ltLT5zdF9zaXplICE9IDA7CisJICAgICAgIHN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBlbGZfc3ltX19pc19sYWJlbChjb25zdCBHRWxmX1N5bSAqc3ltKQpAQCAtNDE0LDcgKzQxMyw3IEBACiAJaWYgKGZkIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllbGYgPSBlbGZfYmVnaW4oZmQsIEVMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CiAJaWYgKGVsZiA9PSBOVUxMKQogCQlnb3RvIG91dF9jbG9zZTsKIApAQCAtNTM0LDcgKzUzMyw3IEBACiAJRWxmICplbGY7CiAJaW50IG5yID0gMCwga2VybmVsID0gIXN0cmNtcCgiW2tlcm5lbF0iLCBzZWxmLT5uYW1lKTsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpIHsKIAkJaWYgKHYpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW5ub3QgcmVhZCAlcyBFTEYgZmlsZS5cbiIsCkBAIC02NzYsNyArNjc1LDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpIHsKIAkJaWYgKHYpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW5ub3QgcmVhZCAlcyBFTEYgZmlsZS5cbiIsCkBAIC04MzMsNyArODMyLDcgQEAKIAlzdHJ1Y3QgbW9kX2RzbyAqbW9kcyA9IG1vZF9kc29fX25ld19kc28oIm1vZHVsZXMiKTsKIAlzdHJ1Y3QgbW9kdWxlICpwb3M7CiAJc3RydWN0IHJiX25vZGUgKm5leHQ7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBjb3VudCA9IDA7CiAKIAllcnIgPSBtb2RfZHNvX19sb2FkX21vZHVsZXMobW9kcyk7CiAKQEAgLTg1MiwxNCArODUxLDE2IEBACiAJCQlicmVhazsKIAogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKKwkJY291bnQgKz0gZXJyOwogCX0KIAogCWlmIChlcnIgPCAwKSB7CiAJCW1vZF9kc29fX2RlbGV0ZV9tb2R1bGVzKG1vZHMpOwogCQltb2RfZHNvX19kZWxldGVfc2VsZihtb2RzKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRzb19fZmlsbF9zeW1ib2xfaG9sZXMoc3RydWN0IGRzbyAqc2VsZikKQEAgLTkxMyw4ICs5MTQsMTUgQEAKIAogCWlmICh2bWxpbnV4KSB7CiAJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIHZtbGludXgsIGZpbHRlciwgdik7Ci0JCWlmIChlcnIgPiAwICYmIHVzZV9tb2R1bGVzKQotCQkJZXJyID0gZHNvX19sb2FkX21vZHVsZXMoc2VsZiwgZmlsdGVyLCB2KTsKKwkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpIHsKKwkJCWludCBzeW1zID0gZHNvX19sb2FkX21vZHVsZXMoc2VsZiwgZmlsdGVyLCB2KTsKKworCQkJaWYgKHN5bXMgPCAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJkc29fX2xvYWRfbW9kdWxlcyBmYWlsZWQhXG4iKTsKKwkJCQlyZXR1cm4gc3ltczsKKwkJCX0KKwkJCWVyciArPSBzeW1zOworCQl9CiAJfQogCiAJaWYgKGVyciA8PSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDZlODQ5MDcuLjgyOWRhOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTI3LDYgKzI3LDE2IEBACiAjZW5kaWYKICNlbmRpZgogCisvKgorICogbGliZWxmIDAuOC54IGFuZCBlYXJsaWVyIGRvIG5vdCBzdXBwb3J0IEVMRl9DX1JFQURfTU1BUDsKKyAqIGZvciBuZXdlciB2ZXJzaW9ucyB3ZSBjYW4gdXNlIG1tYXAgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZToKKyAqLworI2lmZGVmIExJQkVMRl9OT19NTUFQCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFECisjZWxzZQorIyBkZWZpbmUgUEVSRl9FTEZfQ19SRUFEX01NQVAgRUxGX0NfUkVBRF9NTUFQCisjZW5kaWYKKwogI2lmbmRlZiBETUdMX1BBUkFNUwogI2RlZmluZSBETUdMX1BBUkFNUyAgICAgICgxIDw8IDApICAgICAgIC8qIEluY2x1ZGUgZnVuY3Rpb24gYXJncyAqLwogI2RlZmluZSBETUdMX0FOU0kgICAgICAgICgxIDw8IDEpICAgICAgIC8qIEluY2x1ZGUgY29uc3QsIHZvbGF0aWxlLCBldGMgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKaW5kZXggZjZhODQzNy4uNTVjOTY1OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKQEAgLTYxOCw3ICs2MTgsNyBAQAogfQogCiBzdGF0aWMgaW50IHRlc3RfdHlwZV90b2tlbihlbnVtIGV2ZW50X3R5cGUgdHlwZSwgY2hhciAqdG9rZW4sCi0JCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpleHBlY3RfdG9rKQorCQkgICAgZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqZXhwZWN0X3RvaykKIHsKIAlpZiAodHlwZSAhPSBleHBlY3QpIHsKIAkJZGllKCJFcnJvcjogZXhwZWN0ZWQgdHlwZSAlZCBidXQgcmVhZCAlZCIsCkBAIC02NTAsNyArNjUwLDcgQEAKIAlyZXR1cm4gX19yZWFkX2V4cGVjdF90eXBlKGV4cGVjdCwgdG9rLCAxKTsKIH0KIAotc3RhdGljIGludCBfX3JlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY2hhciAqc3RyLCBpbnQgbmV3bGluZV9vaykKK3N0YXRpYyBpbnQgX19yZWFkX2V4cGVjdGVkKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5ld2xpbmVfb2spCiB7CiAJZW51bSBldmVudF90eXBlIHR5cGU7CiAJY2hhciAqdG9rZW47CkBAIC02NjgsMTIgKzY2OCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY2hhciAqc3RyKQorc3RhdGljIGludCByZWFkX2V4cGVjdGVkKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlyZXR1cm4gX19yZWFkX2V4cGVjdGVkKGV4cGVjdCwgc3RyLCAxKTsKIH0KIAotc3RhdGljIGludCByZWFkX2V4cGVjdGVkX2l0ZW0oZW51bSBldmVudF90eXBlIGV4cGVjdCwgY2hhciAqc3RyKQorc3RhdGljIGludCByZWFkX2V4cGVjdGVkX2l0ZW0oZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyKQogewogCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDApOwogfQpAQCAtMTk2OCwxMCArMTk2OCwxMSBAQAogCXsgIk5FVF9UWF9TT0ZUSVJRIiwgMiB9LAogCXsgIk5FVF9SWF9TT0ZUSVJRIiwgMyB9LAogCXsgIkJMT0NLX1NPRlRJUlEiLCA0IH0sCi0JeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNSB9LAotCXsgIlNDSEVEX1NPRlRJUlEiLCA2IH0sCi0JeyAiSFJUSU1FUl9TT0ZUSVJRIiwgNyB9LAotCXsgIlJDVV9TT0ZUSVJRIiwgOCB9LAorCXsgIkJMT0NLX0lPUE9MTF9TT0ZUSVJRIiwgNSB9LAorCXsgIlRBU0tMRVRfU09GVElSUSIsIDYgfSwKKwl7ICJTQ0hFRF9TT0ZUSVJRIiwgNyB9LAorCXsgIkhSVElNRVJfU09GVElSUSIsIDggfSwKKwl7ICJSQ1VfU09GVElSUSIsIDkgfSwKIAogCXsgIkhSVElNRVJfTk9SRVNUQVJUIiwgMCB9LAogCXsgIkhSVElNRVJfUkVTVEFSVCIsIDEgfSwKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDAzNGE3OTguLjc0OTVjZTMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtODUwLDYgKzg1MCwxOSBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKKwkJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkJcHRlX3QgcHRlKQoreworCXN0cnVjdCBrdm0gKmt2bSA9IG1tdV9ub3RpZmllcl90b19rdm0obW4pOworCisJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKwlrdm0tPm1tdV9ub3RpZmllcl9zZXErKzsKKwlrdm1fc2V0X3NwdGVfaHZhKGt2bSwgYWRkcmVzcywgcHRlKTsKKwlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKIAkJCQkJCSAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LApAQCAtOTI5LDYgKzk0Miw3IEBACiAJLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsCiAJLmludmFsaWRhdGVfcmFuZ2VfZW5kCT0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCwKIAkuY2xlYXJfZmx1c2hfeW91bmcJPSBrdm1fbW11X25vdGlmaWVyX2NsZWFyX2ZsdXNoX3lvdW5nLAorCS5jaGFuZ2VfcHRlCQk9IGt2bV9tbXVfbm90aWZpZXJfY2hhbmdlX3B0ZSwKIAkucmVsZWFzZQkJPSBrdm1fbW11X25vdGlmaWVyX3JlbGVhc2UsCiB9OwogI2VuZGlmIC8qIENPTkZJR19NTVVfTk9USUZJRVIgJiYgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIgKi8KQEAgLTE3MTMsNyArMTcyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZjcHVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBrdm1fdmNwdV92bV9vcHMgPSB7CiAJLmZhdWx0ID0ga3ZtX3ZjcHVfZmF1bHQsCiB9OwogCkBAIC0yMzE3LDcgKzIzMzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92bV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92bV92bV9vcHMgPSB7CiAJLmZhdWx0ID0ga3ZtX3ZtX2ZhdWx0LAogfTsKIApAQCAtMjYyNSw3ICsyNjM5LDcgQEAKIAogREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodmNwdV9zdGF0X2ZvcHMsIHZjcHVfc3RhdF9nZXQsIE5VTEwsICIlbGx1XG4iKTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnN0YXRfZm9wc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnN0YXRfZm9wc1tdID0gewogCVtLVk1fU1RBVF9WQ1BVXSA9ICZ2Y3B1X3N0YXRfZm9wcywKIAlbS1ZNX1NUQVRfVk1dICAgPSAmdm1fc3RhdF9mb3BzLAogfTsKQEAgLTI3MDMsOCArMjcxNyw2IEBACiAJaW50IHI7CiAJaW50IGNwdTsKIAotCWt2bV9pbml0X2RlYnVnKCk7Ci0KIAlyID0ga3ZtX2FyY2hfaW5pdChvcGFxdWUpOwogCWlmIChyKQogCQlnb3RvIG91dF9mYWlsOwpAQCAtMjc3MSw2ICsyNzgzLDggQEAKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfaW4gPSBrdm1fc2NoZWRfaW47CiAJa3ZtX3ByZWVtcHRfb3BzLnNjaGVkX291dCA9IGt2bV9zY2hlZF9vdXQ7CiAKKwlrdm1faW5pdF9kZWJ1ZygpOworCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgpAQCAtMjc5Myw3ICsyODA3LDYgQEAKIG91dDoKIAlrdm1fYXJjaF9leGl0KCk7CiBvdXRfZmFpbDoKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCXJldHVybiByOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2luaXQpOwpAQCAtMjgwMSw2ICsyODE0LDcgQEAKIHZvaWQga3ZtX2V4aXQodm9pZCkKIHsKIAl0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTsKKwlrdm1fZXhpdF9kZWJ1ZygpOwogCW1pc2NfZGVyZWdpc3Rlcigma3ZtX2Rldik7CiAJa21lbV9jYWNoZV9kZXN0cm95KGt2bV92Y3B1X2NhY2hlKTsKIAlzeXNkZXZfdW5yZWdpc3Rlcigma3ZtX3N5c2Rldik7CkBAIC0yODEwLDcgKzI4MjQsNiBAQAogCW9uX2VhY2hfY3B1KGhhcmR3YXJlX2Rpc2FibGUsIE5VTEwsIDEpOwogCWt2bV9hcmNoX2hhcmR3YXJlX3Vuc2V0dXAoKTsKIAlrdm1fYXJjaF9leGl0KCk7Ci0Ja3ZtX2V4aXRfZGVidWcoKTsKIAlmcmVlX2NwdW1hc2tfdmFyKGNwdXNfaGFyZHdhcmVfZW5hYmxlZCk7CiAJX19mcmVlX3BhZ2UoYmFkX3BhZ2UpOwogfQo=